fix(143): polish orders list and sidebar first paint
Phase 143 complete: - remove orders list intro card - apply persisted collapsed sidebar state before CSS first paint - update PAUL and technical docs
This commit is contained in:
@@ -13,8 +13,8 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
|
||||
| Attribute | Value |
|
||||
|-----------|-------|
|
||||
| Version | 3.9.0-dev |
|
||||
| Status | v3.11 Polkurier shipment prepare hotfix complete - Phase 142 closed |
|
||||
| Last Updated | 2026-05-18 (Phase 142 unified) |
|
||||
| Status | v3.12 Orders List Sidebar UI Hotfix complete - Phase 143 closed |
|
||||
| Last Updated | 2026-05-18 (Phase 143 unified) |
|
||||
|
||||
## Requirements
|
||||
|
||||
@@ -142,6 +142,7 @@ Sprzedawca może obsługiwać zamówienia ze wszystkich kanałów
|
||||
- [x] shopPRO Polkurier Delivery Mapping: zakladka `Dostawy` integracji shopPRO pozwala mapowac forme dostawy na Polkurier, laduje uslugi z `PolkurierShipmentService::getDeliveryServices()` i zapisuje `provider='polkurier'` w `carrier_delivery_method_mappings` bez migracji DB — Phase 140
|
||||
- [x] Integrations Hub Grouped Sections: `/settings/integrations` pokazuje lekkie sekcje dla marketplace, kurierow i pozostalych integracji, bez starego naglowka/opisu wspolnego panelu — Phase 141
|
||||
- [x] Polkurier Shipment Prepare Prefill: `/orders/{id}/shipment/prepare` rozpoznaje mapowania shopPRO z `provider='polkurier'`, preselectuje przewoznika i usluge oraz nie fallbackuje do Allegro — Phase 142
|
||||
- [x] Orders List Sidebar UI Hotfix: `/orders/list` startuje bez opisowego boksu "Zamowienia", a zapisany zwiniety sidebar jest stosowany przed pierwszym renderem strony — Phase 143
|
||||
- [x] Integracja polkurier.pl (fundament): pojedyncza globalna konfiguracja w `/settings/integrations/polkurier`, szyfrowany Token API + login, karta w hubie integracji obok Apaczki i realny test polaczenia przez `apimetod=test_auth_api` zweryfikowany na zywym koncie operatora; `ShipmentProviderRegistry` netkniety — `PolkurierShipmentService/TrackingService` w kolejnych fazach — Phase 127
|
||||
- [x] polkurier ShipmentService + TrackingService + UI prepare panel: pelen kontrakt API (createShipment/getLabel/getStatus/cancelOrder/getAvailableCarriers), `PolkurierShipmentService` implementujacy `ShipmentProviderInterface` z normalizacja shipmenttype (lowercase) i splitem ulicy na street/housenumber/flatnumber, `PolkurierTrackingService` mapujacy statusy O/P/A/WP/D/Z/W na znormalizowane, panel "polkurier" w `prepare.php` z dynamiczna lista uslug z `available_carriers`, seed migracja `delivery_status_mappings(provider='polkurier')` z 7 wpisami z PDF v1.11; live test na #114/#115 zakonczony sukcesem po 4 iteracjach (ReferenceError → uppercase shipmenttype → orderno parsing → A4/A6); rozmiar etykiety sterowany w panelu klienta polkurier.pl (Ustawienia konta → Preferencje etykiet), NIE przez API — Phase 128
|
||||
- [x] Order User Notes module (Phase 129): pelen CRUD notatek autorskich operatora per zamowienie. Reuse `order_notes` przez nowy `note_type='user'` z `user_id` (FK→users SET NULL) + `author_name` (snapshot) + indeks `idx_order_notes_type_order`. `OrderNotesService` z autoryzacja DB-level (`WHERE user_id = :user_id`, rowCount=0 ⇒ 403). Sekcja `#notes` w "Wiadomosci i zalaczniki" w `/orders/{id}` z inline edit form + delete przez `OrderProAlerts.confirm`. Badge `[N]` (indigo neutralny) przy nr zamowienia na `/orders/list` (subquery `user_notes_count` w paginate). Brak admin override (brak systemu rol w aplikacji) — edit/delete tylko dla autora — Phase 129
|
||||
@@ -324,6 +325,6 @@ Quick Reference:
|
||||
|
||||
---
|
||||
*PROJECT.md — Updated when requirements or context change*
|
||||
*Last updated: 2026-05-18 after Phase 142 closure*
|
||||
*Last updated: 2026-05-18 after Phase 143 closure*
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,23 @@ orderPRO to narzedzie do wielokanalowego zarzadzania sprzedaza. Projekt przechod
|
||||
|
||||
## Current Milestone
|
||||
|
||||
v3.12 Orders List Sidebar UI Hotfix - Complete
|
||||
|
||||
Maly hotfix UX dla ekranu operacyjnego: usuniecie opisowego boksu z listy zamowien oraz likwidacja widocznego "pokaz i schowaj" przy odswiezaniu strony ze zwinietym sidebarem.
|
||||
|
||||
Progress: 1 of 1 phases complete (100%).
|
||||
|
||||
| Phase | Name | Plans | Status |
|
||||
|-------|------|-------|--------|
|
||||
| 143 | Orders List Sidebar UI Hotfix | 1/1 | Complete (2026-05-18; manual UI/Sonar follow-up pending) |
|
||||
|
||||
### Phase 143: Orders List Sidebar UI Hotfix
|
||||
|
||||
Focus: Usunac boks "Zamowienia / Kompaktowa lista zamowien oparta o lokalna baze orderPRO." z `/orders/list` i zastosowac zapisany stan zwinietego sidebaru przed pierwszym renderem strony.
|
||||
Plans: 143-01 (complete; `.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-SUMMARY.md`)
|
||||
|
||||
## Previous Milestone
|
||||
|
||||
v3.11 Polkurier Shipment Prepare Hotfix - Complete
|
||||
|
||||
Pilny hotfix po Phase 140: mapowanie shopPRO -> Polkurier zapisuje sie poprawnie, ale formularz `/orders/{id}/shipment/prepare` nie podstawia providera i uslugi Polkuriera.
|
||||
@@ -21,7 +38,7 @@ Progress: 1 of 1 phases complete (100%).
|
||||
Focus: Naprawic preselect w formularzu przygotowania przesylki, aby `carrier_delivery_method_mappings.provider='polkurier'` wybieral przewoznika Polkurier, zaznaczal zapisana usluge i ustawial hidden fields wymagane przez `PolkurierShipmentService`.
|
||||
Plans: 142-01 (complete; `.paul/phases/142-polkurier-shipment-prepare-prefill/142-01-SUMMARY.md`)
|
||||
|
||||
## Previous Milestone
|
||||
## Earlier Milestone
|
||||
|
||||
v3.10 Integrations UI Polish - Complete
|
||||
|
||||
@@ -653,4 +670,4 @@ Archive: `.paul/milestones/v0.1-ROADMAP.md`
|
||||
|
||||
---
|
||||
*Roadmap created: 2026-03-12*
|
||||
*Last updated: 2026-05-18 - Phase 141 complete; v3.10 Integrations UI Polish complete*
|
||||
*Last updated: 2026-05-18 - Phase 143 complete; v3.12 Orders List Sidebar UI Hotfix complete*
|
||||
|
||||
@@ -5,19 +5,19 @@
|
||||
See: .paul/PROJECT.md (updated 2026-05-18)
|
||||
|
||||
**Core value:** Sprzedawca moze obslugiwac zamowienia ze wszystkich kanalow sprzedazy i nadawac przesylki bez przelaczania sie miedzy platformami.
|
||||
**Current focus:** v3.11 Polkurier Shipment Prepare Hotfix complete; Phase 142 unified.
|
||||
**Current focus:** v3.12 Orders List Sidebar UI Hotfix complete; Phase 143 unified.
|
||||
|
||||
## Current Position
|
||||
|
||||
Milestone: v3.11 Polkurier Shipment Prepare Hotfix
|
||||
Phase: 142 of 142 (Polkurier Shipment Prepare Prefill) - Complete
|
||||
Plan: 142-01 complete
|
||||
Milestone: v3.12 Orders List Sidebar UI Hotfix
|
||||
Phase: 143 of 143 (Orders List Sidebar UI Hotfix) - Complete
|
||||
Plan: 143-01 complete
|
||||
Status: Milestone complete, ready for next milestone or release decision
|
||||
Last activity: 2026-05-18 10:34 - Unified .paul/phases/142-polkurier-shipment-prepare-prefill/142-01-PLAN.md
|
||||
Last activity: 2026-05-18 11:50 - Unified .paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-PLAN.md
|
||||
|
||||
Progress:
|
||||
- Milestone v3.11: [##########] 100% (1 of 1 phases complete)
|
||||
- Phase 142: [##########] 100% (complete)
|
||||
- Milestone v3.12: [##########] 100% (1 of 1 phases complete)
|
||||
- Phase 143: [##########] 100% (complete)
|
||||
|
||||
## Loop Position
|
||||
|
||||
@@ -29,19 +29,19 @@ PLAN -> APPLY -> UNIFY
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-05-18 10:34
|
||||
Stopped at: Phase 142 complete; v3.11 milestone complete
|
||||
Last session: 2026-05-18 11:50
|
||||
Stopped at: Phase 143 complete; v3.12 milestone complete
|
||||
Next action: Run $paul-complete-milestone or start next milestone planning
|
||||
Resume file: .paul/phases/142-polkurier-shipment-prepare-prefill/142-01-SUMMARY.md
|
||||
Resume file: .paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-SUMMARY.md
|
||||
|
||||
## Pending parallel work
|
||||
- None — Phase 118, 121, 122 wszystkie zacommitowane (8f14851, 360eef1).
|
||||
|
||||
## Git State
|
||||
|
||||
Last commit: HEAD fix(142): preselect polkurier shipment mapping
|
||||
Last phase commit: HEAD fix(142): preselect polkurier shipment mapping
|
||||
Previous: feat(141): group integrations hub sections
|
||||
Last commit: HEAD fix(143): polish orders list and sidebar first paint
|
||||
Last phase commit: HEAD fix(143): polish orders list and sidebar first paint
|
||||
Previous: fix(142): preselect polkurier shipment mapping
|
||||
Branch: main
|
||||
|
||||
### Skill Audit (Phase 139)
|
||||
@@ -69,6 +69,12 @@ Branch: main
|
||||
|----------|---------|-------|
|
||||
| `sonar-scanner` | gap documented | Attempted after APPLY with `sonar-scanner --version`; CLI is not available in PATH. |
|
||||
|
||||
### Skill Audit (Phase 143)
|
||||
|
||||
| Expected | Invoked | Notes |
|
||||
|----------|---------|-------|
|
||||
| `sonar-scanner` | gap documented | Attempted after APPLY with `sonar-scanner --version`; CLI is not available in PATH. |
|
||||
|
||||
### Skill Audit (Phase 129)
|
||||
|
||||
| Expected | Invoked | Notes |
|
||||
@@ -142,6 +148,7 @@ Branch: main
|
||||
- Phase 139-01 fresh scan found 648 OPEN BLOCKER/CRITICAL/MAJOR issues; final scan after cleanup found 605. Delivery status target files are clean; `OrdersStatisticsRepository` still needs a class split for `php:S1448`.
|
||||
- Phase 139-02 final scan found 495 OPEN BLOCKER/CRITICAL/MAJOR issues. `php:S4833` dropped to 3 and selected `php:S112` generic exception clusters were replaced with typed exceptions.
|
||||
- Phase 141 grouped `/settings/integrations` into presentation-only sections: marketplace, couriers and other. Provider row contracts, routes and settings pages remain unchanged.
|
||||
- Phase 143 removed the descriptive intro card from `/orders/list` and added desktop sidebar pre-hydration through `html.has-collapsed-sidebar` so saved collapsed state applies before first paint.
|
||||
|
||||
### Blockers / Concerns
|
||||
|
||||
@@ -153,6 +160,7 @@ Branch: main
|
||||
- Phase 139 APPLY: local PATH still does not contain `sonar-scanner`, but the official Windows x64 scanner was downloaded to `%TEMP%` and used successfully. `vendor/bin/phpunit` remains unavailable because `vendor/` is missing and Composer is not installed in PATH.
|
||||
- Phase 140 APPLY: manual UI smoke was not run because local app/DB session was not started; Sonar scan could not run because `sonar-scanner` is unavailable.
|
||||
- Phase 141 APPLY: manual UI smoke was not run because local app/browser session was not started; Sonar scan could not run because `sonar-scanner` is unavailable.
|
||||
- Phase 143 APPLY: manual UI smoke was not run because local app/browser session was not started; Sonar scan could not run because `sonar-scanner` is unavailable.
|
||||
- Obsolete Phase 140+ debt plans were removed from the active roadmap on 2026-05-18 by operator decision; performance/debt items can be reintroduced later only if still relevant.
|
||||
|
||||
### Deferred Issues
|
||||
@@ -171,6 +179,9 @@ Branch: main
|
||||
- Phase 142 follow-up: manual smoke `/orders/1164/shipment/prepare` -> potwierdz, ze mapowanie shopPRO -> Polkurier preselectuje przewoznika i usluge.
|
||||
- Phase 142 follow-up: `composer install` / przywroc `vendor/`, potem uruchom `vendor/bin/phpunit tests/Unit/ShipmentPreparePolkurierMappingTest.php`.
|
||||
- Phase 142 follow-up: uruchom SonarQube scan po przywroceniu `sonar-scanner` w PATH albo ponownym pobraniu oficjalnego scanner fallback.
|
||||
- Phase 143 follow-up: manual smoke `/orders/list` -> potwierdz brak boksu "Zamowienia / Kompaktowa lista..." oraz status panel/table layout.
|
||||
- Phase 143 follow-up: manual smoke desktop sidebar -> ustaw `localStorage.sidebarCollapsed='1'`, odswiez strone i potwierdz brak widocznego expanded-to-collapsed flash.
|
||||
- Phase 143 follow-up: uruchom SonarQube scan po przywroceniu `sonar-scanner` w PATH albo ponownym pobraniu oficjalnego scanner fallback.
|
||||
- Phase 138 manual smoke: test a real SMTP SSL/STARTTLS mailbox in strict mode; test invalid and valid e-mail/SMS template saves in UI.
|
||||
- Manualne testy AC-1..AC-7 dla Phase 112 na zywej bazie (XAMPP online).
|
||||
- Backfill zamowienia #882 - operator robi recznie po wdrozeniu (poza zakresem planu).
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
- Formularz przygotowania przesylki rozpoznaje `provider='polkurier'`, pokazuje panel Polkuriera i zaznacza zapisana usluge.
|
||||
- Dodano test regresyjny renderowania widoku dla mapowania Polkuriera.
|
||||
- Gap: PHPUnit i SonarQube scan Phase 142 pozostaja do wykonania po przywroceniu `vendor/` i `sonar-scanner`.
|
||||
- [Phase 143, Plan 01] Usunieto opisowy boks "Zamowienia / Kompaktowa lista..." z `/orders/list`.
|
||||
- Dodano pre-hydration klasy `html.has-collapsed-sidebar`, aby zapisany zwiniety sidebar byl schowany od pierwszego renderu.
|
||||
- Zachowano runtime toggle sidebaru i mobilne slide-in menu; pre-hydration compact state jest ograniczony do desktopu.
|
||||
- Gap: manualny smoke UI i SonarQube scan Phase 143 pozostaja do wykonania po uruchomieniu app/browser session i przywroceniu `sonar-scanner`.
|
||||
|
||||
## Zmienione pliki
|
||||
|
||||
@@ -39,5 +43,11 @@
|
||||
- `.paul/phases/141-integrations-hub-grouped-sections/141-01-SUMMARY.md`
|
||||
- `.paul/phases/142-polkurier-shipment-prepare-prefill/142-01-PLAN.md`
|
||||
- `.paul/phases/142-polkurier-shipment-prepare-prefill/142-01-SUMMARY.md`
|
||||
- `.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-PLAN.md`
|
||||
- `.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-SUMMARY.md`
|
||||
- `resources/views/layouts/app.php`
|
||||
- `resources/views/orders/list.php`
|
||||
- `resources/views/shipments/prepare.php`
|
||||
- `resources/scss/app.scss`
|
||||
- `public/assets/css/app.css`
|
||||
- `tests/Unit/ShipmentPreparePolkurierMappingTest.php`
|
||||
|
||||
160
.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-PLAN.md
Normal file
160
.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-PLAN.md
Normal file
@@ -0,0 +1,160 @@
|
||||
---
|
||||
phase: 143-orders-list-sidebar-ui-hotfix
|
||||
plan: 01
|
||||
type: execute
|
||||
wave: 1
|
||||
depends_on: []
|
||||
files_modified:
|
||||
- resources/views/orders/list.php
|
||||
- resources/views/layouts/app.php
|
||||
- resources/scss/app.scss
|
||||
- public/assets/css/app.css
|
||||
- DOCS/ARCHITECTURE.md
|
||||
- DOCS/TECH_CHANGELOG.md
|
||||
autonomous: true
|
||||
delegation: off
|
||||
---
|
||||
|
||||
<objective>
|
||||
## Goal
|
||||
Usunac niepotrzebny boks naglowka z `/orders/list` oraz wyeliminowac migotanie zwijanego sidebaru po odswiezeniu strony.
|
||||
|
||||
## Purpose
|
||||
Lista zamowien jest glownym ekranem operacyjnym, wiec powinna startowac od danych i filtrow bez dodatkowego opisu. Sidebar ma respektowac zapamietany stan juz przy pierwszym renderze, zeby UI nie wykonywal widocznej animacji "pokaz i schowaj".
|
||||
|
||||
## Output
|
||||
Zmieniony widok listy zamowien, layout aplikacji z pre-hydration state dla sidebaru, przebudowany CSS oraz krotka aktualizacja dokumentacji technicznej.
|
||||
</objective>
|
||||
|
||||
<context>
|
||||
<clarifications>
|
||||
- No clarifications needed - zakres jest jednoznaczny: usunac wskazany boks z `/orders/list`; zwiniety sidebar ma byc schowany od razu po odswiezeniu, gdy `localStorage.sidebarCollapsed === '1'`.
|
||||
</clarifications>
|
||||
|
||||
## Project Context
|
||||
@.paul/PROJECT.md
|
||||
@.paul/ROADMAP.md
|
||||
@.paul/STATE.md
|
||||
@AGENTS.md
|
||||
@DOCS/ARCHITECTURE.md
|
||||
@DOCS/DB_SCHEMA.md
|
||||
|
||||
## Source Files
|
||||
@resources/views/orders/list.php
|
||||
@resources/views/layouts/app.php
|
||||
@resources/scss/app.scss
|
||||
@public/assets/css/app.css
|
||||
@DOCS/ARCHITECTURE.md
|
||||
@DOCS/TECH_CHANGELOG.md
|
||||
</context>
|
||||
|
||||
<skills>
|
||||
No specialized flows required for APPLY. `.paul/SPECIAL-FLOWS.md` lists SonarQube as required after APPLY/before UNIFY; run it if the CLI is available and document the gap if it is not.
|
||||
</skills>
|
||||
|
||||
<acceptance_criteria>
|
||||
|
||||
## AC-1: Orders List Header Box Removed
|
||||
```gherkin
|
||||
Given operator opens /orders/list
|
||||
When the orders list view renders
|
||||
Then the boks containing "Zamowienia" and "Kompaktowa lista zamowien oparta o lokalna baze orderPRO." is not present
|
||||
And the status panel, filters, alerts and orders table still render normally
|
||||
```
|
||||
|
||||
## AC-2: Collapsed Sidebar Has No Refresh Flash
|
||||
```gherkin
|
||||
Given localStorage.sidebarCollapsed is "1"
|
||||
When any authenticated page is refreshed on desktop
|
||||
Then the sidebar is visually collapsed from first paint
|
||||
And it does not animate from expanded to collapsed during page load
|
||||
```
|
||||
|
||||
## AC-3: Sidebar Interactions Still Work
|
||||
```gherkin
|
||||
Given the authenticated app layout is loaded
|
||||
When the operator toggles the sidebar or uses the mobile hamburger menu
|
||||
Then the collapsed state is saved/restored on desktop
|
||||
And the mobile slide-in menu behavior remains unchanged
|
||||
```
|
||||
|
||||
</acceptance_criteria>
|
||||
|
||||
<tasks>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 1: Remove orders list intro card</name>
|
||||
<files>resources/views/orders/list.php, resources/scss/app.scss, public/assets/css/app.css</files>
|
||||
<action>
|
||||
Remove the top card/box that renders the orders title and description from `resources/views/orders/list.php`.
|
||||
Keep the warning alert for `$errorMessage` visible above the shared table component, but do not wrap it in the removed intro card.
|
||||
Remove or neutralize now-unused `.orders-list-page` styling only if it becomes dead after the markup change.
|
||||
Rebuild `public/assets/css/app.css` from SCSS if SCSS changes are made.
|
||||
</action>
|
||||
<verify>Open `/orders/list` or inspect rendered markup: the exact description text is absent while `components/table-list` and `components/order-status-panel` remain present. Run `C:\xampp\php\php.exe -l resources/views/orders/list.php`.</verify>
|
||||
<done>AC-1 satisfied.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 2: Apply saved sidebar collapse before first paint</name>
|
||||
<files>resources/views/layouts/app.php, resources/scss/app.scss, public/assets/css/app.css</files>
|
||||
<action>
|
||||
Add a small inline script in the document head before the CSS links. It should read `localStorage.sidebarCollapsed` and add an HTML class when the saved value is `1`.
|
||||
Extend sidebar SCSS so that the pre-hydration HTML class applies the same compact sidebar layout as `.sidebar.is-collapsed` before the main footer script runs. Avoid changing mobile transform behavior.
|
||||
Update the existing footer sidebar script so it synchronizes the real `.is-collapsed` class with the pre-hydration state and removes the temporary HTML class after initialization. Keep the existing toggle, details expansion, mobile backdrop and link-close behavior.
|
||||
Rebuild `public/assets/css/app.css`.
|
||||
</action>
|
||||
<verify>In browser devtools set `localStorage.sidebarCollapsed='1'`, refresh an authenticated page, and confirm the sidebar is collapsed immediately with no visible expanded-to-collapsed transition. Run `C:\xampp\php\php.exe -l resources/views/layouts/app.php` and `npm run build:css`.</verify>
|
||||
<done>AC-2 and AC-3 satisfied.</done>
|
||||
</task>
|
||||
|
||||
<task type="auto">
|
||||
<name>Task 3: Update technical documentation</name>
|
||||
<files>DOCS/ARCHITECTURE.md, DOCS/TECH_CHANGELOG.md</files>
|
||||
<action>
|
||||
Add a concise architecture note describing the sidebar pre-hydration class/localStorage contract and the simplified orders list header.
|
||||
Add a dated technical changelog entry explaining what changed and why.
|
||||
Do not modify `DOCS/DB_SCHEMA.md` because this plan has no schema changes.
|
||||
</action>
|
||||
<verify>Inspect docs for the new Phase 143 note and confirm no DB schema sections were changed.</verify>
|
||||
<done>Documentation requirement satisfied for AC-1 through AC-3.</done>
|
||||
</task>
|
||||
|
||||
</tasks>
|
||||
|
||||
<boundaries>
|
||||
|
||||
## DO NOT CHANGE
|
||||
- database/migrations/* - no database/schema work in this UI hotfix.
|
||||
- src/Modules/Orders/* - no backend query, controller or repository changes needed.
|
||||
- resources/views/components/table-list.php - filters/table behavior stays as-is.
|
||||
- Mobile sidebar semantics beyond preserving existing hamburger/backdrop behavior.
|
||||
|
||||
## SCOPE LIMITS
|
||||
- Do not redesign the orders list table or status panel.
|
||||
- Do not add dependencies or new frontend build tooling.
|
||||
- Do not remove translation keys unless a separate cleanup is requested.
|
||||
|
||||
</boundaries>
|
||||
|
||||
<verification>
|
||||
Before declaring plan complete:
|
||||
- [ ] `C:\xampp\php\php.exe -l resources/views/orders/list.php`
|
||||
- [ ] `C:\xampp\php\php.exe -l resources/views/layouts/app.php`
|
||||
- [ ] `npm run build:css`
|
||||
- [ ] Manual/browser smoke for `/orders/list`: intro box absent, table/status panel present.
|
||||
- [ ] Manual/browser smoke for collapsed sidebar refresh: no expanded flash.
|
||||
- [ ] SonarQube scan attempted if `sonar-scanner` is available; gap documented if unavailable.
|
||||
</verification>
|
||||
|
||||
<success_criteria>
|
||||
- The indicated "Zamowienia / Kompaktowa lista..." box is gone from `/orders/list`.
|
||||
- Previously collapsed desktop sidebar stays collapsed from first paint after refresh.
|
||||
- Sidebar toggle and mobile hamburger interactions continue to work.
|
||||
- CSS build and PHP lint checks pass.
|
||||
- Documentation is updated without schema changes.
|
||||
</success_criteria>
|
||||
|
||||
<output>
|
||||
After completion, create `.paul/phases/143-orders-list-sidebar-ui-hotfix/143-01-SUMMARY.md`.
|
||||
</output>
|
||||
@@ -0,0 +1,93 @@
|
||||
---
|
||||
phase: 143-orders-list-sidebar-ui-hotfix
|
||||
plan: 01
|
||||
subsystem: ui
|
||||
tags: [orders-list, sidebar, scss, layout]
|
||||
requires:
|
||||
- phase: 142-polkurier-shipment-prepare-prefill
|
||||
provides: Completed prior hotfix milestone state
|
||||
provides:
|
||||
- Removed orders list intro card
|
||||
- Sidebar collapsed-state pre-hydration before first paint
|
||||
affects: [orders-list, app-layout, frontend-ui]
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns: [html pre-hydration class for persisted UI state]
|
||||
key-files:
|
||||
created: []
|
||||
modified:
|
||||
- resources/views/orders/list.php
|
||||
- resources/views/layouts/app.php
|
||||
- resources/scss/app.scss
|
||||
- public/assets/css/app.css
|
||||
- DOCS/ARCHITECTURE.md
|
||||
- DOCS/TECH_CHANGELOG.md
|
||||
key-decisions:
|
||||
- "Use html.has-collapsed-sidebar before CSS loads to avoid expanded sidebar flash."
|
||||
- "Keep pre-hydration collapsed rules desktop-only so mobile slide-in behavior stays unchanged."
|
||||
patterns-established:
|
||||
- "Persisted layout state that affects first paint can be bridged through a temporary html class, then synchronized by the runtime script."
|
||||
duration: 6min
|
||||
started: 2026-05-18T11:44:00+02:00
|
||||
completed: 2026-05-18T11:50:00+02:00
|
||||
---
|
||||
|
||||
# Phase 143 Plan 01 Summary: Orders List Sidebar UI Hotfix
|
||||
|
||||
## Outcome
|
||||
|
||||
Implemented the approved UI hotfix for `/orders/list` and the authenticated app sidebar.
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~6 minutes |
|
||||
| Started | 2026-05-18 11:44 Europe/Warsaw |
|
||||
| Completed | 2026-05-18 11:50 Europe/Warsaw |
|
||||
| Tasks | 3 completed |
|
||||
| Files modified | 8 plus PAUL state files |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Orders List Header Box Removed | Pass | Intro card removed from `resources/views/orders/list.php`; targeted `rg` no longer finds the description or `.orders-list-page` in source/SCSS. |
|
||||
| AC-2: Collapsed Sidebar Has No Refresh Flash | Pass | Head script sets `html.has-collapsed-sidebar` before CSS loads; SCSS mirrors collapsed rules for first paint. |
|
||||
| AC-3: Sidebar Interactions Still Work | Pass | Footer script still owns toggle/persistence/mobile menu behavior and removes the temporary HTML class after initialization. |
|
||||
|
||||
## Changes
|
||||
|
||||
- Removed the intro card from `resources/views/orders/list.php` that showed `Zamowienia` and `Kompaktowa lista zamowien oparta o lokalna baze orderPRO.`.
|
||||
- Kept the orders-list warning alert above the shared table component, without the removed intro card wrapper.
|
||||
- Added a head-time pre-hydration script in `resources/views/layouts/app.php` that marks `<html>` with `has-collapsed-sidebar` when `localStorage.sidebarCollapsed === '1'`.
|
||||
- Updated `resources/scss/app.scss` so the temporary HTML class applies the same compact desktop sidebar dimensions before the footer script initializes.
|
||||
- Kept mobile menu behavior isolated by applying the pre-hydration compact state only at desktop widths.
|
||||
- Rebuilt `public/assets/css/app.css`.
|
||||
- Updated `DOCS/ARCHITECTURE.md` and `DOCS/TECH_CHANGELOG.md`.
|
||||
|
||||
## Verification
|
||||
|
||||
| Check | Result |
|
||||
|-------|--------|
|
||||
| `C:\xampp\php\php.exe -l resources/views/orders/list.php` | Pass |
|
||||
| `C:\xampp\php\php.exe -l resources/views/layouts/app.php` | Pass |
|
||||
| `npm run build:css` | Pass |
|
||||
| `rg -n "Kompaktowa lista zamowien oparta o lokalna baze orderPRO\|orders-list-page"` targeted source check | Pass - removed from `orders/list.php` and SCSS |
|
||||
| `git diff --check` targeted files | Pass - only line-ending warnings from Git |
|
||||
| `sonar-scanner --version` | Gap - CLI not available in PATH |
|
||||
|
||||
## Notes
|
||||
|
||||
- No database schema changes or migrations were introduced.
|
||||
- Browser/live smoke was not run because no local authenticated app session was started in this turn.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
- Summary was created during APPLY, then enriched during UNIFY with PAUL frontmatter and AC reconciliation.
|
||||
- No scope changes were introduced.
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
- Phase 143 is complete and this one-phase milestone can be closed.
|
||||
- No blockers for a future milestone.
|
||||
@@ -107,6 +107,12 @@ HTTP Request
|
||||
|
||||
## Frontend Enhancement Modules
|
||||
|
||||
### Orders List and Sidebar State
|
||||
- `/orders/list` renders the reusable order status panel and shared `components/table-list` directly; the previous descriptive intro card was removed so the operational table starts higher on the screen.
|
||||
- The desktop sidebar collapse state is stored in `localStorage.sidebarCollapsed`.
|
||||
- `resources/views/layouts/app.php` reads that value in the document head and adds `html.has-collapsed-sidebar` before CSS loads. `resources/scss/app.scss` mirrors the compact sidebar rules for that pre-hydration class, so a saved collapsed sidebar is collapsed on first paint instead of animating after the footer script runs.
|
||||
- The footer sidebar script still owns runtime interactions: it applies/removes `.sidebar.is-collapsed`, updates the button labels, closes open `details`, persists the state, and then removes the temporary HTML pre-hydration class.
|
||||
|
||||
### Checkbox Multiselect (`public/assets/js/modules/checkbox-multiselect.js`)
|
||||
- Loaded globally from `resources/views/layouts/app.php`.
|
||||
- Enhances native `<select multiple data-checkbox-multiselect>` controls after `DOMContentLoaded`.
|
||||
|
||||
@@ -1,5 +1,20 @@
|
||||
# Technical Changelog
|
||||
|
||||
## 2026-05-18 - Phase 143 Plan 01: Orders List Sidebar UI Hotfix
|
||||
|
||||
**Co zrobiono:**
|
||||
- Usunieto opisowy boks z `/orders/list` zawierajacy tytul "Zamowienia" i opis kompaktowej listy.
|
||||
- Alert bledu listy zamowien pozostaje widoczny nad wspolnym komponentem tabeli, ale nie jest juz opakowany w usuniety intro-card.
|
||||
- Dodano pre-hydration state dla zwiniwtego sidebaru: `layout/app.php` ustawia `html.has-collapsed-sidebar` przed ladowaniem CSS, gdy `localStorage.sidebarCollapsed` ma wartosc `1`.
|
||||
- SCSS powiela kompaktowe reguly sidebaru dla tej tymczasowej klasy, a footer script synchronizuje docelowa klase `.sidebar.is-collapsed` i usuwa klase z `<html>` po inicjalizacji.
|
||||
|
||||
**Dlaczego:**
|
||||
- Lista zamowien jest ekranem operacyjnym i ma pokazywac dane/filtrowanie bez dodatkowego opisowego boksu.
|
||||
- Wczesniej zapisany zwiniwty sidebar byl najpierw renderowany jako rozwiniety, a dopiero po zaladowaniu skryptu chowal sie z animacja.
|
||||
|
||||
**BREAKING / migracja:**
|
||||
- Brak migracji DB i brak zmian breaking. Zmiana dotyczy tylko renderowania UI i CSS.
|
||||
|
||||
## 2026-05-18 - Phase 142 Plan 01: Polkurier Shipment Prepare Prefill
|
||||
|
||||
**Co zrobiono:**
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -51,7 +51,7 @@ a {
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.sidebar.is-collapsed {
|
||||
@mixin sidebar-collapsed-state {
|
||||
width: 52px;
|
||||
min-width: 52px;
|
||||
padding: 18px 0;
|
||||
@@ -90,6 +90,16 @@ a {
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar.is-collapsed {
|
||||
@include sidebar-collapsed-state;
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.has-collapsed-sidebar .sidebar {
|
||||
@include sidebar-collapsed-state;
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar__brand {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
@@ -145,6 +155,12 @@ a {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
|
||||
@media (min-width: 769px) {
|
||||
.has-collapsed-sidebar .sidebar .sidebar__collapse-icon {
|
||||
transform: rotate(180deg);
|
||||
}
|
||||
}
|
||||
|
||||
.sidebar__nav {
|
||||
display: grid;
|
||||
gap: 4px;
|
||||
@@ -1056,11 +1072,6 @@ h4.section-title {
|
||||
}
|
||||
}
|
||||
|
||||
.orders-list-page {
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.statistics-orders-page {
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
@@ -9,6 +9,15 @@ use App\Modules\Shipments\DeliveryStatusMappingRepository;
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title><?= $e($t('meta.title_pattern', ['title' => (string) ($title ?? $t('meta.default_panel_title'))])) ?></title>
|
||||
<script>
|
||||
(function () {
|
||||
try {
|
||||
if (localStorage.getItem('sidebarCollapsed') === '1') {
|
||||
document.documentElement.classList.add('has-collapsed-sidebar');
|
||||
}
|
||||
} catch (e) {}
|
||||
})();
|
||||
</script>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Roboto:wght@400;500;700&display=swap" rel="stylesheet">
|
||||
@@ -232,6 +241,7 @@ use App\Modules\Shipments\DeliveryStatusMappingRepository;
|
||||
var sidebar = document.getElementById('js-sidebar');
|
||||
var collapseBtn = document.getElementById('js-sidebar-collapse');
|
||||
if (!sidebar || !collapseBtn) return;
|
||||
var html = document.documentElement;
|
||||
|
||||
function setCollapsed(collapsed) {
|
||||
sidebar.classList.toggle('is-collapsed', collapsed);
|
||||
@@ -248,6 +258,7 @@ use App\Modules\Shipments\DeliveryStatusMappingRepository;
|
||||
try {
|
||||
if (localStorage.getItem(STORAGE_KEY) === '1') setCollapsed(true);
|
||||
} catch (e) {}
|
||||
html.classList.remove('has-collapsed-sidebar');
|
||||
|
||||
collapseBtn.addEventListener('click', function () {
|
||||
setCollapsed(!sidebar.classList.contains('is-collapsed'));
|
||||
|
||||
@@ -8,17 +8,9 @@
|
||||
]); ?>
|
||||
|
||||
<div class="order-show-main">
|
||||
<section class="card orders-list-page">
|
||||
<div class="orders-head">
|
||||
<div>
|
||||
<h2 class="section-title"><?= $e($t('orders.title')) ?></h2>
|
||||
<p class="muted mt-12"><?= $e($t('orders.description')) ?></p>
|
||||
</div>
|
||||
</div>
|
||||
<?php if (!empty($errorMessage)): ?>
|
||||
<div class="mt-12"><?php $component('components/alert', ['type' => 'warning', 'message' => (string) $errorMessage, 'dismissible' => true]); ?></div>
|
||||
<?php endif; ?>
|
||||
</section>
|
||||
<?php if (!empty($errorMessage)): ?>
|
||||
<div class="mb-12"><?php $component('components/alert', ['type' => 'warning', 'message' => (string) $errorMessage, 'dismissible' => true]); ?></div>
|
||||
<?php endif; ?>
|
||||
|
||||
<?php $component('components/table-list'); ?>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user