chore(deps): upgrade npm dependencies

This commit is contained in:
Fu Diwei 2024-12-23 13:36:18 +08:00
parent 984aae1ca6
commit cda54085b9
27 changed files with 850 additions and 728 deletions

View File

@ -11,10 +11,11 @@
"gopls": { "gopls": {
"formatting.gofumpt": true, "formatting.gofumpt": true,
}, },
"typescript.tsdk": "ui/node_modules/typescript/lib",
"[go]": { "[go]": {
"editor.defaultFormatter": "golang.go" "editor.defaultFormatter": "golang.go"
}, },
"[typescript]": { "[typescript]": {
"editor.defaultFormatter": "esbenp.prettier-vscode" "editor.defaultFormatter": "esbenp.prettier-vscode"
} }
} }

1371
ui/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -20,51 +20,51 @@
"@radix-ui/react-slot": "^1.1.0", "@radix-ui/react-slot": "^1.1.0",
"@tanstack/react-table": "^8.20.5", "@tanstack/react-table": "^8.20.5",
"ahooks": "^3.8.4", "ahooks": "^3.8.4",
"antd": "^5.22.2", "antd": "^5.22.5",
"antd-zod": "^6.0.0", "antd-zod": "^6.0.0",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"cron-parser": "^4.9.0", "cron-parser": "^4.9.0",
"i18next": "^23.15.1", "i18next": "^24.2.0",
"i18next-browser-languagedetector": "^8.0.0", "i18next-browser-languagedetector": "^8.0.2",
"i18next-http-backend": "^2.6.1", "i18next-http-backend": "^3.0.1",
"immer": "^10.1.1", "immer": "^10.1.1",
"jszip": "^3.10.1", "jszip": "^3.10.1",
"lucide-react": "^0.417.0", "lucide-react": "^0.469.0",
"nanoid": "^5.0.7", "nanoid": "^5.0.9",
"pocketbase": "^0.21.4", "pocketbase": "^0.21.4",
"react": "^18.3.1", "react": "^18.3.1",
"react-copy-to-clipboard": "^5.1.0", "react-copy-to-clipboard": "^5.1.0",
"react-dom": "^18.3.1", "react-dom": "^18.3.1",
"react-hook-form": "^7.52.1", "react-hook-form": "^7.52.1",
"react-i18next": "^15.0.2", "react-i18next": "^15.2.0",
"react-router-dom": "^6.25.1", "react-router-dom": "^7.1.0",
"tailwind-merge": "^2.4.0", "tailwind-merge": "^2.5.5",
"tailwindcss-animate": "^1.0.7", "zod": "^3.24.1",
"zod": "^3.23.8", "zustand": "^5.0.2"
"zustand": "^5.0.1"
}, },
"devDependencies": { "devDependencies": {
"@types/fs-extra": "^11.0.4", "@types/fs-extra": "^11.0.4",
"@types/node": "^22.0.0", "@types/node": "^22.10.2",
"@types/react": "^18.3.3", "@types/react": "^18.3.12",
"@types/react-copy-to-clipboard": "^5.0.7", "@types/react-copy-to-clipboard": "^5.0.7",
"@types/react-dom": "^18.3.0", "@types/react-dom": "^18.3.1",
"@typescript-eslint/eslint-plugin": "^7.15.0", "@typescript-eslint/eslint-plugin": "^8.18.1",
"@typescript-eslint/parser": "^7.15.0", "@typescript-eslint/parser": "^8.18.1",
"@vitejs/plugin-legacy": "^5.4.3", "@vitejs/plugin-legacy": "^6.0.0",
"@vitejs/plugin-react": "^4.3.1", "@vitejs/plugin-react": "^4.3.4",
"autoprefixer": "^10.4.19", "autoprefixer": "^10.4.20",
"eslint": "^8.57.0", "eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0", "eslint-config-prettier": "^9.1.0",
"eslint-plugin-prettier": "^5.2.1", "eslint-plugin-prettier": "^5.2.1",
"eslint-plugin-react-hooks": "^4.6.2", "eslint-plugin-react-hooks": "^5.1.0",
"eslint-plugin-react-refresh": "^0.4.7", "eslint-plugin-react-refresh": "^0.4.16",
"fs-extra": "^11.2.0", "fs-extra": "^11.2.0",
"postcss": "^8.4.40", "postcss": "^8.4.49",
"prettier": "^3.3.3", "prettier": "^3.4.2",
"tailwindcss": "^3.4.7", "tailwindcss": "^3.4.17",
"typescript": "^5.6.2", "tailwindcss-animate": "^1.0.7",
"vite": "^5.3.4" "typescript": "^5.7.2",
"vite": "^6.0.5"
} }
} }

