diff --git a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx index 76eba603..bde75d48 100644 --- a/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx +++ b/src/app/(main)/websites/[websiteId]/cohorts/CohortEditForm.tsx @@ -90,7 +90,9 @@ export function CohortEditForm({
{formatMessage(labels.action)} - + + + {({ field }) => { diff --git a/src/app/api/websites/[websiteId]/values/route.ts b/src/app/api/websites/[websiteId]/values/route.ts index 12942f5c..80f96509 100644 --- a/src/app/api/websites/[websiteId]/values/route.ts +++ b/src/app/api/websites/[websiteId]/values/route.ts @@ -1,5 +1,5 @@ import { canViewWebsite } from '@/validations'; -import { EVENT_COLUMNS, FILTER_COLUMNS, FILTER_GROUPS, SESSION_COLUMNS } from '@/lib/constants'; +import { EVENT_COLUMNS, FILTER_COLUMNS, SEGMENT_TYPES, SESSION_COLUMNS } from '@/lib/constants'; import { getQueryFilters, parseRequest } from '@/lib/request'; import { badRequest, json, unauthorized } from '@/lib/response'; import { getWebsiteSegments, getValues } from '@/queries'; @@ -30,14 +30,16 @@ export async function GET( const { type } = query; - if (!SESSION_COLUMNS.includes(type) && !EVENT_COLUMNS.includes(type) && !FILTER_GROUPS[type]) { + if (!SESSION_COLUMNS.includes(type) && !EVENT_COLUMNS.includes(type) && !SEGMENT_TYPES[type]) { return badRequest(); } - let values; + let values: any[]; - if (FILTER_GROUPS[type]) { - values = (await getWebsiteSegments(websiteId, type)).map(segment => ({ value: segment.name })); + if (SEGMENT_TYPES[type]) { + values = (await getWebsiteSegments(websiteId, type))?.data?.map(segment => ({ + value: segment.name, + })); } else { const filters = await getQueryFilters(query, websiteId); values = await getValues(websiteId, FILTER_COLUMNS[type], filters); diff --git a/src/components/input/FilterBar.tsx b/src/components/input/FilterBar.tsx index ad115de4..52524c1a 100644 --- a/src/components/input/FilterBar.tsx +++ b/src/components/input/FilterBar.tsx @@ -92,16 +92,9 @@ export function FilterBar({ websiteId }: { websiteId: string }) { )} - + {({ close }) => { - return ( - - ); + return ; }} diff --git a/src/components/input/FilterEditForm.tsx b/src/components/input/FilterEditForm.tsx index d32f875c..b21c5d55 100644 --- a/src/components/input/FilterEditForm.tsx +++ b/src/components/input/FilterEditForm.tsx @@ -1,6 +1,6 @@ import { useState } from 'react'; import { Column, Tabs, TabList, Tab, TabPanel, Row, Button } from '@umami/react-zen'; -import { useDateRange, useMessages } from '@/components/hooks'; +import { useMessages } from '@/components/hooks'; import { FieldFilters } from '@/components/input/FieldFilters'; import { SegmentFilters } from '@/components/input/SegmentFilters'; @@ -23,10 +23,6 @@ export function FilterEditForm({ const [currentFilters, setCurrentFilters] = useState(filters); const [currentSegment, setCurrentSegment] = useState(segmentId); - const { - dateRange: { startDate, endDate }, - } = useDateRange(websiteId); - const handleReset = () => { setCurrentFilters([]); setCurrentSegment(null); @@ -49,13 +45,7 @@ export function FilterEditForm({ {formatMessage(labels.segments)} - + ; - Object.assign(filters, segmentParams.filters); + Object.assign(filters, filtersArrayToObject(segmentParams.filters)); } if (params.cohort) { const cohortParams = (await getWebsiteSegment(websiteId, params.cohort)) ?.parameters as Record; - // convert dateRange to startDate and endDate - if (cohortParams.dateRange) { - const { startDate, endDate } = parseDateRange(cohortParams.dateRange); - cohortParams.startDate = startDate; - cohortParams.endDate = endDate; - delete cohortParams.dateRange; - } + const { startDate, endDate } = parseDateRange(cohortParams.dateRange); - if (cohortParams.filters) { - Object.assign(cohortParams, cohortParams.filters); - delete cohortParams.filters; - } + const cohortFilters = cohortParams.filters.map(({ name, ...props }) => ({ + ...props, + name: `cohort_${name}`, + })); - Object.assign( - filters, - Object.fromEntries( - Object.entries(cohortParams || {}).map(([key, value]) => - key === 'startDate' || key === 'endDate' - ? [`cohort_${key}`, new Date(value)] - : [`cohort_${key}`, value], - ), - ), - ); + cohortFilters.push({ + name: cohortParams.action.type, + operator: 'eq', + value: cohortParams.action.value, + }); + + Object.assign(filters, { + ...filtersArrayToObject(cohortFilters), + cohort_startDate: startDate, + cohort_endDate: endDate, + }); } } diff --git a/src/lib/types.ts b/src/lib/types.ts index 6fdbfde7..cb000406 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -29,6 +29,8 @@ export interface Filter { operator: string; value: string; type?: string; + columns?: string; + prefix?: string; } export interface DateRange {