@@ -2,19 +2,23 @@ import { combine } from '@atlaskit/pragmatic-drag-and-drop/combine';
22import { draggable } from '@atlaskit/pragmatic-drag-and-drop/element/adapter' ;
33import type { SystemStyleObject } from '@invoke-ai/ui-library' ;
44import { Button , Flex , Spacer } from '@invoke-ai/ui-library' ;
5+ import { useStore } from '@nanostores/react' ;
56import { useAppSelector } from 'app/store/storeHooks' ;
7+ import { IAINoContentFallback } from 'common/components/IAIImageFallback' ;
68import ScrollableContent from 'common/components/OverlayScrollbars/ScrollableContent' ;
79import { firefoxDndFix } from 'features/dnd/util' ;
810import { FormElementComponent } from 'features/nodes/components/sidePanel/builder/ContainerElementComponent' ;
911import { buildFormElementDndData , useBuilderDndMonitor } from 'features/nodes/components/sidePanel/builder/dnd-hooks' ;
1012import { WorkflowBuilderEditMenu } from 'features/nodes/components/sidePanel/builder/WorkflowBuilderMenu' ;
13+ import { $hasTemplates } from 'features/nodes/store/nodesSlice' ;
1114import { selectFormRootElementId , selectIsFormEmpty } from 'features/nodes/store/workflowSlice' ;
1215import type { FormElement } from 'features/nodes/types/workflow' ;
1316import { buildContainer , buildDivider , buildHeading , buildText } from 'features/nodes/types/workflow' ;
1417import { startCase } from 'lodash-es' ;
1518import type { RefObject } from 'react' ;
1619import { memo , useEffect , useRef , useState } from 'react' ;
1720import { useTranslation } from 'react-i18next' ;
21+ import { useGetOpenAPISchemaQuery } from 'services/api/endpoints/appInfo' ;
1822import { assert } from 'tsafe' ;
1923
2024const sx : SystemStyleObject = {
@@ -28,8 +32,7 @@ const sx: SystemStyleObject = {
2832
2933export const WorkflowBuilder = memo ( ( ) => {
3034 const { t } = useTranslation ( ) ;
31- const rootElementId = useAppSelector ( selectFormRootElementId ) ;
32- const isFormEmpty = useAppSelector ( selectIsFormEmpty ) ;
35+
3336 useBuilderDndMonitor ( ) ;
3437
3538 return (
@@ -47,16 +50,33 @@ export const WorkflowBuilder = memo(() => {
4750 < WorkflowBuilderEditMenu />
4851 </ Flex >
4952 < ScrollableContent >
50- < Flex sx = { sx } data-is-empty = { isFormEmpty } >
51- < FormElementComponent id = { rootElementId } />
52- </ Flex >
53+ < WorkflowBuilderContent />
5354 </ ScrollableContent >
5455 </ Flex >
5556 </ Flex >
5657 ) ;
5758} ) ;
5859WorkflowBuilder . displayName = 'WorkflowBuilder' ;
5960
61+ const WorkflowBuilderContent = memo ( ( ) => {
62+ const { t } = useTranslation ( ) ;
63+ const rootElementId = useAppSelector ( selectFormRootElementId ) ;
64+ const isFormEmpty = useAppSelector ( selectIsFormEmpty ) ;
65+ const openApiSchemaQuery = useGetOpenAPISchemaQuery ( ) ;
66+ const loadedTemplates = useStore ( $hasTemplates ) ;
67+
68+ if ( openApiSchemaQuery . isLoading || ! loadedTemplates ) {
69+ return < IAINoContentFallback label = { t ( 'nodes.loadingNodes' ) } icon = { null } /> ;
70+ }
71+
72+ return (
73+ < Flex sx = { sx } data-is-empty = { isFormEmpty } >
74+ < FormElementComponent id = { rootElementId } />
75+ </ Flex >
76+ ) ;
77+ } ) ;
78+ WorkflowBuilderContent . displayName = 'WorkflowBuilderContent' ;
79+
6080const useAddFormElementDnd = (
6181 type : Exclude < FormElement [ 'type' ] , 'node-field' > ,
6282 draggableRef : RefObject < HTMLElement >
0 commit comments