UNPKG

momentum-modal

Version:

A Vue 3 plugin that lets you implement backend-driven modal dialogs for Inertia apps.

2 lines (1 loc) 2.24 kB
(function(n,t){typeof exports=="object"&&typeof module<"u"?t(exports,require("vue"),require("@inertiajs/vue3"),require("axios")):typeof define=="function"&&define.amd?define(["exports","vue","@inertiajs/vue3","axios"],t):(n=typeof globalThis<"u"?globalThis:n||self,t(n["Momentum Modal"]={},n.vue,n.vue3,n.axios))})(this,function(n,t,m,d){"use strict";const h=t.ref(),M={setResolveCallback:e=>{h.value=e},resolve:e=>h.value(e)},C={install(e,o){M.setResolveCallback(o.resolve)}},i=m.usePage(),a=t.computed(()=>{var e;return(e=i==null?void 0:i.props)==null?void 0:e.modal}),y=t.computed(()=>{var e;return(e=a.value)==null?void 0:e.props}),v=t.computed(()=>{var e;return(e=a.value)==null?void 0:e.key}),s=t.ref(),u=t.shallowRef(),f=t.ref(!1),p=t.ref(),c=t.ref(),L=e=>{Object.entries(e).forEach(([o,l])=>["post","put","patch","delete"].forEach(r=>{d.defaults.headers[r][o]=l}))},b=()=>{["X-Inertia-Modal-Key","X-Inertia-Modal-Redirect"].forEach(([o,l])=>["get","post","put","patch","delete"].forEach(r=>{delete d.defaults.headers[r][o]}))},j=()=>{var e,o;L({"X-Inertia-Modal-Key":v.value,"X-Inertia-Modal-Redirect":(e=a.value)==null?void 0:e.redirectURL}),d.defaults.headers.get["X-Inertia-Modal-Redirect"]=((o=a.value)==null?void 0:o.redirectURL)??""},R=()=>{f.value=!1,b()},w=()=>{var e,o,l,r;if(c.value==((e=a.value)==null?void 0:e.nonce)||!((o=a.value)!=null&&o.component))return R();s.value!=((l=a.value)==null?void 0:l.component)&&(s.value=a.value.component,s.value?u.value=t.defineAsyncComponent(()=>M.resolve(s.value)):u.value=!1),c.value=(r=a.value)==null?void 0:r.nonce,p.value=u.value?t.h(u.value,{key:v.value,...y.value}):"",t.nextTick(()=>f.value=!0)};w(),typeof window<"u"&&window.addEventListener("popstate",e=>{c.value=null}),t.watch(a,()=>{var e;((e=a.value)==null?void 0:e.nonce)!==c.value&&w()},{deep:!0}),t.watch(v,j);const E=()=>{var o,l;var e=((o=a.value)==null?void 0:o.redirectURL)??((l=a.value)==null?void 0:l.baseURL);if(p.value=!1,!!e)return m.router.visit(e,{preserveScroll:!0,preserveState:!0})},k=()=>({show:f,vnode:p,close:R,redirect:E,props:y}),I=t.defineComponent({setup(){const{vnode:e}=k();return()=>e.value}});n.Modal=I,n.modal=C,n.useModal=k,Object.defineProperty(n,Symbol.toStringTag,{value:"Module"})});