'use client'; import { api } from '@/app/_trpc/client'; import { ColorSquare } from '@/components/ColorSquare'; import { Dropdown } from '@/components/Dropdown'; import { Checkbox } from '@/components/ui/checkbox'; import { Combobox } from '@/components/ui/combobox'; import { Input } from '@/components/ui/input'; import { useDebounceFn } from '@/hooks/useDebounceFn'; import { useDispatch, useSelector } from '@/redux'; import type { IChartEvent } from '@/types'; import { GanttChart, GanttChartIcon, Users } from 'lucide-react'; import { useChartContext } from '../chart/ChartProvider'; import { addEvent, changeEvent, changePrevious, removeEvent, } from '../reportSlice'; import { EventPropertiesCombobox } from './EventPropertiesCombobox'; import { FiltersCombobox } from './filters/FiltersCombobox'; import { FiltersList } from './filters/FiltersList'; import { ReportEventMore } from './ReportEventMore'; import type { ReportEventMoreProps } from './ReportEventMore'; export function ReportEvents() { const previous = useSelector((state) => state.report.previous); const selectedEvents = useSelector((state) => state.report.events); const dispatch = useDispatch(); const { projectId } = useChartContext(); const eventsQuery = api.chart.events.useQuery({ projectId, }); const eventsCombobox = (eventsQuery.data ?? []).map((item) => ({ value: item.name, label: item.name, })); const dispatchChangeEvent = useDebounceFn((event: IChartEvent) => { dispatch(changeEvent(event)); }); const handleMore = (event: IChartEvent) => { const callback: ReportEventMoreProps['onClick'] = (action) => { switch (action) { case 'remove': { return dispatch(removeEvent(event)); } } }; return callback; }; return (

Events

{selectedEvents.map((event) => { return (
{event.id} { dispatch( changeEvent({ ...event, name: value, filters: [], }) ); }} items={eventsCombobox} placeholder="Select event" /> { dispatchChangeEvent({ ...event, displayName: e.target.value, }); }} />
{/* Segment and Filter buttons */}
{ dispatch( changeEvent({ ...event, segment, }) ); }} items={[ { value: 'event', label: 'All events', }, { value: 'user', label: 'Unique users', }, { value: 'user_average', label: 'Average event per user', }, { value: 'one_event_per_user', label: 'One event per user', }, { value: 'property_sum', label: 'Sum of property', }, { value: 'property_average', label: 'Average of property', }, ]} label="Segment" > {/* */} {(event.segment === 'property_average' || event.segment === 'property_sum') && ( )}
{/* Filters */}
); })} { dispatch( addEvent({ name: value, segment: 'event', filters: [], }) ); }} items={eventsCombobox} placeholder="Select event" />
); }