@@ -17,7 +17,7 @@ import { useNavigate } from "react-router";
1717import { useDeployment } from "../deployment" ;
1818import { flags } from "../flags" ;
1919import { useProject } from "../hooks/project-hooks" ;
20- import { TrainModelDialogStage } from "../model" ;
20+ import { SaveStep , TrainModelDialogStage } from "../model" ;
2121import { SessionPageId } from "../pages-config" ;
2222import Tour from "../pages/Tour" ;
2323import { useStore } from "../store" ;
@@ -33,6 +33,12 @@ import SaveDialogs from "./SaveDialogs";
3333import SettingsMenu from "./SettingsMenu" ;
3434import ToolbarMenu from "./ToolbarMenu" ;
3535import TrainModelDialogs from "./TrainModelFlowDialogs" ;
36+ import ProjectDropTarget from "./ProjectDropTarget" ;
37+ import React from "react" ;
38+ import {
39+ ConnectionFlowStep ,
40+ useConnectionStage ,
41+ } from "../connection-stage-hooks" ;
3642
3743interface DefaultPageLayoutProps {
3844 titleId ?: string ;
@@ -54,7 +60,13 @@ const DefaultPageLayout = ({
5460 const intl = useIntl ( ) ;
5561 const navigate = useNavigate ( ) ;
5662 const isEditorOpen = useStore ( ( s ) => s . isEditorOpen ) ;
57- const stage = useStore ( ( s ) => s . trainModelDialogStage ) ;
63+ const isTourClosed = useStore ( ( s ) => s . tourState === undefined ) ;
64+ const isTrainDialogClosed = useStore (
65+ ( s ) => s . trainModelDialogStage === TrainModelDialogStage . Closed
66+ ) ;
67+ const { stage } = useConnectionStage ( ) ;
68+ const isConnectionDialogClosed = stage . flowStep === ConnectionFlowStep . None ;
69+ const isSaveDialogClosed = useStore ( ( s ) => s . save . step === SaveStep . None ) ;
5870
5971 const toast = useToast ( ) ;
6072 const { appNameFull } = useDeployment ( ) ;
@@ -85,60 +97,71 @@ const DefaultPageLayout = ({
8597 ) ;
8698 } , [ intl , navigate , toast ] ) ;
8799
100+ const ProjectDropTargetWhenNeeded =
101+ isTrainDialogClosed &&
102+ isTourClosed &&
103+ isConnectionDialogClosed &&
104+ isSaveDialogClosed
105+ ? ProjectDropTarget
106+ : React . Fragment ;
107+
88108 return (
89109 < >
90110 { /* Suppress dialogs to prevent overlapping dialogs */ }
91- { ! isEditorOpen && stage === TrainModelDialogStage . Closed && (
92- < ConnectionDialogs />
93- ) }
111+ { ! isEditorOpen &&
112+ isTrainDialogClosed &&
113+ isTourClosed &&
114+ isSaveDialogClosed && < ConnectionDialogs /> }
94115 { ! isEditorOpen && < TrainModelDialogs /> }
95- { ! isEditorOpen && stage === TrainModelDialogStage . Closed && < Tour /> }
116+ { ! isEditorOpen && < Tour /> }
96117 < DownloadDialogs />
97118 < SaveDialogs />
98- < VStack
99- minH = "100dvh"
100- w = "100%"
101- alignItems = "stretch"
102- spacing = { 0 }
103- bgColor = "whitesmoke"
104- >
105- < VStack zIndex = { 1 } position = "sticky" top = { 0 } gap = { 0 } >
106- < ActionBar
107- w = "100%"
108- itemsCenter = {
109- < >
110- { showPageTitle && (
111- < Heading size = "md" fontWeight = "normal" color = "white" >
112- < FormattedMessage id = { titleId } />
113- </ Heading >
114- ) }
115- </ >
116- }
117- itemsLeft = { toolbarItemsLeft || < AppLogo /> }
118- itemsRight = {
119- < >
120- < HStack spacing = { 3 } display = { { base : "none" , lg : "flex" } } >
121- { toolbarItemsRight }
122- < SettingsMenu />
123- </ HStack >
124- < HelpMenu />
125- < ToolbarMenu
126- isMobile
127- variant = "plain"
128- label = { intl . formatMessage ( { id : "main-menu" } ) }
129- >
130- { menuItems }
131- < LanguageMenuItem />
132- </ ToolbarMenu >
133- </ >
134- }
135- />
136- { flags . preReleaseNotice && < PreReleaseNotice /> }
119+ < ProjectDropTargetWhenNeeded >
120+ < VStack
121+ minH = "100dvh"
122+ w = "100%"
123+ alignItems = "stretch"
124+ spacing = { 0 }
125+ bgColor = "whitesmoke"
126+ >
127+ < VStack zIndex = { 1 } position = "sticky" top = { 0 } gap = { 0 } >
128+ < ActionBar
129+ w = "100%"
130+ itemsCenter = {
131+ < >
132+ { showPageTitle && (
133+ < Heading size = "md" fontWeight = "normal" color = "white" >
134+ < FormattedMessage id = { titleId } />
135+ </ Heading >
136+ ) }
137+ </ >
138+ }
139+ itemsLeft = { toolbarItemsLeft || < AppLogo /> }
140+ itemsRight = {
141+ < >
142+ < HStack spacing = { 3 } display = { { base : "none" , lg : "flex" } } >
143+ { toolbarItemsRight }
144+ < SettingsMenu />
145+ </ HStack >
146+ < HelpMenu />
147+ < ToolbarMenu
148+ isMobile
149+ variant = "plain"
150+ label = { intl . formatMessage ( { id : "main-menu" } ) }
151+ >
152+ { menuItems }
153+ < LanguageMenuItem />
154+ </ ToolbarMenu >
155+ </ >
156+ }
157+ />
158+ { flags . preReleaseNotice && < PreReleaseNotice /> }
159+ </ VStack >
160+ < Flex flexGrow = { 1 } flexDir = "column" >
161+ { children }
162+ </ Flex >
137163 </ VStack >
138- < Flex flexGrow = { 1 } flexDir = "column" >
139- { children }
140- </ Flex >
141- </ VStack >
164+ </ ProjectDropTargetWhenNeeded >
142165 </ >
143166 ) ;
144167} ;
0 commit comments