UNPKG

@nodeject/ui-components

Version:

UI library for non-trivial components

63 lines (62 loc) 3.67 kB
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))); })))))); };