import { Button, Column, Form, FormField, FormSubmitButton, Icon, Label, Loading, Row, TextField, } from '@umami/react-zen'; import { useEffect, useState } from 'react'; import { useConfig, useMessages, usePixelQuery } from '@/components/hooks'; import { useUpdateQuery } from '@/components/hooks/queries/useUpdateQuery'; import { RefreshCw } from '@/components/icons'; import { PIXELS_URL } from '@/lib/constants'; import { getRandomChars } from '@/lib/generate'; const generateId = () => getRandomChars(9); export function PixelEditForm({ pixelId, teamId, onSave, onClose, }: { pixelId?: string; teamId?: string; onSave?: () => void; onClose?: () => void; }) { const { formatMessage, labels, messages, getErrorMessage } = useMessages(); const { mutateAsync, error, isPending, touch, toast } = useUpdateQuery( pixelId ? `/pixels/${pixelId}` : '/pixels', { id: pixelId, teamId, }, ); const { pixelsUrl } = useConfig(); const hostUrl = pixelsUrl || PIXELS_URL; const { data, isLoading } = usePixelQuery(pixelId); const [slug, setSlug] = useState(generateId()); const handleSubmit = async (data: any) => { await mutateAsync(data, { onSuccess: async () => { toast(formatMessage(messages.saved)); touch('pixels'); onSave?.(); onClose?.(); }, }); }; const handleSlug = () => { const slug = generateId(); setSlug(slug); return slug; }; useEffect(() => { if (data) { setSlug(data.slug); } }, [data]); if (pixelId && isLoading) { return ; } return (
{({ setValue }) => { return ( <> {onClose && ( )} {formatMessage(labels.save)} ); }}
); }