@nodeject/ui-components
Version:
UI library for non-trivial components
63 lines (62 loc) • 3.67 kB
JavaScript
import * as React from 'react';
import { Select } from 'antd';
export var EntryType;
(function (EntryType) {
EntryType[EntryType["None"] = 0] = "None";
EntryType[EntryType["Portal"] = 1] = "Portal";
EntryType[EntryType["Project"] = 1001] = "Project";
})(EntryType || (EntryType = {}));
export var MoveNodeMenu = function (props) {
var currentNode = props.graph.find(function (node) { return node.data.id === props.id; });
var currentParentNode = props.graph.find(function (node) { return node.data.id === currentNode.data.parent; });
var currentParentNodeText = currentParentNode
? currentParentNode.data.wbsId + " " + currentParentNode.data.title
: '';
var graphWithoutSelf = props.graph.filter(function (node) { return node.data.id !== props.id; });
var onRequestedParentChange = function (parentId) {
props.closeCallBack && props.closeCallBack();
props.onRequestedParentChange(props.id, parentId);
};
var onRequestedSiblingIndexChange = function (siblingIndex) {
props.closeCallBack && props.closeCallBack();
props.onRequestedSiblingIndexChange(props.id, siblingIndex);
};
var getNodeSiblings = function (node) {
var nodeParent = props.graph.find(function (n) { return n.data.id === node.data.parent; });
var nodeSiblings = nodeParent
? props.graph.filter(function (node) { return node.data.parent === nodeParent.data.id; })
: [];
return nodeSiblings;
};
var getSiblingIndex = function (node) {
return getNodeSiblings(node).indexOf(node) + 1;
};
var getSiblingsTotal = function (node) {
return getNodeSiblings(node).length;
};
var siblingsTotal = getSiblingsTotal(currentNode);
return (React.createElement("div", { style: { width: '150px' } },
React.createElement("div", null,
"Parent:",
React.createElement(Select, { showSearch: true, style: { width: '100%' }, placeholder: "Select a WBS Component", defaultValue: currentParentNodeText, optionFilterProp: "children", onChange: onRequestedParentChange, filterOption: function (input, option) {
return option.props.children
.toString()
.toLowerCase()
.indexOf(input.toLowerCase()) >= 0;
} }, graphWithoutSelf.map(function (node) { return (React.createElement(Select.Option, { key: node.data.id, value: node.data.id },
node.data.wbsId,
" ",
node.data.title)); }))),
siblingsTotal > 1 && (React.createElement("div", null,
"Sibling Index:",
React.createElement(Select, { style: { width: '100%' }, placeholder: "Select sibling index", defaultValue: getSiblingIndex(currentNode), optionFilterProp: "children", onChange: onRequestedSiblingIndexChange, filterOption: function (input, option) {
return option.props.children
.toString()
.toLowerCase()
.indexOf(input.toLowerCase()) >= 0;
} }, getNodeSiblings(currentNode).map(function (n) { return (
// below, we use getSiblingIndex(n) - 1 because users don't understand
// the concept of a list starting at 0. They want a list starting at 1.
// So we show the user a list starting at 1, but we use a 0 based list in our code.
React.createElement(Select.Option, { key: n.data.id, value: getSiblingIndex(n) - 1 }, getSiblingIndex(n))); }))))));
};