import { Button, Dialog, DialogTrigger, Icon, Modal, Row, Text, Tooltip, TooltipTrigger, } from '@umami/react-zen'; import { SegmentEditForm } from '@/app/(main)/websites/[websiteId]/segments/SegmentEditForm'; import { useFilters, useFormat, useMessages, useNavigation, useWebsiteSegmentQuery, } from '@/components/hooks'; import { Bookmark, X } from '@/components/icons'; import { isSearchOperator } from '@/lib/params'; export function FilterBar({ websiteId }: { websiteId: string }) { const { formatMessage, labels } = useMessages(); const { formatValue } = useFormat(); const { router, pathname, updateParams, replaceParams, query: { segment, cohort }, } = useNavigation(); const { filters, operatorLabels } = useFilters(); const { data, isLoading } = useWebsiteSegmentQuery(websiteId, segment || cohort); const canSaveSegment = filters.length > 0 && !segment && !cohort && !pathname.includes('/share'); const handleCloseFilter = (param: string) => { router.push(updateParams({ [param]: undefined })); }; const handleResetFilter = () => { router.push(replaceParams()); }; const handleSegmentRemove = (type: string) => { router.push(updateParams({ [type]: undefined })); }; if (!filters.length && !segment && !cohort) { return null; } return ( {segment && !isLoading && ( handleSegmentRemove('segment')} /> )} {cohort && !isLoading && ( handleSegmentRemove('cohort')} /> )} {filters.map(filter => { const { name, label, operator, value } = filter; const paramValue = isSearchOperator(operator) ? value : formatValue(value, name); return ( handleCloseFilter(name)} /> ); })} {canSaveSegment && ( {formatMessage(labels.saveSegment)} )} {({ close }) => { return ; }} {formatMessage(labels.clearAll)} ); } const FilterItem = ({ name, label, operator, value, onRemove }) => { return ( {label} {operator} {value} onRemove(name)} size="xs" style={{ cursor: 'pointer' }}> ); };