Global favorites
src/features/favorites/global/ — RU-centric підфіча домену Favorites. Вона показує агрегований список RU усієї Family та пов’язані TU relations.
src/features/favorites/
├── global/
├── by_tu/
└── shared/Стара окрема директорія src/features/global_favorites/ видалена. global і by_tu не є режимами одного універсального компонента: вони мають окремі state/query models, але спільно використовують notes, contacts, response parsers, sorting, async counter і request guards.
Use cases
Director, top manager і team lead використовують Global favorites, щоб знайти RU на рівні всієї Family, переглянути пов’язані TU та відкрити деталі конкретної relation.
Відмінність від Favorites by TU
| Екран | Основна вісь | Початкова дія | | --------------------- | ----------------- | ----------------------------- | ---------- | | Favorites by TU | TU → її RU | вибрати TU | | Global favorites | RU → пов’язані TU | знайти RU у загальному списку |
Доступи та маршрути
director—/ceo/{family-route}/global_favorites;top_manager—/top_manager/{family-route}/global_favorites;team_lead—/teamlead/{family-route}/global_favorites.
{family-route}: golden, udate, chathouse або talkytimes. Усередині domain talkytimes мапиться на prime.
Top manager залишається окремою frontend role, але для details використовує чинний director backend endpoint. Це ізольовано в route/config boundary і не маскує роль у UI-моделі.
Основний список
- автоматичне завантаження;
- search із submit і reset сторінки;
- pagination;
asc/descsorting;- inline редагування global RU title;
- перехід RU → TU details;
- latest-request protection і mutation locks.
Malformed response не потрапляє безпосередньо в UI: list, detail та update responses проходять runtime parsers і normalization. Partial або null update response доповнюється поточними даними. Server ID закріплений окремо й не може бути перезаписаний response/payload полем.
Деталі RU → TU
Окремий details controller керує:
- immutable sorting;
- active-row rule;
- inline relation updates;
- Golden contact e-mail flow;
- relation notes;
- per-row mutation locks.
Рядок без реального server ID залишається доступним для перегляду, але mutation controls та notes action вимкнені. Значення дат і чисел мають читабельний fallback -; null не відображається як NaN або штучний 0.00.
У Golden значення Contacts = Yes вимагає валідний e-mail; непідтверджений e-mail відображається як warning state.
Нотатки
Modal містить:
Admin's title— global RU title;Operator's title— title relation TU ↔ RU;- manual notes;
- AI notes, якщо Family підтримує їх читання.
Manual notes можна створювати та hide/unhide. AI notes у Global Favorites лише read-only: жодних approve/reject controls і review API calls немає.
Backend moderation status впливає тільки на колір AI note:
- approved — зелений;
- rejected — червоний;
- pending/невідомий — нейтральний.
Manual й AI requests виконуються незалежно, тому частковий failure не приховує успішно завантажені notes.
API ownership
- main list/update —
global/config.tsіglobal/api.ts; - details update —
global/details/config.jsтаglobal/api.ts; - family-specific notes endpoints —
favorites/shared/notes/config.js; - request/response envelopes —
favorites/shared/api*.ts; - family-specific backend identifiers — adapters/config boundary;
- усі endpoint constants —
favorites/endpoints.js.
Legacy utility-файлів favoritesMenData.js і globalFavoritesData.js більше немає. Backend-owned URL segments і payload fields на кшталт globalMan, manId або ladyId збережені на API boundary.
Зв’язки
- favorites — TU-centric екран того самого домену;
- updateFavoriteByIdForGlobal (Golden) — оновлення relation у Global favorites.