UNPKG

@piiano/forms

Version:
2 lines (1 loc) 1.05 kB
import{VaultClient as f}from"@piiano/vault-client";import{applyStrategy as d}from"../apply-strategy.js";import{getElement as b}from"../element-selector.js";const u="data-piiano-controlled";async function S(t,{vaultURL:o,apiKey:n,hooks:r,replayOriginalEvents:i=!0,...a}){if(i&&a.strategy?.endsWith("-object"))throw new Error(`Cannot use the "replayOriginalEvents" option with strategy "${a.strategy}"`);const e=b(t,"form"),l=new f({vaultURL:o,apiKey:n}),m=e.onsubmit;e.onsubmit=c=>{if(h(e,i,c,m))return;c.preventDefault();const s=new FormData(e),p=Object.fromEntries(s.entries());return d(p,{client:l,...a}).then(y(e,i)).then(r?.onSubmit).catch(r?.onError),!1}}function h(t,o,n,r){if(o){if(t.hasAttribute(u))return r?.call(t,n),t.removeAttribute(u),!0;t.toggleAttribute(u)}return!1}function y(t,o){return o?n=>{for(const[r,i]of Object.entries(n)){const a=t.querySelector(`[name="${r}"]`);a.disabled=!0;const e=document.createElement("input");e.name=r,e.value=i,e.type="hidden",t.appendChild(e)}return t.requestSubmit(),n}:n=>n}export{S as controlForm};