import clsx from 'clsx'; import { useState } from 'react'; import { useIntl } from 'react-intl'; import { FlexColumn } from '@/components/Container'; import { MiniButton } from '@/components/Control'; import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/DataTable'; import { Dropdown, useDropdown } from '@/components/Dropdown'; import { IconClose, IconFolderTree } from '@/components/Icons'; import { CProps } from '@/components/props'; import { SearchBar } from '@/components/shared/SearchBar'; import { ILibraryItem, LibraryItemID, LibraryItemType } from '@/features/library/models/library'; import { matchLibraryItem } from '@/features/library/models/libraryAPI'; import { APP_COLORS } from '@/styling/color'; import { prefixes } from '@/utils/constants'; import SelectLocation from '../../library/components/SelectLocation'; interface PickSchemaProps extends CProps.Styling { id?: string; value?: LibraryItemID; onChange: (newValue: LibraryItemID) => void; initialFilter?: string; rows?: number; items: ILibraryItem[]; itemType: LibraryItemType; baseFilter?: (target: ILibraryItem) => boolean; } const columnHelper = createColumnHelper(); function PickSchema({ id, initialFilter = '', rows = 4, items, itemType, value, onChange, baseFilter, className, ...restProps }: PickSchemaProps) { const intl = useIntl(); const locationMenu = useDropdown(); const [filterText, setFilterText] = useState(initialFilter); const [filterLocation, setFilterLocation] = useState(''); const baseFiltered = items .filter(item => item.item_type === itemType && (!baseFilter || baseFilter(item))) .filter(item => matchLibraryItem(item, filterText)); const filtered = filterLocation.length > 0 ? baseFiltered.filter(item => item.location === filterLocation || item.location.startsWith(`${filterLocation}/`)) : baseFiltered; const columns = [ columnHelper.accessor('alias', { id: 'alias', header: 'Шифр', size: 150, minSize: 80, maxSize: 150 }), columnHelper.accessor('title', { id: 'title', header: 'Название', size: 1200, minSize: 200, maxSize: 1200, cell: props =>
{props.getValue()}
}), columnHelper.accessor('time_update', { id: 'time_update', header: 'Дата', cell: props => (
{new Date(props.getValue()).toLocaleString(intl.locale, { year: '2-digit', month: '2-digit', day: '2-digit' })}
) }) ]; const conditionalRowStyles: IConditionalStyle[] = [ { when: (item: ILibraryItem) => item.id === value, style: { backgroundColor: APP_COLORS.bgSelected } } ]; function handleLocationClick(event: CProps.EventMouse, newValue: string) { event.preventDefault(); event.stopPropagation(); locationMenu.hide(); setFilterLocation(newValue); } return (
setFilterText(newValue)} />
} title='Фильтр по расположению' className='mt-1' onClick={() => locationMenu.toggle()} /> handleLocationClick(event, target.getPath())} />
{filterLocation.length > 0 ? ( } title='Сбросить фильтр' onClick={() => setFilterLocation('')} /> ) : null}

Список схем пуст

Измените параметры фильтра

} onRowClicked={rowData => onChange(rowData.id)} />
); } export default PickSchema;