View File

@ -33,7 +33,6 @@ export type AccessEditFormProps = {
className?: string; className?: string;
style?: React.CSSProperties; style?: React.CSSProperties;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
mode: AccessEditFormModes; mode: AccessEditFormModes;
model?: AccessEditFormModelType; model?: AccessEditFormModelType;
onModelChange?: (model: AccessEditFormModelType) => void; onModelChange?: (model: AccessEditFormModelType) => void;
@ -45,7 +44,7 @@ export type AccessEditFormInstance = {
validateFields: () => Promise<AccessEditFormModelType>; validateFields: () => Promise<AccessEditFormModelType>;
}; };
const AccessEditForm = forwardRef<AccessEditFormInstance, AccessEditFormProps>(({ className, style, disabled, loading, mode, model, onModelChange }, ref) => { const AccessEditForm = forwardRef<AccessEditFormInstance, AccessEditFormProps>(({ className, style, disabled, mode, model, onModelChange }, ref) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -77,7 +76,7 @@ const AccessEditForm = forwardRef<AccessEditFormInstance, AccessEditFormProps>((
ASCII ASCII
NOTICE: If you add new child component, please keep ASCII order. NOTICE: If you add new child component, please keep ASCII order.
*/ */
const configFormProps = { form: configFormInst, formName: configFormName, disabled: disabled, loading: loading, model: model?.config }; const configFormProps = { form: configFormInst, formName: configFormName, disabled: disabled, model: model?.config };
switch (configType) { switch (configType) {
case ACCESS_PROVIDER_TYPES.ACMEHTTPREQ: case ACCESS_PROVIDER_TYPES.ACMEHTTPREQ:
return <AccessEditFormACMEHttpReqConfig {...configFormProps} />; return <AccessEditFormACMEHttpReqConfig {...configFormProps} />;
@ -150,7 +149,7 @@ const AccessEditForm = forwardRef<AccessEditFormInstance, AccessEditFormProps>((
return ( return (
<Form.Provider onFormChange={handleFormProviderChange}> <Form.Provider onFormChange={handleFormProviderChange}>
<div className={className} style={style}> <div className={className} style={style}>
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" onValuesChange={handleFormChange}>
<Form.Item name="name" label={t("access.form.name.label")} rules={[formRule]}> <Form.Item name="name" label={t("access.form.name.label")} rules={[formRule]}>
<Input placeholder={t("access.form.name.placeholder")} /> <Input placeholder={t("access.form.name.placeholder")} />
</Form.Item> </Form.Item>

View File

@ -13,7 +13,6 @@ export type AccessEditFormACMEHttpReqConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormACMEHttpReqConfigModelType; model?: AccessEditFormACMEHttpReqConfigModelType;
onModelChange?: (model: AccessEditFormACMEHttpReqConfigModelType) => void; onModelChange?: (model: AccessEditFormACMEHttpReqConfigModelType) => void;
}; };
@ -22,12 +21,10 @@ const initModel = () => {
return { return {
endpoint: "https://example.com/api/", endpoint: "https://example.com/api/",
mode: "", mode: "",
username: "",
password: "",
} as AccessEditFormACMEHttpReqConfigModelType; } as AccessEditFormACMEHttpReqConfigModelType;
}; };
const AccessEditFormACMEHttpReqConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormACMEHttpReqConfigProps) => { const AccessEditFormACMEHttpReqConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormACMEHttpReqConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -58,7 +55,7 @@ const AccessEditFormACMEHttpReqConfig = ({ form, formName, disabled, loading, mo
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="endpoint" name="endpoint"
label={t("access.form.acmehttpreq_endpoint.label")} label={t("access.form.acmehttpreq_endpoint.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormAWSConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormAWSConfigModelType; model?: AccessEditFormAWSConfigModelType;
onModelChange?: (model: AccessEditFormAWSConfigModelType) => void; onModelChange?: (model: AccessEditFormAWSConfigModelType) => void;
}; };
@ -27,7 +26,7 @@ const initModel = () => {
} as AccessEditFormAWSConfigModelType; } as AccessEditFormAWSConfigModelType;
}; };
const AccessEditFormAWSConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormAWSConfigProps) => { const AccessEditFormAWSConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormAWSConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -68,7 +67,7 @@ const AccessEditFormAWSConfig = ({ form, formName, disabled, loading, model, onM
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKeyId" name="accessKeyId"
label={t("access.form.aws_access_key_id.label")} label={t("access.form.aws_access_key_id.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormAliyunConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormAliyunConfigModelType; model?: AccessEditFormAliyunConfigModelType;
onModelChange?: (model: AccessEditFormAliyunConfigModelType) => void; onModelChange?: (model: AccessEditFormAliyunConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormAliyunConfigModelType; } as AccessEditFormAliyunConfigModelType;
}; };
const AccessEditFormAliyunConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormAliyunConfigProps) => { const AccessEditFormAliyunConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormAliyunConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormAliyunConfig = ({ form, formName, disabled, loading, model,
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKeyId" name="accessKeyId"
label={t("access.form.aliyun_access_key_id.label")} label={t("access.form.aliyun_access_key_id.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormBaiduCloudConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormBaiduCloudConfigModelType; model?: AccessEditFormBaiduCloudConfigModelType;
onModelChange?: (model: AccessEditFormBaiduCloudConfigModelType) => void; onModelChange?: (model: AccessEditFormBaiduCloudConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormBaiduCloudConfigModelType; } as AccessEditFormBaiduCloudConfigModelType;
}; };
const AccessEditFormBaiduCloudConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormBaiduCloudConfigProps) => { const AccessEditFormBaiduCloudConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormBaiduCloudConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormBaiduCloudConfig = ({ form, formName, disabled, loading, mod
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKeyId" name="accessKeyId"
label={t("access.form.baiducloud_access_key_id.label")} label={t("access.form.baiducloud_access_key_id.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormBytePlusConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormBytePlusConfigModelType; model?: AccessEditFormBytePlusConfigModelType;
onModelChange?: (model: AccessEditFormBytePlusConfigModelType) => void; onModelChange?: (model: AccessEditFormBytePlusConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormBytePlusConfigModelType; } as AccessEditFormBytePlusConfigModelType;
}; };
const AccessEditFormBytePlusConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormBytePlusConfigProps) => { const AccessEditFormBytePlusConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormBytePlusConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormBytePlusConfig = ({ form, formName, disabled, loading, model
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKey" name="accessKey"
label={t("access.form.byteplus_access_key.label")} label={t("access.form.byteplus_access_key.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormCloudflareConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormCloudflareConfigModelType; model?: AccessEditFormCloudflareConfigModelType;
onModelChange?: (model: AccessEditFormCloudflareConfigModelType) => void; onModelChange?: (model: AccessEditFormCloudflareConfigModelType) => void;
}; };
@ -24,7 +23,7 @@ const initModel = () => {
} as AccessEditFormCloudflareConfigModelType; } as AccessEditFormCloudflareConfigModelType;
}; };
const AccessEditFormCloudflareConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormCloudflareConfigProps) => { const AccessEditFormCloudflareConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormCloudflareConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -46,7 +45,7 @@ const AccessEditFormCloudflareConfig = ({ form, formName, disabled, loading, mod
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="dnsApiToken" name="dnsApiToken"
label={t("access.form.cloudflare_dns_api_token.label")} label={t("access.form.cloudflare_dns_api_token.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormDogeCloudConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormDogeCloudConfigModelType; model?: AccessEditFormDogeCloudConfigModelType;
onModelChange?: (model: AccessEditFormDogeCloudConfigModelType) => void; onModelChange?: (model: AccessEditFormDogeCloudConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormDogeCloudConfigModelType; } as AccessEditFormDogeCloudConfigModelType;
}; };
const AccessEditFormDogeCloudConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormDogeCloudConfigProps) => { const AccessEditFormDogeCloudConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormDogeCloudConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormDogeCloudConfig = ({ form, formName, disabled, loading, mode
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKey" name="accessKey"
label={t("access.form.dogecloud_access_key.label")} label={t("access.form.dogecloud_access_key.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormGoDaddyConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormGoDaddyConfigModelType; model?: AccessEditFormGoDaddyConfigModelType;
onModelChange?: (model: AccessEditFormGoDaddyConfigModelType) => void; onModelChange?: (model: AccessEditFormGoDaddyConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormGoDaddyConfigModelType; } as AccessEditFormGoDaddyConfigModelType;
}; };
const AccessEditFormGoDaddyConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormGoDaddyConfigProps) => { const AccessEditFormGoDaddyConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormGoDaddyConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormGoDaddyConfig = ({ form, formName, disabled, loading, model,
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="apiKey" name="apiKey"
label={t("access.form.godaddy_api_key.label")} label={t("access.form.godaddy_api_key.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormHuaweiCloudConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormHuaweiCloudConfigModelType; model?: AccessEditFormHuaweiCloudConfigModelType;
onModelChange?: (model: AccessEditFormHuaweiCloudConfigModelType) => void; onModelChange?: (model: AccessEditFormHuaweiCloudConfigModelType) => void;
}; };
@ -26,7 +25,7 @@ const initModel = () => {
} as AccessEditFormHuaweiCloudConfigModelType; } as AccessEditFormHuaweiCloudConfigModelType;
}; };
const AccessEditFormHuaweiCloudConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormHuaweiCloudConfigProps) => { const AccessEditFormHuaweiCloudConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormHuaweiCloudConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -60,7 +59,7 @@ const AccessEditFormHuaweiCloudConfig = ({ form, formName, disabled, loading, mo
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKeyId" name="accessKeyId"
label={t("access.form.huaweicloud_access_key_id.label")} label={t("access.form.huaweicloud_access_key_id.label")}

View File

@ -16,7 +16,6 @@ export type AccessEditFormKubernetesConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormKubernetesConfigModelType; model?: AccessEditFormKubernetesConfigModelType;
onModelChange?: (model: AccessEditFormKubernetesConfigModelType) => void; onModelChange?: (model: AccessEditFormKubernetesConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
return {} as AccessEditFormKubernetesConfigModelType; return {} as AccessEditFormKubernetesConfigModelType;
}; };
const AccessEditFormKubernetesConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormKubernetesConfigProps) => { const AccessEditFormKubernetesConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormKubernetesConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -37,6 +36,7 @@ const AccessEditFormKubernetesConfig = ({ form, formName, disabled, loading, mod
.nullish(), .nullish(),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);
const formInst = form as FormInstance<z.infer<typeof formSchema>>;
const [initialValues, setInitialValues] = useState<Partial<z.infer<typeof formSchema>>>(model ?? initModel()); const [initialValues, setInitialValues] = useState<Partial<z.infer<typeof formSchema>>>(model ?? initModel());
useDeepCompareEffect(() => { useDeepCompareEffect(() => {
@ -52,20 +52,25 @@ const AccessEditFormKubernetesConfig = ({ form, formName, disabled, loading, mod
const handleUploadChange: UploadProps["onChange"] = async ({ file }) => { const handleUploadChange: UploadProps["onChange"] = async ({ file }) => {
if (file && file.status !== "removed") { if (file && file.status !== "removed") {
form.setFieldValue("kubeConfig", (await readFileContent(file.originFileObj ?? (file as unknown as File))).trim()); formInst.setFieldValue("kubeConfig", (await readFileContent(file.originFileObj ?? (file as unknown as File))).trim());
setKubeFileList([file]); setKubeFileList([file]);
} else { } else {
form.setFieldValue("kubeConfig", ""); formInst.setFieldValue("kubeConfig", "");
setKubeFileList([]); setKubeFileList([]);
} }
flushSync(() => onModelChange?.(form.getFieldsValue(true))); flushSync(() => onModelChange?.(formInst.getFieldsValue(true)));
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item name="kubeConfig" noStyle rules={[formRule]}> <Form.Item name="kubeConfig" noStyle rules={[formRule]}>
<Input.TextArea autoComplete="new-password" hidden placeholder={t("access.form.k8s_kubeconfig.placeholder")} value={form.getFieldValue("kubeConfig")} /> <Input.TextArea
autoComplete="new-password"
hidden
placeholder={t("access.form.k8s_kubeconfig.placeholder")}
value={formInst.getFieldValue("kubeConfig")}
/>
</Form.Item> </Form.Item>
<Form.Item <Form.Item
label={t("access.form.k8s_kubeconfig.label")} label={t("access.form.k8s_kubeconfig.label")}

View File

@ -10,7 +10,6 @@ export type AccessEditFormLocalConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormLocalConfigModelType; model?: AccessEditFormLocalConfigModelType;
onModelChange?: (model: AccessEditFormLocalConfigModelType) => void; onModelChange?: (model: AccessEditFormLocalConfigModelType) => void;
}; };
@ -19,13 +18,13 @@ const initModel = () => {
return {} as AccessEditFormLocalConfigModelType; return {} as AccessEditFormLocalConfigModelType;
}; };
const AccessEditFormLocalConfig = ({ form, formName, disabled, loading, model }: AccessEditFormLocalConfigProps) => { const AccessEditFormLocalConfig = ({ form, formName, disabled, model }: AccessEditFormLocalConfigProps) => {
const [initialValues, setInitialValues] = useState(model ?? initModel()); const [initialValues, setInitialValues] = useState(model ?? initModel());
useDeepCompareEffect(() => { useDeepCompareEffect(() => {
setInitialValues(model ?? initModel()); setInitialValues(model ?? initModel());
}, [model]); }, [model]);
return <Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName}></Form>; return <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName}></Form>;
}; };
export default AccessEditFormLocalConfig; export default AccessEditFormLocalConfig;

View File

@ -13,7 +13,6 @@ export type AccessEditFormNameSiloConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormNameSiloConfigModelType; model?: AccessEditFormNameSiloConfigModelType;
onModelChange?: (model: AccessEditFormNameSiloConfigModelType) => void; onModelChange?: (model: AccessEditFormNameSiloConfigModelType) => void;
}; };
@ -24,7 +23,7 @@ const initModel = () => {
} as AccessEditFormNameSiloConfigModelType; } as AccessEditFormNameSiloConfigModelType;
}; };
const AccessEditFormNameSiloConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormNameSiloConfigProps) => { const AccessEditFormNameSiloConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormNameSiloConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -46,7 +45,7 @@ const AccessEditFormNameSiloConfig = ({ form, formName, disabled, loading, model
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="apiKey" name="apiKey"
label={t("access.form.namesilo_api_key.label")} label={t("access.form.namesilo_api_key.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormPowerDNSConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormPowerDNSConfigModelType; model?: AccessEditFormPowerDNSConfigModelType;
onModelChange?: (model: AccessEditFormPowerDNSConfigModelType) => void; onModelChange?: (model: AccessEditFormPowerDNSConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormPowerDNSConfigModelType; } as AccessEditFormPowerDNSConfigModelType;
}; };
const AccessEditFormPowerDNSConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormPowerDNSConfigProps) => { const AccessEditFormPowerDNSConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormPowerDNSConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -48,7 +47,7 @@ const AccessEditFormPowerDNSConfig = ({ form, formName, disabled, loading, model
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="apiUrl" name="apiUrl"
label={t("access.form.powerdns_api_url.label")} label={t("access.form.powerdns_api_url.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormQiniuConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormQiniuConfigModelType; model?: AccessEditFormQiniuConfigModelType;
onModelChange?: (model: AccessEditFormQiniuConfigModelType) => void; onModelChange?: (model: AccessEditFormQiniuConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormQiniuConfigModelType; } as AccessEditFormQiniuConfigModelType;
}; };
const AccessEditFormQiniuConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormQiniuConfigProps) => { const AccessEditFormQiniuConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormQiniuConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormQiniuConfig = ({ form, formName, disabled, loading, model, o
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKey" name="accessKey"
label={t("access.form.qiniu_access_key.label")} label={t("access.form.qiniu_access_key.label")}

View File

@ -16,7 +16,6 @@ export type AccessEditFormSSHConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormSSHConfigModelType; model?: AccessEditFormSSHConfigModelType;
onModelChange?: (model: AccessEditFormSSHConfigModelType) => void; onModelChange?: (model: AccessEditFormSSHConfigModelType) => void;
}; };
@ -29,7 +28,7 @@ const initModel = () => {
} as AccessEditFormSSHConfigModelType; } as AccessEditFormSSHConfigModelType;
}; };
const AccessEditFormSSHConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormSSHConfigProps) => { const AccessEditFormSSHConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormSSHConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -69,9 +68,10 @@ const AccessEditFormSSHConfig = ({ form, formName, disabled, loading, model, onM
.min(0, "access.form.ssh_key_passphrase.placeholder") .min(0, "access.form.ssh_key_passphrase.placeholder")
.max(20480, t("common.errmsg.string_max", { max: 20480 })) .max(20480, t("common.errmsg.string_max", { max: 20480 }))
.nullish() .nullish()
.refine((v) => !v || form.getFieldValue("key"), { message: t("access.form.ssh_key.placeholder") }), .and(z.string().refine((v) => !v || form.getFieldValue("key"), { message: t("access.form.ssh_key.placeholder") })),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);
const formInst = form as FormInstance<z.infer<typeof formSchema>>;
const [initialValues, setInitialValues] = useState<Partial<z.infer<typeof formSchema>>>(model ?? initModel()); const [initialValues, setInitialValues] = useState<Partial<z.infer<typeof formSchema>>>(model ?? initModel());
useDeepCompareEffect(() => { useDeepCompareEffect(() => {
@ -87,18 +87,18 @@ const AccessEditFormSSHConfig = ({ form, formName, disabled, loading, model, onM
const handleUploadChange: UploadProps["onChange"] = async ({ file }) => { const handleUploadChange: UploadProps["onChange"] = async ({ file }) => {
if (file && file.status !== "removed") { if (file && file.status !== "removed") {
form.setFieldValue("key", (await readFileContent(file.originFileObj ?? (file as unknown as File))).trim()); formInst.setFieldValue("key", (await readFileContent(file.originFileObj ?? (file as unknown as File))).trim());
setKeyFileList([file]); setKeyFileList([file]);
} else { } else {
form.setFieldValue("key", ""); formInst.setFieldValue("key", "");
setKeyFileList([]); setKeyFileList([]);
} }
flushSync(() => onModelChange?.(form.getFieldsValue(true))); flushSync(() => onModelChange?.(formInst.getFieldsValue(true)));
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<div className="flex space-x-2"> <div className="flex space-x-2">
<div className="w-2/3"> <div className="w-2/3">
<Form.Item name="host" label={t("access.form.ssh_host.label")} rules={[formRule]}> <Form.Item name="host" label={t("access.form.ssh_host.label")} rules={[formRule]}>
@ -135,7 +135,7 @@ const AccessEditFormSSHConfig = ({ form, formName, disabled, loading, model, onM
<div className="flex space-x-2"> <div className="flex space-x-2">
<div className="w-1/2"> <div className="w-1/2">
<Form.Item name="key" noStyle rules={[formRule]}> <Form.Item name="key" noStyle rules={[formRule]}>
<Input.TextArea autoComplete="new-password" hidden placeholder={t("access.form.ssh_key.placeholder")} value={form.getFieldValue("key")} /> <Input.TextArea autoComplete="new-password" hidden placeholder={t("access.form.ssh_key.placeholder")} value={formInst.getFieldValue("key")} />
</Form.Item> </Form.Item>
<Form.Item label={t("access.form.ssh_key.label")} tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.ssh_key.tooltip") }}></span>}> <Form.Item label={t("access.form.ssh_key.label")} tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.ssh_key.tooltip") }}></span>}>
<Upload beforeUpload={() => false} fileList={keyFileList} maxCount={1} onChange={handleUploadChange}> <Upload beforeUpload={() => false} fileList={keyFileList} maxCount={1} onChange={handleUploadChange}>

View File

@ -13,7 +13,6 @@ export type AccessEditFormTencentCloudConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormTencentCloudConfigModelType; model?: AccessEditFormTencentCloudConfigModelType;
onModelChange?: (model: AccessEditFormTencentCloudConfigModelType) => void; onModelChange?: (model: AccessEditFormTencentCloudConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormTencentCloudConfigModelType; } as AccessEditFormTencentCloudConfigModelType;
}; };
const AccessEditFormTencentCloudConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormTencentCloudConfigProps) => { const AccessEditFormTencentCloudConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormTencentCloudConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormTencentCloudConfig = ({ form, formName, disabled, loading, m
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="secretId" name="secretId"
label={t("access.form.tencentcloud_secret_id.label")} label={t("access.form.tencentcloud_secret_id.label")}

View File

@ -13,7 +13,6 @@ export type AccessEditFormVolcEngineConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormVolcEngineConfigModelType; model?: AccessEditFormVolcEngineConfigModelType;
onModelChange?: (model: AccessEditFormVolcEngineConfigModelType) => void; onModelChange?: (model: AccessEditFormVolcEngineConfigModelType) => void;
}; };
@ -25,7 +24,7 @@ const initModel = () => {
} as AccessEditFormVolcEngineConfigModelType; } as AccessEditFormVolcEngineConfigModelType;
}; };
const AccessEditFormVolcEngineConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormVolcEngineConfigProps) => { const AccessEditFormVolcEngineConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormVolcEngineConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -52,7 +51,7 @@ const AccessEditFormVolcEngineConfig = ({ form, formName, disabled, loading, mod
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item <Form.Item
name="accessKeyId" name="accessKeyId"
label={t("access.form.volcengine_access_key_id.label")} label={t("access.form.volcengine_access_key_id.label")}

View File

@ -12,7 +12,6 @@ export type AccessEditFormWebhookConfigProps = {
form: FormInstance; form: FormInstance;
formName: string; formName: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: AccessEditFormWebhookConfigModelType; model?: AccessEditFormWebhookConfigModelType;
onModelChange?: (model: AccessEditFormWebhookConfigModelType) => void; onModelChange?: (model: AccessEditFormWebhookConfigModelType) => void;
}; };
@ -23,7 +22,7 @@ const initModel = () => {
} as AccessEditFormWebhookConfigModelType; } as AccessEditFormWebhookConfigModelType;
}; };
const AccessEditFormWebhookConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormWebhookConfigProps) => { const AccessEditFormWebhookConfig = ({ form, formName, disabled, model, onModelChange }: AccessEditFormWebhookConfigProps) => {
const { t } = useTranslation(); const { t } = useTranslation();
const formSchema = z.object({ const formSchema = z.object({
@ -44,7 +43,7 @@ const AccessEditFormWebhookConfig = ({ form, formName, disabled, loading, model,
}; };
return ( return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}> <Form form={form} disabled={disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item name="url" label={t("access.form.webhook_url.label")} rules={[formRule]}> <Form.Item name="url" label={t("access.form.webhook_url.label")} rules={[formRule]}>
<Input placeholder={t("access.form.webhook_url.placeholder")} /> <Input placeholder={t("access.form.webhook_url.placeholder")} />
</Form.Item> </Form.Item>

View File

@ -19,7 +19,6 @@ export type NotifyChannelEditFormProps = {
style?: React.CSSProperties; style?: React.CSSProperties;
channel: string; channel: string;
disabled?: boolean; disabled?: boolean;
loading?: boolean;
model?: NotifyChannelEditFormModelType; model?: NotifyChannelEditFormModelType;
onModelChange?: (model: NotifyChannelEditFormModelType) => void; onModelChange?: (model: NotifyChannelEditFormModelType) => void;
}; };
@ -31,7 +30,7 @@ export type NotifyChannelEditFormInstance = {
}; };
const NotifyChannelEditForm = forwardRef<NotifyChannelEditFormInstance, NotifyChannelEditFormProps>( const NotifyChannelEditForm = forwardRef<NotifyChannelEditFormInstance, NotifyChannelEditFormProps>(
({ className, style, channel, disabled, loading, model, onModelChange }, ref) => { ({ className, style, channel, disabled, model, onModelChange }, ref) => {
const [form] = Form.useForm(); const [form] = Form.useForm();
const formName = useCreation(() => `notifyChannelEditForm_${Math.random().toString(36).substring(2, 10)}${new Date().getTime()}`, []); const formName = useCreation(() => `notifyChannelEditForm_${Math.random().toString(36).substring(2, 10)}${new Date().getTime()}`, []);
const formFieldsComponent = useMemo(() => { const formFieldsComponent = useMemo(() => {
@ -85,7 +84,7 @@ const NotifyChannelEditForm = forwardRef<NotifyChannelEditFormInstance, NotifyCh
className={className} className={className}
style={style} style={style}
form={form} form={form}
disabled={loading || disabled} disabled={disabled}
initialValues={initialValues} initialValues={initialValues}
layout="vertical" layout="vertical"
name={formName} name={formName}

View File

@ -36,7 +36,7 @@ const NotifyChannelEditFormEmailFields = () => {
.email({ message: t("common.errmsg.email_invalid") }), .email({ message: t("common.errmsg.email_invalid") }),
}); });
const formRule = createSchemaFieldRule(formSchema); const formRule = createSchemaFieldRule(formSchema);
const form = Form.useFormInstance(); const form = Form.useFormInstance<z.infer<typeof formSchema>>();
const handleTLSSwitchChange = (checked: boolean) => { const handleTLSSwitchChange = (checked: boolean) => {
const oldPort = form.getFieldValue("smtpPort"); const oldPort = form.getFieldValue("smtpPort");

View File

@ -54,7 +54,7 @@ const NotifyTemplateForm = ({ className, style }: NotifyTemplateFormProps) => {
}, },
onFinally: (_, resp) => { onFinally: (_, resp) => {
const template = resp?.content?.notifyTemplates?.[0] ?? defaultNotifyTemplate; const template = resp?.content?.notifyTemplates?.[0] ?? defaultNotifyTemplate;
setInitialValues({ ...template }); setInitialValues(template);
}, },
} }
); );

View File

@ -24,7 +24,7 @@ const SSLProviderEditFormLetsEncryptConfig = () => {
const { pending, settings, updateSettings } = useContext(SSLProviderContext); const { pending, settings, updateSettings } = useContext(SSLProviderContext);
const [form] = Form.useForm(); const [form] = Form.useForm<NonNullable<unknown>>();
const [initialValues, setInitialValues] = useState(settings?.content?.config?.[SSLPROVIDERS.LETS_ENCRYPT]); const [initialValues, setInitialValues] = useState(settings?.content?.config?.[SSLPROVIDERS.LETS_ENCRYPT]);
const [initialChanged, setInitialChanged] = useState(false); const [initialChanged, setInitialChanged] = useState(false);
@ -209,7 +209,7 @@ const SettingsSSLProvider = () => {
const [messageApi, MessageContextHolder] = message.useMessage(); const [messageApi, MessageContextHolder] = message.useMessage();
const [notificationApi, NotificationContextHolder] = notification.useNotification(); const [notificationApi, NotificationContextHolder] = notification.useNotification();
const [form] = Form.useForm(); const [form] = Form.useForm<{ provider?: string }>();
const [formPending, setFormPending] = useState(false); const [formPending, setFormPending] = useState(false);
const [settings, setSettings] = useState<SettingsModel<SSLProviderSettingsContent>>(); const [settings, setSettings] = useState<SettingsModel<SSLProviderSettingsContent>>();

View File

@ -1,9 +1,8 @@
import path from "path"; import path from "node:path";
import legacy from "@vitejs/plugin-legacy";
import react from "@vitejs/plugin-react";
import { defineConfig, Plugin } from "vite";
import fs from "fs-extra"; import fs from "fs-extra";
import legacyPlugin from "@vitejs/plugin-legacy";
import reactPlugin from "@vitejs/plugin-react";
import { defineConfig, type Plugin } from "vite";
const preserveFilesPlugin = (filesToPreserve: string[]): Plugin => { const preserveFilesPlugin = (filesToPreserve: string[]): Plugin => {
return { return {
@ -34,8 +33,8 @@ const preserveFilesPlugin = (filesToPreserve: string[]): Plugin => {
export default defineConfig({ export default defineConfig({
plugins: [ plugins: [
react({}), reactPlugin({}),
legacy({ legacyPlugin({
targets: ["defaults", "not IE 11"], targets: ["defaults", "not IE 11"],
}), }),
preserveFilesPlugin(["dist/.gitkeep"]), preserveFilesPlugin(["dist/.gitkeep"]),