import { memo, useState } from "react"; import { useTranslation } from "react-i18next"; import { useDebounceEffect } from "ahooks"; import { Avatar, Card, Col, Empty, Flex, Input, Row, Typography } from "antd"; import Show from "@/components/Show"; import { deployProvidersMap } from "@/domain/provider"; export type DeployProviderPickerProps = { className?: string; style?: React.CSSProperties; onSelect?: (value: string) => void; }; const DeployProviderPicker = ({ className, style, onSelect }: DeployProviderPickerProps) => { const { t } = useTranslation(); const allProviders = Array.from(deployProvidersMap.values()); const [providers, setProviders] = useState(allProviders); const [keyword, setKeyword] = useState(); useDebounceEffect( () => { if (keyword) { setProviders( allProviders.filter((provider) => { const value = keyword.toLowerCase(); return provider.type.toLowerCase().includes(value) || provider.name.toLowerCase().includes(value); }) ); } else { setProviders(allProviders); } }, [keyword], { wait: 300 } ); const handleProviderTypeSelect = (value: string) => { onSelect?.(value); }; return (
setKeyword(e.target.value.trim())} />
0} fallback={}> {providers.map((provider, index) => { return ( { handleProviderTypeSelect(provider.type); }} > {t(provider.name)} ); })}
); }; export default memo(DeployProviderPicker);