Team Lead Card

Team Lead Card

src/features/teamlead_card/ — спільна Stack-картка supervisor для create/edit і сторінки власного профілю.

Суть

Team Lead Card керує глобальним профілем supervisor і його доступами до Family. Картка не належить одній Family: create-route передає початковий Family context, а секція Cooperation може містити доступи до кількох Family.

Один feature використовується Director, HR manager, Top manager і самим Supervisor. Роль та режим визначають доступні поля і payload.

Use cases

  • Director створює supervisor у вибраній Family, редагує профіль, Family access, password і server access.
  • HR manager створює та редагує доступного supervisor без керування server access.
  • Top manager переглядає профіль доступного supervisor і оновлює лише DeepL API key.
  • Supervisor відкриває /teamlead/my_profile, змінює власний nickname і translator settings та переглядає свої Family access.

Доступ і маршрути

КонтекстCreateExisting card
Director/ceo/teamlead_card/create/:family/ceo/teamlead_card/:id
HR manager/hr/teamlead_card/create/:family/hr/teamlead_card/:id
Top manager/top_manager/teamlead_card/:id
Supervisor My profile/teamlead/my_profile

Create mode визначається відсутністю :id разом із наявністю :family. Для TalkyTimes route переходить із URL-сегмента talkytimes, але в create context передається backend Family prime.

Supervisor My profile передає Stack user ID напряму через selectedCardOverride, тому не потребує :id у URL.

Ініціалізація

Перед профілем картка завантажує admin panels усіх чотирьох Family.

  • Prime, Golden, Udate і Chathouse запитуються незалежно.
  • Помилка однієї Family показує notification і залишає її список порожнім, але не блокує інші Family.
  • Create mode після цього створює порожній стан і не запитує профіль.
  • Edit і My profile завантажують supervisor profile за Stack ID.
  • Відсутній ID без валідного create context є помилкою.
  • Помилка профілю показує notification і повертає користувача на попередній route.

Секції й права

СекціяDirector / HR managerTop managerSupervisor My profile
General infoName, Surname, Nickname редагуютьсяread-onlyName/Surname read-only, Nickname редагується
Login detailsEmail редагується; password actionsEmail read-only; password actionsEmail read-only; password actions
Server accessзмінює лише Directorне показуєтьсяне показується
TranslatorAPI key редагується, language read-onlyAPI key редагуєтьсяAPI key і language редагуються
Notifications Telegram botexisting cardexisting cardexisting card
Work hoursредагуютьсяdisableddisabled
Cooperationусі Family, редагуваннялише дозволені Family, read-onlyлише дозволені Family, read-only

Password copy і reset доступні для будь-якої existing card. Copy показує global success notification; локальний текст Copied належить таблицям Teamleads, а не цій картці.

General info і валідація

Для Director, HR manager і Supervisor My profile:

  • Name обов’язковий;
  • Surname обов’язковий, якщо поле присутнє в моделі;
  • Email обов’язковий і має бути валідним;
  • змінений непорожній Nickname проходить перевірку формату;
  • кожна дозволена Family повинна мати вибрану admin panel.

Top manager не проходить повну валідацію, тому його DeepL update не залежить від read-only полів.

Translator

  • DeepL API key редагується в усіх режимах.
  • Language у звичайній create/edit card показується read-only.
  • У Supervisor My profile Language має selector UK / RU.
  • Verification checkbox лише показує отриманий стан і не перемикається вручну.

Top manager payload містить тільки Stack ID і DeepL API key. Supervisor My profile використовує повний update payload, хоча більшість полів у ньому read-only.

Work hours

From і To задаються двома range controls у межах 00:00–24:00.

  • Director і HR manager можуть змінювати значення.
  • Top manager і Supervisor бачать disabled controls.
  • Значення зберігається як одна пара годин.

Cooperation

Cooperation містить Udate, TalkyTimes, GoldenBride і Chathouse.

  • Access вмикає або вимикає Family.
  • Вимкнення Access очищає вибрану admin panel.
  • Дозволена Family без admin panel блокує save.
  • Top manager і Supervisor бачать тільки дозволені Family без можливості змін.
  • Порожній admin list показує result is empty.

Ідентифікатори admin panels

FamilyЗначення selector
Udateвнутрішній id
Prime / TalkyTimesвнутрішній id
GoldenBrideчисловий id_api
Chathouseвнутрішній id

Golden id_api нормалізується до number у списку, завантаженій картці та save payload. Selector також показує id_api як label. Змішування string і number призводить до того, що наявне backend-значення не визначається як вибране.

Create і update

Create payload містить:

  • поточну Family з create-route;
  • роль supervisor;
  • General info, Login details, Translator і Work hours;
  • тільки Family з увімкненим Access.

Existing update не потребує currentFamily: поточні Family access уже є частиною Cooperation.

Top manager надсилає лише ID і DeepL API key. Інші ролі використовують повний update.

Подвійний save блокується, поки попередній запит не завершився.

Password і server access

  • Copy переносить email password у clipboard.
  • Reset генерує новий Stack password і одразу синхронізує його у поточному та початковому станах.
  • Server access показується лише Director для existing card.
  • Перемикання Production / Development виконується окремою mutation і не очікує загального UPDATE.

Незбережені зміни

  • Поточний стан порівнюється з початковим після кожної зміни.
  • Return із незбереженими змінами потребує confirmation.
  • Після успішного create/update початковий стан синхронізується з поточним.
  • Password і server access також синхронізуються після окремої mutation.

Loading та помилки

  • Admin panels, profile, save, password і server access використовують global loader.
  • Backend message показується без зміни; за його відсутності використовується frontend fallback.
  • Окремого page-level empty або error state немає.
  • Selector без admin panels має локальний empty text.

Нюанси

  • teamlead у frontend props означає Supervisor My profile; роль доступу в backend і документації — supervisor.
  • User-facing Family name має бути Chathouse, хоча поточний Cooperation UI містить typo Chatshouse.
  • Fallback save-помилки зараз каже Failed to update operator card. — це неправильна назва сутності в коді й не є бізнес-терміном для Team Lead Card.

Зв’язки

  • teamleads — списки й переходи до create/edit card.
  • my-profile — особистий режим Supervisor.
  • operator-card — окрема картка operator.
  • swagger — реєстр backend Swagger UI.
  • API route constants: src/utils/directorData.js, src/utils/hrManagerDate.ts, src/utils/usersData.js, src/utils/adminPanelsData.js.
  • TODO: додати перевірені operation deeplink-и для supervisor profile/create/edit, admin panels, password, server access і Telegram bot link.