Replace the feed select with a multi-feed filter modal #4

Merged
mathias merged 1 commits from feature/feed-filter-modal into master 2026-09-27 11:31:28 +02:00
Owner

The header's feed is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.

  • feedFilter holds string[] | null; setFeedFilter is a no-op when the
    selection is unchanged (order-insensitive), sparing callers the
    scroll/mark-read side effects.
  • Selected feeds stay listed at 0 unread so they can be unchecked; titles
    whose feed no longer exists are pruned after each fetch.
  • The persisted filter is cleared on logout and on 401 (handler extracted
    to httpAuthInterceptor.js so it is unit-testable).
  • The modal locks body scroll while open so scrolling behind it can't
    mark articles read.

The header's feed <select> is now a funnel button that opens a modal with an "All feeds" checkbox and one checkbox per feed with unread items. The selection is either "All feeds" or at least one feed, is applied once when the modal closes, and is persisted in localStorage. - feedFilter holds string[] | null; setFeedFilter is a no-op when the selection is unchanged (order-insensitive), sparing callers the scroll/mark-read side effects. - Selected feeds stay listed at 0 unread so they can be unchecked; titles whose feed no longer exists are pruned after each fetch. - The persisted filter is cleared on logout and on 401 (handler extracted to httpAuthInterceptor.js so it is unit-testable). - The modal locks body scroll while open so scrolling behind it can't mark articles read.
mathias added 1 commit 2026-09-27 11:31:19 +02:00
The header's feed <select> is now a funnel button that opens a modal with
an "All feeds" checkbox and one checkbox per feed with unread items. The
selection is either "All feeds" or at least one feed, is applied once when
the modal closes, and is persisted in localStorage.

- feedFilter holds string[] | null; setFeedFilter is a no-op when the
  selection is unchanged (order-insensitive), sparing callers the
  scroll/mark-read side effects.
- Selected feeds stay listed at 0 unread so they can be unchecked; titles
  whose feed no longer exists are pruned after each fetch.
- The persisted filter is cleared on logout and on 401 (handler extracted
  to httpAuthInterceptor.js so it is unit-testable).
- The modal locks body scroll while open so scrolling behind it can't
  mark articles read.
mathias merged commit 43269bf1d7 into master 2026-09-27 11:31:28 +02:00
mathias deleted branch feature/feed-filter-modal 2026-09-27 11:31:29 +02:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: mathias/rss-reader#4