UNPKG

use-inertia-form

Version:

Extra functionality for Inertia.js useForm hook

3 lines (2 loc) 14.9 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("react"),require("@inertiajs/react"),require("react/jsx-runtime"),require("axios")):"function"==typeof define&&define.amd?define(["exports","react","@inertiajs/react","react/jsx-runtime","axios"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).useInertiaForm={},e.React,e["@inertiajs/react"],e.jsxRuntime,e.axios)}(this,(function(e,t,r,n,o){"use strict";const u=()=>{const e=t.createContext(null);return[()=>{const r=t.useContext(e);if(null===r)throw new Error("useContext must be inside a Provider with a value");return r},e.Provider]};function s(){}function c(e){return Object.getOwnPropertySymbols(e).filter((t=>Object.prototype.propertyIsEnumerable.call(e,t)))}function a(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":Object.prototype.toString.call(e)}const i="[object Arguments]",l="[object Object]";function f(e){if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t))&&"[object Object]"===Object.prototype.toString.call(e)}function d(e,t,r,n,o,u,s){const c=s(e,t,r,n,o,u);if(void 0!==c)return c;if(typeof e==typeof t)switch(typeof e){case"bigint":case"string":case"boolean":case"symbol":case"undefined":case"function":return e===t;case"number":return e===t||Object.is(e,t);case"object":return y(e,t,u,s)}return y(e,t,u,s)}function y(e,t,r,n){if(Object.is(e,t))return!0;let o=a(e),u=a(t);if(o===i&&(o=l),u===i&&(u=l),o!==u)return!1;switch(o){case"[object String]":return e.toString()===t.toString();case"[object Number]":{const r=e.valueOf(),n=t.valueOf();return(s=r)===(b=n)||Number.isNaN(s)&&Number.isNaN(b)}case"[object Boolean]":case"[object Date]":case"[object Symbol]":return Object.is(e.valueOf(),t.valueOf());case"[object RegExp]":return e.source===t.source&&e.flags===t.flags;case"[object Function]":return e===t}var s,b;const p=(r=r??new Map).get(e),m=r.get(t);if(null!=p&&null!=m)return p===t;r.set(e,t),r.set(t,e);try{switch(o){case"[object Map]":if(e.size!==t.size)return!1;for(const[o,u]of e.entries())if(!t.has(o)||!d(u,t.get(o),o,e,t,r,n))return!1;return!0;case"[object Set]":{if(e.size!==t.size)return!1;const o=Array.from(e.values()),u=Array.from(t.values());for(let s=0;s<o.length;s++){const c=o[s],a=u.findIndex((o=>d(c,o,void 0,e,t,r,n)));if(-1===a)return!1;u.splice(a,1)}return!0}case"[object Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":case"[object BigUint64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object BigInt64Array]":case"[object Float32Array]":case"[object Float64Array]":if("undefined"!=typeof Buffer&&Buffer.isBuffer(e)!==Buffer.isBuffer(t))return!1;if(e.length!==t.length)return!1;for(let o=0;o<e.length;o++)if(!d(e[o],t[o],o,e,t,r,n))return!1;return!0;case"[object ArrayBuffer]":return e.byteLength===t.byteLength&&y(new Uint8Array(e),new Uint8Array(t),r,n);case"[object DataView]":return e.byteLength===t.byteLength&&e.byteOffset===t.byteOffset&&y(new Uint8Array(e),new Uint8Array(t),r,n);case"[object Error]":return e.name===t.name&&e.message===t.message;case l:{if(!(y(e.constructor,t.constructor,r,n)||f(e)&&f(t)))return!1;const o=[...Object.keys(e),...c(e)],u=[...Object.keys(t),...c(t)];if(o.length!==u.length)return!1;for(let u=0;u<o.length;u++){const s=o[u],c=e[s];if(!Object.hasOwn(t,s))return!1;if(!d(c,t[s],s,e,t,r,n))return!1}return!0}default:return!1}}finally{r.delete(e),r.delete(t)}}function b(e,t){return function(e,t,r){return d(e,t,void 0,void 0,void 0,void 0,r)}(e,t,s)}const p=e=>{const t=structuredClone(e??{});for(const e in t)f(t[e])?t[e]=p(t[e]):Array.isArray(t[e])?t[e]=t[e].map((e=>p(e))):void 0!==t[e]&&null!==t[e]||(t[e]="");return t};function m(e){return null!=e&&"function"!=typeof e&&function(e){return Number.isSafeInteger(e)&&e>=0}(e.length)}function h(e){switch(typeof e){case"number":case"symbol":return!1;case"string":return e.includes(".")||e.includes("[")||e.includes("]")}}function g(e){return Object.is(e,-0)?"-0":e.toString()}function j(e){const t=[],r=e.length;if(0===r)return t;let n=0,o="",u="",s=!1;for(46===e.charCodeAt(0)&&(t.push(""),n++);n<r;){const c=e[n];u?"\\"===c&&n+1<r?(n++,o+=e[n]):c===u?u="":o+=c:s?'"'===c||"'"===c?u=c:"]"===c?(s=!1,t.push(o),o=""):o+=c:"["===c?(s=!0,o&&(t.push(o),o="")):"."===c?o&&(t.push(o),o=""):o+=c,n++}return o&&t.push(o),t}function v(e,t,r){if(null==e)return r;switch(typeof t){case"string":{const n=e[t];return void 0===n?h(t)?v(e,j(t),r):r:n}case"number":case"symbol":{"number"==typeof t&&(t=g(t));const n=e[t];return void 0===n?r:n}default:{if(Array.isArray(t))return function(e,t,r){if(0===t.length)return r;let n=e;for(let e=0;e<t.length;e++){if(null==n)return r;n=n[t[e]]}if(void 0===n)return r;return n}(e,t,r);const n=e[t=Object.is(t?.valueOf(),-0)?"-0":String(t)];return void 0===n?r:n}}}const A=/^(?:0|[1-9]\d*)$/;function O(e,t=Number.MAX_SAFE_INTEGER){switch(typeof e){case"number":return Number.isInteger(e)&&e>=0&&e<t;case"symbol":return!1;case"string":return A.test(e)}}function S(e,t,r){const n=Array.isArray(t)?t:"string"==typeof t?j(t):[t];let o=e;for(let e=0;e<n.length-1;e++){const t=n[e],r=n[e+1];null==o[t]&&(o[t]=O(r)?[]:{}),o=o[t]}return o[n[n.length-1]]=r,e}function C(e){return function(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}(e)}function E(e,t){const r=v(e,t.slice(0,-1),e),n=t[t.length-1];if(void 0===r?.[n])return!0;try{return delete r[n],!0}catch{return!1}}function $(e){if(null==e)return!0;if(m(e))return!!("function"==typeof e.splice||"string"==typeof e||"undefined"!=typeof Buffer&&Buffer.isBuffer(e)||C(e)||function(e){return null!==e&&"object"==typeof e&&"[object Arguments]"===a(e)}(e))&&0===e.length;if("object"==typeof e){if(e instanceof Map||e instanceof Set)return 0===e.size;const t=Object.keys(e);return function(e){const t=e?.constructor;return e===("function"==typeof t?t.prototype:Object.prototype)}(e)?0===t.filter((e=>"constructor"!==e)).length:0===t.length}return!0}const x=(e,t)=>{Object.entries(e).forEach((([r,n])=>{f(n)?(w(e,r,`${r}${t}`),x(n,t)):Array.isArray(n)&&w(e,r,`${r}${t}`)}))},w=(e,t,r)=>{t!==r&&(e[r]=e[t],delete e[t])},I=(e,t)=>{const r=t.replace(/\[\]$/,"");if(r.includes("[]")){const t=r.indexOf("[]"),n=r.slice(0,t),o=r.slice(t+2),u=v(e,n);if(Array.isArray(u))for(let t=0;t<u.length;t++)I(e,`${n}[${t}]${o}`)}if("]"===r.charAt(r.length-1)){const t=r.match(/(?<index>\d*)\]$/),n=v(e,r.slice(0,r.lastIndexOf("[")));Array.isArray(n)&&void 0!==t?.groups?.index&&n.splice(Number(t.groups.index),1)}else!function(e,t){if(null==e)return!0;switch(typeof t){case"symbol":case"number":case"object":if(Array.isArray(t))return E(e,t);if("number"==typeof t?t=g(t):"object"==typeof t&&(t=Object.is(t?.valueOf(),-0)?"-0":String(t)),void 0===e?.[t])return!0;try{return delete e[t],!0}catch{return!1}case"string":if(void 0===e?.[t]&&h(t))return E(e,j(t));try{return delete e[t],!0}catch{return!1}}}(e,r)},D=(e,n)=>{const[o,u]=r.useRemember(e,n),[s,c]=t.useState(e);return n?[o,u]:[s,c]},k=e=>Array.isArray(e)?e:[e],[B,N]=u(),F=(e,t)=>{const r=new Set(e);return r.add(t),r},R=({children:e,model:r,railsAttributes:o})=>{const[u,s]=t.useReducer(F,new Set),c={nestedAttributes:u,addAttribute:s,model:r,railsAttributes:o};return n.jsx(N,{value:c,children:e})};function P(e,n){const u=t.useCallback((()=>{let t=null,r=e;return"string"==typeof e&&(t=e,r=n),[t,p(r)]}),[e,n]),[s,c]=u(),[a,i]=t.useState(c||{}),[l,d]=D(c,s?`${s}:data`:void 0),y=t.useMemo((()=>{const e=l?Object.keys(l):[];if(1===e.length&&f(l[e[0]]))return e[0]}),[l]),[m,h]=D({},s?`${s}:errors`:void 0),[g,j]=t.useState(!1),[A,O]=t.useState(!1),[C,E]=t.useState(),[$,w]=t.useState(!1),[N,F]=t.useState(!1),R=t.useRef(null),P=t.useRef(null);let U=t.useRef((e=>e));const T=t.useRef(null);t.useEffect((()=>(T.current=!0,()=>{T.current=!1})),[]);let V=t.useRef(null),_=t.useRef(null);t.useEffect((()=>{V.current&&_.current&&V.current(..._.current)}),[l]);let q=!1;try{const e=B();q=e.railsAttributes}catch(e){}const z=(e,t,n={async:!1})=>{const u={...n,onCancelToken:e=>{if(R.current=e,n.onCancelToken)return n.onCancelToken(e)},onBefore:e=>{if(w(!1),F(!1),clearTimeout(P.current),n.onBefore)return n.onBefore(e)},onStart:e=>{if(O(!0),n.onStart)return n.onStart(e)},onProgress:e=>{if(E(e),n.onProgress)return n.onProgress(e)},onSuccess:e=>{if(T.current&&(O(!1),E(null),h({}),j(!1),w(!0),F(!0),P.current=setTimeout((()=>{T.current&&F(!1)}),2e3)),n.onSuccess)return n.onSuccess(e)},onError:e=>{if(T.current&&(O(!1),E(null),h((e=>{if(!e||!y)return e;const t={};return Object.keys(e).forEach((r=>{t[`${y}.${r}`]=e[r]})),t})(e)),j(!0)),n.onError)return n.onError(e)},onCancel:()=>{if(T.current&&(O(!1),E(null)),n.onCancel)return n.onCancel()},onFinish:e=>{if(T.current&&(O(!1),E(null)),R.current=null,n.onFinish)return n.onFinish(e)}};let s=U.current(structuredClone(l));q&&(s=((e,t="_attributes")=>{const r=structuredClone(e);return Object.values(r).forEach((e=>{f(e)&&x(e,t)})),r})(s)),!0===n.async?(u.onBefore(void 0),u.onStart(void 0),o[e](t,s,{onUploadProgress:e=>{u.onProgress(e)}}).then((e=>{u.onSuccess(e)})).catch((e=>{u.onError(e)})).finally((()=>{u.onFinish(void 0)}))):"delete"===e?r.router.delete(t,{...u,data:s}):r.router[e](t,s,u)},L=e=>{if(!e)return void h({});const t=k(e);h((e=>{const r=Object.keys(e).reduce(((r,n)=>({...r,...t.length>0&&!t.includes(String(n))?{[n]:e[n]}:{}})),{});return j(Object.keys(r).length>0),r}))};return{data:l,isDirty:!b(l,a),errors:m,hasErrors:g,processing:A,progress:C,wasSuccessful:$,recentlySuccessful:N,transform:e=>{U.current=e},onChange:e=>{V.current=e},setData:(e,t)=>{if("string"==typeof e)return d((r=>{const n=structuredClone(r);return V.current&&(_.current=[e,t,v(r,e)]),S(n,e,t),n}));e instanceof Function?d((t=>{const r=e(structuredClone(t));return V.current&&(_.current=[void 0,r,t]),r})):(V.current&&(_.current=[void 0,l,e]),d(e))},getData:e=>v(l,e),unsetData:e=>{d((t=>{const r=structuredClone(t);return V.current&&(_.current=[e,v(t,e),void 0]),I(r,e),r}))},setDefaults:(e,t)=>{i(void 0!==e?r=>({...r,..."string"==typeof e?{[e]:t}:e}):()=>l)},reset:e=>{if(!e)return V.current&&(_.current=[void 0,a,l]),d(a),void h({});const t=k(e),r=structuredClone(l);t.forEach((e=>{S(r,e,v(a,e))})),L(e),V.current&&(_.current=[void 0,r,l]),d(r)},setError:(e,t)=>{h((r=>{const n={...r,..."string"==typeof e?{[e]:t}:e};return j(Object.keys(n).length>0),n}))},getError:e=>v(m,e),clearErrors:L,submit:z,get:(e,t)=>{z("get",e,t)},post:(e,t)=>{z("post",e,t)},put:(e,t)=>{z("put",e,t)},patch:(e,t)=>{z("patch",e,t)},delete:(e,t)=>{z("delete",e,t)},cancel:()=>{R.current&&R.current.cancel()}}}const[U,T]=(()=>{const e=t.createContext(null);return[()=>{const r=t.useContext(e);if(null===r)throw new Error("useContext must be inside a Provider with a value");return r},e.Provider]})(),V=({children:e,model:r,data:o,method:u="post",to:s,async:c=!1,resetAfterSubmit:a,remember:i=!0,filter:l,onChange:f,onSubmit:d,onBefore:y,onStart:b,onSuccess:p,onError:m,onFinish:h,...g})=>{const j=t.useCallback((e=>{if(!l)return e;const t=structuredClone(e);return l.forEach((e=>{I(t,e)})),t}),[o,l]),v=i?P(`${u}/${r||s}`,j(o)):P(j(o)),A=t.useCallback((()=>({...v,model:r,method:u,to:s,submit:O})),[o,v,v.data,v.errors,r,u,s]),O=async e=>{if(!s||!1!==d?.(A()))return v.submit(u,s,{...e,async:!0===c})};return t.useEffect((()=>{new URL(window.location.href).searchParams.forEach(((e,t)=>{v.setData(t,e)}))}),[]),t.useEffect((()=>{f?.(A())}),[v.data]),t.useEffect((()=>{m?.(A())}),[v.errors]),n.jsx(T,{value:A(),children:n.jsx("form",{onSubmit:e=>{e.preventDefault(),e.stopPropagation();const t={onSuccess:()=>{(a||!1!==a&&!0===c)&&v.reset(),p?.(A())}};y&&(t.onBefore=()=>{y(A())}),b&&(t.onStart=()=>{b(A())}),h&&(t.onFinish=()=>{h(A())}),O(t)},...g,children:e})})},[_,q]=u(),z=({children:e,model:r})=>{let o=r;try{const e=_();o="["===r.charAt(0)?`${e}${r}`:`${e}.${r}`}catch(e){}const{addAttribute:u}=B();return t.useEffect((()=>{u(r)}),[]),n.jsx(q,{value:o,children:Array.isArray(e)?e.map(((e,r)=>t.cloneElement(e,{key:r}))):e})},L=(e,t)=>{if(!t)return{inputId:e,inputName:e};let r;return r="["===e.charAt(0)?`${t}${e}`:`${t}.${e}`,{inputId:`${t}_${e}`.replace(".","_").replace(/\[(\d)\]/,"_$1"),inputName:r}},M=({name:e,model:r,defaultValue:n,errorKey:o,strategy:u=L,clearErrorsOnChange:s=!0})=>{const c=U();let a=r??c.model;try{a+=`.${_()}`}catch(e){}const{inputName:i,inputId:l}=u(e,a),f=t.useRef(!0);t.useEffect((()=>{if(!f.current)return;const e=c.getData(i);null==e&&c.setData(i,n||""),f.current=!1}),[]);const d=c.getData(i),y=o??i,b=c.getError(y);return t.useEffect((()=>{!f.current&&s&&b&&c.clearErrors(y)}),[d]),{form:c,inputName:i,inputId:l,value:d??"",setValue:e=>c.setData(i,e),error:b}},K=t.forwardRef((({children:e,type:r="submit",disabled:o=!1,component:u="button",requiredFields:s,...c},a)=>{const{data:i,getData:l,processing:f}=U(),d=t.useCallback((()=>!(!s||0===s.length)&&s.some((e=>{return null==(t=l(e))||("string"==typeof t?""===t:"number"==typeof t?0!==t&&!Boolean(t):t instanceof Date?isNaN(t.valueOf()):"boolean"!=typeof t&&$(t));var t}))),[i,s]);return n.jsx(u,{children:e,type:r,disabled:o||f||s&&d(),ref:a,...c})}));var G=t.memo(K);const X=({model:e,emptyData:r})=>{const{setData:n,unsetData:o,getData:u}=U(),{model:s}=B();let c=s??"";try{const e=_();c=s?`${c}.${e}`:e}catch(e){}c=`${c}.${e||""}`;const a=t.useCallback((e=>{n((t=>{const n=structuredClone(t);let o=v(n,c);o&&Array.isArray(o)||(S(n,c,[]),o=v(n,c));let u={};return e instanceof Function?u=e(o):void 0!==e&&(u=e),o.push(Object.assign(r,u)),S(n,c,o),n}))}),[]),i=t.useCallback((e=>{const t=u(`${c}[${e}]`);return o(`${c}[${e}]`),t}),[]),l=u(c);return{addInput:a,removeInput:i,paths:t.useCallback((()=>Array.isArray(l)?l.map(((t,r)=>`${e||""}[${r}]`)):[]),[l])()}};e.DynamicInputs=({children:e,model:r,emptyData:o,addInputButton:u=n.jsx("button",{children:"+"}),removeInputButton:s=n.jsx("button",{children:"-"})})=>{const{addInput:c,removeInput:a,paths:i}=X({model:r,emptyData:o});return n.jsxs(n.Fragment,{children:[t.cloneElement(u,{onClick:()=>c(),type:"button"}),i.map(((r,o)=>n.jsxs(z,{model:r,children:[n.jsx("div",{children:e}),t.cloneElement(s,{onClick:()=>a(o),type:"button"})]},o)))]})},e.Form=({children:e,model:t,railsAttributes:r=!1,...o})=>n.jsx(R,{model:t,railsAttributes:r,children:n.jsx(V,{model:t,...o,children:e})}),e.Input=({name:e,component:t="input",type:r="text",model:o,onChange:u,errorKey:s,defaultValue:c,clearErrorsOnChange:a,...i})=>{const{form:l,inputName:f,inputId:d,value:y,setValue:b}=M({name:e,model:o,errorKey:s,defaultValue:c,clearErrorsOnChange:a}),p=t;return n.jsx(p,{type:r,name:f,id:d,value:y,onChange:e=>{const t=e.target?.checked||e.target.value;b(t),u?.(t,l)},...i})},e.NestedFields=z,e.Submit=G,e.useDynamicInputs=X,e.useForm=U,e.useInertiaForm=P,e.useInertiaInput=M})); //# sourceMappingURL=useInertiaForm.umd.min.js.map