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