2023-12-13 14:32:57 +03:00
|
|
|
|
'use client';
|
|
|
|
|
|
2025-02-08 17:10:38 +03:00
|
|
|
|
import { Controller, useForm } from 'react-hook-form';
|
|
|
|
|
|
2025-02-10 01:32:55 +03:00
|
|
|
|
import { Checkbox } from '@/components/Input';
|
|
|
|
|
import { ModalForm } from '@/components/Modal';
|
2023-11-27 18:27:23 +03:00
|
|
|
|
|
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-02-10 01:32:55 +03:00
|
|
|
|
import { GraphFilterParams, useTermGraphStore } from '../stores/termGraph';
|
|
|
|
|
|
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 }
|
|
|
|
|
});
|
2023-11-27 18:27:23 +03:00
|
|
|
|
|
2025-02-08 17:10:38 +03:00
|
|
|
|
function onSubmit(data: GraphFilterParams) {
|
|
|
|
|
setParams(data);
|
2025-02-06 14:10:18 +03:00
|
|
|
|
}
|
|
|
|
|
|
2023-11-27 18:27:23 +03:00
|
|
|
|
return (
|
2025-02-06 20:28:23 +03:00
|
|
|
|
<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='Применить'
|
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>
|
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='Не отображать порожденные понятия' />
|
|
|
|
|
)}
|
2024-04-05 15:53:05 +03:00
|
|
|
|
/>
|
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>
|
2025-02-06 20:28:23 +03:00
|
|
|
|
</ModalForm>
|
2023-12-28 14:04:44 +03:00
|
|
|
|
);
|
2023-11-27 18:27:23 +03:00
|
|
|
|
}
|