@inertiajs/svelte 1.0.0-beta.2 → 1.0.0-beta.5
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/package.json +6 -2
- package/src/App.svelte +0 -15
- package/src/Link.svelte +51 -41
- package/src/Render.svelte +1 -1
- package/src/SSR.svelte +8 -0
- package/src/createInertiaApp.js +33 -11
- package/src/link.js +28 -22
- package/src/server.js +1 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inertiajs/svelte",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
3
|
+
"version": "1.0.0-beta.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "The Svelte adapter for Inertia.js",
|
|
6
6
|
"contributors": [
|
|
@@ -19,12 +19,16 @@
|
|
|
19
19
|
"keywords": [
|
|
20
20
|
"svelte"
|
|
21
21
|
],
|
|
22
|
+
"exports": {
|
|
23
|
+
".": "./src/index.js",
|
|
24
|
+
"./server": "./src/server.js"
|
|
25
|
+
},
|
|
22
26
|
"main": "src/index.js",
|
|
23
27
|
"peerDependencies": {
|
|
24
28
|
"svelte": "^3.20.0"
|
|
25
29
|
},
|
|
26
30
|
"dependencies": {
|
|
27
|
-
"@inertiajs/core": "1.0.0-beta.
|
|
31
|
+
"@inertiajs/core": "1.0.0-beta.5",
|
|
28
32
|
"lodash.isequal": "^4.5.0"
|
|
29
33
|
}
|
|
30
34
|
}
|
package/src/App.svelte
CHANGED
|
@@ -1,22 +1,7 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { router } from '@inertiajs/core'
|
|
3
2
|
import Render, { h } from './Render.svelte'
|
|
4
3
|
import store from './store'
|
|
5
4
|
|
|
6
|
-
export let initialPage, resolveComponent
|
|
7
|
-
|
|
8
|
-
router.init({
|
|
9
|
-
initialPage,
|
|
10
|
-
resolveComponent,
|
|
11
|
-
swapComponent: async ({ component, page, preserveState }) => {
|
|
12
|
-
store.update((current) => ({
|
|
13
|
-
component,
|
|
14
|
-
page,
|
|
15
|
-
key: preserveState ? current.key : Date.now()
|
|
16
|
-
}))
|
|
17
|
-
}
|
|
18
|
-
})
|
|
19
|
-
|
|
20
5
|
$: child = $store.component && h($store.component.default, $store.page.props)
|
|
21
6
|
$: layout = $store.component && $store.component.layout
|
|
22
7
|
$: components = layout
|
package/src/Link.svelte
CHANGED
|
@@ -1,49 +1,59 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export let
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
headers = {}
|
|
2
|
+
import { beforeUpdate } from 'svelte'
|
|
3
|
+
import { default as inertia } from './link'
|
|
4
|
+
|
|
5
|
+
export let href
|
|
6
|
+
export let as = 'a'
|
|
7
|
+
export let data = {}
|
|
8
|
+
export let method = 'get'
|
|
9
|
+
export let replace = false
|
|
10
|
+
export let preserveScroll = false
|
|
11
|
+
export let preserveState = null
|
|
12
|
+
export let only = []
|
|
13
|
+
export let headers = {}
|
|
14
|
+
export let queryStringArrayFormat = 'brackets'
|
|
16
15
|
|
|
17
16
|
beforeUpdate(() => {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (method !== 'get') {
|
|
24
|
-
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 "inertia" directive. For example:\n\n<button use:inertia={{ method: 'post', href: '${href}' }}>...</button>`)
|
|
17
|
+
if (as === 'a' && method.toLowerCase() !== 'get') {
|
|
18
|
+
console.warn(
|
|
19
|
+
`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>`,
|
|
20
|
+
)
|
|
25
21
|
}
|
|
26
22
|
})
|
|
27
|
-
|
|
28
|
-
function visit(event) {
|
|
29
|
-
dispatch('click', event)
|
|
30
|
-
|
|
31
|
-
if (shouldIntercept(event)) {
|
|
32
|
-
event.preventDefault()
|
|
33
|
-
|
|
34
|
-
router.visit(href, {
|
|
35
|
-
data,
|
|
36
|
-
method,
|
|
37
|
-
preserveScroll,
|
|
38
|
-
preserveState: preserveState !== null ? preserveState : (method !== 'get'),
|
|
39
|
-
replace,
|
|
40
|
-
only,
|
|
41
|
-
headers,
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
23
|
</script>
|
|
46
24
|
|
|
47
|
-
<
|
|
25
|
+
<svelte:element
|
|
26
|
+
this={as}
|
|
27
|
+
use:inertia={{
|
|
28
|
+
...(as !== 'a' ? { href } : {}),
|
|
29
|
+
data,
|
|
30
|
+
method,
|
|
31
|
+
replace,
|
|
32
|
+
preserveScroll,
|
|
33
|
+
preserveState: preserveState ?? method !== 'get',
|
|
34
|
+
only,
|
|
35
|
+
headers,
|
|
36
|
+
queryStringArrayFormat,
|
|
37
|
+
}}
|
|
38
|
+
{...as === 'a' ? { href } : {}}
|
|
39
|
+
{...$$restProps}
|
|
40
|
+
on:focus
|
|
41
|
+
on:blur
|
|
42
|
+
on:click
|
|
43
|
+
on:dblclick
|
|
44
|
+
on:mousedown
|
|
45
|
+
on:mousemove
|
|
46
|
+
on:mouseout
|
|
47
|
+
on:mouseover
|
|
48
|
+
on:mouseup
|
|
49
|
+
on:cancel-token
|
|
50
|
+
on:before
|
|
51
|
+
on:start
|
|
52
|
+
on:progress
|
|
53
|
+
on:finish
|
|
54
|
+
on:cancel
|
|
55
|
+
on:success
|
|
56
|
+
on:error
|
|
57
|
+
>
|
|
48
58
|
<slot />
|
|
49
|
-
</
|
|
59
|
+
</svelte:element>
|
package/src/Render.svelte
CHANGED
package/src/SSR.svelte
ADDED
package/src/createInertiaApp.js
CHANGED
|
@@ -1,32 +1,54 @@
|
|
|
1
|
-
import { setupProgress } from '@inertiajs/core'
|
|
1
|
+
import { router, setupProgress } from '@inertiajs/core'
|
|
2
2
|
import App from './App.svelte'
|
|
3
|
+
import SSR from './SSR.svelte'
|
|
4
|
+
import store from './store'
|
|
3
5
|
|
|
4
|
-
export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page
|
|
6
|
+
export default async function createInertiaApp({ id = 'app', resolve, setup, progress = {}, page }) {
|
|
5
7
|
const isServer = typeof window === 'undefined'
|
|
6
8
|
const el = isServer ? null : document.getElementById(id)
|
|
7
9
|
const initialPage = page || JSON.parse(el.dataset.page)
|
|
8
10
|
const resolveComponent = (name) => Promise.resolve(resolve(name))
|
|
9
11
|
|
|
10
|
-
|
|
12
|
+
await resolveComponent(initialPage.component).then((initialComponent) => {
|
|
13
|
+
store.set({
|
|
14
|
+
component: initialComponent,
|
|
15
|
+
page: initialPage,
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
if (!isServer) {
|
|
20
|
+
router.init({
|
|
21
|
+
initialPage,
|
|
22
|
+
resolveComponent,
|
|
23
|
+
swapComponent: async ({ component, page, preserveState }) => {
|
|
24
|
+
store.update((current) => ({
|
|
25
|
+
component,
|
|
26
|
+
page,
|
|
27
|
+
key: preserveState ? current.key : Date.now(),
|
|
28
|
+
}))
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
if (progress) {
|
|
33
|
+
setupProgress(progress)
|
|
34
|
+
}
|
|
11
35
|
|
|
12
|
-
const svelteApp = await resolveComponent(initialPage.component).then((initialComponent) => {
|
|
13
36
|
return setup({
|
|
14
37
|
el,
|
|
15
38
|
App,
|
|
16
39
|
props: {
|
|
17
40
|
initialPage,
|
|
18
|
-
initialComponent,
|
|
19
41
|
resolveComponent,
|
|
20
|
-
onHeadUpdate: isServer ? (elements) => (head = elements) : null,
|
|
21
42
|
},
|
|
22
43
|
})
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
if (!isServer && progress) {
|
|
26
|
-
setupProgress(progress)
|
|
27
44
|
}
|
|
28
45
|
|
|
29
46
|
if (isServer) {
|
|
30
|
-
|
|
47
|
+
const { html, head } = SSR.render({ id, initialPage })
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
body: html,
|
|
51
|
+
head: [head],
|
|
52
|
+
}
|
|
31
53
|
}
|
|
32
54
|
}
|
package/src/link.js
CHANGED
|
@@ -1,30 +1,42 @@
|
|
|
1
1
|
import { mergeDataIntoQueryString, router, shouldIntercept } from '@inertiajs/core'
|
|
2
|
-
import { createEventDispatcher } from 'svelte'
|
|
3
2
|
|
|
4
3
|
export default (node, options = {}) => {
|
|
5
|
-
const [href, data] =
|
|
6
|
-
options.method || 'get',
|
|
7
|
-
node.href || options.href || '',
|
|
8
|
-
options.data || {},
|
|
9
|
-
options.queryStringArrayFormat || 'brackets',
|
|
10
|
-
)
|
|
4
|
+
const [href, data] = hrefAndData(options)
|
|
11
5
|
node.href = href
|
|
12
6
|
options.data = data
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
dispatch('click', event)
|
|
8
|
+
function fireEvent(name, eventOptions = {}) {
|
|
9
|
+
return node.dispatchEvent(new CustomEvent(name, eventOptions))
|
|
10
|
+
}
|
|
18
11
|
|
|
19
|
-
|
|
12
|
+
function hrefAndData(options) {
|
|
13
|
+
return mergeDataIntoQueryString(
|
|
14
|
+
options.method || 'get',
|
|
15
|
+
node.href || options.href || '',
|
|
16
|
+
options.data || {},
|
|
17
|
+
options.queryStringArrayFormat || 'brackets',
|
|
18
|
+
)
|
|
19
|
+
}
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
function visit(event) {
|
|
22
|
+
if (!node.href) {
|
|
22
23
|
throw new Error('Option "href" is required')
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
if (shouldIntercept(event)) {
|
|
26
27
|
event.preventDefault()
|
|
27
|
-
|
|
28
|
+
|
|
29
|
+
router.visit(node.href, {
|
|
30
|
+
onCancelToken: () => fireEvent('cancel-token'),
|
|
31
|
+
onBefore: (visit) => fireEvent('before', { detail: { visit } }),
|
|
32
|
+
onStart: (visit) => fireEvent('start', { detail: { visit } }),
|
|
33
|
+
onProgress: (progress) => fireEvent('progress', { detail: { progress } }),
|
|
34
|
+
onFinish: (visit) => fireEvent('finish', { detail: { visit } }),
|
|
35
|
+
onCancel: () => fireEvent('cancel'),
|
|
36
|
+
onSuccess: (page) => fireEvent('success', { detail: { page } }),
|
|
37
|
+
onError: (errors) => fireEvent('error', { detail: { errors } }),
|
|
38
|
+
...options,
|
|
39
|
+
})
|
|
28
40
|
}
|
|
29
41
|
}
|
|
30
42
|
|
|
@@ -32,15 +44,9 @@ export default (node, options = {}) => {
|
|
|
32
44
|
|
|
33
45
|
return {
|
|
34
46
|
update(newOptions) {
|
|
35
|
-
const [href, data] =
|
|
36
|
-
newOptions.method || 'get',
|
|
37
|
-
node.href || newOptions.href,
|
|
38
|
-
newOptions.data || {},
|
|
39
|
-
newOptions.queryStringArrayFormat || 'brackets',
|
|
40
|
-
)
|
|
47
|
+
const [href, data] = hrefAndData(newOptions)
|
|
41
48
|
node.href = href
|
|
42
|
-
|
|
43
|
-
options = newOptions
|
|
49
|
+
options = { ...newOptions, data }
|
|
44
50
|
},
|
|
45
51
|
destroy() {
|
|
46
52
|
node.removeEventListener('click', visit)
|
package/src/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as default } from '@inertiajs/core/server'
|