Tablica zadań
Widok Dashboard ➔ Zadania to jedna tablica kanban, na której lądują wszystkie sprawy do
obsłużenia — niezależnie od tego, skąd pochodzą. Wcześniej były to cztery osobne zakładki
(„Nowy klient", „Zajęcia", „Indywidualne", „Inne"); teraz jest jedna tablica i filtry.
Checklisty pozostają osobną zakładką — Checklisty.
👤 Instrukcja dla recepcji i biura
Co jest na tablicy
Trzy źródła, rozróżniane kolorem lewej krawędzi karty i etykietą:
| Źródło | Skąd się bierze | Co z tym zrobić |
|---|---|---|
| Zadania własne | Ręcznie założone zadania i zgłoszenia od klientów (np. „brak pasującego terminu") | Pełna edycja: status, priorytet, etykiety, przypisanie |
| Klienci | Uczestnicy bez umówionych próbnych albo po próbnych bez przypisanej grupy | Kliknij kartę → przypisz rodzaj zajęć, dopisz notatkę |
| Indywidualne | Zgłoszenia na zajęcia indywidualne od klientów | Kliknij kartę → zatwierdź (z terminem, kortem i trenerem) albo odrzuć |
Filtry źródeł
Nad tablicą są trzy odznaki. Domyślnie żadna nie jest zaznaczona i widać wszystko. Kliknięcie zawęża widok — np. sama odznaka Klienci odtwarza dawną zakładkę „Nowy klient". Filtry można łączyć, a Wyczyść filtry wraca do pełnej listy.
Przeciąganie kart
Przeciągać można wyłącznie zadania własne — tylko one mają własny status do zapisania.
Karty klientów i zgłoszeń indywidualnych stoją w kolumnie wynikającej z ich stanu:
- klient → zawsze Do zrobienia (znika z tablicy, gdy dostanie rodzaj zajęć),
- zgłoszenie indywidualne → Do zrobienia gdy oczekuje, Gotowe po zatwierdzeniu, Backlog po odrzuceniu.
Tych kart nie przeciąga się dlatego, że przeniesienie do „Gotowe" nie miałoby jak wymyślić kortu, trenera i godziny — zgłoszenie zatwierdza się w jego własnym oknie, które przy okazji tworzy zajęcia.
Wyszukiwarka i „tylko moje"
Wyszukiwarka przeszukuje wszystkie źródła naraz: tytuły i opisy zadań, nazwiska, e-maile i telefony klientów, treść zgłoszeń.
Przycisk Tylko moje zadania pokazuje zadania przypisane do Ciebie. Karty klientów i zgłoszeń indywidualnych wtedy znikają — nie mają przypisanej osoby.
Widok tabeli
Przełącznik tabeli pokazuje wyłącznie zadania własne, za to z pełną tabelą: zaznaczanie wielu naraz i edycja przypisań w miejscu. Klienci i zgłoszenia indywidualne są dostępni na tablicy, która jest widokiem domyślnym.
🛠 Dokumentacja techniczna
Model odczytu
Źródła nie są materializowane do wspólnej tabeli — byłby to duplikat prawdy i pewny
rozjazd. Zamiast tego components/tables/tasks-table/task-cards.ts sprowadza je do
jednego typu z dyskryminatorem:
type TaskCard =
| { source: 'ticket'; id: `ticket:${number}`; draggable: true; ticket: Ticket }
| { source: 'player'; id: `player:${number}`; draggable: false; player: TaskPlayer }
| { source: 'individual'; id: `itr:${number}`; draggable: false; request: … };
Identyfikatory są stringami z prefiksem źródła — same liczby kolidowałyby między tabelami.
draggable decyduje, czy karta trafia do SortableContext.
Pliki
| Plik | Rola |
|---|---|
task-cards.ts | Adaptery, filtrowanie, grupowanie po kolumnach (czyste funkcje) |
tasks-content.tsx | Zakładki, filtry źródeł, wyszukiwarka, dialogi |
tickets/tasks-board-view.tsx | Pobiera trzy źródła i skleja karty |
tickets/ticket-board.tsx | Kanban; obsługuje karty przeciągalne i statyczne |
derived-task-card.tsx | Wygląd kart klienta i zgłoszenia indywidualnego |
player-task-dialog.tsx | Przypisanie rodzajów zajęć + notatki |
individual-request-dialog.tsx | Zatwierdzenie / odrzucenie zgłoszenia |
Gracze są pobierani serwerowo w app/(dashboard)/dashboard/tasks/page.tsx
(getTasksData), żeby zachować filtr miasta i nie powtarzać kosztownego zapytania w
przeglądarce. Zadania i zgłoszenia indywidualne tablica dociąga sama.
resolveTaskReason (lib/utils/task-reason.ts) rozstrzyga, czy klient jest „nowy", czy
„po próbnych bez grupy". Funkcja leży poza lib/actions/players.ts, bo tamten moduł jest
'use server' — każdy jego eksport musi być funkcją asynchroniczną.
Kompatybilność linków
Stare adresy z ?tab=newClient|classes|individual|other prowadzą na scaloną tablicę —
resolveTab mapuje wszystko poza checklist na tasks, żeby zakładki w przeglądarkach
recepcji nie kończyły się pustą stroną.