Skip to content

Commit 34106a3

Browse files
committed
feat: zIndex management for Flex Nodes
1 parent 8c5a44b commit 34106a3

3 files changed

Lines changed: 46 additions & 1 deletion

File tree

src/components/shared/ReactFlow/FlowCanvas/FlexNode/FlexNodeEditor.tsx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { Paragraph, Text } from "@/components/ui/typography";
1212
import { useComponentSpec } from "@/providers/ComponentSpecProvider";
1313
import { updateSubgraphSpec } from "@/utils/subgraphUtils";
1414

15+
import { StackingControls } from "../../FlowControls/StackingControls";
1516
import { updateFlexNodeInComponentSpec } from "./interface";
1617
import type { FlexNodeData } from "./types";
1718

@@ -77,6 +78,8 @@ export const FlexNodeEditor = ({
7778
},
7879
]}
7980
/>
81+
82+
{!readOnly && <ZIndexEditor flexNode={flexNode} />}
8083
</BlockStack>
8184
);
8285
};
@@ -272,3 +275,39 @@ const ColorEditor = ({
272275
</ContentBlock>
273276
);
274277
};
278+
279+
const ZIndexEditor = ({ flexNode }: { flexNode: FlexNodeData }) => {
280+
const {
281+
componentSpec,
282+
currentSubgraphSpec,
283+
currentSubgraphPath,
284+
setComponentSpec,
285+
} = useComponentSpec();
286+
287+
const handleStackingControlChange = (newZIndex: number) => {
288+
const updatedSubgraphSpec = updateFlexNodeInComponentSpec(
289+
currentSubgraphSpec,
290+
{
291+
...flexNode,
292+
zIndex: newZIndex,
293+
},
294+
);
295+
296+
const newRootSpec = updateSubgraphSpec(
297+
componentSpec,
298+
currentSubgraphPath,
299+
updatedSubgraphSpec,
300+
);
301+
302+
setComponentSpec(newRootSpec);
303+
};
304+
305+
return (
306+
<ContentBlock title="Stacking">
307+
<StackingControls
308+
nodeId={flexNode.id}
309+
onChange={handleStackingControlChange}
310+
/>
311+
</ContentBlock>
312+
);
313+
};

src/components/shared/ReactFlow/FlowCanvas/utils/addFlexNode.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { type ComponentSpec } from "@/utils/componentSpec";
66
import { updateFlexNodeInComponentSpec } from "../FlexNode/interface";
77
import type { FlexNodeData } from "../FlexNode/types";
88
import { DEFAULT_FLEX_NODE_SIZE, DEFAULT_STICKY_NOTE } from "../FlexNode/utils";
9+
import { Z_INDEX_RANGES } from "./zIndex";
910

1011
interface AddFlexNodeResult {
1112
spec: ComponentSpec;
@@ -45,7 +46,7 @@ const addFlexNode = (
4546
metadata,
4647
size: DEFAULT_FLEX_NODE_SIZE,
4748
position: position,
48-
zIndex: 1,
49+
zIndex: Z_INDEX_RANGES.flex.default,
4950
};
5051

5152
const newComponentSpec = updateFlexNodeInComponentSpec(

src/components/shared/ReactFlow/FlowCanvas/utils/zIndex.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ export const Z_INDEX_RANGES: Record<NodeType, zIndexDefinition> = {
2929
max: 100,
3030
default: 100,
3131
},
32+
flex: {
33+
min: -100,
34+
max: 1000,
35+
default: 0,
36+
},
3237
};
3338

3439
const getNodeZIndexDefault = (node: Node): number => {

0 commit comments

Comments
 (0)