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
| Поле | Поведінка |
|---|---|
| Name | read-only |
| Nickname | редагується лише поки backend ще не повернув непорожнє значення |
| Date of birth | read-only |
| Country | read-only |
| Telegram | read-only |
| Phone | read-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.
Referral link
Якщо 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.