feat(tradein/ui): Telegram feedback button in Topbar (env-gated) #2514

Merged
lekss361 merged 1 commit from feat/tradein-feedback-button into main 2026-07-13 19:44:01 +00:00
Owner

Что

Кнопка обратной связи (Telegram) в общем Topbar — справа от UserMenu, видна всем авторизованным пользователям (вне RBAC items.map, не зависит от allowed_paths).

Как

  • URL из build-time env NEXT_PUBLIC_FEEDBACK_TG_URL (inline ?? "", конвенция как в lib/api.ts).
  • Env-gated: пока переменная не задана — FeedbackButton рендерит null. Безопасно мержить в прод до появления реальной ссылки: кнопка появится только после того как devops пропишет URL и пересоберёт фронт (NEXT_PUBLIC_* инлайнится на билде, рестарта контейнера мало).
  • Href санитайзится safeUrl() (пропускает только http/https → ссылку давать в форме https://t.me/<handle>, не tg://).
  • Иконка — inline SVG (в проекте нет lucide-react), стиль как у LogOutIcon. Класс .top-cta уже существовал в trade-in.css — новых цветов/классов не вводится.
  • target="_blank" rel="noopener noreferrer", aria-label.

Scope

Только Topbar.tsx (+56). app/v2 и app/ui-preview не трогаются (у них свой header).

Проверки

  • tsc --noEmit — чисто.
  • next lint — без новых ворнингов.

Действие для devops (после мержа + получения ссылки)

Прописать NEXT_PUBLIC_FEEDBACK_TG_URL=https://t.me/<handle> в env фронта и пересобрать образ.

## Что Кнопка обратной связи (Telegram) в общем `Topbar` — справа от `UserMenu`, видна всем авторизованным пользователям (вне RBAC `items.map`, не зависит от `allowed_paths`). ## Как - URL из build-time env `NEXT_PUBLIC_FEEDBACK_TG_URL` (inline `?? ""`, конвенция как в `lib/api.ts`). - **Env-gated:** пока переменная не задана — `FeedbackButton` рендерит `null`. Безопасно мержить в прод до появления реальной ссылки: кнопка появится только после того как devops пропишет URL **и пересоберёт фронт** (`NEXT_PUBLIC_*` инлайнится на билде, рестарта контейнера мало). - Href санитайзится `safeUrl()` (пропускает только http/https → ссылку давать в форме `https://t.me/<handle>`, не `tg://`). - Иконка — inline SVG (в проекте нет `lucide-react`), стиль как у `LogOutIcon`. Класс `.top-cta` уже существовал в `trade-in.css` — новых цветов/классов не вводится. - `target="_blank" rel="noopener noreferrer"`, `aria-label`. ## Scope Только `Topbar.tsx` (+56). `app/v2` и `app/ui-preview` не трогаются (у них свой header). ## Проверки - `tsc --noEmit` — чисто. - `next lint` — без новых ворнингов. ## Действие для devops (после мержа + получения ссылки) Прописать `NEXT_PUBLIC_FEEDBACK_TG_URL=https://t.me/<handle>` в env фронта и пересобрать образ.
lekss361 added 1 commit 2026-07-13 19:41:10 +00:00
feat(tradein/ui): Telegram feedback button in Topbar (env-gated)
All checks were successful
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
104681eabd
lekss361 merged commit 749c96cd0c into main 2026-07-13 19:44:01 +00:00
lekss361 deleted branch feat/tradein-feedback-button 2026-07-13 19:44:01 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#2514
No description provided.