diff options
| author | Fuwn <[email protected]> | 2026-01-24 13:09:50 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2026-01-24 13:09:50 +0000 |
| commit | 396acf3bbbe00a192cb0ea0a9ccf91b1d8d2850b (patch) | |
| tree | b9df4ca6a70db45cfffbae6fdd7252e20fb8e93c /src/components/input/SegmentFilters.tsx | |
| download | umami-main.tar.xz umami-main.zip | |
Created from https://vercel.com/new
Diffstat (limited to 'src/components/input/SegmentFilters.tsx')
| -rw-r--r-- | src/components/input/SegmentFilters.tsx | 42 |
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> + ); +} |