Концепції, цінність і типові сценарії
Концепції, цінність і типові сценарії
Preparing Ring content
Preparing Ring content
Preparing Ring content
Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Публічні поверхні /{username} є окремими — див. Public Profile Pages. Каталог сутностей, на якому працює Organization, описано в Entities.
Авторизовані учасники керують основними даними облікового запису на /profile. На вкладці Professional працюють три складені віджети з components/profile/ (UI застосунку — не MDX ring-віджети):
| Віджет | Завдання |
|---|---|
| OrganizationEntitySelect | Вибір організації з усіх Entities через Davinci-droplist |
| PositionTagCloud / SkillsTagCloud | Хмари множинних тегів FsModal (спільний ProfileTagCloud) |
| CurriculumVitaeWidget | Редактор CV у Markdown + завантаження файлу profile:cv |
Людський каталог (із місцями виклику Davinci-droplist): components/docs/WIDGETS-README.md → App UI profile widgets. Машинний індекс: AI-CONTEXT/concepts/ring-docs.nodus.json → ring_widgets.index.sections.app_ui_profile.
Професійні поля перетворюють порожній обліковий запис на обличчя, якому можна доручити найм або партнерство: яку організацію представляє учасник, які ролі та навички заявляє, і яке CV може редагувати на телефоні без боротьби з відступами chrome.
Типові сценарії:
/profile → Professional → натискає Organization → бачить список сутностей із пошуком (FsModal) → вибір зберігається одразу.Наступний крок: публічне /{username} як представлення довіри після заповнення Professional-полів.
Залежність: OrganizationEntitySelect перелічує Entities через GET /api/entities.
Той самий процес: основні дані /profile та Auth.js session.update після updateProfile.
Див. також: публікації використовують useAutoSave для /api/publications; чернетки CV використовують натомість useLocalStorage.
Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Публічні поверхні /{username} є окремими — див. Public Profile Pages. Каталог сутностей, на якому працює Organization, описано в Entities.
Авторизовані учасники керують основними даними облікового запису на /profile. На вкладці Professional працюють три складені віджети з components/profile/ (UI застосунку — не MDX ring-віджети):
| Віджет | Завдання |
|---|---|
| OrganizationEntitySelect | Вибір організації з усіх Entities через Davinci-droplist |
| PositionTagCloud / SkillsTagCloud | Хмари множинних тегів FsModal (спільний ProfileTagCloud) |
| CurriculumVitaeWidget | Редактор CV у Markdown + завантаження файлу profile:cv |
Людський каталог (із місцями виклику Davinci-droplist): components/docs/WIDGETS-README.md → App UI profile widgets. Машинний індекс: AI-CONTEXT/concepts/ring-docs.nodus.json → ring_widgets.index.sections.app_ui_profile.
Професійні поля перетворюють порожній обліковий запис на обличчя, якому можна доручити найм або партнерство: яку організацію представляє учасник, які ролі та навички заявляє, і яке CV може редагувати на телефоні без боротьби з відступами chrome.
Типові сценарії:
/profile → Professional → натискає Organization → бачить список сутностей із пошуком (FsModal) → вибір зберігається одразу.Наступний крок: публічне /{username} як представлення довіри після заповнення Professional-полів.
Залежність: OrganizationEntitySelect перелічує Entities через GET /api/entities.
Той самий процес: основні дані /profile та Auth.js session.update після updateProfile.
Див. також: публікації використовують useAutoSave для /api/publications; чернетки CV використовують натомість useLocalStorage.
Використовуйте вкладки Founder / Developer на бічній панелі документації, щоб відфільтрувати цю сторінку. Публічні поверхні /{username} є окремими — див. Public Profile Pages. Каталог сутностей, на якому працює Organization, описано в Entities.
Авторизовані учасники керують основними даними облікового запису на /profile. На вкладці Professional працюють три складені віджети з components/profile/ (UI застосунку — не MDX ring-віджети):
| Віджет | Завдання |
|---|---|
| OrganizationEntitySelect | Вибір організації з усіх Entities через Davinci-droplist |
| PositionTagCloud / SkillsTagCloud | Хмари множинних тегів FsModal (спільний ProfileTagCloud) |
| CurriculumVitaeWidget | Редактор CV у Markdown + завантаження файлу profile:cv |
Людський каталог (із місцями виклику Davinci-droplist): components/docs/WIDGETS-README.md → App UI profile widgets. Машинний індекс: AI-CONTEXT/concepts/ring-docs.nodus.json → ring_widgets.index.sections.app_ui_profile.
Професійні поля перетворюють порожній обліковий запис на обличчя, якому можна доручити найм або партнерство: яку організацію представляє учасник, які ролі та навички заявляє, і яке CV може редагувати на телефоні без боротьби з відступами chrome.
Типові сценарії:
/profile → Professional → натискає Organization → бачить список сутностей із пошуком (FsModal) → вибір зберігається одразу.Наступний крок: публічне /{username} як представлення довіри після заповнення Professional-полів.
Залежність: OrganizationEntitySelect перелічує Entities через GET /api/entities.
Той самий процес: основні дані /profile та Auth.js session.update після updateProfile.
Див. також: публікації використовують useAutoSave для /api/publications; чернетки CV використовують натомість useLocalStorage.
Список організацій у droplist читає той самий каталог Entities, до якого приєднуються та який демонструють учасники.
updateProfilecurriculumVitaeorganizationpositionskills| Завантаження | POST /api/uploads, призначення profile:cv (lib/uploads/upload-types.ts) |
| Форма сховища | users.data.curriculumVitae (CurriculumVitae у features/auth/types.ts) |
| Чернетки | ключ useLocalStorage profile_cv_draft_{userId} + useDebounce (той самий безпечний для hydration шаблон, що й у chat composer) |
| Оболонка | FsModal — мобільні hideTitleOnMobile, closeClassName="max-sm:hidden", футер Close + Save & Exit |
OrganizationEntitySelect — мігроване місце виклику Davinci-droplist (theme enhancer §7 / DL11), поряд із CountrySelect, TimezoneSelect, ProductRepSelect, VendorEntitySelect. ProfileTagCloud повторно використовує DavinciDroplistItem + QuickSearchFilter усередині FsModal для підтвердження множинних тегів (не single-select із закриттям після натискання).
На десктопі залишаються підписи Cancel + Save і стандартна кнопка .modal-close-button у правому верхньому куті.
Імпортуйте OrganizationEntitySelect у вкладку Professional; передайте поточний рядок organization і onSaved, щоб оновити локальний стан профілю після updateProfile.
Використовуйте обгортки PositionTagCloud / SkillsTagCloud (або безпосередньо ProfileTagCloud із field + knownTags). Вибрані чипи відображаються і зовні, і всередині FsModal.
Змонтуйте CurriculumVitaeWidget із value={user.curriculumVitae}. Переконайтеся, що призначення завантаження profile:cv дозволене в upload-core, а updateProfile розбирає JSON curriculumVitae у users.data.
Поглиблення: App UI profile widgets у WIDGETS-README + секція ring-docs.nodus app_ui_profile.
Список організацій у droplist читає той самий каталог Entities, до якого приєднуються та який демонструють учасники.
updateProfilecurriculumVitaeorganizationpositionskills| Завантаження | POST /api/uploads, призначення profile:cv (lib/uploads/upload-types.ts) |
| Форма сховища | users.data.curriculumVitae (CurriculumVitae у features/auth/types.ts) |
| Чернетки | ключ useLocalStorage profile_cv_draft_{userId} + useDebounce (той самий безпечний для hydration шаблон, що й у chat composer) |
| Оболонка | FsModal — мобільні hideTitleOnMobile, closeClassName="max-sm:hidden", футер Close + Save & Exit |
OrganizationEntitySelect — мігроване місце виклику Davinci-droplist (theme enhancer §7 / DL11), поряд із CountrySelect, TimezoneSelect, ProductRepSelect, VendorEntitySelect. ProfileTagCloud повторно використовує DavinciDroplistItem + QuickSearchFilter усередині FsModal для підтвердження множинних тегів (не single-select із закриттям після натискання).
На десктопі залишаються підписи Cancel + Save і стандартна кнопка .modal-close-button у правому верхньому куті.
Імпортуйте OrganizationEntitySelect у вкладку Professional; передайте поточний рядок organization і onSaved, щоб оновити локальний стан профілю після updateProfile.
Використовуйте обгортки PositionTagCloud / SkillsTagCloud (або безпосередньо ProfileTagCloud із field + knownTags). Вибрані чипи відображаються і зовні, і всередині FsModal.
Змонтуйте CurriculumVitaeWidget із value={user.curriculumVitae}. Переконайтеся, що призначення завантаження profile:cv дозволене в upload-core, а updateProfile розбирає JSON curriculumVitae у users.data.
Поглиблення: App UI profile widgets у WIDGETS-README + секція ring-docs.nodus app_ui_profile.
Список організацій у droplist читає той самий каталог Entities, до якого приєднуються та який демонструють учасники.
updateProfilecurriculumVitaeorganizationpositionskills| Завантаження | POST /api/uploads, призначення profile:cv (lib/uploads/upload-types.ts) |
| Форма сховища | users.data.curriculumVitae (CurriculumVitae у features/auth/types.ts) |
| Чернетки | ключ useLocalStorage profile_cv_draft_{userId} + useDebounce (той самий безпечний для hydration шаблон, що й у chat composer) |
| Оболонка | FsModal — мобільні hideTitleOnMobile, closeClassName="max-sm:hidden", футер Close + Save & Exit |
OrganizationEntitySelect — мігроване місце виклику Davinci-droplist (theme enhancer §7 / DL11), поряд із CountrySelect, TimezoneSelect, ProductRepSelect, VendorEntitySelect. ProfileTagCloud повторно використовує DavinciDroplistItem + QuickSearchFilter усередині FsModal для підтвердження множинних тегів (не single-select із закриттям після натискання).
На десктопі залишаються підписи Cancel + Save і стандартна кнопка .modal-close-button у правому верхньому куті.
Імпортуйте OrganizationEntitySelect у вкладку Professional; передайте поточний рядок organization і onSaved, щоб оновити локальний стан профілю після updateProfile.
Використовуйте обгортки PositionTagCloud / SkillsTagCloud (або безпосередньо ProfileTagCloud із field + knownTags). Вибрані чипи відображаються і зовні, і всередині FsModal.
Змонтуйте CurriculumVitaeWidget із value={user.curriculumVitae}. Переконайтеся, що призначення завантаження profile:cv дозволене в upload-core, а updateProfile розбирає JSON curriculumVitae у users.data.
Поглиблення: App UI profile widgets у WIDGETS-README + секція ring-docs.nodus app_ui_profile.
// Draft key SSOT (curriculum-vitae-widget.tsx)
const draftKey = userId ? `profile_cv_draft_${userId}` : 'profile_cv_draft'
const [storedDraft, setStoredDraft] = useLocalStorage<string>(draftKey, '')
max-sm: повний viewport, body padding 0, header прихований
footer: [Close] ············ [Save & Exit]
draft: useLocalStorage autosave while open
action: Save & Exit → updateProfile → clear draft → close
// Draft key SSOT (curriculum-vitae-widget.tsx)
const draftKey = userId ? `profile_cv_draft_${userId}` : 'profile_cv_draft'
const [storedDraft, setStoredDraft] = useLocalStorage<string>(draftKey, '')
max-sm: повний viewport, body padding 0, header прихований
footer: [Close] ············ [Save & Exit]
draft: useLocalStorage autosave while open
action: Save & Exit → updateProfile → clear draft → close
// Draft key SSOT (curriculum-vitae-widget.tsx)
const draftKey = userId ? `profile_cv_draft_${userId}` : 'profile_cv_draft'
const [storedDraft, setStoredDraft] = useLocalStorage<string>(draftKey, '')
max-sm: повний viewport, body padding 0, header прихований
footer: [Close] ············ [Save & Exit]
draft: useLocalStorage autosave while open
action: Save & Exit → updateProfile → clear draft → close