'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 { ICstSubstitute } from '@/models/oss'; import { ConstituentaID, IInlineSynthesisData, IRSForm } from '@/models/rsform'; import TabConstituents from './TabConstituents'; import TabSchema from './TabSchema'; import TabSubstitutions from './TabSubstitutions'; interface DlgInlineSynthesisProps extends Pick { receiver: IRSForm; onInlineSynthesis: (data: IInlineSynthesisData) => 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: IInlineSynthesisData = { source: source.schema?.id, receiver: receiver.id, items: selected, substitutions: substitutions }; onInlineSynthesis(data); } useEffect(() => { setSelected(source.schema ? source.schema?.items.map(cst => cst.id) : []); setSubstitutions([]); }, [source.schema]); const schemaPanel = useMemo( () => ( ), [donorID] ); const itemsPanel = useMemo( () => ( ), [source.schema, source.loading, selected] ); const substitutesPanel = useMemo( () => ( ), [source.schema, source.loading, receiver, selected, substitutions] ); return ( {schemaPanel} {itemsPanel} {substitutesPanel} ); } export default DlgInlineSynthesis;