mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-06-26 21:10:38 +03:00
114 lines
3.9 KiB
TypeScript
114 lines
3.9 KiB
TypeScript
![]() |
import { useMemo } from 'react';
|
|||
|
|
|||
|
import ConceptTooltip from '../../../components/Common/ConceptTooltip';
|
|||
|
import Dropdown from '../../../components/Common/Dropdown';
|
|||
|
import DropdownButton from '../../../components/Common/DropdownButton';
|
|||
|
import MiniButton from '../../../components/Common/MiniButton';
|
|||
|
import HelpRSFormItems from '../../../components/Help/HelpRSFormItems';
|
|||
|
import { ArrowDownIcon, ArrowDropdownIcon, ArrowUpIcon, CloneIcon, DiamondIcon, DumpBinIcon, HelpIcon, SmallPlusIcon,UpdateIcon } from '../../../components/Icons';
|
|||
|
import { useRSForm } from '../../../context/RSFormContext';
|
|||
|
import useDropdown from '../../../hooks/useDropdown';
|
|||
|
import { CstType } from '../../../models/rsform';
|
|||
|
import { labelCstType } from '../../../utils/labels';
|
|||
|
import { getCstTypePrefix, getCstTypeShortcut } from '../../../utils/misc';
|
|||
|
|
|||
|
interface RSItemsMenuProps {
|
|||
|
selected: number[]
|
|||
|
|
|||
|
onMoveUp: () => void
|
|||
|
onMoveDown: () => void
|
|||
|
onDelete: () => void
|
|||
|
onClone: () => void
|
|||
|
onCreate: (type?: CstType) => void
|
|||
|
onTemplates: () => void
|
|||
|
onReindex: () => void
|
|||
|
}
|
|||
|
|
|||
|
function RSItemsMenu({
|
|||
|
selected,
|
|||
|
onMoveUp, onMoveDown, onDelete, onClone, onCreate, onTemplates, onReindex
|
|||
|
}: RSItemsMenuProps) {
|
|||
|
const { isEditable } = useRSForm();
|
|||
|
const insertMenu = useDropdown();
|
|||
|
|
|||
|
const nothingSelected = useMemo(() => selected.length === 0, [selected]);
|
|||
|
|
|||
|
return (
|
|||
|
<div className='flex items-center justify-center w-full pr-[9rem]'>
|
|||
|
<MiniButton
|
|||
|
tooltip='Переместить вверх'
|
|||
|
icon={<ArrowUpIcon size={5}/>}
|
|||
|
disabled={!isEditable || nothingSelected}
|
|||
|
onClick={onMoveUp}
|
|||
|
/>
|
|||
|
<MiniButton
|
|||
|
tooltip='Переместить вниз'
|
|||
|
icon={<ArrowDownIcon size={5}/>}
|
|||
|
disabled={!isEditable || nothingSelected}
|
|||
|
onClick={onMoveDown}
|
|||
|
/>
|
|||
|
<MiniButton
|
|||
|
tooltip='Удалить выбранные'
|
|||
|
icon={<DumpBinIcon color={isEditable && !nothingSelected ? 'text-warning' : ''} size={5}/>}
|
|||
|
disabled={!isEditable || nothingSelected}
|
|||
|
onClick={onDelete}
|
|||
|
/>
|
|||
|
<MiniButton
|
|||
|
tooltip='Клонировать конституенту'
|
|||
|
icon={<CloneIcon color={isEditable && selected.length === 1 ? 'text-success': ''} size={5}/>}
|
|||
|
disabled={!isEditable || selected.length !== 1}
|
|||
|
onClick={onClone}
|
|||
|
/>
|
|||
|
<MiniButton
|
|||
|
tooltip='Добавить новую конституенту...'
|
|||
|
icon={<SmallPlusIcon color={isEditable ? 'text-success': ''} size={5}/>}
|
|||
|
disabled={!isEditable}
|
|||
|
onClick={() => onCreate()}
|
|||
|
/>
|
|||
|
<div ref={insertMenu.ref} className='flex justify-center'>
|
|||
|
<MiniButton
|
|||
|
tooltip='Добавить пустую конституенту'
|
|||
|
icon={<ArrowDropdownIcon color={isEditable ? 'text-success': ''} size={5}/>}
|
|||
|
disabled={!isEditable}
|
|||
|
onClick={insertMenu.toggle}
|
|||
|
/>
|
|||
|
{ insertMenu.isActive &&
|
|||
|
<Dropdown>
|
|||
|
{(Object.values(CstType)).map(
|
|||
|
(typeStr) => {
|
|||
|
const type = typeStr as CstType;
|
|||
|
return (
|
|||
|
<DropdownButton
|
|||
|
onClick={() => onCreate(type)}
|
|||
|
tooltip={getCstTypeShortcut(type)}
|
|||
|
>
|
|||
|
{`${getCstTypePrefix(type)}1 — ${labelCstType(type)}`}
|
|||
|
</DropdownButton>);
|
|||
|
})}
|
|||
|
</Dropdown>}
|
|||
|
</div>
|
|||
|
|
|||
|
<MiniButton
|
|||
|
tooltip='Создать конституенту из шаблона'
|
|||
|
icon={<DiamondIcon color={isEditable ? 'text-primary': ''} size={5}/>}
|
|||
|
disabled={!isEditable}
|
|||
|
onClick={onTemplates}
|
|||
|
/>
|
|||
|
|
|||
|
<MiniButton
|
|||
|
tooltip='Сброс имен: присвоить порядковые имена'
|
|||
|
icon={<UpdateIcon color={isEditable ? 'text-primary': ''} size={5}/>}
|
|||
|
disabled={!isEditable}
|
|||
|
onClick={onReindex}
|
|||
|
/>
|
|||
|
|
|||
|
<div className='ml-1' id='items-table-help'>
|
|||
|
<HelpIcon color='text-primary' size={5} />
|
|||
|
</div>
|
|||
|
<ConceptTooltip anchorSelect='#items-table-help' offset={30}>
|
|||
|
<HelpRSFormItems />
|
|||
|
</ConceptTooltip>
|
|||
|
</div>);
|
|||
|
}
|
|||
|
|
|||
|
export default RSItemsMenu;
|