From 0a43ef7b1ba57f13e8abb515ab3076070bf8fa9d Mon Sep 17 00:00:00 2001 From: Mike Cao Date: Thu, 19 Jun 2025 16:47:18 -0700 Subject: [PATCH] Filtering via FilterBar. --- .../websites/[websiteId]/WebsiteChart.tsx | 2 +- src/components/common/FilterEditForm.tsx | 11 ++- src/components/common/FilterRecord.tsx | 67 +++++++++++++++++-- src/components/hooks/queries/useLoginQuery.ts | 5 +- src/components/hooks/useDateRange.ts | 3 +- src/components/input/DateFilter.tsx | 5 +- src/components/input/FilterBar.tsx | 11 +-- src/components/input/WebsiteDateFilter.tsx | 1 - src/components/metrics/EventsChart.tsx | 4 +- 9 files changed, 83 insertions(+), 26 deletions(-) diff --git a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx index 4e176072..c9a520e5 100644 --- a/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx +++ b/src/app/(main)/websites/[websiteId]/WebsiteChart.tsx @@ -53,7 +53,7 @@ export function WebsiteChart({ diff --git a/src/components/common/FilterEditForm.tsx b/src/components/common/FilterEditForm.tsx index a8b5d063..35b8e1ed 100644 --- a/src/components/common/FilterEditForm.tsx +++ b/src/components/common/FilterEditForm.tsx @@ -1,6 +1,6 @@ import { useState, Key } from 'react'; import { Grid, Row, Column, Label, List, ListItem, Button, Heading } from '@umami/react-zen'; -import { useFilters, useMessages } from '@/components/hooks'; +import { useDateRange, useFilters, useMessages } from '@/components/hooks'; import { FilterRecord } from '@/components/common/FilterRecord'; import { Empty } from '@/components/common/Empty'; @@ -11,10 +11,13 @@ export interface FilterEditFormProps { onClose?: () => void; } -export function FilterEditForm({ data = [], onChange, onClose }: FilterEditFormProps) { +export function FilterEditForm({ websiteId, data = [], onChange, onClose }: FilterEditFormProps) { const { formatMessage, labels, messages } = useMessages(); const [filters, setFilters] = useState(data); const { fields } = useFilters(); + const { + dateRange: { startDate, endDate }, + } = useDateRange(websiteId); const updateFilter = (name: string, props: { [key: string]: any }) => { setFilters(filters => @@ -66,6 +69,10 @@ export function FilterEditForm({ data = [], onChange, onClose }: FilterEditFormP return ( { + setSearch(value); + }; + + const handleSelectOperator = value => { + onSelect?.(name, value); + }; + + const handleSelectValue = value => { + setSelected(value); + onChange?.(name, value); + }; return ( - <> + - onChange?.(name, e.target.value)} /> + {isSearch && ( + + )} + {!isSearch && ( + + )} - + ); } diff --git a/src/components/hooks/queries/useLoginQuery.ts b/src/components/hooks/queries/useLoginQuery.ts index 23949c0d..e800621a 100644 --- a/src/components/hooks/queries/useLoginQuery.ts +++ b/src/components/hooks/queries/useLoginQuery.ts @@ -3,10 +3,7 @@ import { useApi } from '../useApi'; const selector = (state: { user: any }) => state.user; -export function useLoginQuery(): { - user: any; - setUser: (data: any) => void; -} { +export function useLoginQuery() { const { post, useQuery } = useApi(); const user = useApp(selector); diff --git a/src/components/hooks/useDateRange.ts b/src/components/hooks/useDateRange.ts index f8a8adae..55175328 100644 --- a/src/components/hooks/useDateRange.ts +++ b/src/components/hooks/useDateRange.ts @@ -27,11 +27,12 @@ export function useDateRange(websiteId?: string) { const startDate = new Date(mindate); const endDate = new Date(maxdate); + const unit = getMinimumUnit(startDate, endDate); dateRange = { startDate, endDate, - unit: getMinimumUnit(startDate, endDate), + unit, value, }; } else { diff --git a/src/components/input/DateFilter.tsx b/src/components/input/DateFilter.tsx index 4503048b..15b3edd3 100644 --- a/src/components/input/DateFilter.tsx +++ b/src/components/input/DateFilter.tsx @@ -9,17 +9,14 @@ export interface DateFilterProps { value: string; startDate: Date; endDate: Date; - offset?: number; - className?: string; onChange?: (value: string) => void; showAllTime?: boolean; - alignment?: 'start' | 'center' | 'end'; } export function DateFilter({ + value, startDate, endDate, - value, onChange, showAllTime = false, }: DateFilterProps) { diff --git a/src/components/input/FilterBar.tsx b/src/components/input/FilterBar.tsx index 66805a98..5dd1a6a5 100644 --- a/src/components/input/FilterBar.tsx +++ b/src/components/input/FilterBar.tsx @@ -24,18 +24,19 @@ export function FilterBar() { } return ( - - + + {Object.keys(filters).map(key => { const filter = filters[key]; const { name, label, operator, value } = filter; - const paramValue = isSearchOperator(operator) ? value : formatValue(value, key); + const paramValue = isSearchOperator(operator) ? value : formatValue(value, name); return ( -