{"id":"6a709e42d3809c73ddb3cb77","title":"2026 08 03 Issue 345","path":"how-to/committee/release-notes/2026-08-03-issue-345","contentMarkdown":"# 03-Aug-2026 — Walk Admin programme views, and map fixes for index maps, linear walks and sticky toolbars [#345](https://github.com/nbarrett/ngx-ramblers/issues/345)\n\n## [build 807](https://github.com/nbarrett/ngx-ramblers/actions/runs/30819075701) — [commit 2708608](https://github.com/nbarrett/ngx-ramblers/commit/2708608122aeefa349f0dbc59f1085a01edb6637)\n\n_____\n\nWalk co-ordinators now have one place to see the state of the whole walks programme rather than piecing it together from the walks list. A Programme Overview groups walks by status, with a row of headline counts across the top that take you straight to that set of walks when you click them. A Programme Calendar shows the same walks by month or week, coloured by status, grade or leader, with group events alongside them. A Programme Map plots the whole programme, coloured by status and filterable to one status at a time. You can move between all of them without going back to the menu, and the date range you are looking at follows you across.\n\nWalk leaders get their own view for the first time. Until now the only way for a leader to find their own walks was to know to use advanced search with the leader filter set to themselves, and Walk Admin was closed to anyone without the walk administrator setting. My Walks is open to any walk leader, reachable in one step from the walks page, and shows their upcoming walks and anything still outstanding on them.\n\nAll of this adapts to how a group populates its walks. Groups whose walks come from Walks Manager see draft and published walks, where draft walks were previously indistinguishable from published ones. Groups creating walks on the website see the full sequence from awaiting a leader through to published. Nothing needs configuring and nothing appears that cannot work in the current mode. The views also follow whatever a group calls its walks page, so a site using go-walking gets go-walking/admin rather than being forced onto a fixed path.\n\nThe Walk Admin page itself is now built from editable action buttons in the same way as the main admin area, so its tiles, wording, icons and colours can be changed on the site instead of only in code. Help text a group had already written is carried across, while wording describing the withdrawn bulk import route is discarded, since importing is now from a CSV file only.\n\nSeveral fixes elsewhere came out of the same work. The events count badge on the walks page no longer grows taller than the controls beside it. Index maps no longer fit to every location in the index, so a single far-flung entry such as a walking weekend in Keswick no longer zooms the map out to the whole country and squashes everything else into a huddle, and the Map Height slider in the index editor now does something: the map can be sized by dragging it to where you want, in the editor preview, the way the walks map already works. Choosing \"Both\" on a linear walk shows both ends straight away rather than after clicking around the other options. And dropdowns in the sticky toolbars are no longer painted through by walk card maps, their zoom controls and the edit button.\n\n- New Programme Overview grouping walks by status, with clickable headline counts and the filter held in the web address so a view can be bookmarked or sent to someone else\n- New Programme Calendar with a compact month grid and a roomier Weeks view, both covering the whole month, coloured by status, grade or leader, showing group events alongside walks and a key naming the actual grades or leaders on screen\n- The Weeks view gives each week its own row, headed with its dates and how many walks fall in it, with taller days and walk titles shown in full rather than cut off\n- New Programme Map showing the whole programme coloured by status, filterable to a single status, with map options hidden until you want them\n- New My Walks view for walk leaders, reachable without the walk administrator setting and linked from the walks page\n- Walk Admin and My Walks follow the group's own walks page address instead of a fixed path\n- Draft walks from Walks Manager are identified as Draft instead of being counted as published, and a leader's draft walk counts as outstanding on My Walks\n- The programme opens on all future dates by default, with Future, Past and All available where there are events on both sides of today\n- Going back from a walk names the view it returns to and takes you there with the date range you had set\n- Paging the programme and moving between calendar periods keep your place on the page\n- Walks awaiting a leader, awaiting details or missing a location are no longer separate walks list filters, since the Programme Overview covers them properly\n- The events count badge no longer stretches the walks toolbar; long messages truncate and show in full on hover\n- Index maps can be set to hold a chosen view rather than always fitting to every location\n- Maps no longer fall back to a Kent centre on sites that have not set one\n- The Map Height slider in the index editor now works, and the map can be sized by dragging it in the editor preview\n- Choosing \"Both\" on a linear walk fits to both ends on the first click, and going back to Start no longer leaves the finish marker behind\n- Dropdowns in the sticky toolbars open above walk card maps and their controls instead of being painted through by them\n- The primary hostname placeholder in environment setup no longer suggests a particular group's domain\n\n- `walk-programme-overview`, `walk-programme-calendar`, `walk-programme-map`, `walk-leader-dashboard` and `walk-programme-view-selector` components added under `pages/walks`, with `date-range-selector`, `date-range-direction-selector`, `walk-programme.service` and `scroll-position.service`\n- `hasWalksAreaSubPath` in `app-routing.module.ts` consumes the area segment when followed by `admin` or `my-walks`, so both the group's own area path and the literal `/walks` resolve. `WALKS_ADMIN_SEGMENT`, `WALKS_LEADER_SEGMENT`, `walksAdminPath()` and `walksLeaderPath()` are the single source for these paths\n- `programmeSummary` derives status, counts and a page of results in one aggregation with `$facet`, so counts and list always agree and the whole programme is never loaded into request memory\n- `ProgrammeOverviewStatus.DRAFT` is derived from `groupEvent.status` only for records whose `source` is `walks-manager`. Locally created events default to `WalkStatus.DRAFT`, so an unscoped rule would have reported every local walk as draft. `displayedWalkProgrammeStatus` applies the same precedence as the aggregation, which it previously did not, leaving the calendar and overview disagreeing\n- `openWalkViewFor` / `openWalkEditFor` / `returnToPreviousView` on `WalkDisplayService` replace inline navigation, drop inherited query parameters and record the origin. `walkViewLink()` no longer assigns `viewReturnUrl` from inside a template binding, which had been overwriting the remembered origin on every change detection pass\n- `section-toggle` renders the view switcher, calendar controls, date range presets and map status filter, replacing four separate hand-rolled button groups. It now coerces `fullWidth` and `disabled` with `booleanAttribute`, since written as bare attributes they passed the empty string and never applied, and its imposed `margin-bottom` is gone\n- `relativeDay()` on `DateUtilsService` and `defaultProgrammeRange()` in `search.model.ts` centralise relative dates and the default range, the latter derived from the All Future Dates preset so the two cannot disagree\n- Migration `20260802120000-seed-walk-admin-action-buttons` seeds the action buttons per environment, resolving the walks area from page content, and declines to carry across help text describing the withdrawn bulk import route. Guarded and idempotent\n- `walk-search.ts`: the inline alert sizes to content rather than taking an equal share of the toolbar row, with a `search-alert-inline` class above the large breakpoint. The alert markup was duplicated between the toolbar and pagination cases, which is how they got out of step, and is now one `ng-template`\n- Index maps honour `autoFitBounds` alongside the other map row types, the editor preview bypasses the session view cache, and the auto-fit caption is settable per host\n- The calendar builds `CalendarWeek` rows from the same day list in both modes, so Month and Weeks share one set of day cell markup and one navigation step of a month, rather than each mode having its own range, title and stepping rules\n- Index map config uses `mapHeight` like map rows and area map rows do, instead of its own `height` field that the shared map controls never wrote to. Pages saved before this have their stored `height` copied to `mapHeight` when defaults are applied, on both the view and edit paths, and written back on next save. `IndexRowConfig` now refers to `IndexMapConfig` rather than being a hand-copied duplicate that had fallen behind. Height changes resize the existing map rather than tearing it down and rebuilding it, and resizing follows the pointer on a frame\n- `map-edit.ts` rebuilds the map when `showCombinedMap` or `endLocationDetails` changes, not only `locationDetails`. Start to Both previously changed neither of the watched inputs, so nothing fired until another option was clicked\n- Leaflet containers and map wrappers are isolated so their tile pane, controls, markers, popups and overlay compete within their own map rather than at page level from 200 to 10000. The sticky toolbar sits at 1030: above ordinary content and the edit overlay, below modals, the datepicker and the full screen map\n- The hard-coded `[51.25, 0.75]` centre is removed from sixteen places across index maps, area maps, route maps, the map editors and the page transformation engine. Centre and zoom come from `MapDefaultsService`, using the group's configured centre and falling back to a UK-wide view. Other Kent-specific defaults removed with it: the areas API region, the area map coordinate fields, the legacy redirect domain, the migration path and the CLI S3 bucket examples","contentHtml":"<h1>03-Aug-2026 — Walk Admin programme views, and map fixes for index maps, linear walks and sticky toolbars <a href=\"https://github.com/nbarrett/ngx-ramblers/issues/345\">#345</a></h1>\n<h2><a href=\"https://github.com/nbarrett/ngx-ramblers/actions/runs/30819075701\">build 807</a> — <a href=\"https://github.com/nbarrett/ngx-ramblers/commit/2708608122aeefa349f0dbc59f1085a01edb6637\">commit 2708608</a></h2>\n<hr>\n<p>Walk co-ordinators now have one place to see the state of the whole walks programme rather than piecing it together from the walks list. A Programme Overview groups walks by status, with a row of headline counts across the top that take you straight to that set of walks when you click them. A Programme Calendar shows the same walks by month or week, coloured by status, grade or leader, with group events alongside them. A Programme Map plots the whole programme, coloured by status and filterable to one status at a time. You can move between all of them without going back to the menu, and the date range you are looking at follows you across.</p>\n<p>Walk leaders get their own view for the first time. Until now the only way for a leader to find their own walks was to know to use advanced search with the leader filter set to themselves, and Walk Admin was closed to anyone without the walk administrator setting. My Walks is open to any walk leader, reachable in one step from the walks page, and shows their upcoming walks and anything still outstanding on them.</p>\n<p>All of this adapts to how a group populates its walks. Groups whose walks come from Walks Manager see draft and published walks, where draft walks were previously indistinguishable from published ones. Groups creating walks on the website see the full sequence from awaiting a leader through to published. Nothing needs configuring and nothing appears that cannot work in the current mode. The views also follow whatever a group calls its walks page, so a site using go-walking gets go-walking/admin rather than being forced onto a fixed path.</p>\n<p>The Walk Admin page itself is now built from editable action buttons in the same way as the main admin area, so its tiles, wording, icons and colours can be changed on the site instead of only in code. Help text a group had already written is carried across, while wording describing the withdrawn bulk import route is discarded, since importing is now from a CSV file only.</p>\n<p>Several fixes elsewhere came out of the same work. The events count badge on the walks page no longer grows taller than the controls beside it. Index maps no longer fit to every location in the index, so a single far-flung entry such as a walking weekend in Keswick no longer zooms the map out to the whole country and squashes everything else into a huddle, and the Map Height slider in the index editor now does something: the map can be sized by dragging it to where you want, in the editor preview, the way the walks map already works. Choosing &quot;Both&quot; on a linear walk shows both ends straight away rather than after clicking around the other options. And dropdowns in the sticky toolbars are no longer painted through by walk card maps, their zoom controls and the edit button.</p>\n<ul>\n<li><p>New Programme Overview grouping walks by status, with clickable headline counts and the filter held in the web address so a view can be bookmarked or sent to someone else</p>\n</li>\n<li><p>New Programme Calendar with a compact month grid and a roomier Weeks view, both covering the whole month, coloured by status, grade or leader, showing group events alongside walks and a key naming the actual grades or leaders on screen</p>\n</li>\n<li><p>The Weeks view gives each week its own row, headed with its dates and how many walks fall in it, with taller days and walk titles shown in full rather than cut off</p>\n</li>\n<li><p>New Programme Map showing the whole programme coloured by status, filterable to a single status, with map options hidden until you want them</p>\n</li>\n<li><p>New My Walks view for walk leaders, reachable without the walk administrator setting and linked from the walks page</p>\n</li>\n<li><p>Walk Admin and My Walks follow the group&#39;s own walks page address instead of a fixed path</p>\n</li>\n<li><p>Draft walks from Walks Manager are identified as Draft instead of being counted as published, and a leader&#39;s draft walk counts as outstanding on My Walks</p>\n</li>\n<li><p>The programme opens on all future dates by default, with Future, Past and All available where there are events on both sides of today</p>\n</li>\n<li><p>Going back from a walk names the view it returns to and takes you there with the date range you had set</p>\n</li>\n<li><p>Paging the programme and moving between calendar periods keep your place on the page</p>\n</li>\n<li><p>Walks awaiting a leader, awaiting details or missing a location are no longer separate walks list filters, since the Programme Overview covers them properly</p>\n</li>\n<li><p>The events count badge no longer stretches the walks toolbar; long messages truncate and show in full on hover</p>\n</li>\n<li><p>Index maps can be set to hold a chosen view rather than always fitting to every location</p>\n</li>\n<li><p>Maps no longer fall back to a Kent centre on sites that have not set one</p>\n</li>\n<li><p>The Map Height slider in the index editor now works, and the map can be sized by dragging it in the editor preview</p>\n</li>\n<li><p>Choosing &quot;Both&quot; on a linear walk fits to both ends on the first click, and going back to Start no longer leaves the finish marker behind</p>\n</li>\n<li><p>Dropdowns in the sticky toolbars open above walk card maps and their controls instead of being painted through by them</p>\n</li>\n<li><p>The primary hostname placeholder in environment setup no longer suggests a particular group&#39;s domain</p>\n</li>\n<li><p><code>walk-programme-overview</code>, <code>walk-programme-calendar</code>, <code>walk-programme-map</code>, <code>walk-leader-dashboard</code> and <code>walk-programme-view-selector</code> components added under <code>pages/walks</code>, with <code>date-range-selector</code>, <code>date-range-direction-selector</code>, <code>walk-programme.service</code> and <code>scroll-position.service</code></p>\n</li>\n<li><p><code>hasWalksAreaSubPath</code> in <code>app-routing.module.ts</code> consumes the area segment when followed by <code>admin</code> or <code>my-walks</code>, so both the group&#39;s own area path and the literal <code>/walks</code> resolve. <code>WALKS_ADMIN_SEGMENT</code>, <code>WALKS_LEADER_SEGMENT</code>, <code>walksAdminPath()</code> and <code>walksLeaderPath()</code> are the single source for these paths</p>\n</li>\n<li><p><code>programmeSummary</code> derives status, counts and a page of results in one aggregation with <code>$facet</code>, so counts and list always agree and the whole programme is never loaded into request memory</p>\n</li>\n<li><p><code>ProgrammeOverviewStatus.DRAFT</code> is derived from <code>groupEvent.status</code> only for records whose <code>source</code> is <code>walks-manager</code>. Locally created events default to <code>WalkStatus.DRAFT</code>, so an unscoped rule would have reported every local walk as draft. <code>displayedWalkProgrammeStatus</code> applies the same precedence as the aggregation, which it previously did not, leaving the calendar and overview disagreeing</p>\n</li>\n<li><p><code>openWalkViewFor</code> / <code>openWalkEditFor</code> / <code>returnToPreviousView</code> on <code>WalkDisplayService</code> replace inline navigation, drop inherited query parameters and record the origin. <code>walkViewLink()</code> no longer assigns <code>viewReturnUrl</code> from inside a template binding, which had been overwriting the remembered origin on every change detection pass</p>\n</li>\n<li><p><code>section-toggle</code> renders the view switcher, calendar controls, date range presets and map status filter, replacing four separate hand-rolled button groups. It now coerces <code>fullWidth</code> and <code>disabled</code> with <code>booleanAttribute</code>, since written as bare attributes they passed the empty string and never applied, and its imposed <code>margin-bottom</code> is gone</p>\n</li>\n<li><p><code>relativeDay()</code> on <code>DateUtilsService</code> and <code>defaultProgrammeRange()</code> in <code>search.model.ts</code> centralise relative dates and the default range, the latter derived from the All Future Dates preset so the two cannot disagree</p>\n</li>\n<li><p>Migration <code>20260802120000-seed-walk-admin-action-buttons</code> seeds the action buttons per environment, resolving the walks area from page content, and declines to carry across help text describing the withdrawn bulk import route. Guarded and idempotent</p>\n</li>\n<li><p><code>walk-search.ts</code>: the inline alert sizes to content rather than taking an equal share of the toolbar row, with a <code>search-alert-inline</code> class above the large breakpoint. The alert markup was duplicated between the toolbar and pagination cases, which is how they got out of step, and is now one <code>ng-template</code></p>\n</li>\n<li><p>Index maps honour <code>autoFitBounds</code> alongside the other map row types, the editor preview bypasses the session view cache, and the auto-fit caption is settable per host</p>\n</li>\n<li><p>The calendar builds <code>CalendarWeek</code> rows from the same day list in both modes, so Month and Weeks share one set of day cell markup and one navigation step of a month, rather than each mode having its own range, title and stepping rules</p>\n</li>\n<li><p>Index map config uses <code>mapHeight</code> like map rows and area map rows do, instead of its own <code>height</code> field that the shared map controls never wrote to. Pages saved before this have their stored <code>height</code> copied to <code>mapHeight</code> when defaults are applied, on both the view and edit paths, and written back on next save. <code>IndexRowConfig</code> now refers to <code>IndexMapConfig</code> rather than being a hand-copied duplicate that had fallen behind. Height changes resize the existing map rather than tearing it down and rebuilding it, and resizing follows the pointer on a frame</p>\n</li>\n<li><p><code>map-edit.ts</code> rebuilds the map when <code>showCombinedMap</code> or <code>endLocationDetails</code> changes, not only <code>locationDetails</code>. Start to Both previously changed neither of the watched inputs, so nothing fired until another option was clicked</p>\n</li>\n<li><p>Leaflet containers and map wrappers are isolated so their tile pane, controls, markers, popups and overlay compete within their own map rather than at page level from 200 to 10000. The sticky toolbar sits at 1030: above ordinary content and the edit overlay, below modals, the datepicker and the full screen map</p>\n</li>\n<li><p>The hard-coded <code>[51.25, 0.75]</code> centre is removed from sixteen places across index maps, area maps, route maps, the map editors and the page transformation engine. Centre and zoom come from <code>MapDefaultsService</code>, using the group&#39;s configured centre and falling back to a UK-wide view. Other Kent-specific defaults removed with it: the areas API region, the area map coordinate fields, the legacy redirect domain, the migration path and the CLI S3 bucket examples</p>\n</li>\n</ul>\n"}