Release 20260503_01 — globalny czat AI, niekompletne pojazdy, edytor statusów
Filip Borkowski, Backend/Frontend/Fullstack Engineer
Globalny czat AI — synchronizacja w 3 miejscach
Asystent AI ma teraz wspólny stan w całej aplikacji. Powstał nowy globalny context (AiChatProvider), który synchronizuje wiadomości i licznik nieprzeczytanych pomiędzy:
- FAB w lewym dolnym rogu (rozwijany panel czatu)
- Sidebar — link "Czat AI" z czerwonym badge
- Dock menu w Plan 2.0 i Mapie
Gdy AI odpowiada a panel jest zwinięty — licznik nieprzeczytanych zwiększa się i pojawia się jako badge w sidebarze. Otwarcie panelu, wejście na stronę /dashboard/czat lub workdesk-2 automatycznie zeruje licznik. Stan przeżywa reload strony (localStorage).
FAB — drag prawym klikiem przez menu
Prawy klik na ikonkę FAB otwiera teraz menu kontekstowe z dwiema opcjami:
- Przesuń — aktywuje tryb przesuwania (FAB zmienia kolor na pomarańczowy z pulsującym ringiem), drag lewym klikiem
- Zwiń do menu na dole — FAB zamienia się w pigułkę "✨ Czat AI" na środku ekranu
Pozycja jest pamiętana w localStorage i automatycznie przeskakuje z powrotem do widocznego obszaru przy zmniejszeniu okna.
Park maszyn — niekompletne pojazdy
Wcześniej dodanie pojazdu było zablokowane dopóki user nie wypełnił WSZYSTKICH wymaganych pól (producent, model, numer rejestracyjny, podmiot). Teraz można zapisać pojazd z brakującymi danymi i uzupełnić je później.
- Tag automatycznie wygenerowany dopiero gdy wszystkie wymagane pola są wypełnione
- Format taga:
ENTITY_TAG-TYPE_CODE-REGISTRATION(np.TSR-P-WX12345A) - W tabeli niekompletny pojazd ma badge
⚠ Niekompletnyz tooltipem listującym brakujące pola
Jednorazowa migracja SQL naprawiła 11 istniejących rekordów z wadliwymi tagami. 7 pojazdów oznaczonych prefiksem UNK- czeka na ręczne przypisanie podmiotu.
Edytor statusów we wszystkich tabelach
W każdej tabeli zawierającej kolumnę "Status" — w menu nagłówka pojawiła się opcja "Ustawienia statusów". Klik otwiera dialog gdzie można:
- Edytować nazwy istniejących statusów
- Zmieniać kolory (color picker)
- Dodawać nowe statusy
- Usuwać niepotrzebne
Zmiany zapisują się do bazy (app_settings.order_statuses) i obowiązują we wszystkich tabelach.
Plan 2.0 — pinezki pojazdów i naczep
W panelach POJAZDY i NACZEPY (prawy pasek) dodano przyciski pinezki — klik przypina pojazd/naczepę jako Card do obszaru roboczego (analogicznie jak istniejące pinezki kierowców i zleceń). Stan zapisywany jest w autosave razem z resztą planu dnia.
Wydajność
Lista 1500+ zleceń wcześniej powodowała zacinanie się strony. Teraz:
- Filtrowanie/sortowanie wyniesione do
useMemo - Wyszukiwarki z debounce 200ms
- Lista pokazuje pierwsze 80 zleceń + komunikat "Pokazano 80 z 1538. Zawęź wyszukiwarką"
React.memona komponentach drag
Biblioteka danych — pliki tras widoczne od razu
Przy każdym pojeździe pojawia się badge {N} tras pokazujący ile plików tras GPS jest dostępnych w bazie. Wcześniej user musiał klikać przez 3 poziomy folderów żeby to sprawdzić.
Dodano też nową kolumnę "Stron" w tabeli plików — pokazuje liczbę stron PDF.
Pracownicy — Data urodzenia
Dodana nowa kolumna w tabeli pracowników oraz pole w dialogu edycji/dodawania (tab "Dane osobowe"). Status pracownika prezentowany jest teraz przez animowaną kropkę (pulse + ping) — spójnie z resztą tabel w aplikacji.
Strona Tablica — wrapper Card
Strona "Tablica" otrzymała zewnętrzny Card z nagłówkiem "Tablica" — wewnątrz zachowano istniejącą zawartość "Zlecenia - Harmonogram". Teraz wszystkie strony dashboardu mają spójną strukturę.
Drobiazgi
- Strona Komunikacja — usunięty zbędny opis pod nagłówkiem
- Email-zlecenia — prawy panel podglądu ma sztywne 600px (czytelniejszy podgląd)
- Mapa — aktywny przycisk "Ustawienia" ma czarne tło, "Styl mapy" w submenu
- Strona Rozkład — klik "Zlecenia" zamyka "Kierowców" i odwrotnie (toggle ekskluzywny)
- Strona Urlopy — spójny styl z innymi stronami (jeden Card główny)
- Edytor dokumentów — block handles większe, znikają po 5s zamiast natychmiast, toolbar z flex-wrap (wszystkie ikony widoczne)
- Park maszyn — usunięte naprzemienne kolorowanie wierszy (zebra striping)
- Naprawiona literówka "In Planing" → "In Planning"
- Status
plannedw "Szczegółach rekordu" pokazuje teraz label "In Planning" zamiast raw value
Suma: 6 commitów na dev, 5 migracji SQL, 21 plików zmienionych, 2 nowe pliki (ai-chat-context.jsx, route-files-summary/route.js).