// 已移除对d3的引用 import React, { useState } from 'react'; import { observer } from 'mobx-react-lite'; import Box from '@mui/material/Box'; import Stack from '@mui/material/Stack'; import IconButton from '@mui/material/IconButton'; import AddIcon from '@mui/icons-material/Add'; import D3Graph from './D3Graph'; import { ObjectCard, ProcessCard, EditObjectCard } from './Cards'; import { RectWatcher } from './RectWatcher'; import { globalStorage } from '@/storage'; export default observer(() => { const { outlineRenderingStepTaskCards, focusingStepTaskId } = globalStorage; const [renderCount, setRenderCount] = useState(0); const [addObjectHover, setAddObjectHover] = useState(false); const [isAddingObject, setIsAddingObject] = useState(false); const [activeObjectAdd, setActiveObjectAdd] = useState(''); const [activeProcessIdAdd, setactiveProcessIdAdd] = useState(''); const handleProcessClick = (processName: string) => { if (processName === focusingStepTaskId) { globalStorage.setFocusingStepTaskId(undefined); } else { globalStorage.setFocusingStepTaskId(processName); } }; const finishAddInitialObject = (objectName: string) => { setIsAddingObject(false); globalStorage.addUserInput(objectName); }; const addInitialObject = () => setIsAddingObject(true); const handleObjectAdd = (objectName: string) => setActiveObjectAdd(activeObjectAdd === objectName ? '' : objectName); const handleProcessAdd = (processName: string) => setactiveProcessIdAdd( activeProcessIdAdd === processName ? '' : processName, ); const cardRefMap = new Map>(); const getCardRef = (cardId: string) => { if (cardRefMap.has(cardId)) { return cardRefMap.get(cardId); } else { cardRefMap.set(cardId, React.createRef()); return cardRefMap.get(cardId); } }; const handleEditContent = (stepTaskId: string, newContent: string) => { globalStorage.setStepTaskContent(stepTaskId, newContent); }; const WidthRatio = ['30%', '15%', '52.5%']; const [cardRefMapReady, setCardRefMapReady] = React.useState(false); React.useEffect(() => { setCardRefMapReady(true); setRenderCount(old => (old + 1) % 10); }, []); React.useEffect(() => { if (activeObjectAdd !== '' && activeProcessIdAdd !== '') { if ( outlineRenderingStepTaskCards .filter(({ id }) => id === activeProcessIdAdd)[0] .inputs.includes(activeObjectAdd) ) { globalStorage.removeStepTaskInput(activeProcessIdAdd, activeObjectAdd); } else { globalStorage.addStepTaskInput(activeProcessIdAdd, activeObjectAdd); } // globalStorage.addStepTaskInput(activeProcessIdAdd, activeObjectAdd); setActiveObjectAdd(''); setactiveProcessIdAdd(''); } }, [activeObjectAdd, activeProcessIdAdd]); return ( { globalStorage.renderLines({ delay: 0, repeat: 2 }); }} > setRenderCount(old => (old + 1) % 10)}> {isAddingObject ? ( ) : ( setAddObjectHover(true)} onMouseOut={() => setAddObjectHover(false)} onClick={() => addInitialObject()} sx={{ display: 'inline-flex', paddingTop: '6px' }} > )} {globalStorage.userInputs.map(initialInput => ( id === activeProcessIdAdd)[0] .inputs.includes(initialInput), } : {})} handleAddActive={handleObjectAdd} /> ))} {outlineRenderingStepTaskCards.map( ({ id, name, output, agentIcons, agents, content, ref }, index) => ( {output && ( id) .indexOf(activeProcessIdAdd) > index } {...(activeProcessIdAdd !== '' ? { addOrRemove: !outlineRenderingStepTaskCards .filter(({ id }) => id === activeProcessIdAdd)[0] .inputs.includes(output), } : {})} handleAddActive={handleObjectAdd} /> )} {name && ( )} ), )} {cardRefMapReady && ( { const relations: { type: string; stepTaskId: string; stepCardName: string; objectCardName: string; }[] = []; inputs.forEach(input => { relations.push({ type: 'input', stepTaskId: id, stepCardName: `process.${name}`, objectCardName: `object.${input}`, }); }); if (output) { relations.push({ type: 'output', stepTaskId: id, stepCardName: `process.${name}`, objectCardName: `object.${output}`, }); } return relations; }) .flat()} forceRender={renderCount} /> )} ); });