diff --git a/web/src/components/SessionList.directory-action.test.tsx b/web/src/components/SessionList.directory-action.test.tsx index cc5be45f..962a909e 100644 --- a/web/src/components/SessionList.directory-action.test.tsx +++ b/web/src/components/SessionList.directory-action.test.tsx @@ -143,8 +143,13 @@ describe('SessionList time filter', () => { expect(screen.getByRole('button', { name: /Old session/ })).toBeInTheDocument() fireEvent.click(screen.getByRole('button', { name: 'Filter sessions by last activity' })) - fireEvent.click(screen.getByRole('button', { name: new Date(2026, 6, 17).toLocaleDateString() })) - fireEvent.click(screen.getByRole('button', { name: new Date(2026, 6, 18).toLocaleDateString() })) + const emptyDate = screen.getByRole('button', { name: new Date(2026, 6, 17).toLocaleDateString() }) + const activeDate = screen.getByRole('button', { name: `${new Date(2026, 6, 18).toLocaleDateString()}, has session activity` }) + expect(emptyDate).toHaveClass('text-[var(--app-hint)]') + expect(activeDate).toHaveClass('text-[var(--app-fg)]') + expect(activeDate).toHaveAttribute('title', `${new Date(2026, 6, 18).toLocaleDateString()}, has session activity`) + fireEvent.click(emptyDate) + fireEvent.click(activeDate) expect(screen.getByRole('button', { name: /Recent session/ })).toBeInTheDocument() expect(screen.queryByRole('button', { name: /Old session/ })).toBeNull() @@ -174,7 +179,7 @@ describe('SessionList time filter', () => { fireEvent.click(filterButton) fireEvent.click(screen.getByRole('button', { name: new Date(2026, 6, 1).toLocaleDateString() })) expect(screen.getByText('Select end date')).toBeInTheDocument() - fireEvent.click(screen.getByRole('button', { name: new Date(2026, 6, 18).toLocaleDateString() })) + fireEvent.click(screen.getByRole('button', { name: `${new Date(2026, 6, 18).toLocaleDateString()}, has session activity` })) expect(filterButton).toHaveAttribute('aria-expanded', 'false') expect(filterButton).toHaveAttribute('title', '2026-07-01 – 2026-07-18') diff --git a/web/src/components/SessionList.tsx b/web/src/components/SessionList.tsx index 66f233d7..6be8da1b 100644 --- a/web/src/components/SessionList.tsx +++ b/web/src/components/SessionList.tsx @@ -573,6 +573,7 @@ function formatDateValue(date: Date): string { function SessionDateRangePicker(props: { start: string end: string + sessionActivityDates: ReadonlySet onChange: (start: string, end: string) => void onClose: () => void }) { @@ -627,17 +628,24 @@ function SessionDateRangePicker(props: { const value = formatDateValue(date) const isEndpoint = value === props.start || value === props.end const isInRange = Boolean(props.start && props.end && value > props.start && value < props.end) + const hasSessionActivity = props.sessionActivityDates.has(value) + const dateLabel = date.toLocaleDateString() + const activityLabel = hasSessionActivity + ? t('sessions.timeFilter.dayWithActivity', { date: dateLabel }) + : dateLabel return (