Skip to content

Commit 5a3186b

Browse files
committed
Base Type in Base Node
1 parent 01f6ccc commit 5a3186b

7 files changed

Lines changed: 63 additions & 15 deletions

File tree

src/components/engine/Node/index.tsx

Lines changed: 43 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,35 @@ import "./style.css";
1515

1616
export function Node({
1717
node,
18+
forcedActive = false,
1819
}: {
1920
node: NodeModel;
21+
forcedActive?: boolean;
2022
}) {
2123
const {
2224
setUnsavedChanges,
2325
} = useUnsavedChangesContext()!;
26+
2427
const [active, setActive] = useState(false);
28+
const [baseType, setBaseType] = useState<string>(node.baseType || "text");
2529

2630
const handleClick: () => void = useCallback(() => {
2731
if (node.action) node.action();
2832
else setActive(prev => !prev);
2933
}, [node]);
3034

35+
const switchBaseType = useCallback((type: string) => {
36+
node.baseType = type;
37+
setBaseType(type);
38+
setUnsavedChanges(true);
39+
}, [setUnsavedChanges, node]);
40+
3141
return (<>
3242
<div className="node-wrapper">
3343
<Glass
3444
className={[
3545
"node",
36-
active ? "active" : "",
46+
(active || forcedActive) ? "active" : "",
3747
].join(" ")}
3848
style={{ color: node.color }}
3949
onClick={handleClick}
@@ -69,7 +79,37 @@ export function Node({
6979
/>))
7080
}
7181

72-
{node.isBase && (
82+
{node.isBase && (<>
83+
<Node
84+
forcedActive={baseType === "text"}
85+
node={{
86+
color: "#000",
87+
icon: "Type",
88+
name: "Text Type",
89+
action: () => switchBaseType("text"),
90+
}}
91+
/>
92+
93+
<Node
94+
forcedActive={baseType === "numeric"}
95+
node={{
96+
color: "#000",
97+
icon: "Hash",
98+
name: "Numeric Type",
99+
action: () => switchBaseType("numeric"),
100+
}}
101+
/>
102+
103+
<Node
104+
forcedActive={baseType === "boolean"}
105+
node={{
106+
color: "#000",
107+
icon: "ToggleRight",
108+
name: "Boolean Type",
109+
action: () => switchBaseType("boolean"),
110+
}}
111+
/>
112+
73113
<div className="node-base-input">
74114
<Input
75115
placeholder="Base Node Value"
@@ -80,7 +120,7 @@ export function Node({
80120
}}
81121
/>
82122
</div>
83-
)}
123+
</>)}
84124
</Glass>
85125
)}
86126
</div>

src/components/engine/Node/style.css

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,6 @@
9393
position: relative;
9494
width: var(--size);
9595
height: var(--size);
96-
/* display: flex;
97-
align-items: center;
98-
justify-content: center; */
9996
}
10097

10198
.node-context {
@@ -129,7 +126,7 @@
129126
}
130127

131128
.node-base-input {
132-
grid-column: span 5;
129+
grid-column: 1 / -1;
133130
padding: 0.5rem 0.25rem;
134131
}
135132

src/defs/Node.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface NodeModel {
88
action?: () => void;
99
context?: NodeModel[];
1010
value?: string;
11+
baseType?: string;
1112
isBase?: boolean;
1213
isTopLevel?: boolean;
1314
}
@@ -20,10 +21,15 @@ export type NodeGroup = {
2021

2122
export interface NodeSystem {
2223
[baseId: string]: NodeGroup;
23-
}
24+
};
2425

2526
export interface Variable {
2627
name: string;
2728
color: string;
28-
}
29+
};
2930

31+
export const BasePrefixes: { [key: string]: string } = {
32+
text: ":",
33+
numeric: "",
34+
boolean: "",
35+
};

src/defs/Packed.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface PackedNode {
88
icon: string;
99
hasNext?: boolean;
1010
value?: string;
11+
baseType?: string;
1112
isBase?: boolean;
1213
isTopLevel?: boolean;
1314
};

src/utils/compilerTools.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { saveFile } from '@utils/desktopTools';
22

3-
import type {
4-
NodeModel,
5-
NodeGroup,
6-
NodeSystem,
3+
import {
4+
type NodeModel,
5+
type NodeGroup,
6+
type NodeSystem,
7+
BasePrefixes,
78
} from "@defs/Node";
89

910
const setupCompilerTools = () => {
@@ -23,7 +24,8 @@ const setupCompilerTools = () => {
2324
const indents: string = " ".repeat(level);
2425
for (const node of nodes) {
2526
if (node.isBase) {
26-
script += `${indents}:${node.value || ""}\n`;
27+
const basePrefix = BasePrefixes[node.baseType || "text"];
28+
script += `${indents}${basePrefix}${node.value || ""}\n`;
2729
continue;
2830
}
2931

src/utils/engineTools.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ const setupEngineTools = () => {
121121
icon: packedNode.icon,
122122
hasNext: packedNode.hasNext,
123123
value: packedNode.value,
124+
baseType: packedNode.baseType,
124125
isBase: packedNode.isBase,
125126
isTopLevel: packedNode.isTopLevel,
126127
context: [

src/utils/packerTools.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ const setupPackerTools = () => {
3434
icon: node.icon,
3535
hasNext: node.hasNext,
3636
value: node.value,
37+
baseType: node.baseType,
3738
isBase: node.isBase,
38-
isTopLevel: node.isTopLevel
39+
isTopLevel: node.isTopLevel,
3940
};
4041

4142
savedNodes[node.id!] = packedNode;

0 commit comments

Comments
 (0)