import { useTranslation } from "react-i18next"; import { useState } from "react"; import type { ReactNode } from "react"; import { FormControl, FormField, FormItem, FormLabel, FormMessage, } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import { ArrowLeft } from "lucide-react"; import { Dialog, DialogContent, DialogTrigger, DialogClose, } from "@/components/ui/dialog"; import { ProviderIcon } from "@/components/ProviderIcon"; import { IconPicker } from "@/components/IconPicker"; import { getIconMetadata } from "@/icons/extracted/metadata"; import type { UseFormReturn } from "react-hook-form"; import type { ProviderFormData } from "@/lib/schemas/provider"; interface BasicFormFieldsProps { form: UseFormReturn; /** Slot to render content between icon and name fields */ beforeNameSlot?: ReactNode; } export function BasicFormFields({ form, beforeNameSlot }: BasicFormFieldsProps) { const { t } = useTranslation(); const [iconDialogOpen, setIconDialogOpen] = useState(false); const currentIcon = form.watch("icon"); const currentIconColor = form.watch("iconColor"); const providerName = form.watch("name") || "Provider"; const effectiveIconColor = currentIconColor || (currentIcon ? getIconMetadata(currentIcon)?.defaultColor : undefined); const handleIconSelect = (icon: string) => { const meta = getIconMetadata(icon); form.setValue("icon", icon); form.setValue("iconColor", meta?.defaultColor ?? ""); }; return ( <> {/* 图标选择区域 - 顶部居中,可选 */}

{t("providerIcon.selectIcon", { defaultValue: "选择图标", })}

{/* Slot for additional fields between icon and name */} {beforeNameSlot} {/* 基础信息 - 网格布局 */}
( {t("provider.name")} )} /> ( {t("provider.notes")} )} />
( {t("provider.websiteUrl")} )} /> ); }