- 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>
134 lines
5.6 KiB
Markdown
134 lines
5.6 KiB
Markdown
---
|
|
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*
|