Files
vps-tracker/.cursor/plans/access_form-8_polish_9980a07f.plan.md
Denozordec 53d5ed5d33
Docker / build (push) Failing after 21s
refactor(vps): update vCPU, RAM, and disk fields to allow decimal values
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.
2026-07-31 16:46:26 +07:00

5.5 KiB
Raw Permalink Blame History

name, overview, todos, isProject
name overview todos isProject
Access form-8 polish Доработать `/access` по DNA ReUI form-8: удобное копирование токена (полный — только после create/rotate; в списке — prefix), больше метаданных в таблице и лёгкий Frame/Alert polish без пересборки всей страницы.
id content status
install-form-8 CLI: pnpm dlx shadcn@latest add @reui/form-8 --yes → blocks/form-8, fix imports pending
id content status
token-dialog ApiKeyTokenDialog: Alert + InputGroup reveal/copy + Bearer snippet pending
id content status
grid-copy-meta Grid: copyable prefix/id, created_at, richer name cell pending
id content status
frame-shell-session Keys card → Frame+Alert; session copy tenant_id/user_id pending
id content status
web-verify typecheck + lint + build @evobgp/web pending
false

Доработка страницы Доступов (form-8)

Контекст

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

В access-api-keys-grid.tsx:

  • Ячейка 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. Оболочка блока ключей

В access-api-keys-card.tsx:

  • Заменить DataGridCard на ReUI Frame / FramePanel (+ header) — surface lock form-8 / contract
  • Короткий Alert info над гридом: полный токен только при создании/ротации; в списке копируется prefix

5. Сессия — доп. info + copy

В access.tsx:

  • Copy для tenant_id (и user_id, если есть)
  • Для JWT: показать is_admin badge и число 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