Panel Czas Pracy i Zlecenia — nowe UI tabeli, przerwy kierowców, wyszukiwanie

Filip Borkowski, Backend/Frontend/Fullstack Engineer

Panel Czas Pracy — przebudowa tabeli

Tabela czasu pracy kierowców przeszła kompleksowy redesign wizualny i funkcjonalny.

Scalenie kolumn Jazda / Inna praca

Kolumny 10 i 11 zostały połączone w jedną komórkę z podziałem poziomą kreską — analogicznie do kolumn dziennych (3–9). Górna połowa pokazuje sumę jazdy tygodnia, dolna — sumę innej pracy. Nagłówek kolumny wyświetla zakres dat tygodnia.

Czcionka i formatowanie

Wprowadzono czcionkę Saira jako domyślną dla wszystkich tabel aplikacji (ustawiona globalnie w components/ui/table.jsx). Nagłówki tabel pozbawione szarych teł — transparentne na tle strony.

Ostatni odczyt GBOX — pełna historia

Naprawiono brak danych w kolumnie „Ostatni odczyt". Wcześniej wyświetlał tylko aktywność z bieżącego dnia. Teraz stosowany jest trójpoziomowy fallback:

  1. Dane live GBOX (dziś)
  2. Historia tygodnia z Supabase
  3. Nowy endpoint /api/gbox/last-timestamps — MAX(timestamp) per kierowca z ostatnich 30 dni

Wyszukiwanie inline w kolumnie Kierowca

W nagłówku kolumny „Kierowca" dodano pole wyszukiwania z ikoną lupy i przyciskiem ×. Działa niezależnie od paska wyszukiwania u góry strony.

Toggle podpowiedzi

Przycisk „Podpowiedzi" (ikona oko) włącza i wyłącza tooltip przy wskazaniu kursorem na wartości w tabeli.

Wytyczne obliczania — kalkulator przepisów

Dialog przebudowany w dwukolumnowy interaktywny kalkulator. Lewa strona prezentuje normy prawne, prawa pozwala wprowadzić własne dane i natychmiast sprawdzić zgodność z przepisami.

Dodane nowe sekcje dotyczące przerw:

  • Przerwy podczas jazdy (Rozp. WE 561/2006, Art. 7) — maksymalna jazda ciągła 4h30, wymagana przerwa 45 min (lub 15+30 min w tej kolejności)
  • Przerwy w czasie pracy (Art. 13 Ustawy) — po 6h pracy przerwa min. 30 min; przy pracy powyżej 9h łącznie min. 45 min
  • Jazda dobowa/tygodniowa/2-tygodniowa (Rozp. 561/2006, Art. 6) — limity 9h/56h/90h z kalkulacją zgodności

Panel Zlecenia — synchronizacja stylu

Tabela zleceń dostosowana do spójnego stylu z panelem Czas Pracy:

  • Obramowania zmienione z czarnych (border-black) na theme-aware (border-border)
  • Nagłówki bez szarych teł, sticky komórki używają bg-background
  • Czcionka Saira z globalnego komponentu tabeli
  • Wiersz numeracji kolumn: wysokość 30px, pogrubione cyfry
  • Usunięto hardcodowane kolory tekstu — dziedziczą z motywu (light/dark)
  • Kolumny 11–16 (ceny, dystans, czas): czarny tekst (text-black dark:text-white)

Kolejne poprawki UI — sesja II

Czas pracy — dopracowanie tabeli

  • Kolumna „Dziś dobowa" przeniesiona bezpośrednio po kolumnie Nd (niedziela) — przed sumą tygodniową
  • Usunięto pomarańczowe wypełnienie weekendu (Sob, Nd) — wszystkie kolumny jednolite
  • Usunięto wszelkie tła komórek w tabeli — przejrzyste, bez kolorowania
  • Kolumna 3: etykiety „Jazda dzienna" / „Inna praca" w kolorze czarnym
  • Kolumna 11 „SUMA TYDZIEŃ" — nagłówek zawiera zakres dat tygodnia
  • Kolumna 13 „Poprz. tyg. jazda" — szerokość 170px
  • Kolumna Kierowca: tekst „KIEROWCA" wyśrodkowany u góry, pole wyszukiwania poniżej
  • Usunięto pole wyszukiwania z prawego górnego rogu
  • Rozmiar czcionki dat w wierszu 1 ujednolicony (text-xs)
  • Podpowiedzi (tooltips) domyślnie wyłączone
  • Aktualny dzień: pogrubiena ramka (2px czarna) wokół całej kolumny
  • Naprawiono wyświetlanie daty w kolumnie „Ostatni odczyt" (format ISO+TZ Supabase)

