ConceptPortal-public/rsconcept/frontend/src/pages/RSFormPage/DlgGraphOptions.tsx

154 lines
5.2 KiB
TypeScript
Raw Normal View History

2023-08-16 00:39:16 +03:00
import { useLayoutEffect, useState } from 'react';
import Checkbox from '../../components/Common/Checkbox';
2023-09-11 17:56:32 +03:00
import Modal, { ModalProps } from '../../components/Common/Modal';
2023-08-16 00:39:16 +03:00
import { CstType } from '../../utils/models';
import { getCstTypeLabel } from '../../utils/staticUI';
import { GraphEditorParams } from './EditorTermGraph';
2023-09-11 17:56:32 +03:00
interface DlgGraphOptionsProps
extends Pick<ModalProps, 'hideWindow'> {
2023-08-16 00:39:16 +03:00
initial: GraphEditorParams
onConfirm: (params: GraphEditorParams) => void
}
function DlgGraphOptions({ hideWindow, initial, onConfirm }:DlgGraphOptionsProps) {
const [ noHermits, setNoHermits ] = useState(true);
const [ noTransitive, setNoTransitive ] = useState(false);
const [ noTemplates, setNoTemplates ] = useState(true);
2023-08-16 00:50:27 +03:00
const [ noTerms, setNoTerms ] = useState(true);
2023-08-16 00:39:16 +03:00
const [ allowBase, setAllowBase ] = useState(true);
const [ allowStruct, setAllowStruct ] = useState(true);
const [ allowTerm, setAllowTerm ] = useState(true);
const [ allowAxiom, setAllowAxiom ] = useState(true);
const [ allowFunction, setAllowFunction ] = useState(true);
const [ allowPredicate, setAllowPredicate ] = useState(true);
const [ allowConstant, setAllowConstant ] = useState(true);
const [ allowTheorem, setAllowTheorem ] = useState(true);
function getParams() {
return {
noHermits: noHermits,
noTransitive: noTransitive,
noTemplates: noTemplates,
2023-08-16 00:50:27 +03:00
noTerms: noTerms,
2023-08-16 00:39:16 +03:00
allowBase: allowBase,
allowStruct: allowStruct,
allowTerm: allowTerm,
allowAxiom: allowAxiom,
allowFunction: allowFunction,
allowPredicate: allowPredicate,
allowConstant: allowConstant,
allowTheorem: allowTheorem
}
}
const handleSubmit = () => {
hideWindow();
onConfirm(getParams());
};
useLayoutEffect(() => {
setNoHermits(initial.noHermits);
setNoTransitive(initial.noTransitive);
setNoTemplates(initial.noTemplates);
2023-08-16 00:50:27 +03:00
setNoTerms(initial.noTerms);
2023-08-16 00:39:16 +03:00
setAllowBase(initial.allowBase);
setAllowStruct(initial.allowStruct);
setAllowTerm(initial.allowTerm);
setAllowAxiom(initial.allowAxiom);
setAllowFunction(initial.allowFunction);
setAllowPredicate(initial.allowPredicate);
setAllowConstant(initial.allowConstant);
setAllowTheorem(initial.allowTheorem);
}, [initial]);
return (
<Modal
hideWindow={hideWindow}
title='Настройки графа термов'
onSubmit={handleSubmit}
canSubmit
submitText='Применить'
>
<div className='flex gap-2'>
<div className='flex flex-col'>
<h1>Преобразования</h1>
2023-08-16 00:50:27 +03:00
<Checkbox
label='Скрыть текст'
tooltip='Не отображать термины'
value={noTerms}
2023-09-07 16:30:43 +03:00
setValue={ value => setNoTerms(value) }
2023-08-16 00:50:27 +03:00
/>
2023-08-16 00:39:16 +03:00
<Checkbox
label='Скрыть несвязанные'
tooltip='Неиспользуемые конституенты'
value={noHermits}
2023-09-07 16:30:43 +03:00
setValue={ value => setNoHermits(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label='Скрыть шаблоны'
tooltip='Терм-функции и предикат-функции с параметризованными аргументами'
value={noTemplates}
2023-09-07 16:30:43 +03:00
setValue={ value => setNoTemplates(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label='Транзитивная редукция'
tooltip='Удалить связи, образующие транзитивные пути в графе'
value={noTransitive}
2023-09-07 16:30:43 +03:00
setValue={ value => setNoTransitive(value) }
2023-08-16 00:39:16 +03:00
/>
</div>
<div className='flex flex-col'>
<h1>Типы конституент</h1>
<Checkbox
label={getCstTypeLabel(CstType.BASE)}
value={allowBase}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowBase(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.STRUCTURED)}
value={allowStruct}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowStruct(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.TERM)}
value={allowTerm}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowTerm(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.AXIOM)}
value={allowAxiom}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowAxiom(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.FUNCTION)}
value={allowFunction}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowFunction(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.PREDICATE)}
value={allowPredicate}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowPredicate(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.CONSTANT)}
value={allowConstant}
2023-09-07 16:30:43 +03:00
setValue={ value => setAllowConstant(value) }
2023-08-16 00:39:16 +03:00
/>
<Checkbox
label={getCstTypeLabel(CstType.THEOREM)}
value={allowTheorem}
2023-09-07 16:30:43 +03:00
setValue ={ value => setAllowTheorem(value) }
2023-08-16 00:39:16 +03:00
/>
</div>
</div>
</Modal>
);
}
export default DlgGraphOptions;