mirror of
https://github.com/IRBorisov/ConceptPortal.git
synced 2025-08-13 12:20:36 +03:00
F: Update substitute UI with nominal cst
This commit is contained in:
parent
c63144e78b
commit
593b483936
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
|
@ -217,6 +217,7 @@
|
|||
"неитерируемого",
|
||||
"Никанорова",
|
||||
"Номеноид",
|
||||
"номеноида",
|
||||
"Номеноиды",
|
||||
"операционализации",
|
||||
"операционализированных",
|
||||
|
|
|
@ -42,6 +42,8 @@ export function describeSubstitutionError(error: RO<ISubstitutionErrorDescriptio
|
|||
return `Ошибка ${error.params[0]} -> ${error.params[1]}: замена структурного понятия базисным множеством`;
|
||||
case SubstitutionErrorType.invalidConstant:
|
||||
return `Ошибка ${error.params[0]} -> ${error.params[1]}: подстановка константного множества возможна только вместо другого константного`;
|
||||
case SubstitutionErrorType.invalidNominal:
|
||||
return `Ошибка ${error.params[0]} -> ${error.params[1]}: подстановка номеноида возможна только вместо другого номеноида`;
|
||||
case SubstitutionErrorType.invalidClasses:
|
||||
return `Ошибка ${error.params[0]} -> ${error.params[1]}: классы конституент не совпадают`;
|
||||
case SubstitutionErrorType.typificationCycle:
|
||||
|
|
|
@ -183,8 +183,18 @@ export class SubstitutionValidator {
|
|||
return this.reportError(SubstitutionErrorType.incorrectCst, [substitution.alias, original.alias]);
|
||||
}
|
||||
switch (substitution.cst_type) {
|
||||
case CstType.NOMINAL: {
|
||||
if (original.cst_type !== CstType.NOMINAL) {
|
||||
return this.reportError(SubstitutionErrorType.invalidNominal, [substitution.alias, original.alias]);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case CstType.BASE: {
|
||||
if (original.cst_type !== CstType.BASE && original.cst_type !== CstType.CONSTANT) {
|
||||
if (
|
||||
original.cst_type !== CstType.BASE &&
|
||||
original.cst_type !== CstType.CONSTANT &&
|
||||
original.cst_type !== CstType.NOMINAL
|
||||
) {
|
||||
return this.reportError(SubstitutionErrorType.invalidBasic, [substitution.alias, original.alias]);
|
||||
}
|
||||
break;
|
||||
|
@ -295,7 +305,11 @@ export class SubstitutionValidator {
|
|||
}
|
||||
for (const item of this.substitutions) {
|
||||
const original = this.cstByID.get(item.original)!;
|
||||
if (original.cst_type === CstType.BASE || original.cst_type === CstType.CONSTANT) {
|
||||
if (
|
||||
original.cst_type === CstType.BASE ||
|
||||
original.cst_type === CstType.CONSTANT ||
|
||||
original.cst_type === CstType.NOMINAL
|
||||
) {
|
||||
continue;
|
||||
}
|
||||
const substitution = this.cstByID.get(item.substitution)!;
|
||||
|
|
|
@ -112,7 +112,8 @@ export const SubstitutionErrorType = {
|
|||
unequalTypification: 7,
|
||||
unequalExpressions: 8,
|
||||
unequalArgsCount: 9,
|
||||
unequalArgs: 10
|
||||
unequalArgs: 10,
|
||||
invalidNominal: 11
|
||||
} as const;
|
||||
|
||||
export type SubstitutionErrorType = (typeof SubstitutionErrorType)[keyof typeof SubstitutionErrorType];
|
||||
|
|
|
@ -1,11 +1,13 @@
|
|||
'use client';
|
||||
|
||||
import { Controller, useForm } from 'react-hook-form';
|
||||
import { Controller, useForm, useWatch } from 'react-hook-form';
|
||||
import { zodResolver } from '@hookform/resolvers/zod';
|
||||
import clsx from 'clsx';
|
||||
|
||||
import { HelpTopic } from '@/features/help';
|
||||
import { SubstitutionValidator } from '@/features/oss/models/oss-api';
|
||||
|
||||
import { ErrorField } from '@/components/input';
|
||||
import { ErrorField, TextArea } from '@/components/input';
|
||||
import { ModalForm } from '@/components/modal';
|
||||
import { useDialogsStore } from '@/stores/dialogs';
|
||||
|
||||
|
@ -34,6 +36,10 @@ export function DlgSubstituteCst() {
|
|||
},
|
||||
mode: 'onChange'
|
||||
});
|
||||
const substitutions = useWatch({ control, name: 'substitutions' });
|
||||
|
||||
const validator = new SubstitutionValidator([schema], substitutions);
|
||||
const isCorrect = validator.validate();
|
||||
|
||||
function onSubmit(data: ISubstitutionsDTO) {
|
||||
return cstSubstitute({ itemID: schema.id, data: data }).then(() => onSubstitute(data));
|
||||
|
@ -62,7 +68,13 @@ export function DlgSubstituteCst() {
|
|||
/>
|
||||
)}
|
||||
/>
|
||||
<ErrorField className='mt-2' error={errors.substitutions} />
|
||||
<ErrorField className='-mt-6 px-3' error={errors.substitutions} />
|
||||
<TextArea
|
||||
disabled
|
||||
value={validator.msg}
|
||||
rows={4}
|
||||
className={clsx('mt-3', isCorrect ? '' : 'border-(--acc-fg-red) border-2')}
|
||||
/>
|
||||
</ModalForm>
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user