use-tree-state
Version:
A super-light and customizable React hook to manage tree state like never before
1 lines • 9.8 kB
JavaScript
!function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r(require("react")):"function"==typeof define&&define.amd?define(["react"],r):"object"==typeof exports?exports["use-tree-state"]=r(require("react")):e["use-tree-state"]=r(e.react)}(self,(function(e){return(()=>{"use strict";var r={297:r=>{r.exports=e}},n={};function t(e){var o=n[e];if(void 0!==o)return o.exports;var a=n[e]={exports:{}};return r[e](a,a.exports,t),a.exports}t.d=(e,r)=>{for(var n in r)t.o(r,n)&&!t.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:r[n]})},t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var o={};return(()=>{t.r(o),t.d(o,{default:()=>D,findAllTargetPathByProp:()=>k,findTargetNode:()=>d,findTargetPathByProp:()=>A,testData:()=>N});var e=t(297);function r(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function n(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?r(Object(t),!0).forEach((function(r){a(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):r(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}function a(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function i(e){return function(e){if(Array.isArray(e))return l(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,r){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=u(e))||r&&e&&"number"==typeof e.length){n&&(e=n);var t=0,o=function(){};return{s:o,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,i=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==n.return||n.return()}finally{if(c)throw a}}}}function u(e,r){if(e){if("string"==typeof e)return l(e,r);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,r):void 0}}function l(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}var f=function(e){return JSON.parse(JSON.stringify(e))},d=function(e,r){var n,t=e,o=c(r);try{for(o.s();!(n=o.n()).done;){var a=n.value,i=t.children;if(a>=i.length||a<0)throw new Error("finding node failed: invalid path!!");t=i[a]}}catch(e){o.e(e)}finally{o.f()}return t},p=function e(r){var n=r.children,t=r._id;return n?Math.max.apply(Math,[t].concat(i(n.map(e)))):t},s=function(e){var r=0;return function e(n){n._id=r,r+=1;var t=n.children;if(t){var o,a=c(t);try{for(a.s();!(o=a.n()).done;)e(o.value)}catch(e){a.e(e)}finally{a.f()}}return n}(f(e))},y=function e(r,t){r.checked=t;var o=r.children;if(o){var a,i=c(o);try{for(i.s();!(a=i.n()).done;)e(a.value,t)}catch(e){i.e(e)}finally{i.f()}}return n({},r)},h=y,v=function e(r){if(0!==r.length){var n=r.pop();n.checked=function(e){var r=e.children;if(!(null!=r&&r.length)>0)return e.checked;var n,t=0,o=c(r);try{for(o.s();!(n=o.n()).done;)t+=n.value.checked}catch(e){o.e(e)}finally{o.f()}var a=.5;return t===r.length?a=1:0===t&&(a=0),a}(n),e(r)}},m=function(e,r,t){var o,a=e,i=[a],u=c(r);try{for(u.s();!(o=u.n()).done;){var l=o.value;a=a.children[l],i.push(a)}}catch(e){u.e(e)}finally{u.f()}return y(a,t),i.pop(),v(i),n({},e)},b=function(e,r,t){return d(e,r).name=t,n({},e)},g=function(e,r){var t=e;if(0===r.length)return t.children=[],t.checked=0,t;var o,a=[t],i=r.pop(),u=c(r);try{for(u.s();!(o=u.n()).done;){var l=o.value;t=t.children[l],a.push(t)}}catch(e){u.e(e)}finally{u.f()}return t.children.splice(i,1),v(a),n({},e)},O=function(e,r){var t=arguments.length>2&&void 0!==arguments[2]&&arguments[2],o=p(e)+1,a=d(e,r),i=a.children;if(!i)throw new Error("can't add node to a file!!");return t?i.push({_id:o,name:"new folder",checked:Math.floor(a.checked),children:[]}):i.unshift({_id:o,name:"new file",checked:Math.floor(a.checked)}),n({},e)},j=function(e,r,t){var o=d(e,r);if(!o.children)throw new Error("only parent node (folder) can be opened!!");return o.isOpen=t,n({},e)},w=function e(r,t){var o=n({},r),a=o.children;return a&&(o.isOpen=t,o.children=a.map((function(r){return e(r,t)}))),o},P=function e(r){var n=r.children,t=r.isOpen;if(n&&void 0===t)return!1;if(!n&&void 0!==t)return!1;if(n){var o,a=c(n);try{for(a.s();!(o=a.n()).done;)if(!e(o.value))return!1}catch(e){a.e(e)}finally{a.f()}}return!0},S=function(e,r){for(var n=arguments.length,t=new Array(n>2?n-2:0),o=2;o<n;o++)t[o-2]=arguments[o];return{type:e,path:r,params:t}},k=function(e,r,n){var t=[];return function e(o,a){o[r]===n&&t.push(f(a));var c=o.children;c&&c.forEach((function(r,n){return e(r,[].concat(i(a),[n]))}))}(e,[]),t},A=function(e,r,n){var t=k(e,r,n);return t.length>0?t[0]:null},N={name:"All Cryptos",children:[{name:"Bitcoin"},{name:"Etherium"},{name:"Polkadot"},{name:"POW",children:[{name:"Bitcoin"},{name:"Litecoin"},{name:"Bitcoin Cash"}]},{name:"Public Chains",children:[{name:"Ripple"},{name:"Chainlink"},{name:"POW",children:[{name:"Bitcoin"},{name:"Litecoin"},{name:"Bitcoin Cash"}]},{name:"POS",children:[{name:"Etherium"},{name:"EOS"},{name:"Crosschain",children:[{name:"Polkadot"},{name:"Cosmos"}]}]}]}]};function E(e,r){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);r&&(t=t.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),n.push.apply(n,t)}return n}function x(e,r,n){return r in e?Object.defineProperty(e,r,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[r]=n,e}function B(e){return function(e){if(Array.isArray(e))return I(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||T(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function C(e,r){return function(e){if(Array.isArray(e))return e}(e)||function(e,r){var n=e&&("undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"]);if(null!=n){var t,o,a=[],i=!0,c=!1;try{for(n=n.call(e);!(i=(t=n.next()).done)&&(a.push(t.value),!r||a.length!==r);i=!0);}catch(e){c=!0,o=e}finally{try{i||null==n.return||n.return()}finally{if(c)throw o}}return a}}(e,r)||T(e,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function T(e,r){if(e){if("string"==typeof e)return I(e,r);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?I(e,r):void 0}}function I(e,r){(null==r||r>e.length)&&(r=e.length);for(var n=0,t=new Array(r);n<r;n++)t[n]=e[n];return t}const D=function(r){var n=r.data,t=r.onChange,o=r.options,a=void 0===o?{}:o,i=r.customReducers,c=void 0===i?{}:i,u=C((0,e.useState)(null),2),l=u[0],f=u[1],d=C((0,e.useState)({type:"initialization",path:null,params:[]}),2),p=d[0],y=d[1],v=a.initCheckedStatus,k=a.initOpenStatus;(0,e.useEffect)((function(){var e=function(e){var r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"unchecked",n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"open",t=s(e);switch(r){case"unchecked":t=h(t,0);break;case"checked":t=h(t,1)}switch(n){case"open":t=w(t,!0);break;case"closed":t=w(t,!1);break;default:P(t)||(console.log("custom open status is invalid! Fell back to all opened."),t=w(t,!0))}return t}(n,v,k);f(e)}),[]),(0,e.useEffect)((function(){"function"==typeof t&&l&&p&&t(l,p)}),[l,p]);var N=function(e,r){return function(n){for(var t=n?B(n):null,o=arguments.length,a=new Array(o>1?o-1:0),i=1;i<o;i++)a[i-1]=arguments[i];var c=S.apply(void 0,[r,t].concat(a)),u=e.apply(void 0,[l,t].concat(a));y(c),f(u)}},T=function(e){return function(r,n){for(var t=A(l,r,n),o=arguments.length,a=new Array(o>2?o-2:0),i=2;i<o;i++)a[i-2]=arguments[i];return t?e.apply(void 0,[t].concat(a)):null}},I=Object.fromEntries(Object.entries(c).map((function(e){var r=C(e,2),n=r[0],t=r[1];return[n,N(t,n)]}))),D=function(e){for(var r=1;r<arguments.length;r++){var n=null!=arguments[r]?arguments[r]:{};r%2?E(Object(n),!0).forEach((function(r){x(e,r,n[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):E(Object(n)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(n,r))}))}return e}({setTreeState:function(e){var r=S("setTreeState",null,e);y(r),f(e)},checkNode:N(m,"checkNode"),renameNode:N(b,"renameNode"),deleteNode:N(g,"deleteNode"),addNode:N(O,"addNode"),toggleOpen:N(j,"toggleOpen")},I);return D.checkNodeByProp=T(D.checkNode),D.renameNodeByProp=T(D.renameNode),D.deleteNodeByProp=T(D.deleteNode),D.addNodeByProp=T(D.addNode),D.toggleOpenByProp=T(D.toggleOpen),{treeState:l,reducers:D}}})(),o})()}));