# 08-Mar-2026 — Events and Album-backgrounds: 2 features [#12](https://github.com/nbarrett/ngx-ramblers/issues/12)

## [build 512](https://github.com/nbarrett/ngx-ramblers/actions/runs/22810447767) — [commit 75cf506](https://github.com/nbarrett/ngx-ramblers/commit/75cf50661f1c7c7f771546d5705d20e27751f9e1)

_____

## 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()` to `UrlService` to extract event identifiers from both `area/<id>` and `area/<slug>/view|edit` URL patterns
- Update `pathContainsEventIdOrSlug()` to recognise 3-segment paths ending in "edit"
- Social event edit now navigates to `<area>/<event-slug>/edit` instead of `<area>/<mongo-id>/edit`
- Cancel from social edit returns to `<area>/<event-slug>` instead of `<area>/<mongo-id>`
- Walk card titles use `routerLink` with slug-based URLs instead of `[href]` with MongoDB IDs
### Dynamic routing for renamed areas
- Add `hasTrailingEditPath` URL matcher for `<area>/<slug>/edit` pattern in `path-matchers.ts`
- Route `<area>/<slug>/edit` to `SocialEditComponent` for dynamically named social event areas (e.g. `group-events`)
- Placed before `hasDynamicPath` catch-all to ensure edit routes are matched before falling through to dynamic content
### Polymorphic event rendering
- `CardImageOrMap` renders navigation links using `[href]` with type-aware URL resolution for walks and social events
- `WalksViewSelector` dispatches to `SocialViewPageComponent` when viewing a `GROUP_EVENT` within walks routes
- `WalkDisplayService.edit()` routes social events to the social edit page with slug-based URLs
### Advanced search improvements
- Extract `advancedSearchSummary()` as a reusable function from `EventsFull` for use in both `EventsFull` and `WalkList`
- Advanced search criteria now persisted in URL query parameters and restored on page load
- Add `advancedSearchChange` output event to `WalkSearch`, replacing `BroadcastService` for advanced search events
- Filter summary displayed in alert messages for both list and map views
- `AdvancedSearchPane` wraps `populateFromCriteria` and `convertKebabLabelsToIds` in try/finally to ensure `suppressCriteriaChanges` is always reset
- `applyFilterRangePreset` accepts an `emit` parameter to prevent spurious criteria emissions during initialisation
- Sync filter option dropdown with advanced criteria after date range loads
- `rangesAreClose()` uses `PRESET_MATCH_THRESHOLD_MS` for consistent preset matching
- `resetQueryDrivenState()` 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()` and `showResultsHeaderRow()` control layout based on message length
- Map view spacing adjusted with conditional `mt-2` margin when alerts are visible
### Map view enhancements
- Add `HeightResizerComponent` to walks map view for user-adjustable map height
- Increase max map height from 900px to 2000px
### Date formatting standardisation
- Add `UIDateFormat.DAY_NAME` and `UIDateFormat.YEAR_MONTH_DAY_T_HHMM` enum values
- Replace inline `toFormat()` calls with `dateUtils.asString()` using `UIDateFormat` enums in `DateRangeSlider`, `MigrationSettings`, and `WalkExport`
- `DateUtilsService.asDateTime()` now handles `DateTime` inputs directly
- `daysOfWeek()` and `mongoDayOfWeekFromName()` use `UIDateFormat.DAY_NAME` format
### Dynamic page awareness
- `SocialDisplayService.socialArea()` and `WalkDisplayService.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"])` with `Location.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-content` fragments) to root pages with an events row for `group-event` type
- Resolves social page path dynamically from system config `group.pages`
- Delete `SocialHomeComponent` — no longer needed after migration creates root social pages
- `SocialViewSelector` treats `LIST` dispatch as `DYNAMIC_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](https://github.com/nbarrett/ngx-ramblers/issues/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.