feat(ui): allow select dns-01 provider on application

This commit is contained in:
Fu Diwei
2025-03-25 19:52:09 +08:00
parent 51c1b193e5
commit fd8ac3ae37
8 changed files with 67 additions and 33 deletions

View File

@@ -1,22 +1,32 @@
import { memo } from "react";
import { memo, useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { Avatar, Select, type SelectProps, Space, Tag, Typography } from "antd";
import { ACCESS_USAGES, accessProvidersMap } from "@/domain/provider";
import { ACCESS_USAGES, type AccessProvider, accessProvidersMap } from "@/domain/provider";
export type AccessProviderSelectProps = Omit<
SelectProps,
"filterOption" | "filterSort" | "labelRender" | "options" | "optionFilterProp" | "optionLabelProp" | "optionRender"
>;
> & {
filter?: (record: AccessProvider) => boolean;
};
const AccessProviderSelect = (props: AccessProviderSelectProps) => {
const AccessProviderSelect = ({ filter, ...props }: AccessProviderSelectProps) => {
const { t } = useTranslation();
const options = Array.from(accessProvidersMap.values()).map((item) => ({
key: item.type,
value: item.type,
label: t(item.name),
}));
const [options, setOptions] = useState<Array<{ key: string; value: string; label: string; data: AccessProvider }>>([]);
useEffect(() => {
const allItems = Array.from(accessProvidersMap.values());
const filteredItems = filter != null ? allItems.filter(filter) : allItems;
setOptions(
filteredItems.map((item) => ({
key: item.type,
value: item.type,
label: t(item.name),
data: item,
}))
);
}, [filter]);
const renderOption = (key: string) => {
const provider = accessProvidersMap.get(key);