aboutsummaryrefslogtreecommitdiff
path: root/src/components/input/SegmentFilters.tsx
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/input/SegmentFilters.tsx')
-rw-r--r--src/components/input/SegmentFilters.tsx42
1 files changed, 42 insertions, 0 deletions
diff --git a/src/components/input/SegmentFilters.tsx b/src/components/input/SegmentFilters.tsx
new file mode 100644
index 0000000..f03a1de
--- /dev/null
+++ b/src/components/input/SegmentFilters.tsx
@@ -0,0 +1,42 @@
+import { IconLabel, List, ListItem } from '@umami/react-zen';
+import { Empty } from '@/components/common/Empty';
+import { LoadingPanel } from '@/components/common/LoadingPanel';
+import { useWebsiteSegmentsQuery } from '@/components/hooks';
+import { ChartPie, UserPlus } from '@/components/icons';
+
+export interface SegmentFiltersProps {
+ websiteId: string;
+ segmentId: string;
+ type?: string;
+ onChange?: (id: string, type: string) => void;
+}
+
+export function SegmentFilters({
+ websiteId,
+ segmentId,
+ type = 'segment',
+ onChange,
+}: SegmentFiltersProps) {
+ const { data, isLoading, isFetching } = useWebsiteSegmentsQuery(websiteId, { type });
+
+ const handleChange = (id: string) => {
+ onChange?.(id, type);
+ };
+
+ return (
+ <LoadingPanel data={data} isLoading={isLoading} isFetching={isFetching} overflowY="auto">
+ {data?.data?.length === 0 && <Empty />}
+ <List selectionMode="single" value={[segmentId]} onChange={id => handleChange(id[0])}>
+ {data?.data?.map(item => {
+ return (
+ <ListItem key={item.id} id={item.id}>
+ <IconLabel icon={type === 'segment' ? <ChartPie /> : <UserPlus />}>
+ {item.name}
+ </IconLabel>
+ </ListItem>
+ );
+ })}
+ </List>
+ </LoadingPanel>
+ );
+}