import { Button } from "$components/Button"; import { XIcon } from "$icons"; import type { SearchFilters } from "$state/types"; import type { MouseEventHandler } from "react"; import { useCallback, useMemo } from "react"; type ToggleButtonProps = { toggleFilters: MouseEventHandler; showFilters: boolean; activeFilterCount: number; compact?: boolean; }; type FilterLocationProps = { location: { id: number; name: string }; filters: SearchFilters; handleToggleLocation: (locationId: number) => void; }; export function ToggleButton({ toggleFilters, showFilters, activeFilterCount }: ToggleButtonProps) { const classes = useMemo(() => { const base = [ "px-3 py-2", "border border-stroke-subtle/10 rounded-lg", "text-sm cursor-pointer flex items-center gap-1.5 transition-colors duration-150", ]; if (showFilters) { base.push("bg-surface-bright/40"); } else { base.push("bg-surface-bright/20 hover:bg-surface-bright/40"); } if (activeFilterCount > 0) { base.push("text-accent-blue"); } else { base.push("text-text-secondary"); } return base.join(" "); }, [showFilters, activeFilterCount]); return ( ); } export function CloseButton({ onClose }: { onClose: () => void; compact?: boolean }) { return ( ); } export function ClearAllFiltersButton({ handleClearFilters }: { handleClearFilters: () => void }) { return ( ); } export function FilterLocationButton({ location, filters, handleToggleLocation }: FilterLocationProps) { const handleClick = useCallback(() => handleToggleLocation(location.id), [handleToggleLocation, location.id]); const classes = useMemo(() => { const base = [ "px-3 py-1.5", "border border-stroke-subtle/10 rounded-lg", "text-[0.8125rem] cursor-pointer transition-colors duration-150", ]; if (filters.locations?.includes(location.id)) { base.push("bg-accent-blue text-white"); } else { base.push("bg-surface-bright/20 hover:bg-surface-bright/40 text-text-primary"); } return base.join(" "); }, [filters.locations, location.id]); return ; }