@nodeject/ui-components
Version:
UI library for non-trivial components
103 lines (102 loc) • 4.44 kB
JavaScript
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);
});
};