import { LinkHorizontal, LinkHorizontalCurve, LinkHorizontalLine, LinkHorizontalStep, LinkVertical, LinkVerticalCurve, LinkVerticalLine, LinkVerticalStep, } from "@visx/shape"; import _, { uniqueId } from "lodash"; import ZoomOutMapIcon from "@mui/icons-material/ZoomOutMap"; import ZoomInMapIcon from "@mui/icons-material/ZoomInMap"; import HorizontalIcon from "@mui/icons-material/AlignHorizontalLeft"; import VerticalIcon from "@mui/icons-material/AlignVerticalTop"; import { IconButton } from "@mui/material"; import { ActionButtonProps, DimensionType } from "./interface"; export const adjustZoom = ( dimension: DimensionType, action: boolean, initialDimension: DimensionType ): DimensionType => { if (action) { const zoomData: DimensionType = { ...dimension, muliplier: 2, container: { style: { height: "105vh", width: "100vw", position: "fixed", top: 0, left: 0, zIndex: 1200, }, }, graphHeight: "100vh", graphWidth: "calc(100vw - 15px)", width: Number(dimension.width) * 1.4, height: Number(dimension.height) * 1.2, }; return zoomData; } return { ...initialDimension, orientation: dimension.orientation }; }; export const validate = (value) => { if (!_.isEmpty(value) && _.isObject(value)) { return value; } return { label1: "No Data Found", iconName1: "No_Data" }; }; export const ActionButton = ({ dimension, adjustZoom, setDimension, // forceUpdate, zoom, setZoom, dimensionInitial, }: ActionButtonProps) => { return ( <> { const value = adjustZoom(dimension, !zoom, dimensionInitial); setDimension(value); // forceUpdate(); setZoom((pre) => !pre); }} > {zoom ? ( ) : ( )} { setDimension({ ...dimension, orientation: dimension.orientation === "vertical" ? "horizontal" : "vertical", }); }} > {dimension.orientation === "horizontal" ? ( ) : ( )} ); }; export const colorsProvider = (uischema: any): Record => { return ( uischema.config?.mian?.colorsArray || [ "#03992e", "#15727a", "#15157a", "#7a2415", "#15357a", "rgba(25,200,205,0.6)", "#3f84b5", "#b5993f", "#fc6f6f", "tomato", "yellow", "techblue", ] ); }; export const getInitialDimensions = (uiSchemaData: any): DimensionType => { const dimensionInitial: DimensionType = _.cloneDeep({ muliplier: 1, containerHeight: uiSchemaData.graphHeight || 460, graphHeight: uiSchemaData.graphHeight || 420, graphZoomHeight: uiSchemaData.graphZoomHeight, graphZoomWidth: uiSchemaData.graphZoomWidth, graphWidth: uiSchemaData.graphWidth || "inherit", orientation: uiSchemaData.orientation || "horizontal", width: uiSchemaData.width || 120, height: uiSchemaData.height || 60, }); return dimensionInitial; }; export default function getLinkComponent({ linkType, orientation, }: { layout: string; linkType: string; orientation: string; }): any { let LinkComponent: any; if (orientation === "vertical") { if (linkType === "step") { LinkComponent = LinkVerticalStep; } else if (linkType === "curve") { LinkComponent = LinkVerticalCurve; } else if (linkType === "line") { LinkComponent = LinkVerticalLine; } else { LinkComponent = LinkVertical; } } else if (linkType === "step") { LinkComponent = LinkHorizontalStep; } else if (linkType === "curve") { LinkComponent = LinkHorizontalCurve; } else if (linkType === "line") { LinkComponent = LinkHorizontalLine; } else { LinkComponent = LinkHorizontal; } return LinkComponent; } const findAndRemoveNode = (tree, label) => { if (!tree.children) return null; for (let i = 0; i < tree.children.length; i++) { if (tree.children[i].id === label) { return tree.children.splice(i, 1)[0]; } else { const result = findAndRemoveNode(tree.children[i], label); if (result) return result; } } return null; }; const findAndAddNode = (tree, label, nodeToAdd) => { if (tree.id === label) { tree.children = tree.children || []; tree.children.push(nodeToAdd); return true; } if (!tree.children) return false; for (let i = 0; i < tree.children.length; i++) { if (findAndAddNode(tree.children[i], label, nodeToAdd)) { return true; } } return false; }; export const moveNode = (tree, addInChildrenNode, removeNode) => { const newTree = _.cloneDeep(tree); const nodeToMove = findAndRemoveNode(newTree, removeNode); if (!nodeToMove) { return tree; } if (!findAndAddNode(newTree, addInChildrenNode, nodeToMove)) { return tree; } return newTree; }; export function assignUniqueIds(data) { function recursiveAssignId(item) { item.id = uniqueId(); if (item?.children && Array.isArray(item?.children)) { item?.children?.forEach((child) => recursiveAssignId(child)); } } const dataWithId = { ...data, id: Math.random() * 100 }; dataWithId?.children?.forEach((item) => recursiveAssignId(item)); return data; }