Skip to main content

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łoSkąd się bierzeCo z tym zrobić
Zadania własneRęcznie założone zadania i zgłoszenia od klientów (np. „brak pasującego terminu")Pełna edycja: status, priorytet, etykiety, przypisanie
KlienciUczestnicy bez umówionych próbnych albo po próbnych bez przypisanej grupyKliknij kartę → przypisz rodzaj zajęć, dopisz notatkę
IndywidualneZgłoszenia na zajęcia indywidualne od klientówKliknij 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

PlikRola
task-cards.tsAdaptery, filtrowanie, grupowanie po kolumnach (czyste funkcje)
tasks-content.tsxZakładki, filtry źródeł, wyszukiwarka, dialogi
tickets/tasks-board-view.tsxPobiera trzy źródła i skleja karty
tickets/ticket-board.tsxKanban; obsługuje karty przeciągalne i statyczne
derived-task-card.tsxWygląd kart klienta i zgłoszenia indywidualnego
player-task-dialog.tsxPrzypisanie rodzajów zajęć + notatki
individual-request-dialog.tsxZatwierdzenie / 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ą.