Merge branch 'next' into feat/new-workflow-ui

This commit is contained in:
Fu Diwei
2024-12-25 21:06:59 +08:00
16 changed files with 267 additions and 3 deletions

View File

@@ -0,0 +1 @@
<svg enable-background="new 0 0 180 180" viewBox="0 0 180 180" width="200" height="200" xmlns="http://www.w3.org/2000/svg"><path d="m90.1 0c49.7 0 89.9 40.2 89.9 89.9s-40.2 89.9-89.9 89.9-90-40.1-90-89.9c0-49.6 40.3-89.9 90-89.9z" fill="#282828"/><path d="m39.1 121.1v-61.4l18-4.3-2.8 19.8h1.9c1.1-4.6 2.9-8.5 5.2-11.6 2.5-3.2 5.5-5.6 9.2-7.2 3.8-1.7 8.2-2.6 13.2-2.6 6.5 0 12.1 1.4 16.8 4.4 4.7 2.9 8.3 7 10.8 12.6 2.6 5.4 3.9 11.9 3.9 19.5v30.8h-17.7v-26.3c0-5.1-.8-9.4-2.3-13-1.6-3.6-3.9-6.3-6.9-8.2-3.1-1.9-6.6-2.9-10.9-2.9-6.3 0-11.3 2-14.9 6.2-3.6 4.1-5.3 10-5.3 17.7v26.4h-18.2z" fill="#fff"/><circle cx="137.3" cy="110.4" fill="#6eda78" r="12.4"/></svg>

After

Width:  |  Height:  |  Size: 663 B

View File

