'use client'; import clsx from 'clsx'; import { useEffect, useState } from 'react'; import { TabList, TabPanel, Tabs } from 'react-tabs'; import { useLibrary } from '@/backend/library/useLibrary'; import { IOperationCreateDTO } from '@/backend/oss/api'; import Modal from '@/components/ui/Modal'; import TabLabel from '@/components/ui/TabLabel'; import { LibraryItemID } from '@/models/library'; import { HelpTopic } from '@/models/miscellaneous'; import { IOperationSchema, OperationID, OperationType } from '@/models/oss'; import { useDialogsStore } from '@/stores/dialogs'; import { describeOperationType, labelOperationType } from '@/utils/labels'; 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 }); }; 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;