import { useEffect, useState } from 'react'; 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/useAppParams'; import { api } from '@/trpc/client'; import { cn } from '@/utils/cn'; import { useQueryClient } from '@tanstack/react-query'; import { getQueryKey } from '@trpc/react-query'; import { AnimatePresence, motion } from 'framer-motion'; import { UndoIcon } from 'lucide-react'; import { toast } from 'sonner'; import { popModal } from '.'; import { ModalContent, ModalHeader } from './Modal/Container'; interface Props { id: string; } export default function EditEvent({ id }: Props) { const { projectId } = useAppParams(); const client = useQueryClient(); const { data: event } = api.event.byId.useQuery({ id, projectId }); const [selectedIcon, setIcon] = useState(EventIconRecords.default!.icon); 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 = EventIconMapper[selectedIcon]!; const mutation = api.event.updateEventMeta.useMutation({ onSuccess() { toast('Event updated'); client.refetchQueries({ queryKey: getQueryKey(api.event.events), }); popModal(); }, }); const getBg = (color: string) => `bg-${color}-200`; const getText = (color: string) => `text-${color}-700`; const iconGrid = 'grid grid-cols-10 gap-4'; return ( popModal()} />
{step === 'icon' ? (
{Object.entries(EventIconMapper).map(([name, Icon]) => ( ))}
) : (
Pick a color
{EventIconColors.map((color) => ( ))}
)}
); }