TU Statistics
src/features/statistics/tu/ — таблиця помісячної статистики заробітку TU всередині поточної Family: golden, prime, chathouse, udate.
Суть
Екран показує зріз по TU за обраний місяць.
- один рядок = одна TU;
- лівий блок містить службову інформацію по TU;
- правий блок містить денні значення за днями місяця;
- останній рядок без активного пошуку —
TOTALпо всіх показаних TU.
Таблиця рендериться у віртуалізованому режимі на всіх доступах цієї вкладки: у DOM одночасно присутні тільки видимі рядки та невеликий overscan.
Use cases
directorаналізує всю Family або будь-який доступний зріз: усі TU, TU конкретного CM, конкретного teamlead, top-manager-а або teamlead-а всередині top-manager-а.top_managerдивиться свій scope TU з опційним звуженням по CM і teamlead-у.team_leadдивиться TU власної команди за місяць.client_managerдивиться власних TU або звужує вибірку до конкретного teamlead-а у своєму scope.
Toolbar
| Контрол | Що робить | Де є |
|---|---|---|
Level | Клієнтський фільтр по рівню TU: All, Low, Mid, Top, New. Застосовується до нової API-відповіді під час наступного GNR; сама зміна селекта не перебудовує поточну таблицю. | усі ролі |
Month | Вибір місяця у форматі MMMM yyyy. Не дозволяє обирати майбутні місяці. | усі ролі |
CM | Вибір client manager-а. У списку є службові варіанти None, а для частини сценаріїв також Free. | director, top_manager |
Role | Перемикає директорський зріз: None, Teamlead, TOP-manager. | director |
User | Список активних користувачів за обраною роллю і місяцем. | director |
Team | Список teamlead-ів у межах поточного зрізу. У top_manager і director-режимі TOP-manager є All, у client_manager — None. | director, top_manager, client_manager |
GNR | Виконує API-запит за поточними фільтрами і перераховує таблицю. | усі ролі |
Додатково:
- зміна
Monthбезумовно повертає всі залежні non-default селекти до початкових значень; - зміна
Monthне запускає запит автоматично: попередній результат лишається в таблиці до натисканняGNR; - у
directorкнопкаGNRблокується, якщо для поточногоRoleще не обраний обов’язковийUser; - dropdown-и завантажують список опцій асинхронно тільки при відкритті;
- успішний
GNRпрокручує viewport на початок і очищає пошук та виділення клітинок.
Що бачимо
Ліва фіксована частина таблиці:
№NameIDабоID / ULIDLevelAll $
Права частина:
- колонки днів місяця
1..28/29/30/31; - ширина таблиці закінчується на останньому дні поточного місяця;
- горизонтальний скрол доступний тільки в шапці блоку днів і синхронізує позицію з тілом таблиці.
По рядках:
Nameпоказує аватар і ім’я TU;IDпоказуєladyId, а дляudateможе перемикатися наulid;Levelпоказує нормалізований рівень TU;All $у рядку показуєtotalз API-відповіді;- для майбутніх днів значення не малюються;
- коли пошук порожній, внизу додається рядок
TOTALіз сумами по колонках і загальним місячним підсумком.
Після GNR рядки групуються в порядку статусів none → gray → red, а всередині кожної групи сортуються за місячною сумою від більшої до меншої.
TOTAL і копіювання All $ перераховують суму з денних значень. API-поле total очікується узгодженим із цією сумою; інакше значення в рядку може відрізнятися від скопійованого.
Взаємодії
Пошук
- поле пошуку знаходиться в колонці
Name; - фільтрує локально по
nameіladyId; - зміна пошуку очищає поточне виділення клітинок;
- до першого
GNRі при порожньому результаті показуєтьсяThe statistics result is empty. Check the selected criteria.
Копіювання колонок
У шапці доступне копіювання в буфер:
NameIDULIDдляudateAll $
Копіюються значення поточного відфільтрованого списку у видимому порядку, по одному значенню на рядок. Для Name до імені додається nickname, якщо він є. Після успішного копіювання UI показує success-notification.
Виділення клітинок
- виділяються тільки денні клітинки правого блоку;
- підтримується клік і drag-selection по кількох клітинках;
- суміжні клітинки зливаються в один візуальний selection-блок із синіми border-ами;
- біля останньої виділеної клітинки з’являється floating popup із сумою вибраного діапазону;
Escapeочищає виділення.
Hover і прокрутка
- hover на рядку синхронно підсвічує ліву та праву частини;
- вертикальний скрол відбувається всередині viewport таблиці;
- горизонтальний скрол у body вимкнений, джерелом горизонтальної навігації є header днів.
Стани і візуальні маркери
| Стан | Дані | Відображення |
|---|---|---|
none | активна TU у межах поточного зрізу | стандартний білий рядок / клітинка |
gray | TU не належала поточному зрізу в цей день або вже поза ним | сірий фон |
red | TU заблокована | червоний фон |
Для udate є додатковий маркер wasActions: поверх денної клітинки малюється горизонтальна лінія, якщо у цей день були дії.
Loading, empty та error-стани
- Таблиця не робить автоматичного запиту при відкритті; дані з’являються після
GNR. - На час запиту використовується global loader, а помилки показуються через global notification.
- До першого
GNRі після порожньої відповіді показуєтьсяThe statistics result is empty. Check the selected criteria. - Невдалий повторний запит не очищає попередній успішний результат.
- Успішний
GNRскидає локальний пошук, selection і позицію вертикального viewport.
Доступи
| Роль | Frontend route | Базовий зріз | Додаткові звуження |
|---|---|---|---|
director | /ceo/<family-route>/tu_statistics | вся Family | CM, Role, User, Team |
top_manager | /top_manager/<family-route>/tu_statistics | TU свого top-manager scope | CM, Team |
team_lead | /teamlead/<family-route>/tu_statistics | TU власної команди | тільки Level, Month |
client_manager | /client_manager/<family-route>/tu_statistics | TU власного CM scope | Team |
<family-route> дорівнює golden, udate, chathouse або talkytimes для Family prime.
operator, hr_manager, recruiter, technical_department доступу до цієї вкладки не мають.
Деталі по ролях
director
Має три режими:
Role = None+CM = None→ усі TU Family;Role = None+ вибранийCM→ TU конкретного client manager-а;Role = Teamlead→ TU конкретного teamlead-а, опційно в межах конкретногоCM;Role = TOP-manager→ TU top-manager-а, опційно в межахCMі з додатковимTeam=Allабо конкретний teamlead.
top_manager
- стартовий scope — поточний top-manager;
CMопційний;TeamмаєAllабо конкретного teamlead-а;- використовується один і той самий табличний UI, що й для інших ролей.
team_lead
- зріз завжди будується по
familyIdпоточного teamlead-а; - селектів користувачів або teamlead-ів немає;
- таблиця також повністю віртуалізована.
client_manager
- без вибору
Teamпоказуються всі TU поточного client manager-а; - при виборі
Teamзріз звужується до конкретного teamlead-а в межах поточного CM; - службове значення за замовчуванням —
None.
Family-specific
| Family | Особливості |
|---|---|
golden | стандартний режим таблиці |
prime | використовує той самий UI, у коді Family alias talkytimes -> prime |
chathouse | стандартний режим таблиці; для team_lead використовується окремий page-style варіант без зміни бізнес-логіки |
udate | перемикач ID / ULID, копіювання залежить від вибраного режиму, денні клітинки можуть мати маркер wasActions |
API зрізи
Контракти беремо з swagger. Для golden див. Statistics V2. Для інших Family UI використовує ті самі зрізи з family-specific префіксом у route.
| Зріз | golden | prime | udate | chathouse |
|---|---|---|---|---|
| усі TU | POST /golden/statistics/v2/ladies | POST /prime/statistics/v2/ladies | POST /statisticsUdate/v2/ladies | POST /chathouse/statistics/v2/ladies |
| по client manager | POST /golden/statistics/v2/client-manager-ladies | POST /prime/statistics/v2/client-manager-ladies | POST /statisticsUdate/v2/client-manager-ladies | POST /chathouse/statistics/v2/client-manager-ladies |
| по teamlead | POST /golden/statistics/v2/supervisor-ladies | POST /prime/statistics/v2/supervisor-ladies | POST /statisticsUdate/v2/supervisor-ladies | POST /chathouse/statistics/v2/supervisor-ladies |
| по CM + teamlead | POST /golden/statistics/v2/client-manager-supervisors-ladies | POST /prime/statistics/v2/client-manager-supervisors-ladies | POST /statisticsUdate/v2/client-manager-supervisors-ladies | POST /chathouse/statistics/v2/client-manager-supervisors-ladies |
| по top-manager + teamlead | POST /golden/statistics/v2/top-supervisors-ladies | POST /prime/statistics/v2/top-supervisors-ladies | POST /statisticsUdate/v2/top-supervisors-ladies | POST /chathouse/statistics/v2/top-supervisors-ladies |
Зв’язки
- TU Profiles — базова вкладка з переліком TU цієї Family
- operator-statistics — суміжний статистичний екран для операторів
- Списки фільтрів завантажуються через
POST /clientManager/getCMsByMonth,POST /supervisor/getSupervisorsByMonthіPOST /top-manager/getTopsByMonth. - TODO: додати перевірені operation deeplink-и для не-Golden statistics slices і selector endpoints.