Skip to content

fix(registry): личный порядок колонок для всех ролей (#16, 2.4.3) - #21

Merged
MaximilianKaufmannCode merged 1 commit into
mainfrom
fix/issue-16-personal-column-order
Jun 30, 2026
Merged

fix(registry): личный порядок колонок для всех ролей (#16, 2.4.3)#21
MaximilianKaufmannCode merged 1 commit into
mainfrom
fix/issue-16-personal-column-order

Conversation

@MaximilianKaufmannCode

Copy link
Copy Markdown
Owner

Закрывает #16.

Проблема

Роль Редактор (и Наблюдатель) в панели «Колонки» могла только включать/выключать колонки, но не перетаскивать их — кнопок drag/стрелок не было. У администратора перетаскивание работало.

Причина (анализ)

Порядок колонок хранился общим на всю организацию (registry.tenant_preferences, ключ registry.column_order; PUT /admin/preferences/column-order — только админ). То есть это была намеренно общая, курируемая админом настройка — поэтому drag был под canReorder={isAdmin}, а у не-админа эндпоинт вернул бы 403. При этом видимость колонок — личная (localStorage).

Решение (согласовано: личный порядок у каждого)

Порядок колонок становится личной настройкой вида (как и видимость):

  • Любая роль перетаскивает колонки «под себя» (мышью или ↑/↓); порядок сохраняется лично в localStorage (lotsman_column_order_<userId>).
  • Эффективный порядок = личный → общий админский (как значение по умолчанию) → встроенный дефолт. Никто не меняет вид другим.
  • Перетаскивание администратором по-прежнему задаёт общий порядок по умолчанию (для тех, кто не настроил свой); «По умолчанию» сбрасывает личный порядок.
  • Закрепление и переименование колонки остаются только у админа (общая настройка) — вынесены в новый проп canManageLayout, отделённый от canReorder, чтобы не-админ не дёргал admin-эндпоинты (никаких 403).
Роль Видимость Перетаскивание (порядок) Пин / переименование
Редактор / Наблюдатель ✅ лично лично (NEW)
Администратор ✅ лично ✅ задаёт общий дефолт

Проверки

  • Только фронтенд: бэкенд/схема/контракт не менялись (личный порядок — localStorage, как видимость).
  • tsc — чисто; biome — только пред-существующий version-drift (вне моих правок); 0 регрессий (8 падающих registry-тестов — пред-существующие useSearch-mock, подтверждено git stash).
  • Собрано и задеплоено на PreProd (atomic swap): version.json = 2.4.3, бандл содержит личный ключ порядка, login 200 / API 401.

🤖 Generated with Claude Code

Reordering registry columns was admin-only: the order was stored tenant-wide
(one shared layout, PUT /admin/preferences/column-order), so editors and
viewers could only toggle columns on/off, not drag-reorder them.

Per the product decision, column order becomes a personal view preference
(like column visibility, which is already per-user in localStorage):

- Every role can drag / ↑↓ reorder their own columns; the arrangement is saved
  per user in localStorage (`lotsman_column_order_<userId>`).
- Effective order = personal (localStorage) → tenant-wide admin order (seed) →
  built-in default. No one changes anyone else's view.
- Admin reorder still writes the tenant-wide default for users who haven't
  personalised; «По умолчанию» clears the personal order.
- Pinning a column and renaming a column stay admin-only (they change the
  shared default) — gated by a new `canManageLayout` prop, split out from
  `canReorder` so non-admins never hit the admin-only endpoints (no 403).

Frontend-only — backend, schema and contracts unchanged. tsc clean; biome shows
only pre-existing version-drift noise; no test regressions (the 8 failing
registry tests are the pre-existing useSearch-mock failures, confirmed via git
stash). Built and deployed to PreProd (version.json 2.4.3, login 200).

Closes #16

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@MaximilianKaufmannCode
MaximilianKaufmannCode merged commit 415e5a7 into main Jun 30, 2026
3 of 4 checks passed
@MaximilianKaufmannCode
MaximilianKaufmannCode deleted the fix/issue-16-personal-column-order branch June 30, 2026 09:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant