Skip to content

feat(ui): pack settings service cards + collapse library filters into a mobile drawer - #93

Open
ndandan wants to merge 3 commits into
Shoshuo:mainfrom
ndandan:pr/settings-offcanvas
Open

feat(ui): pack settings service cards + collapse library filters into a mobile drawer#93
ndandan wants to merge 3 commits into
Shoshuo:mainfrom
ndandan:pr/settings-offcanvas

Conversation

@ndandan

@ndandan ndandan commented Aug 22, 2026

Copy link
Copy Markdown
Contributor

Admin settings 'External services' grid switches from CSS grid (which
left dead space around short cards) to multi-column packing. On Films/
Series/Discover below 992px the filter toolbar becomes a Bootstrap
offcanvas drawer opened by a 'Filters (n)' button with a single Apply
navigation; at >=992px the toolbar renders inline exactly as before.

ndandan and others added 3 commits August 21, 2026 21:23
… a mobile drawer

Admin settings 'External services' grid switches from CSS grid (which
left dead space around short cards) to multi-column packing. On Films/
Series/Discover below 992px the filter toolbar becomes a Bootstrap
offcanvas drawer opened by a 'Filters (n)' button with a single Apply
navigation; at >=992px the toolbar renders inline exactly as before.
…pshots, tag reset links

Three review follow-ups to the mobile filter drawer:

- Dismissing the drawer without Apply left half-committed form state: the
  pill/select handlers had already written the hidden inputs while the
  mobile gate suppressed navigation, so the drawer disagreed with the grid
  and the stale values silently rode along on the next submit. A
  hidden.bs.offcanvas handler now resets the form to its server-rendered
  (committed URL) values and resyncs the status pills.
- The Apply button navigates while the drawer is open, so Turbo cached the
  snapshot with .offcanvas.show + a live backdrop — a Back restore
  resurrected a dimmed, scroll-locked page whose backdrop had no bound
  Offcanvas instance. turbo:before-cache now scrubs offcanvas state before
  snapshotting (and the existing before-render sweep does the same).
- Both reset-filters links (bulk row + drawer footer) carry the
  js-libfilter-reset hook class so the companion library-filter-memory PR
  wipes its saved state on either one; inert until that PR lands.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…defeat form.reset()

Live beta testing caught a flaw in the drawer-dismiss resync: type=hidden
inputs are exempt from form.reset(), and writing their .value reflects
straight into the value attribute — so after the first pill tap even
defaultValue reads the uncommitted status and the resync restored the
wrong value. The committed status is now captured once at page init (the
server-rendered value) and restored explicitly on dismiss.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant