import { memo, useEffect, 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"; export type AccessProviderSelectProps = Omit< SelectProps, "filterOption" | "filterSort" | "labelRender" | "options" | "optionFilterProp" | "optionLabelProp" | "optionRender" > & { filter?: (record: AccessProvider) => boolean; showOptionTags?: boolean; }; const AccessProviderSelect = ({ filter, showOptionTags, ...props }: AccessProviderSelectProps = { showOptionTags: true }) => { const { t } = useTranslation(); const [options, setOptions] = useState>([]); 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), disabled: item.builtin, data: item, })) ); }, [filter]); const renderOption = (key: string) => { const provider = accessProvidersMap.get(key); return (
{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")}} */}
)}
); }; return (