feat(v0.1): historia cen + jawnosc cen — milestone Initial Release

Historia cen:
- Tabela wp_price_history z WP Cronem dziennym (snapshot cen)
- AJAX endpoint apartamenty_get_price_history (zabezpieczony nonce)
- Popup "Historia cen" w widgecie — vanilla JS, modal zgodny z projektem

Jawnosc cen:
- Endpointy /ceny-mieszkan.xml + /dane-gov-pl.xml (XSD-compliant)
- Pliki MD5 dla obu XML
- Strona admina: Narzedzia -> Jawnosc Cen z URL-ami do Ministerstwa
- Transient cache 1h z inwalidacja przez cron

Dokumentacja: docs/readme.md + docs/jawnosc-cen.md

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-12 15:40:29 +01:00
parent c954889b64
commit 972c69b136
19 changed files with 2854 additions and 3 deletions

View File

@@ -0,0 +1,118 @@
---
phase: 01-historia-cen
plan: 02
subsystem: ui
tags: [popup, modal, ajax, vanilla-js, scss, css, widget]
requires:
- phase: 01-historia-cen
plan: 01
provides: AJAX endpoint apartamenty_get_price_history + wp_localize_script (apartamentsData)
provides:
- popup „Historia cen" z danymi AJAX na stronie /apartamenty/
- przycisk .btn-historia-cen z data-post-id w widgecie
- style .price-history-modal / .price-history-overlay w main.scss + main.css
- JS handler: fetch AJAX → render modal → open/close
affects: []
tech-stack:
added: []
patterns:
- Globalny popup (jeden egzemplarz poza pętlą while) wypełniany przez JS
- Vanilla JS fetch + FormData zamiast jQuery AJAX
- CSS class toggle (is-open) zamiast display inline
key-files:
modified:
- wp-content/plugins/elementor-addon/widgets/apartaments.php
- wp-content/plugins/elementor-addon/assets/css/main.scss
- wp-content/plugins/elementor-addon/assets/css/main.css
- wp-content/plugins/elementor-addon/assets/js/main.js
key-decisions:
- "ID price-history-sqm zamiast price-history-price-m2 — spójna zmiana w HTML i JS"
- "max-height + overflow-y:auto na .price-history-modal__table-wrap — scroll gdy dużo historii"
patterns-established:
- "Popup globalny poza pętlą — jeden egzemplarz na stronę, wypełniany przez JS"
- "Vanilla JS fetch z FormData dla AJAX WordPress (bez jQuery)"
duration: ~30min
started: 2026-03-12T00:00:00Z
completed: 2026-03-12T00:30:00Z
---
# Faza 01 Plan 02: Popup Historia Cen — Summary
**Klikalny modal „Historia cen" na kartach apartamentów — AJAX, vanilla JS, CSS zgodny z projektem.**
## Performance
| Metric | Value |
|--------|-------|
| Duration | ~30 min |
| Started | 2026-03-12 |
| Completed | 2026-03-12 |
| Tasks | 3 auto + 1 checkpoint |
| Files modified | 4 |
## Acceptance Criteria Results
| Criterion | Status | Notes |
|-----------|--------|-------|
| AC-1: Przycisk klikalny z data-post-id | Pass | `.btn-historia-cen[data-post-id]` w każdym wierszu |
| AC-2: Popup otwiera się z danymi | Pass | Tytuł, cena brutto, cena m², tabela historii z AJAX |
| AC-3: Popup zamyka się | Pass | X, klik overlay, Escape — wszystkie działają |
| AC-4: Stan ładowania i błędu | Pass | „Ładowanie..." przy otwarciu, „Brak danych" / „Błąd ładowania" przy problemach |
| AC-5: Pusta historia | Pass | `<td colspan="3">Brak historii cen</td>` gdy historia pusta |
## Accomplishments
- Modal popup bez bibliotek zewnętrznych — vanilla JS + CSS
- Jeden egzemplarz popupa na stronę (poza pętlą `while`) — poprawna architektura
- Scroll w tabeli historii (`max-height: 40vh; overflow-y: auto`) gdy dużo wpisów
- Stan ładowania i pełna obsługa błędów AJAX
## Files Created/Modified
| File | Change | Purpose |
|------|--------|---------|
| `widgets/apartaments.php` | Modified | Dodano `.btn-historia-cen` + `data-post-id` + popup HTML |
| `assets/css/main.scss` | Modified | Dodano style `.price-history-overlay` i `.price-history-modal` |
| `assets/css/main.css` | Modified | Skompilowana wersja CSS (append) |
| `assets/js/main.js` | Modified | Dodano obsługę AJAX + open/close popupa |
## Decisions Made
| Decision | Rationale | Impact |
|----------|-----------|--------|
| ID `price-history-sqm` zamiast `price-history-price-m2` | Krótsza nazwa, spójna w HTML i JS | Brak wpływu na działanie |
| `max-height` + `overflow-y:auto` na tabeli | Ochrona przed bardzo długą historią cen | Lepsze UX przy wielu wpisach |
## Deviations from Plan
| Type | Opis | Impact |
|------|------|--------|
| Auto-fixed | ID `price-history-price-m2``price-history-sqm` | Kosmetyczna, HTML i JS spójne |
## Issues Encountered
None.
## Next Phase Readiness
**Ready:**
- Faza 01 kompletna — oba plany (01-01 i 01-02) ukończone
- Milestone v0.1 ma ukończone obie fazy (01 i 02)
**Concerns:**
- None
**Blockers:**
- None
---
*Phase: 01-historia-cen, Plan: 02*
*Completed: 2026-03-12*