2025-02-12 00:14:18 +03:00
|
|
|
'use client';
|
|
|
|
|
|
|
|
import { Controller, useFormContext, useWatch } from 'react-hook-form';
|
|
|
|
|
2025-03-12 11:54:32 +03:00
|
|
|
import { useRSForms } from '@/features/rsform/backend/use-rsforms';
|
2025-02-26 00:16:22 +03:00
|
|
|
import { PickSubstitutions } from '@/features/rsform/components';
|
2025-02-12 21:36:03 +03:00
|
|
|
|
2025-03-12 12:04:23 +03:00
|
|
|
import { TextArea } from '@/components/input';
|
2025-02-12 00:14:18 +03:00
|
|
|
import { useDialogsStore } from '@/stores/dialogs';
|
2024-07-29 16:55:48 +03:00
|
|
|
|
2025-04-20 16:20:43 +03:00
|
|
|
import { type IUpdateOperationDTO } from '../../backend/types';
|
2025-03-12 11:54:32 +03:00
|
|
|
import { SubstitutionValidator } from '../../models/oss-api';
|
2025-02-12 21:36:03 +03:00
|
|
|
|
2025-03-12 11:54:32 +03:00
|
|
|
import { type DlgEditOperationProps } from './dlg-edit-operation';
|
2025-02-10 01:32:16 +03:00
|
|
|
|
2025-02-19 23:29:45 +03:00
|
|
|
export function TabSynthesis() {
|
2025-02-12 00:14:18 +03:00
|
|
|
const { oss } = useDialogsStore(state => state.props as DlgEditOperationProps);
|
2025-04-20 16:20:43 +03:00
|
|
|
const { control } = useFormContext<IUpdateOperationDTO>();
|
2025-02-12 00:14:18 +03:00
|
|
|
const inputs = useWatch({ control, name: 'arguments' });
|
|
|
|
const substitutions = useWatch({ control, name: 'substitutions' });
|
2024-07-29 16:55:48 +03:00
|
|
|
|
2025-02-12 00:14:18 +03:00
|
|
|
const schemasIDs = inputs
|
|
|
|
.map(id => oss.operationByID.get(id)!)
|
|
|
|
.map(operation => operation.result)
|
|
|
|
.filter(id => id !== null);
|
|
|
|
const schemas = useRSForms(schemasIDs);
|
|
|
|
|
|
|
|
const validator = new SubstitutionValidator(schemas, substitutions);
|
|
|
|
const isCorrect = validator.validate();
|
2024-07-29 16:55:48 +03:00
|
|
|
|
|
|
|
return (
|
2025-01-23 19:41:31 +03:00
|
|
|
<div className='cc-fade-in cc-column mt-3'>
|
2025-02-12 00:14:18 +03:00
|
|
|
<Controller
|
|
|
|
name='substitutions'
|
|
|
|
control={control}
|
|
|
|
render={({ field }) => (
|
|
|
|
<PickSubstitutions
|
|
|
|
schemas={schemas}
|
|
|
|
rows={8}
|
|
|
|
value={field.value}
|
|
|
|
onChange={field.onChange}
|
|
|
|
suggestions={validator.suggestions}
|
|
|
|
/>
|
|
|
|
)}
|
2025-01-23 19:41:31 +03:00
|
|
|
/>
|
2025-02-12 00:14:18 +03:00
|
|
|
|
2025-03-13 14:40:56 +03:00
|
|
|
<TextArea disabled value={validator.msg} rows={4} className={isCorrect ? '' : 'border-(--acc-fg-red) border-2'} />
|
2025-01-23 19:41:31 +03:00
|
|
|
</div>
|
2024-07-29 16:55:48 +03:00
|
|
|
);
|
|
|
|
}
|