/* * Copyright 2025 coze-dev Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import 'reflect-metadata'; import { HTML5Backend } from 'react-dnd-html5-backend'; import { DndProvider } from 'react-dnd'; import { forwardRef, useEffect, type PropsWithChildren } from 'react'; import { useShallow } from 'zustand/react/shallow'; import { QueryClientProvider } from '@tanstack/react-query'; import { GlobalError } from '@coze-foundation/layout'; import { WorkflowRenderProvider } from '@coze-workflow/render'; import { WorkflowNodesContainerModule } from '@coze-workflow/nodes'; import { WorkflowHistoryContainerModule } from '@coze-workflow/history'; import { PUBLIC_SPACE_ID } from '@coze-workflow/base/constants'; import { workflowQueryClient } from '@coze-workflow/base/api'; import { ErrorBoundary, logger } from '@coze-arch/logger'; import { useSpaceStore } from '@coze-arch/bot-studio-store'; import { type WorkflowPlaygroundProps, type WorkflowPlaygroundRef, } from './typing'; import { useWorkflowPreset } from './hooks'; import { WorkflowPageContainerModule } from './container/workflow-page-container-module'; import WorkflowContainer from './components/workflow-container'; const loggerWithScope = logger.createLoggerWith({ ctx: { namespace: 'workflow-error', }, }); const PlayGroundErrorBoundary = (props: PropsWithChildren) => { // 运维平台下使用自己的 ErrorBoundary 展示错误,可以展示更详细的错误 // 同时避免运维平台下的白屏错误统计进去 if (IS_BOT_OP) { return <>{props.children}; } return ( (IS_BOT_OP ? null : )} errorBoundaryName="workflow-error-boundary" logger={loggerWithScope} > {props.children} ); }; export const WorkflowPlayground = forwardRef< WorkflowPlaygroundRef, WorkflowPlaygroundProps >(({ spaceId = PUBLIC_SPACE_ID, parentContainer, ...props }, ref) => { console.log('debugger workflow playground'); const { spaceList, setSpace, fetchSpaces, checkSpaceID, inited } = useSpaceStore( useShallow(store => ({ spaceList: store.spaceList, setSpace: store.setSpace, fetchSpaces: store.fetchSpaces, checkSpaceID: store.checkSpaceID, inited: store.inited, })), ); useEffect(() => { let isActive = true; const initSpace = async () => { if (!inited) { await fetchSpaces(true); } if (!isActive) { return; } checkSpaceID(spaceId); if (spaceId !== PUBLIC_SPACE_ID) { setSpace(spaceId); } }; initSpace(); return () => { isActive = false; }; }, [spaceId, fetchSpaces, setSpace, checkSpaceID]); const preset = useWorkflowPreset(props); if (!inited) { return null; } return ( ); });