diff --git a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx index 309485584..039f67ecd 100644 --- a/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/components/parameterComponent/index.tsx @@ -27,6 +27,7 @@ import { classNames, getRandomKeyByssmm, groupByFamily, + groupByFamilyCustom, } from "../../../../utils/utils"; export default function ParameterComponent({ @@ -99,46 +100,48 @@ export default function ParameterComponent({ ); }, [info]); + + useEffect(() => { - - - console.log("mydata", myData); - console.log("tooltipTitle", tooltipTitle); - console.log("left", left); - console.log("data.type", data.type); - console.log("flows", flows); + let groupedObj = groupByFamily(myData, tooltipTitle, left, data.type, flows.find((f) => f.id === tabId).data.nodes); + if(groupedObj?.length === 0){ + groupedObj = groupByFamilyCustom(myData, tooltipTitle, left, data.type, flows.find((f) => f.id === tabId).data.nodes) + } - const groupedObj = groupByFamily(myData, tooltipTitle, left, data.type); - refNumberComponents.current = groupedObj[0]?.type?.length; + if(groupedObj){ + refNumberComponents.current = groupedObj[0]?.type?.length; - refHtml.current = groupedObj.map((item, i) => { - const Icon: any = nodeIconsLucide[item.family]; + refHtml.current = groupedObj.map((item, i) => { - return ( - 0 ? "mt-2 flex items-center" : "flex items-center" - )} - > -
0 ? "mt-2 flex items-center" : "flex items-center" + )} > - -
- - {nodeNames[item.family] ?? ""}{" "} + > + + + + {item.family !== 'custom_components' ? nodeNames[item.family] : item.component ?? ""}{" "} {" "} {item.type === "" ? "" : " - "} @@ -155,10 +158,14 @@ export default function ParameterComponent({ : item.type} - - ); - }); - }, [tooltipTitle]); + +
+ ); + }); + } + + + }, [tooltipTitle, flows.find((f) => f.id === tabId).data.nodes]); return (
) { return classes.filter(Boolean).join(" "); @@ -88,12 +89,13 @@ export function checkUpperWords(str: string) { export const isWrappedWithClass = (event: any, className: string | undefined) => event.target.closest(`.${className}`); -export function groupByFamily(data, baseClasses, left, type) { +export function groupByFamily(data, baseClasses, left, type, flow) { let parentOutput: string; let arrOfParent: string[] = []; let arrOfType: { family: string; type: string; component: string }[] = []; let arrOfLength: { length: number; type: string }[] = []; let lastType = ""; + Object.keys(data).forEach((d) => { Object.keys(data[d]).forEach((n) => { try { @@ -203,6 +205,104 @@ export function groupByFamily(data, baseClasses, left, type) { } } +export function groupByFamilyCustom(data, baseClasses, left, type, flow) { + let arrOfParentCustom: string[] = []; + let arrOfType: { family: string; type: string; component: string }[] = []; + + + if (type === "CustomComponent") { + const uniqueValuesSet = new Set(); + flow.forEach((element) => { + element["data"]["node"]["base_classes"].forEach((el) => { + if (!uniqueValuesSet.has(el)) { + arrOfParentCustom.push(el); + uniqueValuesSet.add(el); + } + }); + }); + } + + + + if (left === false) { + arrOfParentCustom.map((n) => { + try { + arrOfType.push({ + family: "custom_components", + type: n, + component: nodeNames["custom_components"], + }); + } catch (e) { + console.log(e); + } + }); + + } + + else{ + flow.forEach((element) => { + Object.keys(element["data"]["node"]["template"]).map((el) => { + if(element["data"]["node"]["template"][el].input_types && element["data"]["node"]["template"][el].input_types.length > 0){ + element["data"]["node"]["template"][el].input_types.map((n) => { + try { + arrOfType.push({ + family: "custom_components", + type: n, + component: nodeNames["custom_components"], + }); + } catch (e) { + console.log(e); + } + }); + } + + }); + }); + + } + +const groupedResult = {}; + +arrOfType.forEach((item) => { + const { family, type, component } = item; + if (groupedResult.hasOwnProperty(family)) { + if (!groupedResult[family].type.includes(type)) { + groupedResult[family].type += `, ${type}`; + } + } else { + groupedResult[family] = { family, type, component }; + } +}); + + +const result = Object.values(groupedResult); + +if(left === false) +{ + let resultFiltered = []; + flow.forEach((element) => { + Object.keys(element["data"]["node"]["template"]).map((el) => { + if(element["data"]["node"]["template"][el].input_types && element["data"]["node"]["template"][el].input_types.length > 0){ + element["data"]["node"]["template"][el].input_types.map((n) => { + resultFiltered.push({ + family: "custom_components", + type: n, + component: element["data"]["node"]["display_name"], + }) + }); + } + }); + }); + return resultFiltered; +} + +else{ + return result; +} + + +} + export function buildInputs(tabsState, id) { return tabsState && tabsState[id] &&