08-Mar-2026 — Events and Album-backgrounds: 2 features #12
build 512 — commit 75cf506
Events Standardisation
Navigation and URL improvements
- Replace MongoDB IDs with human-readable slugs in social event URLs for view, edit, and cancel flows
- Add
eventIdentifier()toUrlServiceto extract event identifiers from botharea/<id>andarea/<slug>/view|editURL patterns - Update
pathContainsEventIdOrSlug()to recognise 3-segment paths ending in "edit" - Social event edit now navigates to
<area>/<event-slug>/editinstead of<area>/<mongo-id>/edit - Cancel from social edit returns to
<area>/<event-slug>instead of<area>/<mongo-id> - Walk card titles use
routerLinkwith slug-based URLs instead of[href]with MongoDB IDs
Dynamic routing for renamed areas
- Add
hasTrailingEditPathURL matcher for<area>/<slug>/editpattern inpath-matchers.ts - Route
<area>/<slug>/edittoSocialEditComponentfor dynamically named social event areas (e.g.group-events) - Placed before
hasDynamicPathcatch-all to ensure edit routes are matched before falling through to dynamic content
Polymorphic event rendering
CardImageOrMaprenders navigation links using[href]with type-aware URL resolution for walks and social eventsWalksViewSelectordispatches toSocialViewPageComponentwhen viewing aGROUP_EVENTwithin walks routesWalkDisplayService.edit()routes social events to the social edit page with slug-based URLs
Advanced search improvements
- Extract
advancedSearchSummary()as a reusable function fromEventsFullfor use in bothEventsFullandWalkList - Advanced search criteria now persisted in URL query parameters and restored on page load
- Add
advancedSearchChangeoutput event toWalkSearch, replacingBroadcastServicefor advanced search events - Filter summary displayed in alert messages for both list and map views
AdvancedSearchPanewrapspopulateFromCriteriaandconvertKebabLabelsToIdsin try/finally to ensuresuppressCriteriaChangesis always resetapplyFilterRangePresetaccepts anemitparameter to prevent spurious criteria emissions during initialisation- Sync filter option dropdown with advanced criteria after date range loads
rangesAreClose()usesPRESET_MATCH_THRESHOLD_MSfor consistent preset matchingresetQueryDrivenState()clears filters, pagination, and view when navigating without query parameters
Alert layout improvements
- Long alert messages render on a separate full-width row below pagination for better readability
alertUsesFullRow()andshowResultsHeaderRow()control layout based on message length- Map view spacing adjusted with conditional
mt-2margin when alerts are visible
Map view enhancements
- Add
HeightResizerComponentto walks map view for user-adjustable map height - Increase max map height from 900px to 2000px
Date formatting standardisation
- Add
UIDateFormat.DAY_NAMEandUIDateFormat.YEAR_MONTH_DAY_T_HHMMenum values - Replace inline
toFormat()calls withdateUtils.asString()usingUIDateFormatenums inDateRangeSlider,MigrationSettings, andWalkExport DateUtilsService.asDateTime()now handlesDateTimeinputs directlydaysOfWeek()andmongoDayOfWeekFromName()useUIDateFormat.DAY_NAMEformat
Dynamic page awareness
SocialDisplayService.socialArea()andWalkDisplayService.socialArea()resolve the current area from URL or page configuration- Social view "Back to" link uses dynamic area title instead of hard-coded "social events"
Walk admin "back" navigation
- Replace hard-coded
navigateTo(["walks", "admin"])withLocation.back()in 6 walk admin sub-pages (add-slots, config, export, import, meetup-settings, event-data-management) - Users now return to wherever they navigated from instead of always going to
/walks/admin
Social page migration
- Migration script now converts legacy social pages (
<href>#social-contentfragments) to root pages with an events row forgroup-eventtype - Resolves social page path dynamically from system config
group.pages - Delete
SocialHomeComponent— no longer needed after migration creates root social pages SocialViewSelectortreatsLISTdispatch asDYNAMIC_CONTENT, rendering the dynamic content page for both cases- Event type strings use named constants (
EVENT_TYPE_GROUP_WALK,EVENT_TYPE_GROUP_EVENT) instead of inline literals
album-backgrounds: backgrounds view, events row, and admin improvements (#12)
New backgrounds album view with smooth crossfade transitions between photos and wave-transparency overlays. Text and event links are displayed over the imagery with configurable colours, scale, padding, and markdown content that can now be edited directly in-place on the preview. Colour selections (Title Colour, Text Colour) now persist correctly after saving. The admin panel has been tidied up with consistent range sliders for padding and offset controls, and a reusable RangeSliderComponent for future use. Events can now be displayed as a page content row with server-side pagination that no longer causes a full page refresh. Walks pages are migrated to use this new events row pattern. Also removed the legacy social carousel, fixed a gap above the gallery view, added PNG upload preview support, and ensured the selected album view persists across page refreshes in edit mode.