diff --git a/ui/src/components/access/AccessForm.tsx b/ui/src/components/access/AccessForm.tsx index 7d0d6986..d5906434 100644 --- a/ui/src/components/access/AccessForm.tsx +++ b/ui/src/components/access/AccessForm.tsx @@ -295,7 +295,7 @@ const AccessForm = forwardRef(({ className, }} disabled={scene !== "add"} placeholder={providerPlaceholder} - showOptionTags={range == null || range === "both-dns-hosting"} + showOptionTags={range == null || (range === "both-dns-hosting" ? { [ACCESS_USAGES.DNS]: true, [ACCESS_USAGES.HOSTING]: true } : false)} showSearch={!disabled} /> diff --git a/ui/src/components/provider/AccessProviderSelect.tsx b/ui/src/components/provider/AccessProviderSelect.tsx index ba264691..9a35ed6e 100644 --- a/ui/src/components/provider/AccessProviderSelect.tsx +++ b/ui/src/components/provider/AccessProviderSelect.tsx @@ -1,15 +1,16 @@ -import { memo, useEffect, useState } from "react"; +import { memo, useEffect, useMemo, useState } from "react"; import { useTranslation } from "react-i18next"; import { Avatar, Select, type SelectProps, Space, Tag, Typography } from "antd"; -import { ACCESS_USAGES, type AccessProvider, accessProvidersMap } from "@/domain/provider"; +import Show from "@/components/Show"; +import { ACCESS_USAGES, type AccessProvider, type AccessUsageType, accessProvidersMap } from "@/domain/provider"; export type AccessProviderSelectProps = Omit< SelectProps, "filterOption" | "filterSort" | "labelRender" | "options" | "optionFilterProp" | "optionLabelProp" | "optionRender" > & { filter?: (record: AccessProvider) => boolean; - showOptionTags?: boolean; + showOptionTags?: boolean | { [key in AccessUsageType]?: boolean }; }; const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProviderSelectProps = { showOptionTags: true }) => { @@ -30,22 +31,43 @@ const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProvid ); }, [filter]); + const showOptionTagsForDNS = useMemo(() => { + return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.DNS] : !!showOptionTags; + }, [showOptionTags]); + const showOptionTagsForHosting = useMemo(() => { + return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.HOSTING] : !!showOptionTags; + }, [showOptionTags]); + const showOptionTagsForCA = useMemo(() => { + return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.CA] : !!showOptionTags; + }, [showOptionTags]); + const showOptionTagsForNotification = useMemo(() => { + return typeof showOptionTags === "object" ? !!showOptionTags[ACCESS_USAGES.NOTIFICATION] : !!showOptionTags; + }, [showOptionTags]); + const renderOption = (key: string) => { - const provider = accessProvidersMap.get(key); + const provider = accessProvidersMap.get(key) ?? ({ type: "", name: "", icon: "", usages: [] } as unknown as AccessProvider); return (
- - - {t(provider?.name ?? "")} + + + {t(provider.name)} {showOptionTags && (
- {provider?.usages?.includes(ACCESS_USAGES.DNS) && {t("access.props.provider.usage.dns")}} - {provider?.usages?.includes(ACCESS_USAGES.HOSTING) && {t("access.props.provider.usage.hosting")}} - {/* {provider?.usages?.includes(ACCESS_USAGES.CA) && {t("access.props.provider.usage.ca")}} */} - {/* {provider?.usages?.includes(ACCESS_USAGES.NOTIFICATION) && {t("access.props.provider.usage.notification")}} */} + + {t("access.props.provider.usage.dns")} + + + {t("access.props.provider.usage.hosting")} + + + {t("access.props.provider.usage.ca")} + + + {t("access.props.provider.usage.notification")} +
)}