import { useEffect, useState } from "react"; import { useDebouncedValue } from "@mantine/hooks"; import { Avatar, Group, Select, SelectProps, Text } from "@mantine/core"; import { useGetSpacesQuery } from "@/features/space/queries/space-query.ts"; import { ISpace } from "../../types/space.types"; import { useTranslation } from "react-i18next"; interface SpaceSelectProps { onChange: (value: ISpace) => void; value?: string; label?: string; width?: number; opened?: boolean; clearable?: boolean; } const renderSelectOption: SelectProps["renderOption"] = ({ option }) => (
{option.label}
); export function SpaceSelect({ onChange, label, value, width, opened, clearable, }: SpaceSelectProps) { const { t } = useTranslation(); const [searchValue, setSearchValue] = useState(""); const [debouncedQuery] = useDebouncedValue(searchValue, 500); const { data: spaces, isLoading } = useGetSpacesQuery({ query: debouncedQuery, limit: 50, }); const [data, setData] = useState([]); useEffect(() => { if (spaces) { const spaceData = spaces?.items .filter((space: ISpace) => space.slug !== value) .map((space: ISpace) => { return { label: space.name, value: space.slug, }; }); const filteredSpaceData = spaceData.filter( (space) => !data.find((existingSpace) => existingSpace.value === space.value), ); setData((prevData) => [...prevData, ...filteredSpaceData]); } }, [spaces]); return (