UNPKG

@hitachivantara/uikit-react-lab

Version:

Contributed React components for the NEXT UI Kit.

158 lines (157 loc) 4.85 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const jsxRuntime = require("react/jsx-runtime"); const react = require("react"); const uid = require("uid"); const uikitReactCore = require("@hitachivantara/uikit-react-core"); const uikitReactIcons = require("@hitachivantara/uikit-react-icons"); const uikitStyles = require("@hitachivantara/uikit-styles"); const NodeMetaContext = require("../FlowContext/NodeMetaContext.cjs"); const utils = require("../Node/utils.cjs"); const useFlowContext = require("./useFlowContext.cjs"); const useFlowInstance = require("./useFlowInstance.cjs"); const useFlowNode = require("./useFlowNode.cjs"); const DEFAULT_LABELS = { deleteActionLabel: "Delete", duplicateActionLabel: "Duplicate" }; function useHvNode(props) { const { id, title: titleProp, icon: iconProp, color: colorProp, subtitle: subtitleProp, nodeActions: nodeActionsProp, inputs: inputsProp, outputs: outputsProp, groupId, labels: labelsProps, nodeToolbarProps } = props; const { registerNode, unregisterNode } = NodeMetaContext.useNodeMetaRegistry(); const labels = uikitReactCore.useLabels(DEFAULT_LABELS, labelsProps); const inputs = react.useMemo(() => utils.identifyHandles(inputsProp), [inputsProp]); const inputEdges = useFlowNode.useFlowNodeInputEdges(); const outputs = react.useMemo(() => utils.identifyHandles(outputsProp), [outputsProp]); const outputEdges = useFlowNode.useFlowNodeOutputEdges(); const { nodeGroups } = useFlowContext.useFlowContext(); const intersections = useFlowNode.useFlowNodeIntersections(); const { setNodeParent, setNodeData } = useFlowNode.useFlowNodeUtils(); const node = useFlowNode.useFlowNode(); const reactFlowInstance = useFlowInstance.useFlowInstance(); const nodeGroup = groupId && nodeGroups && nodeGroups[groupId] || void 0; const title = titleProp || nodeGroup?.label; const icon = iconProp || nodeGroup?.icon; const color = uikitStyles.getColor(colorProp || nodeGroup?.color); const iconColor = react.isValidElement(icon) ? uikitStyles.getColor(icon.props.color || "base_dark") : uikitStyles.getColor("base_dark"); const subtitle = subtitleProp || node?.data.nodeLabel; const [showActions, setShowActions] = react.useState(false); const toggleShowActions = react.useCallback(() => { setShowActions(!showActions); }, [showActions]); const getNodeToolbarProps = react.useCallback( () => ({ offset: 0, isVisible: showActions, ...nodeToolbarProps }), [nodeToolbarProps, showActions] ); const nodeActions = react.useMemo( () => nodeActionsProp || [ { id: "delete", label: labels?.deleteActionLabel, icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Delete, {}) }, { id: "duplicate", label: labels?.duplicateActionLabel, icon: /* @__PURE__ */ jsxRuntime.jsx(uikitReactIcons.Duplicate, {}) } ], [labels?.deleteActionLabel, labels?.duplicateActionLabel, nodeActionsProp] ); react.useEffect(() => { registerNode(id, { label: title || "", inputs, outputs }); return () => unregisterNode(id); }, [id, title, inputs, outputs, registerNode, unregisterNode]); const handleDefaultAction = react.useCallback( (action) => { if (!node) return; if (action.callback) { action.callback(node); return; } switch (action.id) { case "delete": reactFlowInstance.deleteElements({ nodes: [node] }); break; case "duplicate": reactFlowInstance.addNodes([ { ...node, id: uid.uid(), position: { x: node.position.x, y: node.position.y + (node.height || 0) + 20 }, selected: false, zIndex: Number(uikitStyles.theme.zIndices.overlay) } ]); break; } }, [node, reactFlowInstance] ); return react.useMemo( () => ({ // state id, title, icon, color, iconColor, subtitle, inputs, inputEdges, outputs, outputEdges, node, nodeActions, showActions, intersections, // prop getters getNodeToolbarProps, // actions toggleShowActions, handleDefaultAction, setNodeData, setNodeParent }), [ id, title, icon, color, iconColor, subtitle, inputs, inputEdges, outputs, outputEdges, node, nodeActions, showActions, intersections, getNodeToolbarProps, toggleShowActions, handleDefaultAction, setNodeData, setNodeParent ] ); } exports.useHvNode = useHvNode;