'use client'; import clsx from 'clsx'; import { useEffect, useMemo, useState } from 'react'; import { TabList, TabPanel, Tabs } from 'react-tabs'; import Modal, { ModalProps } from '@/components/ui/Modal'; import TabLabel from '@/components/ui/TabLabel'; import useRSFormDetails from '@/hooks/useRSFormDetails'; import { LibraryItemID } from '@/models/library'; import { IRSForm, IRSFormInlineData, ISubstitution } from '@/models/rsform'; import ConstituentsTab from './ConstituentsTab'; import SchemaTab from './SchemaTab'; import SubstitutionsTab from './SubstitutionsTab'; interface DlgInlineSynthesisProps extends Pick { receiver: IRSForm; onInlineSynthesis: (data: IRSFormInlineData) => void; } export enum TabID { SCHEMA = 0, SELECTIONS = 1, SUBSTITUTIONS = 2 } function DlgInlineSynthesis({ hideWindow, receiver, onInlineSynthesis }: DlgInlineSynthesisProps) { const [activeTab, setActiveTab] = useState(TabID.SCHEMA); const [donorID, setDonorID] = useState(undefined); const [selected, setSelected] = useState([]); const [substitutions, setSubstitutions] = useState([]); const source = useRSFormDetails({ target: donorID ? String(donorID) : undefined }); const validated = useMemo(() => !!source.schema && selected.length > 0, [source.schema, selected]); function handleSubmit() { if (!source.schema) { return; } const data: IRSFormInlineData = { source: source.schema?.id, receiver: receiver.id, items: selected, substitutions: substitutions.map(item => ({ original: item.deleteRight ? item.rightCst.id : item.leftCst.id, substitution: item.deleteRight ? item.leftCst.id : item.rightCst.id, transfer_term: !item.deleteRight && item.takeLeftTerm })) }; onInlineSynthesis(data); } useEffect(() => setSelected(source.schema ? source.schema?.items.map(cst => cst.id) : []), [source.schema]); return ( ); } export default DlgInlineSynthesis;