Panel Zadania — nowe funkcje

  • Wiersz numeracji kolumn (analogicznie do panelu Czas Pracy)
  • Autor „System": widoczne tylko logo aplikacji, bez tekstu
  • Autor zadania i przypisany pracownik: wyświetlani kodem z tabeli pracownicy (inicjał imienia + 2 litery nazwiska)
  • Zadania przeterminowane: czerwone tło z pulsującą animacją (animate-pulse)
  • Poprawka: created_at ustawiany jawnie przy tworzeniu i ponownym otwarciu zadania

Panel Pracownicy

  • Pionowe linie oddzielające kolumny w tabeli (aktywni i nieaktywni)

Panel Dokumenty — edytor nowej generacji

Kompleksowa rozbudowa edytora dokumentów inspirowana szablonem Nuxt UI Editor.

Tabele w edytorze

Wstawianie tabel bezpośrednio w treści dokumentu — przycisk w toolbarze lub polecenie /Tabela. Po kliknięciu w tabelę pojawiają się dodatkowe przyciski: dodaj wiersz, dodaj kolumnę, usuń wiersz, usuń kolumnę, usuń tabelę.

Upload zdjęć

Przycisk aparatu w toolbarze otwiera wybór pliku. Obraz zostaje przesłany do Supabase Storage (bucket document-images) i wstawiony do dokumentu jako element blokowy. Obsługiwane formaty: JPG, PNG, GIF, WebP, SVG.

@Wzmianki użytkowników

Wpisanie @ otwiera dropdown z listą użytkowników systemu (z tabeli profiles). Wybrany użytkownik zostaje wstawiony jako oznaczony węzeł @Imię Nazwisko.

Emoji w slash menu

Polecenie /Emoji w menu podpowiedzi wstawia popularne emoji: 👍 ✅ ⚠️ 📦 🚚 📅 💡 ❌ 🔴 🟢 🔵 i inne.

Asystent AI (Ctrl+J)

Panel AI dostępny przez Ctrl+J lub przycisk ✦ w toolbarze. Dostępne akcje:

  • Kontynuuj pisanie — generuje 2-4 zdania na podstawie kontekstu dokumentu
  • Uprość / Rozszerz — transformacja zaznaczonego tekstu
  • Popraw gramatykę — korekta stylistyczna i gramatyczna
  • Podsumuj — streszczenie dokumentu lub zaznaczenia
  • Tłumacz → EN / DE / PL

Wynik można zatwierdzić (zastępuje zaznaczenie lub wstawia w miejsce kursora) lub odrzucić. Asystent oparty na modelu Claude Haiku.

Foldery dokumentów

Lewy panel obsługuje teraz foldery: tworzenie (ikona + folderu), zwijanie/rozwijanie, przenoszenie dokumentu do folderu przez menu kontekstowe . Dokumenty bez folderu wyświetlane w osobnej sekcji.

Eksport dokumentu

Menu przy otwartym dokumencie oferuje eksport do:

  • HTML — pełny plik .html gotowy do osadzenia
  • Markdown — plik .md z automatyczną konwersją formatowania

Mapa — warstwa dróg A/S/DK

Nowa stała warstwa mapy z autostradami, drogami ekspresowymi i krajowymi — dane pobierane raz, cache 30 dni.

Dane z OpenStreetMap (Overpass API)

Przy pierwszym załadowaniu mapy dane pobierane są z Overpass API (OSM). Kolejne wyświetlenia obsługiwane z pamięci (24h) lub Supabase Storage (30 dni) — bez zbędnych zapytań zewnętrznych.

Warstwy wizualne

  • Autostrady (A*) — ciemnoczerwona linia, widoczna od zoom 4
  • Drogi ekspresowe (S*) — czerwona linia, zoom 5+
  • Drogi krajowe (DK*) — pomarańczowa linia, zoom 7+
  • Etykiety wzdłuż linii — numer drogi ze kolorowym halem (symbol-placement: line), zoom 7+

