UNPKG

primereact

Version:

PrimeReact is an open source UI library for React featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with Prime

2 lines (1 loc) 13.3 kB
import*as e from"react";import t,{localeOption as n}from"primereact/api";import{useOverlayListener as r,useMountEffect as l,useUpdateEffect as o,useUnmountEffect as a}from"primereact/hooks";import{OverlayService as i}from"primereact/overlayservice";import{Ripple as c}from"primereact/ripple";import{Tree as u}from"primereact/tree";import{ObjectUtils as s,classNames as p,DomHandler as f,ZIndexUtils as m}from"primereact/utils";import{CSSTransition as d}from"primereact/csstransition";import{Portal as y}from"primereact/portal";function v(){return v=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},v.apply(this,arguments)}function h(e){return h="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},h(e)}function g(e,t){if("object"!==h(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==h(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}function b(e){var t=g(e,"string");return"symbol"===h(t)?t:String(t)}function E(e,t,n){return(t=b(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function S(e){if(Array.isArray(e))return e}function N(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,l,o,a,i=[],c=!0,u=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=o.call(n)).done)&&(i.push(r.value),i.length!==t);c=!0);}catch(e){u=!0,l=e}finally{try{if(!c&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw l}}return i}}function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function w(e,t){if(e){if("string"==typeof e)return O(e,t);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)?O(e,t):void 0}}function x(){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 C(e,t){return S(e)||N(e,t)||w(e,t)||x()}var k={defaultProps:{__TYPE:"TreeSelect",appendTo:null,ariaLabel:null,ariaLabelledBy:null,className:null,disabled:!1,display:"comma",dropdownIcon:"pi pi-chevron-down",emptyMessage:null,expandedKeys:null,filter:!1,filterBy:"label",filterInputAutoFocus:!0,filterLocale:void 0,filterMode:"lenient",filterPlaceholder:null,filterTemplate:null,filterValue:null,inputId:null,inputRef:null,metaKeySelection:!0,name:null,onChange:null,onFilterValueChange:null,onHide:null,onNodeCollapse:null,onNodeExpand:null,onNodeSelect:null,onNodeUnselect:null,onShow:null,options:null,panelClassName:null,panelFooterTemplate:null,panelHeaderTemplate:null,panelStyle:null,placeholder:null,resetFilterOnHide:!1,scrollHeight:"400px",selectionMode:"single",style:null,tabIndex:null,transitionOptions:null,value:null,valueTemplate:null,children:void 0},getProps:function(e){return s.getMergedProps(e,k.defaultProps)},getOtherProps:function(e){return s.getDiffProps(e,k.defaultProps)}},P=e.forwardRef((function(n,r){var l,o,a=(l={maxHeight:n.scrollHeight||"auto"},o=p("p-treeselect-panel p-component",n.panelClassName,{"p-input-filled":"filled"===t.inputStyle,"p-ripple-disabled":!1===t.ripple}),e.createElement(d,{nodeRef:r,classNames:"p-connected-overlay",in:n.in,timeout:{enter:120,exit:100},options:n.transitionOptions,unmountOnExit:!0,onEnter:n.onEnter,onEntering:n.onEntering,onEntered:n.onEntered,onExit:n.onExit,onExited:n.onExited},e.createElement("div",{ref:r,className:o,style:n.panelStyle,onClick:n.onClick},n.header,e.createElement("div",{className:"p-treeselect-items-wrapper",style:l},n.children),n.footer)));return e.createElement(y,{element:a,appendTo:n.appendTo})}));function T(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function j(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?T(Object(n),!0).forEach((function(t){E(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):T(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function I(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=A(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,l=function(){};return{s:l,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:l}}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 o,a=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){i=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(i)throw o}}}}function A(e,t){if(e){if("string"==typeof e)return F(e,t);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)?F(e,t):void 0}}function F(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}P.displayName="TreeSelectPanel";var R=e.memo(e.forwardRef((function(d,y){var h=k.getProps(d),g=C(e.useState(!1),2),b=g[0],S=g[1],N=C(e.useState(!1),2),O=N[0],w=N[1],x=C(e.useState(h.expandedKeys),2),T=x[0],A=x[1],F=C(e.useState(""),2),R=F[0],H=F[1],M=e.useRef(null),K=e.useRef(null),D=e.useRef(null),V=e.useRef(h.inputRef),U=e.useRef(null),B=e.useRef(null),L=h.onToggle?h.expandedKeys:T,J=h.onFilterValueChange?h.filterValue:R,X=s.isEmpty(h.value),_=s.isEmpty(h.options),$="single"===h.selectionMode,z="checkbox"===h.selectionMode,Y={filter:function(e){return se(e)},reset:function(){return pe()}},Z=C(r({target:M,overlay:K,listener:function(e,t){t.valid&&ee()},when:O}),2),q=Z[0],G=Z[1],Q=function(){return Se.length?Se.map((function(e){return e.label})).join(", "):h.placeholder},W=function(){w(!0)},ee=function(){w(!1)},te=function(){S(!0)},ne=function(){S(!1)},re=function(e){h.onChange&&(B.current=!0,h.onChange({originalEvent:e.originalEvent,value:e.value,stopPropagation:function(){},preventDefault:function(){},target:{name:h.name,id:h.id,value:e.value}}))},le=function(e){h.onNodeSelect&&h.onNodeSelect(e),$&&ee()},oe=function(e){h.onNodeUnselect&&h.onNodeUnselect(e)},ae=function(e){h.onToggle?h.onToggle(e):A(e.value)},ie=function(e){H(e.value)},ce=function(e){switch(e.which){case 40:!O&&e.altKey&&W();break;case 32:O||(W(),e.preventDefault());break;case 13:case 27:O&&(ee(),e.preventDefault());break;case 9:ee()}},ue=function(e){13===e.which&&e.preventDefault()},se=function(e){var t=e.target.value;h.onFilterValueChange?h.onFilterValueChange({originalEvent:e,value:t}):H(t)},pe=function(){H("")},fe=function(){f.alignOverlay(K.current,U.current.parentElement,h.appendTo||t.appendTo)},me=function(){var e=f.findSingle(K.current,".p-treenode-content.p-highlight");e&&e.scrollIntoView&&e.scrollIntoView({block:"nearest",inline:"start"})},de=function e(t,n,r){if(t){if(ye(t,n)&&(r.push(t),delete n[t.key]),Object.keys(n).length&&t.children){var l,o=I(t.children);try{for(o.s();!(l=o.n()).done;){e(l.value,n,r)}}catch(e){o.e(e)}finally{o.f()}}}else{var a,i=I(h.options);try{for(i.s();!(a=i.n()).done;){e(a.value,n,r)}}catch(e){i.e(e)}finally{i.f()}}},ye=function(e,t){return z?t[e.key]&&t[e.key].checked:t[e.key]},ve=function(){var e=$?E({},"".concat(h.value),!0):j({},h.value);A({}),e&&h.options&&he(null,null,e)},he=function e(t,n,r){if(t){if(ye(t,r)&&(ge(n),delete r[t.key]),Object.keys(r).length&&t.children){var l,o=I(t.children);try{for(o.s();!(l=o.n()).done;){var a=l.value;n.push(t.key),e(a,n,r)}}catch(e){o.e(e)}finally{o.f()}}}else{var i,c=I(h.options);try{for(c.s();!(i=c.n()).done;){e(i.value,[],r)}}catch(e){c.e(e)}finally{c.f()}}},ge=function(e){if(e.length>0){var t,n=j({},T||{}),r=I(e);try{for(r.s();!(t=r.n()).done;){n[t.value]=!0}}catch(e){r.e(e)}finally{r.f()}A(n)}};e.useImperativeHandle(y,(function(){return{props:h,focus:function(){return f.focus(V.current)},getElement:function(){return M.current}}})),e.useEffect((function(){s.combinedRefs(V,h.inputRef)}),[V,h.inputRef]),l((function(){ve()})),o((function(){O&&h.filter&&fe()})),o((function(){ve()}),[h.options]),o((function(){O&&T&&fe()}),[T]),o((function(){O&&(B.current||ve(),B.current=!1)}),[h.value]),a((function(){m.clear(K.current)}));var be,Ee=function(){if(h.filter){var t=s.isNotEmpty(J)?J:"",n=e.createElement("div",{className:"p-treeselect-filter-container"},e.createElement("input",{ref:D,type:"text",value:t,autoComplete:"off",className:"p-treeselect-filter p-inputtext p-component",placeholder:h.filterPlaceholder,onKeyDown:ue,onChange:se,disabled:h.disabled}),e.createElement("span",{className:"p-treeselect-filter-icon pi pi-search"}));if(h.filterTemplate)n=s.getJSXElement(h.filterTemplate,{className:"p-treeselect-filter-container",element:n,filterOptions:Y,filterInputKeyDown:ue,filterInputChange:se,filterIconClassName:"p-dropdown-filter-icon pi pi-search",props:h});return e.createElement(e.Fragment,null,n)}},Se=function(){var e=[];if(s.isNotEmpty(h.value)&&h.options){var t=$?E({},"".concat(h.value),!0):j({},h.value);de(null,t,e)}return e}(),Ne=k.getOtherProps(h),Oe=s.reduceKeys(Ne,f.ARIA_PROPS),we=p("p-treeselect p-component p-inputwrapper",{"p-treeselect-chip":"chip"===h.display,"p-disabled":h.disabled,"p-focus":b,"p-inputwrapper-filled":!X,"p-inputwrapper-focus":b||O},h.className),xe=e.createElement("div",{className:"p-hidden-accessible"},e.createElement("input",v({ref:V,role:"listbox",id:h.inputId,type:"text",readOnly:!0,"aria-expanded":O,onFocus:te,onBlur:ne,onKeyDown:ce,disabled:h.disabled,tabIndex:h.tabIndex},Oe))),Ce=function(){var t=p("p-treeselect-label",{"p-placeholder":Q()===h.placeholder,"p-treeselect-label-empty":!h.placeholder&&X}),n=null;return h.valueTemplate?n=s.getJSXElement(h.valueTemplate,Se,h):"comma"===h.display?n=Q()||"empty":"chip"===h.display&&(n=e.createElement(e.Fragment,null,Se&&Se.map((function(t,n){return e.createElement("div",{className:"p-treeselect-token",key:"".concat(t.key,"_").concat(n)},e.createElement("span",{className:"p-treeselect-token-label"},t.label))})),X&&(h.placeholder||"empty"))),e.createElement("div",{className:"p-treeselect-label-container"},e.createElement("div",{className:t},n))}(),ke=(be=p("p-treeselect-trigger-icon p-clickable",h.dropdownIcon),e.createElement("div",{ref:U,className:"p-treeselect-trigger",role:"button","aria-haspopup":"listbox","aria-expanded":O},e.createElement("span",{className:be}))),Pe=e.createElement(e.Fragment,null,e.createElement(u,{value:h.options,selectionMode:h.selectionMode,selectionKeys:h.value,metaKeySelection:h.metaKeySelection,onSelectionChange:re,onSelect:le,onUnselect:oe,expandedKeys:L,onToggle:ae,onExpand:h.onNodeExpand,onCollapse:h.onNodeCollapse,filter:h.filter,filterValue:J,filterBy:h.filterBy,filterMode:h.filterMode,filterPlaceholder:h.filterPlaceholder,filterLocale:h.filterLocale,showHeader:!1,onFilterValueChange:ie}),_&&e.createElement("div",{className:"p-treeselect-empty-message"},h.emptyMessage||n("emptyMessage"))),Te=function(){var t=Ee(),r=e.createElement("button",{type:"button",className:"p-treeselect-close p-link",onClick:ee,"aria-label":n("close")},e.createElement("span",{className:"p-treeselect-close-icon pi pi-times","aria-hidden":"true"}),e.createElement(c,null)),l=e.createElement("div",{className:"p-treeselect-header"},t,r);return h.panelHeaderTemplate?s.getJSXElement(h.panelHeaderTemplate,{className:"p-treeselect-header",filterElement:t,closeElement:r,closeElementClassName:"p-treeselect-close p-link",closeIconClassName:"p-treeselect-close-icon pi pi-times",onCloseClick:ee,element:l,props:h}):l}(),je=s.getJSXElement(h.panelFooterTemplate,h);return e.createElement("div",v({ref:M,className:we,style:h.style},Ne,{onClick:function(e){h.disabled||K.current&&K.current.contains(e.target)||f.hasClass(e.target,"p-treeselect-close")||(f.focus(V.current),O?ee():W())}}),xe,Ce,ke,e.createElement(P,{ref:K,appendTo:h.appendTo,panelStyle:h.panelStyle,panelClassName:h.panelClassName,scrollHeight:h.scrollHeight,onClick:function(e){i.emit("overlay-click",{originalEvent:e,target:M.current})},header:Te,footer:je,transitionOptions:h.transitionOptions,in:O,onEnter:function(){m.set("overlay",K.current,t.autoZIndex,t.zIndex.overlay),fe(),me()},onEntered:function(){q(),h.filter&&h.filterInputAutoFocus&&f.focus(D.current,h.filterInputAutoFocus),h.onShow&&h.onShow()},onExit:function(){G()},onExited:function(){h.filter&&h.resetFilterOnHide&&pe(),m.clear(K.current),h.onHide&&h.onHide()}},Pe))})));R.displayName="TreeSelect";export{R as TreeSelect};