ConceptPortal-public/rsconcept/frontend/src/dialogs/DlgGraphParams.tsx

108 lines
4.0 KiB
TypeScript
Raw Normal View History

'use client';
import Checkbox from '@/components/ui/Checkbox';
import Modal, { ModalProps } from '@/components/ui/Modal';
import usePartialUpdate from '@/hooks/usePartialUpdate';
2023-12-26 14:23:51 +03:00
import { GraphFilterParams } from '@/models/miscellaneous';
import { CstType } from '@/models/rsform';
import { labelCstType } from '@/utils/labels';
2023-12-28 14:04:44 +03:00
interface DlgGraphParamsProps extends Pick<ModalProps, 'hideWindow'> {
initial: GraphFilterParams;
onConfirm: (params: GraphFilterParams) => void;
}
2023-12-28 14:04:44 +03:00
function DlgGraphParams({ hideWindow, initial, onConfirm }: DlgGraphParamsProps) {
const [params, updateParams] = usePartialUpdate(initial);
return (
2023-12-28 14:04:44 +03:00
<Modal
canSubmit
hideWindow={hideWindow}
header='Настройки графа термов'
onSubmit={() => onConfirm(params)}
2023-12-28 14:04:44 +03:00
submitText='Применить'
2024-06-07 13:42:50 +03:00
className='flex gap-6 justify-between px-6 pb-3 w-[30rem]'
2023-12-28 14:04:44 +03:00
>
<div className='flex flex-col gap-1'>
<h1 className='mb-2'>Преобразования</h1>
<Checkbox
label='Скрыть текст'
title='Не отображать термины'
value={params.noText}
setValue={value => updateParams({ noText: value })}
/>
<Checkbox
label='Скрыть несвязанные'
title='Неиспользуемые конституенты'
value={params.noHermits}
setValue={value => updateParams({ noHermits: value })}
/>
<Checkbox
label='Скрыть шаблоны'
2024-06-07 13:42:50 +03:00
titleHtml='Терм-функции и предикат-функции <br/>с параметризованными аргументами'
2023-12-28 14:04:44 +03:00
value={params.noTemplates}
setValue={value => updateParams({ noTemplates: value })}
/>
<Checkbox
label='Транзитивная редукция'
2024-06-07 13:42:50 +03:00
titleHtml='Удалить связи, образующие <br/>транзитивные пути в графе'
2023-12-28 14:04:44 +03:00
value={params.noTransitive}
setValue={value => updateParams({ noTransitive: value })}
/>
<Checkbox
2024-04-09 13:47:18 +03:00
label='Свернуть порожденные'
title='Не отображать порожденные понятия'
value={params.foldDerived}
setValue={value => updateParams({ foldDerived: value })}
/>
2023-12-28 14:04:44 +03:00
</div>
<div className='flex flex-col gap-1'>
<h1 className='mb-2'>Типы конституент</h1>
<Checkbox
label={labelCstType(CstType.BASE)}
value={params.allowBase}
setValue={value => updateParams({ allowBase: value })}
/>
<Checkbox
label={labelCstType(CstType.STRUCTURED)}
value={params.allowStruct}
setValue={value => updateParams({ allowStruct: value })}
/>
<Checkbox
label={labelCstType(CstType.TERM)}
value={params.allowTerm}
setValue={value => updateParams({ allowTerm: value })}
/>
<Checkbox
label={labelCstType(CstType.AXIOM)}
value={params.allowAxiom}
setValue={value => updateParams({ allowAxiom: value })}
/>
<Checkbox
label={labelCstType(CstType.FUNCTION)}
value={params.allowFunction}
setValue={value => updateParams({ allowFunction: value })}
/>
<Checkbox
label={labelCstType(CstType.PREDICATE)}
value={params.allowPredicate}
setValue={value => updateParams({ allowPredicate: value })}
/>
<Checkbox
label={labelCstType(CstType.CONSTANT)}
value={params.allowConstant}
setValue={value => updateParams({ allowConstant: value })}
/>
<Checkbox
label={labelCstType(CstType.THEOREM)}
value={params.allowTheorem}
setValue={value => updateParams({ allowTheorem: value })}
/>
</div>
</Modal>
);
}
2023-12-28 14:04:44 +03:00
export default DlgGraphParams;