UNPKG

eyzy-tree

Version:
7 lines (6 loc) 6.79 kB
/*! * EyzyTree v0.0.4 * (c) 2018 amsik * Released under the MIT License. */ function __extends(e,t){function n(){this.constructor=e}extendStatics(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}function cn(e){var t=[];for(var n in e)hasOwn.call(e,n)&&e[n]&&t.push(n);return t.join(" ")}function s4(){return Math.floor(65536*(1+Math.random())).toString(16).substring(1)}function uuid(){return s4()+"-"+s4()}function parseNode(e,t){if(!e||!Array.isArray(e))return[];var n=t||null;return"string"==typeof e?[{text:e,id:uuid(),parent:n,child:[]}]:e.map(function(e){return"string"==typeof e?{id:uuid(),text:e,parent:n,child:[]}:(e.id=e.id||uuid(),e.child=Array.isArray(e.child)?parseNode(e.child,e):[],e.parent=n,e)})}function recurseDown(e,t,n){var r;return Array.isArray(e)?e.map(function(e){return recurseDown(e,t)}):(n||(r=t(e)),!1!==r&&e.child&&e.child.length&&(r=recurseDown(e.child,t)),r)}function traverseUp(e,t){for(var n=e.parent;n;){if(!1===t(n)||!n.parent)return;n=n.parent}}function copyArray(e){return e.concat([])}function isNodeIndeterminate(e,t){if(!e.child.length)return!1;var n=e.child.reduce(function(e,n){return!0===n.disabled||!0===n.disabledCheckbox||isNodeChecked(n,t)||e++,e},0);return n>0&&n<e.child.length}function isNodeChecked(e,t){return-1!==t.indexOf(e.id)}function isNodeSelected(e,t){return-1!==t.indexOf(e.id)}import React from"react";var extendStatics=function(e,t){return(extendStatics=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])})(e,t)},hasOwn={}.hasOwnProperty,hasChild=function(e){return Array.isArray(e.child)&&e.child.length>0},TreeNode=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.handleSelect=function(){t.props.disabled||t.props.onSelect&&t.props.onSelect(t.getNode())},t.handleCheck=function(){t.props.disabled||t.props.disabledCheckbox||t.props.onCheck&&t.props.onCheck(t.getNode())},t.handleExpand=function(){t.props.onExpand&&t.props.onExpand(t.getNode())},t.handleDoubleClick=function(e){t.props.onDoubleClick&&t.props.onDoubleClick(t.getNode())},t.renderCheckbox=function(){if(!t.props.checkable||t.props.hidenCheckbox)return null;var e=t.props.checkboxRenderer;return e?React.createElement("span",{className:"node-checkbox-overrided",onMouseUp:t.handleCheck},React.createElement(e,{node:t.getNode()})):React.createElement("span",{className:"node-checkbox",onMouseUp:t.handleCheck})},t.renderArrow=function(){var e=t.props.arrowRenderer;return hasChild(t.props)?e?React.createElement("span",{className:"node-arrow-extended",onMouseUp:t.handleExpand},React.createElement(e,{node:t.getNode()})):React.createElement("span",{className:"node-arrow",onMouseUp:t.handleExpand}):React.createElement("span",{className:"node-noop"})},t}return __extends(t,e),t.prototype.getNode=function(){var e=this.props,t=e.id,n=e.checked,r=e.selected,d=e.text,o=e.child,c=e.expanded,a=e.disabled,i={id:t,checked:n,selected:r,text:d,child:o,parent:e.parent};return void 0!==c&&(i.expanded=c),void 0!==a&&(i.disabled=a),i},t.prototype.render=function(){var e=this.props,t=e.checked,n=e.selected,r=e.children,d=e.expanded,o=e.disabled,c=e.disabledCheckbox,a=e.indeterminate,i=e.textRenderer,s=this.props.text,l=cn({"node-content":!0,"has-child":hasChild(this.props),selected:n,checked:t,expanded:d,disabled:o,"disabled-checkbox":c,indeterminate:!t&&a});return React.createElement("li",{className:"tree-node"},React.createElement("div",{className:l},this.renderArrow(),this.renderCheckbox(),React.createElement("span",{className:"node-text",onMouseUp:this.handleSelect,onDoubleClick:this.handleDoubleClick},i?React.createElement(i,{node:this.getNode()}):s)),hasChild(this.props)&&d&&React.createElement("ul",{className:"node-child"},r))},t}(React.PureComponent),EyzyTree=function(e){function t(t){var n=e.call(this,t)||this;n.refreshIndeterminateState=function(e,t){var r=copyArray(n.state.checkedNodes),d=copyArray(n.state.indeterminateNodes),o=[];recurseDown(e,function(e){e.disabled||e.disabledCheckbox||o.push(e.id)}),t?r.push.apply(r,o):r=r.filter(function(e){return!~o.indexOf(e)}),traverseUp(e,function(e){if(e.disabledCheckbox||e.disabled)return!1;var n=isNodeIndeterminate(e,r),o=e.id;n?(d.push(o),r=r.filter(function(e){return e!==o})):(d=d.filter(function(e){return e!==o}),t?r.push(o):r=r.filter(function(e){return e!==o}))}),d=d.filter(function(e){return!~r.indexOf(e)}),n.setState({checkedNodes:r,indeterminateNodes:d})},n.select=function(e,t){void 0===t&&(t=!1),n.setState({selectedNodes:[e.id]}),!1!==t&&n.props.onSelect&&n.props.onSelect(e)},n.check=function(e){var t,r=e.id,d=!isNodeChecked(e,n.state.checkedNodes);t=d?n.state.checkedNodes.concat([r]):n.state.checkedNodes.filter(function(e){return r!==e}),!1!==n.props.autoCheckChildren?n.refreshIndeterminateState(e,d):n.setState({checkedNodes:t}),n.props.onCheck&&n.props.onCheck(e)},n.expand=function(e){var t=e.id;e.child.length&&(e.expanded?n.setState({expandedNodes:n.state.expandedNodes.filter(function(e){return t!==e})}):n.setState({expandedNodes:n.state.expandedNodes.concat([t])}),n.props.selectOnExpand&&!e.selected&&n.select(e),n.props.onExpand&&n.props.onExpand(e,!!e.expanded))},n.handleDoubleClick=function(e){e.disabled||!e.child.length||n.props.expandOnSelect||(n.expand(e),n.props.onDoubleClick&&n.props.onDoubleClick(e))},n.handleSelect=function(e){n.select(e);var t=n.props,r=t.checkOnSelect,d=t.expandOnSelect;t.checkable&&r&&!e.disabledCheckbox?n.check(e):d&&n.expand(e)},n.renderNode=function(e){var t=isNodeSelected(e,n.state.selectedNodes),r=isNodeChecked(e,n.state.checkedNodes),d=-1!==n.state.indeterminateNodes.indexOf(e.id),o=e.child.length>0&&-1!==n.state.expandedNodes.indexOf(e.id);return React.createElement(TreeNode,{id:e.id,key:e.id,text:e.text,child:e.child,parent:e.parent,onSelect:n.handleSelect,onDoubleClick:n.handleDoubleClick,onCheck:n.check,onExpand:n.expand,selected:t,checked:r,indeterminate:d,expanded:o,disabled:e.disabled,disabledCheckbox:e.disabledCheckbox,checkboxRenderer:n.props.checkboxRenderer,textRenderer:n.props.textRenderer,arrowRenderer:n.props.arrowRenderer,checkable:n.props.checkable,hidenCheckbox:e.hidenCheckbox},o?e.child.map(n.renderNode):null)};var r=parseNode(t.data),d=[],o=[],c=[],a=[];return recurseDown(r,function(e){e.checked&&d.push(e.id),e.selected&&o.push(e.id),e.expanded&&c.push(e.id)}),n.state={data:r,selectedNodes:o,checkedNodes:d,expandedNodes:c,indeterminateNodes:a},n}return __extends(t,e),t.prototype.render=function(){var e=this.props,t="theme"in e?"eyzy-tree "+e.theme:"eyzy-tree eyzy-theme";return React.createElement("ul",{className:t},this.state.data.map(this.renderNode))},t.TreeNode=TreeNode,t}(React.Component);export default EyzyTree;