'use client'; import clsx from 'clsx'; import { useLayoutEffect, useMemo, useState } from 'react'; import { useIntl } from 'react-intl'; import { urls } from '@/app/urls'; import BadgeHelp from '@/components/man/BadgeHelp'; import { CProps } from '@/components/props'; import DataTable, { createColumnHelper, VisibilityState } from '@/components/ui/DataTable'; import FlexColumn from '@/components/ui/FlexColumn'; import TextURL from '@/components/ui/TextURL'; import { useAuth } from '@/context/AuthContext'; import { useConceptNavigation } from '@/context/NavigationContext'; import { useUsers } from '@/context/UsersContext'; import useLocalStorage from '@/hooks/useLocalStorage'; import useWindowSize from '@/hooks/useWindowSize'; import { ILibraryItem } from '@/models/library'; import { HelpTopic } from '@/models/miscellaneous'; import { storage } from '@/utils/constants'; import ItemIcons from './ItemIcons'; interface ViewLibraryProps { items: ILibraryItem[]; resetQuery: () => void; } const columnHelper = createColumnHelper(); function ViewLibrary({ items, resetQuery }: ViewLibraryProps) { const router = useConceptNavigation(); const intl = useIntl(); const { user } = useAuth(); const { getUserLabel } = useUsers(); const [itemsPerPage, setItemsPerPage] = useLocalStorage(storage.libraryPagination, 50); function handleOpenItem(item: ILibraryItem, event: CProps.EventMouse) { router.push(urls.schema(item.id), event.ctrlKey); } const windowSize = useWindowSize(); const [columnVisibility, setColumnVisibility] = useState({}); useLayoutEffect(() => { setColumnVisibility({ owner: !windowSize.isSmall }); }, [windowSize]); const columns = useMemo( () => [ columnHelper.display({ id: 'status', header: '', size: 60, minSize: 60, maxSize: 60, cell: props => }), columnHelper.accessor('alias', { id: 'alias', header: 'Шифр', size: 150, minSize: 80, maxSize: 150, enableSorting: true, sortingFn: 'text' }), columnHelper.accessor('title', { id: 'title', header: 'Название', size: 1200, minSize: 200, maxSize: 1200, enableSorting: true, sortingFn: 'text' }), columnHelper.accessor(item => item.owner ?? 0, { id: 'owner', header: 'Владелец', size: 400, minSize: 100, maxSize: 400, cell: props => getUserLabel(props.getValue()), enableSorting: true, sortingFn: 'text' }), columnHelper.accessor('time_update', { id: 'time_update', header: windowSize.isSmall ? 'Дата' : 'Обновлена', cell: props => (
{new Date(props.getValue()).toLocaleString(intl.locale, { year: '2-digit', month: '2-digit', day: '2-digit', ...(!windowSize.isSmall && { hour: '2-digit', minute: '2-digit' }) })}
), enableSorting: true, sortingFn: 'datetime', sortDescFirst: true }) ], [intl, getUserLabel, user, windowSize] ); return ( <>

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

} columnVisibility={columnVisibility} onRowClicked={handleOpenItem} enableSorting initialSorting={{ id: 'time_update', desc: true }} enablePagination paginationPerPage={itemsPerPage} onChangePaginationOption={setItemsPerPage} paginationOptions={[10, 20, 30, 50, 100]} /> ); } export default ViewLibrary;