From 1adfdf68d355dc2208e090449b382683c644cd7e Mon Sep 17 00:00:00 2001 From: Jeffrey Graham Date: Tue, 10 Nov 2026 07:27:14 -0500 Subject: [PATCH] fix(courses): ensure clean FilterSidebar vs FilterDrawer breakpoint handoff (#195) --- src/components/courses/FilterSidebar.tsx | 44 ++++++++++++++-- .../FilterSidebar.responsive.test.tsx | 51 +++++++++++++++++++ 2 files changed, 90 insertions(+), 5 deletions(-) create mode 100644 src/components/courses/__tests__/FilterSidebar.responsive.test.tsx diff --git a/src/components/courses/FilterSidebar.tsx b/src/components/courses/FilterSidebar.tsx index b8f538f..fa2b49b 100644 --- a/src/components/courses/FilterSidebar.tsx +++ b/src/components/courses/FilterSidebar.tsx @@ -1,5 +1,6 @@ 'use client'; +import { useEffect } from 'react'; import { X } from 'lucide-react'; import { cn } from '@/lib/utils'; import type { Category } from '@/types'; @@ -57,6 +58,26 @@ export function FilterSidebar({ const hasFilters = activeCount > 0; + useEffect(() => { + if (!open) return; + const handleResize = () => { + if (window.innerWidth >= 1024) { + onClose(); + } + }; + const handleKeyDown = (e: KeyboardEvent) => { + if (e.key === 'Escape') { + onClose(); + } + }; + window.addEventListener('resize', handleResize); + window.addEventListener('keydown', handleKeyDown); + return () => { + window.removeEventListener('resize', handleResize); + window.removeEventListener('keydown', handleKeyDown); + }; + }, [open, onClose]); + const content = (
{/* Header */} @@ -228,22 +249,35 @@ export function FilterSidebar({ return ( <> {/* Desktop sidebar */} -