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.61 kB
JavaScript
import*as e from"react";import n from"primereact/api";import{useEventListener as t,useMountEffect as r,useUpdateEffect as a}from"primereact/hooks";import{Ripple as l}from"primereact/ripple";import{DomHandler as i,ZIndexUtils as u,ObjectUtils as m,classNames as o,IconUtils as s}from"primereact/utils";function c(){return c=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},c.apply(this,arguments)}function p(e){if(Array.isArray(e))return e}function f(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var r,a,l=[],i=!0,u=!1;try{for(t=t.call(e);!(i=(r=t.next()).done)&&(l.push(r.value),!n||l.length!==n);i=!0);}catch(e){u=!0,a=e}finally{try{i||null==t.return||t.return()}finally{if(u)throw a}}return l}}function d(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}function v(e,n){if(e){if("string"==typeof e)return d(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)?d(e,n):void 0}}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 b(e,n){return p(e)||f(e,n)||v(e,n)||g()}var y=e.memo(e.forwardRef((function(p,f){var d=b(e.useState(null),2),v=d[0],g=d[1],h=e.useRef(null),E="horizontal"===p.orientation,N="vertical"===p.orientation,k=b(t({type:"click",listener:function(e){A(e)&&g(null)}}),1)[0],S=function(e,n){n.disabled?e.preventDefault():(n.url||e.preventDefault(),n.command&&n.command({originalEvent:e,item:n}),g(null))},w=function(e,n){var t=e.currentTarget.parentElement;switch(e.which){case 40:E?D(n):_(t),e.preventDefault();break;case 38:N?j(t):n.items&&n===v&&C(),e.preventDefault();break;case 39:E?_(t):D(n),e.preventDefault();break;case 37:E?j(t):n.items&&n===v&&C(),e.preventDefault()}},D=function(e){e.items&&g(e)},C=function(e){g(null)},x=function e(n){var t=n.nextElementSibling;return t?i.hasClass(t,"p-disabled")||!i.hasClass(t,"p-menuitem")?e(t):t:null},I=function e(n){var t=n.previousElementSibling;return t?i.hasClass(t,"p-disabled")||!i.hasClass(t,"p-menuitem")?e(t):t:null},_=function(e){var n=x(e);n&&n.children[0].focus()},j=function(e){var n=I(e);n&&n.children[0].focus()},A=function(e){return h.current&&!(h.current.isSameNode(e.target)||h.current.contains(e.target))},J=function(e){var n;switch(e.items?e.items.length:0){case 2:n="p-megamenu-col-6";break;case 3:n="p-megamenu-col-4";break;case 4:n="p-megamenu-col-3";break;case 6:n="p-megamenu-col-2";break;default:n="p-megamenu-col-12"}return n};e.useImperativeHandle(f,(function(){return{props:p,getElement:function(){return h.current}}})),r((function(){k()})),a((function(){var e=i.findSingle(h.current,".p-menuitem-active > .p-megamenu-panel");return v&&u.set("menu",e,n.autoZIndex,n.zIndex.menu),function(){u.clear(e)}}),[v]);var M=function(n){return e.createElement("li",{key:"separator_"+n,className:"p-menu-separator",role:"separator"})},O=function(n){if(n.items){var t=o("p-submenu-icon pi",{"pi-angle-down":E,"pi-angle-right":N});return e.createElement("span",{className:t})}return null},X=function(n,t){if(!1===n.visible)return null;if(n.separator)return M(t);var r=n.label+"_"+t,a=o("p-menuitem",n.className),i=o("p-menuitem-link",{"p-disabled":n.disabled}),u=o(n.icon,"p-menuitem-icon"),c=s.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:p}),f=e.createElement("a",{href:n.url||"#",className:i,target:n.target,onClick:function(e){return S(e,n)},role:"menuitem","aria-disabled":n.disabled},c,n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),e.createElement(l,null));return n.template&&(f=m.getJSXElement(n.template,n,{onClick:function(e){return S(e,n)},className:i,labelClassName:"p-menuitem-text",iconClassName:u,element:f,props:p})),e.createElement("li",{key:r,id:n.id,className:a,style:n.style,role:"none"},f)},z=function(n){var t=o("p-megamenu-submenu-header",{"p-disabled":n.disabled},n.className),r=n.items.map(X);return e.createElement(e.Fragment,{key:n.label},e.createElement("li",{id:n.id,className:t,style:n.style,role:"presentation"},n.label),r)},P=function(e){return e.map(z)},T=function(n,t,r,a){var l=n.label+"_column_"+r,i=P(t);return e.createElement("div",{key:l,className:a},e.createElement("ul",{className:"p-megamenu-submenu",role:"menu"},i))},K=function(e){if(e.items){var n=J(e);return e.items.map((function(t,r){return T(e,t,r,n)}))}return null},R=function(n){if(n.items){var t=K(n);return e.createElement("div",{className:"p-megamenu-panel"},e.createElement("div",{className:"p-megamenu-grid"},t))}return null},F=function(n,t){var r=o("p-menuitem",{"p-menuitem-active":n===v},n.className),a=o("p-menuitem-link",{"p-disabled":n.disabled}),i=s.getJSXIcon(n.icon,{className:"p-menuitem-icon"},{props:p}),u=n.label&&e.createElement("span",{className:"p-menuitem-text"},n.label),c=n.template?m.getJSXElement(n.template,n):null,f=O(n),d=R(n);return e.createElement("li",{key:n.label+"_"+t,id:n.id,className:r,style:n.style,onMouseEnter:function(e){return t=e,void((r=n).disabled?t.preventDefault():v&&g(r));var t,r},role:"none"},e.createElement("a",{href:n.url||"#",className:a,target:n.target,onClick:function(e){return t=e,(r=n).disabled||(r.url||t.preventDefault(),r.command&&r.command({originalEvent:t,item:p.item}),r.items&&g(v&&v===r?null:r)),void t.preventDefault();var t,r},onKeyDown:function(e){return w(e,n)},role:"menuitem","aria-haspopup":null!=n.items},i,u,c,f,e.createElement(l,null)),d)},H=m.findDiffKeys(p,y.defaultProps),U=o("p-megamenu p-component",{"p-megamenu-horizontal":"horizontal"===p.orientation,"p-megamenu-vertical":"vertical"===p.orientation},p.className),Y=p.model?e.createElement("ul",{className:"p-megamenu-root-list",role:"menubar"},p.model.map((function(e,n){return F(e,n)}))):null,Z=function(){if(p.start){var n=m.getJSXElement(p.start,p);return e.createElement("div",{className:"p-megamenu-start"},n)}return null}(),$=function(){if(p.end){var n=m.getJSXElement(p.end,p);return e.createElement("div",{className:"p-megamenu-end"},n)}return null}();return e.createElement("div",c({ref:h,id:p.id,className:U,style:p.style},H),Z,Y,$)})));y.displayName="MegaMenu",y.defaultProps={__TYPE:"MegaMenu",id:null,model:null,style:null,className:null,orientation:"horizontal",start:null,end:null};export{y as MegaMenu};