mirror of
https://github.com/certimate-go/certimate.git
synced 2026-09-24 23:10:13 +08:00
refactor(ui): clean code
This commit is contained in:
+13
-2
@@ -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<string, Locale> = {
|
||||
[localeNames.EN]: AntdLocaleEnUS,
|
||||
[localeNames.ZH]: AntdLocaleZhCN,
|
||||
[localeNames.EN]: AntdLocaleEnUs,
|
||||
};
|
||||
|
||||
const antdThemesMap: Record<string, ThemeConfig> = {
|
||||
["light"]: { algorithm: theme.defaultAlgorithm },
|
||||
["dark"]: { algorithm: theme.darkAlgorithm },
|
||||
};
|
||||
|
||||
const zodLocalesMap: Record<string, typeof ZodLocaleEnUs> = {
|
||||
[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]);
|
||||
|
||||
@@ -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<SelectProps, "labelRender" | "loading" | "options" | "optionLabelProp" | "optionRender"> {
|
||||
onFilter?: (value: string, option: AccessModel) => boolean;
|
||||
@@ -56,12 +57,7 @@ const AccessSelect = ({ onFilter, ...props }: AccessTypeSelectProps) => {
|
||||
<Select
|
||||
{...props}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return option.label.toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
optionFilterProp: "label",
|
||||
}}
|
||||
labelRender={({ value }) => {
|
||||
|
||||
@@ -4,6 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod/v4";
|
||||
|
||||
import FileTextInput from "@/components/FileTextInput";
|
||||
import { isJsonObject } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -53,16 +54,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
|
||||
return z.object({
|
||||
serverUrl: z.url(t("common.errmsg.url_invalid")),
|
||||
credentials: z.string().refine((v) => {
|
||||
if (!v) return false;
|
||||
|
||||
try {
|
||||
const obj = JSON.parse(v);
|
||||
return typeof obj === "object" && !Array.isArray(obj);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
}, t("access.form.acmedns_credentials.errmsg.json_invalid")),
|
||||
credentials: z.string().refine((v) => isJsonObject(v), t("access.form.acmedns_credentials.errmsg.json_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ import { AutoComplete, Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
const AccessConfigFormFieldsProviderAzure = () => {
|
||||
@@ -78,7 +79,7 @@ const AccessConfigFormFieldsProviderAzure = () => {
|
||||
options={["public", "azureusgovernment", "azurechina"].map((value) => ({ value }))}
|
||||
placeholder={t("access.form.azure_cloud_name.placeholder")}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase()),
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validEmailAddress, validPortNumber } from "@/utils/validators";
|
||||
import { isEmail, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -128,7 +128,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
|
||||
return z.object({
|
||||
smtpHost: z.string().nonempty(t("access.form.email_smtp_host.placeholder")),
|
||||
smtpPort: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
smtpPort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
smtpTls: z.boolean().nullish(),
|
||||
username: z.string().nonempty(t("access.form.email_username.placeholder")),
|
||||
password: z.string().nonempty(t("access.form.email_password.placeholder")),
|
||||
@@ -139,7 +139,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
return validEmailAddress(v);
|
||||
return isEmail(v);
|
||||
}, t("common.errmsg.email_invalid")),
|
||||
allowInsecureConnections: z.boolean().nullish(),
|
||||
});
|
||||
|
||||
@@ -4,6 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -30,7 +31,7 @@ const AccessConfigFormFieldsProviderOVHcloud = () => {
|
||||
options={["ovh-eu", "ovh-us", "ovh-ca"].map((value) => ({ value }))}
|
||||
placeholder={t("access.form.ovhcloud_endpoint.placeholder")}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase()),
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Form, Input, InputNumber, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -81,8 +81,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
|
||||
port: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
|
||||
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
tsigAlgorithm: z.string().nonempty(t("access.form.rfc2136_tsig_algorithm.placeholder")),
|
||||
tsigKey: z.string().nullish(),
|
||||
tsigSecret: z.string().nullish(),
|
||||
|
||||
@@ -72,7 +72,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
|
||||
return z.object({
|
||||
serverUrl: z.url(t("common.errmsg.url_invalid")),
|
||||
accessTokenId: z.coerce.number().int(t("access.form.ratpanel_access_token_id.placeholder")).positive(t("access.form.ratpanel_access_token_id.placeholder")),
|
||||
accessTokenId: z.coerce.number().int().positive(),
|
||||
accessToken: z.string().nonempty(t("access.form.ratpanel_access_token.placeholder")),
|
||||
allowInsecureConnections: z.boolean().nullish(),
|
||||
});
|
||||
|
||||
@@ -4,10 +4,10 @@ import { Button, Collapse, Form, Input, InputNumber, Radio } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import FileTextInput from "@/components/FileTextInput";
|
||||
import Show from "@/components/Show";
|
||||
import { mergeCls } from "@/utils/css";
|
||||
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -234,11 +234,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
|
||||
const baseSchema = z
|
||||
.object({
|
||||
host: z.string().refine((v) => validDomainName(v) || validIPv4Address(v) || validIPv6Address(v), t("common.errmsg.host_invalid")),
|
||||
port: z.coerce
|
||||
.number()
|
||||
.int(t("access.form.ssh_port.placeholder"))
|
||||
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
|
||||
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
authMethod: z.literal([AUTH_METHOD_NONE, AUTH_METHOD_PASSWORD, AUTH_METHOD_KEY], t("access.form.ssh_auth_method.placeholder")),
|
||||
username: z.string().nonempty(t("access.form.ssh_username.placeholder")),
|
||||
password: z.string().nullish(),
|
||||
|
||||
@@ -7,6 +7,7 @@ import { z } from "zod";
|
||||
import CodeTextInput from "@/components/CodeTextInput";
|
||||
import Show from "@/components/Show";
|
||||
import Tips from "@/components/Tips";
|
||||
import { isJsonObject } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -362,13 +363,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n: ReturnType<typeof getI18n> }) =
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
|
||||
try {
|
||||
const obj = JSON.parse(v);
|
||||
return typeof obj === "object" && !Array.isArray(obj);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
return isJsonObject(v);
|
||||
}, t("access.form.webhook_data.errmsg.json_invalid")),
|
||||
allowInsecureConnections: z.boolean().nullish(),
|
||||
});
|
||||
|
||||
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { Avatar, Select, Typography, theme } from "antd";
|
||||
|
||||
import { type ACMEDns01Provider, acmeDns01ProvidersMap } from "@/domain/provider";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
|
||||
|
||||
@@ -67,14 +68,7 @@ const ACMEDns01ProviderSelect = ({ showAvailability, onFilter, ...props }: ACMED
|
||||
optionLabelProp={void 0}
|
||||
optionRender={(option) => renderOption(option.data.value as string)}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { Avatar, Select, Typography, theme } from "antd";
|
||||
|
||||
import { type ACMEHttp01Provider, acmeHttp01ProvidersMap } from "@/domain/provider";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
|
||||
|
||||
@@ -67,14 +68,7 @@ const ACMEHttp01ProviderSelect = ({ showAvailability, onFilter, ...props }: ACME
|
||||
optionLabelProp={void 0}
|
||||
optionRender={(option) => renderOption(option.data.value as string)}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -4,6 +4,7 @@ import { Avatar, Select, Tag, Typography, theme } from "antd";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { ACCESS_USAGES, type AccessProvider, type AccessUsageType, accessProvidersMap } from "@/domain/provider";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps } from "./_shared";
|
||||
|
||||
@@ -95,14 +96,7 @@ const AccessProviderSelect = ({ showOptionTags, onFilter, ...props }: AccessProv
|
||||
optionLabelProp={void 0}
|
||||
optionRender={(option) => renderOption(option.data.value)}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
optionFilterProp: "label",
|
||||
}}
|
||||
/>
|
||||
|
||||
@@ -6,6 +6,7 @@ import { Avatar, Select, Typography, theme } from "antd";
|
||||
import { type CAProvider, caProvidersMap } from "@/domain/provider";
|
||||
import { useZustandShallowSelector } from "@/hooks";
|
||||
import { useSSLProviderSettingsStore } from "@/stores/settings";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
|
||||
|
||||
@@ -119,12 +120,7 @@ const CAProviderSelect = ({ showAvailability, showDefault, onFilter, ...props }:
|
||||
filterOption: (inputValue, option) => {
|
||||
if (option?.value === "") return true; // 始终显示系统默认项
|
||||
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
return matchSearchOption(inputValue, option!);
|
||||
},
|
||||
}}
|
||||
value={value}
|
||||
|
||||
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { Avatar, Select, Typography, theme } from "antd";
|
||||
|
||||
import { type DeploymentProvider, deploymentProvidersMap } from "@/domain/provider";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
|
||||
|
||||
@@ -67,14 +68,7 @@ const DeploymentProviderSelect = ({ showAvailability = false, onFilter, ...props
|
||||
optionLabelProp={void 0}
|
||||
optionRender={(option) => renderOption(option.data.value as string)}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -3,6 +3,7 @@ import { useTranslation } from "react-i18next";
|
||||
import { Avatar, Select, Typography, theme } from "antd";
|
||||
|
||||
import { type NotificationProvider, notificationProvidersMap } from "@/domain/provider";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { type SharedSelectProps, useSelectDataSource } from "./_shared";
|
||||
|
||||
@@ -67,14 +68,7 @@ const NotificationProviderSelect = ({ showAvailability = false, onFilter, ...pro
|
||||
optionLabelProp={void 0}
|
||||
optionRender={(option) => renderOption(option.data.value as string)}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => {
|
||||
if (!option) return false;
|
||||
if (!option.label) return false;
|
||||
if (!option.value) return false;
|
||||
|
||||
const value = inputValue.toLowerCase();
|
||||
return String(option.value).toLowerCase().includes(value) || String(option.label).toLowerCase().includes(value);
|
||||
},
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
);
|
||||
|
||||
@@ -6,6 +6,7 @@ import { type SelectProps } from "antd";
|
||||
|
||||
import { useZustandShallowSelector } from "@/hooks";
|
||||
import { useAccessesStore } from "@/stores/access";
|
||||
import { matchSearchString } from "@/utils/search";
|
||||
|
||||
type Provider = { type: string; name: string };
|
||||
|
||||
@@ -123,8 +124,7 @@ export const usePickerDataSource = <T extends Provider>({
|
||||
})
|
||||
.filter((provider) => {
|
||||
if (keyword) {
|
||||
const value = keyword.toLowerCase();
|
||||
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
|
||||
return matchSearchString(keyword, provider.type) || matchSearchString(keyword, t(provider.name));
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
@@ -24,7 +24,8 @@ import { useAntdForm, useZustandShallowSelector } from "@/hooks";
|
||||
import { useAccessesStore } from "@/stores/access";
|
||||
import { useContactEmailsStore } from "@/stores/settings";
|
||||
import { getErrMsg } from "@/utils/error";
|
||||
import { validDomainName, validIPv4Address, validIPv6Address } from "@/utils/validators";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
import { isDomain, isIPv4, isIPv6 } from "@/utils/validator";
|
||||
|
||||
import { FormNestedFieldsContextProvider, NodeFormContextProvider } from "./_context";
|
||||
import BizApplyNodeConfigFieldsProvider from "./BizApplyNodeConfigFieldsProvider";
|
||||
@@ -530,7 +531,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
|
||||
}))}
|
||||
placeholder={t("workflow_node.apply.form.preferred_chain.placeholder")}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => "value" in option! && String(option.value).toLowerCase().includes(inputValue.toLowerCase()),
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
@@ -558,7 +559,7 @@ const BizApplyNodeConfigForm = ({ node, ...props }: BizApplyNodeConfigFormProps)
|
||||
}))}
|
||||
placeholder={t("workflow_node.apply.form.acme_profile.placeholder")}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => "value" in option! && String(option.value).toLowerCase().includes(inputValue.toLowerCase()),
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
@@ -860,22 +861,22 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z
|
||||
.object({
|
||||
domains: z.string(t("workflow_node.apply.form.domains.placeholder")).refine((v) => {
|
||||
domains: z.string().refine((v) => {
|
||||
if (!v) return false;
|
||||
return String(v)
|
||||
.split(MULTIPLE_INPUT_SEPARATOR)
|
||||
.every((e) => validDomainName(e, { allowWildcard: true }));
|
||||
.every((e) => isDomain(e, { allowWildcard: true }));
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
contactEmail: z.email(t("common.errmsg.email_invalid")),
|
||||
challengeType: z.enum([CHALLENGE_TYPE_DNS01, CHALLENGE_TYPE_HTTP01], t("workflow_node.apply.form.challenge_type.placeholder")),
|
||||
provider: z.string(t("workflow_node.apply.form.provider.placeholder")).nonempty(t("workflow_node.apply.form.provider.placeholder")),
|
||||
providerAccessId: z.string(t("workflow_node.apply.form.provider_access.placeholder")).nullish(),
|
||||
provider: z.string().nonempty(t("workflow_node.apply.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nullish(),
|
||||
providerConfig: z.any().nullish(),
|
||||
caProvider: z.string().nullish(),
|
||||
caProviderAccessId: z.string().nullish(),
|
||||
caProviderConfig: z.any().nullish(),
|
||||
keySource: z.enum([KEY_SOURCE_AUTO, KEY_SOURCE_REUSE, KEY_SOURCE_CUSTOM], t("workflow_node.apply.form.key_source.placeholder")),
|
||||
keyAlgorithm: z.string(t("workflow_node.apply.form.key_algorithm.placeholder")).nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
|
||||
keyAlgorithm: z.string().nonempty(t("workflow_node.apply.form.key_algorithm.placeholder")),
|
||||
keyContent: z.string().nullish(),
|
||||
nameservers: z
|
||||
.string()
|
||||
@@ -885,27 +886,19 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return String(v)
|
||||
.split(MULTIPLE_INPUT_SEPARATOR)
|
||||
.every((e) => validIPv4Address(e) || validIPv6Address(e) || validDomainName(e));
|
||||
.every((e) => isIPv4(e) || isIPv6(e) || isDomain(e));
|
||||
}, t("common.errmsg.host_invalid")),
|
||||
dnsPropagationWait: z.preprocess(
|
||||
(v) => (v == null || v === "" ? void 0 : Number(v)),
|
||||
z
|
||||
.number()
|
||||
.int(t("workflow_node.apply.form.dns_propagation_wait.placeholder"))
|
||||
.gte(0, t("workflow_node.apply.form.dns_propagation_wait.placeholder"))
|
||||
.nullish()
|
||||
z.number().int().gte(0, t("workflow_node.apply.form.dns_propagation_wait.placeholder")).nullish()
|
||||
),
|
||||
dnsPropagationTimeout: z.preprocess(
|
||||
(v) => (v == null || v === "" ? void 0 : Number(v)),
|
||||
z
|
||||
.number()
|
||||
.int(t("workflow_node.apply.form.dns_propagation_timeout.placeholder"))
|
||||
.gte(1, t("workflow_node.apply.form.dns_propagation_timeout.placeholder"))
|
||||
.nullish()
|
||||
z.number().int().gte(1, t("workflow_node.apply.form.dns_propagation_timeout.placeholder")).nullish()
|
||||
),
|
||||
dnsTTL: z.preprocess(
|
||||
(v) => (v == null || v === "" ? void 0 : Number(v)),
|
||||
z.number().int(t("workflow_node.apply.form.dns_ttl.placeholder")).gte(1, t("workflow_node.apply.form.dns_ttl.placeholder")).nullish()
|
||||
z.number().int().gte(1, t("workflow_node.apply.form.dns_ttl.placeholder")).nullish()
|
||||
),
|
||||
validityLifetime: z
|
||||
.string()
|
||||
@@ -918,10 +911,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
acmeProfile: z.string().nullish(),
|
||||
disableFollowCNAME: z.boolean().nullish(),
|
||||
disableARI: z.boolean().nullish(),
|
||||
skipBeforeExpiryDays: z.coerce
|
||||
.number()
|
||||
.int(t("workflow_node.apply.form.skip_before_expiry_days.placeholder"))
|
||||
.positive(t("workflow_node.apply.form.skip_before_expiry_days.placeholder")),
|
||||
skipBeforeExpiryDays: z.coerce.number().int().positive(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
if (values.domains) {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -170,7 +170,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -100,7 +100,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_LISTENER:
|
||||
{
|
||||
if (!validPortNumber(values.listenerPort!)) {
|
||||
if (!isPortNumber(values.listenerPort!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.aliyun_clb_listener_port.placeholder"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -100,7 +100,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -114,7 +114,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -97,7 +97,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!);
|
||||
return !v || isDomain(v!);
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.aliyun_oss_region.placeholder")),
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.aliyun_oss_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+7
-4
@@ -4,7 +4,8 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName, validPortNumber } from "@/utils/validators";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
import { isDomain, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +85,9 @@ const BizDeployNodeConfigFieldsProviderAliyunWAF = () => {
|
||||
<AutoComplete
|
||||
options={["ecs", "clb4", "clb7", "nlb"].map((value) => ({ value }))}
|
||||
placeholder={t("workflow_node.deploy.form.aliyun_waf_resource_product.placeholder")}
|
||||
filterOption={(inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase())}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
@@ -147,7 +150,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
@@ -170,7 +173,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
}
|
||||
|
||||
if (!validPortNumber(values.resourcePort!)) {
|
||||
if (!isPortNumber(values.resourcePort!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.aliyun_waf_resource_port.placeholder"),
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_LISTENER:
|
||||
{
|
||||
if (!validPortNumber(values.listenerPort!)) {
|
||||
if (!isPortNumber(values.listenerPort!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.baiducloud_appblb_listener_port.placeholder"),
|
||||
|
||||
+3
-3
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,14 +110,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
switch (values.resourceType) {
|
||||
case RESOURCE_TYPE_LISTENER:
|
||||
{
|
||||
if (!validPortNumber(values.listenerPort!)) {
|
||||
if (!isPortNumber(values.listenerPort!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.baiducloud_blb_listener_port.placeholder"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -125,7 +125,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-5
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import { validPortNumber } from "@/utils/validators";
|
||||
import { isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -74,10 +74,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
},
|
||||
{ error: t("workflow_node.deploy.form.baotawaf_site_names.placeholder") }
|
||||
),
|
||||
sitePort: z.coerce
|
||||
.number()
|
||||
.int(t("workflow_node.deploy.form.baotawaf_site_port.placeholder"))
|
||||
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
sitePort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -2,7 +2,7 @@ import { getI18n, useTranslation } from "react-i18next";
|
||||
import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -59,7 +59,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nonempty(t("workflow_node.deploy.form.bunny_cdn_hostname.placeholder"))
|
||||
.refine((v) => {
|
||||
return validDomainName(v!, { allowWildcard: true });
|
||||
return isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -96,7 +96,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+4
-10
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -62,15 +62,9 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
region: z
|
||||
.string(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder"))
|
||||
.nonempty(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder")),
|
||||
bucket: z
|
||||
.string(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder"))
|
||||
.nonempty(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder")),
|
||||
domain: z
|
||||
.string(t("workflow_node.deploy.form.huaweicloud_obs_domain.placeholder"))
|
||||
.refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.huaweicloud_obs_region.placeholder")),
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.huaweicloud_obs_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -102,7 +102,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case RESOURCE_TYPE_CLOUDSERVER:
|
||||
case RESOURCE_TYPE_PREMIUMHOST:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.deploy.form.huaweicloud_waf_domain.placeholder"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -128,7 +128,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -52,7 +52,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z.object({
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.qiniu_kodo_domain.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -87,7 +87,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -145,7 +145,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -95,7 +95,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -145,7 +145,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
}
|
||||
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_cos_region.placeholder")),
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_cos_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -86,7 +86,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -95,7 +95,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -136,7 +136,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
values.domains &&
|
||||
String(values.domains)
|
||||
.split(MULTIPLE_INPUT_SEPARATOR)
|
||||
.every((e) => validDomainName(e, { allowWildcard: true }));
|
||||
.every((e) => isDomain(e, { allowWildcard: true }));
|
||||
if (!v) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -98,7 +98,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+4
-1
@@ -5,6 +5,7 @@ import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import Tips from "@/components/Tips";
|
||||
import { matchSearchOption } from "@/utils/search";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -56,7 +57,9 @@ const BizDeployNodeConfigFieldsProviderTencentCloudSSLDeploy = () => {
|
||||
<AutoComplete
|
||||
options={["apigateway", "cdn", "clb", "cos", "ddos", "lighthouse", "live", "tcb", "teo", "tke", "tse", "vod", "waf"].map((value) => ({ value }))}
|
||||
placeholder={t("workflow_node.deploy.form.tencentcloud_ssldeploy_resource_product.placeholder")}
|
||||
filterOption={(inputValue, option) => option!.value.toLowerCase().includes(inputValue.toLowerCase())}
|
||||
showSearch={{
|
||||
filterOption: (inputValue, option) => matchSearchOption(inputValue, option!),
|
||||
}}
|
||||
/>
|
||||
</Form.Item>
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -103,7 +103,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!)) {
|
||||
if (!isDomain(values.domain!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -86,7 +86,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
endpoint: z.string().nullish(),
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_region.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
domainId: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_domain_id.placeholder")),
|
||||
instanceId: z.string().nonempty(t("workflow_node.deploy.form.tencentcloud_waf_instance_id.placeholder")),
|
||||
});
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -111,7 +111,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v);
|
||||
return !v || isDomain(v);
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -41,7 +41,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validPortNumber } from "@/utils/validators";
|
||||
import { isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -54,7 +54,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z.object({
|
||||
acceleratorId: z.string().nonempty(t("workflow_node.deploy.form.ucloud_upathx_accelerator_id.placeholder")),
|
||||
listenerPort: z.coerce.number().refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
listenerPort: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.ucloud_us3_region.placeholder")),
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.ucloud_us3_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Tips from "@/components/Tips";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -75,7 +75,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
spaceProvider: z.string().nonempty(t("workflow_node.deploy.form.unicloud_webhost_space_provider.placeholder")),
|
||||
spaceId: z.string().nonempty(t("workflow_node.deploy.form.unicloud_webhost_space_id.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -5,7 +5,7 @@ import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import Tips from "@/components/Tips";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -89,7 +89,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Tips from "@/components/Tips";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -57,7 +57,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z.object({
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.upyun_file_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -110,7 +110,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
return !v || validDomainName(v!, { allowWildcard: true });
|
||||
return !v || isDomain(v!, { allowWildcard: true });
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -84,7 +84,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input, Radio } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -81,7 +81,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -65,7 +65,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_imagex_region.placeholder")),
|
||||
serviceId: z.string().nonempty(t("workflow_node.deploy.form.volcengine_imagex_service_id.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -77,7 +77,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -64,7 +64,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_tos_region.placeholder")),
|
||||
bucket: z.string().nonempty(t("workflow_node.deploy.form.volcengine_tos_bucket.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import Show from "@/components/Show";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -112,7 +112,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
case DOMAIN_MATCH_PATTERN_WILDCARD:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -72,7 +72,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
region: z.string().nonempty(t("workflow_node.deploy.form.volcengine_waf_region.placeholder")),
|
||||
accessMode: z.literal([ACCESS_MODE_CNAME], t("workflow_node.deploy.form.volcengine_waf_access_mode.placeholder")),
|
||||
domain: z.string().refine((v) => validDomainName(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
domain: z.string().refine((v) => isDomain(v, { allowWildcard: true }), t("common.errmsg.domain_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
+2
-2
@@ -4,7 +4,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import MultipleSplitValueInput from "@/components/MultipleSplitValueInput";
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -92,7 +92,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
values.domains &&
|
||||
String(values.domains)
|
||||
.split(MULTIPLE_INPUT_SEPARATOR)
|
||||
.every((e) => validDomainName(e, { allowWildcard: true }));
|
||||
.every((e) => isDomain(e, { allowWildcard: true }));
|
||||
if (!v) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input, Radio, Select } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validDomainName } from "@/utils/validators";
|
||||
import { isDomain } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -119,7 +119,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
switch (values.domainMatchPattern) {
|
||||
case DOMAIN_MATCH_PATTERN_EXACT:
|
||||
{
|
||||
if (!validDomainName(values.domain!, { allowWildcard: true })) {
|
||||
if (!isDomain(values.domain!, { allowWildcard: true })) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("common.errmsg.domain_invalid"),
|
||||
|
||||
+3
-8
@@ -5,6 +5,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import CodeTextInput from "@/components/CodeTextInput";
|
||||
import { isJsonObject } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -79,17 +80,11 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
|
||||
try {
|
||||
const obj = JSON.parse(v);
|
||||
return typeof obj === "object" && !Array.isArray(obj);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
return isJsonObject(v);
|
||||
}, t("workflow_node.deploy.form.webhook_data.errmsg.json_invalid")),
|
||||
timeout: z.preprocess(
|
||||
(v) => (v == null || v === "" ? void 0 : Number(v)),
|
||||
z.number().int(t("workflow_node.deploy.form.webhook_timeout.placeholder")).gte(1, t("workflow_node.deploy.form.webhook_timeout.placeholder")).nullish()
|
||||
z.number().int().gte(1, t("workflow_node.deploy.form.webhook_timeout.placeholder")).nullish()
|
||||
),
|
||||
});
|
||||
};
|
||||
|
||||
@@ -263,10 +263,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z
|
||||
.object({
|
||||
certificateOutputNodeId: z
|
||||
.string(t("workflow_node.deploy.form.certificate_output_node_id.placeholder"))
|
||||
.nonempty(t("workflow_node.deploy.form.certificate_output_node_id.placeholder")),
|
||||
provider: z.string(t("workflow_node.deploy.form.provider.placeholder")).nonempty(t("workflow_node.deploy.form.provider.placeholder")),
|
||||
certificateOutputNodeId: z.string().nonempty(t("workflow_node.deploy.form.certificate_output_node_id.placeholder")),
|
||||
provider: z.string().nonempty(t("workflow_node.deploy.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nullish(),
|
||||
providerConfig: z.any().nullish(),
|
||||
skipOnLastSucceeded: z.boolean().nullish(),
|
||||
|
||||
@@ -8,7 +8,7 @@ import { z } from "zod";
|
||||
import Tips from "@/components/Tips";
|
||||
import { type WorkflowNodeConfigForBizMonitor, defaultNodeConfigForBizMonitor } from "@/domain/workflow";
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { validDomainName, validIPv4Address, validIPv6Address, validPortNumber } from "@/utils/validators";
|
||||
import { isDomain, isIPv4, isIPv6, isPortNumber } from "@/utils/validator";
|
||||
|
||||
import { NodeFormContextProvider } from "./_context";
|
||||
import { NodeType } from "../nodes/typings";
|
||||
@@ -90,19 +90,14 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
const { t } = i18n;
|
||||
|
||||
return z.object({
|
||||
host: z.string(t("workflow_node.monitor.form.host.placeholder")).refine((v) => {
|
||||
return validDomainName(v) || validIPv4Address(v) || validIPv6Address(v);
|
||||
}, t("common.errmsg.host_invalid")),
|
||||
port: z.coerce
|
||||
.number()
|
||||
.int(t("workflow_node.monitor.form.port.placeholder"))
|
||||
.refine((v) => validPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
host: z.string().refine((v) => isDomain(v) || isIPv4(v) || isIPv6(v), t("common.errmsg.host_invalid")),
|
||||
port: z.coerce.number().refine((v) => isPortNumber(v), t("common.errmsg.port_invalid")),
|
||||
domain: z
|
||||
.string()
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
return validDomainName(v);
|
||||
return isDomain(v);
|
||||
}, t("common.errmsg.domain_invalid")),
|
||||
requestPath: z.string().nullish(),
|
||||
});
|
||||
|
||||
+2
-2
@@ -3,7 +3,7 @@ import { Form, Input } from "antd";
|
||||
import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validEmailAddress } from "@/utils/validators";
|
||||
import { isEmail } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -45,7 +45,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
return validEmailAddress(v);
|
||||
return isEmail(v);
|
||||
}, t("common.errmsg.email_invalid")),
|
||||
});
|
||||
};
|
||||
|
||||
+3
-8
@@ -5,6 +5,7 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import CodeTextInput from "@/components/CodeTextInput";
|
||||
import { isJsonObject } from "@/utils/validator";
|
||||
|
||||
import { useFormNestedFieldsContext } from "./_context";
|
||||
|
||||
@@ -79,17 +80,11 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
.nullish()
|
||||
.refine((v) => {
|
||||
if (!v) return true;
|
||||
|
||||
try {
|
||||
const obj = JSON.parse(v);
|
||||
return typeof obj === "object" && !Array.isArray(obj);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
return isJsonObject(v);
|
||||
}, t("workflow_node.notify.form.webhook_data.errmsg.json_invalid")),
|
||||
timeout: z.preprocess(
|
||||
(v) => (v == null || v === "" ? void 0 : Number(v)),
|
||||
z.number().int(t("workflow_node.notify.form.webhook_timeout.placeholder")).gte(1, t("workflow_node.notify.form.webhook_timeout.placeholder")).nullish()
|
||||
z.number().int().gte(1, t("workflow_node.notify.form.webhook_timeout.placeholder")).nullish()
|
||||
),
|
||||
});
|
||||
};
|
||||
|
||||
@@ -242,8 +242,8 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
return z.object({
|
||||
subject: z.string().nonempty(t("workflow_node.notify.form.subject.placeholder")),
|
||||
message: z.string().nonempty(t("workflow_node.notify.form.message.placeholder")),
|
||||
provider: z.string(t("workflow_node.notify.form.provider.placeholder")).nonempty(t("workflow_node.notify.form.provider.placeholder")),
|
||||
providerAccessId: z.string(t("workflow_node.notify.form.provider_access.placeholder")).nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
|
||||
provider: z.string().nonempty(t("workflow_node.notify.form.provider.placeholder")),
|
||||
providerAccessId: z.string().nonempty(t("workflow_node.notify.form.provider_access.placeholder")),
|
||||
providerConfig: z.any().nullish(),
|
||||
skipOnAllPrevSkipped: z.boolean().nullish(),
|
||||
});
|
||||
|
||||
@@ -6,12 +6,13 @@ import { createSchemaFieldRule } from "antd-zod";
|
||||
import { z } from "zod";
|
||||
|
||||
import { validateCertificate, validatePrivateKey } from "@/api/certificates";
|
||||
import Show from "@/components/Show";
|
||||
import FileTextInput from "@/components/FileTextInput";
|
||||
import Show from "@/components/Show";
|
||||
import Tips from "@/components/Tips";
|
||||
import { type WorkflowNodeConfigForBizUpload, defaultNodeConfigForBizUpload } from "@/domain/workflow";
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { getErrMsg } from "@/utils/error";
|
||||
import { isUrlWithHttpOrHttps } from "@/utils/validator";
|
||||
|
||||
import { NodeFormContextProvider } from "./_context";
|
||||
import { NodeType } from "../nodes/typings";
|
||||
@@ -245,7 +246,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
case UPLOAD_SOURCE_URL:
|
||||
{
|
||||
if (!z.url().safeParse(values.certificate).success) {
|
||||
if (!isUrlWithHttpOrHttps(values.certificate)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.upload.form.certificate_url.placeholder"),
|
||||
@@ -253,7 +254,7 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
});
|
||||
}
|
||||
|
||||
if (!z.url().safeParse(values.privateKey).success) {
|
||||
if (!isUrlWithHttpOrHttps(values.privateKey)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.upload.form.private_key_url.placeholder"),
|
||||
|
||||
@@ -71,13 +71,10 @@ const getInitialValues = (): Nullish<z.infer<ReturnType<typeof getSchema>>> => {
|
||||
};
|
||||
|
||||
const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> }) => {
|
||||
const { t } = i18n;
|
||||
const { t: _ } = i18n;
|
||||
|
||||
return z.object({
|
||||
wait: z.coerce
|
||||
.number(t("workflow_node.delay.form.wait.placeholder"))
|
||||
.int(t("workflow_node.delay.form.wait.placeholder"))
|
||||
.positive(t("workflow_node.delay.form.wait.placeholder")),
|
||||
wait: z.coerce.number().int().positive(),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ import Show from "@/components/Show";
|
||||
import Tips from "@/components/Tips";
|
||||
import { WORKFLOW_TRIGGERS, type WorkflowNodeConfigForStart, type WorkflowTriggerType, defaultNodeConfigForStart } from "@/domain/workflow";
|
||||
import { useAntdForm } from "@/hooks";
|
||||
import { getNextCronExecutions, validCronExpression } from "@/utils/cron";
|
||||
import { getNextCronExecutions, validateCronExpression } from "@/utils/cron";
|
||||
|
||||
import { NodeFormContextProvider } from "./_context";
|
||||
import { NodeType } from "../nodes/typings";
|
||||
@@ -134,12 +134,12 @@ const getSchema = ({ i18n = getI18n() }: { i18n?: ReturnType<typeof getI18n> })
|
||||
|
||||
return z
|
||||
.object({
|
||||
trigger: z.string(t("workflow_node.start.form.trigger.placeholder")).nonempty(t("workflow_node.start.form.trigger.placeholder")),
|
||||
trigger: z.string().nonempty(t("workflow_node.start.form.trigger.placeholder")),
|
||||
triggerCron: z.string().nullish(),
|
||||
})
|
||||
.superRefine((values, ctx) => {
|
||||
if (values.trigger === WORKFLOW_TRIGGERS.SCHEDULED) {
|
||||
if (!validCronExpression(values.triggerCron!)) {
|
||||
if (!validateCronExpression(values.triggerCron!)) {
|
||||
ctx.addIssue({
|
||||
code: "custom",
|
||||
message: t("workflow_node.start.form.trigger_cron.errmsg.invalid"),
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { CronExpressionParser } from "cron-parser";
|
||||
|
||||
export const validCronExpression = (expr: string): boolean => {
|
||||
export const validateCronExpression = (expr: string): boolean => {
|
||||
try {
|
||||
CronExpressionParser.parse(expr);
|
||||
|
||||
@@ -21,7 +21,7 @@ export const validCronExpression = (expr: string): boolean => {
|
||||
};
|
||||
|
||||
export const getNextCronExecutions = (expr: string, times = 1): Date[] => {
|
||||
if (!validCronExpression(expr)) return [];
|
||||
if (!validateCronExpression(expr)) return [];
|
||||
|
||||
const now = new Date();
|
||||
const cron = CronExpressionParser.parse(expr, { currentDate: now });
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
export const matchSearchString = (keyword: string, candidate: string) => {
|
||||
keyword = String(keyword).toLowerCase();
|
||||
candidate = String(candidate).toLowerCase();
|
||||
|
||||
if (keyword.length === 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (candidate.includes(keyword)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (keyword.includes(" ")) {
|
||||
keyword = keyword.replaceAll(" ", "");
|
||||
candidate = candidate.replaceAll(" ", "");
|
||||
if (matchSearchString(keyword, candidate)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
export const matchSearchOption = (keyword: string, candidate: string | { label?: unknown } | { value?: unknown }) => {
|
||||
if (typeof candidate === "string") {
|
||||
return matchSearchString(keyword, candidate);
|
||||
}
|
||||
|
||||
if ("label" in candidate && candidate.label != null) {
|
||||
if (matchSearchString(keyword, candidate.label as string)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
if ("value" in candidate && candidate.value != null) {
|
||||
if (matchSearchString(keyword, candidate.value as string)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
@@ -0,0 +1,51 @@
|
||||
import { z } from "zod";
|
||||
|
||||
import { validateCronExpression } from "./cron";
|
||||
|
||||
export const isCron = (value: string) => {
|
||||
return validateCronExpression(value);
|
||||
};
|
||||
|
||||
export const isDomain = (value: string, { allowWildcard = false }: { allowWildcard?: boolean } = {}) => {
|
||||
const re = allowWildcard
|
||||
? /^(?:\*\.)?(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/
|
||||
: /^(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/;
|
||||
return re.test(value);
|
||||
};
|
||||
|
||||
export const isEmail = (value: string) => {
|
||||
return z.email().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isIPv4 = (value: string) => {
|
||||
return z.ipv4().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isIPv6 = (value: string) => {
|
||||
return z.ipv6().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isJsonObject = (value: string) => {
|
||||
try {
|
||||
const obj = JSON.parse(value);
|
||||
return typeof obj === "object" && !Array.isArray(obj);
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export const isPortNumber = (value: string | number) => {
|
||||
return z.coerce.number().int().min(1).max(65535).safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isUrlWithHttp = (value: string) => {
|
||||
return z.url().startsWith("http://").safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isUrlWithHttps = (value: string) => {
|
||||
return z.url().startsWith("https://").safeParse(value).success;
|
||||
};
|
||||
|
||||
export const isUrlWithHttpOrHttps = (value: string) => {
|
||||
return isUrlWithHttp(value) || isUrlWithHttps(value);
|
||||
};
|
||||
@@ -1,39 +0,0 @@
|
||||
import { z } from "zod/mini";
|
||||
|
||||
import { validCronExpression as _validCronExpression } from "./cron";
|
||||
|
||||
export const validCronExpression = (value: string) => {
|
||||
return _validCronExpression(value);
|
||||
};
|
||||
|
||||
export const validDomainName = (value: string, { allowWildcard = false }: { allowWildcard?: boolean } = {}) => {
|
||||
const re = allowWildcard
|
||||
? /^(?:\*\.)?(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/
|
||||
: /^(?!-)[A-Za-z0-9-]{1,}(?<!-)(\.[A-Za-z0-9-]{1,}(?<!-)){0,}$/;
|
||||
return re.test(value);
|
||||
};
|
||||
|
||||
export const validEmailAddress = (value: string) => {
|
||||
return z.email().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const validIPv4Address = (value: string) => {
|
||||
return z.ipv4().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const validIPv6Address = (value: string) => {
|
||||
return z.ipv6().safeParse(value).success;
|
||||
};
|
||||
|
||||
export const validHttpOrHttpsUrl = (value: string) => {
|
||||
try {
|
||||
const url = new URL(value);
|
||||
return url.protocol === "http:" || url.protocol === "https:";
|
||||
} catch {
|
||||
return false;
|
||||
}
|
||||
};
|
||||
|
||||
export const validPortNumber = (value: string | number) => {
|
||||
return parseInt(value + "") === +value && String(+value) === String(value) && +value >= 1 && +value <= 65535;
|
||||
};
|
||||
Reference in New Issue
Block a user