UI: globalny auto-init Select2 z wyszukiwarka dla selectow >4 opcji
- Nowy libraries/adspro-select2-autoinit.js (auto-init na document.ready + ajaxComplete debounce 150ms) - Wyszukiwarka odblokowana dla "Grupa reklam", "Kampania", "Klient" na /campaign_terms (data-adspro-select2="true") - Globalne style Select2 w layout/style.scss i style.css (uogolnione z .products-page) - Usuniety duplikat: blok CSS .products-page .select2-* i funkcja init_products_scope_select_search() w products PAUL: phase 10-select2-global-search complete (plan 10-01) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
133
.paul/phases/10-select2-global-search/10-01-SUMMARY.md
Normal file
133
.paul/phases/10-select2-global-search/10-01-SUMMARY.md
Normal file
@@ -0,0 +1,133 @@
|
||||
---
|
||||
phase: 10-select2-global-search
|
||||
plan: 01
|
||||
subsystem: ui
|
||||
tags: [select2, jquery, ui, frontend, autoinit]
|
||||
|
||||
requires:
|
||||
- phase: existing layout
|
||||
provides: Select2 library already loaded via layout-logged.php
|
||||
provides:
|
||||
- Globalny auto-init Select2 dla wszystkich <select> >4 opcji w layout-logged
|
||||
- Wyszukiwarka w selectach na /campaign_terms (klient, kampania, grupa reklam)
|
||||
- Ujednolicony styl Select2 (poprzednio tylko .products-page)
|
||||
affects: [wszystkie przyszle moduly UI uzywajace <select>]
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "Opt-in/opt-out atrybuty: data-adspro-select2=\"true|false\", klasa .no-select2"
|
||||
- "Globalny ajaxComplete debounce do re-initu po dynamicznych zmianach DOM"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- libraries/adspro-select2-autoinit.js
|
||||
modified:
|
||||
- templates/site/layout-logged.php
|
||||
- layout/style.scss
|
||||
- layout/style.css
|
||||
- templates/products/main_view.php
|
||||
- templates/campaign_terms/main_view.php
|
||||
|
||||
key-decisions:
|
||||
- "Globalny auto-init zamiast lokalnych init() w kazdym module"
|
||||
- "Prog >4 opcji jako domyslny + opt-in atrybutem dla dynamicznych selectow"
|
||||
- "AllowClear automatyczny gdy pierwsza option ma value=\"\""
|
||||
|
||||
patterns-established:
|
||||
- "data-adspro-select2 attribute jako opt-in dla selectow ladowanych AJAX-em"
|
||||
- "Globalne style Select2 w layout/style.scss (bez prefiksu .products-page)"
|
||||
|
||||
duration: ~20min
|
||||
started: 2026-05-16T13:20:00Z
|
||||
completed: 2026-05-16T13:40:00Z
|
||||
---
|
||||
|
||||
# Phase 10 Plan 01: Select2 global search Summary
|
||||
|
||||
**Globalny auto-init Select2 z polem wyszukiwania dla kazdego <select> z >4 opcjami; konkretnie odblokowane wyszukiwanie w "Grupa reklam" na /campaign_terms.**
|
||||
|
||||
## Performance
|
||||
|
||||
| Metric | Value |
|
||||
|--------|-------|
|
||||
| Duration | ~20 min |
|
||||
| Started | 2026-05-16T13:20:00Z |
|
||||
| Completed | 2026-05-16T13:40:00Z |
|
||||
| Tasks | 4 (3 auto + 1 checkpoint approved) |
|
||||
| Files modified | 5 + 1 created |
|
||||
|
||||
## Acceptance Criteria Results
|
||||
|
||||
| Criterion | Status | Notes |
|
||||
|-----------|--------|-------|
|
||||
| AC-1: Select "Grupa reklam" ma wyszukiwarke | Pass | Potwierdzone przez user "approved" |
|
||||
| AC-2: Auto-init dla selectow >4 opcji | Pass | Implementacja w libraries/adspro-select2-autoinit.js |
|
||||
| AC-3: AllowClear dla selectow z pusta opcja | Pass | Wykrywane przez first_value === "" |
|
||||
| AC-4: Styl spojny z dotychczasowym /products | Pass | Block .products-page .select2-* usuniety, style przeniesione do globalnego scope |
|
||||
| AC-5: Brak regresji indywidualnych Select2 | Pass | $googleCategory.select2(...) zachowany; auto-init sprawdza $.data('select2') |
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Globalny moduł `adspro-select2-autoinit.js` z `window.adsproSelect2Init()` + auto-trigger na `document.ready` i `ajaxComplete` (debounce 150ms)
|
||||
- Wyszukiwarka dla 3 selectów na `/campaign_terms` (klient, kampania, grupa reklam) — odblokowane przez `data-adspro-select2="true"`
|
||||
- Eliminacja duplikacji: ~80 linii (CSS + funkcja init) usunięte z `templates/products/main_view.php`
|
||||
- Globalne style Select2 (height 38, radius 6, focus #6690f4) w `layout/style.scss` i `layout/style.css`
|
||||
|
||||
## Files Created/Modified
|
||||
|
||||
| File | Change | Purpose |
|
||||
|------|--------|---------|
|
||||
| `libraries/adspro-select2-autoinit.js` | Created | Modul auto-init Select2 + helper window.adsproSelect2Init |
|
||||
| `templates/site/layout-logged.php` | Modified | Podpiecie skryptu auto-init po Select2 |
|
||||
| `layout/style.scss` | Modified | Globalne reguly Select2 (źródło) |
|
||||
| `layout/style.css` | Modified | Globalne reguly Select2 (build) wstrzykniete przed sourceMappingURL |
|
||||
| `templates/products/main_view.php` | Modified | Usuniety blok CSS .products-page .select2-* i funkcja init_products_scope_select_search() |
|
||||
| `templates/campaign_terms/main_view.php` | Modified | data-adspro-select2="true" na 3 selectach + wywolania window.adsproSelect2Init() po AJAX |
|
||||
|
||||
## Decisions Made
|
||||
|
||||
| Decision | Rationale | Impact |
|
||||
|----------|-----------|--------|
|
||||
| Threshold >4 opcji | Krotsze listy nie potrzebuja wyszukiwarki | Selecty 2-4 opcji pozostaja natywne |
|
||||
| Opt-in `data-adspro-select2="true"` dla AJAX | Dynamiczne selecty zaczynaja z 0-1 opcji | Wymusza init niezaleznie od chwilowej liczby opcji |
|
||||
| Debounce 150ms na ajaxComplete | Multi-AJAX flow (load_campaigns -> load_ad_groups) | Jeden batch init zamiast wielu kolejnych |
|
||||
| Zachowac `$googleCategory.select2(...)` w products | Wlasny placeholder, data: cats, allowClear | Auto-init pomija dzieki $.data('select2') check |
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
### Summary
|
||||
|
||||
| Type | Count | Impact |
|
||||
|------|-------|--------|
|
||||
| Auto-fixed | 0 | - |
|
||||
| Scope additions | 0 | - |
|
||||
| Deferred | 0 | - |
|
||||
|
||||
**Total impact:** Plan executed exactly as written.
|
||||
|
||||
### Deferred Items
|
||||
|
||||
None — plan executed exactly as written.
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
| Issue | Resolution |
|
||||
|-------|------------|
|
||||
| `layout/style.css` jest minified single-line z sourceMappingURL na koncu | Wstrzykniecie nowych regul przed komentarzem sourceMappingURL via Python helper (zachowano BOM i mape) |
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
**Ready:**
|
||||
- Auto-init dziala na calym layout-logged — przyszle moduly z `<select>` >4 opcji dostana wyszukiwarke za darmo
|
||||
- Wzorzec `data-adspro-select2="true"` dostepny dla dynamicznie ladowanych selectow
|
||||
|
||||
**Concerns:**
|
||||
- Style globalne moga konfliktowac z innymi miejscami uzywajacymi Select2 (np. jconfirm-box, adspro-dialog-box maja juz swoje overrides — sprawdzic ewentualne kolizje w czasie rzeczywistego uzytkowania)
|
||||
- Jezeli `layout/style.scss` zostanie przebudowane przez sass, blok `// === Select2 global overrides ===` zostanie zachowany w scss, ale .css wygenerowany ponownie zastapi wstrzykniety blok — przy nastepnym budowaniu trzeba zbudowac z scss
|
||||
|
||||
**Blockers:** None
|
||||
|
||||
---
|
||||
*Phase: 10-select2-global-search, Plan: 01*
|
||||
*Completed: 2026-05-16*
|
||||
Reference in New Issue
Block a user