ConceptPortal-public/rsconcept/frontend/src/features/rsform/dialogs/dlg-graph-params.tsx

119 lines
4.1 KiB
TypeScript
Raw Normal View History

'use client';
2025-02-08 17:10:38 +03:00
import { Controller, useForm } from 'react-hook-form';
2025-03-12 11:55:43 +03:00
import { Checkbox } from '@/components/input1';
import { ModalForm } from '@/components/modal1';
2025-02-18 19:40:24 +03:00
import { CstType } from '../backend/types';
2025-02-11 20:56:24 +03:00
import { labelCstType } from '../labels';
2025-03-12 11:55:43 +03:00
import { type GraphFilterParams, useTermGraphStore } from '../stores/term-graph';
2025-02-19 23:30:35 +03:00
export function DlgGraphParams() {
2025-02-08 17:10:38 +03:00
const params = useTermGraphStore(state => state.filter);
const setParams = useTermGraphStore(state => state.setFilter);
const { handleSubmit, control } = useForm<GraphFilterParams>({
defaultValues: { ...params }
});
2025-02-08 17:10:38 +03:00
function onSubmit(data: GraphFilterParams) {
setParams(data);
2025-02-06 14:10:18 +03:00
}
return (
<ModalForm
2023-12-28 14:04:44 +03:00
header='Настройки графа термов'
2025-02-08 17:10:38 +03:00
onSubmit={event => void handleSubmit(onSubmit)(event)}
2023-12-28 14:04:44 +03:00
submitText='Применить'
2025-03-10 16:02:53 +03:00
className='flex gap-6 justify-between px-6 pb-3 w-120'
2023-12-28 14:04:44 +03:00
>
<div className='flex flex-col gap-1'>
<h1 className='mb-2'>Преобразования</h1>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='noText'
render={({ field }) => <Checkbox {...field} label='Скрыть текст' title='Не отображать термины' />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='noHermits'
render={({ field }) => <Checkbox {...field} label='Скрыть несвязанные' title='Неиспользуемые конституенты' />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='noTemplates'
render={({ field }) => (
<Checkbox
{...field}
label='Скрыть шаблоны'
titleHtml='Терм-функции и предикат-функции <br/>с параметризованными аргументами'
/>
)}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='noTransitive'
render={({ field }) => (
<Checkbox
{...field}
label='Транзитивная редукция'
titleHtml='Удалить связи, образующие <br/>транзитивные пути в графе'
/>
)}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='foldDerived'
render={({ field }) => (
<Checkbox {...field} label='Свернуть порожденные' title='Не отображать порожденные понятия' />
)}
/>
2023-12-28 14:04:44 +03:00
</div>
<div className='flex flex-col gap-1'>
<h1 className='mb-2'>Типы конституент</h1>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowBase'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.BASE)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowStruct'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.STRUCTURED)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowTerm'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.TERM)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowAxiom'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.AXIOM)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowFunction'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.FUNCTION)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowPredicate'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.PREDICATE)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowConstant'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.CONSTANT)} />}
2023-12-28 14:04:44 +03:00
/>
2025-02-08 17:10:38 +03:00
<Controller
control={control}
name='allowTheorem'
render={({ field }) => <Checkbox {...field} label={labelCstType(CstType.THEOREM)} />}
2023-12-28 14:04:44 +03:00
/>
</div>
</ModalForm>
2023-12-28 14:04:44 +03:00
);
}