alpinejs-requests
Version:
Inline HTTP requests made simple for Alpine.js
2 lines (1 loc) • 1.11 kB
JavaScript
(()=>{var u=function(c){[{directive:"request"},{directive:"post",method:"POST"},{directive:"get",method:"GET"}].forEach(t=>{c.directive(t.directive,(e,{expression:s},{evaluate:i,cleanup:n})=>{let o=a(s,i);e.addEventListener("click",()=>{d({el:e,method:t.method,...o})}),n(()=>observer.disconnect())}),c.magic(t.directive,(e,{evaluate:s})=>i=>{let n=a(i,s);d({el:e,method:t.method,...n})})});function d({el:t,method:e,route:s,headers:i,body:n}){console.log({el:t,method:e,route:s,headers:i,body:n}),fetch(s,{method:e??"POST",headers:i,body:n}).then(o=>{t.dispatchEvent(new CustomEvent("request",{detail:{state:"success",response:o}})),t.dispatchEvent(new CustomEvent((e??"post").toLowerCase(),{detail:{state:"success",response:o}}))}).catch(o=>{console.warn(o),t.dispatchEvent(new CustomEvent("request",{detail:{state:"error",response}})),t.dispatchEvent(new CustomEvent((e??"post").toLowerCase(),{detail:{state:"error",response}}))})}function a(t,e){let s={};return typeof t!="string"?s=t:t.startsWith("{")?s=e(t):s.route=t,s}},r=u;document.addEventListener("alpine:init",()=>{window.Alpine.plugin(r)});})();