Stack Client

TU Media Gallery

(UI-екран Family-меню)

TU Media Gallery — спільний per-Family розділ для роботи з медіа TU. Розділ доступний у udate, prime (маршрут talkytimes), golden і chathouse та використовує окремі дозволи галереї для вибраної Family.

Use cases

  • Після відкриття розділу frontend паралельно завантажує preview доступних TU через POST /v2/tus/preview і дозволи галереї для поточної Family.
  • topManager може фільтрувати TU за team lead та operator, supervisor — за operator, client_manager — за team lead; для operator командні фільтри не показуються. Вибрані значення передаються в preview-запит як teamLeadProjectId і operatorProjectId.
  • Списки team lead/operator заново завантажуються при кожному відкритті відповідного dropdown через POST /team-members/current/supervisors і POST /team-members/current/operators; зміна team lead скидає вибраного operator, а наступне відкриття operator dropdown запитує список для нового team lead.
  • Користувач може знайти TU за ім’ям або TU ID та вибрати її у списку.
  • Порожній список показує стан No TU found.; помилки завантаження відображаються через глобальне повідомлення.
  • Після вибору TU основна панель показує дозволені комбінації channel → type → status і завантажує відповідні фото, відео або аудіо. Іконка фільтра категорій розташована праворуч у панелі фільтрів для статусу approved. У дропдауні початково вибрані всі категорії, які повернув getAllows, включно з Default для звичайних медіа; коли вибрані всі, галерея показує всі медіа. Користувач може залишити кілька категорій одночасно. Зміна каналу або типу відновлює вибір усіх доступних для них категорій; зміна TU чи фільтра замінює поточний набір медіа.
  • Іконка фільтра категорій показується лише для approved, якщо getAllows повертає для поточного типу медіа хоча б одну категорію крім default. Якщо категорій немає або доступна тільки default, фільтр прихований, а список медіа запитується з categories: []. Для on_moderation і declined фільтр прихований, запит також містить categories: []; при поверненні до approved попередній вибір категорій зберігається.
  • Галерея підвантажує наступні сторінки під час прокручування, не дублює однакові медіа й припиняє pagination, коли наступної сторінки немає.
  • Натискання на медіа відкриває fullscreen preview. Для списку передбачені стани початкового завантаження, підвантаження наступної сторінки, No media files та помилка з дією Retry. Якщо бекенд повертає масив деталей помилки завантаження, кожна деталь показується окремим глобальним повідомленням.
  • Картки з категоріями erotic, special, pre_special і special_plus мають локальні category-іконки з доступною назвою та tooltip при hover. Категорія erotic позначається вогником.
  • Якщо активний media type дозволяє видалення, користувач може вибрати одне або кілька медіа та видалити їх після підтвердження. Кнопка bulk-delete розташована праворуч у footer медіагалереї та показує spinner на весь цикл delete + reload. Після хоча б одного успішного видалення frontend перезапитує поточний dataset з cursor: null, щоб отримати актуальний список і новий cursor, але старі картки залишаються видимими до атомарної заміни відповіді; часткові помилки відображаються у глобальному повідомленні.
  • Якщо активний media type дозволяє завантаження, дія Add new у footer відкриває multiple file picker для поточного типу медіа. Якщо getAllows повертає доступні upload-категорії, біля кнопки показується selector лише з повернутими категоріями; початково вибрана перша з них. Default показується тільки за наявності у відповіді та означає upload без поля category. Якщо список категорій порожній, selector прихований і поле category не надсилається. Кожен файл завантажується окремим multipart-запитом; зміна TU або фільтра скасовує активне завантаження, а після успіху поточний dataset перезапитується з першої сторінки та отримує новий cursor. Під час цього reload поточні картки не очищаються: upload-loader залишається активним, доки новий список не замінить старий. Часткові помилки відображаються у звіті та глобальному повідомленні.
  • Зміна категорії вже існуючого медіа та модерація на цьому етапі не підключені.

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

РольДоступМаршрут
topManagerпризначені Family/top_manager/{family-route}/tu_media_gallery
supervisorпризначені Family/teamlead/{family-route}/tu_media_gallery
operatorвласна Family/operator/tu_media_gallery
client_managerпризначені Family/client_manager/{family-route}/tu_media_gallery

director, hr_manager, recruiter і technical_department не мають доступу. {family-route} дорівнює udate, talkytimes, golden або chathouse; talkytimes відповідає Family prime.

Зв’язки

  • getAllows у test Swagger — дозволи й налаштування галереї для вибраної Family.
  • getMediaList у test Swagger — медіа вибраної TU за активними фільтрами.
  • createMedia у test Swagger — завантаження одного media file multipart-запитом; frontend повторює запит для кожного вибраного файлу.
  • deleteMedia у test Swagger — видалення одного медіа; frontend виконує bulk-delete як серію запитів з обмеженою паралельністю.
  • swagger — реєстр Swagger UI бек-сервісів.