'use client'; import { ColorSquare } from '@/components/color-square'; import { Combobox } from '@/components/ui/combobox'; import { DropdownMenuComposed } from '@/components/ui/dropdown-menu'; import { Input } from '@/components/ui/input'; import { useAppParams } from '@/hooks/useAppParams'; import { useDebounceFn } from '@/hooks/useDebounceFn'; import { useEventNames } from '@/hooks/useEventNames'; import { useDispatch, useSelector } from '@/redux'; import { GanttChart, GanttChartIcon, Users } from 'lucide-react'; import { alphabetIds } from '@openpanel/constants'; import type { IChartEvent } from '@openpanel/validation'; import { ComboboxAdvanced } from '@/components/ui/combobox-advanced'; import { addEvent, changeEvent, removeEvent } from '../reportSlice'; import { EventPropertiesCombobox } from './EventPropertiesCombobox'; import { ReportEventMore } from './ReportEventMore'; import type { ReportEventMoreProps } from './ReportEventMore'; import { FiltersCombobox } from './filters/FiltersCombobox'; import { FiltersList } from './filters/FiltersList'; export function ReportEvents() { const selectedEvents = useSelector((state) => state.report.events); const chartType = useSelector((state) => state.report.chartType); const dispatch = useDispatch(); const { projectId } = useAppParams(); const eventNames = useEventNames({ projectId, }); const showSegment = !['retention', 'funnel'].includes(chartType); const showAddFilter = !['retention'].includes(chartType); const showDisplayNameInput = !['retention'].includes(chartType); const isAddEventDisabled = (chartType === 'retention' || chartType === 'conversion') && selectedEvents.length >= 2; const dispatchChangeEvent = useDebounceFn((event: IChartEvent) => { dispatch(changeEvent(event)); }); const isSelectManyEvents = chartType === 'retention'; const handleMore = (event: IChartEvent) => { const callback: ReportEventMoreProps['onClick'] = (action) => { switch (action) { case 'remove': { return dispatch(removeEvent(event)); } } }; return callback; }; return (