import InputError from '@/components/input-error'; import LoadingButton from '@/components/loading-button'; import { Button } from '@/components/ui/button'; import { Dialog, DialogClose, DialogContent, DialogFooter, DialogHeader, DialogTitle, DialogTrigger } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { ScrollArea } from '@/components/ui/scroll-area'; import { onHandleChange } from '@/lib/inertia'; import { useForm } from '@inertiajs/react'; import { useState } from 'react'; import { Editor } from 'richtor'; import 'richtor/styles'; interface Props { title: string; handler: React.ReactNode; newsletter?: Newsletter; translate?: LanguageTranslations; } const NewsletterForm = ({ title, newsletter, handler, translate }: Props) => { const [open, setOpen] = useState(false); // Get translations with fallback const { input, button } = translate || { input: { subject: 'Subject', subject_placeholder: 'Enter your subject', newsletter_description: 'Description', type_content_here: 'Type your content here...', type_caption_optional: 'Type caption for image (optional)', }, button: { close: 'Close', submit: 'Submit' }, }; const { data, setData, post, put, errors, processing } = useForm({ subject: newsletter ? newsletter.subject : '', description: newsletter ? newsletter.description : '', }); const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (newsletter) { put(route('newsletters.update', { id: newsletter.id }), { onSuccess: () => setOpen(false), }); } else { post(route('newsletters.store'), { onSuccess: () => setOpen(false), }); } }; return ( {handler} {title}
onHandleChange(e, setData)} />
setData((prev) => ({ ...prev, description: value as string, })) } />
{button.submit}
); }; export default NewsletterForm;