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) • 18.9 kB
JavaScript
import*as e from"react";import n,{PrimeReactContext as t}from"primereact/api";import{ComponentBase as r,useHandleStyle as o}from"primereact/componentbase";import{CSSTransition as a}from"primereact/csstransition";import{useMergeProps as l,useMountEffect as i,useUpdateEffect as c,useOverlayListener as s,useDisplayOrder as u,useGlobalOnEscapeKey as p,ESC_KEY_HANDLING_PRIORITIES as d,useUnmountEffect as f}from"primereact/hooks";import{ChevronDownIcon as m}from"primereact/icons/chevrondown";import{SpinnerIcon as v}from"primereact/icons/spinner";import{OverlayService as b}from"primereact/overlayservice";import{Portal as y}from"primereact/portal";import{classNames as h,DomHandler as g,ObjectUtils as w,IconUtils as S,UniqueComponentId as O,ZIndexUtils as E}from"primereact/utils";import{AngleRightIcon as x}from"primereact/icons/angleright";import{Ripple as I}from"primereact/ripple";function P(){return P=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},P.apply(null,arguments)}function j(e){return j="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},j(e)}function G(e,n){if("object"!=j(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,n||"default");if("object"!=j(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}function C(e){var n=G(e,"string");return"symbol"==j(n)?n:n+""}function A(e,n,t){return(n=C(n))in e?Object.defineProperty(e,n,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[n]=t,e}function N(e){if(Array.isArray(e))return e}function D(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,o,a,l,i=[],c=!0,s=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(i.push(r.value),i.length!==n);c=!0);}catch(e){s=!0,o=e}finally{try{if(!c&&null!=t.return&&(l=t.return(),Object(l)!==l))return}finally{if(s)throw o}}return i}}function k(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function L(e,n){if(e){if("string"==typeof e)return k(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?k(e,n):void 0}}function R(){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,n){return N(e)||D(e,n)||L(e,n)||R()}var H=r.extend({defaultProps:{__TYPE:"CascadeSelect",appendTo:null,ariaLabelledBy:null,autoFocus:!1,breakpoint:void 0,className:null,dataKey:null,disabled:!1,loadingIcon:null,dropdownIcon:null,loading:!1,id:null,inputId:null,inputRef:null,invalid:!1,variant:null,itemTemplate:null,name:null,onBeforeHide:null,onBeforeShow:null,onChange:null,onGroupChange:null,onHide:null,onShow:null,optionGroupChildren:null,optionGroupIcon:null,optionGroupLabel:null,optionLabel:null,optionValue:null,options:null,placeholder:null,scrollHeight:"400px",style:null,tabIndex:null,transitionOptions:null,value:null,children:void 0},css:{classes:{root:function(e){var n=e.props,t=e.focusedState,r=e.context;return h("p-cascadeselect p-component p-inputwrapper",{"p-disabled":n.disabled,"p-invalid":n.invalid,"p-variant-filled":n.variant?"filled"===n.variant:r&&"filled"===r.inputStyle,"p-focus":t,"p-inputwrapper-filled":n.value,"p-inputwrapper-focus":t||e.overlayVisibleState})},label:function(e){var n=e.props,t=e.label;return h("p-cascadeselect-label ",{"p-placeholder":t===n.placeholder,"p-cascadeselect-label-empty":!n.value&&"p-emptylabel"===t})},list:"p-cascadeselect-panel p-cascadeselect-items",sublistWrapper:"p-cascadeselect-sublist-wrapper",sublist:"p-cascadeselect-panel p-cascadeselect-items p-cascadeselect-sublist",item:function(e){return h("p-cascadeselect-item",{"p-cascadeselect-item-group":e.isGroup,"p-cascadeselect-item-active p-highlight":e.isSelected})},dropdownIcon:"p-cascadeselect-trigger-icon",loadingIcon:"p-cascadeselect-trigger-icon",dropdownButton:"p-cascadeselect-trigger",loadingButton:"p-cascadeselect-trigger",wrapper:"p-cascadeselect-items-wrapper",panel:"p-cascadeselect-panel p-component",content:"p-cascadeselect-item-content",optionGroupIcon:"p-cascadeselect-group-icon",text:"p-cascadeselect-item-text",transition:"p-connected-overlay"},styles:"\n@layer primereact {\n .p-cascadeselect {\n display: inline-flex;\n cursor: pointer;\n position: relative;\n user-select: none;\n }\n \n .p-cascadeselect-trigger {\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n }\n \n .p-cascadeselect-label {\n display: block;\n white-space: nowrap;\n overflow: hidden;\n flex: 1 1 auto;\n width: 1%;\n text-overflow: ellipsis;\n cursor: pointer;\n }\n \n .p-cascadeselect-label-empty {\n overflow: hidden;\n visibility: hidden;\n }\n \n .p-cascadeselect .p-cascadeselect-panel {\n min-width: 100%;\n }\n \n .p-cascadeselect-item {\n cursor: pointer;\n font-weight: normal;\n white-space: nowrap;\n }\n \n .p-cascadeselect-item-content {\n display: flex;\n align-items: center;\n overflow: hidden;\n position: relative;\n }\n \n .p-cascadeselect-group-icon {\n margin-left: auto;\n }\n \n .p-cascadeselect-items {\n margin: 0;\n padding: 0;\n list-style-type: none;\n min-width: 100%;\n }\n \n .p-fluid .p-cascadeselect {\n display: flex;\n }\n \n .p-fluid .p-cascadeselect .p-cascadeselect-label {\n width: 1%;\n }\n \n .p-cascadeselect-sublist-wrapper {\n position: absolute;\n min-width: 100%;\n z-index: 1;\n display: none;\n }\n \n .p-cascadeselect-item-active {\n overflow: visible;\n }\n \n .p-cascadeselect-item-active > .p-cascadeselect-sublist-wrapper {\n display: block;\n left: 100%;\n top: 0;\n }\n}\n"}});function B(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function V(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?B(Object(t),!0).forEach((function(n){A(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):B(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var F=e.memo((function(n){var r=l(),o=T(e.useState(null),2),a=o[0],s=o[1],u=e.useRef(null),p=e.useContext(t),d=n.ptm,f=n.cx,m=function(e,t){return d(e,{hostName:n.hostName,state:V({},t)})},v=function(e){n.onOptionSelect&&n.onOptionSelect(e)},b=function(e,t){var r=e.currentTarget.parentElement;switch(e.key){case"Down":case"ArrowDown":var o=y(r);o&&o.children[0].focus();break;case"Up":case"ArrowUp":var l=O(r);l&&l.children[0].focus();break;case"Right":case"ArrowRight":A(t)&&(a===t?r.children[1].children[0].children[0].focus():s(t));break;case"Left":case"ArrowLeft":s(null);var i=e.currentTarget.parentElement.parentElement.previousElementSibling;i&&i.focus();break;case"Enter":E(e,t);break;case"Tab":case"Escape":n.onPanelHide&&(n.onPanelHide(),e.preventDefault())}e.preventDefault()},y=function(e){var n=e.nextElementSibling;return n?g.hasClass(n,"p-disabled")||!g.hasClass(n,"p-cascadeselect-item")?y(n):n:null},O=function(e){var n=e.previousElementSibling;return n?g.hasClass(n,"p-disabled")||!g.hasClass(n,"p-cascadeselect-item")?O(n):n:null},E=function(e,t){A(t)?(s((function(e){return e===t?null:t})),n.onOptionGroupSelect&&n.onOptionGroupSelect({originalEvent:e,value:t})):n.onOptionSelect&&n.onOptionSelect({originalEvent:e,value:C(t)})},j=function(e){n.onOptionGroupSelect&&n.onOptionGroupSelect(e)},G=function(e){return n.optionLabel?w.resolveFieldData(e,n.optionLabel):e},C=function(e){return n.optionValue?w.resolveFieldData(e,n.optionValue):e},A=function(e){return Object.prototype.hasOwnProperty.call(e,n.optionGroupChildren[n.level])},N=function(e){return A(e)?(t=e,n.optionGroupLabel?w.resolveFieldData(t,n.optionGroupLabel):null):G(e);var t};i((function(){if(n.selectionPath&&n.options&&!n.dirty){var e=n.options.find((function(e){return n.selectionPath.includes(e)}));e&&s(e)}var t,r,o,a,l;n.root||(r=g.getOffset(t=u.current.parentElement.parentElement),o=g.getViewport(),a=u.current.offsetParent?u.current.offsetWidth:g.getHiddenElementOuterWidth(_),l=g.getOuterWidth(t.children[0]),parseInt(r.left,10)+l+a>o.width-g.calculateScrollbarWidth()&&(u.current.parentElement.style.left="-100%"))})),c((function(){n.parentActive||s(null)}),[n.parentActive]);var D,k,L,R,H=function(t){if(A(t)&&a===t){var r=w.resolveFieldData(t,n.optionGroupChildren[n.level]),o=a===t,l=n.level+1;return e.createElement(F,{hostName:n.hostName,options:r,className:f("sublist"),selectionPath:n.selectionPath,optionLabel:n.optionLabel,optionValue:n.optionValue,level:l,onOptionSelect:v,onOptionGroupSelect:j,parentActive:o,optionGroupLabel:n.optionGroupLabel,optionGroupChildren:n.optionGroupChildren,dirty:n.dirty,template:n.template,onPanelHide:n.onPanelHide,ptm:d,cx:f})}return null},B=function(t,o){var l=H(t),i=r({className:f("text")},m("text")),c=n.template?w.getJSXElement(n.template,C(t)):e.createElement("span",i,N(t)),s=r({className:f("optionGroupIcon")},m("optionGroupIcon")),u=n.optionGroupIcon||e.createElement(x,s),p=A(t)&&S.getJSXIcon(u,V({},s),{props:n}),d=N(t)+"_"+o,v=r({className:f("content"),onClick:function(e){return E(e,t)},tabIndex:0,onKeyDown:function(e){return b(e,t)}},m("content")),y=a===t,g=A(t),O=r({className:h(t.className,f("item",{option:t,isGroup:g,isSelected:y})),style:t.style,role:"none","data-p-item-group":g,"data-p-highlight":y},m("item",{selected:y,group:g}));return e.createElement("li",P({key:d},O),e.createElement("div",v,c,p,e.createElement(I,null)),l)},_=(D=r({ref:u,className:f(0===n.level?"list":"sublist",{context:p}),role:"listbox","aria-orientation":"horizontal"},m(0===n.level?"list":"sublist")),k=n.options?n.options.map(B):null,L=e.createElement("ul",D,k),R=r({className:f("sublistWrapper")},m("sublistWrapper")),0===n.level?L:e.createElement("div",R,L));return _}));function _(e,n){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=K(e))||n&&e&&"number"==typeof e.length){t&&(e=t);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},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,l=!0,i=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return l=e.done,e},e:function(e){i=!0,a=e},f:function(){try{l||null==t.return||t.return()}finally{if(i)throw a}}}}function K(e,n){if(e){if("string"==typeof e)return W(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?W(e,n):void 0}}function W(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=Array(n);t<n;t++)r[t]=e[t];return r}function M(e,n){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);n&&(r=r.filter((function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable}))),t.push.apply(t,r)}return t}function U(e){for(var n=1;n<arguments.length;n++){var t=null!=arguments[n]?arguments[n]:{};n%2?M(Object(t),!0).forEach((function(n){A(e,n,t[n])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):M(Object(t)).forEach((function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(t,n))}))}return e}var z=e.memo(e.forwardRef((function(r,x){var I=l(),j=e.useContext(t),G=H.getProps(r,j),C=T(e.useState(!1),2),A=C[0],N=C[1],D=T(e.useState(!1),2),k=D[0],L=D[1],R=T(e.useState(null),2),B=R[0],V=R[1],K=H.setMetaData({props:G,state:{focused:A,overlayVisible:k,attributeSelector:B},context:U({},j)}),W=K.ptm,M=K.cx;o(H.css.styles,K.isUnstyled,{name:"cascadeselect"});var z=e.useRef(null),J=e.useRef(null),X=e.useRef(null),Z=e.useRef(null),$=e.useRef(null),q=e.useRef(!1),Y=e.useRef(null),Q=T(s({target:z,overlay:J,listener:function(e,n){n.valid&&ve()},when:k}),2),ee=Q[0],ne=Q[1],te=u("cascade-select",k);p({callback:function(){ve()},when:k&&te,priority:[d.CASCADE_SELECT,te]});var re=function(e){G.onChange&&G.onChange({originalEvent:e,value:e.value}),se(),ve(),g.focus(X.current)},oe=function(e){q.current=!0,G.onGroupChange&&G.onGroupChange(e)},ae=function(e){return(G.optionLabel?w.resolveFieldData(e,G.optionLabel):e)||e},le=function(e){return G.optionValue?w.resolveFieldData(e,G.optionValue):e},ie=function(e,n){return w.resolveFieldData(e,G.optionGroupChildren[n])},ce=function(e,n){return Object.prototype.hasOwnProperty.call(e,G.optionGroupChildren[n])},se=function(){var e;if(null!=G.value&&G.options){var n,t=_(G.options);try{for(t.s();!(n=t.n()).done;){if(e=ue(n.value,0))break}}catch(e){t.e(e)}finally{t.f()}}Y.current=e},ue=function(e,n){if(ce(e,n)){var t,r,o=_(ie(e,n));try{for(o.s();!(r=o.n()).done;){if(t=ue(r.value,n+1))return t.unshift(e),t}}catch(e){o.e(e)}finally{o.f()}}else if(w.equals(G.value,le(e),G.dataKey))return[e];return null},pe=function(){N(!0)},de=function(){N(!1)},fe=function(e){switch(e.which){case 40:k?g.findSingle(J.current,'[data-pc-section="item"]').children[0].focus():e.altKey&&G.options&&G.options.length&&me(),e.preventDefault();break;case 32:k?ve():me(),e.preventDefault();break;case 9:ve()}},me=function(){G.onBeforeShow&&G.onBeforeShow(),L(!0)},ve=function(){G.onBeforeHide&&G.onBeforeHide(),L(!1),g.focus(X.current)},be=function(){E.set("overlay",J.current,j&&j.autoZIndex||n.autoZIndex,j&&j.zIndex.overlay||n.zIndex.overlay),g.addStyles(J.current,{position:"absolute",top:"0",left:"0"}),we(),B&&G.breakpoint&&(J.current.setAttribute(B+"_panel",""),Se())},ye=function(){ee(),G.onShow&&G.onShow()},he=function(){ne(),q.current=!1},ge=function(){E.clear(J.current),G.onHide&&G.onHide(),Oe()},we=function(){g.alignOverlay(J.current,Z.current.parentElement,G.appendTo||j&&j.appendTo||n.appendTo)},Se=function(){if(!$.current){$.current=g.createInlineStyle(j&&j.nonce||n.nonce,j&&j.styleContainer);var e="".concat(B,"_panel"),t="\n@media screen and (max-width: ".concat(G.breakpoint,") {\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-items-wrapper > ul {\n max-height: ").concat(G.scrollHeight,";\n overflow: ").concat(G.scrollHeight?"auto":"",";\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-sublist-wrapper {\n position:relative;\n left:0 !important;\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-sublist {\n overflow: hidden !important;\n }\n\n .p-cascadeselect-panel[").concat(e,"] .p-cascadeselect-item-active .p-cascadeselect-sublist {\n left: 0;\n box-shadow: none;\n border-radius: 0;\n padding: 0 0 0 calc(var(--inline-spacing) * 2); /* @todo */\n }\n\n .p-cascadeselect-panel[").concat(e,'] .p-cascadeselect-group-icon:before {\n content: "\\e930";\n }\n}\n');$.current.innerHTML=t}},Oe=function(){$.current=g.removeInlineStyle($.current)};e.useImperativeHandle(x,(function(){return{props:G,getElement:function(){return z.current},getOverlay:function(){return J.current},getInput:function(){return X.current},getLabel:function(){return Z.current},focus:function(){return g.focus(X.current)}}})),i((function(){G.breakpoint&&!B&&V(O()),G.autoFocus&&g.focus(X.current,G.autoFocus),we()})),e.useEffect((function(){w.combinedRefs(X,G.inputRef)}),[X,G.inputRef]),c((function(){se()}),[G.value]),f((function(){E.clear(J.current)}));var Ee=function(){var n=I({className:M("dropdownIcon")},W("dropdownIcon")),t=S.getJSXIcon(G.dropdownIcon||e.createElement(m,n),U({},n),{props:G}),r=I({className:M("dropdownButton"),role:"button","aria-haspopup":"listbox","aria-expanded":k},W("dropdownButton"));return e.createElement("div",r,t)},xe=I({className:M("wrapper")},W("wrapper")),Ie=I({ref:J,className:M("panel"),onClick:function(e){b.emit("overlay-click",{originalEvent:e,target:z.current})}},W("panel")),Pe=function(){var n=I({classNames:M("transition"),in:k,timeout:{enter:120,exit:100},options:G.transitionOptions,unmountOnExit:!0,onEnter:be,onEntered:ye,onExit:he,onExited:ge},W("transition")),t=e.createElement(a,P({nodeRef:J},n),e.createElement("div",Ie,e.createElement("div",xe,e.createElement(F,{hostName:"CascadeSelect",options:G.options,selectionPath:Y.current,optionGroupIcon:G.optionGroupIcon,optionLabel:G.optionLabel,optionValue:G.optionValue,parentActive:null!=G.value,level:0,optionGroupLabel:G.optionGroupLabel,optionGroupChildren:G.optionGroupChildren,onOptionSelect:re,onOptionGroupSelect:oe,root:!0,template:G.itemTemplate,onPanelHide:ve,ptm:W,cx:M}))));return e.createElement(y,{element:t,appendTo:G.appendTo})},je=H.getOtherProps(G);w.reduceKeys(je,g.DATA_PROPS);var Ge,Ce,Ae,Ne,De,ke,Le,Re,Te,He,Be,Ve,Fe,_e=w.reduceKeys(je,g.ARIA_PROPS);return Ge=G.value?ae(G.value):void 0,Ce=I({className:"p-hidden-accessible"},W("hiddenSelectedMessage")),Ae=I(U({ref:X,type:"text",id:G.inputId,name:G.name,defaultValue:Ge,readOnly:!0,disabled:G.disabled,onFocus:pe,onBlur:de,onKeyDown:function(e){return fe(e)},tabIndex:G.tabIndex,"aria-haspopup":"listbox"},_e),W("input")),Te=e.createElement("div",Ce,e.createElement("input",Ae)),Ne=G.value?ae(G.value):G.placeholder||"p-emptylabel",De=I({ref:Z,className:M("label",{label:Ne})},W("label",{context:U({label:Ne},j)})),He=e.createElement("span",De,Ne),Be=G.loading?(ke=I({className:M("loadingIcon")},W("loadingIcon")),Le=S.getJSXIcon(G.loadingIcon||e.createElement(v,{spin:!0}),U({},ke),{props:G}),Re=I({className:M("loadingButton"),role:"button","aria-haspopup":"listbox","aria-expanded":k},W("dropdownButton")),e.createElement("div",Re,Le)):Ee(),Ve=Pe(),Fe=I({id:G.id,ref:z,className:h(G.className,M("root",{focusedState:A,overlayVisibleState:k,context:j})),style:G.style,onClick:function(e){return n=e,void(G.disabled||G.loading||J.current&&J.current.contains(n.target)||(g.focus(X.current),k?ve():me()));var n}},je,W("root")),e.createElement("div",Fe,Te,He,Be,Ve)})));z.displayName="CascadeSelect";export{z as CascadeSelect};