From f71a5196749e15b8568e30e8b5e30bb698730118 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 31 Oct 2024 13:41:21 +0800 Subject: [PATCH] refactor: clean code --- .../certimate/DeployToAliyunALB.tsx | 24 +-- .../certimate/DeployToAliyunCDN.tsx | 50 ++---- .../certimate/DeployToAliyunCLB.tsx | 24 +-- .../certimate/DeployToAliyunNLB.tsx | 24 +-- .../certimate/DeployToAliyunOSS.tsx | 106 ++++--------- .../certimate/DeployToHuaweiCloudCDN.tsx | 37 +++-- .../certimate/DeployToHuaweiCloudELB.tsx | 31 ++-- .../certimate/DeployToKubernetesSecret.tsx | 37 ++++- ui/src/components/certimate/DeployToLocal.tsx | 42 ++--- .../components/certimate/DeployToQiniuCDN.tsx | 50 ++---- ui/src/components/certimate/DeployToSSH.tsx | 39 ++--- .../certimate/DeployToTencentCDN.tsx | 59 +++---- .../certimate/DeployToTencentCOS.tsx | 144 ++++-------------- .../certimate/DeployToTencentTEO.tsx | 99 ++++-------- .../components/certimate/DeployToWebhook.tsx | 15 +- ui/src/i18n/locales/en/nls.common.json | 1 - ui/src/i18n/locales/en/nls.domain.json | 2 + ui/src/i18n/locales/zh/nls.common.json | 1 - ui/src/i18n/locales/zh/nls.domain.json | 2 + 19 files changed, 253 insertions(+), 534 deletions(-) diff --git a/ui/src/components/certimate/DeployToAliyunALB.tsx b/ui/src/components/certimate/DeployToAliyunALB.tsx index cf7feba9..94172fd4 100644 --- a/ui/src/components/certimate/DeployToAliyunALB.tsx +++ b/ui/src/components/certimate/DeployToAliyunALB.tsx @@ -51,23 +51,13 @@ const DeployToAliyunALB = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - region: res.error.errors.find((e) => e.path[0] === "region")?.message, - resourceType: res.error.errors.find((e) => e.path[0] === "resourceType")?.message, - loadbalancerId: res.error.errors.find((e) => e.path[0] === "loadbalancerId")?.message, - listenerId: res.error.errors.find((e) => e.path[0] === "listenerId")?.message, - }); - } else { - setError({ - ...error, - region: undefined, - resourceType: undefined, - loadbalancerId: undefined, - listenerId: undefined, - }); - } + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + resourceType: res.error?.errors?.find((e) => e.path[0] === "resourceType")?.message, + loadbalancerId: res.error?.errors?.find((e) => e.path[0] === "loadbalancerId")?.message, + listenerId: res.error?.errors?.find((e) => e.path[0] === "listenerId")?.message, + }); }, [data]); return ( diff --git a/ui/src/components/certimate/DeployToAliyunCDN.tsx b/ui/src/components/certimate/DeployToAliyunCDN.tsx index 074f27a0..32eb5a41 100644 --- a/ui/src/components/certimate/DeployToAliyunCDN.tsx +++ b/ui/src/components/certimate/DeployToAliyunCDN.tsx @@ -27,25 +27,20 @@ const DeployToAliyunCDN = () => { setError({}); }, []); - useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); - - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + const formSchema = z.object({ + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); + return (
@@ -55,26 +50,9 @@ const DeployToAliyunCDN = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToAliyunCLB.tsx b/ui/src/components/certimate/DeployToAliyunCLB.tsx index eb41c0ac..d90574b3 100644 --- a/ui/src/components/certimate/DeployToAliyunCLB.tsx +++ b/ui/src/components/certimate/DeployToAliyunCLB.tsx @@ -51,23 +51,13 @@ const DeployToAliyunCLB = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - region: res.error.errors.find((e) => e.path[0] === "region")?.message, - resourceType: res.error.errors.find((e) => e.path[0] === "resourceType")?.message, - loadbalancerId: res.error.errors.find((e) => e.path[0] === "loadbalancerId")?.message, - listenerPort: res.error.errors.find((e) => e.path[0] === "listenerPort")?.message, - }); - } else { - setError({ - ...error, - region: undefined, - resourceType: undefined, - loadbalancerId: undefined, - listenerPort: undefined, - }); - } + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + resourceType: res.error?.errors?.find((e) => e.path[0] === "resourceType")?.message, + loadbalancerId: res.error?.errors?.find((e) => e.path[0] === "loadbalancerId")?.message, + listenerPort: res.error?.errors?.find((e) => e.path[0] === "listenerPort")?.message, + }); }, [data]); return ( diff --git a/ui/src/components/certimate/DeployToAliyunNLB.tsx b/ui/src/components/certimate/DeployToAliyunNLB.tsx index 38d6b1f7..0e4ea03e 100644 --- a/ui/src/components/certimate/DeployToAliyunNLB.tsx +++ b/ui/src/components/certimate/DeployToAliyunNLB.tsx @@ -51,23 +51,13 @@ const DeployToAliyunNLB = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - region: res.error.errors.find((e) => e.path[0] === "region")?.message, - resourceType: res.error.errors.find((e) => e.path[0] === "resourceType")?.message, - loadbalancerId: res.error.errors.find((e) => e.path[0] === "loadbalancerId")?.message, - listenerId: res.error.errors.find((e) => e.path[0] === "listenerId")?.message, - }); - } else { - setError({ - ...error, - region: undefined, - resourceType: undefined, - loadbalancerId: undefined, - listenerId: undefined, - }); - } + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + resourceType: res.error?.errors?.find((e) => e.path[0] === "resourceType")?.message, + loadbalancerId: res.error?.errors?.find((e) => e.path[0] === "loadbalancerId")?.message, + listenerId: res.error?.errors?.find((e) => e.path[0] === "listenerId")?.message, + }); }, [data]); return ( diff --git a/ui/src/components/certimate/DeployToAliyunOSS.tsx b/ui/src/components/certimate/DeployToAliyunOSS.tsx index ccfcc870..7037175c 100644 --- a/ui/src/components/certimate/DeployToAliyunOSS.tsx +++ b/ui/src/components/certimate/DeployToAliyunOSS.tsx @@ -17,7 +17,7 @@ const DeployToAliyunOSS = () => { setDeploy({ ...data, config: { - endpoint: "oss-cn-hangzhou.aliyuncs.com", + endpoint: "oss.aliyuncs.com", bucket: "", domain: "", }, @@ -29,43 +29,27 @@ const DeployToAliyunOSS = () => { setError({}); }, []); - useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); - - useEffect(() => { - const resp = bucketSchema.safeParse(data.config?.bucket); - if (!resp.success) { - setError({ - ...error, - bucket: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - bucket: "", - }); - } - }, [data]); - - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + const formSchema = z.object({ + endpoint: z.string().min(1, { + message: t("domain.deployment.form.aliyun_oss_endpoint.placeholder"), + }), + bucket: z.string().min(1, { + message: t("domain.deployment.form.aliyun_oss_bucket.placeholder"), + }), + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); - const bucketSchema = z.string().min(1, { - message: t("domain.deployment.form.aliyun_oss_bucket.placeholder"), - }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + endpoint: res.error?.errors?.find((e) => e.path[0] === "endpoint")?.message, + bucket: res.error?.errors?.find((e) => e.path[0] === "bucket")?.message, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); return (
@@ -76,13 +60,9 @@ const DeployToAliyunOSS = () => { className="w-full mt-1" value={data?.config?.endpoint} onChange={(e) => { - const temp = e.target.value; - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.endpoint = temp; + draft.config ??= {}; + draft.config.endpoint = e.target.value?.trim(); }); setDeploy(newData); }} @@ -97,26 +77,9 @@ const DeployToAliyunOSS = () => { className="w-full mt-1" value={data?.config?.bucket} onChange={(e) => { - const temp = e.target.value; - - const resp = bucketSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - bucket: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - bucket: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.bucket = temp; + draft.config ??= {}; + draft.config.bucket = e.target.value?.trim(); }); setDeploy(newData); }} @@ -131,26 +94,9 @@ const DeployToAliyunOSS = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToHuaweiCloudCDN.tsx b/ui/src/components/certimate/DeployToHuaweiCloudCDN.tsx index bdf968c4..10591530 100644 --- a/ui/src/components/certimate/DeployToHuaweiCloudCDN.tsx +++ b/ui/src/components/certimate/DeployToHuaweiCloudCDN.tsx @@ -28,31 +28,30 @@ const DeployToHuaweiCloudCDN = () => { setError({}); }, []); - useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); - - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + const formSchema = z.object({ + region: z.string().min(1, { + message: t("domain.deployment.form.huaweicloud_cdn_region.placeholder"), + }), + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); + return (
- + { diff --git a/ui/src/components/certimate/DeployToHuaweiCloudELB.tsx b/ui/src/components/certimate/DeployToHuaweiCloudELB.tsx index e7a7fc4a..a3d44f3c 100644 --- a/ui/src/components/certimate/DeployToHuaweiCloudELB.tsx +++ b/ui/src/components/certimate/DeployToHuaweiCloudELB.tsx @@ -35,7 +35,9 @@ const DeployToHuaweiCloudCDN = () => { const formSchema = z .object({ region: z.string().min(1, t("domain.deployment.form.huaweicloud_elb_region.placeholder")), - resourceType: z.string().min(1, t("domain.deployment.form.huaweicloud_elb_resource_type.placeholder")), + resourceType: z.union([z.literal("certificate"), z.literal("loadbalancer"), z.literal("listener")], { + message: t("domain.deployment.form.huaweicloud_elb_resource_type.placeholder"), + }), certificateId: z.string().optional(), loadbalancerId: z.string().optional(), listenerId: z.string().optional(), @@ -55,25 +57,14 @@ const DeployToHuaweiCloudCDN = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - region: res.error.errors.find((e) => e.path[0] === "region")?.message, - resourceType: res.error.errors.find((e) => e.path[0] === "resourceType")?.message, - certificateId: res.error.errors.find((e) => e.path[0] === "certificateId")?.message, - loadbalancerId: res.error.errors.find((e) => e.path[0] === "loadbalancerId")?.message, - listenerId: res.error.errors.find((e) => e.path[0] === "listenerId")?.message, - }); - } else { - setError({ - ...error, - region: undefined, - resourceType: undefined, - certificateId: undefined, - loadbalancerId: undefined, - listenerId: undefined, - }); - } + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + resourceType: res.error?.errors?.find((e) => e.path[0] === "resourceType")?.message, + certificateId: res.error?.errors?.find((e) => e.path[0] === "certificateId")?.message, + loadbalancerId: res.error?.errors?.find((e) => e.path[0] === "loadbalancerId")?.message, + listenerId: res.error?.errors?.find((e) => e.path[0] === "listenerId")?.message, + }); }, [data]); return ( diff --git a/ui/src/components/certimate/DeployToKubernetesSecret.tsx b/ui/src/components/certimate/DeployToKubernetesSecret.tsx index c7b8e2a8..90d6d84f 100644 --- a/ui/src/components/certimate/DeployToKubernetesSecret.tsx +++ b/ui/src/components/certimate/DeployToKubernetesSecret.tsx @@ -1,5 +1,6 @@ import { useEffect } from "react"; import { useTranslation } from "react-i18next"; +import { z } from "zod"; import { produce } from "immer"; import { Input } from "@/components/ui/input"; @@ -9,7 +10,7 @@ import { useDeployEditContext } from "./DeployEdit"; const DeployToKubernetesSecret = () => { const { t } = useTranslation(); - const { deploy: data, setDeploy, setError } = useDeployEditContext(); + const { deploy: data, setDeploy, error, setError } = useDeployEditContext(); useEffect(() => { if (!data.id) { @@ -29,6 +30,32 @@ const DeployToKubernetesSecret = () => { setError({}); }, []); + const formSchema = z.object({ + namespace: z.string().min(1, { + message: t("domain.deployment.form.k8s_namespace.placeholder"), + }), + secretName: z.string().min(1, { + message: t("domain.deployment.form.k8s_secret_name.placeholder"), + }), + secretDataKeyForCrt: z.string().min(1, { + message: t("domain.deployment.form.k8s_secret_data_key_for_crt.placeholder"), + }), + secretDataKeyForKey: z.string().min(1, { + message: t("domain.deployment.form.k8s_secret_data_key_for_key.placeholder"), + }), + }); + + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + namespace: res.error?.errors?.find((e) => e.path[0] === "namespace")?.message, + secretName: res.error?.errors?.find((e) => e.path[0] === "secretName")?.message, + secretDataKeyForCrt: res.error?.errors?.find((e) => e.path[0] === "secretDataKeyForCrt")?.message, + secretDataKeyForKey: res.error?.errors?.find((e) => e.path[0] === "secretDataKeyForKey")?.message, + }); + }, [data]); + return ( <>
@@ -41,7 +68,7 @@ const DeployToKubernetesSecret = () => { onChange={(e) => { const newData = produce(data, (draft) => { draft.config ??= {}; - draft.config.namespace = e.target.value; + draft.config.namespace = e.target.value?.trim(); }); setDeploy(newData); }} @@ -57,7 +84,7 @@ const DeployToKubernetesSecret = () => { onChange={(e) => { const newData = produce(data, (draft) => { draft.config ??= {}; - draft.config.secretName = e.target.value; + draft.config.secretName = e.target.value?.trim(); }); setDeploy(newData); }} @@ -73,7 +100,7 @@ const DeployToKubernetesSecret = () => { onChange={(e) => { const newData = produce(data, (draft) => { draft.config ??= {}; - draft.config.secretDataKeyForCrt = e.target.value; + draft.config.secretDataKeyForCrt = e.target.value?.trim(); }); setDeploy(newData); }} @@ -89,7 +116,7 @@ const DeployToKubernetesSecret = () => { onChange={(e) => { const newData = produce(data, (draft) => { draft.config ??= {}; - draft.config.secretDataKeyForKey = e.target.value; + draft.config.secretDataKeyForKey = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToLocal.tsx b/ui/src/components/certimate/DeployToLocal.tsx index ae60e75d..45a88888 100644 --- a/ui/src/components/certimate/DeployToLocal.tsx +++ b/ui/src/components/certimate/DeployToLocal.tsx @@ -87,35 +87,19 @@ const DeployToLocal = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - format: res.error.errors.find((e) => e.path[0] === "format")?.message, - certPath: res.error.errors.find((e) => e.path[0] === "certPath")?.message, - keyPath: res.error.errors.find((e) => e.path[0] === "keyPath")?.message, - pfxPassword: res.error.errors.find((e) => e.path[0] === "pfxPassword")?.message, - jksAlias: res.error.errors.find((e) => e.path[0] === "jksAlias")?.message, - jksKeypass: res.error.errors.find((e) => e.path[0] === "jksKeypass")?.message, - jksStorepass: res.error.errors.find((e) => e.path[0] === "jksStorepass")?.message, - shell: res.error.errors.find((e) => e.path[0] === "shell")?.message, - preCommand: res.error.errors.find((e) => e.path[0] === "preCommand")?.message, - command: res.error.errors.find((e) => e.path[0] === "command")?.message, - }); - } else { - setError({ - ...error, - format: undefined, - certPath: undefined, - keyPath: undefined, - pfxPassword: undefined, - jksAlias: undefined, - jksKeypass: undefined, - jksStorepass: undefined, - shell: undefined, - preCommand: undefined, - command: undefined, - }); - } + setError({ + ...error, + format: res.error?.errors?.find((e) => e.path[0] === "format")?.message, + certPath: res.error?.errors?.find((e) => e.path[0] === "certPath")?.message, + keyPath: res.error?.errors?.find((e) => e.path[0] === "keyPath")?.message, + pfxPassword: res.error?.errors?.find((e) => e.path[0] === "pfxPassword")?.message, + jksAlias: res.error?.errors?.find((e) => e.path[0] === "jksAlias")?.message, + jksKeypass: res.error?.errors?.find((e) => e.path[0] === "jksKeypass")?.message, + jksStorepass: res.error?.errors?.find((e) => e.path[0] === "jksStorepass")?.message, + shell: res.error?.errors?.find((e) => e.path[0] === "shell")?.message, + preCommand: res.error?.errors?.find((e) => e.path[0] === "preCommand")?.message, + command: res.error?.errors?.find((e) => e.path[0] === "command")?.message, + }); }, [data]); useEffect(() => { diff --git a/ui/src/components/certimate/DeployToQiniuCDN.tsx b/ui/src/components/certimate/DeployToQiniuCDN.tsx index 508939cd..d7358b09 100644 --- a/ui/src/components/certimate/DeployToQiniuCDN.tsx +++ b/ui/src/components/certimate/DeployToQiniuCDN.tsx @@ -27,25 +27,20 @@ const DeployToQiniuCDN = () => { setError({}); }, []); - useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); - - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + const formSchema = z.object({ + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); + return (
@@ -55,26 +50,9 @@ const DeployToQiniuCDN = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToSSH.tsx b/ui/src/components/certimate/DeployToSSH.tsx index b59eeb72..74d37e33 100644 --- a/ui/src/components/certimate/DeployToSSH.tsx +++ b/ui/src/components/certimate/DeployToSSH.tsx @@ -80,33 +80,18 @@ const DeployToSSH = () => { useEffect(() => { const res = formSchema.safeParse(data.config); - if (!res.success) { - setError({ - ...error, - format: res.error.errors.find((e) => e.path[0] === "format")?.message, - certPath: res.error.errors.find((e) => e.path[0] === "certPath")?.message, - keyPath: res.error.errors.find((e) => e.path[0] === "keyPath")?.message, - pfxPassword: res.error.errors.find((e) => e.path[0] === "pfxPassword")?.message, - jksAlias: res.error.errors.find((e) => e.path[0] === "jksAlias")?.message, - jksKeypass: res.error.errors.find((e) => e.path[0] === "jksKeypass")?.message, - jksStorepass: res.error.errors.find((e) => e.path[0] === "jksStorepass")?.message, - preCommand: res.error.errors.find((e) => e.path[0] === "preCommand")?.message, - command: res.error.errors.find((e) => e.path[0] === "command")?.message, - }); - } else { - setError({ - ...error, - format: undefined, - certPath: undefined, - keyPath: undefined, - pfxPassword: undefined, - jksAlias: undefined, - jksKeypass: undefined, - jksStorepass: undefined, - preCommand: undefined, - command: undefined, - }); - } + setError({ + ...error, + format: res.error?.errors?.find((e) => e.path[0] === "format")?.message, + certPath: res.error?.errors?.find((e) => e.path[0] === "certPath")?.message, + keyPath: res.error?.errors?.find((e) => e.path[0] === "keyPath")?.message, + pfxPassword: res.error?.errors?.find((e) => e.path[0] === "pfxPassword")?.message, + jksAlias: res.error?.errors?.find((e) => e.path[0] === "jksAlias")?.message, + jksKeypass: res.error?.errors?.find((e) => e.path[0] === "jksKeypass")?.message, + jksStorepass: res.error?.errors?.find((e) => e.path[0] === "jksStorepass")?.message, + preCommand: res.error?.errors?.find((e) => e.path[0] === "preCommand")?.message, + command: res.error?.errors?.find((e) => e.path[0] === "command")?.message, + }); }, [data]); useEffect(() => { diff --git a/ui/src/components/certimate/DeployToTencentCDN.tsx b/ui/src/components/certimate/DeployToTencentCDN.tsx index 05eaf22f..63f2c7ef 100644 --- a/ui/src/components/certimate/DeployToTencentCDN.tsx +++ b/ui/src/components/certimate/DeployToTencentCDN.tsx @@ -13,28 +13,34 @@ const DeployToTencentCDN = () => { const { deploy: data, setDeploy, error, setError } = useDeployEditContext(); useEffect(() => { - setError({}); + if (!data.id) { + setDeploy({ + ...data, + config: { + domain: "", + }, + }); + } }, []); useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); + setError({}); + }, []); - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + const formSchema = z.object({ + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); + return (
@@ -44,26 +50,9 @@ const DeployToTencentCDN = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToTencentCOS.tsx b/ui/src/components/certimate/DeployToTencentCOS.tsx index 5f0b8e8b..f95eb778 100644 --- a/ui/src/components/certimate/DeployToTencentCOS.tsx +++ b/ui/src/components/certimate/DeployToTencentCOS.tsx @@ -8,65 +8,16 @@ import { Label } from "@/components/ui/label"; import { useDeployEditContext } from "./DeployEdit"; const DeployToTencentCOS = () => { - const { deploy: data, setDeploy, error, setError } = useDeployEditContext(); - const { t } = useTranslation(); - useEffect(() => { - setError({}); - }, []); - - useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); - - useEffect(() => { - const bucketResp = bucketSchema.safeParse(data.config?.bucket); - if (!bucketResp.success) { - setError({ - ...error, - bucket: JSON.parse(bucketResp.error.message)[0].message, - }); - } else { - setError({ - ...error, - bucket: "", - }); - } - }, []); - - useEffect(() => { - const regionResp = regionSchema.safeParse(data.config?.region); - if (!regionResp.success) { - setError({ - ...error, - region: JSON.parse(regionResp.error.message)[0].message, - }); - } else { - setError({ - ...error, - region: "", - }); - } - }, []); + const { deploy: data, setDeploy, error, setError } = useDeployEditContext(); useEffect(() => { if (!data.id) { setDeploy({ ...data, config: { - region: "", + region: "ap-guangzhou", bucket: "", domain: "", }, @@ -74,17 +25,27 @@ const DeployToTencentCOS = () => { } }, []); - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), + useEffect(() => { + setError({}); + }, []); + + const formSchema = z.object({ + region: z.string().min(1, t("domain.deployment.form.tencent_cos_region.placeholder")), + bucket: z.string().min(1, t("domain.deployment.form.tencent_cos_bucket.placeholder")), + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), }); - const regionSchema = z.string().regex(/^ap-[a-z]+$/, { - message: t("domain.deployment.form.tencent_cos_region.placeholder"), - }); - - const bucketSchema = z.string().regex(/^.+-\d+$/, { - message: t("domain.deployment.form.tencent_cos_bucket.placeholder"), - }); + useEffect(() => { + const res = formSchema.safeParse(data.config); + setError({ + ...error, + region: res.error?.errors?.find((e) => e.path[0] === "region")?.message, + bucket: res.error?.errors?.find((e) => e.path[0] === "bucket")?.message, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); + }, [data]); return (
@@ -95,26 +56,9 @@ const DeployToTencentCOS = () => { className="w-full mt-1" value={data?.config?.region} onChange={(e) => { - const temp = e.target.value; - - const resp = regionSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - region: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - region: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.region = temp; + draft.config ??= {}; + draft.config.region = e.target.value?.trim(); }); setDeploy(newData); }} @@ -129,26 +73,9 @@ const DeployToTencentCOS = () => { className="w-full mt-1" value={data?.config?.bucket} onChange={(e) => { - const temp = e.target.value; - - const resp = bucketSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - bucket: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - bucket: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.bucket = temp; + draft.config ??= {}; + draft.config.bucket = e.target.value?.trim(); }); setDeploy(newData); }} @@ -163,26 +90,9 @@ const DeployToTencentCOS = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToTencentTEO.tsx b/ui/src/components/certimate/DeployToTencentTEO.tsx index 80715fd1..6b90c55c 100644 --- a/ui/src/components/certimate/DeployToTencentTEO.tsx +++ b/ui/src/components/certimate/DeployToTencentTEO.tsx @@ -14,47 +14,36 @@ const DeployToTencentTEO = () => { const { deploy: data, setDeploy, error, setError } = useDeployEditContext(); useEffect(() => { - setError({}); + if (!data.id) { + setDeploy({ + ...data, + config: { + zoneId: "", + }, + }); + } }, []); useEffect(() => { - const resp = domainSchema.safeParse(data.config?.domain); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - }, [data]); + setError({}); + }, []); + + const formSchema = z.object({ + zoneId: z.string().min(1, t("domain.deployment.form.tencent_teo_zone_id.placeholder")), + domain: z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { + message: t("common.errmsg.domain_invalid"), + }), + }); useEffect(() => { - const resp = zoneIdSchema.safeParse(data.config?.zoneId); - if (!resp.success) { - setError({ - ...error, - zoneId: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - zoneId: "", - }); - } + const res = formSchema.safeParse(data.config); + setError({ + ...error, + zoneId: res.error?.errors?.find((e) => e.path[0] === "zoneId")?.message, + domain: res.error?.errors?.find((e) => e.path[0] === "domain")?.message, + }); }, [data]); - const domainSchema = z.string().regex(/^(?:\*\.)?([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}$/, { - message: t("common.errmsg.domain_invalid"), - }); - - const zoneIdSchema = z.string().regex(/^zone-[0-9a-zA-Z]{9}$/, { - message: t("common.errmsg.zoneid_invalid"), - }); - return (
@@ -64,26 +53,9 @@ const DeployToTencentTEO = () => { className="w-full mt-1" value={data?.config?.zoneId} onChange={(e) => { - const temp = e.target.value; - - const resp = zoneIdSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - zoneId: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - zoneId: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.zoneId = temp; + draft.config ??= {}; + draft.config.zoneId = e.target.value?.trim(); }); setDeploy(newData); }} @@ -98,26 +70,9 @@ const DeployToTencentTEO = () => { className="w-full mt-1" value={data?.config?.domain} onChange={(e) => { - const temp = e.target.value; - - const resp = domainSchema.safeParse(temp); - if (!resp.success) { - setError({ - ...error, - domain: JSON.parse(resp.error.message)[0].message, - }); - } else { - setError({ - ...error, - domain: "", - }); - } - const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } - draft.config.domain = temp; + draft.config ??= {}; + draft.config.domain = e.target.value?.trim(); }); setDeploy(newData); }} diff --git a/ui/src/components/certimate/DeployToWebhook.tsx b/ui/src/components/certimate/DeployToWebhook.tsx index 3134983a..3268c320 100644 --- a/ui/src/components/certimate/DeployToWebhook.tsx +++ b/ui/src/components/certimate/DeployToWebhook.tsx @@ -6,9 +6,16 @@ import KVList from "./KVList"; import { type KVType } from "@/domain/domain"; const DeployToWebhook = () => { - const { deploy: data, setDeploy } = useDeployEditContext(); + const { deploy: data, setDeploy, setError } = useDeployEditContext(); - const { setError } = useDeployEditContext(); + useEffect(() => { + if (!data.id) { + setDeploy({ + ...data, + config: {}, + }); + } + }, []); useEffect(() => { setError({}); @@ -20,9 +27,7 @@ const DeployToWebhook = () => { variables={data?.config?.variables} onValueChange={(variables: KVType[]) => { const newData = produce(data, (draft) => { - if (!draft.config) { - draft.config = {}; - } + draft.config ??= {}; draft.config.variables = variables; }); setDeploy(newData); diff --git a/ui/src/i18n/locales/en/nls.common.json b/ui/src/i18n/locales/en/nls.common.json index 4111fa21..98eaae87 100644 --- a/ui/src/i18n/locales/en/nls.common.json +++ b/ui/src/i18n/locales/en/nls.common.json @@ -51,7 +51,6 @@ "common.errmsg.host_invalid": "Please enter the correct domain name or IP", "common.errmsg.ip_invalid": "Please enter IP", "common.errmsg.url_invalid": "Please enter a valid URL", - "common.errmsg.zoneid_invalid": "Please enter Zone ID", "common.provider.aliyun": "Alibaba Cloud", "common.provider.aliyun.oss": "Alibaba Cloud - OSS", diff --git a/ui/src/i18n/locales/en/nls.domain.json b/ui/src/i18n/locales/en/nls.domain.json index 5e1d77e2..068aec7a 100644 --- a/ui/src/i18n/locales/en/nls.domain.json +++ b/ui/src/i18n/locales/en/nls.domain.json @@ -95,6 +95,8 @@ "domain.deployment.form.tencent_cos_region.placeholder": "Please enter region (e.g. ap-guangzhou)", "domain.deployment.form.tencent_cos_bucket.label": "Bucket", "domain.deployment.form.tencent_cos_bucket.placeholder": "Please enter bucket", + "domain.deployment.form.tencent_cdn_region.label": "Region", + "domain.deployment.form.tencent_cdn_region.placeholder": "Please enter region (e.g. ap-guangzhou)", "domain.deployment.form.tencent_clb_region.label": "Region", "domain.deployment.form.tencent_clb_region.placeholder": "Please enter region (e.g. ap-guangzhou)", "domain.deployment.form.tencent_clb_resource_type.label": "Resource Type", diff --git a/ui/src/i18n/locales/zh/nls.common.json b/ui/src/i18n/locales/zh/nls.common.json index 28777f3a..146f0683 100644 --- a/ui/src/i18n/locales/zh/nls.common.json +++ b/ui/src/i18n/locales/zh/nls.common.json @@ -51,7 +51,6 @@ "common.errmsg.host_invalid": "请输入正确的域名或 IP 地址", "common.errmsg.ip_invalid": "请输入正确的 IP 地址", "common.errmsg.url_invalid": "请输入正确的 URL", - "common.errmsg.zoneid_invalid": "请输入正确的 Zone ID", "common.provider.aliyun": "阿里云", "common.provider.aliyun.oss": "阿里云 - 对象存储 OSS", diff --git a/ui/src/i18n/locales/zh/nls.domain.json b/ui/src/i18n/locales/zh/nls.domain.json index c5ef365a..376e4d0a 100644 --- a/ui/src/i18n/locales/zh/nls.domain.json +++ b/ui/src/i18n/locales/zh/nls.domain.json @@ -115,6 +115,8 @@ "domain.deployment.form.tencent_teo_zone_id.placeholder": "请输入 Zone ID", "domain.deployment.form.tencent_teo_domain.label": "部署到域名(支持泛域名, 应与服务器上配置的域名完全一致, 每行一个域名)", "domain.deployment.form.tencent_teo_domain.placeholder": "请输入部署到的域名", + "domain.deployment.form.huaweicloud_cdn_region.label": "地域", + "domain.deployment.form.huaweicloud_cdn_region.placeholder": "请输入地域(如 cn-north-1)", "domain.deployment.form.huaweicloud_elb_region.label": "地域", "domain.deployment.form.huaweicloud_elb_region.placeholder": "请输入地域(如 cn-north-1)", "domain.deployment.form.huaweicloud_elb_resource_type.label": "替换方式",