operators

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-контекст списку
udateUdatesrc/components/team_lead/udate/operators/teamlead/udate/operatorsudate
primeTalkyTimessrc/components/team_lead/talkytimes/operators/teamlead/talkytimes/operatorsprime
goldenGoldenBridesrc/components/team_lead/golden/operators/teamlead/golden/operatorsgolden
chathouseChathousesrc/components/team_lead/chathouse/operators/teamlead/chathouse/operatorschathouse

Для активної Family цей екран також є fallback-маршрутом Team lead: якщо внутрішній шлях не збігся з жодним route, фронт перенаправляє користувача на відповідну вкладку Operators.

Завантаження і скоуп даних

  1. Під час першого входу показується глобальний loader, а вміст сторінки з’являється після завершення запиту списку.
  2. Спільний Stack endpoint повертає операторів поточного тімліда разом із прив’язаними TU для вибраної Family.
  3. Після успішної зміни пароля, статусу або прив’язок TU список завантажується повторно.
  4. Повторне завантаження очищає поточний multi-select операторів, але не змінює вибраний status-фільтр.
  5. Пошуку, пагінації та ручної кнопки refresh на цій вкладці немає.

Окремого empty-state немає: якщо список або результат фільтра порожній, користувач бачить таблицю без рядків.

Фільтр і multi-select

Status-фільтр

  • Фільтр знаходиться в заголовку колонки Status.
  • Доступні значення: Active і Blocked.
  • Початкове значення — Active, тому заблоковані оператори не показуються одразу після входу.
  • Active відповідає операторам без Stack-блокування, Blocked — операторам із блокуванням.

Вибір операторів

  • Checkbox у рядку додає або прибирає одного оператора з вибору.
  • Checkbox у заголовку вибирає або скидає всіх операторів, які зараз видимі за status-фільтром.
  • Перемикання ActiveBlocked не очищає вибір. Тому можна накопичити вибраних операторів з обох фільтрів, навіть якщо частина з них тимчасово не видима.
  • Reset Password застосовується до всього накопиченого вибору, а не тільки до поточного видимого фільтра.
  • Після повторного завантаження списку вибір очищається.

Колонки

FamilyКолонки
udatecheckbox, Operators, Login detail, Status, Edit
primecheckbox, Operators, Login detail, Status, Edit
goldencheckbox, Operators, Login detail, Status, Edit
chathousecheckbox, 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.