Skip to content

Commit 563a474

Browse files
committed
optional NodeVisual and NodeCompute classes
1 parent 85d5a3c commit 563a474

File tree

6 files changed

+93
-13
lines changed

6 files changed

+93
-13
lines changed
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import {
2+
FormFieldType,
3+
NodeDefinition,
4+
} from '@devhelpr/visual-programming-system';
5+
6+
export const dummyDefinition: NodeDefinition = {
7+
nodeTypeName: 'dummy',
8+
description: 'A dummy coponent.',
9+
settingsFormFields: [
10+
{
11+
name: 'test',
12+
fieldType: FormFieldType.Text,
13+
},
14+
],
15+
nodeTheme: {
16+
backgroundColorClass: 'bg-teal-400',
17+
//textColorClass: 'text-white',
18+
},
19+
};
20+
21+
export const dummy2Definition: NodeDefinition = {
22+
nodeTypeName: 'dummy2',
23+
description: 'A dummy coponent.',
24+
settingsFormFields: [
25+
{
26+
name: 'test',
27+
fieldType: FormFieldType.Text,
28+
},
29+
],
30+
nodeTheme: {
31+
backgroundColorClass: 'bg-purple-400',
32+
textColorClass: 'text-white',
33+
},
34+
};
35+
36+
export const dummy3Definition: NodeDefinition = {
37+
nodeTypeName: 'dummy3',
38+
description: 'A dummy coponent.',
39+
settingsFormFields: [
40+
{
41+
name: 'test',
42+
fieldType: FormFieldType.Text,
43+
},
44+
],
45+
nodeTheme: {
46+
backgroundColorClass: 'bg-orange-400',
47+
//textColorClass: 'text-white',
48+
},
49+
};

apps/vps-web/src/app/custom-nodes-v2/form-visual.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
import { NodeVisual } from '@devhelpr/visual-programming-system';
1+
import {
2+
createJSXElement,
3+
NodeVisual,
4+
} from '@devhelpr/visual-programming-system';
25
import { NodeInfo } from '@devhelpr/web-flow-executor';
36
import { initFormGenerator } from './form/VanillaFormRenderer';
47

