import { useState } from 'react'; import { useIntl } from 'react-intl'; import clsx from 'clsx'; import { MiniButton } from '@/components/Control'; import { createColumnHelper, DataTable, type IConditionalStyle } from '@/components/DataTable'; import { Dropdown, useDropdown } from '@/components/Dropdown'; import { IconClose, IconFolderTree } from '@/components/Icons'; import { SearchBar } from '@/components/Input'; import { type Styling } from '@/components/props'; import { APP_COLORS } from '@/styling/colors'; import { prefixes } from '@/utils/constants'; import { type ILibraryItem, type LibraryItemType } from '../backend/types'; import { matchLibraryItem } from '../models/libraryAPI'; import { SelectLocation } from './SelectLocation'; interface PickSchemaProps extends Styling { id?: string; value: number | null; onChange: (newValue: number) => void; initialFilter?: string; rows?: number; items: ILibraryItem[]; itemType: LibraryItemType; baseFilter?: (target: ILibraryItem) => boolean; } const columnHelper = createColumnHelper(); export 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: React.MouseEvent, 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)} /> ); }