piral-modals
Version:
Plugin for the display of modal dialogs in Piral.
2 lines (1 loc) • 3.3 kB
JavaScript
var piralModals=(()=>{var v=Object.create;var M=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var I=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var m=(o=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(o,{get:(t,a)=>(typeof require<"u"?require:t)[a]}):o)(function(o){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+o+'" is not supported')});var R=(o,t)=>{for(var a in t)M(o,a,{get:t[a],enumerable:!0})},b=(o,t,a,l)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of I(t))!F.call(o,r)&&r!==a&&M(o,r,{get:()=>t[r],enumerable:!(l=w(t,r))||l.enumerable});return o};var A=(o,t,a)=>(a=o!=null?v(B(o)):{},b(t||!o||!o.__esModule?M(a,"default",{value:o,enumerable:!0}):a,o)),N=o=>b(M({},"__esModule",{value:!0}),o);var J={};R(J,{Modals:()=>u,PiralModalsDialog:()=>x,PiralModalsHost:()=>P,createModalsApi:()=>z});var y={};R(y,{closeModal:()=>k,openModal:()=>$,registerModal:()=>E,unregisterModal:()=>K});var d=m("piral-core");function $(o,t){o.dispatch(a=>({...a,modals:(0,d.prependItem)(a.modals,t)}))}function k(o,t){o.dispatch(a=>({...a,modals:(0,d.excludeOn)(a.modals,l=>l.id===t.id)}))}function E(o,t,a){o.dispatch(l=>({...l,registry:{...l.registry,modals:(0,d.withKey)(l.registry.modals,t,a)}}))}function K(o,t){o.dispatch(a=>({...a,registry:{...a.registry,modals:(0,d.withoutKey)(a.registry.modals,t)}}))}var n=m("piral-core");var D=A(m("react")),G=m("piral-core"),H=o=>D.createElement("div",{className:"piral-modals-host"},o.open&&D.createElement("div",{className:"piral-modals-overlay"},o.children)),O=o=>(0,G.defaultRender)(o.children);var f=A(m("react")),C=m("piral-core");var h=m("piral-core"),P=(0,h.getPiralComponent)("ModalsHost"),x=(0,h.getPiralComponent)("ModalsDialog");function L(o){o.forEach(t=>t.close())}function T(o,t){if(t){let[a]=Object.keys(o).filter(l=>o[l].name===t).map(l=>o[l]);return a}}var u=()=>{let o=(0,C.useGlobalState)(e=>e.registry.modals),t=(0,C.useGlobalState)(e=>e.modals),a=()=>L(t),l=t.map(e=>{let i=o[e.name]||T(o,e.alternative),s=i&&i.component,p={...i&&i.defaults,...e.options};return s&&f.createElement(x,{...e,options:p,defaults:i.defaults,layout:i.layout,key:e.name},f.createElement(s,{onClose:e.close,options:p}))}).filter(Boolean),r=l.length>0;return f.createElement(P,{open:r,close:a},l)};u.displayName="Modals";function j(o){let t={};for(let{name:a,component:l,defaults:r,layout:e={}}of o)t[`global-${a}`]={pilet:void 0,name:a,component:l,defaults:r,layout:e};return t}function q(o){return t=>({...t,components:{ModalsHost:H,ModalsDialog:O,...t.components},registry:{...t.registry,modals:o},modals:[]})}function z(o={}){let{dialogs:t=[],selectId:a=l=>`${l}-${~~(Math.random()*1e4)}`}=o;return l=>(l.defineActions(y),l.dispatch((0,n.withAll)(q(j(t)),(0,n.withRootExtension)("piral-modals",u))),(r,e)=>{let i=e.name;return{showModal(s,c){let p=(0,n.buildName)(i,s),g={id:a(p),name:p,alternative:s,options:c,close(){l.closeModal(g)}};return l.openModal(g),g.close},registerModal(s,c,p,g={}){let S=(0,n.buildName)(i,s);return l.registerModal(S,{pilet:i,name:s,component:(0,n.withApi)(l,c,r,"modal"),defaults:p,layout:g}),()=>r.unregisterModal(s)},unregisterModal(s){let c=(0,n.buildName)(i,s);l.unregisterModal(c)}}})}return N(J);})();