Skip to content

Commit 5d53896

Browse files
authored
MWPW-200314: real ESL/RF/MR fixes, sign-in gating, DA sheet bug (#230)
Sessions Guide Part 3: real ESL/ESP/RainFocus/Mobile Rider integrations, sign-in gating, Digital Agenda track badges & swimlanes, Watch Now routing, analytics, an accessibility sweep, and a federal-CDN icon system feeding the Tier 1 Event Configurator's new icon/product pickers. Partial PR — unblocks configurator-side development (Tier 1 Event Configurator, Session Guide Configurator), which depends on utilities landing here.
1 parent cd2ef26 commit 5d53896

93 files changed

Lines changed: 2764 additions & 1008 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎event-libs/session-guide-configurator/MWPW-194336-CONSUMPTION-HANDOFF.md‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,15 @@ Needs:
6262
falling back to the current hardcoded copy only if the authored string for
6363
that combination is blank.
6464

65-
## 3. Swimlane order + visibility — wire `swimlaneOrder` into `OnDemandView.js` (not started)
65+
## 3. Swimlane order + visibility — wire `swimlaneOrder` into `OnDemandView.js` (resolved 2026-08-11)
66+
67+
`OnDemandView.js` was already passing `guideConfig?.swimlaneOrder` into `groupByTrack`
68+
by the time this was revisited — but `groupByTrack`'s sort logic hadn't been updated for
69+
the `[{track,displayName,enabled}]` shape described below, so ordering silently had zero
70+
effect, `enabled` was never applied, and `displayName` never reached the rendered label.
71+
Also extended to cover override-lane names, not just tracks. Full fix + root cause in
72+
`event-libs/v1/blocks/sessions-guide/PLAN.md` §16.3's correction note. Original spec
73+
below, kept for context:
6674

6775
`OnDemandView.js`'s `groupByTrack(available)` (in `utils/session-filters.js`)
6876
currently returns tracks in whatever order it derives them in, labeled with

‎event-libs/session-guide-configurator/components/SwimlaneOrderEditor.js‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ import {
22
useState, useMemo, useCallback, useRef, useLayoutEffect, useEffect, html,
33
} from '../../v1/deps/htm-preact.js';
44

5-
// Reorder + enable/disable + rename only — tracks aren't added or removed here.
6-
// `displayName` only affects this session guide's swimlane header; the underlying
7-
// track's name/icon/color elsewhere on the page are managed separately. A disabled
8-
// track is dropped entirely from the rendered guide by the consuming side, not just
9-
// hidden from ordering.
5+
// Reorder + enable/disable + rename only — rows mix real tracks and Override Primary
6+
// Event Site Track lanes in one list (matching how the live page's groupByTrack()
7+
// treats them). A disabled entry is fully dropped from the rendered guide, not just hidden here.
108
function DragHandleIcon() {
119
return html`
1210
<svg width="10" height="16" viewBox="0 0 10 16" aria-hidden="true" focusable="false">
@@ -185,7 +183,7 @@ export default function SwimlaneOrderEditor({ tracks, onChange }) {
185183
}, [order, measureRowHeight]);
186184

187185
if (rows.length === 0) {
188-
return html`<p class="sgc-swimlane-editor__empty">No tracks found in this event's session catalog yet.</p>`;
186+
return html`<p class="sgc-swimlane-editor__empty">No tracks or override lanes found in this event's session catalog yet.</p>`;
189187
}
190188

191189
return html`

‎event-libs/session-guide-configurator/context/ConfigsContext.js‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,9 @@ const ConfigsProvider = ({ children }) => {
117117
});
118118
}, []);
119119

120-
// Seeds tracks from the live catalog on top of swimlaneOrder: drops entries for
121-
// tracks no longer live, appends new ones (enabled by default), and otherwise
122-
// leaves the author's existing order/enabled/displayName state untouched.
120+
// Seeds swimlane candidates (real tracks + override-lane texts, deduped by the caller)
121+
// from the live catalog on top of swimlaneOrder: drops entries no longer live, appends
122+
// new ones (enabled by default), otherwise leaves existing order/enabled/displayName untouched.
123123
const seedSwimlaneOrder = useCallback((tracks) => {
124124
setActiveConfig((prev) => {
125125
if (!prev) return prev;

‎event-libs/session-guide-configurator/pages/ConfigEditor.js‎

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ import {
22
useState, useEffect, useMemo, html,
33
} from '../../v1/deps/htm-preact.js';
44
import { getEventSessionCatalog } from '../../v1/utils/esp-controller.js';
5-
import { extractDistinctTracks, deriveFacetableAttributes } from '../../v1/services/sessions/sessions-api.js';
5+
import {
6+
extractDistinctTracks, extractDistinctOverrideTexts, deriveFacetableAttributes,
7+
} from '../../v1/services/sessions/sessions-api.js';
68
import { useNavigation } from '../context/NavigationContext.js';
79
import { useConfigs } from '../context/ConfigsContext.js';
810
import { useDA } from '../context/DAContext.js';
@@ -38,7 +40,14 @@ export default function ConfigEditor() {
3840
return;
3941
}
4042
setSessions(result.data.sessions);
41-
seedSwimlaneOrder(extractDistinctTracks(result.data.sessions));
43+
// Swimlanes include real tracks and override-lane names (each distinct Override
44+
// Primary Event Site Track value is its own swimlane, matching groupByTrack()) —
45+
// deduped in case a track name and override text collide.
46+
const swimlaneCandidates = [...new Set([
47+
...extractDistinctTracks(result.data.sessions),
48+
...extractDistinctOverrideTexts(result.data.sessions),
49+
])];
50+
seedSwimlaneOrder(swimlaneCandidates);
4251
seedFilterCategories(deriveFacetableAttributes(result.data.sessions));
4352
}).finally(() => {
4453
if (!cancelled) setIsLoadingSessions(false);
@@ -47,6 +56,7 @@ export default function ConfigEditor() {
4756
}, [eventId, seedSwimlaneOrder, seedFilterCategories]);
4857

4958
const tracks = useMemo(() => extractDistinctTracks(sessions), [sessions]);
59+
const overrideTexts = useMemo(() => extractDistinctOverrideTexts(sessions), [sessions]);
5060

5161
const handleCancel = () => {
5262
clearActiveConfig();
@@ -86,7 +96,7 @@ export default function ConfigEditor() {
8696
${isLoadingSessions && html`<${LoadingInline} label="Loading sessions…" />`}
8797
${sessionsError && html`<p class="sgc-editor__error">${sessionsError}</p>`}
8898
${!isLoadingSessions && !sessionsError && html`
89-
<p class="sgc-editor__section-hint">${sessions.length} session(s) found — ${tracks.length} distinct track(s).</p>
99+
<p class="sgc-editor__section-hint">${sessions.length} session(s) found — ${tracks.length} distinct track(s), ${overrideTexts.length} distinct override lane(s).</p>
90100
`}
91101
</section>
92102
@@ -234,7 +244,7 @@ export default function ConfigEditor() {
234244
235245
<section class="sgc-editor__section">
236246
<h2>On-demand swimlane order</h2>
237-
<p class="sgc-editor__section-hint">Drag to reorder, or focus a handle and press arrow up/down. Unselect a track to hide it from the session guide entirely, or edit its name to change how it's labeled here — the original value stays shown alongside for reference. Track icons/colors are still managed globally via the Tier 1 Event Configurator.</p>
247+
<p class="sgc-editor__section-hint">Includes both real tracks and Override Primary Event Site Track lanes — each distinct override text is its own swimlane, same as on the live page. Drag to reorder, or focus a handle and press arrow up/down. Unselect an entry to hide it from the session guide entirely, or edit its name to change how it's labeled here — the original value stays shown alongside for reference. Icons/colors are still managed globally via the Tier 1 Event Configurator.</p>
238248
${isLoadingSessions && html`<${LoadingInline} label="Loading tracks…" />`}
239249
${sessionsError && html`<p class="sgc-editor__error">${sessionsError}</p>`}
240250
${!isLoadingSessions && !sessionsError && html`

‎event-libs/tier-1-event-configurator/README.md‎

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,18 +36,20 @@ to the form/Config JSON. The consuming-side wiring (renaming
3636
`show-conflict-modal` table row) is explicitly MWPW-200314's territory, per
3737
PLAN.md §6 — not built here.
3838

39-
**Track icon editor implementation note:** `event-libs/v1/utils/track-icon-config.js`
40-
(the real `DEFAULT_TRACK_ICON_CONFIG`/`getTrackIcon()`) and
41-
`event-libs/v1/features/icons/` (`Icon.js`/`icon-resolver.js`/`track-icons.svg`)
42-
don't exist on `dev` — like `fetchSessions()`, they're part of the
43-
in-progress MWPW-200314 branch. `default-track-icons.js` and
44-
`track-icon-sprite.js` here are temporary, self-contained copies of that
45-
data/sprite (not the shared utility itself, to avoid duplicating the actual
46-
resolution logic) — consolidate back onto the real ones once that branch
47-
merges. Also note: Chrome doesn't support cross-document
48-
`<use href="external.svg#id">` (only Firefox does) — `track-icon-sprite.js`
49-
fetches and inlines the sprite's `<symbol>` markup instead, same technique
50-
the real `icon-resolver.js` uses, for the same reason.
39+
**Track icon editor implementation note:** `default-track-icons.js` re-exports
40+
`DEFAULT_TRACK_ICON_CONFIG`/`DEFAULT_OVERRIDE_TRACK_ICON` from the real
41+
`event-libs/v1/utils/tier-1-event-config.js` rather than carrying its own copy.
42+
`IconPicker.js` (a searchable combobox, since a native `<select>` can't render
43+
an icon + name per option) renders each option through the real, shared
44+
`event-libs/v1/features/icons/Icon.js`/`icon-resolver.js` — the same
45+
federal-CDN-first, then-Milo, then-event-libs'-own-`track-icons.svg` chain
46+
session-guide's live badges use — so the picker and the live page never
47+
drift. Its option list itself comes from `useIconSlugOptions()`
48+
(`default-track-icons.js`), which merges the curated `KNOWN_ICON_SLUGS` with
49+
federal's live `icons.json` inventory, so newly-uploaded federal icons appear
50+
with no code change. (The app previously carried its own duplicate sprite-fetch
51+
module, `track-icon-sprite.js`, for the period before this branch existed on `dev`;
52+
it's been retired now that the real shared resolver is available.)
5153

5254
**Known interim gap:** the track list shown in the editor comes from a raw
5355
`getEventSessionCatalog()` call in `event-libs/v1/utils/esp-controller.js`,
@@ -98,6 +100,12 @@ unchanged).
98100
its own environment picker; the automatic fallback above, and how you'd
99101
target a non-prod tier for testing.
100102
- `components/TrackIconEditor.js` — per-track icon/color pickers.
103+
- `components/ProductIconEditor.js` — per-product icon picker (no color — products
104+
already have their own colored SVGs).
105+
- `components/IconPicker.js` — the shared searchable icon combobox both editors above
106+
render per row (a native `<select>` can't show an icon + name per option); also hosts
107+
`useIconSlugOptions()`, which merges an optional curated base list with federal's live
108+
`icons.json` inventory.
101109
- `components/FeaturedSessionsEditor.js` — featured-sessions picker: search +
102110
track filter over the already-fetched session catalog, add/remove, ↑/↓
103111
reorder into a flat ordered `featuredSessions` array.
@@ -119,6 +127,7 @@ One shared DA sheet per content-repo at
119127
"eventTitle": "...",
120128
"updated": "2026-07-22T21:30:00.000Z",
121129
"trackIcons": { "Track Name": { "icon": "icon-slug", "color": "#RRGGBB" } },
130+
"productIcons": { "Product Name": "icon-slug" },
122131
"allowDoubleBooking": true,
123132
"featuredSessions": ["sessionId1", "sessionId2"],
124133
"rfApiUrl": "https://www.adobe.com/max-api/",

0 commit comments

Comments
 (0)