fix: stop building with abort controller (#3634)

* Added buildController and stopBuilding controllers

* Used stop building in header Stop button

* Set the build controller in API performstreamingrequest

* added setbuildcontroller to types
This commit is contained in:
Lucas Oliveira 2024-09-02 10:36:51 -03:00 committed by GitHub
commit 882c35ef6b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 13 additions and 1 deletions

View file

@ -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={

View file

@ -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,

View file

@ -79,6 +79,9 @@ const useFlowStore = create<FlowStoreType>((set, get) => ({
nodes: [],
edges: [],
isBuilding: false,
stopBuilding: () => {
get().buildController.abort();
},
isPending: true,
setHasIO: (hasIO) => {
set({ hasIO });
@ -766,6 +769,10 @@ const useFlowStore = create<FlowStoreType>((set, get) => ({
},
});
},
buildController: new AbortController(),
setBuildController: (controller) => {
set({ buildController: controller });
},
}));
export default useFlowStore;

View file

@ -180,4 +180,7 @@ export type FlowStoreType = {
edges?: Edge[];
viewport?: Viewport;
}) => void;
stopBuilding: () => void;
buildController: AbortController;
setBuildController: (controller: AbortController) => void;
};