diff --git a/documentation/AE__UI_UX_future_ideas.md b/documentation/AE__UI_UX_future_ideas.md index 018bba7c..856d597b 100644 --- a/documentation/AE__UI_UX_future_ideas.md +++ b/documentation/AE__UI_UX_future_ideas.md @@ -37,7 +37,7 @@ Try broadening your search or [Clear all filters →] --- -### 2. Quick-filter chips below the search bar +### 2. Quick-filter chips below the search bar — ✅ Implemented 2026-05-18 **Current behavior:** Members toggle filters via small checkboxes (Virtual, In-person) and radio buttons (All, IDAA, Caduceus, Family Recovery). These require precise @@ -67,6 +67,13 @@ mouse/tap targeting and scanning several lines of filter UI to discover and use. the primary visual interaction). - On mobile, chips wrap to a second row naturally with `flex-wrap`. +**Implemented:** `ae_idaa_comp__event_obj_qry.svelte`. Chips replaced the old +checkbox/radio/select UI entirely rather than layering on top. Two chip rows: +Row 1 — My Meetings (first), Virtual, In-Person. Row 2 — All / IDAA / Caduceus / +Family Recovery type chips. Cycling sort button replaces separate sort options +(see item below). Max Results uses a +/− stepper. Sort and max are in a third +row below the chips, inside the same `
` constraint. + --- ### 3. Language: "Searching..." vs "Loading..." @@ -249,7 +256,7 @@ show the converted time if it differs from the meeting's native timezone. --- -### 9. Favorites / "My Meetings" +### 9. Favorites / "My Meetings" — ✅ Implemented 2026-05-18 **Current behavior:** Members scan the full list every time they want to find their regular weekly meeting. @@ -265,6 +272,15 @@ their regular weekly meeting. - Update the `visible_event_obj_li` derived in `+page.svelte` to prioritize these IDs in the sort logic. +**Implemented:** Star toggle on the `[event_id]` detail page +(`src/routes/idaa/(idaa)/recovery_meetings/[event_id]/+page.svelte`). +"My Meetings" filter chip is first in the filter chip row on the list page. +**Implementation differs from proposal:** favorites stored server-side in a +`data_store` record (code: `idaa_meetings_favorites`) as a UUID-keyed JSON map +rather than in `$idaa_loc` — this means favorites persist across browsers and +devices without Novi write capability. Pinning favorites to the top of the list +was not implemented; the filter chip shows only favorites instead. + --- ### 10. "Add to Calendar" (iCal / Google) @@ -501,6 +517,38 @@ inline explanation panel directly below the badge: --- +--- + +### 17. Cycling sort button — ✅ Implemented 2026-05-18 + +**Problem:** Three separate sort chip buttons (Last Updated / Name A→Z / Name Z→A) took +too much horizontal space and caused layout bounce as the selected chip changed width. + +**Implemented:** Single cycling button in `ae_idaa_comp__event_obj_qry.svelte`. +Clicking advances through `sort_modes` array (Last Updated → Name A→Z → Name Z→A → repeat) +using `$derived` index + `cycle_sort()` function. Button has `min-w-36` to prevent bounce. +Icon changes per mode (fa-clock / fa-sort-alpha-down / fa-sort-alpha-up-alt). A small +fa-redo icon indicates it's a cycling control. + +--- + +### 18. Collapsible "Meeting Info" data store panel — ✅ Implemented 2026-05-18 + +**Problem:** The `Element_data_store` panel (code: `recovery_meetings_info`) displays +between the filter bar and the meeting results list. Once a member has read it, it +consumes vertical space on every page load and pushes results below the fold, especially +in the Novi iframe on mobile. + +**Implemented:** Toggle button wrapping the `` in +`src/routes/idaa/(idaa)/recovery_meetings/+page.svelte`. Button shows +"Meeting Info" with a chevron (up = expanded, down = collapsed). Collapse state +persisted in `$idaa_loc.recovery_meetings.ds_info_collapsed` (localStorage) so the +user's preference survives page reloads. New field added to `idaa_local_data_struct` +in `ae_idaa_stores.ts` — no version bump needed (existing users without the field +get `undefined` which is falsy = expanded, the correct default). + +--- + ## Notes - The fulltext search (`qry__fulltext_str`) searches against the `default_qry_str`