import { Button, Column, Grid, Icon, List, ListItem, Menu, MenuItem, MenuTrigger, Popover, Row, } from '@umami/react-zen'; import { endOfDay, subMonths } from 'date-fns'; import type { Key } from 'react'; import { Empty } from '@/components/common/Empty'; import { FilterRecord } from '@/components/common/FilterRecord'; import { useFields, useMessages, useMobile } from '@/components/hooks'; import { Plus } from '@/components/icons'; export interface FieldFiltersProps { websiteId: string; value?: { name: string; operator: string; value: string }[]; exclude?: string[]; onChange?: (data: any) => void; } export function FieldFilters({ websiteId, value, exclude = [], onChange }: FieldFiltersProps) { const { formatMessage, messages } = useMessages(); const { fields } = useFields(); const startDate = subMonths(endOfDay(new Date()), 6); const endDate = endOfDay(new Date()); const { isMobile } = useMobile(); const updateFilter = (name: string, props: Record) => { onChange(value.map(filter => (filter.name === name ? { ...filter, ...props } : filter))); }; const handleAdd = (name: Key) => { onChange(value.concat({ name: name.toString(), operator: 'eq', value: '' })); }; const handleChange = (name: string, value: Key) => { updateFilter(name, { value }); }; const handleSelect = (name: string, operator: Key) => { updateFilter(name, { operator }); }; const handleRemove = (name: string) => { onChange(value.filter(filter => filter.name !== name)); }; return ( {fields .filter(({ name }) => !exclude.includes(name)) .map(field => { const isDisabled = !!value.find(({ name }) => name === field.name); return ( {field.label} ); })} {fields .filter(({ name }) => !exclude.includes(name)) .map(field => { const isDisabled = !!value.find(({ name }) => name === field.name); return ( {field.label} ); })} {value.map(filter => { return ( ); })} {!value.length && } ); }