Sterowanie

Checkbox „Drogi A/S/DK" w pasku warstw mapy (domyślnie włączony). Warstwa ładuje się raz — toggle nie generuje powtórnych zapytań sieciowych.

Dane drogowe w bazie Supabase

Dane o drogach zapisywane są w tabeli roads_poland_cache jako jeden rekord JSONB. Drogi w Polsce nie zmieniają się — dane pobrane raz z Overpass są trwałe (brak TTL). Hierarchia odczytu: pamięć (24h) → baza Supabase → Overpass API (tylko gdy baza pusta).

Czas pracy — kolor czcionki czarny

Ujednolicono kolor tekstu w kolumnach 4–14 tabeli czas pracy. Wszystkie wartości (jazda, inna praca, sumy tygodniowe, poprzedni tydzień, dziś dobowa) wyświetlane w kolorze czarnym — usunięto kolorowe czcionki (text-red-600, text-amber-600, text-muted-foreground).

Mapa — nowa architektura danych dróg A/S/DK

Warstwa dróg polskich przeszła gruntowną przebudowę architektury w celu poprawy wydajności i ograniczenia danych przesyłanych do przeglądarki.

Podział na kategorie

Dane dróg podzielono na trzy niezależne typy: motorway (autostrady A*), trunk (drogi ekspresowe S*) i primary (drogi krajowe DK*). Każdy typ pobierany jest osobnym żądaniem HTTP i przechowywany w osobnym wierszu bazy Supabase.

Kolejność ładowania

Mapa ładuje najpierw autostrady (najmniejszy zbiór), następnie ekspresowe, na końcu krajowe. Dla dróg krajowych przekazywany jest bbox aktywnych pojazdów — API zwraca tylko drogi w obszarze ±200 km od aktywnej floty.

Brak cache przeglądarki

Dane drogowe nie są przechowywane w przeglądarce (Cache-Control: no-store). Cache serwera (per typ, bez TTL) zapewnia szybkie odpowiedzi bez zbędnego pobierania z Overpass API przy każdym żądaniu.

Mapa — ograniczenia ciężarówek

Linia ograniczeń ciężarówek zmieniona na ciągłą (usunięto kreskowanie). Etykiety dróg powiększone i lepiej czytelne. Po kliknięciu na linię otwiera się popup z pełnymi detalami ograniczenia: maksymalna masa całkowita, masa osi, wysokość, szerokość, długość pojazdu oraz informacja o zakazie przewozu materiałów niebezpiecznych.

Workdesk — podgląd PDF zleceń

Naprawiono niedziałający podgląd PDF w panelu Workdesk (obszar roboczy → Zlecenie → Podgląd). Poprzednia implementacja używała elementu <embed>, który na wielu przeglądarkach wyświetlał błąd lub placeholder. Nowe rozwiązanie pobiera plik przez fetch() i renderuje przez pdf.js z blob URL.

Biblioteka danych — widok podzielony

Panel Biblioteka danych przeszedł na widok dwukolumnowy: lewa strona (stała szerokość 420 px) zawiera drzewo plików z wyszukiwarką, prawa — podgląd PDF bezpośrednio w interfejsie bez modalu. Ikony akcji (podgląd, pobieranie) przeniesione bezpośrednio przy nazwie pliku dla szybszego dostępu.

Zlecenia — nowa kolumna i jednolita czcionka

Dodano kolumnę „Kod Lokalizacji" (nr 4A) po kolumnie Miasto załadunku. Rozmiar czcionki ujednolicony w całej tabeli zleceń. Wiersz numeracji kolumn: pogrubione cyfry dla wszystkich kolumn, w tym podkolumn (np. 14.1).

Więcej artykułów

Naprawa OCR cron, dropdown statusu, animacje tabeli zleceń

Naprawa crona OCR, dropdown statusu z ustawieniami, logika Przetwarzanie AI → in Planing, animacje pulsacji wierszy i wykrzykniki brakujących danych.

Czytaj więcej

Akordeonowy widok korespondencji email i poprawki WorkDesk

Nowy wątkowy widok emaili z animowanymi akordeonami, podgląd treści wiadomości, poprawki WorkDesk i Biblioteki danych.

Czytaj więcej