From ea7fd5490c5afec28d4f9e16d752492a86c97256 Mon Sep 17 00:00:00 2001 From: beilunyang <786220806@qq.com> Date: Sat, 1 Mar 2025 10:29:50 +0800 Subject: [PATCH] refactor: Consolidate configuration management with Zustand store --- app/api/admin-contact/route.ts | 12 ----- app/api/config/route.ts | 2 +- app/api/emails/domains/route.ts | 18 ------- app/components/emails/create-dialog.tsx | 20 +++----- app/components/emails/email-list.tsx | 21 ++------ app/components/no-permission-dialog.tsx | 8 +-- app/components/profile/api-key-panel.tsx | 8 +-- app/hooks/use-admin-contact.ts | 38 --------------- app/hooks/use-config.ts | 62 ++++++++++++++++++++++++ middleware.ts | 1 - package.json | 3 +- pnpm-lock.yaml | 46 ++++++++++-------- 12 files changed, 110 insertions(+), 129 deletions(-) delete mode 100644 app/api/admin-contact/route.ts delete mode 100644 app/api/emails/domains/route.ts delete mode 100644 app/hooks/use-admin-contact.ts create mode 100644 app/hooks/use-config.ts diff --git a/app/api/admin-contact/route.ts b/app/api/admin-contact/route.ts deleted file mode 100644 index e64fa72..0000000 --- a/app/api/admin-contact/route.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { getRequestContext } from "@cloudflare/next-on-pages" - -export const runtime = "edge" - -export async function GET() { - const env = getRequestContext().env - const adminContact = await env.SITE_CONFIG.get("ADMIN_CONTACT") - - return Response.json({ - adminContact: adminContact || "" - }) -} \ No newline at end of file diff --git a/app/api/config/route.ts b/app/api/config/route.ts index f492a40..3cca76d 100644 --- a/app/api/config/route.ts +++ b/app/api/config/route.ts @@ -15,7 +15,7 @@ export async function GET() { return Response.json({ defaultRole: defaultRole || ROLES.CIVILIAN, - emailDomains: emailDomains || "", + emailDomains: emailDomains || "moemail.app", adminContact: adminContact || "", maxEmails: maxEmails || EMAIL_CONFIG.MAX_ACTIVE_EMAILS.toString() }) diff --git a/app/api/emails/domains/route.ts b/app/api/emails/domains/route.ts deleted file mode 100644 index 0a40e89..0000000 --- a/app/api/emails/domains/route.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { getRequestContext } from "@cloudflare/next-on-pages" -import { NextResponse } from "next/server" - -export const runtime = "edge" - -export async function GET() { - try { - const domainString = await getRequestContext().env.SITE_CONFIG.get("EMAIL_DOMAINS") - - return NextResponse.json({ domains: domainString ? domainString.split(',') : ["moemail.app"] }) - } catch (error) { - console.error('Failed to fetch domains:', error) - return NextResponse.json( - { error: "获取域名列表失败" }, - { status: 500 } - ) - } -} \ No newline at end of file diff --git a/app/components/emails/create-dialog.tsx b/app/components/emails/create-dialog.tsx index ba9076c..c5dc980 100644 --- a/app/components/emails/create-dialog.tsx +++ b/app/components/emails/create-dialog.tsx @@ -12,16 +12,17 @@ import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { EXPIRY_OPTIONS } from "@/types/email" import { useCopy } from "@/hooks/use-copy" +import { useConfig } from "@/hooks/use-config" interface CreateDialogProps { onEmailCreated: () => void } export function CreateDialog({ onEmailCreated }: CreateDialogProps) { + const { config } = useConfig() const [open, setOpen] = useState(false) const [loading, setLoading] = useState(false) const [emailName, setEmailName] = useState("") - const [domains, setDomains] = useState([]) const [currentDomain, setCurrentDomain] = useState("") const [expiryTime, setExpiryTime] = useState(EXPIRY_OPTIONS[1].value.toString()) const { toast } = useToast() @@ -83,16 +84,11 @@ export function CreateDialog({ onEmailCreated }: CreateDialogProps) { } } - const fetchDomains = async () => { - const response = await fetch("/api/emails/domains"); - const data = (await response.json()) as { domains: string[] }; - setDomains(data.domains || []); - setCurrentDomain(data.domains[0] || ""); - }; - useEffect(() => { - fetchDomains() - }, []) + if ((config?.emailDomainsArray?.length ?? 0) > 0) { + setCurrentDomain(config?.emailDomainsArray[0] ?? "") + } + }, [config]) return ( @@ -114,13 +110,13 @@ export function CreateDialog({ onEmailCreated }: CreateDialogProps) { placeholder="输入邮箱名" className="flex-1" /> - {domains.length > 1 && ( + {(config?.emailDomainsArray?.length ?? 0) > 1 && (