Skip to content

Commit 0033426

Browse files
Only allow project drag and drop when no dialog open (#357)
1 parent b8efb6f commit 0033426

File tree

2 files changed

+73
-53
lines changed

2 files changed

+73
-53
lines changed

src/App.tsx

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import EditCodeDialog from "./components/EditCodeDialog";
1313
import ErrorBoundary from "./components/ErrorBoundary";
1414
import ErrorHandlerErrorView from "./components/ErrorHandlerErrorView";
1515
import NotFound from "./components/NotFound";
16-
import ProjectDropTarget from "./components/ProjectDropTarget";
1716
import { ConnectProvider } from "./connect-actions-hooks";
1817
import { ConnectStatusProvider } from "./connect-status-hooks";
1918
import { ConnectionStageProvider } from "./connection-stage-hooks";
@@ -70,9 +69,7 @@ const Layout = () => {
7069
<ScrollRestoration />
7170
<ProjectProvider driverRef={driverRef}>
7271
<EditCodeDialog ref={driverRef} />
73-
<ProjectDropTarget>
74-
<Outlet />
75-
</ProjectDropTarget>
72+
<Outlet />
7673
</ProjectProvider>
7774
</ErrorBoundary>
7875
);

src/components/DefaultPageLayout.tsx

Lines changed: 72 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import { useNavigate } from "react-router";
1717
import { useDeployment } from "../deployment";
1818
import { flags } from "../flags";
1919
import { useProject } from "../hooks/project-hooks";
20-
import { TrainModelDialogStage } from "../model";
20+
import { SaveStep, TrainModelDialogStage } from "../model";
2121
import { SessionPageId } from "../pages-config";
2222
import Tour from "../pages/Tour";
2323
import { useStore } from "../store";
@@ -33,6 +33,12 @@ import SaveDialogs from "./SaveDialogs";
3333
import SettingsMenu from "./SettingsMenu";
3434
import ToolbarMenu from "./ToolbarMenu";
3535
import 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

3743
interface 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

Comments
 (0)