Dokumenty blokowy editor, Zlecenia kolumny, Tablica 2-panel, kierowca, PDF
Filip Borkowski, Backend/Frontend/Fullstack Engineer
Tablica — naprawione narzedzie tekstu
Rozwiazano trzy bledy w narzedziu tekstu na stronie Tablica (whiteboard):
Klikniecie na input nie resetuje tekstu
Wcześniej kliknięcie na pole tekstowe powodowalo propagacje zdarzenia pointerDown do canvasu, co tworzilo nowy pusty input i kasowalo wpisywany tekst. Dodano blokade propagacji zdarzen na elementach INPUT i TEXTAREA.
Race condition blur vs pointerDown
Gdy uzytkownik kliknal w nowe miejsce na canvasie majac otwarty input tekstowy, zdarzenie onBlur wywoływalo handleTextSubmit() PO tym jak handlePointerDown ustawil juz nowy textInput — co skutkowalo wyczyszczeniem nowego inputu. Rozwiazanie: flaga skipBlurRef ustawiana w handlePointerDown, sprawdzana w handleTextBlur.
Stale closure w handleTextSubmit
Funkcja handleTextSubmit czytala stan textInput z zamkniecia, ktore moglo byc nieaktualne. Zmieniono na odczyt z textInputRef.current (ref synchroniczny) i opakowano w useCallback. Gwarantuje to dostep do najswiezszej wartosci niezaleznie od cyklu renderowania.
Blokowanie skrotow podczas wpisywania
Dodano e.stopPropagation() na zdarzeniach onKeyDown i onPointerDown elementow input/textarea. Dzieki temu skroty klawiszowe Tablicy (V, H, S, D, R, A, N, T, F) nie przejmuja liter wpisywanych w polu tekstowym.
Strona kierowcy — Dodaj Akcje i ContactDropdown
Przycisk Dodaj Akcje
Zastapiono przycisk "Napisz" nowym przyciskiem Dodaj Akcje w naglowku TimeLine Zlecenia. Po kliknieciu rozwija sie menu z opcjami: dodaj zdjecie, dodaj dokument, dodaj notatke, wyslij wiadomosc.
Dodatkowo przy kazdym kroku statusowym na timeline (Start, Zaladunek, Rozladunek, Dostarczono) pojawil sie inline przycisk Dodaj Akcje w tej samej linii co nazwa statusu.
ContactDropdown — Zadzwon i Napisz
W sekcji kontaktowej na stronie kierowcy dodano dwa przyciski dropdown:
- Zadzwon — rozwija liste kontaktow telefonicznych (Dyspozytor, Biuro, Pomoc drogowa)
- Napisz — rozwija liste odbiorcow wiadomosci prywatnych DM (Dyspozytor, Biuro, Inny)
Usunieto stary komponent WriteMessageButton i logike prefixu adresata w wiadomosciach.
Parametry logiki — usunieto podstatus
Usunieto tekst "podstatus" wyswietlany pod etykieta w elementach drzewa regul. Elementy pokazuja teraz tylko swoja nazwe bez dodatkowych opisow.
Tablica — stale closures w historii
Zarządzanie historia (pushHistory/undo/redo) przeniesione na refs zamiast closure state. Eliminuje utrate elementow przy szybkich operacjach rysowania i dodawania tekstu. handleTextSubmit czyta color/strokeWidth z refs.
PdfViewer — zmiana CDN workera
Zmieniono CDN workera pdf.js z cdnjs na jsdelivr. Wersja pdfjs-dist 5.5.207 nie była dostepna na cdnjs, co powodowalo fallback na fake worker i brak renderowania PDF.
Czat AI — aktualna data
Agent AI odpowiadal z nieprawidlowa data (knowledge cutoff). Dodano biezaca date do system prompt (strefa Europe/Warsaw).
Strona kierowcy — Strona Zlecenia
- Zmieniono naglowek z "Strona kierowcy" na "Strona Zlecenia"
- Footer: logo + napis jak w naglowku, wersja aplikacji z package.json
- ContactDropdown (Zadzwon/Napisz): dodano pole wyszukiwania kontaktow
- Usunieto "Biuro AI-CARGO" z sekcji kontakt
- Wiadomosci: godzina obok nadawcy w jednej linii
Powitanie agenta — data i zadania
Po zalogowaniu animacja powitania wyswietla:
- Imie uzytkownika
- Dzisiejsza date (dzien tygodnia, dzien miesiaca, rok)
- Liczbe przydzielonych zadan do zrobienia lub informacje o braku zadan
- Czas animacji wydluzony z 2.5s do 3.5s
Tablica — 2-panelowy layout z zapisem
Strona Tablica podzielona na dwie czesci:
- Lewy panel (zwijany, 256px): lista zapisanych tablic uzytkownika, pole nazwy aktywnej tablicy, przycisk "Nowa tablica", usuwanie tablic
- Prawy panel: obszar roboczy (canvas) do rysowania — aktywowany po wybraniu tablicy
Tablice zapisywane w Supabase (tabela whiteboards) z auto-zapisem po 1.5s bezczynnosci. API CRUD: GET (lista + szczegoly), POST, PATCH, DELETE.
Biblioteka danych — kategoria Tablice
Dodano nowa kategorie Tablice w Bibliotece danych. Wyswietla liste wszystkich tablic utworzonych przez uzytkownikow z data ostatniej modyfikacji.
Zlecenia — 7 nowych kolumn
Rozszerzono panel Zlecenia o nowe kolumny danych kontenerowych i zaladunkowych:
- Nr kontenera — numer kontenera przypisanego do zlecenia
- Podjecie kont. — miejsce podjecia kontenera
- Adres zaladunku — adres miejsca zaladunku (z fallbackiem na pole "from")
- Data zaladunku — planowana data zaladunku
- Waga brutto — waga towaru brutto (z fallbackiem na pole "weight")
- Zlozenie kont. — miejsce zlozenia kontenera
- Godz. zlecenia — godzina otrzymania zlecenia email (format HH:MM DD.MM)
Nowe pola dostepne w formularzu "Nowe zlecenie" oraz uwzgledniane w filtrze wyszukiwania.
Dokumenty — blokowy edytor w stylu ClickUp Docs
Nowy panel Dokumenty w menu glownym z 2-panelowym layoutem i blokowym edytorem:
Lewy panel — lista dokumentow
- Lista wszystkich zapisanych dokumentow i stron Wiki
- Wyszukiwarka i filtry (Wszystkie / Dokumenty / Wiki)
- Tworzenie nowych dokumentow i stron Wiki
- Szablon WIKI_Brand z danymi firmy
Prawy panel — blokowy edytor
- System blokowy: kazdy element (tekst, naglowek, tabela, baner) to osobny blok
- Przycisk + po najechaniu na kazdy blok — otwiera menu dodawania
- Komenda / w pustym bloku — slash menu z kategoriami i wyszukiwarka
- Tabele z widocznymi krawedziami, dodawanie wierszy/kolumn, edycja komorek
- Banery kolorowe: Info (niebieski), Sukces (zielony), Ostrzezenie (zolty), Blad (czerwony)
- Checklist — interaktywne pola wyboru, przekreslenie po zaznaczeniu
- Link / Przycisk — link zewnetrzny lub przycisk z URL
- Naglowki H1/H2/H3, listy punktowane/numerowane, cytat, blok kodu, separator
- Enter = nowy blok, Backspace w pustym = usun blok
- Auto-zapis po 1.2s bezczynnosci
- Layout dopasowany do reszty paneli (sidebar inset, var header-height)
WIKI_Brand — szablon
Gotowy szablon Wiki z tabelami danych rejestrowych, banerami, checklistami i przyciskiem-linkiem.
Tablica — skrot T = Tekst
Zamieniono skroty klawiszowe: T = Tekst (wstawianie), F = Rysowanie (olowek). Poprzednio bylo odwrotnie.
Tablica — naprawa narzedzia tekstu (pointer-events SVG)
Rozwiazano problem z niestabilnym dzialaniem narzedzia tekstu na Tablicy. Klikniecia trafialy w elementy SVG (siatka punktow, narysowane ksztalty) zamiast w div canvasu, co powodowalo ze handlePointerDown czasem nie odpalal narzedzia tekstu.
- SVG pointer-events: none — warstwa SVG nie przechwytuje juz klikniec, wszystkie trafiaja bezposrednio do diva canvasu
- Force-focus via requestAnimationFrame — dodatkowe zabezpieczenie: autoFocus na input bywa zawodne podczas obslugi pointer event, teraz focus jest wymuszany w nastepnej klatce animacji
- Usunieto debug console.logs z poprzedniej sesji
Tablica — finalny fix narzedzia tekstu (skipBlurRef)
Rozwiazano glowna przyczyne braku dzialania wstawiania tekstu. Przegladarka natychmiast bluruje nowo utworzony input po zdarzeniu pointerDown na canvasie, co wywoływalo handleTextSubmit() zamykajac input zanim uzytkownik zdazyl cokolwiek wpisac.
- Root cause: flaga
skipBlurRefbyla ustawiana tylko przy zamianie istniejacego inputa tekstowego, ale NIE przy tworzeniu nowego — pierwszy blur zawsze zamykal input - Fix:
skipBlurRef.current = trueprzed kazdymsetTextInput(), nie tylko przy istniejacym inpucie - Dodano potrojny fallback focusa: immediate
focus()+requestAnimationFrame+setTimeout(50ms)