diff --git a/invokeai/frontend/web/src/features/ui/layouts/auto-layout-context.tsx b/invokeai/frontend/web/src/features/ui/layouts/auto-layout-context.tsx index f41027124f..c887176c44 100644 --- a/invokeai/frontend/web/src/features/ui/layouts/auto-layout-context.tsx +++ b/invokeai/frontend/web/src/features/ui/layouts/auto-layout-context.tsx @@ -1,22 +1,21 @@ import type { FocusRegionName } from 'common/hooks/focus'; import type { IDockviewPanelProps, IGridviewPanelProps } from 'dockview'; import type { TabName } from 'features/ui/store/uiTypes'; -import type { FunctionComponent, PropsWithChildren, RefObject } from 'react'; +import type { FunctionComponent, PropsWithChildren } from 'react'; import { createContext, memo, useContext, useMemo } from 'react'; import { AutoLayoutPanelContainer } from './AutoLayoutPanelContainer'; type AutoLayoutContextValue = { tab: TabName; - rootRef: RefObject; }; const AutoLayoutContext = createContext(null); export const AutoLayoutProvider = (props: PropsWithChildren) => { - const { tab, rootRef, children } = props; + const { tab, children } = props; - const value = useMemo(() => ({ tab, rootRef }), [tab, rootRef]); + const value = useMemo(() => ({ tab }), [tab]); return {children}; }; diff --git a/invokeai/frontend/web/src/features/ui/layouts/canvas-tab-auto-layout.tsx b/invokeai/frontend/web/src/features/ui/layouts/canvas-tab-auto-layout.tsx index b344824374..c1bbb58386 100644 --- a/invokeai/frontend/web/src/features/ui/layouts/canvas-tab-auto-layout.tsx +++ b/invokeai/frontend/web/src/features/ui/layouts/canvas-tab-auto-layout.tsx @@ -25,7 +25,7 @@ import { AutoLayoutProvider, useAutoLayoutContext, withPanelContainer } from 'fe import { TabWithoutCloseButton } from 'features/ui/layouts/TabWithoutCloseButton'; import type { TabName } from 'features/ui/store/uiTypes'; import { dockviewTheme } from 'features/ui/styles/theme'; -import { memo, useCallback, useEffect, useRef, useState } from 'react'; +import { memo, useCallback, useEffect } from 'react'; import { CanvasTabLeftPanel } from './CanvasTabLeftPanel'; import { CanvasWorkspacePanel } from './CanvasWorkspacePanel'; @@ -326,30 +326,21 @@ const initializeRootPanelLayout = (api: GridviewApi) => { }; export const CanvasTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('canvas'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('canvas'); - }; - }, [rootApi]); + }, + [] + ); return ( - + { }; export const GenerateTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('generate'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('generate'); - }; - }, [rootApi]); + }, + [] + ); return ( - + { }; export const ModelsTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('models'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('models'); - }; - }, [rootApi]); + }, + [] + ); return ( - + { }; export const QueueTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('queue'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('queue'); - }; - }, [rootApi]); + }, + [] + ); return ( - + { }; export const UpscalingTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('upscaling'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('upscaling'); - }; - }, [rootApi]); + }, + [] + ); return ( - + { }; export const WorkflowsTabAutoLayout = memo(() => { - const rootRef = useRef(null); - const [rootApi, setRootApi] = useState(null); const onReady = useCallback(({ api }) => { - setRootApi(api); + initializeRootPanelLayout(api); + navigationApi.onTabReady('workflows'); }, []); - useEffect(() => { - if (!rootApi) { - return; - } - - initializeRootPanelLayout(rootApi); - - navigationApi.onSwitchedTab(); - - return () => { + useEffect( + () => () => { navigationApi.unregisterTab('workflows'); - }; - }, [rootApi]); + }, + [] + ); return ( - +