From 5e5e4edd2e2bc25dd389570b3a01b1daf0a4f0ee Mon Sep 17 00:00:00 2001 From: "web@ppanel" Date: Sat, 18 Jan 2025 17:39:57 +0700 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20refactor(sbscribe):=20Rena?= =?UTF-8?q?me=20and=20reorganize=20components=20for=20better=20structure?= =?UTF-8?q?=20and=20clarity?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/dashboard/subscribe/app/config.tsx | 189 +++++++++ .../app/dashboard/subscribe/app/form.tsx | 277 +++++++++++++ .../app/dashboard/subscribe/app/table.tsx | 143 +++++++ .../{group-form.tsx => group/form.tsx} | 2 +- .../{group-table.tsx => group/table.tsx} | 2 +- apps/admin/app/dashboard/subscribe/page.tsx | 4 +- .../app/dashboard/subscribe/subscribe-app.tsx | 386 ------------------ .../dashboard/subscribe/subscribe-form.tsx | 2 +- 8 files changed, 614 insertions(+), 391 deletions(-) create mode 100644 apps/admin/app/dashboard/subscribe/app/config.tsx create mode 100644 apps/admin/app/dashboard/subscribe/app/form.tsx create mode 100644 apps/admin/app/dashboard/subscribe/app/table.tsx rename apps/admin/app/dashboard/subscribe/{group-form.tsx => group/form.tsx} (98%) rename apps/admin/app/dashboard/subscribe/{group-table.tsx => group/table.tsx} (99%) delete mode 100644 apps/admin/app/dashboard/subscribe/subscribe-app.tsx diff --git a/apps/admin/app/dashboard/subscribe/app/config.tsx b/apps/admin/app/dashboard/subscribe/app/config.tsx new file mode 100644 index 0000000..903a4fe --- /dev/null +++ b/apps/admin/app/dashboard/subscribe/app/config.tsx @@ -0,0 +1,189 @@ +'use client'; + +import { getAppConfig, updateAppConfig } from '@/services/admin/app'; +import { zodResolver } from '@hookform/resolvers/zod'; +import { Icon } from '@iconify/react'; +import { useQuery } from '@tanstack/react-query'; +import { Button } from '@workspace/ui/components/button'; +import { + Form, + FormControl, + FormDescription, + FormField, + FormItem, + FormLabel, + FormMessage, +} from '@workspace/ui/components/form'; +import { ScrollArea } from '@workspace/ui/components/scroll-area'; +import { + Sheet, + SheetContent, + SheetFooter, + SheetHeader, + SheetTitle, + SheetTrigger, +} from '@workspace/ui/components/sheet'; +import { Textarea } from '@workspace/ui/components/textarea'; +import { EnhancedInput } from '@workspace/ui/custom-components/enhanced-input'; +import { UploadImage } from '@workspace/ui/custom-components/upload-image'; +import { useTranslations } from 'next-intl'; +import { useEffect, useState } from 'react'; +import { useForm } from 'react-hook-form'; +import { toast } from 'sonner'; +import { z } from 'zod'; + +const formSchema = z.object({ + startup_picture: z.string(), + startup_picture_skip_time: z.number(), + domains: z.array(z.string()), +}); + +type FormSchema = z.infer; + +export default function ConfigForm() { + const t = useTranslations('subscribe.app'); + const [open, setOpen] = useState(false); + const [loading, setLoading] = useState(false); + + const form = useForm({ + resolver: zodResolver(formSchema), + defaultValues: { + startup_picture: '', + startup_picture_skip_time: 0, + domains: [], + }, + }); + + const { data, refetch } = useQuery({ + queryKey: ['getAppConfig'], + queryFn: async () => { + const { data } = await getAppConfig(); + return data.data; + }, + }); + + useEffect(() => { + if (data) { + form.reset({ + ...data, + domains: data.domains || [], + }); + } + }, [data, form]); + + async function onSubmit(values: FormSchema) { + setLoading(true); + try { + await updateAppConfig(values as API.AppConfig); + toast.success(t('updateSuccess')); + refetch(); + setOpen(false); + } catch (error) { + /* empty */ + } finally { + setLoading(false); + } + } + + return ( + + + + + + + {t('configApp')} + + +
+ + ( + + {t('startupPicture')} + {t('startupPictureDescription')} + + form.setValue('startup_picture', value as string)} + /> + } + /> + + + + )} + /> + + ( + + {t('startupPictureSkip')} + {t('startupPictureSkipDescription')} + + + form.setValue('startup_picture_skip_time', Number(value)) + } + /> + + + + )} + /> + + ( + + {t('backupDomains')} + {t('backupDomainsDescription')} + +