diff --git a/src/frontend/src/CustomNodes/GenericNode/components/nodeIcon/index.tsx b/src/frontend/src/CustomNodes/GenericNode/components/nodeIcon/index.tsx new file mode 100644 index 000000000..03f3ac3c4 --- /dev/null +++ b/src/frontend/src/CustomNodes/GenericNode/components/nodeIcon/index.tsx @@ -0,0 +1,34 @@ +import { useTypesStore } from "@/stores/typesStore"; +import { nodeColors, nodeIconsLucide } from "@/utils/styleUtils"; +import emojiRegex from "emoji-regex"; +import IconComponent from "../../../../components/genericIconComponent"; + +export function NodeIcon({ + icon, + dataType, + showNode, + isGroup, +}: { + icon?: string; + dataType: string; + showNode: boolean; + isGroup?: boolean; +}) { + const types = useTypesStore((state) => state.types); + const name = nodeIconsLucide[dataType] ? dataType : types[dataType]; + const isEmoji = emojiRegex().test(icon ?? ""); + const iconColor = nodeColors[types[dataType]]; + const iconName = icon || (isGroup ? "group_components" : name); + const iconClassName = `generic-node-icon ${ + !showNode ? " absolute inset-x-6 h-12 w-12 " : "" + }`; + return icon && isEmoji ? ( + {icon} + ) : ( + + ); +} diff --git a/src/frontend/src/CustomNodes/GenericNode/index.tsx b/src/frontend/src/CustomNodes/GenericNode/index.tsx index b23abd55f..a7d984845 100644 --- a/src/frontend/src/CustomNodes/GenericNode/index.tsx +++ b/src/frontend/src/CustomNodes/GenericNode/index.tsx @@ -1,4 +1,3 @@ -import emojiRegex from "emoji-regex"; import { useEffect, useMemo, useState } from "react"; import { useHotkeys } from "react-hotkeys-hook"; import { NodeToolbar, useUpdateNodeInternals } from "reactflow"; @@ -18,13 +17,11 @@ import { useTypesStore } from "../../stores/typesStore"; import { OutputFieldType } from "../../types/api"; import { NodeDataType } from "../../types/flow"; import { scapedJSONStringfy } from "../../utils/reactflowUtils"; -import { nodeColors, nodeIconsLucide } from "../../utils/styleUtils"; +import { nodeIconsLucide } from "../../utils/styleUtils"; import { classNames, cn } from "../../utils/utils"; -import { countHandlesFn } from "../helpers/count-handles"; import { getNodeInputColors } from "../helpers/get-node-input-colors"; import { getNodeOutputColors } from "../helpers/get-node-output-colors"; import useCheckCodeValidity from "../hooks/use-check-code-validity"; -import useIconNodeRender from "../hooks/use-icon-render"; import useUpdateNodeCode from "../hooks/use-update-node-code"; import getFieldTitle from "../utils/get-field-title"; import sortFields from "../utils/sort-fields"; @@ -33,6 +30,7 @@ import NodeInputField from "./components/NodeInputField"; import NodeName from "./components/NodeName"; import NodeOutputField from "./components/NodeOutputfield"; import NodeStatus from "./components/NodeStatus"; +import { NodeIcon } from "./components/nodeIcon"; export default function GenericNode({ data, @@ -66,22 +64,6 @@ export default function GenericNode({ const name = nodeIconsLucide[data.type] ? data.type : types[data.type]; - const nodeIconFragment = (icon) => { - return {icon}; - }; - - const checkNodeIconFragment = (iconColor, iconName, iconClassName) => { - return ( - - ); - }; - - const isEmoji = emojiRegex().test(data?.node?.icon!); - if (!data.node!.template) { setErrorData({ title: `Error in component ${data.node!.display_name}`, @@ -96,17 +78,6 @@ export default function GenericNode({ useCheckCodeValidity(data, templates, setIsOutdated, setIsUserEdited, types); - const iconNodeRender = useIconNodeRender( - data, - types, - nodeColors, - name, - showNode, - isEmoji, - nodeIconFragment, - checkNodeIconFragment, - ); - useEffect(() => { setShowNode(data.showNode ?? true); }, [data.showNode]); @@ -316,7 +287,12 @@ export default function GenericNode({ } data-testid="generic-node-title-arrangement" > - {iconNodeRender()} + {showNode && (
JSX.Element, - checkNodeIconFragment: ( - iconColor: string, - iconName: string, - iconClassName: string, - ) => JSX.Element, -) => { - const iconNodeRender = useCallback(() => { - const iconElement = data?.node?.icon; - const iconColor = nodeColors[types[data.type]]; - const iconName = - iconElement || (data.node?.flow ? "group_components" : name); - const iconClassName = `generic-node-icon ${ - !showNode ? " absolute inset-x-6 h-12 w-12 " : "" - }`; - if (iconElement && isEmoji) { - return nodeIconFragment(iconElement); - } else { - return checkNodeIconFragment(iconColor, iconName, iconClassName); - } - }, [ - data, - types, - nodeColors, - name, - showNode, - isEmoji, - nodeIconFragment, - checkNodeIconFragment, - ]); - - return iconNodeRender; -}; - -export default useIconNodeRender;