ConceptPortal-public/rsconcept/frontend/src/dialogs/DlgEditVersions/TableVersions.tsx

95 lines
2.6 KiB
TypeScript
Raw Normal View History

'use client';
import clsx from 'clsx';
import { useIntl } from 'react-intl';
import { IconRemove } from '@/components/Icons';
2024-03-20 15:27:32 +03:00
import DataTable, { createColumnHelper, IConditionalStyle } from '@/components/ui/DataTable';
import MiniButton from '@/components/ui/MiniButton';
2024-05-27 20:42:34 +03:00
import { IVersionInfo, VersionID } from '@/models/library';
import { APP_COLORS } from '@/styling/color';
interface TableVersionsProps {
processing: boolean;
items: IVersionInfo[];
2024-05-27 20:42:34 +03:00
selected?: VersionID;
onDelete: (versionID: VersionID) => void;
onSelect: (versionID: VersionID) => void;
}
const columnHelper = createColumnHelper<IVersionInfo>();
function TableVersions({ processing, items, onDelete, selected, onSelect }: TableVersionsProps) {
const intl = useIntl();
const columns = [
columnHelper.accessor('version', {
id: 'version',
header: 'Версия',
cell: props => <div className='min-w-[6rem] max-w-[6rem] text-ellipsis'>{props.getValue()}</div>
}),
columnHelper.accessor('description', {
id: 'description',
header: 'Описание',
size: 800,
minSize: 800,
maxSize: 800,
cell: props => <div className='text-ellipsis'>{props.getValue()}</div>
}),
columnHelper.accessor('time_create', {
id: 'time_create',
header: 'Дата создания',
cell: props => (
<div className='whitespace-nowrap'>
{new Date(props.getValue()).toLocaleString(intl.locale, {
year: '2-digit',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit'
})}
</div>
)
}),
columnHelper.display({
id: 'actions',
size: 0,
cell: props => (
<div className='h-[1.25rem] w-[1.25rem]'>
<MiniButton
title='Удалить версию'
noHover
noPadding
disabled={processing}
icon={<IconRemove size='1.25rem' className='icon-red' />}
onClick={() => onDelete(props.row.original.id)}
/>
</div>
)
})
];
const conditionalRowStyles: IConditionalStyle<IVersionInfo>[] = [
{
when: (version: IVersionInfo) => version.id === selected,
style: {
backgroundColor: APP_COLORS.bgSelected
}
}
];
return (
<DataTable
dense
noFooter
2024-05-02 21:19:23 +03:00
headPosition='0'
className={clsx('mb-2', 'max-h-[17.4rem] min-h-[17.4rem]', 'border', 'cc-scroll-y')}
data={items}
columns={columns}
onRowClicked={rowData => onSelect(rowData.id)}
conditionalRowStyles={conditionalRowStyles}
/>
);
}
export default TableVersions;