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) • 7.08 kB
JavaScript
import*as e from"react";import{CSSTransition as n}from"primereact/csstransition";import{useMountEffect as t,useUpdateEffect as l}from"primereact/hooks";import{ObjectUtils as r,classNames as a,IconUtils as i,UniqueComponentId as o}from"primereact/utils";function u(){return u=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var l in t)Object.prototype.hasOwnProperty.call(t,l)&&(e[l]=t[l])}return e},u.apply(this,arguments)}function m(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,l=new Array(n);t<n;t++)l[t]=e[t];return l}function s(e){if(Array.isArray(e))return m(e)}function c(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}function p(e,n){if(e){if("string"==typeof e)return m(e,n);var t=Object.prototype.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)?m(e,n):void 0}}function d(){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 f(e){return s(e)||c(e)||p(e)||d()}function b(e){if(Array.isArray(e))return e}function v(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var l,r,a,i,o=[],u=!0,m=!1;try{if(a=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;u=!1}else for(;!(u=(l=a.call(t)).done)&&(o.push(l.value),o.length!==n);u=!0);}catch(e){m=!0,r=e}finally{try{if(!u&&null!=t.return&&(i=t.return(),Object(i)!==i))return}finally{if(m)throw r}}return o}}function g(){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 y(e,n){return b(e)||v(e,n)||p(e,n)||g()}var N={defaultProps:{__TYPE:"Panel",id:null,model:null,style:null,className:null,multiple:!1,transitionOptions:null,children:void 0},getProps:function(e){return r.getMergedProps(e,N.defaultProps)},getOtherProps:function(e){return r.getDiffProps(e,N.defaultProps)}},h=e.memo((function(l){var o=y(e.useState(null),2),u=o[0],m=o[1],s=function(){if(l.model){if(l.multiple)return l.model.filter((function(e){return e.expanded}));var e=null;return l.model.forEach((function(n){n.expanded&&(e?n.expanded=!1:e=n)})),e}return null},c=function(e,n){if(n.disabled)e.preventDefault();else{n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n});var t=u;p(n)?(n.expanded=!1,m(l.multiple?t.filter((function(e){return e!==n})):null)):(!l.multiple&&t&&(t.expanded=!1),n.expanded=!0,m(l.multiple?[].concat(f(t||[]),[n]):n))}},p=function(e){return u&&(l.multiple?u.indexOf(e)>-1:u===e)};t((function(){m(s())}));var d=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator"})},b=function(t,r){var i=a("p-toggleable-content",{"p-toggleable-content-collapsed":!r}),o=e.createRef();return t.items?e.createElement(n,{nodeRef:o,classNames:"p-toggleable-content",timeout:{enter:1e3,exit:450},in:r,unmountOnExit:!0},e.createElement("div",{ref:o,className:i},e.createElement(h,{menuProps:l.menuProps,model:t.items,multiple:l.multiple}))):null},v=function(n,t){if(!1===n.visible)return null;var o=n.label+"_"+t,u=p(n),m=a("p-menuitem",n.className),s=a("p-menuitem-link",{"p-disabled":n.disabled}),d=a("p-menuitem-icon",n.icon),f=a("p-panelmenu-icon pi pi-fw",{"pi-angle-right":!u,"pi-angle-down":u}),v=i.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:l.menuProps}),g=n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),y=n.items&&e.createElement("span",{className:f}),N=b(n,u),h=e.createElement("a",{href:n.url||"#",className:s,target:n.target,onClick:function(e){return c(e,n)},role:"menuitem","aria-disabled":n.disabled},y,v,g);n.template&&(h=r.getJSXElement(n.template,n,{onClick:function(e){return c(e,n)},className:s,labelClassName:"p-menuitem-text",iconClassName:d,submenuIconClassName:f,element:h,props:l,leaf:!n.items,active:u}));return e.createElement("li",{key:o,id:n.id,className:m,style:n.style,role:"none"},h,N)},g=function(e,n){return e.separator?d(n):v(e,n)},N=a("p-submenu-list",l.className),E=l.model?l.model.map(g):null;return e.createElement("ul",{className:N,role:"tree"},E)}));h.displayName="PanelMenuSub";var E=e.memo(e.forwardRef((function(m,s){var c=N.getProps(m),p=y(e.useState(c.id),2),d=p[0],b=p[1],v=y(e.useState(null),2),g=v[0],E=v[1],x=y(e.useState(!1),2),P=x[0],S=x[1],O=e.useRef(null),k=d+"_header",w=d+"_content",C=function(){if(c.model){if(c.multiple)return c.model.filter((function(e){return e.expanded}));var e=null;return c.model.forEach((function(n){n.expanded&&(e?n.expanded=!1:e=n)})),e}return null},I=function(e,n){if(n.disabled)e.preventDefault();else{n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n});var t=g;j(n)?(n.expanded=!1,E(c.multiple?t.filter((function(e){return e!==n})):null)):(!c.multiple&&t&&(t.expanded=!1),n.expanded=!0,E(c.multiple?[].concat(f(t||[]),[n]):n))}},j=function(e){return g&&(c.multiple?g.indexOf(e)>-1:g===e)};e.useImperativeHandle(s,(function(){return{props:c,getElement:function(){return O.current}}})),t((function(){d||b(o()),E(C())})),l((function(){S(!0),E(C())}),[c.model]);var A=function(){S(!1)},_=function(t,l){if(!1===t.visible)return null;var o=t.label+"_"+l,u=j(t),m=a("p-panelmenu-panel",t.className),s=a("p-component p-panelmenu-header",{"p-highlight":u,"p-disabled":t.disabled}),p=a("p-panelmenu-icon pi",{"pi-chevron-right":!u," pi-chevron-down":u}),d=a("p-menuitem-icon",t.icon),f=i.getJSXIcon(t.icon,{className:"p-menuitem-icon"},{props:c}),b=t.items&&e.createElement("span",{className:p}),v=t.label&&e.createElement("span",{className:"p-menuitem-text"},t.label),g=a("p-toggleable-content",{"p-toggleable-content-collapsed":!u}),y=e.createRef(),N=e.createElement("a",{href:t.url||"#",className:"p-panelmenu-header-link",onClick:function(e){return I(e,t)},"aria-expanded":u,id:k,"aria-controls":w,"aria-disabled":t.disabled},b,f,v);t.template&&(N=r.getJSXElement(t.template,t,{onClick:function(e){return I(e,t)},className:"p-panelmenu-header-link",labelClassName:"p-menuitem-text",submenuIconClassName:p,iconClassName:d,element:N,props:c,leaf:!t.items,active:u}));return e.createElement("div",{key:o,className:m,style:t.style},e.createElement("div",{className:s,style:t.style},N),e.createElement(n,{nodeRef:y,classNames:"p-toggleable-content",timeout:{enter:1e3,exit:450},onEnter:A,disabled:P,in:u,unmountOnExit:!0,options:c.transitionOptions},e.createElement("div",{ref:y,className:g,role:"region",id:w,"aria-labelledby":k},e.createElement("div",{className:"p-panelmenu-content"},e.createElement(h,{menuProps:c,model:t.items,className:"p-panelmenu-root-submenu",multiple:c.multiple})))))},R=N.getOtherProps(c),D=a("p-panelmenu p-component",c.className),J=c.model?c.model.map(_):null;return e.createElement("div",u({id:c.id,ref:O,className:D,style:c.style},R),J)})));E.displayName="PanelMenu";export{E as PanelMenu};