'use client'; import { useEffect } from 'react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { Loader2 } from 'lucide-react'; import { useTranslations } from 'next-intl'; import { toast } from 'sonner'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card'; import { type PagesProject, PagesService } from '@/lib/services/openflare'; import { projectQueryKey, projectsQueryKey, sourceQueryKey, } from '../../components/pages-utils'; import { buildProjectPayload, ProjectFormFields, toFormValues, usePagesProjectForm, } from '../../components/project-form'; interface ProjectSettingsCardProps { project: PagesProject; } export function ProjectSettingsCard({ project }: ProjectSettingsCardProps) { const t = useTranslations('pages'); const queryClient = useQueryClient(); const form = usePagesProjectForm(project); useEffect(() => { form.reset(toFormValues(project)); }, [form, project]); const mutation = useMutation({ mutationFn: async (values: Parameters[0]) => { const payload = buildProjectPayload(values, project); return PagesService.updateProject(project.id, payload); }, onSuccess: async () => { toast.success(t('updated')); await Promise.all([ queryClient.invalidateQueries({ queryKey: projectsQueryKey }), queryClient.invalidateQueries({ queryKey: projectQueryKey(project.id), }), queryClient.invalidateQueries({ queryKey: sourceQueryKey(project.id), }), ]); }, onError: (error) => { toast.error(error instanceof Error ? error.message : t('saveFailed')); }, }); return (
{t('editTitle')} {t('settingsDesc')}
mutation.mutate(values))} >
); }