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)}
)}
{formatMessage(labels.clearAll)}
);
}
const FilterItem = ({ name, label, operator, value, onRemove }) => {
return (
{label}
{operator}
{value}
onRemove(name)} size="xs" style={{ cursor: 'pointer' }}>
);
};