Docker / build (push) Failing after 21s
Changed the step attribute for NumberField components in the VpsEditSheet to "any" for vCPU, RAM, and disk inputs. Updated the vpsSchema to accept real numbers for vCPU, diskGb, and bandwidthTb. Adjusted database schema to store vCPU, diskGb, and bandwidthTb as REAL instead of INTEGER for better precision.
5.5 KiB
5.5 KiB
name, overview, todos, isProject
| name | overview | todos | isProject | |||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Access form-8 polish | Доработать `/access` по DNA ReUI form-8: удобное копирование токена (полный — только после create/rotate; в списке — prefix), больше метаданных в таблице и лёгкий Frame/Alert polish без пересборки всей страницы. |
|
false |
Доработка страницы Доступов (form-8)
Контекст
- Preview: form-8 · Docs: blocks
- Сейчас:
apps/web/src/routes/_auth/access.tsx+access-api-keys-card.tsx/access-api-keys-grid.tsx/api-key-token-dialog.tsx - Полный секрет токена API отдаёт только в
201create /200rotate; в списке есть лишьprefix(8 символов). Копирование «ключа» в таблице = prefix; полный токен — в диалоге после создания/ротации. - Уже есть хук
useCopyToClipboardи DNA копирования вsettings-14/.../columns.tsx(ApiKeyCell). InputGroupуже вpackages/ui/src/components/input-group.tsx.
flowchart LR
createOrRotate["Create / Rotate"] --> fullToken["token once"]
fullToken --> tokenDialog["Token dialog InputGroup copy"]
listRow["List row"] --> prefixOnly["prefix only"]
prefixOnly --> copyPrefix["Copy prefix"]
Подход
Сохранить KPI + сессию + DataGrid-список (раздел в целом ок). Оформить блок ключей и диалог токена по form-8 (Frame/Alert/InputGroup copy), не переписывать страницу целиком.
Шаги
1. Установить референс form-8
Из apps/web:
pnpm dlx shadcn@latest add @reui/form-8 --yes
Сложить в apps/web/src/components/blocks/form-8/ (reference). Post-add: импорты shadcn → @evobgp/ui/components/*. Не копипастить block в route — adapt в domain-компоненты.
2. Диалог полного токена (главное копирование)
Переработать api-key-token-dialog.tsx по form-8:
- ReUI
Alert(warning): «токен больше не покажем» InputGroup+ read-only input (masked toggle reveal/hide) + кнопка Copy (useCopyToClipboard+ toast)- Доп. кнопка/строка: копировать
Authorization: Bearer <token>(удобно для curl/UI settings) - Автофокус / явный CTA «Копировать»
3. Таблица ключей — copy + больше info
- Ячейка prefix: mono + Copy (как
ApiKeyCellв settings-14); tooltip «полный токен недоступен — только prefix» - Добавить колонки: создан (
created_at), id (mono, copy) - Name-cell: hybrid tile DNA (icon
KeyRoundнаbg-muted) + subtitle с role badge - Actions: оставить rotate/revoke; при необходимости ButtonGroup как в form-8
Маленький shared helper при необходимости: apps/web/src/components/access/copyable-mono.tsx (reuse в grid + session).
4. Оболочка блока ключей
- Заменить
DataGridCardна ReUIFrame/FramePanel(+ header) — surface lock form-8 / contract - Короткий
Alertinfo над гридом: полный токен только при создании/ротации; в списке копируется prefix
5. Сессия — доп. info + copy
В access.tsx:
- Copy для
tenant_id(иuser_id, если есть) - Для JWT: показать
is_adminbadge и число permissions (без смены layout)
6. Проверка
pnpm --filter @evobgp/web run typecheck
pnpm --filter @evobgp/web run lint
pnpm --filter @evobgp/web run build
Вне скоупа
- Смена backend (reveal полного токена из БД невозможен — SHA-256)
- Полный redesign KPI (
SectionCards→KpiStatGrid) — отдельная задача - Перенос списка с DataGrid на row-list form-8