'use client'; import { zodResolver } from '@hookform/resolvers/zod'; import clsx from 'clsx'; import { Suspense, useState } from 'react'; import { FormProvider, useForm, useWatch } from 'react-hook-form'; import { Loader } from '@/components/Loader'; import { ModalForm } from '@/components/Modal'; import { TabLabel, TabList, TabPanel, Tabs } from '@/components/Tabs'; import { HelpTopic } from '@/features/help'; import { useDialogsStore } from '@/stores/dialogs'; import { IOperationPosition, IOperationUpdateDTO, schemaOperationUpdate } from '../../backend/types'; import { useOperationUpdate } from '../../backend/useOperationUpdate'; import { IOperation, IOperationSchema, OperationType } from '../../models/oss'; import TabArguments from './TabArguments'; import TabOperation from './TabOperation'; import TabSynthesis from './TabSynthesis'; export interface DlgEditOperationProps { oss: IOperationSchema; target: IOperation; positions: IOperationPosition[]; } export enum TabID { CARD = 0, ARGUMENTS = 1, SUBSTITUTION = 2 } function DlgEditOperation() { const { oss, target, positions } = useDialogsStore(state => state.props as DlgEditOperationProps); const { operationUpdate } = useOperationUpdate(); const methods = useForm({ resolver: zodResolver(schemaOperationUpdate), defaultValues: { item_data: { alias: target.alias, title: target.alias, comment: target.comment }, arguments: target.arguments, substitutions: target.substitutions.map(sub => ({ original: sub.original, substitution: sub.substitution })), positions: positions } }); const alias = useWatch({ control: methods.control, name: 'item_data.alias' }); const canSubmit = alias !== ''; const [activeTab, setActiveTab] = useState(TabID.CARD); function onSubmit(data: IOperationUpdateDTO) { return operationUpdate({ itemID: oss.id, data }); } return ( void methods.handleSubmit(onSubmit)(event)} className='w-[40rem] px-6 h-[32rem]' helpTopic={HelpTopic.UI_SUBSTITUTIONS} hideHelpWhen={() => activeTab !== TabID.SUBSTITUTION} > {target.operation_type === OperationType.SYNTHESIS ? ( ) : null} {target.operation_type === OperationType.SYNTHESIS ? ( ) : null} {target.operation_type === OperationType.SYNTHESIS ? ( ) : null} {target.operation_type === OperationType.SYNTHESIS ? ( }> ) : null} ); } export default DlgEditOperation;