@inertiajs/vue3 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/index.esm.js +2 -0
- package/dist/index.esm.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/server.esm.js +2 -0
- package/dist/server.esm.js.map +1 -0
- package/dist/server.js +8 -0
- package/dist/server.js.map +1 -0
- package/index.d.ts +117 -0
- package/package.json +45 -0
- package/readme.md +3 -0
- package/src/app.js +117 -0
- package/src/createInertiaApp.js +46 -0
- package/src/head.js +93 -0
- package/src/index.js +7 -0
- package/src/link.js +92 -0
- package/src/remember.js +65 -0
- package/src/server.js +1 -0
- package/src/useForm.js +205 -0
- package/src/useRemember.js +24 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) Jonathan Reinink <jonathan@reinink.ca>
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{router as e,createHeadManager as r,setupProgress as t,mergeDataIntoQueryString as n,shouldIntercept as o}from"@inertiajs/core";export{router}from"@inertiajs/core";import{reactive as i,watch as u,ref as s,shallowRef as a,computed as c,markRaw as l,h as f,createSSRApp as p,isReactive as d}from"vue";import m from"lodash.clonedeep";import h from"lodash.isequal";function v(){return(v=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var y={created:function(){var r=this;if(this.$options.remember){Array.isArray(this.$options.remember)&&(this.$options.remember={data:this.$options.remember}),"string"==typeof this.$options.remember&&(this.$options.remember={data:[this.$options.remember]}),"string"==typeof this.$options.remember.data&&(this.$options.remember={data:[this.$options.remember.data]});var t=this.$options.remember.key instanceof Function?this.$options.remember.key.call(this):this.$options.remember.key,n=e.restore(t),o=this.$options.remember.data.filter(function(e){return!(null!==r[e]&&"object"==typeof r[e]&&!1===r[e].__rememberable)}),i=function(e){return null!==r[e]&&"object"==typeof r[e]&&"function"==typeof r[e].__remember&&"function"==typeof r[e].__restore};o.forEach(function(u){void 0!==r[u]&&void 0!==n&&void 0!==n[u]&&(i(u)?r[u].__restore(n[u]):r[u]=n[u]),r.$watch(u,function(){e.remember(o.reduce(function(e,t){var n;return v({},e,((n={})[t]=m(i(t)?r[t].__remember():r[t]),n))},{}),t)},{immediate:!0,deep:!0})})}}};function g(){var r=[].slice.call(arguments),t="string"==typeof r[0]?r[0]:null,n=("string"==typeof r[0]?r[1]:r[0])||{},o=t?e.restore(t):null,s=m(n),a=null,c=null,l=function(e){return e},f=i(v({},o?o.data:n,{isDirty:!1,errors:o?o.errors:{},hasErrors:!1,processing:!1,progress:null,wasSuccessful:!1,recentlySuccessful:!1,data:function(){var e=this;return Object.keys(n).reduce(function(r,t){return r[t]=e[t],r},{})},transform:function(e){return l=e,this},defaults:function(e,r){var t;return s=void 0===e?this.data():Object.assign({},m(s),r?((t={})[e]=r,t):e),this},reset:function(){var e=[].slice.call(arguments),r=m(s);return Object.assign(this,0===e.length?r:Object.keys(r).filter(function(r){return e.includes(r)}).reduce(function(e,t){return e[t]=r[t],e},{})),this},setError:function(e,r){var t;return Object.assign(this.errors,r?((t={})[e]=r,t):e),this.hasErrors=Object.keys(this.errors).length>0,this},clearErrors:function(){var e=this,r=[].slice.call(arguments);return this.errors=Object.keys(this.errors).reduce(function(t,n){var o;return v({},t,r.length>0&&!r.includes(n)?((o={})[n]=e.errors[n],o):{})},{}),this.hasErrors=Object.keys(this.errors).length>0,this},submit:function(r,t,n){var o=this,i=this;void 0===n&&(n={});var u=l(this.data()),f=v({},n,{onCancelToken:function(e){if(a=e,n.onCancelToken)return n.onCancelToken(e)},onBefore:function(e){if(i.wasSuccessful=!1,i.recentlySuccessful=!1,clearTimeout(c),n.onBefore)return n.onBefore(e)},onStart:function(e){if(i.processing=!0,n.onStart)return n.onStart(e)},onProgress:function(e){if(i.progress=e,n.onProgress)return n.onProgress(e)},onSuccess:function(e){try{var r=function(e){return s=m(o.data()),o.isDirty=!1,e};return o.processing=!1,o.progress=null,o.clearErrors(),o.wasSuccessful=!0,o.recentlySuccessful=!0,c=setTimeout(function(){return o.recentlySuccessful=!1},2e3),Promise.resolve(n.onSuccess?Promise.resolve(n.onSuccess(e)).then(r):r(null))}catch(e){return Promise.reject(e)}},onError:function(e){if(i.processing=!1,i.progress=null,i.clearErrors().setError(e),n.onError)return n.onError(e)},onCancel:function(){if(i.processing=!1,i.progress=null,n.onCancel)return n.onCancel()},onFinish:function(){if(i.processing=!1,i.progress=null,a=null,n.onFinish)return n.onFinish()}});"delete"===r?e.delete(t,v({},f,{data:u})):e[r](t,u,f)},get:function(e,r){this.submit("get",e,r)},post:function(e,r){this.submit("post",e,r)},put:function(e,r){this.submit("put",e,r)},patch:function(e,r){this.submit("patch",e,r)},delete:function(e,r){this.submit("delete",e,r)},cancel:function(){a&&a.cancel()},__rememberable:null===t,__remember:function(){return{data:this.data(),errors:this.errors}},__restore:function(e){Object.assign(this,e.data),this.setError(e.errors)}}));return u(f,function(r){f.isDirty=!h(f.data(),s),t&&e.remember(m(r.__remember()),t)},{immediate:!0,deep:!0}),f}var b=s(null),S=s({}),k=a(null),P=s(null),C=null,j={name:"Inertia",props:{initialPage:{type:Object,required:!0},initialComponent:{type:Object,required:!1},resolveComponent:{type:Function,required:!1},titleCallback:{type:Function,required:!1,default:function(e){return e}},onHeadUpdate:{type:Function,required:!1,default:function(){return function(){}}}},setup:function(t){var n=t.initialPage,o=t.initialComponent,i=t.resolveComponent,u=t.titleCallback,s=t.onHeadUpdate;b.value=o?l(o):null,S.value=n,P.value=null;var a="undefined"==typeof window;return C=r(a,u,s),a||(e.init({initialPage:n,resolveComponent:i,swapComponent:function(e){try{return b.value=l(e.component),S.value=e.page,P.value=e.preserveState?P.value:Date.now(),Promise.resolve()}catch(e){return Promise.reject(e)}}}),e.on("navigate",function(){return C.forceUpdate()})),function(){if(b.value){b.value.inheritAttrs=!!b.value.inheritAttrs;var e=f(b.value,v({},S.value.props,{key:P.value}));return k.value&&(b.value.layout=k.value,k.value=null),b.value.layout?"function"==typeof b.value.layout?b.value.layout(f,e):(Array.isArray(b.value.layout)?b.value.layout:[b.value.layout]).concat(e).reverse().reduce(function(e,r){return r.inheritAttrs=!!r.inheritAttrs,f(r,v({},S.value.props),function(){return e})}):e}}}},_={install:function(r){e.form=g,Object.defineProperty(r.config.globalProperties,"$inertia",{get:function(){return e}}),Object.defineProperty(r.config.globalProperties,"$page",{get:function(){return S.value}}),Object.defineProperty(r.config.globalProperties,"$headManager",{get:function(){return C}}),r.mixin(y)}};function O(){return{props:c(function(){return S.value.props}),url:c(function(){return S.value.url}),component:c(function(){return S.value.component}),version:c(function(){return S.value.version})}}function T(e){k.value=e}var E=function(e){try{var r,n,o,i,u,s,a,c,l;n=void 0===(r=e.id)?"app":r,o=e.resolve,i=e.setup,u=e.title,a=void 0===(s=e.progress)?{}:s,c=e.page,l=e.render;var d="undefined"==typeof window,m=d?null:document.getElementById(n),h=c||JSON.parse(m.dataset.page),v=function(e){return Promise.resolve(o(e)).then(function(e){return e.default||e})},y=[];return Promise.resolve(v(h.component).then(function(e){return i({el:m,App:j,props:{initialPage:h,initialComponent:e,resolveComponent:v,titleCallback:u,onHeadUpdate:d?function(e){return y=e}:null},plugin:_})})).then(function(e){return!d&&a&&t(a),function(){if(d)return Promise.resolve(l(p({render:function(){return f("div",{id:n,"data-page":JSON.stringify(h),innerHTML:l(e)})}}))).then(function(e){return{head:y,body:e}})}()})}catch(e){return Promise.reject(e)}},$={props:{title:{type:String,required:!1}},data:function(){return{provider:this.$headManager.createProvider()}},beforeUnmount:function(){this.provider.disconnect()},methods:{isUnaryTag:function(e){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(e.type)>-1},renderTagStart:function(e){e.props=e.props||{},e.props.inertia=void 0!==e.props["head-key"]?e.props["head-key"]:"";var r=Object.keys(e.props).reduce(function(r,t){var n=e.props[t];return["key","head-key"].includes(t)?r:""===n?r+" "+t:r+" "+t+'="'+n+'"'},"");return"<"+e.type+r+">"},renderTagChildren:function(e){var r=this;return"string"==typeof e.children?e.children:e.children.reduce(function(e,t){return e+r.renderTag(t)},"")},renderTag:function(e){if("Symbol(Text)"===e.type.toString())return e.children;if("Symbol()"===e.type.toString())return"";if("Symbol(Comment)"===e.type.toString())return"";var r=this.renderTagStart(e);return e.children&&(r+=this.renderTagChildren(e)),this.isUnaryTag(e)||(r+="</"+e.type+">"),r},addTitleElement:function(e){return this.title&&!e.find(function(e){return e.startsWith("<title")})&&e.push("<title inertia>"+this.title+"</title>"),e},renderNodes:function(e){var r=this;return this.addTitleElement(e.flatMap(function(e){return"Symbol(Fragment)"===e.type.toString()?e.children:e}).map(function(e){return r.renderTag(e)}).filter(function(e){return e}))}},render:function(){this.provider.update(this.renderNodes(this.$slots.default?this.$slots.default():[]))}},w={name:"Link",props:{as:{type:String,default:"a"},data:{type:Object,default:function(){return{}}},href:{type:String},method:{type:String,default:"get"},replace:{type:Boolean,default:!1},preserveScroll:{type:Boolean,default:!1},preserveState:{type:Boolean,default:null},only:{type:Array,default:function(){return[]}},headers:{type:Object,default:function(){return{}}},queryStringArrayFormat:{type:String,default:"brackets"}},setup:function(r,t){var i=t.slots,u=t.attrs;return function(r){var t=r.as.toLowerCase(),s=r.method.toLowerCase(),a=n(s,r.href||"",r.data,r.queryStringArrayFormat),c=a[0],l=a[1];return"a"===t&&"get"!==s&&console.warn('Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="'+c+'" method="'+s+'" as="button">...</Link>'),f(r.as,v({},u,"a"===t?{href:c}:{},{onClick:function(t){var n;o(t)&&(t.preventDefault(),e.visit(c,{data:l,method:s,replace:r.replace,preserveScroll:r.preserveScroll,preserveState:null!=(n=r.preserveState)?n:"get"!==s,only:r.only,headers:r.headers,onCancelToken:u.onCancelToken||function(){return{}},onBefore:u.onBefore||function(){return{}},onStart:u.onStart||function(){return{}},onProgress:u.onProgress||function(){return{}},onFinish:u.onFinish||function(){return{}},onCancel:u.onCancel||function(){return{}},onSuccess:u.onSuccess||function(){return{}},onError:u.onError||function(){return{}}}))}}),i)}}};function A(r,t){if("object"==typeof r&&null!==r&&!1===r.__rememberable)return r;var n=e.restore(t),o=d(r)?i:s,a="function"==typeof r.__remember&&"function"==typeof r.__restore,c=void 0===n?r:o(a?r.__restore(n):n);return u(c,function(n){e.remember(m(a?r.__remember():n),t)},{immediate:!0,deep:!0}),c}export{$ as Head,w as Link,E as createInertiaApp,T as defineLayout,g as useForm,O as usePage,A as useRemember};
|
|
2
|
+
//# sourceMappingURL=index.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../src/remember.js","../src/useForm.js","../src/app.js","../src/createInertiaApp.js","../src/head.js","../src/link.js","../src/useRemember.js"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\n\nexport default {\n created() {\n if (!this.$options.remember) {\n return\n }\n\n if (Array.isArray(this.$options.remember)) {\n this.$options.remember = { data: this.$options.remember }\n }\n\n if (typeof this.$options.remember === 'string') {\n this.$options.remember = { data: [this.$options.remember] }\n }\n\n if (typeof this.$options.remember.data === 'string') {\n this.$options.remember = { data: [this.$options.remember.data] }\n }\n\n const rememberKey =\n this.$options.remember.key instanceof Function\n ? this.$options.remember.key.call(this)\n : this.$options.remember.key\n\n const restored = router.restore(rememberKey)\n\n const rememberable = this.$options.remember.data.filter((key) => {\n return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)\n })\n\n const hasCallbacks = (key) => {\n return (\n this[key] !== null &&\n typeof this[key] === 'object' &&\n typeof this[key].__remember === 'function' &&\n typeof this[key].__restore === 'function'\n )\n }\n\n rememberable.forEach((key) => {\n if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {\n hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])\n }\n\n this.$watch(\n key,\n () => {\n router.remember(\n rememberable.reduce(\n (data, key) => ({\n ...data,\n [key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),\n }),\n {},\n ),\n rememberKey,\n )\n },\n { immediate: true, deep: true },\n )\n })\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport isEqual from 'lodash.isequal'\nimport { reactive, watch } from 'vue'\n\nexport default function useForm(...args) {\n const rememberKey = typeof args[0] === 'string' ? args[0] : null\n const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}\n const restored = rememberKey ? router.restore(rememberKey) : null\n let defaults = cloneDeep(data)\n let cancelToken = null\n let recentlySuccessfulTimeoutId = null\n let transform = (data) => data\n\n let form = reactive({\n ...(restored ? restored.data : data),\n isDirty: false,\n errors: restored ? restored.errors : {},\n hasErrors: false,\n processing: false,\n progress: null,\n wasSuccessful: false,\n recentlySuccessful: false,\n data() {\n return Object.keys(data).reduce((carry, key) => {\n carry[key] = this[key]\n return carry\n }, {})\n },\n transform(callback) {\n transform = callback\n\n return this\n },\n defaults(key, value) {\n if (typeof key === 'undefined') {\n defaults = this.data()\n } else {\n defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)\n }\n\n return this\n },\n reset(...fields) {\n let clonedDefaults = cloneDeep(defaults)\n if (fields.length === 0) {\n Object.assign(this, clonedDefaults)\n } else {\n Object.assign(\n this,\n Object.keys(clonedDefaults)\n .filter((key) => fields.includes(key))\n .reduce((carry, key) => {\n carry[key] = clonedDefaults[key]\n return carry\n }, {}),\n )\n }\n\n return this\n },\n setError(key, value) {\n Object.assign(this.errors, value ? { [key]: value } : key)\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n clearErrors(...fields) {\n this.errors = Object.keys(this.errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),\n }),\n {},\n )\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n submit(method, url, options = {}) {\n const data = transform(this.data())\n const _options = {\n ...options,\n onCancelToken: (token) => {\n cancelToken = token\n\n if (options.onCancelToken) {\n return options.onCancelToken(token)\n }\n },\n onBefore: (visit) => {\n this.wasSuccessful = false\n this.recentlySuccessful = false\n clearTimeout(recentlySuccessfulTimeoutId)\n\n if (options.onBefore) {\n return options.onBefore(visit)\n }\n },\n onStart: (visit) => {\n this.processing = true\n\n if (options.onStart) {\n return options.onStart(visit)\n }\n },\n onProgress: (event) => {\n this.progress = event\n\n if (options.onProgress) {\n return options.onProgress(event)\n }\n },\n onSuccess: async (page) => {\n this.processing = false\n this.progress = null\n this.clearErrors()\n this.wasSuccessful = true\n this.recentlySuccessful = true\n recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n defaults = cloneDeep(this.data())\n this.isDirty = false\n return onSuccess\n },\n onError: (errors) => {\n this.processing = false\n this.progress = null\n this.clearErrors().setError(errors)\n\n if (options.onError) {\n return options.onError(errors)\n }\n },\n onCancel: () => {\n this.processing = false\n this.progress = null\n\n if (options.onCancel) {\n return options.onCancel()\n }\n },\n onFinish: () => {\n this.processing = false\n this.progress = null\n cancelToken = null\n\n if (options.onFinish) {\n return options.onFinish()\n }\n },\n }\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data })\n } else {\n router[method](url, data, _options)\n }\n },\n get(url, options) {\n this.submit('get', url, options)\n },\n post(url, options) {\n this.submit('post', url, options)\n },\n put(url, options) {\n this.submit('put', url, options)\n },\n patch(url, options) {\n this.submit('patch', url, options)\n },\n delete(url, options) {\n this.submit('delete', url, options)\n },\n cancel() {\n if (cancelToken) {\n cancelToken.cancel()\n }\n },\n __rememberable: rememberKey === null,\n __remember() {\n return { data: this.data(), errors: this.errors }\n },\n __restore(restored) {\n Object.assign(this, restored.data)\n this.setError(restored.errors)\n },\n })\n\n watch(\n form,\n (newValue) => {\n form.isDirty = !isEqual(form.data(), defaults)\n if (rememberKey) {\n router.remember(cloneDeep(newValue.__remember()), rememberKey)\n }\n },\n { immediate: true, deep: true },\n )\n\n return form\n}\n","import { createHeadManager, router } from '@inertiajs/core'\nimport { computed, h, markRaw, ref, shallowRef } from 'vue'\nimport remember from './remember'\nimport useForm from './useForm'\n\nconst component = ref(null)\nconst page = ref({})\nconst layout = shallowRef(null)\nconst key = ref(null)\nlet headManager = null\n\nexport default {\n name: 'Inertia',\n props: {\n initialPage: {\n type: Object,\n required: true,\n },\n initialComponent: {\n type: Object,\n required: false,\n },\n resolveComponent: {\n type: Function,\n required: false,\n },\n titleCallback: {\n type: Function,\n required: false,\n default: (title) => title,\n },\n onHeadUpdate: {\n type: Function,\n required: false,\n default: () => () => {},\n },\n },\n setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {\n component.value = initialComponent ? markRaw(initialComponent) : null\n page.value = initialPage\n key.value = null\n\n const isServer = typeof window === 'undefined'\n headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)\n\n if (!isServer) {\n router.init({\n initialPage,\n resolveComponent,\n swapComponent: async (args) => {\n component.value = markRaw(args.component)\n page.value = args.page\n key.value = args.preserveState ? key.value : Date.now()\n },\n })\n\n router.on('navigate', () => headManager.forceUpdate())\n }\n\n return () => {\n if (component.value) {\n component.value.inheritAttrs = !!component.value.inheritAttrs\n\n const child = h(component.value, {\n ...page.value.props,\n key: key.value,\n })\n\n if (layout.value) {\n component.value.layout = layout.value\n layout.value = null\n }\n\n if (component.value.layout) {\n if (typeof component.value.layout === 'function') {\n return component.value.layout(h, child)\n }\n\n return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])\n .concat(child)\n .reverse()\n .reduce((child, layout) => {\n layout.inheritAttrs = !!layout.inheritAttrs\n return h(layout, { ...page.value.props }, () => child)\n })\n }\n\n return child\n }\n }\n },\n}\n\nexport const plugin = {\n install(app) {\n router.form = useForm\n\n Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })\n Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })\n Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })\n\n app.mixin(remember)\n },\n}\n\nexport function usePage() {\n return {\n props: computed(() => page.value.props),\n url: computed(() => page.value.url),\n component: computed(() => page.value.component),\n version: computed(() => page.value.version),\n }\n}\n\nexport function defineLayout(component) {\n layout.value = component\n}\n","import { setupProgress } from '@inertiajs/core'\nimport { createSSRApp, h } from 'vue'\nimport App, { plugin } from './app'\n\nexport default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {\n const isServer = typeof window === 'undefined'\n const el = isServer ? null : document.getElementById(id)\n const initialPage = page || JSON.parse(el.dataset.page)\n const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)\n\n let head = []\n\n const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {\n return setup({\n el,\n App,\n props: {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements) => (head = elements) : null,\n },\n plugin,\n })\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer) {\n const body = await render(\n createSSRApp({\n render: () =>\n h('div', {\n id,\n 'data-page': JSON.stringify(initialPage),\n innerHTML: render(vueApp),\n }),\n }),\n )\n\n return { head, body }\n }\n}\n","export default {\n props: {\n title: {\n type: String,\n required: false,\n },\n },\n data() {\n return {\n provider: this.$headManager.createProvider(),\n }\n },\n beforeUnmount() {\n this.provider.disconnect()\n },\n methods: {\n isUnaryTag(node) {\n return (\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n },\n renderTagStart(node) {\n node.props = node.props || {}\n node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n const value = node.props[name]\n if (['key', 'head-key'].includes(name)) {\n return carry\n } else if (value === '') {\n return carry + ` ${name}`\n } else {\n return carry + ` ${name}=\"${value}\"`\n }\n }, '')\n return `<${node.type}${attrs}>`\n },\n renderTagChildren(node) {\n return typeof node.children === 'string'\n ? node.children\n : node.children.reduce((html, child) => html + this.renderTag(child), '')\n },\n renderTag(node) {\n if (node.type.toString() === 'Symbol(Text)') {\n return node.children\n } else if (node.type.toString() === 'Symbol()') {\n return ''\n } else if (node.type.toString() === 'Symbol(Comment)') {\n return ''\n }\n let html = this.renderTagStart(node)\n if (node.children) {\n html += this.renderTagChildren(node)\n }\n if (!this.isUnaryTag(node)) {\n html += `</${node.type}>`\n }\n return html\n },\n addTitleElement(elements) {\n if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title inertia>${this.title}</title>`)\n }\n return elements\n },\n renderNodes(nodes) {\n return this.addTitleElement(\n nodes\n .flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))\n .map((node) => this.renderTag(node))\n .filter((node) => node),\n )\n },\n },\n render() {\n this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))\n },\n}\n","import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'\nimport { h } from 'vue'\n\nexport default {\n name: 'Link',\n props: {\n as: {\n type: String,\n default: 'a',\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n href: {\n type: String,\n },\n method: {\n type: String,\n default: 'get',\n },\n replace: {\n type: Boolean,\n default: false,\n },\n preserveScroll: {\n type: Boolean,\n default: false,\n },\n preserveState: {\n type: Boolean,\n default: null,\n },\n only: {\n type: Array,\n default: () => [],\n },\n headers: {\n type: Object,\n default: () => ({}),\n },\n queryStringArrayFormat: {\n type: String,\n default: 'brackets',\n },\n },\n setup(props, { slots, attrs }) {\n return (props) => {\n const as = props.as.toLowerCase()\n const method = props.method.toLowerCase()\n const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)\n\n if (as === 'a' && method !== 'get') {\n console.warn(\n `Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes \"Open Link in New Tab/Window\" accessibility issues.\\n\\nPlease specify a more appropriate element using the \"as\" attribute. For example:\\n\\n<Link href=\"${href}\" method=\"${method}\" as=\"button\">...</Link>`,\n )\n }\n\n return h(\n props.as,\n {\n ...attrs,\n ...(as === 'a' ? { href } : {}),\n onClick: (event) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(href, {\n data: data,\n method: method,\n replace: props.replace,\n preserveScroll: props.preserveScroll,\n preserveState: props.preserveState ?? method !== 'get',\n only: props.only,\n headers: props.headers,\n onCancelToken: attrs.onCancelToken || (() => ({})),\n onBefore: attrs.onBefore || (() => ({})),\n onStart: attrs.onStart || (() => ({})),\n onProgress: attrs.onProgress || (() => ({})),\n onFinish: attrs.onFinish || (() => ({})),\n onCancel: attrs.onCancel || (() => ({})),\n onSuccess: attrs.onSuccess || (() => ({})),\n onError: attrs.onError || (() => ({})),\n })\n }\n },\n },\n slots,\n )\n }\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport { isReactive, reactive, ref, watch } from 'vue'\n\nexport default function useRemember(data, key) {\n if (typeof data === 'object' && data !== null && data.__rememberable === false) {\n return data\n }\n\n const restored = router.restore(key)\n const type = isReactive(data) ? reactive : ref\n const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'\n const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)\n\n watch(\n remembered,\n (newValue) => {\n router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)\n },\n { immediate: true, deep: true },\n )\n\n return remembered\n}\n"],"names":["created","this","$options","remember","Array","isArray","data","key","call","router","restore","rememberKey","filter","_this","__rememberable","__remember","__restore","rememberable","forEach","undefined","restored","hasCallbacks","$watch","reduce","cloneDeep","immediate","deep","args","reactive","isDirty","errors","hasErrors","processing","progress","wasSuccessful","recentlySuccessful","keys","carry","transform","callback","defaults","value","Object","assign","reset","fields","length","clonedDefaults","includes","setError","clearErrors","field","_this2","submit","method","url","options","onCancelToken","token","cancelToken","onBefore","visit","_this3","clearTimeout","recentlySuccessfulTimeoutId","onStart","onProgress","event","onSuccess","page","_this4","setTimeout","onError","onCancel","onFinish","_options","get","post","put","patch","cancel","watch","form","newValue","isEqual","ref","shallowRef","name","props","initialPage","type","required","initialComponent","resolveComponent","Function","titleCallback","default","title","onHeadUpdate","setup","component","markRaw","headManager","createHeadManager","isServer","init","swapComponent","preserveState","Date","now","on","forceUpdate","inheritAttrs","h","layout","child","concat","reverse","install","app","useForm","defineProperty","config","globalProperties","mixin","computed","version","id","resolve","render","document","getElementById","JSON","parse","el","dataset","then","module","App","elements","plugin","vueApp","setupProgress","createSSRApp","data-page","stringify","innerHTML","head","body","String","provider","$headManager","createProvider","beforeUnmount","disconnect","methods","isUnaryTag","node","indexOf","renderTagStart","inertia","attrs","renderTagChildren","children","html","renderTag","toString","addTitleElement","find","tag","startsWith","push","renderNodes","nodes","flatMap","map","update","$slots","as","href","replace","Boolean","preserveScroll","only","headers","queryStringArrayFormat","slots","toLowerCase","mergeDataIntoQueryString","console","warn","onClick","shouldIntercept","preventDefault","isReactive","remembered"],"mappings":"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"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var r=require("@inertiajs/core"),t=require("vue"),n=e(require("lodash.clonedeep")),o=e(require("lodash.isequal"));function i(){return(i=Object.assign?Object.assign.bind():function(e){for(var r=1;r<arguments.length;r++){var t=arguments[r];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])}return e}).apply(this,arguments)}var u={created:function(){var e=this;if(this.$options.remember){Array.isArray(this.$options.remember)&&(this.$options.remember={data:this.$options.remember}),"string"==typeof this.$options.remember&&(this.$options.remember={data:[this.$options.remember]}),"string"==typeof this.$options.remember.data&&(this.$options.remember={data:[this.$options.remember.data]});var t=this.$options.remember.key instanceof Function?this.$options.remember.key.call(this):this.$options.remember.key,o=r.router.restore(t),u=this.$options.remember.data.filter(function(r){return!(null!==e[r]&&"object"==typeof e[r]&&!1===e[r].__rememberable)}),a=function(r){return null!==e[r]&&"object"==typeof e[r]&&"function"==typeof e[r].__remember&&"function"==typeof e[r].__restore};u.forEach(function(s){void 0!==e[s]&&void 0!==o&&void 0!==o[s]&&(a(s)?e[s].__restore(o[s]):e[s]=o[s]),e.$watch(s,function(){r.router.remember(u.reduce(function(r,t){var o;return i({},r,((o={})[t]=n(a(t)?e[t].__remember():e[t]),o))},{}),t)},{immediate:!0,deep:!0})})}}};function a(){var e=[].slice.call(arguments),u="string"==typeof e[0]?e[0]:null,a=("string"==typeof e[0]?e[1]:e[0])||{},s=u?r.router.restore(u):null,c=n(a),l=null,f=null,p=function(e){return e},d=t.reactive(i({},s?s.data:a,{isDirty:!1,errors:s?s.errors:{},hasErrors:!1,processing:!1,progress:null,wasSuccessful:!1,recentlySuccessful:!1,data:function(){var e=this;return Object.keys(a).reduce(function(r,t){return r[t]=e[t],r},{})},transform:function(e){return p=e,this},defaults:function(e,r){var t;return c=void 0===e?this.data():Object.assign({},n(c),r?((t={})[e]=r,t):e),this},reset:function(){var e=[].slice.call(arguments),r=n(c);return Object.assign(this,0===e.length?r:Object.keys(r).filter(function(r){return e.includes(r)}).reduce(function(e,t){return e[t]=r[t],e},{})),this},setError:function(e,r){var t;return Object.assign(this.errors,r?((t={})[e]=r,t):e),this.hasErrors=Object.keys(this.errors).length>0,this},clearErrors:function(){var e=this,r=[].slice.call(arguments);return this.errors=Object.keys(this.errors).reduce(function(t,n){var o;return i({},t,r.length>0&&!r.includes(n)?((o={})[n]=e.errors[n],o):{})},{}),this.hasErrors=Object.keys(this.errors).length>0,this},submit:function(e,t,o){var u=this,a=this;void 0===o&&(o={});var s=p(this.data()),d=i({},o,{onCancelToken:function(e){if(l=e,o.onCancelToken)return o.onCancelToken(e)},onBefore:function(e){if(a.wasSuccessful=!1,a.recentlySuccessful=!1,clearTimeout(f),o.onBefore)return o.onBefore(e)},onStart:function(e){if(a.processing=!0,o.onStart)return o.onStart(e)},onProgress:function(e){if(a.progress=e,o.onProgress)return o.onProgress(e)},onSuccess:function(e){try{var r=function(e){return c=n(u.data()),u.isDirty=!1,e};return u.processing=!1,u.progress=null,u.clearErrors(),u.wasSuccessful=!0,u.recentlySuccessful=!0,f=setTimeout(function(){return u.recentlySuccessful=!1},2e3),Promise.resolve(o.onSuccess?Promise.resolve(o.onSuccess(e)).then(r):r(null))}catch(e){return Promise.reject(e)}},onError:function(e){if(a.processing=!1,a.progress=null,a.clearErrors().setError(e),o.onError)return o.onError(e)},onCancel:function(){if(a.processing=!1,a.progress=null,o.onCancel)return o.onCancel()},onFinish:function(){if(a.processing=!1,a.progress=null,l=null,o.onFinish)return o.onFinish()}});"delete"===e?r.router.delete(t,i({},d,{data:s})):r.router[e](t,s,d)},get:function(e,r){this.submit("get",e,r)},post:function(e,r){this.submit("post",e,r)},put:function(e,r){this.submit("put",e,r)},patch:function(e,r){this.submit("patch",e,r)},delete:function(e,r){this.submit("delete",e,r)},cancel:function(){l&&l.cancel()},__rememberable:null===u,__remember:function(){return{data:this.data(),errors:this.errors}},__restore:function(e){Object.assign(this,e.data),this.setError(e.errors)}}));return t.watch(d,function(e){d.isDirty=!o(d.data(),c),u&&r.router.remember(n(e.__remember()),u)},{immediate:!0,deep:!0}),d}var s=t.ref(null),c=t.ref({}),l=t.shallowRef(null),f=t.ref(null),p=null,d={name:"Inertia",props:{initialPage:{type:Object,required:!0},initialComponent:{type:Object,required:!1},resolveComponent:{type:Function,required:!1},titleCallback:{type:Function,required:!1,default:function(e){return e}},onHeadUpdate:{type:Function,required:!1,default:function(){return function(){}}}},setup:function(e){var n=e.initialPage,o=e.initialComponent,u=e.resolveComponent,a=e.titleCallback,d=e.onHeadUpdate;s.value=o?t.markRaw(o):null,c.value=n,f.value=null;var h="undefined"==typeof window;return p=r.createHeadManager(h,a,d),h||(r.router.init({initialPage:n,resolveComponent:u,swapComponent:function(e){try{return s.value=t.markRaw(e.component),c.value=e.page,f.value=e.preserveState?f.value:Date.now(),Promise.resolve()}catch(e){return Promise.reject(e)}}}),r.router.on("navigate",function(){return p.forceUpdate()})),function(){if(s.value){s.value.inheritAttrs=!!s.value.inheritAttrs;var e=t.h(s.value,i({},c.value.props,{key:f.value}));return l.value&&(s.value.layout=l.value,l.value=null),s.value.layout?"function"==typeof s.value.layout?s.value.layout(t.h,e):(Array.isArray(s.value.layout)?s.value.layout:[s.value.layout]).concat(e).reverse().reduce(function(e,r){return r.inheritAttrs=!!r.inheritAttrs,t.h(r,i({},c.value.props),function(){return e})}):e}}}},h={install:function(e){r.router.form=a,Object.defineProperty(e.config.globalProperties,"$inertia",{get:function(){return r.router}}),Object.defineProperty(e.config.globalProperties,"$page",{get:function(){return c.value}}),Object.defineProperty(e.config.globalProperties,"$headManager",{get:function(){return p}}),e.mixin(u)}},m={props:{title:{type:String,required:!1}},data:function(){return{provider:this.$headManager.createProvider()}},beforeUnmount:function(){this.provider.disconnect()},methods:{isUnaryTag:function(e){return["area","base","br","col","embed","hr","img","input","keygen","link","meta","param","source","track","wbr"].indexOf(e.type)>-1},renderTagStart:function(e){e.props=e.props||{},e.props.inertia=void 0!==e.props["head-key"]?e.props["head-key"]:"";var r=Object.keys(e.props).reduce(function(r,t){var n=e.props[t];return["key","head-key"].includes(t)?r:""===n?r+" "+t:r+" "+t+'="'+n+'"'},"");return"<"+e.type+r+">"},renderTagChildren:function(e){var r=this;return"string"==typeof e.children?e.children:e.children.reduce(function(e,t){return e+r.renderTag(t)},"")},renderTag:function(e){if("Symbol(Text)"===e.type.toString())return e.children;if("Symbol()"===e.type.toString())return"";if("Symbol(Comment)"===e.type.toString())return"";var r=this.renderTagStart(e);return e.children&&(r+=this.renderTagChildren(e)),this.isUnaryTag(e)||(r+="</"+e.type+">"),r},addTitleElement:function(e){return this.title&&!e.find(function(e){return e.startsWith("<title")})&&e.push("<title inertia>"+this.title+"</title>"),e},renderNodes:function(e){var r=this;return this.addTitleElement(e.flatMap(function(e){return"Symbol(Fragment)"===e.type.toString()?e.children:e}).map(function(e){return r.renderTag(e)}).filter(function(e){return e}))}},render:function(){this.provider.update(this.renderNodes(this.$slots.default?this.$slots.default():[]))}},v={name:"Link",props:{as:{type:String,default:"a"},data:{type:Object,default:function(){return{}}},href:{type:String},method:{type:String,default:"get"},replace:{type:Boolean,default:!1},preserveScroll:{type:Boolean,default:!1},preserveState:{type:Boolean,default:null},only:{type:Array,default:function(){return[]}},headers:{type:Object,default:function(){return{}}},queryStringArrayFormat:{type:String,default:"brackets"}},setup:function(e,n){var o=n.slots,u=n.attrs;return function(e){var n=e.as.toLowerCase(),a=e.method.toLowerCase(),s=r.mergeDataIntoQueryString(a,e.href||"",e.data,e.queryStringArrayFormat),c=s[0],l=s[1];return"a"===n&&"get"!==a&&console.warn('Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="'+c+'" method="'+a+'" as="button">...</Link>'),t.h(e.as,i({},u,"a"===n?{href:c}:{},{onClick:function(t){var n;r.shouldIntercept(t)&&(t.preventDefault(),r.router.visit(c,{data:l,method:a,replace:e.replace,preserveScroll:e.preserveScroll,preserveState:null!=(n=e.preserveState)?n:"get"!==a,only:e.only,headers:e.headers,onCancelToken:u.onCancelToken||function(){return{}},onBefore:u.onBefore||function(){return{}},onStart:u.onStart||function(){return{}},onProgress:u.onProgress||function(){return{}},onFinish:u.onFinish||function(){return{}},onCancel:u.onCancel||function(){return{}},onSuccess:u.onSuccess||function(){return{}},onError:u.onError||function(){return{}}}))}}),o)}}};Object.defineProperty(exports,"router",{enumerable:!0,get:function(){return r.router}}),exports.Head=m,exports.Link=v,exports.createInertiaApp=function(e){try{var n,o,i,u,a,s,c,l,f;o=void 0===(n=e.id)?"app":n,i=e.resolve,u=e.setup,a=e.title,c=void 0===(s=e.progress)?{}:s,l=e.page,f=e.render;var p="undefined"==typeof window,m=p?null:document.getElementById(o),v=l||JSON.parse(m.dataset.page),y=function(e){return Promise.resolve(i(e)).then(function(e){return e.default||e})},g=[];return Promise.resolve(y(v.component).then(function(e){return u({el:m,App:d,props:{initialPage:v,initialComponent:e,resolveComponent:y,titleCallback:a,onHeadUpdate:p?function(e){return g=e}:null},plugin:h})})).then(function(e){return!p&&c&&r.setupProgress(c),function(){if(p)return Promise.resolve(f(t.createSSRApp({render:function(){return t.h("div",{id:o,"data-page":JSON.stringify(v),innerHTML:f(e)})}}))).then(function(e){return{head:g,body:e}})}()})}catch(e){return Promise.reject(e)}},exports.defineLayout=function(e){l.value=e},exports.useForm=a,exports.usePage=function(){return{props:t.computed(function(){return c.value.props}),url:t.computed(function(){return c.value.url}),component:t.computed(function(){return c.value.component}),version:t.computed(function(){return c.value.version})}},exports.useRemember=function(e,o){if("object"==typeof e&&null!==e&&!1===e.__rememberable)return e;var i=r.router.restore(o),u=t.isReactive(e)?t.reactive:t.ref,a="function"==typeof e.__remember&&"function"==typeof e.__restore,s=void 0===i?e:u(a?e.__restore(i):i);return t.watch(s,function(t){r.router.remember(n(a?e.__remember():t),o)},{immediate:!0,deep:!0}),s};
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/remember.js","../src/useForm.js","../src/app.js","../src/head.js","../src/link.js","../src/createInertiaApp.js","../src/useRemember.js"],"sourcesContent":["import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\n\nexport default {\n created() {\n if (!this.$options.remember) {\n return\n }\n\n if (Array.isArray(this.$options.remember)) {\n this.$options.remember = { data: this.$options.remember }\n }\n\n if (typeof this.$options.remember === 'string') {\n this.$options.remember = { data: [this.$options.remember] }\n }\n\n if (typeof this.$options.remember.data === 'string') {\n this.$options.remember = { data: [this.$options.remember.data] }\n }\n\n const rememberKey =\n this.$options.remember.key instanceof Function\n ? this.$options.remember.key.call(this)\n : this.$options.remember.key\n\n const restored = router.restore(rememberKey)\n\n const rememberable = this.$options.remember.data.filter((key) => {\n return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)\n })\n\n const hasCallbacks = (key) => {\n return (\n this[key] !== null &&\n typeof this[key] === 'object' &&\n typeof this[key].__remember === 'function' &&\n typeof this[key].__restore === 'function'\n )\n }\n\n rememberable.forEach((key) => {\n if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {\n hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])\n }\n\n this.$watch(\n key,\n () => {\n router.remember(\n rememberable.reduce(\n (data, key) => ({\n ...data,\n [key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),\n }),\n {},\n ),\n rememberKey,\n )\n },\n { immediate: true, deep: true },\n )\n })\n },\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport isEqual from 'lodash.isequal'\nimport { reactive, watch } from 'vue'\n\nexport default function useForm(...args) {\n const rememberKey = typeof args[0] === 'string' ? args[0] : null\n const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}\n const restored = rememberKey ? router.restore(rememberKey) : null\n let defaults = cloneDeep(data)\n let cancelToken = null\n let recentlySuccessfulTimeoutId = null\n let transform = (data) => data\n\n let form = reactive({\n ...(restored ? restored.data : data),\n isDirty: false,\n errors: restored ? restored.errors : {},\n hasErrors: false,\n processing: false,\n progress: null,\n wasSuccessful: false,\n recentlySuccessful: false,\n data() {\n return Object.keys(data).reduce((carry, key) => {\n carry[key] = this[key]\n return carry\n }, {})\n },\n transform(callback) {\n transform = callback\n\n return this\n },\n defaults(key, value) {\n if (typeof key === 'undefined') {\n defaults = this.data()\n } else {\n defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)\n }\n\n return this\n },\n reset(...fields) {\n let clonedDefaults = cloneDeep(defaults)\n if (fields.length === 0) {\n Object.assign(this, clonedDefaults)\n } else {\n Object.assign(\n this,\n Object.keys(clonedDefaults)\n .filter((key) => fields.includes(key))\n .reduce((carry, key) => {\n carry[key] = clonedDefaults[key]\n return carry\n }, {}),\n )\n }\n\n return this\n },\n setError(key, value) {\n Object.assign(this.errors, value ? { [key]: value } : key)\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n clearErrors(...fields) {\n this.errors = Object.keys(this.errors).reduce(\n (carry, field) => ({\n ...carry,\n ...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),\n }),\n {},\n )\n\n this.hasErrors = Object.keys(this.errors).length > 0\n\n return this\n },\n submit(method, url, options = {}) {\n const data = transform(this.data())\n const _options = {\n ...options,\n onCancelToken: (token) => {\n cancelToken = token\n\n if (options.onCancelToken) {\n return options.onCancelToken(token)\n }\n },\n onBefore: (visit) => {\n this.wasSuccessful = false\n this.recentlySuccessful = false\n clearTimeout(recentlySuccessfulTimeoutId)\n\n if (options.onBefore) {\n return options.onBefore(visit)\n }\n },\n onStart: (visit) => {\n this.processing = true\n\n if (options.onStart) {\n return options.onStart(visit)\n }\n },\n onProgress: (event) => {\n this.progress = event\n\n if (options.onProgress) {\n return options.onProgress(event)\n }\n },\n onSuccess: async (page) => {\n this.processing = false\n this.progress = null\n this.clearErrors()\n this.wasSuccessful = true\n this.recentlySuccessful = true\n recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)\n\n const onSuccess = options.onSuccess ? await options.onSuccess(page) : null\n defaults = cloneDeep(this.data())\n this.isDirty = false\n return onSuccess\n },\n onError: (errors) => {\n this.processing = false\n this.progress = null\n this.clearErrors().setError(errors)\n\n if (options.onError) {\n return options.onError(errors)\n }\n },\n onCancel: () => {\n this.processing = false\n this.progress = null\n\n if (options.onCancel) {\n return options.onCancel()\n }\n },\n onFinish: () => {\n this.processing = false\n this.progress = null\n cancelToken = null\n\n if (options.onFinish) {\n return options.onFinish()\n }\n },\n }\n\n if (method === 'delete') {\n router.delete(url, { ..._options, data })\n } else {\n router[method](url, data, _options)\n }\n },\n get(url, options) {\n this.submit('get', url, options)\n },\n post(url, options) {\n this.submit('post', url, options)\n },\n put(url, options) {\n this.submit('put', url, options)\n },\n patch(url, options) {\n this.submit('patch', url, options)\n },\n delete(url, options) {\n this.submit('delete', url, options)\n },\n cancel() {\n if (cancelToken) {\n cancelToken.cancel()\n }\n },\n __rememberable: rememberKey === null,\n __remember() {\n return { data: this.data(), errors: this.errors }\n },\n __restore(restored) {\n Object.assign(this, restored.data)\n this.setError(restored.errors)\n },\n })\n\n watch(\n form,\n (newValue) => {\n form.isDirty = !isEqual(form.data(), defaults)\n if (rememberKey) {\n router.remember(cloneDeep(newValue.__remember()), rememberKey)\n }\n },\n { immediate: true, deep: true },\n )\n\n return form\n}\n","import { createHeadManager, router } from '@inertiajs/core'\nimport { computed, h, markRaw, ref, shallowRef } from 'vue'\nimport remember from './remember'\nimport useForm from './useForm'\n\nconst component = ref(null)\nconst page = ref({})\nconst layout = shallowRef(null)\nconst key = ref(null)\nlet headManager = null\n\nexport default {\n name: 'Inertia',\n props: {\n initialPage: {\n type: Object,\n required: true,\n },\n initialComponent: {\n type: Object,\n required: false,\n },\n resolveComponent: {\n type: Function,\n required: false,\n },\n titleCallback: {\n type: Function,\n required: false,\n default: (title) => title,\n },\n onHeadUpdate: {\n type: Function,\n required: false,\n default: () => () => {},\n },\n },\n setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {\n component.value = initialComponent ? markRaw(initialComponent) : null\n page.value = initialPage\n key.value = null\n\n const isServer = typeof window === 'undefined'\n headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)\n\n if (!isServer) {\n router.init({\n initialPage,\n resolveComponent,\n swapComponent: async (args) => {\n component.value = markRaw(args.component)\n page.value = args.page\n key.value = args.preserveState ? key.value : Date.now()\n },\n })\n\n router.on('navigate', () => headManager.forceUpdate())\n }\n\n return () => {\n if (component.value) {\n component.value.inheritAttrs = !!component.value.inheritAttrs\n\n const child = h(component.value, {\n ...page.value.props,\n key: key.value,\n })\n\n if (layout.value) {\n component.value.layout = layout.value\n layout.value = null\n }\n\n if (component.value.layout) {\n if (typeof component.value.layout === 'function') {\n return component.value.layout(h, child)\n }\n\n return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])\n .concat(child)\n .reverse()\n .reduce((child, layout) => {\n layout.inheritAttrs = !!layout.inheritAttrs\n return h(layout, { ...page.value.props }, () => child)\n })\n }\n\n return child\n }\n }\n },\n}\n\nexport const plugin = {\n install(app) {\n router.form = useForm\n\n Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })\n Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })\n Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })\n\n app.mixin(remember)\n },\n}\n\nexport function usePage() {\n return {\n props: computed(() => page.value.props),\n url: computed(() => page.value.url),\n component: computed(() => page.value.component),\n version: computed(() => page.value.version),\n }\n}\n\nexport function defineLayout(component) {\n layout.value = component\n}\n","export default {\n props: {\n title: {\n type: String,\n required: false,\n },\n },\n data() {\n return {\n provider: this.$headManager.createProvider(),\n }\n },\n beforeUnmount() {\n this.provider.disconnect()\n },\n methods: {\n isUnaryTag(node) {\n return (\n [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'keygen',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n ].indexOf(node.type) > -1\n )\n },\n renderTagStart(node) {\n node.props = node.props || {}\n node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''\n const attrs = Object.keys(node.props).reduce((carry, name) => {\n const value = node.props[name]\n if (['key', 'head-key'].includes(name)) {\n return carry\n } else if (value === '') {\n return carry + ` ${name}`\n } else {\n return carry + ` ${name}=\"${value}\"`\n }\n }, '')\n return `<${node.type}${attrs}>`\n },\n renderTagChildren(node) {\n return typeof node.children === 'string'\n ? node.children\n : node.children.reduce((html, child) => html + this.renderTag(child), '')\n },\n renderTag(node) {\n if (node.type.toString() === 'Symbol(Text)') {\n return node.children\n } else if (node.type.toString() === 'Symbol()') {\n return ''\n } else if (node.type.toString() === 'Symbol(Comment)') {\n return ''\n }\n let html = this.renderTagStart(node)\n if (node.children) {\n html += this.renderTagChildren(node)\n }\n if (!this.isUnaryTag(node)) {\n html += `</${node.type}>`\n }\n return html\n },\n addTitleElement(elements) {\n if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {\n elements.push(`<title inertia>${this.title}</title>`)\n }\n return elements\n },\n renderNodes(nodes) {\n return this.addTitleElement(\n nodes\n .flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))\n .map((node) => this.renderTag(node))\n .filter((node) => node),\n )\n },\n },\n render() {\n this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))\n },\n}\n","import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'\nimport { h } from 'vue'\n\nexport default {\n name: 'Link',\n props: {\n as: {\n type: String,\n default: 'a',\n },\n data: {\n type: Object,\n default: () => ({}),\n },\n href: {\n type: String,\n },\n method: {\n type: String,\n default: 'get',\n },\n replace: {\n type: Boolean,\n default: false,\n },\n preserveScroll: {\n type: Boolean,\n default: false,\n },\n preserveState: {\n type: Boolean,\n default: null,\n },\n only: {\n type: Array,\n default: () => [],\n },\n headers: {\n type: Object,\n default: () => ({}),\n },\n queryStringArrayFormat: {\n type: String,\n default: 'brackets',\n },\n },\n setup(props, { slots, attrs }) {\n return (props) => {\n const as = props.as.toLowerCase()\n const method = props.method.toLowerCase()\n const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)\n\n if (as === 'a' && method !== 'get') {\n console.warn(\n `Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes \"Open Link in New Tab/Window\" accessibility issues.\\n\\nPlease specify a more appropriate element using the \"as\" attribute. For example:\\n\\n<Link href=\"${href}\" method=\"${method}\" as=\"button\">...</Link>`,\n )\n }\n\n return h(\n props.as,\n {\n ...attrs,\n ...(as === 'a' ? { href } : {}),\n onClick: (event) => {\n if (shouldIntercept(event)) {\n event.preventDefault()\n\n router.visit(href, {\n data: data,\n method: method,\n replace: props.replace,\n preserveScroll: props.preserveScroll,\n preserveState: props.preserveState ?? method !== 'get',\n only: props.only,\n headers: props.headers,\n onCancelToken: attrs.onCancelToken || (() => ({})),\n onBefore: attrs.onBefore || (() => ({})),\n onStart: attrs.onStart || (() => ({})),\n onProgress: attrs.onProgress || (() => ({})),\n onFinish: attrs.onFinish || (() => ({})),\n onCancel: attrs.onCancel || (() => ({})),\n onSuccess: attrs.onSuccess || (() => ({})),\n onError: attrs.onError || (() => ({})),\n })\n }\n },\n },\n slots,\n )\n }\n },\n}\n","import { setupProgress } from '@inertiajs/core'\nimport { createSSRApp, h } from 'vue'\nimport App, { plugin } from './app'\n\nexport default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {\n const isServer = typeof window === 'undefined'\n const el = isServer ? null : document.getElementById(id)\n const initialPage = page || JSON.parse(el.dataset.page)\n const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)\n\n let head = []\n\n const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {\n return setup({\n el,\n App,\n props: {\n initialPage,\n initialComponent,\n resolveComponent,\n titleCallback: title,\n onHeadUpdate: isServer ? (elements) => (head = elements) : null,\n },\n plugin,\n })\n })\n\n if (!isServer && progress) {\n setupProgress(progress)\n }\n\n if (isServer) {\n const body = await render(\n createSSRApp({\n render: () =>\n h('div', {\n id,\n 'data-page': JSON.stringify(initialPage),\n innerHTML: render(vueApp),\n }),\n }),\n )\n\n return { head, body }\n }\n}\n","import { router } from '@inertiajs/core'\nimport cloneDeep from 'lodash.clonedeep'\nimport { isReactive, reactive, ref, watch } from 'vue'\n\nexport default function useRemember(data, key) {\n if (typeof data === 'object' && data !== null && data.__rememberable === false) {\n return data\n }\n\n const restored = router.restore(key)\n const type = isReactive(data) ? reactive : ref\n const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'\n const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)\n\n watch(\n remembered,\n (newValue) => {\n router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)\n },\n { immediate: true, deep: true },\n )\n\n return remembered\n}\n"],"names":["created","this","$options","remember","Array","isArray","data","key","call","router","restore","rememberKey","filter","_this","__rememberable","__remember","__restore","rememberable","forEach","undefined","restored","hasCallbacks","$watch","reduce","cloneDeep","immediate","deep","args","reactive","isDirty","errors","hasErrors","processing","progress","wasSuccessful","recentlySuccessful","keys","carry","transform","callback","defaults","value","Object","assign","reset","fields","length","clonedDefaults","includes","setError","clearErrors","field","_this2","submit","method","url","options","onCancelToken","token","cancelToken","onBefore","visit","_this3","clearTimeout","recentlySuccessfulTimeoutId","onStart","onProgress","event","onSuccess","page","_this4","setTimeout","onError","onCancel","onFinish","_options","get","post","put","patch","cancel","watch","form","newValue","isEqual","ref","shallowRef","name","props","initialPage","type","required","initialComponent","resolveComponent","Function","titleCallback","default","title","onHeadUpdate","setup","component","markRaw","headManager","createHeadManager","isServer","init","swapComponent","preserveState","Date","now","on","forceUpdate","inheritAttrs","h","layout","child","concat","reverse","install","app","useForm","defineProperty","config","globalProperties","mixin","String","provider","$headManager","createProvider","beforeUnmount","disconnect","methods","isUnaryTag","node","indexOf","renderTagStart","inertia","attrs","renderTagChildren","children","html","renderTag","toString","addTitleElement","elements","find","tag","startsWith","push","renderNodes","nodes","flatMap","map","render","update","$slots","as","href","replace","Boolean","preserveScroll","only","headers","queryStringArrayFormat","slots","toLowerCase","mergeDataIntoQueryString","console","warn","onClick","shouldIntercept","preventDefault","id","resolve","document","getElementById","JSON","parse","el","dataset","then","module","App","plugin","vueApp","setupProgress","createSSRApp","data-page","stringify","innerHTML","head","body","computed","version","isReactive","remembered"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import * as Inertia from '@inertiajs/core'
|
|
2
|
+
import { Ref, ComputedRef, App as VueApp, DefineComponent, Plugin } from 'vue'
|
|
3
|
+
|
|
4
|
+
export interface InertiaAppProps {
|
|
5
|
+
initialPage: Inertia.Page
|
|
6
|
+
initialComponent?: object
|
|
7
|
+
resolveComponent?: (name: string) => DefineComponent | Promise<DefineComponent>
|
|
8
|
+
onHeadUpdate?: (elements: string[]) => void
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
type InertiaApp = DefineComponent<InertiaAppProps>
|
|
12
|
+
|
|
13
|
+
export declare const App: InertiaApp
|
|
14
|
+
|
|
15
|
+
export declare const plugin: Plugin
|
|
16
|
+
|
|
17
|
+
export interface CreateInertiaAppProps {
|
|
18
|
+
id?: string
|
|
19
|
+
resolve: (name: string) => DefineComponent | Promise<DefineComponent> | { default: DefineComponent }
|
|
20
|
+
setup: (props: { el: Element; app: InertiaApp; props: InertiaAppProps; plugin: Plugin }) => void | VueApp
|
|
21
|
+
title?: (title: string) => string
|
|
22
|
+
page?: Inertia.Page
|
|
23
|
+
render?: (app: VueApp) => Promise<string>
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export declare function createInertiaApp(props: CreateInertiaAppProps): Promise<{ head: string[]; body: string } | void>
|
|
27
|
+
|
|
28
|
+
export interface InertiaLinkProps {
|
|
29
|
+
as?: string
|
|
30
|
+
data?: object
|
|
31
|
+
href: string
|
|
32
|
+
method?: string
|
|
33
|
+
headers?: object
|
|
34
|
+
onClick?: (event: MouseEvent | KeyboardEvent) => void
|
|
35
|
+
preserveScroll?: boolean | ((props: Inertia.PageProps) => boolean)
|
|
36
|
+
preserveState?: boolean | ((props: Inertia.PageProps) => boolean) | null
|
|
37
|
+
replace?: boolean
|
|
38
|
+
only?: string[]
|
|
39
|
+
onCancelToken?: (cancelToken: import('axios').CancelTokenSource) => void
|
|
40
|
+
onBefore?: () => void
|
|
41
|
+
onStart?: () => void
|
|
42
|
+
onProgress?: (progress: Inertia.Progress) => void
|
|
43
|
+
onFinish?: () => void
|
|
44
|
+
onCancel?: () => void
|
|
45
|
+
onSuccess?: () => void
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export type InertiaLink = DefineComponent<InertiaLinkProps>
|
|
49
|
+
|
|
50
|
+
export declare const Link: InertiaLink
|
|
51
|
+
|
|
52
|
+
export interface InertiaFormProps<TForm> {
|
|
53
|
+
isDirty: boolean
|
|
54
|
+
errors: Record<keyof TForm, string>
|
|
55
|
+
hasErrors: boolean
|
|
56
|
+
processing: boolean
|
|
57
|
+
progress: Inertia.Progress | null
|
|
58
|
+
wasSuccessful: boolean
|
|
59
|
+
recentlySuccessful: boolean
|
|
60
|
+
data(): TForm
|
|
61
|
+
transform(callback: (data: TForm) => object): this
|
|
62
|
+
defaults(): this
|
|
63
|
+
defaults(field: keyof TForm, value: string): this
|
|
64
|
+
defaults(fields: Record<keyof TForm, string>): this
|
|
65
|
+
reset(...fields: (keyof TForm)[]): this
|
|
66
|
+
clearErrors(...fields: (keyof TForm)[]): this
|
|
67
|
+
setError(field: keyof TForm, value: string): this
|
|
68
|
+
setError(errors: Record<keyof TForm, string>): this
|
|
69
|
+
submit(method: string, url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
70
|
+
get(url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
71
|
+
post(url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
72
|
+
put(url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
73
|
+
patch(url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
74
|
+
delete(url: string, options?: Partial<Inertia.VisitOptions>): void
|
|
75
|
+
cancel(): void
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export type InertiaForm<TForm> = TForm & InertiaFormProps<TForm>
|
|
79
|
+
|
|
80
|
+
export declare function useForm<TForm>(data: TForm): InertiaForm<TForm>
|
|
81
|
+
|
|
82
|
+
export declare function useForm<TForm>(rememberKey: string, data: TForm): InertiaForm<TForm>
|
|
83
|
+
|
|
84
|
+
export declare function useRemember(data: object, key?: string): Ref<object>
|
|
85
|
+
|
|
86
|
+
export declare function usePage<PageProps>(): {
|
|
87
|
+
props: ComputedRef<PageProps & Inertia.PageProps>
|
|
88
|
+
url: ComputedRef<string>
|
|
89
|
+
component: ComputedRef<string>
|
|
90
|
+
version: ComputedRef<string | null>
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
export declare function defineLayout(component: object): void
|
|
94
|
+
|
|
95
|
+
export type InertiaHead = DefineComponent<{
|
|
96
|
+
title?: string
|
|
97
|
+
}>
|
|
98
|
+
|
|
99
|
+
export declare const Head: InertiaHead
|
|
100
|
+
|
|
101
|
+
declare module '@vue/runtime-core' {
|
|
102
|
+
export interface ComponentCustomProperties {
|
|
103
|
+
$inertia: typeof Inertia.Inertia
|
|
104
|
+
$page: Inertia.Page
|
|
105
|
+
$headManager: ReturnType<typeof Inertia.createHeadManager>
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export interface ComponentCustomOptions {
|
|
109
|
+
remember?:
|
|
110
|
+
| string
|
|
111
|
+
| string[]
|
|
112
|
+
| {
|
|
113
|
+
data: string | string[]
|
|
114
|
+
key?: string | (() => string)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@inertiajs/vue3",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"license": "MIT",
|
|
5
|
+
"description": "The Vue 3 adapter for Inertia.js",
|
|
6
|
+
"contributors": [
|
|
7
|
+
"Jonathan Reinink <jonathan@reinink.ca>"
|
|
8
|
+
],
|
|
9
|
+
"homepage": "https://inertiajs.com/",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/inertiajs/inertia.git",
|
|
13
|
+
"directory": "packages/vue3"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/inertiajs/inertia/issues"
|
|
17
|
+
},
|
|
18
|
+
"source": "src/index.js",
|
|
19
|
+
"main": "dist/index.js",
|
|
20
|
+
"typings": "index.d.ts",
|
|
21
|
+
"exports": {
|
|
22
|
+
".": "./dist/index.js",
|
|
23
|
+
"./server": "./dist/server.js"
|
|
24
|
+
},
|
|
25
|
+
"scripts": {
|
|
26
|
+
"build": "npm run clean && npm run build:browser && npm run build:server",
|
|
27
|
+
"build:browser": "microbundle --format es,cjs",
|
|
28
|
+
"build:server": "microbundle --format es,cjs --target node --output ./dist/server.js ./src/server.js",
|
|
29
|
+
"clean": "rm -rf dist",
|
|
30
|
+
"prepublishOnly": "npm run build",
|
|
31
|
+
"watch": "microbundle watch --format es,cjs"
|
|
32
|
+
},
|
|
33
|
+
"devDependencies": {
|
|
34
|
+
"microbundle": "^0.12.0",
|
|
35
|
+
"vue": "^3.0.0"
|
|
36
|
+
},
|
|
37
|
+
"peerDependencies": {
|
|
38
|
+
"vue": "^3.0.0"
|
|
39
|
+
},
|
|
40
|
+
"dependencies": {
|
|
41
|
+
"@inertiajs/core": "1.0.0-beta.1",
|
|
42
|
+
"lodash.clonedeep": "^4.5.0",
|
|
43
|
+
"lodash.isequal": "^4.5.0"
|
|
44
|
+
}
|
|
45
|
+
}
|
package/readme.md
ADDED
package/src/app.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { createHeadManager, router } from '@inertiajs/core'
|
|
2
|
+
import { computed, h, markRaw, ref, shallowRef } from 'vue'
|
|
3
|
+
import remember from './remember'
|
|
4
|
+
import useForm from './useForm'
|
|
5
|
+
|
|
6
|
+
const component = ref(null)
|
|
7
|
+
const page = ref({})
|
|
8
|
+
const layout = shallowRef(null)
|
|
9
|
+
const key = ref(null)
|
|
10
|
+
let headManager = null
|
|
11
|
+
|
|
12
|
+
export default {
|
|
13
|
+
name: 'Inertia',
|
|
14
|
+
props: {
|
|
15
|
+
initialPage: {
|
|
16
|
+
type: Object,
|
|
17
|
+
required: true,
|
|
18
|
+
},
|
|
19
|
+
initialComponent: {
|
|
20
|
+
type: Object,
|
|
21
|
+
required: false,
|
|
22
|
+
},
|
|
23
|
+
resolveComponent: {
|
|
24
|
+
type: Function,
|
|
25
|
+
required: false,
|
|
26
|
+
},
|
|
27
|
+
titleCallback: {
|
|
28
|
+
type: Function,
|
|
29
|
+
required: false,
|
|
30
|
+
default: (title) => title,
|
|
31
|
+
},
|
|
32
|
+
onHeadUpdate: {
|
|
33
|
+
type: Function,
|
|
34
|
+
required: false,
|
|
35
|
+
default: () => () => {},
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
setup({ initialPage, initialComponent, resolveComponent, titleCallback, onHeadUpdate }) {
|
|
39
|
+
component.value = initialComponent ? markRaw(initialComponent) : null
|
|
40
|
+
page.value = initialPage
|
|
41
|
+
key.value = null
|
|
42
|
+
|
|
43
|
+
const isServer = typeof window === 'undefined'
|
|
44
|
+
headManager = createHeadManager(isServer, titleCallback, onHeadUpdate)
|
|
45
|
+
|
|
46
|
+
if (!isServer) {
|
|
47
|
+
router.init({
|
|
48
|
+
initialPage,
|
|
49
|
+
resolveComponent,
|
|
50
|
+
swapComponent: async (args) => {
|
|
51
|
+
component.value = markRaw(args.component)
|
|
52
|
+
page.value = args.page
|
|
53
|
+
key.value = args.preserveState ? key.value : Date.now()
|
|
54
|
+
},
|
|
55
|
+
})
|
|
56
|
+
|
|
57
|
+
router.on('navigate', () => headManager.forceUpdate())
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return () => {
|
|
61
|
+
if (component.value) {
|
|
62
|
+
component.value.inheritAttrs = !!component.value.inheritAttrs
|
|
63
|
+
|
|
64
|
+
const child = h(component.value, {
|
|
65
|
+
...page.value.props,
|
|
66
|
+
key: key.value,
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
if (layout.value) {
|
|
70
|
+
component.value.layout = layout.value
|
|
71
|
+
layout.value = null
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
if (component.value.layout) {
|
|
75
|
+
if (typeof component.value.layout === 'function') {
|
|
76
|
+
return component.value.layout(h, child)
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return (Array.isArray(component.value.layout) ? component.value.layout : [component.value.layout])
|
|
80
|
+
.concat(child)
|
|
81
|
+
.reverse()
|
|
82
|
+
.reduce((child, layout) => {
|
|
83
|
+
layout.inheritAttrs = !!layout.inheritAttrs
|
|
84
|
+
return h(layout, { ...page.value.props }, () => child)
|
|
85
|
+
})
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return child
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export const plugin = {
|
|
95
|
+
install(app) {
|
|
96
|
+
router.form = useForm
|
|
97
|
+
|
|
98
|
+
Object.defineProperty(app.config.globalProperties, '$inertia', { get: () => router })
|
|
99
|
+
Object.defineProperty(app.config.globalProperties, '$page', { get: () => page.value })
|
|
100
|
+
Object.defineProperty(app.config.globalProperties, '$headManager', { get: () => headManager })
|
|
101
|
+
|
|
102
|
+
app.mixin(remember)
|
|
103
|
+
},
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function usePage() {
|
|
107
|
+
return {
|
|
108
|
+
props: computed(() => page.value.props),
|
|
109
|
+
url: computed(() => page.value.url),
|
|
110
|
+
component: computed(() => page.value.component),
|
|
111
|
+
version: computed(() => page.value.version),
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export function defineLayout(component) {
|
|
116
|
+
layout.value = component
|
|
117
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { setupProgress } from '@inertiajs/core'
|
|
2
|
+
import { createSSRApp, h } from 'vue'
|
|
3
|
+
import App, { plugin } from './app'
|
|
4
|
+
|
|
5
|
+
export default async function createInertiaApp({ id = 'app', resolve, setup, title, progress = {}, page, render }) {
|
|
6
|
+
const isServer = typeof window === 'undefined'
|
|
7
|
+
const el = isServer ? null : document.getElementById(id)
|
|
8
|
+
const initialPage = page || JSON.parse(el.dataset.page)
|
|
9
|
+
const resolveComponent = (name) => Promise.resolve(resolve(name)).then((module) => module.default || module)
|
|
10
|
+
|
|
11
|
+
let head = []
|
|
12
|
+
|
|
13
|
+
const vueApp = await resolveComponent(initialPage.component).then((initialComponent) => {
|
|
14
|
+
return setup({
|
|
15
|
+
el,
|
|
16
|
+
App,
|
|
17
|
+
props: {
|
|
18
|
+
initialPage,
|
|
19
|
+
initialComponent,
|
|
20
|
+
resolveComponent,
|
|
21
|
+
titleCallback: title,
|
|
22
|
+
onHeadUpdate: isServer ? (elements) => (head = elements) : null,
|
|
23
|
+
},
|
|
24
|
+
plugin,
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
|
|
28
|
+
if (!isServer && progress) {
|
|
29
|
+
setupProgress(progress)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
if (isServer) {
|
|
33
|
+
const body = await render(
|
|
34
|
+
createSSRApp({
|
|
35
|
+
render: () =>
|
|
36
|
+
h('div', {
|
|
37
|
+
id,
|
|
38
|
+
'data-page': JSON.stringify(initialPage),
|
|
39
|
+
innerHTML: render(vueApp),
|
|
40
|
+
}),
|
|
41
|
+
}),
|
|
42
|
+
)
|
|
43
|
+
|
|
44
|
+
return { head, body }
|
|
45
|
+
}
|
|
46
|
+
}
|
package/src/head.js
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export default {
|
|
2
|
+
props: {
|
|
3
|
+
title: {
|
|
4
|
+
type: String,
|
|
5
|
+
required: false,
|
|
6
|
+
},
|
|
7
|
+
},
|
|
8
|
+
data() {
|
|
9
|
+
return {
|
|
10
|
+
provider: this.$headManager.createProvider(),
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
beforeUnmount() {
|
|
14
|
+
this.provider.disconnect()
|
|
15
|
+
},
|
|
16
|
+
methods: {
|
|
17
|
+
isUnaryTag(node) {
|
|
18
|
+
return (
|
|
19
|
+
[
|
|
20
|
+
'area',
|
|
21
|
+
'base',
|
|
22
|
+
'br',
|
|
23
|
+
'col',
|
|
24
|
+
'embed',
|
|
25
|
+
'hr',
|
|
26
|
+
'img',
|
|
27
|
+
'input',
|
|
28
|
+
'keygen',
|
|
29
|
+
'link',
|
|
30
|
+
'meta',
|
|
31
|
+
'param',
|
|
32
|
+
'source',
|
|
33
|
+
'track',
|
|
34
|
+
'wbr',
|
|
35
|
+
].indexOf(node.type) > -1
|
|
36
|
+
)
|
|
37
|
+
},
|
|
38
|
+
renderTagStart(node) {
|
|
39
|
+
node.props = node.props || {}
|
|
40
|
+
node.props.inertia = node.props['head-key'] !== undefined ? node.props['head-key'] : ''
|
|
41
|
+
const attrs = Object.keys(node.props).reduce((carry, name) => {
|
|
42
|
+
const value = node.props[name]
|
|
43
|
+
if (['key', 'head-key'].includes(name)) {
|
|
44
|
+
return carry
|
|
45
|
+
} else if (value === '') {
|
|
46
|
+
return carry + ` ${name}`
|
|
47
|
+
} else {
|
|
48
|
+
return carry + ` ${name}="${value}"`
|
|
49
|
+
}
|
|
50
|
+
}, '')
|
|
51
|
+
return `<${node.type}${attrs}>`
|
|
52
|
+
},
|
|
53
|
+
renderTagChildren(node) {
|
|
54
|
+
return typeof node.children === 'string'
|
|
55
|
+
? node.children
|
|
56
|
+
: node.children.reduce((html, child) => html + this.renderTag(child), '')
|
|
57
|
+
},
|
|
58
|
+
renderTag(node) {
|
|
59
|
+
if (node.type.toString() === 'Symbol(Text)') {
|
|
60
|
+
return node.children
|
|
61
|
+
} else if (node.type.toString() === 'Symbol()') {
|
|
62
|
+
return ''
|
|
63
|
+
} else if (node.type.toString() === 'Symbol(Comment)') {
|
|
64
|
+
return ''
|
|
65
|
+
}
|
|
66
|
+
let html = this.renderTagStart(node)
|
|
67
|
+
if (node.children) {
|
|
68
|
+
html += this.renderTagChildren(node)
|
|
69
|
+
}
|
|
70
|
+
if (!this.isUnaryTag(node)) {
|
|
71
|
+
html += `</${node.type}>`
|
|
72
|
+
}
|
|
73
|
+
return html
|
|
74
|
+
},
|
|
75
|
+
addTitleElement(elements) {
|
|
76
|
+
if (this.title && !elements.find((tag) => tag.startsWith('<title'))) {
|
|
77
|
+
elements.push(`<title inertia>${this.title}</title>`)
|
|
78
|
+
}
|
|
79
|
+
return elements
|
|
80
|
+
},
|
|
81
|
+
renderNodes(nodes) {
|
|
82
|
+
return this.addTitleElement(
|
|
83
|
+
nodes
|
|
84
|
+
.flatMap((node) => (node.type.toString() === 'Symbol(Fragment)' ? node.children : node))
|
|
85
|
+
.map((node) => this.renderTag(node))
|
|
86
|
+
.filter((node) => node),
|
|
87
|
+
)
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
render() {
|
|
91
|
+
this.provider.update(this.renderNodes(this.$slots.default ? this.$slots.default() : []))
|
|
92
|
+
},
|
|
93
|
+
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { router } from '@inertiajs/core'
|
|
2
|
+
export { defineLayout, usePage } from './app'
|
|
3
|
+
export { default as createInertiaApp } from './createInertiaApp'
|
|
4
|
+
export { default as Head } from './head'
|
|
5
|
+
export { default as Link } from './link'
|
|
6
|
+
export { default as useForm } from './useForm'
|
|
7
|
+
export { default as useRemember } from './useRemember'
|
package/src/link.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'
|
|
2
|
+
import { h } from 'vue'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
name: 'Link',
|
|
6
|
+
props: {
|
|
7
|
+
as: {
|
|
8
|
+
type: String,
|
|
9
|
+
default: 'a',
|
|
10
|
+
},
|
|
11
|
+
data: {
|
|
12
|
+
type: Object,
|
|
13
|
+
default: () => ({}),
|
|
14
|
+
},
|
|
15
|
+
href: {
|
|
16
|
+
type: String,
|
|
17
|
+
},
|
|
18
|
+
method: {
|
|
19
|
+
type: String,
|
|
20
|
+
default: 'get',
|
|
21
|
+
},
|
|
22
|
+
replace: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: false,
|
|
25
|
+
},
|
|
26
|
+
preserveScroll: {
|
|
27
|
+
type: Boolean,
|
|
28
|
+
default: false,
|
|
29
|
+
},
|
|
30
|
+
preserveState: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: null,
|
|
33
|
+
},
|
|
34
|
+
only: {
|
|
35
|
+
type: Array,
|
|
36
|
+
default: () => [],
|
|
37
|
+
},
|
|
38
|
+
headers: {
|
|
39
|
+
type: Object,
|
|
40
|
+
default: () => ({}),
|
|
41
|
+
},
|
|
42
|
+
queryStringArrayFormat: {
|
|
43
|
+
type: String,
|
|
44
|
+
default: 'brackets',
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
setup(props, { slots, attrs }) {
|
|
48
|
+
return (props) => {
|
|
49
|
+
const as = props.as.toLowerCase()
|
|
50
|
+
const method = props.method.toLowerCase()
|
|
51
|
+
const [href, data] = mergeDataIntoQueryString(method, props.href || '', props.data, props.queryStringArrayFormat)
|
|
52
|
+
|
|
53
|
+
if (as === 'a' && method !== 'get') {
|
|
54
|
+
console.warn(
|
|
55
|
+
`Creating POST/PUT/PATCH/DELETE <a> links is discouraged as it causes "Open Link in New Tab/Window" accessibility issues.\n\nPlease specify a more appropriate element using the "as" attribute. For example:\n\n<Link href="${href}" method="${method}" as="button">...</Link>`,
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
return h(
|
|
60
|
+
props.as,
|
|
61
|
+
{
|
|
62
|
+
...attrs,
|
|
63
|
+
...(as === 'a' ? { href } : {}),
|
|
64
|
+
onClick: (event) => {
|
|
65
|
+
if (shouldIntercept(event)) {
|
|
66
|
+
event.preventDefault()
|
|
67
|
+
|
|
68
|
+
router.visit(href, {
|
|
69
|
+
data: data,
|
|
70
|
+
method: method,
|
|
71
|
+
replace: props.replace,
|
|
72
|
+
preserveScroll: props.preserveScroll,
|
|
73
|
+
preserveState: props.preserveState ?? method !== 'get',
|
|
74
|
+
only: props.only,
|
|
75
|
+
headers: props.headers,
|
|
76
|
+
onCancelToken: attrs.onCancelToken || (() => ({})),
|
|
77
|
+
onBefore: attrs.onBefore || (() => ({})),
|
|
78
|
+
onStart: attrs.onStart || (() => ({})),
|
|
79
|
+
onProgress: attrs.onProgress || (() => ({})),
|
|
80
|
+
onFinish: attrs.onFinish || (() => ({})),
|
|
81
|
+
onCancel: attrs.onCancel || (() => ({})),
|
|
82
|
+
onSuccess: attrs.onSuccess || (() => ({})),
|
|
83
|
+
onError: attrs.onError || (() => ({})),
|
|
84
|
+
})
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
},
|
|
88
|
+
slots,
|
|
89
|
+
)
|
|
90
|
+
}
|
|
91
|
+
},
|
|
92
|
+
}
|
package/src/remember.js
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { router } from '@inertiajs/core'
|
|
2
|
+
import cloneDeep from 'lodash.clonedeep'
|
|
3
|
+
|
|
4
|
+
export default {
|
|
5
|
+
created() {
|
|
6
|
+
if (!this.$options.remember) {
|
|
7
|
+
return
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
if (Array.isArray(this.$options.remember)) {
|
|
11
|
+
this.$options.remember = { data: this.$options.remember }
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
if (typeof this.$options.remember === 'string') {
|
|
15
|
+
this.$options.remember = { data: [this.$options.remember] }
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
if (typeof this.$options.remember.data === 'string') {
|
|
19
|
+
this.$options.remember = { data: [this.$options.remember.data] }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const rememberKey =
|
|
23
|
+
this.$options.remember.key instanceof Function
|
|
24
|
+
? this.$options.remember.key.call(this)
|
|
25
|
+
: this.$options.remember.key
|
|
26
|
+
|
|
27
|
+
const restored = router.restore(rememberKey)
|
|
28
|
+
|
|
29
|
+
const rememberable = this.$options.remember.data.filter((key) => {
|
|
30
|
+
return !(this[key] !== null && typeof this[key] === 'object' && this[key].__rememberable === false)
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
const hasCallbacks = (key) => {
|
|
34
|
+
return (
|
|
35
|
+
this[key] !== null &&
|
|
36
|
+
typeof this[key] === 'object' &&
|
|
37
|
+
typeof this[key].__remember === 'function' &&
|
|
38
|
+
typeof this[key].__restore === 'function'
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
rememberable.forEach((key) => {
|
|
43
|
+
if (this[key] !== undefined && restored !== undefined && restored[key] !== undefined) {
|
|
44
|
+
hasCallbacks(key) ? this[key].__restore(restored[key]) : (this[key] = restored[key])
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
this.$watch(
|
|
48
|
+
key,
|
|
49
|
+
() => {
|
|
50
|
+
router.remember(
|
|
51
|
+
rememberable.reduce(
|
|
52
|
+
(data, key) => ({
|
|
53
|
+
...data,
|
|
54
|
+
[key]: cloneDeep(hasCallbacks(key) ? this[key].__remember() : this[key]),
|
|
55
|
+
}),
|
|
56
|
+
{},
|
|
57
|
+
),
|
|
58
|
+
rememberKey,
|
|
59
|
+
)
|
|
60
|
+
},
|
|
61
|
+
{ immediate: true, deep: true },
|
|
62
|
+
)
|
|
63
|
+
})
|
|
64
|
+
},
|
|
65
|
+
}
|
package/src/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as default } from '@inertiajs/core/server'
|
package/src/useForm.js
ADDED
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { router } from '@inertiajs/core'
|
|
2
|
+
import cloneDeep from 'lodash.clonedeep'
|
|
3
|
+
import isEqual from 'lodash.isequal'
|
|
4
|
+
import { reactive, watch } from 'vue'
|
|
5
|
+
|
|
6
|
+
export default function useForm(...args) {
|
|
7
|
+
const rememberKey = typeof args[0] === 'string' ? args[0] : null
|
|
8
|
+
const data = (typeof args[0] === 'string' ? args[1] : args[0]) || {}
|
|
9
|
+
const restored = rememberKey ? router.restore(rememberKey) : null
|
|
10
|
+
let defaults = cloneDeep(data)
|
|
11
|
+
let cancelToken = null
|
|
12
|
+
let recentlySuccessfulTimeoutId = null
|
|
13
|
+
let transform = (data) => data
|
|
14
|
+
|
|
15
|
+
let form = reactive({
|
|
16
|
+
...(restored ? restored.data : data),
|
|
17
|
+
isDirty: false,
|
|
18
|
+
errors: restored ? restored.errors : {},
|
|
19
|
+
hasErrors: false,
|
|
20
|
+
processing: false,
|
|
21
|
+
progress: null,
|
|
22
|
+
wasSuccessful: false,
|
|
23
|
+
recentlySuccessful: false,
|
|
24
|
+
data() {
|
|
25
|
+
return Object.keys(data).reduce((carry, key) => {
|
|
26
|
+
carry[key] = this[key]
|
|
27
|
+
return carry
|
|
28
|
+
}, {})
|
|
29
|
+
},
|
|
30
|
+
transform(callback) {
|
|
31
|
+
transform = callback
|
|
32
|
+
|
|
33
|
+
return this
|
|
34
|
+
},
|
|
35
|
+
defaults(key, value) {
|
|
36
|
+
if (typeof key === 'undefined') {
|
|
37
|
+
defaults = this.data()
|
|
38
|
+
} else {
|
|
39
|
+
defaults = Object.assign({}, cloneDeep(defaults), value ? { [key]: value } : key)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
return this
|
|
43
|
+
},
|
|
44
|
+
reset(...fields) {
|
|
45
|
+
let clonedDefaults = cloneDeep(defaults)
|
|
46
|
+
if (fields.length === 0) {
|
|
47
|
+
Object.assign(this, clonedDefaults)
|
|
48
|
+
} else {
|
|
49
|
+
Object.assign(
|
|
50
|
+
this,
|
|
51
|
+
Object.keys(clonedDefaults)
|
|
52
|
+
.filter((key) => fields.includes(key))
|
|
53
|
+
.reduce((carry, key) => {
|
|
54
|
+
carry[key] = clonedDefaults[key]
|
|
55
|
+
return carry
|
|
56
|
+
}, {}),
|
|
57
|
+
)
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return this
|
|
61
|
+
},
|
|
62
|
+
setError(key, value) {
|
|
63
|
+
Object.assign(this.errors, value ? { [key]: value } : key)
|
|
64
|
+
|
|
65
|
+
this.hasErrors = Object.keys(this.errors).length > 0
|
|
66
|
+
|
|
67
|
+
return this
|
|
68
|
+
},
|
|
69
|
+
clearErrors(...fields) {
|
|
70
|
+
this.errors = Object.keys(this.errors).reduce(
|
|
71
|
+
(carry, field) => ({
|
|
72
|
+
...carry,
|
|
73
|
+
...(fields.length > 0 && !fields.includes(field) ? { [field]: this.errors[field] } : {}),
|
|
74
|
+
}),
|
|
75
|
+
{},
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
this.hasErrors = Object.keys(this.errors).length > 0
|
|
79
|
+
|
|
80
|
+
return this
|
|
81
|
+
},
|
|
82
|
+
submit(method, url, options = {}) {
|
|
83
|
+
const data = transform(this.data())
|
|
84
|
+
const _options = {
|
|
85
|
+
...options,
|
|
86
|
+
onCancelToken: (token) => {
|
|
87
|
+
cancelToken = token
|
|
88
|
+
|
|
89
|
+
if (options.onCancelToken) {
|
|
90
|
+
return options.onCancelToken(token)
|
|
91
|
+
}
|
|
92
|
+
},
|
|
93
|
+
onBefore: (visit) => {
|
|
94
|
+
this.wasSuccessful = false
|
|
95
|
+
this.recentlySuccessful = false
|
|
96
|
+
clearTimeout(recentlySuccessfulTimeoutId)
|
|
97
|
+
|
|
98
|
+
if (options.onBefore) {
|
|
99
|
+
return options.onBefore(visit)
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
onStart: (visit) => {
|
|
103
|
+
this.processing = true
|
|
104
|
+
|
|
105
|
+
if (options.onStart) {
|
|
106
|
+
return options.onStart(visit)
|
|
107
|
+
}
|
|
108
|
+
},
|
|
109
|
+
onProgress: (event) => {
|
|
110
|
+
this.progress = event
|
|
111
|
+
|
|
112
|
+
if (options.onProgress) {
|
|
113
|
+
return options.onProgress(event)
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
onSuccess: async (page) => {
|
|
117
|
+
this.processing = false
|
|
118
|
+
this.progress = null
|
|
119
|
+
this.clearErrors()
|
|
120
|
+
this.wasSuccessful = true
|
|
121
|
+
this.recentlySuccessful = true
|
|
122
|
+
recentlySuccessfulTimeoutId = setTimeout(() => (this.recentlySuccessful = false), 2000)
|
|
123
|
+
|
|
124
|
+
const onSuccess = options.onSuccess ? await options.onSuccess(page) : null
|
|
125
|
+
defaults = cloneDeep(this.data())
|
|
126
|
+
this.isDirty = false
|
|
127
|
+
return onSuccess
|
|
128
|
+
},
|
|
129
|
+
onError: (errors) => {
|
|
130
|
+
this.processing = false
|
|
131
|
+
this.progress = null
|
|
132
|
+
this.clearErrors().setError(errors)
|
|
133
|
+
|
|
134
|
+
if (options.onError) {
|
|
135
|
+
return options.onError(errors)
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
onCancel: () => {
|
|
139
|
+
this.processing = false
|
|
140
|
+
this.progress = null
|
|
141
|
+
|
|
142
|
+
if (options.onCancel) {
|
|
143
|
+
return options.onCancel()
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
onFinish: () => {
|
|
147
|
+
this.processing = false
|
|
148
|
+
this.progress = null
|
|
149
|
+
cancelToken = null
|
|
150
|
+
|
|
151
|
+
if (options.onFinish) {
|
|
152
|
+
return options.onFinish()
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
if (method === 'delete') {
|
|
158
|
+
router.delete(url, { ..._options, data })
|
|
159
|
+
} else {
|
|
160
|
+
router[method](url, data, _options)
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
get(url, options) {
|
|
164
|
+
this.submit('get', url, options)
|
|
165
|
+
},
|
|
166
|
+
post(url, options) {
|
|
167
|
+
this.submit('post', url, options)
|
|
168
|
+
},
|
|
169
|
+
put(url, options) {
|
|
170
|
+
this.submit('put', url, options)
|
|
171
|
+
},
|
|
172
|
+
patch(url, options) {
|
|
173
|
+
this.submit('patch', url, options)
|
|
174
|
+
},
|
|
175
|
+
delete(url, options) {
|
|
176
|
+
this.submit('delete', url, options)
|
|
177
|
+
},
|
|
178
|
+
cancel() {
|
|
179
|
+
if (cancelToken) {
|
|
180
|
+
cancelToken.cancel()
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
__rememberable: rememberKey === null,
|
|
184
|
+
__remember() {
|
|
185
|
+
return { data: this.data(), errors: this.errors }
|
|
186
|
+
},
|
|
187
|
+
__restore(restored) {
|
|
188
|
+
Object.assign(this, restored.data)
|
|
189
|
+
this.setError(restored.errors)
|
|
190
|
+
},
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
watch(
|
|
194
|
+
form,
|
|
195
|
+
(newValue) => {
|
|
196
|
+
form.isDirty = !isEqual(form.data(), defaults)
|
|
197
|
+
if (rememberKey) {
|
|
198
|
+
router.remember(cloneDeep(newValue.__remember()), rememberKey)
|
|
199
|
+
}
|
|
200
|
+
},
|
|
201
|
+
{ immediate: true, deep: true },
|
|
202
|
+
)
|
|
203
|
+
|
|
204
|
+
return form
|
|
205
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { router } from '@inertiajs/core'
|
|
2
|
+
import cloneDeep from 'lodash.clonedeep'
|
|
3
|
+
import { isReactive, reactive, ref, watch } from 'vue'
|
|
4
|
+
|
|
5
|
+
export default function useRemember(data, key) {
|
|
6
|
+
if (typeof data === 'object' && data !== null && data.__rememberable === false) {
|
|
7
|
+
return data
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const restored = router.restore(key)
|
|
11
|
+
const type = isReactive(data) ? reactive : ref
|
|
12
|
+
const hasCallbacks = typeof data.__remember === 'function' && typeof data.__restore === 'function'
|
|
13
|
+
const remembered = restored === undefined ? data : type(hasCallbacks ? data.__restore(restored) : restored)
|
|
14
|
+
|
|
15
|
+
watch(
|
|
16
|
+
remembered,
|
|
17
|
+
(newValue) => {
|
|
18
|
+
router.remember(cloneDeep(hasCallbacks ? data.__remember() : newValue), key)
|
|
19
|
+
},
|
|
20
|
+
{ immediate: true, deep: true },
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
return remembered
|
|
24
|
+
}
|