@@ -19,6 +19,7 @@ import AccessEditFormGoDaddyConfig from "./AccessEditFormGoDaddyConfig";
import AccessEditFormHuaweiCloudConfig from "./AccessEditFormHuaweiCloudConfig";
import AccessEditFormKubernetesConfig from "./AccessEditFormKubernetesConfig";
import AccessEditFormLocalConfig from "./AccessEditFormLocalConfig";
import AccessEditFormNameDotComConfig from "./AccessEditFormNameDotComConfig";
import AccessEditFormNameSiloConfig from "./AccessEditFormNameSiloConfig";
import AccessEditFormPowerDNSConfig from "./AccessEditFormPowerDNSConfig";
import AccessEditFormQiniuConfig from "./AccessEditFormQiniuConfig";
@@ -98,6 +99,8 @@ const AccessEditForm = forwardRef<AccessEditFormInstance, AccessEditFormProps>((
return <AccessEditFormKubernetesConfig {...configFormProps} />;
case ACCESS_PROVIDER_TYPES.LOCAL:
return <AccessEditFormLocalConfig {...configFormProps} />;
case ACCESS_PROVIDER_TYPES.NAMEDOTCOM:
return <AccessEditFormNameDotComConfig {...configFormProps} />;
case ACCESS_PROVIDER_TYPES.NAMESILO:
return <AccessEditFormNameSiloConfig {...configFormProps} />;
case ACCESS_PROVIDER_TYPES.POWERDNS:

View File

@@ -0,0 +1,77 @@
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useDeepCompareEffect } from "ahooks";
import { Form, Input, type FormInstance } from "antd";
import { createSchemaFieldRule } from "antd-zod";
import { z } from "zod";
import { type NameDotComAccessConfig } from "@/domain/access";
type AccessEditFormNameDotComConfigModelType = Partial<NameDotComAccessConfig>;
export type AccessEditFormNameDotComConfigProps = {
form: FormInstance;
formName: string;
disabled?: boolean;
loading?: boolean;
model?: AccessEditFormNameDotComConfigModelType;
onModelChange?: (model: AccessEditFormNameDotComConfigModelType) => void;
};
const initModel = () => {
return {
username: "",
apiToken: "",
} as AccessEditFormNameDotComConfigModelType;
};
const AccessEditFormNameDotComConfig = ({ form, formName, disabled, loading, model, onModelChange }: AccessEditFormNameDotComConfigProps) => {
const { t } = useTranslation();
const formSchema = z.object({
username: z
.string()
.trim()
.min(1, t("access.form.namedotcom_username.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
apiToken: z
.string()
.trim()
.min(1, t("access.form.namedotcom_api_token.placeholder"))
.max(64, t("common.errmsg.string_max", { max: 64 })),
});
const formRule = createSchemaFieldRule(formSchema);
const [initialValues, setInitialValues] = useState<Partial<z.infer<typeof formSchema>>>(model ?? initModel());
useDeepCompareEffect(() => {
setInitialValues(model ?? initModel());
}, [model]);
const handleFormChange = (_: unknown, fields: AccessEditFormNameDotComConfigModelType) => {
onModelChange?.(fields);
};
return (
<Form form={form} disabled={loading || disabled} initialValues={initialValues} layout="vertical" name={formName} onValuesChange={handleFormChange}>
<Form.Item
name="username"
label={t("access.form.namedotcom_username.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.namedotcom_username.tooltip") }}></span>}
>
<Input autoComplete="new-password" placeholder={t("access.form.namedotcom_username.placeholder")} />
</Form.Item>
<Form.Item
name="apiToken"
label={t("access.form.namedotcom_api_token.label")}
rules={[formRule]}
tooltip={<span dangerouslySetInnerHTML={{ __html: t("access.form.namedotcom_api_token.tooltip") }}></span>}
>
<Input.Password autoComplete="new-password" placeholder={t("access.form.namedotcom_api_token.placeholder")} />
</Form.Item>
</Form>
);
};
export default AccessEditFormNameDotComConfig;

View File

@@ -13,6 +13,7 @@ export const ACCESS_PROVIDER_TYPE_GODADDY = "godaddy" as const;
export const ACCESS_PROVIDER_TYPE_HUAWEICLOUD = "huaweicloud" as const;
export const ACCESS_PROVIDER_TYPE_KUBERNETES = "k8s" as const;
export const ACCESS_PROVIDER_TYPE_LOCAL = "local" as const;
export const ACCESS_PROVIDER_TYPE_NAMEDOTCOM = "namedotcom" as const;
export const ACCESS_PROVIDER_TYPE_NAMESILO = "namesilo" as const;
export const ACCESS_PROVIDER_TYPE_POWERDNS = "powerdns" as const;
export const ACCESS_PROVIDER_TYPE_QINIU = "qiniu" as const;
@@ -32,6 +33,7 @@ export const ACCESS_PROVIDER_TYPES = Object.freeze({
HUAWEICLOUD: ACCESS_PROVIDER_TYPE_HUAWEICLOUD,
KUBERNETES: ACCESS_PROVIDER_TYPE_KUBERNETES,
LOCAL: ACCESS_PROVIDER_TYPE_LOCAL,
NAMEDOTCOM: ACCESS_PROVIDER_TYPE_NAMEDOTCOM,
NAMESILO: ACCESS_PROVIDER_TYPE_NAMESILO,
POWERDNS: ACCESS_PROVIDER_TYPE_POWERDNS,
QINIU: ACCESS_PROVIDER_TYPE_QINIU,
@@ -75,6 +77,7 @@ export interface AccessModel extends BaseModel {
| HuaweiCloudAccessConfig
| KubernetesAccessConfig
| LocalAccessConfig
| NameDotComAccessConfig
| NameSiloAccessConfig
| PowerDNSAccessConfig
| QiniuAccessConfig
@@ -142,6 +145,11 @@ export type KubernetesAccessConfig = {
export type LocalAccessConfig = NonNullable<unknown>;
export type NameDotComAccessConfig = {
username: string;
apiToken: string;
};
export type NameSiloAccessConfig = {
apiKey: string;
};
@@ -194,6 +202,9 @@ export const accessProvidersMap: Map<AccessProvider["type"], AccessProvider> = n
NOTICE: The following order determines the order displayed at the frontend.
*/
[
[ACCESS_PROVIDER_TYPE_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_ALIYUN, "common.provider.aliyun", "/imgs/providers/aliyun.svg", "all"],
[ACCESS_PROVIDER_TYPE_TENCENTCLOUD, "common.provider.tencentcloud", "/imgs/providers/tencentcloud.svg", "all"],
[ACCESS_PROVIDER_TYPE_HUAWEICLOUD, "common.provider.huaweicloud", "/imgs/providers/huaweicloud.svg", "all"],
@@ -204,12 +215,10 @@ export const accessProvidersMap: Map<AccessProvider["type"], AccessProvider> = n
[ACCESS_PROVIDER_TYPE_BYTEPLUS, "common.provider.byteplus", "/imgs/providers/byteplus.svg", "all"],
[ACCESS_PROVIDER_TYPE_AWS, "common.provider.aws", "/imgs/providers/aws.svg", "apply"],
[ACCESS_PROVIDER_TYPE_CLOUDFLARE, "common.provider.cloudflare", "/imgs/providers/cloudflare.svg", "apply"],
[ACCESS_PROVIDER_TYPE_NAMEDOTCOM, "common.provider.namedotcom", "/imgs/providers/namedotcom.svg", "apply"],
[ACCESS_PROVIDER_TYPE_NAMESILO, "common.provider.namesilo", "/imgs/providers/namesilo.svg", "apply"],
[ACCESS_PROVIDER_TYPE_GODADDY, "common.provider.godaddy", "/imgs/providers/godaddy.svg", "apply"],
[ACCESS_PROVIDER_TYPE_POWERDNS, "common.provider.powerdns", "/imgs/providers/powerdns.svg", "apply"],
[ACCESS_PROVIDER_TYPE_LOCAL, "common.provider.local", "/imgs/providers/local.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_SSH, "common.provider.ssh", "/imgs/providers/ssh.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_WEBHOOK, "common.provider.webhook", "/imgs/providers/webhook.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_KUBERNETES, "common.provider.kubernetes", "/imgs/providers/kubernetes.svg", "deploy"],
[ACCESS_PROVIDER_TYPE_ACMEHTTPREQ, "common.provider.acmehttpreq", "/imgs/providers/acmehttpreq.svg", "apply"],
].map(([type, name, icon, usage]) => [type, { type, name, icon, usage: usage as AccessProviderUsages }])

View File

@@ -91,6 +91,12 @@
"access.form.k8s_kubeconfig.placeholder": "Please enter KubeConfig file",
"access.form.k8s_kubeconfig.upload": "Choose File ...",
"access.form.k8s_kubeconfig.tooltip": "For more information, see <a href=\"https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/\" target=\"_blank\">https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/</a><br><br>Leave blank to use the Pod's ServiceAccount.",
"access.form.namedotcom_username.label": "Name.com Username",
"access.form.namedotcom_username.placeholder": "Please enter Name.com Username",
"access.form.namedotcom_username.tooltip": "For more information, see <a href=\"https://www.name.com/account/settings/api\" target=\"_blank\">https://www.name.com/account/settings/api</a>",
"access.form.namedotcom_api_token.label": "Name.com API Token",
"access.form.namedotcom_api_token.placeholder": "Please enter Name.com API Token",
"access.form.namedotcom_api_token.tooltip": "For more information, see <a href=\"https://www.name.com/support/articles/31142639244819-how-to-manage-your-api-tokens\" target=\"_blank\">https://www.name.com/support/articles/31142639244819-how-to-manage-your-api-tokens</a>",
"access.form.namesilo_api_key.label": "NameSilo API Key",
"access.form.namesilo_api_key.placeholder": "Please enter NameSilo API Key",
"access.form.namesilo_api_key.tooltip": "For more information, see <a href=\"https://www.namesilo.com/support/v2/articles/account-options/api-manager\" target=\"_blank\">https://www.namesilo.com/support/v2/articles/account-options/api-manager</a>",

View File

@@ -71,6 +71,7 @@
"common.provider.kubernetes": "Kubernetes",
"common.provider.kubernetes.secret": "Kubernetes - Secret",
"common.provider.local": "Local Deployment",
"common.provider.namedotcom": "Name.com",
"common.provider.namesilo": "NameSilo",
"common.provider.powerdns": "PowerDNS",
"common.provider.qiniu": "Qiniu",

View File

@@ -91,6 +91,12 @@
"access.form.k8s_kubeconfig.placeholder": "请选择 KubeConfig 文件",
"access.form.k8s_kubeconfig.upload": "选择文件",
"access.form.k8s_kubeconfig.tooltip": "这是什么?请参阅 <a href=\"https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/\" target=\"_blank\">https://kubernetes.io/zh-cn/docs/concepts/configuration/organize-cluster-access-kubeconfig/</a><br><br>为空时,将使用 Pod 的 ServiceAccount 作为凭证。",
"access.form.namedotcom_username.label": "Name.com 用户名",
"access.form.namedotcom_username.placeholder": "请输入 Name.com 用户名",
"access.form.namedotcom_username.tooltip": "这是什么?请参阅 <a href=\"https://www.name.com/account/settings/api\" target=\"_blank\">https://www.name.com/account/settings/api</a>",
"access.form.namedotcom_api_token.label": "Name.com API Token",
"access.form.namedotcom_api_token.placeholder": "请输入 Name.com API Token",
"access.form.namedotcom_api_token.tooltip": "这是什么?请参阅 <a href=\"https://www.name.com/support/articles/31142639244819-how-to-manage-your-api-tokens\" target=\"_blank\">https://www.name.com/support/articles/31142639244819-how-to-manage-your-api-tokens</a>",
"access.form.namesilo_api_key.label": "NameSilo API Key",
"access.form.namesilo_api_key.placeholder": "请输入 NameSilo API Key",
"access.form.namesilo_api_key.tooltip": "这是什么?请参阅 <a href=\"https://www.namesilo.com/support/v2/articles/account-options/api-manager\" target=\"_blank\">https://www.namesilo.com/support/v2/articles/account-options/api-manager</a>",

View File

@@ -71,6 +71,7 @@
"common.provider.kubernetes": "Kubernetes",
"common.provider.kubernetes.secret": "Kubernetes - Secret",
"common.provider.local": "本地部署",
"common.provider.namedotcom": "Name.com",
"common.provider.namesilo": "NameSilo",
"common.provider.powerdns": "PowerDNS",
"common.provider.qiniu": "七牛云",