my-profile

My Profile

src/components/operator/personal_profile_info/ · src/features/teamlead_card/ — глобальна сторінка власного Stack-профілю для Operator і Supervisor.

Суть

My Profile не належить окремій Family і не використовує Family ID у маршруті. Operator і Supervisor відкривають різні представлення власного Stack-профілю:

  • Operator має окрему self-service форму з payment details;
  • Supervisor повторно використовує Team Lead Card у personal mode.

Сторінка завжди працює з ID авторизованого користувача. Відкривати довільний профіль через :id тут не можна.

Use cases

  • Operator переглядає власні персональні й облікові дані, одноразово задає nickname, змінює translator і payment details, копіює або оновлює password.
  • Supervisor переглядає власні Family access і work hours, змінює nickname та translator settings, керує password і Notifications Telegram bot.

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

РольМаршрутFamily
operator/operator/my_profileта сама реалізація в GoldenBride, Udate, TalkyTimes і Chathouse operator shells
supervisor/teamlead/my_profileглобальний Stack-профіль, пункт меню не залежить від Family assignment

Інші ролі не мають маршруту My Profile.

Operator My Profile

Operator view має окремого owner-а: src/components/operator/personal_profile_info/. Це не src/features/operator_card/: із shared Operator Card повторно використовується лише ReferralLink.

Секції

  • General info.
  • Login details.
  • Referral link.
  • Translator.
  • Notifications Telegram bot.
  • Payment Details.
  • Payment history.
  • Achievements.

General info

ПолеПоведінка
Nameread-only
Nicknameредагується лише поки backend ще не повернув непорожнє значення
Date of birthread-only
Countryread-only
Telegramread-only
Phoneread-only

Новий nickname проходить перевірку формату. Після збереження непорожнього nickname поле блокується для наступних змін.

Login details

  • Email показується в input.
  • Copy переносить email password у clipboard.
  • Reset генерує новий Stack password окремою mutation.
  • Після reset новий password синхронізується в поточному й початковому станах.

Поточний Email input візуально редагується, але загальний My Profile update не надсилає Email. Отже зміна Email у цьому полі не зберігається — це фактична розбіжність реалізації, а не підтримуваний use case.

Якщо backend повернув referral code, сторінка показує https://besocial.tech/ref=<code>. Клік копіює повний link і показує global notification.

Translator

  • DeepL API key редагується.
  • Language перемикається між UK і RU.
  • Verification checkbox показує backend state і не перемикається вручну.

Після успішного profile update актуальний DeepL state також потрапляє в auth user context через повторне завантаження картки.

Notifications Telegram bot

Для existing profile показується connection до Notifications bot. Стан connected визначається наявністю Telegram ID у профілі.

Payment Details

Operator обирає одну з валют:

  • UAH: Bank, Full name, IBAN, TIN, Card number;
  • USDT (trc-20): Wallet.

Якщо валюта вибрана, усі поля відповідного набору є обов’язковими. Порожня валюта означає, що payment details не надсилаються.

Дата Last Updated показується за наявності createdAt.

Payment history та Achievements

  • Payment history формується з backend payment history і показується від новіших подій до старіших.
  • Achievements StartBox, AirPods, iPhone, MacBook є read-only.
  • Для виданого achievement показуються дата й прикріплені файли.

Update

Загальний UPDATE може зберегти:

  • новий nickname, лише якщо його не було раніше;
  • DeepL settings;
  • Payment Details для вибраної валюти.

Name, Date of birth, Country, Telegram, Phone, Email і Achievements цей payload не змінює.

Supervisor My Profile

Supervisor view використовує Team Lead Card із personal mode та ID авторизованого користувача.

Особливості personal mode:

  • Stack header має title My profile;
  • Name і Surname read-only;
  • Nickname редагується;
  • Email read-only;
  • Login details можна копіювати, а password — регенерувати;
  • DeepL API key і Language редагуються;
  • Notifications Telegram bot доступний;
  • Work hours read-only;
  • Cooperation показує тільки дозволені Family без редагування;
  • UPDATE використовує спільний supervisor profile update.

Повна валідація, save, unsaved changes і admin-panel rules описані в Team Lead Card.

Loading та помилки

  • Обидва представлення використовують global loader і global notification.
  • Помилка initial profile load повертає користувача на попередній route.
  • Backend message показується без зміни; за його відсутності використовується frontend fallback.
  • Окремого empty або page-level error state немає.
  • Return із незбереженими змінами потребує confirmation.

Нюанси

  • Operator My Profile існує в чотирьох operator shells, але дані й route не є Family-specific.
  • Supervisor menu завжди залишає My profile, навіть якщо користувач не має доступу до Family-розділів.
  • User-facing назва ролі в продукті — team lead; технічна Stack role — supervisor.

Зв’язки

  • operator-card — адміністративна картка operator/candidate; My Profile не використовує її як цілий екран.
  • Team Lead Card — canonical логіка Supervisor My Profile.
  • operator-statistics — власні показники Operator.
  • swagger — реєстр backend Swagger UI.
  • API route constants: src/utils/hrManagerDate.ts, src/utils/usersData.js.
  • TODO: додати перевірені operation deeplink-и для own profile get/update, password і Telegram bot link.