fix(ui): edge case where you get stuck w/ the workflow list menu open, or it opens unexpectedly

- When resetting workflows, retain the current mode state
- Remove the useEffect that reacted to the `isCleanEditor` flag to prevent getting menu getting locked open
This commit is contained in:
psychedelicious
2024-10-10 13:33:17 +10:00
parent 4050f7deae
commit 99e88e601d
2 changed files with 8 additions and 11 deletions

View File

@@ -4,11 +4,11 @@ import { Box, Flex } from '@invoke-ai/ui-library';
import { useAppSelector } from 'app/store/storeHooks';
import { overlayScrollbarsParams } from 'common/components/OverlayScrollbars/constants';
import { useWorkflowListMenu } from 'features/nodes/store/workflowListMenu';
import { selectCleanEditor, selectWorkflowMode } from 'features/nodes/store/workflowSlice';
import { selectWorkflowMode } from 'features/nodes/store/workflowSlice';
import ResizeHandle from 'features/ui/components/tabs/ResizeHandle';
import { OverlayScrollbarsComponent } from 'overlayscrollbars-react';
import type { CSSProperties } from 'react';
import { memo, useCallback, useEffect, useRef } from 'react';
import { memo, useCallback, useRef } from 'react';
import type { ImperativePanelGroupHandle } from 'react-resizable-panels';
import { Panel, PanelGroup } from 'react-resizable-panels';
@@ -30,14 +30,6 @@ const NodeEditorPanelGroup = () => {
const panelGroupRef = useRef<ImperativePanelGroupHandle>(null);
const workflowListMenu = useWorkflowListMenu();
const isCleanEditor = useAppSelector(selectCleanEditor);
useEffect(() => {
if (isCleanEditor) {
workflowListMenu.open();
}
}, [isCleanEditor, workflowListMenu]);
const handleDoubleClickHandle = useCallback(() => {
if (!panelGroupRef.current) {
return;

View File

@@ -159,7 +159,12 @@ export const workflowSlice = createSlice({
};
});
builder.addCase(nodeEditorReset, () => deepClone(initialWorkflowState));
builder.addCase(nodeEditorReset, (state) => {
const mode = state.mode;
const newState = deepClone(initialWorkflowState);
newState.mode = mode;
return newState;
});
builder.addCase(nodesChanged, (state, action) => {
// If a node was removed, we should remove any exposed fields that were associated with it. However, node changes