bablo / стройплощадка
← Все сессии
Дата: 2026-05-22
Часов: 1.5
Кто:

Переключатель модулей платформы в шапке Bablo

Что сделано

  • Исследовал эталонный компонент /opt/ks2builder/frontend/src/components/AppHeader.jsx — разметка, Tailwind-классы, структура дропдауна
  • Сверил @theme блоки CSS обоих проектов: ks2builder/src/index.css vs bablo/app/globals.css — токены идентичны (ks2builder был скопирован с Bablo по записи в комментарии)
  • Создал /opt/bablo/app/components/layout/AppHeader.tsx:
    • 'use client' компонент с useState для toggle дропдауна
    • Кнопка: PROFITVILL / Bablo ▾ в шрифте font-display (JetBrains Mono), text-color-accent (#facc15)
    • Дропдаун w-64 bg-bg-elevated border-border-subtle rounded shadow-lg z-50:
      • Bablo — активный пункт (bg-bg-surface, не ссылка)
      • КС-2 Builderhttps://ks2.profitvill.ru (внешняя <a>)
      • ИДhttps://id.profitvill.ru (внешняя <a>)
      • разделитель border-t border-border-subtle
      • AI-ключи/settings/ai-keys (Next.js <Link>)
      • Модель AI/settings/ai-model (Next.js <Link>)
      • Админка/admin/users (только для role === 'owner')
  • Обновил /opt/bablo/app/app/(app)/layout.tsx:
    • Layout стал async, импортирует getSession()
    • AppHeader рендерится поверх flex строки sidebar + main
    • Передаёт { fullName, email: null, role } из сессии
  • TypeScript type check: clean (0 ошибок)
  • Next.js production build: clean
  • Docker: bablo-app rebuild + restart, сервис поднялся за 229ms

Что не сделано

  • Скриншот в браузере (нет прямого доступа через CLI; контейнер работает на порту 3010 за NPM)

Решения

  • Используем <a> для внешних ссылок (ks2, id) и <Link> для внутренних (settings, admin) — разница семантическая
  • onMouseLeave на дропдауне закрывает его при уходе мышью (точно как в эталоне)
  • User email не передаём в AppHeader (в Bablo email в сайдбаре не нужен, только fullName)