Files
Learn_System/plans/admin-redesign/phase-5-quick-actions.md
T
Maxim Dolgolyov 76e376ee04 chore(plan): admin-redesign 6-phase plan
PLAN.md + 6 subplans + CONTEXT.md

Strategy: Incremental | Mode: Automated | Execution: Orchestrator

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-16 21:47:55 +03:00

95 lines
5.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Phase 5: Per-row quick actions
**Status:** ⬜ Not Started
**Parent plan:** [PLAN.md](./PLAN.md)
**Domain:** frontend
**Parallelizable with:** Phase 3, Phase 4
## Objective
На hover-строке user / session показывать кнопки частых action прямо в таблице — без открытия overlay-панели. Сокращает 2-3 клика до 1 для типичных задач (бан, выдача монет, удаление сессии).
## Tasks
- [ ] **Users table** (`frontend/js/admin/sections/users.js`):
- Добавить в каждый `<tr>` дополнительную ячейку или абсолютно-позиционированный блок с action-кнопками
- Visible: только на `:hover` строки (via CSS)
- Кнопки:
- **🔒 Ban / Unban** — открывает confirm modal, на confirm вызывает существующий `toggleBanUser()` (или его эквивалент с userId)
- **🪙 Award coins** — открывает быстрый prompt-modal "Сколько монет?", вызывает существующий `shopAdminAwardCoins` без перехода в shop tab
- **📜 Sessions** — навигирует через `AdminRouter.navigate('#sessions?user=' + uid)` (param Phase 6 будет обрабатывать; пока fallback — переход на sessions tab)
- **🗑 Delete** — confirm, вызывает существующий `confirmDeleteUser`
- **ВАЖНО:** иконки только inline SVG (.ic класс) или Lucide — НИКАКИХ эмоджи
- Кнопки `event.stopPropagation()` чтобы не триггерить `openUserPanel`
- [ ] **Sessions table** (`frontend/js/admin/sections/sessions.js`):
- **👁 View** — открыть session detail (текущий механизм)
- **🗑 Delete** — confirm + DELETE /admin/sessions/:id (если такой endpoint есть, иначе добавить)
- [ ] **Если delete session endpoint отсутствует** — добавить в backend:
- `DELETE /api/admin/sessions/:id` с auth admin only
- Контроллер: удалить из `test_sessions` + connected `session_answers`
- Audit log entry
- [ ] **CSS** (в admin.html style блоке или новый файл):
```css
.row-actions { opacity: 0; transition: opacity .15s; display: inline-flex; gap: 4px; }
tr:hover .row-actions { opacity: 1; }
.row-action-btn { width: 28px; height: 28px; border-radius: 6px; ... }
```
- [ ] Подсказки через `title="..."` атрибут на каждой кнопке
- [ ] Confirm-модалки используют `LS.confirm` (не reinventing)
## Files to Modify/Create
- `frontend/js/admin/sections/users.js` — модификация renderRow + action handlers (~50-100L добавления)
- `frontend/js/admin/sections/sessions.js` — same (~30-50L)
- `frontend/admin.html` — стили для `.row-actions` (~30L)
- `backend/src/controllers/adminController.js` — `deleteSession` если отсутствует
- `backend/src/routes/admin.js` — `DELETE /sessions/:id` если отсутствует
## Acceptance Criteria
- Hover на user row → видны 4 кнопки справа без раздвигания layout
- Hover на session row → видны 2 кнопки
- Каждая кнопка работает (ban / coins / sessions / delete)
- Click на кнопку НЕ открывает user-panel overlay (stopPropagation)
- Tooltip на hover каждой кнопки
- Confirm для деструктивных action (delete, ban)
- LS.toast после success
- Auth check — все action available только admin
- Mobile: actions hidden (tap-only context), либо альтернативный UI (long-press → menu) — пока минимум скрыть на ≤768px
## Notes
### Существующие helpers использовать
- `LS.confirm(message, { okText, danger })` для подтверждений
- `LS.modal(...)` если нужна форма (например award coins amount)
- `LS.toast` для feedback
- Существующие admin* функции (toggleBanUser, awardCoins, etc.) — не дублировать
### Визуальный паттерн
Inspired by Linear / Vercel admin: actions visible on row hover, positioned right-aligned, ghost-style buttons (transparent bg, border on hover). Иконки только.
### Что НЕ делать в этой фазе
- Не делать bulk-actions (select multiple → action) — это после merge
- Не делать undo (toast с "отменить" внутри) — Phase 6+
- Не менять структуру таблицы radically
## Review Checklist
- [ ] Кнопки не сдвигают layout (используют absolute / hidden / opacity)
- [ ] Все action эскейпят пользовательский ввод
- [ ] No emoji — только SVG
- [ ] event.stopPropagation на всех кнопках
- [ ] Confirm для destructive actions
- [ ] Tooltip присутствует
- [ ] Mobile-friendly (hidden или альтернативный UI)
- [ ] Build passes
## Handoff to Next Phase
<!-- Implementer: записать, какие action-кнопки добавлены,
какие param-форматы router использует (`#sessions?user=N`),
что Phase 6 deep-page должна включить (например, replace #users overlay на deep page). -->