'use client'; import clsx from 'clsx'; import { useEffect, useState } from 'react'; import { ModalForm } from '@/components/Modal'; import { TabLabel, TabList, TabPanel, Tabs } from '@/components/Tabs'; import { HelpTopic } from '@/features/help/models/helpTopic'; import { useLibrary } from '@/features/library/backend/useLibrary'; import { LibraryItemID } from '@/features/library/models/library'; import { useDialogsStore } from '@/stores/dialogs'; import { describeOperationType, labelOperationType } from '@/utils/labels'; import { IOperationCreateDTO } from '../../backend/api'; import { IOperationSchema, OperationID, OperationType } from '../../models/oss'; import TabInputOperation from './TabInputOperation'; import TabSynthesisOperation from './TabSynthesisOperation'; export interface DlgCreateOperationProps { oss: IOperationSchema; onCreate: (data: IOperationCreateDTO) => void; initialInputs: OperationID[]; } export enum TabID { INPUT = 0, SYNTHESIS = 1 } function DlgCreateOperation() { const { items: libraryItems } = useLibrary(); const { oss, onCreate, initialInputs } = useDialogsStore(state => state.props as DlgCreateOperationProps); const [activeTab, setActiveTab] = useState(initialInputs.length > 0 ? TabID.SYNTHESIS : TabID.INPUT); const [alias, setAlias] = useState(''); const [title, setTitle] = useState(''); const [comment, setComment] = useState(''); const [inputs, setInputs] = useState(initialInputs); const [attachedID, setAttachedID] = useState(undefined); const [createSchema, setCreateSchema] = useState(false); const isValid = (() => { if (alias === '') { return false; } if (activeTab === TabID.SYNTHESIS && inputs.length === 0) { return false; } if (activeTab === TabID.INPUT && !attachedID) { if (oss.items.some(operation => operation.alias === alias)) { return false; } } return true; })(); useEffect(() => { if (attachedID) { const schema = libraryItems.find(value => value.id === attachedID); if (schema) { setAlias(schema.alias); setTitle(schema.title); setComment(schema.comment); } } }, [attachedID, libraryItems]); const handleSubmit = () => { onCreate({ item_data: { position_x: 0, position_y: 0, alias: alias, title: title, comment: comment, operation_type: activeTab === TabID.INPUT ? OperationType.INPUT : OperationType.SYNTHESIS, result: activeTab === TabID.INPUT ? attachedID ?? null : null }, positions: [], arguments: activeTab === TabID.INPUT ? undefined : inputs.length > 0 ? inputs : undefined, create_schema: createSchema }); return true; }; function handleSelectTab(newTab: TabID, last: TabID) { if (last === newTab) { return; } if (newTab === TabID.INPUT) { setAttachedID(undefined); } else { setInputs(initialInputs); } setActiveTab(newTab); } return ( ); } export default DlgCreateOperation;