import { useCallback, useEffect, useRef, useState } from 'react'; import { Badge } from '@renderer/components/ui/badge'; import { ChevronRight } from 'lucide-react'; function scrollAfterExpand(el: HTMLElement): void { requestAnimationFrame(() => { requestAnimationFrame(() => { el.scrollIntoView({ behavior: 'smooth', block: 'start' }); }); }); } interface CollapsibleTeamSectionProps { title: string; /** Icon rendered before the title text. */ icon?: React.ReactNode; badge?: string | number; /** Secondary badge (e.g. unread count). Shown next to main badge when defined. */ secondaryBadge?: number; /** Extra element rendered inline after badges (e.g. notification icon). */ headerExtra?: React.ReactNode; defaultOpen?: boolean; forceOpen?: boolean; action?: React.ReactNode; /** Stable identifier used for programmatic section navigation. */ sectionId?: string; children: React.ReactNode; } export const CollapsibleTeamSection = ({ title, icon, badge, secondaryBadge, headerExtra, defaultOpen = true, forceOpen, action, sectionId, children, }: CollapsibleTeamSectionProps): React.JSX.Element => { const [open, setOpen] = useState(defaultOpen); const isOpen = forceOpen ? true : open; const sectionRef = useRef(null); const handleNavigate = useCallback((): void => { setOpen(true); if (sectionRef.current) scrollAfterExpand(sectionRef.current); }, []); useEffect(() => { const el = sectionRef.current; if (!el) return; el.addEventListener('team-section-navigate', handleNavigate); return () => el.removeEventListener('team-section-navigate', handleNavigate); }, [handleNavigate]); return (
{isOpen &&
{children}
}
); };