Favorites (per TU)
src/features/favorites/by_tu/ — єдиний TU-centric модуль для operator, team_lead і top_manager у Family udate, prime/Talkytimes, chathouse та golden.
Фіча входить до спільного домену:
src/features/favorites/
├── by_tu/
├── global/
└── shared/by_tu і global мають окремі controllers та UI, але перевикористовують спільні API helpers, notes, select/contact modal, dates, sorting і request guards. Legacy-реалізацій favorites_men у role-папках більше немає.
Суть
Для вибраної TU показуються її RU-фаворити та календар активності за місяць. По кожному RU користувач бачить або редагує доступні для ролі й Family поля: тип, black list, контакти, ім’я та нотатку. Active Favorite — активний зв’язок TU ↔ RU; правило підсвічування залежить від Family.
Use cases
- operator переглядає RU-фаворитів власної TU та оновлює доступні робочі поля;
- team lead / top manager аналізує RU-фаворитів підлеглих TU, календар активності й доступні керівній ролі поля.
Доступи
- operator — власні TU;
- team_lead — дерево
operator → TU; - top_manager — дерево
team lead → operator → TU.
Routes збережені:
/operator/favorites_ru;/teamlead/{family}/favorites_ru;/top_manager/{family}/favorites_ru.
Route/UI назва talkytimes на domain boundary мапиться на prime. Backend ID конкретної Family ізольовані в adapters і не проходять у компоненти як умовна бізнес-логіка.
Архітектура
Index.js— feature entry point;useFavoritesByTu.js— orchestration, request gates, partial loading і mutation locks;adapters.js— endpoints, payloads, runtime normalization та family-specific IDs;capabilities.js— права ролей;config.js— колонки та декларативні UI-відмінності;components/— одне дерево TU, календар, таблиця й notes modal;favorites_by_tu.module.scss— єдиний SCSS module для всіх Family та ролей.
Family/role-відмінності стилів задаються semantic root classes, а не дванадцятьма копіями SCSS.
Що бачимо
Зліва — доступне дерево TU. Праворуч після вибору TU незалежно завантажуються:
- список RU-фаворитів;
- календар вибраного місяця.
Якщо один із запитів падає, успішна частина залишається доступною. Пізня відповідь попередньо вибраної TU або місяця не перезаписує актуальний стан.
Календар
- Days — дні місяця;
- Unique RU — унікальні RU за день;
- New RU — нові RU за день;
- day-off підсвічується лише у варіантах, де це передбачено поточним UI.
Таблиця
| Колонка | Golden | Prime | Udate | Chathouse |
|---|---|---|---|---|
| ID | ✓ | ✓ | ✓ | ✓ |
| S | ✓ | — | — | — |
| Name | ✓ | ✓ | ✓ | ✓ |
| Start / Last / Last online | ✓ | ✓ | ✓ | ✓ |
| Type | ✓ | ✓ | ✓ | ✓ |
| Gifts | ✓ | — | ✓ | ✓ |
| Contacts | ✓ | ✓ | ✓ | ✓ |
| Black list | — | ✓ | ✓ | ✓ |
| Blocked | ✓ | ✓ | ✓ | ✓ |
| Profit | ✓ | — | — | ✓ |
| Messages | — | ✓ | ✓ | — |
| Info | ✓ | ✓ | ✓ | ✓ |
Редагування дозволене лише коли relation містить реальний server ID. Synthetic UI ID ніколи не надсилається в update endpoint.
Для operator колонка Contacts є read-only у всіх Family. Team lead і top manager можуть редагувати Contacts.
Golden history links показуються лише коли є обидва необхідні backend identifiers. Contacts = Yes у Golden вимагає валідний e-mail.
Нотатки
Manual notes можна:
- завантажувати;
- створювати;
- приховувати й повертати у список;
- редагувати title конкретного зв’язку TU ↔ RU.
AI notes у Favorites лише read-only для всіх Family і ролей. У фічі немає approve/reject, review modal, moderation capability або review API call.
Якщо backend уже повернув moderation result, він використовується тільки для кольору:
approved— зелений;rejected— червоний;- відсутній/невідомий статус — нейтральний.
Manual й AI notes завантажуються незалежно: помилка одного запиту не видаляє успішний результат іншого.
API
Family-specific payloads залишаються в adapters:
- Udate —
ladyUlid; - Prime/Golden —
ladyId_api; - Chathouse —
ladyDbId.
Усі Favorites-specific endpoint constants належать src/features/favorites/endpoints.js. Legacy utility-файлів src/utils/favoritesMenData.js і src/utils/globalFavoritesData.js більше немає; backend-owned назви endpoint та payload fields збережені без змін.
Зв’язки
- global-favorites — RU-centric агрегований список того самого домену;
- Сегменти і жаргон —
Active Favorite. - updateFavoritById (Golden) — оновлення доступних полів relation TU ↔ RU.