ConceptPortal-public/rsconcept/frontend/src/pages/RSFormPage/elements/RSItemsMenu.tsx
IRBorisov 848617496e Improve consituenta editor UI
Started implementing TemplateExpressions
2023-10-25 21:21:43 +03:00

114 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;