import { useEffect, useMemo, useState } from 'react'; import { Input, List, Spin, Empty, Typography, Tag } from 'antd'; import { FolderOpenOutlined, SearchOutlined } from '@ant-design/icons'; import { useAppDispatch, useAppSelector } from '../../store/store'; import { getCompanyGroupsThunk } from '../../store/slices/companyGroupsSlice/thunks'; import { setActiveCompanyGroup } from '../../store/slices/companyGroupsSlice/companyGroupsSlice'; import { useVirtualList } from '../../hooks/useVirtualList'; const { Text } = Typography; export const CompanyGroupsList = () => { const dispatch = useAppDispatch(); const rawRows = useAppSelector((state) => state.company_groups.raw_rows); const loading = useAppSelector((state) => state.company_groups.loading); const activeCompanyGroup = useAppSelector((state) => state.company_groups.activeCompanyGroup); const [query, setQuery] = useState(''); const filtered = useMemo(() => { const q = query.trim().toLowerCase(); if (!q) return rawRows; return rawRows.filter((g) => g.name.toLowerCase().includes(q) || g.crm_id?.toLowerCase().includes(q)); }, [rawRows, query]); const { ref, onScroll, visibleItems, totalHeight, offsetY } = useVirtualList(filtered, { itemHeight: 56, containerHeight: 900, overscan: 5, }); useEffect(() => { dispatch(getCompanyGroupsThunk()); }, [dispatch]); useEffect(() => { if (!activeCompanyGroup && rawRows?.length) { dispatch(setActiveCompanyGroup(rawRows?.[0])); } }, [rawRows, activeCompanyGroup, dispatch]); return (