@@ -8,7 +11,9 @@ export class FormVisual extends NodeVisual<NodeInfo> {
811
private wheelEventHandler(e: WheelEvent) {
912
e.stopPropagation();
1013
}
11-
14+
render = () => {
15+
return <h1>Hello form</h1>;
16+
};
1217
updateVisual = (
1318
incomingData: unknown,
1419
parentNode: HTMLElement,

apps/vps-web/src/app/custom-nodes/classes/rect-node-class.tsx

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@ w-min h-min
9696

9797
export const createNodeClass = (
9898
nodeDefinition: NodeDefinition,
99-
NodeVisualClass: typeof NodeVisual<NodeInfo>,
100-
NodeComputeClass: typeof NodeCompute<NodeInfo>
99+
NodeVisualClass?: typeof NodeVisual<NodeInfo>,
100+
NodeComputeClass?: typeof NodeCompute<NodeInfo>
101101
) => {
102102
return class extends RectNode {
103103
static readonly nodeTypeName: string = nodeDefinition.nodeTypeName;
@@ -161,8 +161,12 @@ export const createNodeClass = (
161161
if (!node.nodeInfo) {
162162
node.nodeInfo = {};
163163
}
164-
this.nodeVisual = new NodeVisualClass(node, this.canvasAppInstance);
165-
this.nodeCompute = new NodeComputeClass();
164+
this.nodeVisual = NodeVisualClass
165+
? new NodeVisualClass(node, this.canvasAppInstance)
166+
: new NodeVisual(node, this.canvasAppInstance);
167+
this.nodeCompute = NodeComputeClass
168+
? new NodeComputeClass()
169+
: new NodeCompute();
166170
// (this.nodeVisual as any).flowEngine = flowEngine;
167171
// (this.nodeVisual as any).baseRectNode = this;
168172
this.nodeVisual?.setTriggerOutputs(
@@ -319,16 +323,20 @@ export const createNodeClass = (
319323
render = (_node: FlowNode<NodeInfo>) => {
320324
return (
321325
<div
322-
class={`h-full w-full bg-white text-black ${
326+
class={`h-full w-full ${
327+
nodeDefinition.nodeTheme?.backgroundColorClass ?? 'bg-white'
328+
} ${nodeDefinition.nodeTheme?.textColorClass ?? 'text-black'} ${
323329
this.nodeVisual?.additionalContainerCssClasses ?? ''
324330
}`}
325331
getElement={(element: HTMLDivElement) => {
326332
this.rectElement = element;
327333
}}
328334
>
329-
<div class="grid content-center justify-items-center h-full">
330-
{nodeDefinition.nodeTypeName}
331-
</div>
335+
{this.nodeVisual?.render?.() ?? (
336+
<div class="grid content-center justify-items-center h-full">
337+
{nodeDefinition.nodeTypeName}
338+
</div>
339+
)}
332340
</div>
333341
);
334342
};

apps/vps-web/src/app/custom-nodes/register-nodes.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ import { PlotVisual } from '../custom-nodes-v2/plot-visual';
2626
import { formDefinition } from '../custom-nodes-v2/form-definition';
2727
import { FormCompute } from '../custom-nodes-v2/form-compute';
2828
import { FormVisual } from '../custom-nodes-v2/form-visual';
29+
import {
30+
dummy2Definition,
31+
dummy3Definition,
32+
dummyDefinition,
33+
} from '../custom-nodes-v2/dummy-definition';
2934

3035
const nodes: NodeRegistration[] = [
3136
() => ({
@@ -42,6 +47,9 @@ const nodes: NodeRegistration[] = [
4247
createNodeClass(pieChartDefinition, PieChartVisual, PieChartCompute),
4348
createNodeClass(plotDefinition, PlotVisual, PlotCompute),
4449
createNodeClass(formDefinition, FormVisual, FormCompute),
50+
createNodeClass(dummyDefinition),
51+
createNodeClass(dummy2Definition),
52+
createNodeClass(dummy3Definition),
4553
];
4654

4755
export const registerNodes = (

libs/app-canvas/src/app/app.element.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ export class AppElement<T extends BaseNodeInfo, TFlowEngine = unknown> {
471471
}
472472
return;
473473
}
474-
if (key === 'backspace' || key === 'delete' || key === 'enter') {
474+
if (key === 'backspace' || key === 'delete') {
475475
if (inInputControle || (event.target as HTMLElement)?.isContentEditable) {
476476
return;
477477
}

libs/visual-programming-system/src/interfaces/node-task-registry.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ export class NodeVisual<T extends BaseNodeInfo> {
9393
this.canvasAppInstance = canvasApp;
9494
// Constructor logic
9595
}
96+
97+
render?: () => JSX.Element;
9698
updateVisual(
9799
_data: unknown,
98100
_parentNode: HTMLElement,
@@ -132,21 +134,29 @@ export interface NodeDefinition {
132134
fieldType: FormFieldType;
133135
defaultValue?: string | number | boolean;
134136
}[];
137+
nodeTheme?: {
138+
backgroundColorClass?: string;
139+
textColorClass?: string;
140+
};
135141
}
136142

137143
export class NodeCompute<T extends BaseNodeInfo> {
138144
initializeCompute() {
139145
//
140146
}
141147
compute(
142-
_input: unknown,
148+
input: unknown,
143149
_loopIndex?: number,
144150
_payload?: unknown,
145151
_portName?: string,
146152
_scopeId?: string,
147153
_runCounter?: IRunCounter,
148154
_connection?: IConnectionNodeComponent<T>
149155
): Promise<IComputeResult> {
150-
return Promise.reject();
156+
//return Promise.reject();
157+
return Promise.resolve({
158+
result: input,
159+
output: input,
160+
});
151161
}
152162
}

0 commit comments

Comments
 (0)