diff --git a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx index 48860766ce63..fe5d7ee358a3 100644 --- a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx +++ b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx @@ -50,6 +50,7 @@ export const MenuBar = ({}: {}): JSX.Element => { const updatedAt = currentSavedFlow?.updated_at; const onFlowPage = useFlowStore((state) => state.onFlowPage); const setCurrentFlow = useFlowsManagerStore((state) => state.setCurrentFlow); + const stopBuilding = useFlowStore((state) => state.stopBuilding); const changesNotSaved = customStringify(currentFlow) !== customStringify(currentSavedFlow) && @@ -310,7 +311,7 @@ export const MenuBar = ({}: {}): JSX.Element => { disabled={!isBuilding} onClick={(_) => { if (isBuilding) { - window.stop(); + stopBuilding(); } }} className={ diff --git a/src/frontend/src/controllers/API/api.tsx b/src/frontend/src/controllers/API/api.tsx index 43059e4939c1..e58e36bf5005 100644 --- a/src/frontend/src/controllers/API/api.tsx +++ b/src/frontend/src/controllers/API/api.tsx @@ -228,6 +228,7 @@ async function performStreamingRequest({ headers["Authorization"] = `Bearer ${accessToken}`; } const controller = new AbortController(); + useFlowStore.getState().setBuildController(controller); const params = { method: method, headers: headers, diff --git a/src/frontend/src/stores/flowStore.ts b/src/frontend/src/stores/flowStore.ts index 00c77eb294d9..ef9a637a4985 100644 --- a/src/frontend/src/stores/flowStore.ts +++ b/src/frontend/src/stores/flowStore.ts @@ -79,6 +79,9 @@ const useFlowStore = create((set, get) => ({ nodes: [], edges: [], isBuilding: false, + stopBuilding: () => { + get().buildController.abort(); + }, isPending: true, setHasIO: (hasIO) => { set({ hasIO }); @@ -766,6 +769,10 @@ const useFlowStore = create((set, get) => ({ }, }); }, + buildController: new AbortController(), + setBuildController: (controller) => { + set({ buildController: controller }); + }, })); export default useFlowStore; diff --git a/src/frontend/src/types/zustand/flow/index.ts b/src/frontend/src/types/zustand/flow/index.ts index c27e056e24ba..ac4705d8ebf4 100644 --- a/src/frontend/src/types/zustand/flow/index.ts +++ b/src/frontend/src/types/zustand/flow/index.ts @@ -180,4 +180,7 @@ export type FlowStoreType = { edges?: Edge[]; viewport?: Viewport; }) => void; + stopBuilding: () => void; + buildController: AbortController; + setBuildController: (controller: AbortController) => void; };