|
Some checks are pending
build-gate / build (push) Waiting to run
The original wall is gone: 716 lines of duplicated markup, CSS, export modal and print wiring deleted. This profile now supplies only what cannot be shared — REGION_OF/regionFor (its taxonomy, keyed by list id because a selector can be a wagf_block, a country_codes array or pg_slugs and none of those implies a continent) and fetchListRecords (the people-groups API, the selector evaluator and the pg_slugs special case). It joins country-posters (94 lines) and key-cities (75) on one component, which is what the Driver asked for: "don't recreate the wheel but imitate upg 100 list". It took three capability additions across three ticks, because migrating without them would have REGRESSED this wall rather than consolidated it: cardStocks, then posterAction="print" and hidePrayerListWhenSoon — the last two a Driver ruling, not a preference. ★ TWO REAL BUGS, BOTH INVISIBLE AT THE SOURCE LAYER, BOTH BUILDING CLEANLY. 1. groupBy SIGNATURE MISMATCH. regionFor takes an ID; the shared wall's groupBy takes the whole ITEM. `:group-by="regionFor"` compiled, the page loaded, and then threw `c.startsWith is not a function` at first render — the whole wall blank, zero cards, nothing wrong in the source. Adapted in the template rather than changing regionFor, since the id is what the taxonomy is keyed by. 2. A THROWN FETCH IS A MISS, NOT AN ERROR — and this one is a robustness gap in the SHARED component, affecting every consumer. fetch REJECTS rather than returning !ok when a request is blocked or offline, and exportPoster let that reject escape to the outer catch, skipping the rasterise fallback and showing "Failed to fetch" on a poster the browser could have generated from posters/<id>.html. The wall this component was EXTRACTED FROM already guarded it; the extraction did not carry the guard across. check:poster-print-fallback went PASS -> FAIL with 0 .html requests, and is green again. VERIFIED AT THE RENDERED LAYER, all three print actions on the migrated wall: 27 cards, 27 stock pickers, 4 buttons per card — the original's three prints plus show-on-map. CARD DECK 116 cards / 116 QR codes / @page 2.5in x 3.5in / 0 errors, identical to pre-migration. POSTER PRINT with every .webp aborted: 1 .html fetched, "generating the poster", clean finish. PRAYER LIST: 1 people-groups fetch, 0 errors — positive evidence the provider ran, since that print cannot work without it. REGRESSION CHECK: country-posters still downloads (0 print frames, 1 download), so the default is unchanged for the walls already on this component. |
||
|---|---|---|
| .. | ||
| charts | ||
| hints | ||
| legends | ||
| map-controls | ||
| poster | ||
| qa | ||
| search | ||
| tables | ||
| PeopleGroupDetail.vue | ||
| README.md | ||
| ResearchMapFilterPanel.vue | ||
| ResearchMapSideMenu.vue | ||
| SideMenuDrawer.vue | ||
| ViewSelect.vue | ||
| WARNING.md | ||
library/components/ — shared Vue components
The map UI, built from parameterized pieces every app-profile reuses. Fix one here and every map benefits — never edit a shared component to customize one map.
library/components/
┌───────────────────────────────────────────┐
│ legends/ map-controls/ poster/ │
│ charts/ tables/ │
│ PeopleGroupDetail.vue SideMenuDrawer.vue │
│ ResearchMapFilterPanel.vue …SideMenu.vue │
└───────────────────────────────────────────┘
reused by every app-profile via @map/components/…
legends/,map-controls/,poster/each have their own README.- Every component uses
<script setup>, callsuseShadowStyles(), and reaches stores viainject('mapStore' | 'uiStore' | 'dataStore')— never a direct store import.
Full catalog + conventions:
../../documentation/architecture/components.md ·
per-file roles: ../../documentation/reference.md.