diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx index 3140c3b62..6aeae577d 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx @@ -1,4 +1,4 @@ -import { cloneDeep } from "lodash"; +import { cloneDeep, divide } from "lodash"; import React, { ReactNode, useContext, @@ -45,6 +45,7 @@ export default function ParameterComponent({ required = false, optionalHandle = null, info = "", + showNode, }: ParameterComponentType): JSX.Element { const ref = useRef(null); const refHtml = useRef(null); @@ -179,181 +180,225 @@ export default function ParameterComponent({ }, [tooltipTitle, flow]); return ( -
- <> -
- {title} - {required ? " *" : ""} -
- {info !== "" && ( - - {/* put div to avoid bug that does not display tooltip */} -
- -
-
- )} -
-
- {left && - (type === "str" || - type === "bool" || - type === "float" || - type === "code" || - type === "prompt" || - type === "file" || - type === "int") && - !optionalHandle ? ( - <> - ) : ( - - - isValidConnection(connection, reactFlowInstance!) - } - className={classNames( - left ? "-ml-0.5 " : "-mr-0.5 ", - "h-3 w-3 rounded-full border-2 bg-background" - )} - style={{ - borderColor: color, - top: position, - }} - > - - )} - - {left === true && - type === "str" && - !data.node?.template[name].options ? ( -
- {data.node?.template[name].list ? ( - + { + left && + (type === "str" || + type === "bool" || + type === "float" || + type === "code" || + type === "prompt" || + type === "file" || + type === "int") && + !optionalHandle ? ( + <> + ) : ( + + + isValidConnection(connection, reactFlowInstance!) } - onChange={handleOnNewValue} - /> - ) : data.node?.template[name].multiline ? ( - + + )} + + ) : ( +
+ <> +
+ {title} + {required ? " *" : ""} +
+ {info !== "" && ( + + {/* put div to avoid bug that does not display tooltip */} +
+ +
+
+ )} +
+
+ {left && + (type === "str" || + type === "bool" || + type === "float" || + type === "code" || + type === "prompt" || + type === "file" || + type === "int") && + !optionalHandle ? ( + <> + ) : ( + + + isValidConnection(connection, reactFlowInstance!) + } + className={classNames( + left ? "-ml-0.5 " : "-mr-0.5 ", + "h-3 w-3 rounded-full border-2 bg-background" + )} + style={{ + borderColor: color, + top: position, + }} + > + + )} + + {left === true && + type === "str" && + !data.node?.template[name].options ? ( +
+ {data.node?.template[name].list ? ( + + ) : data.node?.template[name].multiline ? ( + + ) : ( + + )} +
+ ) : left === true && type === "bool" ? ( +
+ { + handleOnNewValue(isEnabled); + }} + size="large" /> - ) : ( - + ) : left === true && type === "float" ? ( +
+ - )} -
- ) : left === true && type === "bool" ? ( -
- { - handleOnNewValue(isEnabled); - }} - size="large" - /> -
- ) : left === true && type === "float" ? ( -
- -
- ) : left === true && - type === "str" && - data.node?.template[name].options ? ( -
- -
- ) : left === true && type === "code" ? ( -
- { - data.node = nodeClass; - }} - nodeClass={data.node} - disabled={disabled} - value={data.node?.template[name].value ?? ""} - onChange={handleOnNewValue} - /> -
- ) : left === true && type === "file" ? ( -
- { - data.node!.template[name].file_path = filePath; - save(); - }} - > -
- ) : left === true && type === "int" ? ( -
- -
- ) : left === true && type === "prompt" ? ( -
- { - data.node = nodeClass; - }} - nodeClass={data.node} - disabled={disabled} - value={data.node?.template[name].value ?? ""} - onChange={handleOnNewValue} - /> -
- ) : ( - <> - )} - -
+
+ ) : left === true && + type === "str" && + data.node?.template[name].options ? ( +
+ +
+ ) : left === true && type === "code" ? ( +
+ { + data.node = nodeClass; + }} + nodeClass={data.node} + disabled={disabled} + value={data.node?.template[name].value ?? ""} + onChange={handleOnNewValue} + /> +
+ ) : left === true && type === "file" ? ( +
+ { + data.node!.template[name].file_path = filePath; + save(); + }} + > +
+ ) : left === true && type === "int" ? ( +
+ +
+ ) : left === true && type === "prompt" ? ( +
+ { + data.node = nodeClass; + }} + nodeClass={data.node} + disabled={disabled} + value={data.node?.template[name].value ?? ""} + onChange={handleOnNewValue} + /> +
+ ) : ( + <> + )} + +
+ ) ); } diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index 6b08faead..b60467110 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -72,13 +72,15 @@ export default function GenericNode({ data={data} setData={setData} deleteNode={deleteNode} + setShowNode={setShowNode} >
{data.node?.beta && ( @@ -87,183 +89,264 @@ export default function GenericNode({
)}
-
- -
-
-
+
+
-
- -
- {data.node?.display_name} -
-
-
+ {showNode && ( +
+ +
+ {data.node?.display_name} +
+
+
+ )}
-
-
- Building... - ) : !validationStatus ? ( - - Build{" "} - {" "} - flow to validate status. - - ) : ( -
- {typeof validationStatus.params === "string" - ? validationStatus.params - .split("\n") - .map((line: string, index: number) => ( -
{line}
- )) - : ""} -
- ) - } - > -
-
+ {!showNode && ( + <> + {Object.keys(data.node!.template) + .filter((templateField) => templateField.charAt(0) !== "_") + .map((templateField: string, idx) => ( +
+ {data.node!.template[templateField].show && + !data.node!.template[templateField].advanced && ( + )} - >
-
-
-
- -
+
))} + 0 + ? data.node.output_types.join("|") + : data.type + } + tooltipTitle={data.node?.base_classes.join("\n")} + id={[data.type, data.id, ...data.node!.base_classes].join("|")} + type={data.node?.base_classes.join("|")} + left={false} + showNode={showNode} + /> + + )} +
+ + + + {showNode && ( +
+
+ Building... + ) : !validationStatus ? ( + + Build{" "} + {" "} + flow to validate status. + + ) : ( +
+ {typeof validationStatus.params === "string" + ? validationStatus.params + .split("\n") + .map((line: string, index: number) => ( +
{line}
+ )) + : ""} +
+ ) + } + > +
+
+
+
+
+
+
+
+ )}
-
- {data.node?.description !== "" && showNode && ( -
{data.node?.description}
- )} + {showNode && ( +
+ {data.node?.description !== "" && showNode && ( +
{data.node?.description}
+ )} - <> - {Object.keys(data.node!.template) - .filter((templateField) => templateField.charAt(0) !== "_") - .map((templateField: string, idx) => ( -
- {data.node!.template[templateField].show && - !data.node!.template[templateField].advanced && - showNode ? ( - - ) : ( - <> - )} -
- ))} -
- {" "} -
- 0 - ? data.node.output_types.join("|") - : data.type - } - tooltipTitle={data.node?.base_classes.join("\n")} - id={[data.type, data.id, ...data.node!.base_classes].join("|")} - type={data.node?.base_classes.join("|")} - left={false} - /> - -
+ <> + {Object.keys(data.node!.template) + .filter((templateField) => templateField.charAt(0) !== "_") + .map((templateField: string, idx) => ( +
+ {data.node!.template[templateField].show && + !data.node!.template[templateField].advanced ? ( + + ) : ( + <> + )} +
+ ))} +
+ {" "} +
+ 0 + ? data.node.output_types.join("|") + : data.type + } + tooltipTitle={data.node?.base_classes.join("\n")} + id={[data.type, data.id, ...data.node!.base_classes].join("|")} + type={data.node?.base_classes.join("|")} + left={false} + showNode={showNode} + /> + +
+ )}
); diff --git a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx index c628e4003..3f14f944c 100644 --- a/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx +++ b/src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx @@ -11,6 +11,7 @@ export default function NodeToolbarComponent({ data, setData, deleteNode, + setShowNode, }: nodeToolbarPropsType): JSX.Element { const [nodeLength, setNodeLength] = useState( Object.keys(data.node!.template).filter( @@ -106,7 +107,7 @@ export default function NodeToolbarComponent({ >
+ + + +
diff --git a/src/frontend/src/style/applies.css b/src/frontend/src/style/applies.css index ff899663b..44d91b033 100644 --- a/src/frontend/src/style/applies.css +++ b/src/frontend/src/style/applies.css @@ -264,10 +264,10 @@ @apply grid w-full gap-4 p-4 md:grid-cols-2 lg:grid-cols-4; } .generic-node-div { - @apply relative flex w-96 flex-col justify-center rounded-lg bg-background; + @apply relative flex flex-col justify-center rounded-lg bg-background; } .generic-node-div-title { - @apply flex w-full items-center justify-between gap-8 border-b bg-muted p-4; + @apply flex w-full items-center gap-8 border-b bg-muted p-4; } .generic-node-title-arrangement { @apply flex-max-width items-center truncate; diff --git a/src/frontend/src/types/components/index.ts b/src/frontend/src/types/components/index.ts index 7c9df202f..28dfe69f3 100644 --- a/src/frontend/src/types/components/index.ts +++ b/src/frontend/src/types/components/index.ts @@ -46,6 +46,7 @@ export type ParameterComponentType = { dataContext?: typesContextType; optionalHandle?: Array | null; info?: string; + showNode?: boolean; }; export type InputListComponentType = { value: string[]; @@ -398,6 +399,7 @@ export type nodeToolbarPropsType = { data: NodeDataType; deleteNode: (idx: string) => void; setData: (newState: NodeDataType) => void; + setShowNode: (boolean: any) => void; }; export type parsedDataType = {