primereact
Version:
PrimeReact is an open source UI library for React featuring a rich set of 80+ 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) • 6.85 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{classNames as a,IconUtils as r,ObjectUtils 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,a,r=[],i=!0,o=!1;try{for(t=t.call(e);!(i=(l=t.next()).done)&&(r.push(l.value),!n||r.length!==n);i=!0);}catch(e){o=!0,a=e}finally{try{i||null==t.return||t.return()}finally{if(o)throw a}}return r}}function y(){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 g(e,n){return b(e)||v(e,n)||p(e,n)||y()}var N=e.memo((function(l){var o=g(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(N,{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=r.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:l.menuProps}),y=n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),g=n.items&&e.createElement("span",{className:f}),N=b(n,u),E=e.createElement("a",{href:n.url||"#",className:s,target:n.target,onClick:function(e){return c(e,n)},role:"menuitem","aria-disabled":n.disabled},g,v,y);n.template&&(E=i.getJSXElement(n.template,n,{onClick:function(e){return c(e,n)},className:s,labelClassName:"p-menuitem-text",iconClassName:d,submenuIconClassName:f,element:E,props:l,leaf:!n.items,active:u}));return e.createElement("li",{key:o,id:n.id,className:m,style:n.style,role:"none"},E,N)},y=function(e,n){return e.separator?d(n):v(e,n)},E=a("p-submenu-list",l.className),h=l.model?l.model.map(y):null;return e.createElement("ul",{className:E,role:"tree"},h)}));N.displayName="PanelMenuSub";var E=e.memo(e.forwardRef((function(m,s){var c=g(e.useState(m.id),2),p=c[0],d=c[1],b=g(e.useState(null),2),v=b[0],y=b[1],h=g(e.useState(!1),2),x=h[0],S=h[1],O=e.useRef(null),k=p+"_header",w=p+"_content",C=function(){if(m.model){if(m.multiple)return m.model.filter((function(e){return e.expanded}));var e=null;return m.model.forEach((function(n){n.expanded&&(e?n.expanded=!1:e=n)})),e}return null},P=function(e,n){if(n.disabled)e.preventDefault();else{n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n});var t=v;I(n)?(n.expanded=!1,y(m.multiple?t.filter((function(e){return e!==n})):null)):(!m.multiple&&t&&(t.expanded=!1),n.expanded=!0,y(m.multiple?[].concat(f(t||[]),[n]):n))}},I=function(e){return v&&(m.multiple?v.indexOf(e)>-1:v===e)};e.useImperativeHandle(s,(function(){return{props:m,getElement:function(){return O.current}}})),t((function(){p||d(o()),y(C())})),l((function(){S(!0),y(C())}),[m.model]);var A=function(){S(!1)},j=function(t,l){if(!1===t.visible)return null;var o=t.label+"_"+l,u=I(t),s=a("p-panelmenu-panel",t.className),c=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=r.getJSXIcon(t.icon,{className:"p-menuitem-icon"},{props:m}),b=t.items&&e.createElement("span",{className:p}),v=t.label&&e.createElement("span",{className:"p-menuitem-text"},t.label),y=a("p-toggleable-content",{"p-toggleable-content-collapsed":!u}),g=e.createRef(),E=e.createElement("a",{href:t.url||"#",className:"p-panelmenu-header-link",onClick:function(e){return P(e,t)},"aria-expanded":u,id:k,"aria-controls":w,"aria-disabled":t.disabled},b,f,v);t.template&&(E=i.getJSXElement(t.template,t,{onClick:function(e){return P(e,t)},className:"p-panelmenu-header-link",labelClassName:"p-menuitem-text",submenuIconClassName:p,iconClassName:d,element:E,props:m,leaf:!t.items,active:u}));return e.createElement("div",{key:o,className:s,style:t.style},e.createElement("div",{className:c,style:t.style},E),e.createElement(n,{nodeRef:g,classNames:"p-toggleable-content",timeout:{enter:1e3,exit:450},onEnter:A,disabled:x,in:u,unmountOnExit:!0,options:m.transitionOptions},e.createElement("div",{ref:g,className:y,role:"region",id:w,"aria-labelledby":k},e.createElement("div",{className:"p-panelmenu-content"},e.createElement(N,{menuProps:m,model:t.items,className:"p-panelmenu-root-submenu",multiple:m.multiple})))))},_=i.findDiffKeys(m,E.defaultProps),R=a("p-panelmenu p-component",m.className),D=m.model?m.model.map(j):null;return e.createElement("div",u({id:m.id,ref:O,className:R,style:m.style},_),D)})));E.displayName="PanelMenu",E.defaultProps={__TYPE:"Panel",id:null,model:null,style:null,className:null,multiple:!1,transitionOptions:null};export{E as PanelMenu};