Operators (per-family)
(UI-екран Family-меню) — вкладка supervisor для роботи з операторами своєї команди та прив’язаними до них TU у межах однієї Family: golden, prime, udate або chathouse.
Суть
Екран показує операторів поточного тімліда у вибраній Family, дає керувати їхнім Stack-паролем і статусом, відкривати картку оператора та переглядати прив’язані TU. TU можна відкріпити від оператора по одній або всі одразу.
Вкладка має чотири окремі реалізації з однаковою базовою поведінкою. prime у коді й маршрутах називається talkytimes, але для запитів використовується Family prime.
Цей файл є єдиним джерелом правди для вкладки Team lead → Operators у всіх Family.
Use cases
supervisorпереглядає активних або заблокованих операторів своєї команди в поточній Family.- Масово вибирає операторів і генерує їм новий Stack-пароль через
Reset Password. - Копіює login details конкретного оператора, змінює його статус або переходить у Stack-картку оператора.
- Розгортає список TU оператора, перевіряє їхню кількість і статус та за потреби відкріплює одну або всі TU.
- У
chathouseдодатково переглядає і копіюєAuth codeоператора.
Доступ і навігація
Вкладка доступна тільки ролі supervisor (team_lead у шляхах фронтенда) і показується в меню тих Family, які є в assignments користувача. Дані додатково обмежуються скоупом авторизованого тімліда на бекенді.
| Family | Назва в меню | Реалізація в коді | Маршрут | Family-контекст списку |
|---|---|---|---|---|
udate | Udate | src/components/team_lead/udate/operators | /teamlead/udate/operators | udate |
prime | TalkyTimes | src/components/team_lead/talkytimes/operators | /teamlead/talkytimes/operators | prime |
golden | GoldenBride | src/components/team_lead/golden/operators | /teamlead/golden/operators | golden |
chathouse | Chathouse | src/components/team_lead/chathouse/operators | /teamlead/chathouse/operators | chathouse |
Для активної Family цей екран також є fallback-маршрутом Team lead: якщо внутрішній шлях не збігся з жодним route, фронт перенаправляє користувача на відповідну вкладку Operators.
Завантаження і скоуп даних
- Під час першого входу показується глобальний loader, а вміст сторінки з’являється після завершення запиту списку.
- Спільний Stack endpoint повертає операторів поточного тімліда разом із прив’язаними TU для вибраної Family.
- Після успішної зміни пароля, статусу або прив’язок TU список завантажується повторно.
- Повторне завантаження очищає поточний multi-select операторів, але не змінює вибраний status-фільтр.
- Пошуку, пагінації та ручної кнопки refresh на цій вкладці немає.
Окремого empty-state немає: якщо список або результат фільтра порожній, користувач бачить таблицю без рядків.
Фільтр і multi-select
Status-фільтр
- Фільтр знаходиться в заголовку колонки
Status. - Доступні значення:
ActiveіBlocked. - Початкове значення —
Active, тому заблоковані оператори не показуються одразу після входу. Activeвідповідає операторам без Stack-блокування,Blocked— операторам із блокуванням.
Вибір операторів
- Checkbox у рядку додає або прибирає одного оператора з вибору.
- Checkbox у заголовку вибирає або скидає всіх операторів, які зараз видимі за status-фільтром.
- Перемикання
Active↔Blockedне очищає вибір. Тому можна накопичити вибраних операторів з обох фільтрів, навіть якщо частина з них тимчасово не видима. Reset Passwordзастосовується до всього накопиченого вибору, а не тільки до поточного видимого фільтра.- Після повторного завантаження списку вибір очищається.
Колонки
| Family | Колонки |
|---|---|
udate | checkbox, Operators, Login detail, Status, Edit |
prime | checkbox, Operators, Login detail, Status, Edit |
golden | checkbox, Operators, Login detail, Status, Edit |
chathouse | checkbox, Operators, Login detail, Auth code, Status, Edit |
Operators
Комірка показує:
- ім’я та nickname через спільний user label;
- кількість прив’язаних TU;
- дію відкріплення всіх TU.
Клік по комірці розгортає або згортає вкладений список TU. Якщо в оператора немає TU, розгортання не відбувається, а дія відкріплення всіх TU нічого не виконує.
Login detail
Кнопка Get details копіює в буфер обміну email і поточний Stack-пароль оператора одним рядком. Після успішного копіювання приблизно на 1 секунду показується Copied!, після чого повертається Get details.
Auth code
Колонка є тільки в chathouse і показує auth_code, отриманий разом зі списком операторів. Значення може містити кілька кодів одним рядком, наприклад 3946, 3949.
- Клік по непорожньому значенню копіює весь рядок, навіть якщо він візуально обрізаний у комірці.
- Після копіювання приблизно на 1 секунду показується
Copied!. - Порожнє значення не є інтерактивним.
Status
Рядок показує поточний Stack-статус оператора і пропонує тільки протилежний стан:
- для
Activeдоступна діяBlocked; - для
Blockedдоступна діяActive.
Перед блокуванням з’являється confirmation Are you sure you want to block the operator?. Розблокування виконується без confirmation. Після успіху список оновлюється і показується notification The status of the operators has been updated..
Edit
Іконка редагування відкриває спільну Stack-картку оператора за маршрутом /teamlead/operator_card/:id. Маршрут не містить Family: картка працює зі Stack-користувачем, а не з окремим family-профілем. Повна логіка полів, прав і збереження описана в Operator Card.
Вкладений список TU
Розгорнутий оператор показує по одному рядку на кожну прив’язану TU:
- avatar;
- партнерський ID, ім’я та вік;
- read-only статус
ActiveабоBlocked; - дію відкріплення цієї TU від поточного оператора.
Вкладений список не має власного checkbox, пошуку, пагінації чи переходу в картку TU. Відкріплення однієї TU і відкріплення всіх TU виконуються без confirmation, після відповіді бекенда список операторів завантажується повторно.
Family-specific відмінність відкріплення:
| Family | Ідентифікатор TU, за яким фронт виконує дію |
|---|---|
udate | внутрішній id |
prime | внутрішній id |
golden | партнерський id_api |
chathouse | внутрішній id |
Дії та результат
| Дія | Скоуп | Confirmation | Що відбувається після успіху |
|---|---|---|---|
Reset Password | усі вибрані оператори, включно з прихованими іншим status-фільтром | немає | генерується новий Stack-пароль, список оновлюється, вибір очищається |
Get details | один оператор | немає | login details копіюються локально, запит до API не виконується |
Copy Auth code | один оператор, тільки chathouse | немає | повний auth_code копіюється локально |
Змінити Status | один оператор | тільки під час блокування | Stack-статус оновлюється, список перезавантажується |
| Відкріпити одну TU | одна TU | немає | TU більше не належить поточному оператору, список перезавантажується |
| Відкріпити всі TU | усі TU одного оператора | немає | усі TU оператора відкріплюються одним запитом, список перезавантажується |
Edit | один оператор | немає | відкривається Stack-картка оператора |
Reset Password disabled, поки не вибрано жодного оператора. Якщо batch-відповідь містить часткові помилки, сторінка показує загальний success notification і окремі failure notification для елементів, які не були оновлені.
Family-specific особливості
| Family | Специфіка |
|---|---|
udate | Базовий набір із 5 колонок; TU відкріплюються через Udate endpoint за внутрішнім ID. |
prime | Поведінка збігається з Udate; код і route мають назву talkytimes, але бек-контекст та endpoint-и — prime. |
golden | Поведінка таблиці збігається з Udate; для відкріплення TU використовується партнерський id_api, а не внутрішній ID. |
chathouse | Додаткова колонка Auth code; решта дій збігається з базовою реалізацією. |
Стани та помилки
- Усі серверні дії використовують глобальний loader.
- Помилка першого завантаження не замінює сторінку окремим error-state: показується global notification, після чого рендериться порожня таблиця.
- Помилки зміни пароля, статусу або прив’язки TU показуються через global notification із повідомленням бекенда або fallback-текстом фронтенда.
- Copy-to-clipboard не використовує global notification; результат показується локальним текстом
Copied!. - Після відкріплення кількох TU можливий частковий успіх: помилки окремих TU показуються окремо, а хоча б одна успішна зміна дає success notification.
Джерела даних
Список, password/status mutations і Family-відкріплення TU виконуються через наявні API helpers відповідних реалізацій. Усі чотири Family завантажують операторів поточного supervisor разом із прив’язаними TU; chathouse додатково використовує auth_code з цієї відповіді.
Golden-операція відкріплення TU задокументована як setOperator. Інші request/response контракти потрібно звіряти у swagger, а не дублювати в UI-документі.
Нюанси підтримки
- Чотири Family-реалізації зараз живуть окремо. Зміни спільної поведінки треба перевіряти в
udate,talkytimes,goldenіchathouse, щоб не створити непомітну розбіжність. prime— це бізнес-назва Family та значення бек-контексту;talkytimes— історична назва папки й route-сегмента.- Multi-select не обмежений видимим status-фільтром: приховані вибрані оператори залишаються в batch-дії.
- Вкладені TU на цій вкладці призначені для контролю прив’язок, а не для повного керування TU. Повна робота зі списком описана в TU Profiles.
Зв’язки
- TU Profiles — повний per-family список TU і перепризначення TU між операторами.
- Operator Card — єдине джерело логіки спільної Stack-картки оператора.
- operator-statistics — статистика операторів поточної Family.
- workspace — робочий простір і live-спостереження за операторами.
- swagger — реєстр Swagger UI бек-сервісів; Stack Swagger.
- TODO: додати перевірені Swagger operation deeplink-и для завантаження операторів, зміни Stack-пароля/статусу та відкріплення TU в Prime, Udate і Chathouse.