Canvas: Add new nodes at random positions
Change-Id: I17ba195065bf8c2f7d1eea2091793766f0e0ac65
diff --git a/apps/canvas/front/src/components/resources.tsx b/apps/canvas/front/src/components/resources.tsx
index fbb1be7..ddb68ac 100644
--- a/apps/canvas/front/src/components/resources.tsx
+++ b/apps/canvas/front/src/components/resources.tsx
@@ -3,40 +3,38 @@
import { useCallback, useState } from "react";
import { Accordion, AccordionTrigger } from "./ui/accordion";
import { AccordionContent, AccordionItem } from "@radix-ui/react-accordion";
-import { AppNode, AppState, NodeType, useCategories, useStateStore } from "@/lib/state";
+import { AppState, NodeType, useCategories, useStateStore } from "@/lib/state";
import { CategoryItem } from "@/lib/categories";
import { Icon } from "./icon";
function addResource(i: CategoryItem<NodeType>, store: AppState) {
- const node = {
- id: uuidv4(),
- position: {
- x: 0,
- y: 0,
- },
- type: i.type,
- connectable: true,
- data: i.init,
- selected: true,
- };
- const nodes = store.nodes.map((n) => ({
+ const deselected = store.nodes.map((n) => ({
...n,
selected: false,
}));
- nodes.push(node as AppNode);
- store.setNodes(nodes);
+ store.setNodes(deselected);
+ store.addNode({
+ id: uuidv4(),
+ type: i.type,
+ data: i.init,
+ selected: true,
+ connectable: true,
+ } as any); // eslint-disable-line @typescript-eslint/no-explicit-any
}
export function Resources() {
const store = useStateStore();
const categories = useCategories();
+
const onResourceAdd = useCallback(
(item: CategoryItem<NodeType>) => {
return () => addResource(item, store);
},
[store],
);
+
const [open, setOpen] = useState<string[]>(categories.map((c) => c.title));
+
return (
<>
<Accordion type="multiple" value={open} onValueChange={(v) => setOpen(v)}>