import { useState } from "react"; import { flushSync } from "react-dom"; import { useTranslation } from "react-i18next"; import { useDeepCompareEffect } from "ahooks"; import { Button, Form, Input, Upload, type FormInstance, type UploadFile, type UploadProps } from "antd"; import { createSchemaFieldRule } from "antd-zod"; import { z } from "zod"; import { Upload as UploadIcon } from "lucide-react"; import { type KubernetesAccessConfig } from "@/domain/access"; import { readFileContent } from "@/utils/file"; type AccessEditFormKubernetesConfigModelType = Partial; export type AccessEditFormKubernetesConfigProps = { form: FormInstance; disabled?: boolean; loading?: boolean; model?: AccessEditFormKubernetesConfigModelType; onModelChange?: (model: AccessEditFormKubernetesConfigModelType) => void; }; const initModel = () => { return {} as AccessEditFormKubernetesConfigModelType; }; const AccessEditFormKubernetesConfig = ({ form, disabled, loading, model, onModelChange }: AccessEditFormKubernetesConfigProps) => { const { t } = useTranslation(); const formSchema = z.object({ kubeConfig: z .string() .trim() .min(0, t("access.form.k8s_kubeconfig.placeholder")) .max(20480, t("common.errmsg.string_max", { max: 20480 })), }); const formRule = createSchemaFieldRule(formSchema); const [initialValues, setInitialValues] = useState>>(model ?? initModel()); useDeepCompareEffect(() => { setInitialValues(model ?? initModel()); setKubeFileList(model?.kubeConfig?.trim() ? [{ uid: "-1", name: "kubeconfig", status: "done" }] : []); }, [model]); const [kubeFileList, setKubeFileList] = useState([]); const handleFormChange = (_: unknown, fields: AccessEditFormKubernetesConfigModelType) => { onModelChange?.(fields); }; const handleUploadChange: UploadProps["onChange"] = async ({ file }) => { if (file && file.status !== "removed") { form.setFieldValue("kubeConfig", (await readFileContent(file.originFileObj ?? (file as unknown as File))).trim()); setKubeFileList([file]); } else { form.setFieldValue("kubeConfig", ""); setKubeFileList([]); } flushSync(() => onModelChange?.(form.getFieldsValue())); }; return (
} >
); }; export default AccessEditFormKubernetesConfig;