UNPKG

@nodeject/ui-components

Version:

UI library for non-trivial components

103 lines (102 loc) 4.44 kB
var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __spreadArrays = (this && this.__spreadArrays) || function () { for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; for (var r = Array(s), k = 0, i = 0; i < il; i++) for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) r[k] = a[j]; return r; }; import { v4 as uuidv4 } from 'uuid'; import produce from 'immer'; import * as React from 'react'; import cytoscape from 'cytoscape'; export function getArraysDifferences(array1, array2) { var arr1 = __spreadArrays(array1); var arr2 = __spreadArrays(array2); arr1.sort(function (n1, n2) { return n1['data'].id.localeCompare(n2['data'].id); }); arr2.sort(function (n1, n2) { return n1['data'].id.localeCompare(n2['data'].id); }); var differences = arr1.filter(function (n, index) { var diffTest = Object.keys(n).some(function (prop) { var cond1 = JSON.stringify(n[prop]); var cond2 = arr2[index] && JSON.stringify(arr2[index][prop]); return cond1 !== cond2; }); return diffTest; }); return differences; } export var createNewClientNode = function (parent) { return { data: { id: uuidv4(), isLoading: true, wbsId: '...', parent: parent, layoutStyle: 1, title: 'new component', visibility: 'visible' } }; }; export var toCytoscape = function (graph) { return cytoscape({ headless: true, elements: graph }); }; var isLastSibling = function (node, cytoGraph) { var siblingList = cytoGraph.nodes.filter(function (n) { return n.data.parent === node.data().parent; }); var currentNode = cytoGraph.nodes.find(function (n) { return n.data.id === node.data().id; }); var siblingListCount = siblingList.length; var nodeIndex = siblingList.indexOf(currentNode); return nodeIndex === siblingListCount - 1; }; var hasSiblings = function (node, cytoGraph) { var siblingList = cytoGraph.nodes.filter(function (n) { return n.data.parent === node.data().parent; }); return siblingList.length > 1; }; export var convertFromCytoGraphToSchedioTreeView = function (props) { // IMPORTANT: the roots() property from cytoscape cannot be used here because it depends on nodes with no incoming edges. // We did not define edges here, so we have to find nodes that either have no parent (note that even if a node has a parent, // if the node defined in parent does not exist, it will be considered as having no parent). // const newCytoGraph = {...props.cytoGraph} var newCytoGraph = produce(props.cytoGraph, function (draft) { draft; }); var cytoRoots = toCytoscape(newCytoGraph).nodes().orphans(); var loop = function (cyNode, wbsLevel) { var childrenList = cyNode.children().map(function (c) { return loop(c, wbsLevel + 1); }); var parentNode = newCytoGraph.nodes.find(function (n) { return n.data.id === cyNode.data().parent; }); var nodeData = __assign(__assign({}, cyNode.data()), { hasSiblings: hasSiblings(cyNode, newCytoGraph), isLastSibling: isLastSibling(cyNode, newCytoGraph), isParentLastSibling: parentNode ? isLastSibling(cyNode.parent(), newCytoGraph) : undefined, parentLayoutStyle: parentNode && parentNode.data.layoutStyle, wbsLevel: wbsLevel, options: props.options }); // const parentNode: any = cyNode.parent() var Component = props.NodeContainer; return { children: childrenList, TreeNodeComponent: React.createElement(Component, __assign({}, nodeData)), nodeKey: nodeData.id, parentKey: parentNode && parentNode.data.id }; }; var wbsInitialLevel = 1; return cytoRoots.map(function (cyNode) { return loop(cyNode, wbsInitialLevel); }); };