import { ActivityIcon, ClockIcon, EqualApproximatelyIcon, type LucideIcon, SigmaIcon, TrendingDownIcon, TrendingUpIcon, UserCheck2Icon, UserCheckIcon, UsersIcon, } from 'lucide-react'; import { chartSegments } from '@openpanel/constants'; import { type IChartEventSegment, mapKeys } from '@openpanel/validation'; import { DropdownMenu, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { cn } from '@/utils/cn'; import { Button } from '../ui/button'; interface ReportChartTypeProps { className?: string; value: IChartEventSegment; onChange: (segment: IChartEventSegment) => void; } export function ReportSegment({ className, value, onChange, }: ReportChartTypeProps) { const items = mapKeys(chartSegments).map((key) => ({ label: chartSegments[key], value: key, })); const Icons: Record = { event: ActivityIcon, user: UsersIcon, session: ClockIcon, user_average: UserCheck2Icon, one_event_per_user: UserCheckIcon, property_sum: SigmaIcon, property_average: EqualApproximatelyIcon, property_max: TrendingUpIcon, property_min: TrendingDownIcon, }; return ( Available charts {items.map((item) => { const Icon = Icons[item.value]; return ( onChange(item.value)} className="group" > {item.label} ); })} ); }