Skip to content

Commit 4e580c1

Browse files
authored
Reopen Context Panel When a Node is Selected (#1442)
## Description <!-- Please provide a brief description of the changes made in this pull request. Include any relevant context or reasoning for the changes. --> Right-side context panel will automatically re-open if collapsed and a node is selected. ## Related Issue and Pull requests <!-- Link to any related issues using the format #<issue-number> --> Closes Shopify/oasis-frontend#355 ## Type of Change <!-- Please delete options that are not relevant --> - [x] Bug fix - [x] Improvement ## Checklist <!-- Please ensure the following are completed before submitting the PR --> - [ ] I have tested this does not break current pipelines / runs functionality - [ ] I have tested the changes on staging ## Screenshots (if applicable) <!-- Include any screenshots that might help explain the changes or provide visual context --> ## Test Instructions <!-- Detail steps and prerequisites for testing the changes in this PR --> ## Additional Comments <!-- Add any additional context or information that reviewers might need to know regarding this PR -->
1 parent 011aa55 commit 4e580c1

File tree

4 files changed

+29
-15
lines changed

4 files changed

+29
-15
lines changed

src/components/shared/ContextPanel/CollapsibleContextPanel.tsx

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import { useState } from "react";
2-
31
import { Button } from "@/components/ui/button";
42
import {
53
Collapsible,
@@ -8,21 +6,16 @@ import {
86
} from "@/components/ui/collapsible";
97
import { Icon } from "@/components/ui/icon";
108
import { VerticalResizeHandle } from "@/components/ui/resize-handle";
9+
import { useContextPanel } from "@/providers/ContextPanelProvider";
1110

1211
import { ContextPanel } from "./ContextPanel";
1312

1413
const MIN_WIDTH = 200;
1514
const MAX_WIDTH = 600;
1615
const DEFAULT_WIDTH = 400;
1716

18-
interface CollapsibleContextPanelProps {
19-
defaultOpen?: boolean;
20-
}
21-
22-
export function CollapsibleContextPanel({
23-
defaultOpen = true,
24-
}: CollapsibleContextPanelProps = {}) {
25-
const [open, setOpen] = useState(defaultOpen);
17+
export function CollapsibleContextPanel() {
18+
const { open, setOpen } = useContextPanel();
2619

2720
return (
2821
<Collapsible open={open} onOpenChange={setOpen} className="h-full">

src/components/shared/ReactFlow/FlowCanvas/IONode/IONode.tsx

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,11 @@ interface IONodeProps {
3030
const IONode = ({ type, data, selected = false }: IONodeProps) => {
3131
const { currentGraphSpec, currentSubgraphSpec, currentSubgraphPath } =
3232
useComponentSpec();
33-
const { setContent, clearContent } = useContextPanel();
33+
const {
34+
setContent,
35+
clearContent,
36+
setOpen: setContextPanelOpen,
37+
} = useContextPanel();
3438

3539
const isInput = type === "input";
3640
const isOutput = type === "output";
@@ -87,6 +91,8 @@ const IONode = ({ type, data, selected = false }: IONodeProps) => {
8791
/>,
8892
);
8993
}
94+
95+
setContextPanelOpen(true);
9096
}
9197

9298
return () => {

src/components/shared/ReactFlow/FlowCanvas/TaskNode/TaskNodeCard/TaskNodeCard.tsx

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,11 @@ const TaskNodeCard = () => {
4141
const isInAppEditorEnabled = useBetaFlagValue("in-app-component-editor");
4242
const { registerNode } = useNodesOverlay();
4343
const taskNode = useTaskNode();
44-
const { setContent, clearContent } = useContextPanel();
44+
const {
45+
setContent,
46+
clearContent,
47+
setOpen: setContextPanelOpen,
48+
} = useContextPanel();
4549
const { navigateToSubgraph } = useComponentSpec();
4650
const executionData = useExecutionDataOptional();
4751
const rootExecutionId = executionData?.rootExecutionId;
@@ -239,14 +243,21 @@ const TaskNodeCard = () => {
239243
useEffect(() => {
240244
if (selected && !isDragging) {
241245
setContent(taskConfigMarkup);
246+
setContextPanelOpen(true);
242247
}
243248

244249
return () => {
245250
if (selected) {
246251
clearContent();
247252
}
248253
};
249-
}, [selected, taskConfigMarkup, setContent, clearContent]);
254+
}, [
255+
selected,
256+
taskConfigMarkup,
257+
setContent,
258+
clearContent,
259+
setContextPanelOpen,
260+
]);
250261

251262
if (!taskSpec) {
252263
return null;

src/providers/ContextPanelProvider.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@ import {
1616

1717
type ContextPanelContextType = {
1818
content: ReactNode;
19+
open: boolean;
1920
setContent: (content: ReactNode) => void;
2021
clearContent: () => void;
22+
setOpen: (open: boolean) => void;
2123
};
2224

2325
const ContextPanelContext = createRequiredContext<ContextPanelContextType>(
@@ -38,7 +40,9 @@ export const ContextPanelProvider = ({
3840
children: ReactNode;
3941
}) => {
4042
const { setNodes } = useReactFlow();
43+
4144
const [content, setContentState] = useState<ReactNode>(defaultContent);
45+
const [open, setOpen] = useState(true);
4246

4347
const setContent = useCallback((content: ReactNode) => {
4448
setContentState(content);
@@ -64,8 +68,8 @@ export const ContextPanelProvider = ({
6468
}, [defaultContent]);
6569

6670
const value = useMemo(
67-
() => ({ content, setContent, clearContent }),
68-
[content, setContent, clearContent],
71+
() => ({ content, open, setContent, clearContent, setOpen }),
72+
[content, open, setContent, clearContent, setOpen],
6973
);
7074

7175
return (

0 commit comments

Comments
 (0)