Skip to content

feat: Meetings page sort menu and filters panel (v4.3.0) - #13

Merged
aslahtp merged 3 commits into
mainfrom
aslah/filters
Oct 8, 2026
Merged

aslahtp merged 3 commits into
mainfrom
aslah/filters

Conversation

@aslahtp

@aslahtp aslahtp commented Oct 8, 2026

Copy link
Copy Markdown
Owner

Summary

Adds sorting and filtering to the Meetings page. The UI follows DESIGN.md: hairline borders, pill controls, no shadows, ink chips for applied state.

Added

  • Sort menu with newest first (default), oldest first, longest first, shortest first and title A–Z. You can use it with the keyboard (arrow keys, Home/End, Enter, Escape). Sorting only changes the order, so it never counts as a filter.
  • Filters panel, opened from a Filters button next to search:
    • Date: Any time, Today, Last 7 days, Last 30 days, or Custom (From/to dates). Presets are stored by key, so "Last 7 days" always means the last 7 days.
    • Length: under 15 min, 15–60 min, over 1 hour.
    • Platform: Google Meet, Zoom, Teams.
    • Content: "Has action items", "Has notes".
    • Reset filters clears only what's set in the panel.
  • Filters button shows how many filters are applied.
  • Results line whenever anything narrows the list: "N of M meetings", the applied filters as chips you can remove with ×, and "Clear all". "Clear all" keeps your sort choice.

Changed

  • New shared ui/Menu.jsx (Menu, MenuItem, MenuRadioItem, MenuLabel) used by both the sort menu and the existing Notion menu on a meeting page, so the two behave the same way with keyboard and mouse.
  • The filter and sort logic lives in renderer/lib/meetingFilters.js as plain functions, separate from React (filterAndSort, statusCounts, hasActiveFilters, activeFilterCount, resolveDateRange).

Docs

  • CHANGELOG 4.3.0, docs/ARCHITECTURE.md (renderer components, ui/, lib/) and the line in AGENTS.md that lists what the tests cover.

Testing

  • pnpm run lint passes.
  • pnpm run test passes, 110 tests including the meeting filter/sort tests.
  • Clicked through the app with the run-meetmind driver in light and dark themes and at 1100×720 and the 800×600 minimum:
    • every date preset, Custom range, length, platform and content filter
    • removing filters with the chips, Clear all and Reset filters
    • choosing a sort with the keyboard
    • opening the Notion menu on a meeting page, moving with the arrow keys and closing it with Escape
    • no console errors


function detectPlatform(url) {
if (!url) return null;
if (url.includes('meet.google.com')) return 'meet';
function detectPlatform(url) {
if (!url) return null;
if (url.includes('meet.google.com')) return 'meet';
if (url.includes('zoom.us') || url.includes('zoom.com')) return 'zoom';
if (!url) return null;
if (url.includes('meet.google.com')) return 'meet';
if (url.includes('zoom.us') || url.includes('zoom.com')) return 'zoom';
if (url.includes('teams.microsoft.com') || url.includes('teams.live.com')) return 'teams';
if (!url) return null;
if (url.includes('meet.google.com')) return 'meet';
if (url.includes('zoom.us') || url.includes('zoom.com')) return 'zoom';
if (url.includes('teams.microsoft.com') || url.includes('teams.live.com')) return 'teams';
@aslahtp
aslahtp merged commit 3ef8228 into main Oct 8, 2026
8 checks passed
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.

2 participants