From 96a1e90950e7bea0db77ee189092dd47c3d86873 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Mon, 22 Dec 2025 16:59:23 +0800 Subject: [PATCH] refactor(ui): clean code --- ui/src/App.tsx | 15 +++++- ui/src/components/access/AccessSelect.tsx | 8 +-- .../AccessConfigFieldsProviderACMEDNS.tsx | 12 +---- .../forms/AccessConfigFieldsProviderAzure.tsx | 3 +- .../forms/AccessConfigFieldsProviderEmail.tsx | 6 +-- .../AccessConfigFieldsProviderOVHcloud.tsx | 3 +- .../AccessConfigFieldsProviderRFC2136.tsx | 6 +-- .../AccessConfigFieldsProviderRatPanel.tsx | 2 +- .../forms/AccessConfigFieldsProviderSSH.tsx | 11 ++-- .../AccessConfigFieldsProviderWebhook.tsx | 9 +--- .../provider/ACMEDns01ProviderSelect.tsx | 10 +--- .../provider/ACMEHttp01ProviderSelect.tsx | 10 +--- .../provider/AccessProviderSelect.tsx | 10 +--- .../components/provider/CAProviderSelect.tsx | 8 +-- .../provider/DeploymentProviderSelect.tsx | 10 +--- .../provider/NotificationProviderSelect.tsx | 10 +--- ui/src/components/provider/_shared.ts | 4 +- .../designer/forms/BizApplyNodeConfigForm.tsx | 38 +++++--------- ...eployNodeConfigFieldsProviderAliyunALB.tsx | 4 +- ...loyNodeConfigFieldsProviderAliyunAPIGW.tsx | 4 +- ...eployNodeConfigFieldsProviderAliyunCDN.tsx | 4 +- ...eployNodeConfigFieldsProviderAliyunCLB.tsx | 6 +-- ...ployNodeConfigFieldsProviderAliyunDCDN.tsx | 4 +- ...yNodeConfigFieldsProviderAliyunDDoSPro.tsx | 4 +- ...DeployNodeConfigFieldsProviderAliyunFC.tsx | 4 +- ...DeployNodeConfigFieldsProviderAliyunGA.tsx | 4 +- ...ployNodeConfigFieldsProviderAliyunLive.tsx | 4 +- ...eployNodeConfigFieldsProviderAliyunOSS.tsx | 4 +- ...eployNodeConfigFieldsProviderAliyunVOD.tsx | 4 +- ...eployNodeConfigFieldsProviderAliyunWAF.tsx | 11 ++-- ...deConfigFieldsProviderBaiduCloudAppBLB.tsx | 6 +-- ...yNodeConfigFieldsProviderBaiduCloudBLB.tsx | 6 +-- ...yNodeConfigFieldsProviderBaiduCloudCDN.tsx | 4 +- ...ployNodeConfigFieldsProviderBaishanCDN.tsx | 4 +- ...oyNodeConfigFieldsProviderBaotaWAFSite.tsx | 7 +-- ...DeployNodeConfigFieldsProviderBunnyCDN.tsx | 4 +- ...loyNodeConfigFieldsProviderBytePlusCDN.tsx | 4 +- ...loyNodeConfigFieldsProviderCTCCCloudAO.tsx | 4 +- ...oyNodeConfigFieldsProviderCTCCCloudCDN.tsx | 4 +- ...yNodeConfigFieldsProviderCTCCCloudICDN.tsx | 4 +- ...yNodeConfigFieldsProviderCTCCCloudLVDN.tsx | 4 +- ...oyNodeConfigFieldsProviderDogeCloudCDN.tsx | 4 +- ...NodeConfigFieldsProviderHuaweiCloudCDN.tsx | 4 +- ...NodeConfigFieldsProviderHuaweiCloudOBS.tsx | 14 ++--- ...NodeConfigFieldsProviderHuaweiCloudWAF.tsx | 4 +- ...ployNodeConfigFieldsProviderJDCloudALB.tsx | 4 +- ...ployNodeConfigFieldsProviderJDCloudCDN.tsx | 4 +- ...loyNodeConfigFieldsProviderJDCloudLive.tsx | 4 +- ...ployNodeConfigFieldsProviderJDCloudVOD.tsx | 4 +- ...DeployNodeConfigFieldsProviderKsyunCDN.tsx | 4 +- ...DeployNodeConfigFieldsProviderQiniuCDN.tsx | 4 +- ...eployNodeConfigFieldsProviderQiniuKodo.tsx | 4 +- ...eployNodeConfigFieldsProviderQiniuPili.tsx | 4 +- ...loyNodeConfigFieldsProviderRainYunRCDN.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudCDN.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudCLB.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudCOS.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudCSS.tsx | 4 +- ...deConfigFieldsProviderTencentCloudECDN.tsx | 4 +- ...NodeConfigFieldsProviderTencentCloudEO.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudSCF.tsx | 4 +- ...figFieldsProviderTencentCloudSSLDeploy.tsx | 5 +- ...odeConfigFieldsProviderTencentCloudVOD.tsx | 4 +- ...odeConfigFieldsProviderTencentCloudWAF.tsx | 4 +- ...ployNodeConfigFieldsProviderUCloudUALB.tsx | 4 +- ...loyNodeConfigFieldsProviderUCloudUEWAF.tsx | 4 +- ...oyNodeConfigFieldsProviderUCloudUPathX.tsx | 4 +- ...eployNodeConfigFieldsProviderUCloudUS3.tsx | 4 +- ...odeConfigFieldsProviderUniCloudWebHost.tsx | 4 +- ...DeployNodeConfigFieldsProviderUpyunCDN.tsx | 4 +- ...eployNodeConfigFieldsProviderUpyunFile.tsx | 4 +- ...yNodeConfigFieldsProviderVolcEngineALB.tsx | 4 +- ...yNodeConfigFieldsProviderVolcEngineCDN.tsx | 4 +- ...NodeConfigFieldsProviderVolcEngineDCDN.tsx | 4 +- ...deConfigFieldsProviderVolcEngineImageX.tsx | 4 +- ...NodeConfigFieldsProviderVolcEngineLive.tsx | 4 +- ...yNodeConfigFieldsProviderVolcEngineTOS.tsx | 4 +- ...yNodeConfigFieldsProviderVolcEngineVOD.tsx | 4 +- ...yNodeConfigFieldsProviderVolcEngineWAF.tsx | 4 +- ...eployNodeConfigFieldsProviderWangsuCDN.tsx | 4 +- ...oyNodeConfigFieldsProviderWangsuCDNPro.tsx | 4 +- ...zDeployNodeConfigFieldsProviderWebhook.tsx | 11 ++-- .../forms/BizDeployNodeConfigForm.tsx | 6 +-- .../forms/BizMonitorNodeConfigForm.tsx | 13 ++--- ...BizNotifyNodeConfigFieldsProviderEmail.tsx | 4 +- ...zNotifyNodeConfigFieldsProviderWebhook.tsx | 11 ++-- .../forms/BizNotifyNodeConfigForm.tsx | 4 +- .../forms/BizUploadNodeConfigForm.tsx | 7 +-- .../designer/forms/DelayNodeConfigForm.tsx | 7 +-- .../designer/forms/StartNodeConfigForm.tsx | 6 +-- ui/src/utils/cron.ts | 4 +- ui/src/utils/search.ts | 42 +++++++++++++++ ui/src/utils/validator.ts | 51 +++++++++++++++++++ ui/src/utils/validators.ts | 39 -------------- 94 files changed, 320 insertions(+), 339 deletions(-) create mode 100644 ui/src/utils/search.ts create mode 100644 ui/src/utils/validator.ts delete mode 100644 ui/src/utils/validators.ts diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 794033cc0..a6f894fdb 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -3,9 +3,11 @@ import { useTranslation } from "react-i18next"; import { RouterProvider } from "react-router-dom"; import { Alert, App, ConfigProvider, type ThemeConfig, theme } from "antd"; import { type Locale } from "antd/es/locale"; -import AntdLocaleEnUs from "antd/locale/en_US"; +import AntdLocaleEnUS from "antd/locale/en_US"; import AntdLocaleZhCN from "antd/locale/zh_CN"; import dayjs from "dayjs"; +import { z } from "zod"; +import { en as ZodLocaleEnUs, zhCN as ZodLocaleZhCN } from "zod/locales"; import "dayjs/locale/zh-cn"; import { useBrowserTheme } from "@/hooks"; @@ -13,14 +15,20 @@ import { localeNames } from "@/i18n"; import { router } from "@/routers"; const antdLocalesMap: Record = { + [localeNames.EN]: AntdLocaleEnUS, [localeNames.ZH]: AntdLocaleZhCN, - [localeNames.EN]: AntdLocaleEnUs, }; + const antdThemesMap: Record = { ["light"]: { algorithm: theme.defaultAlgorithm }, ["dark"]: { algorithm: theme.darkAlgorithm }, }; +const zodLocalesMap: Record = { + [localeNames.EN]: ZodLocaleEnUs, + [localeNames.ZH]: ZodLocaleZhCN, +}; + const RootApp = () => { const { i18n } = useTranslation(); @@ -32,13 +40,16 @@ const RootApp = () => { const handleLanguageChanged = () => { setAntdLocale(antdLocalesMap[i18n.language]); dayjs.locale(i18n.language); + z.config(zodLocalesMap[i18n.language]?.()); }; + i18n.on("initialized", handleLanguageChanged); i18n.on("languageChanged", handleLanguageChanged); useLayoutEffect(() => { handleLanguageChanged(); return () => { + i18n.off("initialized", handleLanguageChanged); i18n.off("languageChanged", handleLanguageChanged); }; }, [i18n]); diff --git a/ui/src/components/access/AccessSelect.tsx b/ui/src/components/access/AccessSelect.tsx index 0047be411..98360b2e5 100644 --- a/ui/src/components/access/AccessSelect.tsx +++ b/ui/src/components/access/AccessSelect.tsx @@ -6,6 +6,7 @@ import { type AccessModel } from "@/domain/access"; import { accessProvidersMap } from "@/domain/provider"; import { useZustandShallowSelector } from "@/hooks"; import { useAccessesStore } from "@/stores/access"; +import { matchSearchOption } from "@/utils/search"; export interface AccessTypeSelectProps extends Omit { onFilter?: (value: string, option: AccessModel) => boolean; @@ -56,12 +57,7 @@ const AccessSelect = ({ onFilter, ...props }: AccessTypeSelectProps) => {