'use client' import { useState, useRef, useEffect } from 'react' import { DIMENSIONS, DIMENSION_LABELS, OPERATORS, OPERATOR_LABELS, type DimensionFilter } from '@/lib/filters' interface AddFilterDropdownProps { onAdd: (filter: DimensionFilter) => void } type Step = 'dimension' | 'operator' | 'value' export default function AddFilterDropdown({ onAdd }: AddFilterDropdownProps) { const [isOpen, setIsOpen] = useState(false) const [step, setStep] = useState('dimension') const [dimension, setDimension] = useState('') const [operator, setOperator] = useState('is') const [value, setValue] = useState('') const ref = useRef(null) useEffect(() => { function handleClickOutside(e: MouseEvent) { if (ref.current && !ref.current.contains(e.target as Node)) { setIsOpen(false) resetState() } } document.addEventListener('mousedown', handleClickOutside) return () => document.removeEventListener('mousedown', handleClickOutside) }, []) function resetState() { setStep('dimension') setDimension('') setOperator('is') setValue('') } function handleSubmit() { if (!dimension || !operator || !value.trim()) return onAdd({ dimension, operator, values: [value.trim()] }) setIsOpen(false) resetState() } return (
{isOpen && (
{step === 'dimension' && (
Select dimension
{DIMENSIONS.map(dim => ( ))}
)} {step === 'operator' && (
{DIMENSION_LABELS[dimension]} ...
{OPERATORS.map(op => ( ))}
)} {step === 'value' && (
{DIMENSION_LABELS[dimension]} {OPERATOR_LABELS[operator]}
setValue(e.target.value)} onKeyDown={e => { if (e.key === 'Enter') handleSubmit() }} placeholder="Enter value..." className="w-full px-3 py-2 text-sm bg-neutral-50 dark:bg-neutral-800 border border-neutral-200 dark:border-neutral-700 rounded-lg text-neutral-900 dark:text-white placeholder-neutral-400 focus:outline-none focus:ring-2 focus:ring-brand-orange/30" />
)}
)}
) }