import { useEffect, useState } from "react"; import { Avatar, Select, type SelectProps, Space, Typography } from "antd"; import { type AccessModel } from "@/domain/access"; import { accessProvidersMap } from "@/domain/provider"; import { useZustandShallowSelector } from "@/hooks"; import { useAccessesStore } from "@/stores/access"; export type AccessTypeSelectProps = Omit< SelectProps, "filterOption" | "filterSort" | "labelRender" | "loading" | "options" | "optionFilterProp" | "optionLabelProp" | "optionRender" > & { filter?: (record: AccessModel) => boolean; }; const AccessSelect = ({ filter, ...props }: AccessTypeSelectProps) => { const { accesses, loadedAtOnce, fetchAccesses } = useAccessesStore(useZustandShallowSelector(["accesses", "loadedAtOnce", "fetchAccesses"])); useEffect(() => { fetchAccesses(); }, []); const [options, setOptions] = useState>([]); useEffect(() => { const items = filter != null ? accesses.filter(filter) : accesses; setOptions( items.map((item) => ({ key: item.id, value: item.id, label: item.name, data: item, })) ); }, [accesses, filter]); const renderOption = (key: string) => { const access = accesses.find((e) => e.id === key); if (!access) { return ( {key} ); } const provider = accessProvidersMap.get(access.provider); return ( {access.name} ); }; return (