import { useState } from 'react' import DateTimeField from '@/components/common/DateTimeField' import { Button } from '@/components/ui/button' import { countsFieldLabel, countsFilterFields, countsOperators, readCountsJSON } from '@/lib/countsDefinitions' import useDialogue from '@/lib/dialogues/useDialogue' import { inputClass } from '@/lib/utils' import { useUITranslation } from '@/lib/useUITranslation' import type { CountsResource } from '@/lib/counts' import type { CountsCondition } from '@/lib/countsDefinitions' const ConditionEditor = ({ resource, initial, save }: { resource: CountsResource; initial?: CountsCondition save: (condition: CountsCondition) => void }, ) => { const { label, message } = useUITranslation ('counts') const fields = countsFilterFields (resource) const [field, setField] = useState (initial?.field ?? 'resource_id') const [operator, setOperator] = useState (initial?.operator ?? 'eq') return
} const CountsAdditionalConditions = ({ resource, params, update }: { resource: CountsResource; params: URLSearchParams update: (key: string, value: string) => void }, ) => { const { label, message } = useUITranslation ('counts') const dialogue = useDialogue () const conditions = readCountsJSON (params, 'conditions', []) const write = (next: CountsCondition[]) => update ('conditions', JSON.stringify (next)) const edit = (index?: number) => { void dialogue.form ({ title: label ('additionalConditions'), body: controls => ( { write (index == null ? [...conditions, condition] : conditions.map ((item, position) => position === index ? condition : item)) controls.close () }}/>) }) } const patch = (index: number, change: Partial) => write ( conditions.map ((item, position) => position === index ? { ...item, ...change } : item)) return
{label ('additionalConditions')} {conditions.map ((condition, index) => { const datetime = countsFilterFields (resource)[condition.field] === 'datetime' return
{(condition.operator === 'range' ? ['value', 'end'] as const : ['value'] as const) .map (key => datetime ? patch (index, { [key]: value ?? '' })}/> : ( patch (index, { [key]: event.target.value })}/>))}
})}
} export default CountsAdditionalConditions