mirror of
https://github.com/woodchen-ink/certimate.git
synced 2025-07-18 17:31:55 +08:00
refactor: clean code
This commit is contained in:
parent
0edcd9174f
commit
d76e1a3204
@ -64,7 +64,7 @@ const AccessEditDrawer = ({ data, loading, trigger, scene, range, afterSubmit, .
|
|||||||
|
|
||||||
values = await updateAccess({ ...data, ...values });
|
values = await updateAccess({ ...data, ...values });
|
||||||
} else {
|
} else {
|
||||||
throw "Invalid props: `preset`";
|
throw "Invalid props: `scene`";
|
||||||
}
|
}
|
||||||
|
|
||||||
afterSubmit?.(values);
|
afterSubmit?.(values);
|
||||||
|
@ -31,16 +31,16 @@ const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProvid
|
|||||||
);
|
);
|
||||||
}, [filter]);
|
}, [filter]);
|
||||||
|
|
||||||
const showOptionTagsForDNS = useMemo(() => {
|
const showOptionTagForDNS = useMemo(() => {
|
||||||
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.DNS] : !!showOptionTags;
|
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.DNS] : !!showOptionTags;
|
||||||
}, [showOptionTags]);
|
}, [showOptionTags]);
|
||||||
const showOptionTagsForHosting = useMemo(() => {
|
const showOptionTagForHosting = useMemo(() => {
|
||||||
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.HOSTING] : !!showOptionTags;
|
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.HOSTING] : !!showOptionTags;
|
||||||
}, [showOptionTags]);
|
}, [showOptionTags]);
|
||||||
const showOptionTagsForCA = useMemo(() => {
|
const showOptionTagForCA = useMemo(() => {
|
||||||
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.CA] : !!showOptionTags;
|
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.CA] : !!showOptionTags;
|
||||||
}, [showOptionTags]);
|
}, [showOptionTags]);
|
||||||
const showOptionTagsForNotification = useMemo(() => {
|
const showOptionTagForNotification = useMemo(() => {
|
||||||
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.NOTIFICATION] : !!showOptionTags;
|
return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.NOTIFICATION] : !!showOptionTags;
|
||||||
}, [showOptionTags]);
|
}, [showOptionTags]);
|
||||||
|
|
||||||
@ -56,16 +56,16 @@ const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProvid
|
|||||||
</Space>
|
</Space>
|
||||||
{showOptionTags && (
|
{showOptionTags && (
|
||||||
<div>
|
<div>
|
||||||
<Show when={showOptionTagsForDNS && provider.usages.includes(ACCESS_USAGES.DNS)}>
|
<Show when={showOptionTagForDNS && provider.usages.includes(ACCESS_USAGES.DNS)}>
|
||||||
<Tag color="peru">{t("access.props.provider.usage.dns")}</Tag>
|
<Tag color="peru">{t("access.props.provider.usage.dns")}</Tag>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={showOptionTagsForHosting && provider.usages.includes(ACCESS_USAGES.HOSTING)}>
|
<Show when={showOptionTagForHosting && provider.usages.includes(ACCESS_USAGES.HOSTING)}>
|
||||||
<Tag color="royalblue">{t("access.props.provider.usage.hosting")}</Tag>
|
<Tag color="royalblue">{t("access.props.provider.usage.hosting")}</Tag>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={showOptionTagsForCA && provider.usages.includes(ACCESS_USAGES.CA)}>
|
<Show when={showOptionTagForCA && provider.usages.includes(ACCESS_USAGES.CA)}>
|
||||||
<Tag color="crimson">{t("access.props.provider.usage.ca")}</Tag>
|
<Tag color="crimson">{t("access.props.provider.usage.ca")}</Tag>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={showOptionTagsForNotification && provider.usages.includes(ACCESS_USAGES.NOTIFICATION)}>
|
<Show when={showOptionTagForNotification && provider.usages.includes(ACCESS_USAGES.NOTIFICATION)}>
|
||||||
<Tag color="mediumaquamarine">{t("access.props.provider.usage.notification")}</Tag>
|
<Tag color="mediumaquamarine">{t("access.props.provider.usage.notification")}</Tag>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { memo, useEffect, useRef, useState } from "react";
|
import { memo, useEffect, useMemo, useRef, useState } from "react";
|
||||||
import { useTranslation } from "react-i18next";
|
import { useTranslation } from "react-i18next";
|
||||||
import { Avatar, Card, Col, Empty, Flex, Input, type InputRef, Row, Typography } from "antd";
|
import { Avatar, Card, Col, Empty, Flex, Input, type InputRef, Row, Typography } from "antd";
|
||||||
|
|
||||||
@ -24,15 +24,16 @@ const ApplyDNSProviderPicker = ({ className, style, autoFocus, placeholder, onSe
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const providers = Array.from(applyDNSProvidersMap.values());
|
const providers = useMemo(() => {
|
||||||
const filteredProviders = providers.filter((provider) => {
|
return Array.from(applyDNSProvidersMap.values()).filter((provider) => {
|
||||||
if (keyword) {
|
if (keyword) {
|
||||||
const value = keyword.toLowerCase();
|
const value = keyword.toLowerCase();
|
||||||
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
|
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
}, [keyword]);
|
||||||
|
|
||||||
const handleProviderTypeSelect = (value: string) => {
|
const handleProviderTypeSelect = (value: string) => {
|
||||||
onSelect?.(value);
|
onSelect?.(value);
|
||||||
@ -40,12 +41,12 @@ const ApplyDNSProviderPicker = ({ className, style, autoFocus, placeholder, onSe
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={className} style={style}>
|
<div className={className} style={style}>
|
||||||
<Input.Search ref={keywordInputRef} placeholder={placeholder} onChange={(e) => setKeyword(e.target.value.trim())} />
|
<Input.Search ref={keywordInputRef} placeholder={placeholder ?? t("common.text.search")} onChange={(e) => setKeyword(e.target.value.trim())} />
|
||||||
|
|
||||||
<div className="mt-4">
|
<div className="mt-4">
|
||||||
<Show when={filteredProviders.length > 0} fallback={<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}>
|
<Show when={providers.length > 0} fallback={<Empty image={Empty.PRESENTED_IMAGE_SIMPLE} />}>
|
||||||
<Row gutter={[16, 16]}>
|
<Row gutter={[16, 16]}>
|
||||||
{filteredProviders.map((provider, index) => {
|
{providers.map((provider, index) => {
|
||||||
return (
|
return (
|
||||||
<Col key={index} xs={24} md={12} span={12}>
|
<Col key={index} xs={24} md={12} span={12}>
|
||||||
<Card
|
<Card
|
||||||
|
@ -16,6 +16,8 @@ export type DeployProviderPickerProps = {
|
|||||||
const DeployProviderPicker = ({ className, style, autoFocus, placeholder, onSelect }: DeployProviderPickerProps) => {
|
const DeployProviderPicker = ({ className, style, autoFocus, placeholder, onSelect }: DeployProviderPickerProps) => {
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
|
|
||||||
|
const [category, setCategory] = useState<string>(DEPLOY_CATEGORIES.ALL);
|
||||||
|
|
||||||
const [keyword, setKeyword] = useState<string>();
|
const [keyword, setKeyword] = useState<string>();
|
||||||
const keywordInputRef = useRef<InputRef>(null);
|
const keywordInputRef = useRef<InputRef>(null);
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -24,26 +26,24 @@ const DeployProviderPicker = ({ className, style, autoFocus, placeholder, onSele
|
|||||||
}
|
}
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const [category, setCategory] = useState<string>(DEPLOY_CATEGORIES.ALL);
|
|
||||||
|
|
||||||
const providers = useMemo(() => {
|
const providers = useMemo(() => {
|
||||||
return Array.from(deployProvidersMap.values())
|
return Array.from(deployProvidersMap.values())
|
||||||
|
.filter((provider) => {
|
||||||
|
if (category && category !== DEPLOY_CATEGORIES.ALL) {
|
||||||
|
return provider.category === category;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
})
|
||||||
.filter((provider) => {
|
.filter((provider) => {
|
||||||
if (keyword) {
|
if (keyword) {
|
||||||
const value = keyword.toLowerCase();
|
const value = keyword.toLowerCase();
|
||||||
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
|
return provider.type.toLowerCase().includes(value) || t(provider.name).toLowerCase().includes(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
})
|
|
||||||
.filter((provider) => {
|
|
||||||
if (category && category !== DEPLOY_CATEGORIES.ALL) {
|
|
||||||
return provider.category === category;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
}, [keyword, category]);
|
}, [category, keyword]);
|
||||||
|
|
||||||
const handleProviderTypeSelect = (value: string) => {
|
const handleProviderTypeSelect = (value: string) => {
|
||||||
onSelect?.(value);
|
onSelect?.(value);
|
||||||
@ -51,7 +51,7 @@ const DeployProviderPicker = ({ className, style, autoFocus, placeholder, onSele
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={className} style={style}>
|
<div className={className} style={style}>
|
||||||
<Input.Search ref={keywordInputRef} placeholder={placeholder} onChange={(e) => setKeyword(e.target.value.trim())} />
|
<Input.Search ref={keywordInputRef} placeholder={placeholder ?? t("common.text.search")} onChange={(e) => setKeyword(e.target.value.trim())} />
|
||||||
|
|
||||||
<div className="mt-4">
|
<div className="mt-4">
|
||||||
<Flex>
|
<Flex>
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
"common.text.operation_succeeded": "Operation succeeded",
|
"common.text.operation_succeeded": "Operation succeeded",
|
||||||
"common.text.operation_failed": "Operation failed",
|
"common.text.operation_failed": "Operation failed",
|
||||||
"common.text.request_error": "Request error",
|
"common.text.request_error": "Request error",
|
||||||
|
"common.text.search": "Search ...",
|
||||||
|
|
||||||
"common.menu.theme": "Change theme",
|
"common.menu.theme": "Change theme",
|
||||||
"common.menu.locale": "Change language",
|
"common.menu.locale": "Change language",
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
"common.text.operation_succeeded": "操作成功",
|
"common.text.operation_succeeded": "操作成功",
|
||||||
"common.text.operation_failed": "操作失败",
|
"common.text.operation_failed": "操作失败",
|
||||||
"common.text.request_error": "请求错误",
|
"common.text.request_error": "请求错误",
|
||||||
|
"common.text.search": "搜索 ……",
|
||||||
|
|
||||||
"common.menu.theme": "切换主题",
|
"common.menu.theme": "切换主题",
|
||||||
"common.menu.locale": "切换语言",
|
"common.menu.locale": "切换语言",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user