import { EventIconColors, EventIconMapper, EventIconRecords, } from '@/components/events/event-icon'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { Label } from '@/components/ui/label'; import { useAppParams } from '@/hooks/use-app-params'; import { useTRPC } from '@/integrations/trpc/react'; import { cn } from '@/utils/cn'; import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { AnimatePresence, motion } from 'framer-motion'; import { PaintBucketIcon, UndoIcon } from 'lucide-react'; import { useEffect, useState } from 'react'; import { toast } from 'sonner'; import { Input } from '@/components/ui/input'; import { popModal } from '.'; import { ModalContent, ModalHeader } from './Modal/Container'; interface Props { id: string; } export default function EditEvent({ id }: Props) { const { projectId } = useAppParams(); const trpc = useTRPC(); const client = useQueryClient(); const { data: event } = useQuery( trpc.event.byId.queryOptions({ id, projectId }), ); const [selectedIcon, setIcon] = useState(null); const [selectedColor, setColor] = useState(EventIconRecords.default!.color); const [conversion, setConversion] = useState(false); const [step, setStep] = useState<'icon' | 'color'>('icon'); useEffect(() => { if (event?.meta?.icon) { setIcon(event.meta.icon); } if (event?.meta?.color) { setColor(event.meta.color); } if (event?.meta?.conversion) { setConversion(event.meta.conversion); } }, [event]); const SelectedIcon = selectedIcon ? EventIconMapper[selectedIcon] : null; const mutation = useMutation( trpc.event.updateEventMeta.mutationOptions({ onSuccess() { toast('Event updated'); client.invalidateQueries(trpc.event.pathFilter()); popModal(); }, }), ); const getBg = (color: string) => `bg-${color}-200`; const getText = (color: string) => `text-${color}-700`; const iconGrid = 'grid grid-cols-10 gap-4'; const [search, setSearch] = useState(''); return (
{step === 'icon' ? (
Pick an icon
{ }
setSearch(e.target.value)} placeholder="Search for an icon" />
{Object.entries(EventIconMapper) .filter(([name]) => name.toLowerCase().includes(search.toLowerCase()), ) .map(([name, Icon]) => ( ))}
) : (
Pick a color
{EventIconColors.map((color) => ( ))}
)}
); }