Skip to content

Commit af12ae8

Browse files
committed
Merge branch 'async-requests-svelte'
2 parents def0c5e + cbf2ee5 commit af12ae8

37 files changed

+138
-74
lines changed

.prettierignore

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,8 @@
11
.github/
2+
**/.svelte-kit
3+
**/bootstrap/ssr
4+
**/composer.json
5+
**/composer.lock
6+
**/dist
7+
**/public/build
8+
**/vendor

packages/svelte/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
"!dist/**/*.spec.*"
4141
],
4242
"peerDependencies": {
43-
"svelte": "^3.20.0 || ^4.0.0 || ^5.0.0 || ^5.0.0-next.244"
43+
"svelte": "^4.0.0 || ^5.0.0 || ^5.0.0-next.244"
4444
},
4545
"dependencies": {
4646
"@inertiajs/core": "1.2.0",

packages/svelte/src/components/Link.svelte

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,11 @@
2424
export let cacheFor: CacheForOption | CacheForOption[] = 0
2525
2626
$: asProp = method !== 'get' ? 'button' : as.toLowerCase()
27-
$: elProps = {
28-
a: { href },
29-
button: { type: 'button' },
30-
}[asProp] || {}
27+
$: elProps =
28+
{
29+
a: { href },
30+
button: { type: 'button' },
31+
}[asProp] || {}
3132
</script>
3233

3334
<!-- svelte-ignore a11y-no-static-element-interactions -->

packages/svelte/src/components/WhenVisible.svelte

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
export let params: ReloadOptions = {}
77
export let buffer: number = 0
88
export let elementTag: keyof HTMLElementTagNameMap = 'div'
9-
export let once: boolean = true
9+
export let always: boolean = false
1010
1111
let loaded = false
1212
let fetching = false
@@ -24,7 +24,7 @@
2424
return
2525
}
2626
27-
if (once) {
27+
if (!always) {
2828
observer?.disconnect()
2929
}
3030
@@ -76,7 +76,7 @@
7676
}
7777
</script>
7878

79-
{#if !once || !loaded}
79+
{#if always || !loaded}
8080
<svelte:element this={elementTag} bind:this={el} />
8181
{/if}
8282

packages/svelte/src/createInertiaApp.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ type AppComponent = ComponentType<App> & { render: () => SvelteRenderResult }
1212
interface CreateInertiaAppProps {
1313
id?: string
1414
resolve: ComponentResolver
15-
setup: (props: {
15+
setup?: (props: {
1616
el: Element
1717
App: ComponentType<App>
1818
props: {

packages/svelte/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ export { default as WhenVisible } from './components/WhenVisible.svelte'
55
export { default as createInertiaApp } from './createInertiaApp'
66
export { default as inertia } from './link'
77
export { default as page } from './page'
8-
export { default as remember } from './remember'
98
export { type ResolvedComponent } from './types'
109
export { default as useForm, type InertiaForm, type InertiaFormProps } from './useForm'
1110
export { default as usePoll } from './usePoll'
1211
export { default as usePrefetch } from './usePrefetch'
12+
export { default as useRemember } from './useRemember'

packages/svelte/src/usePrefetch.ts

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,33 @@
11
import { router, type VisitOptions } from '@inertiajs/core'
22
import { onDestroy, onMount } from 'svelte'
3-
import { writable, type Readable } from 'svelte/store'
3+
import { readonly, writable } from 'svelte/store'
44

5-
interface InertiaPrefetch {
6-
isPrefetched: boolean
7-
isPrefetching: boolean
8-
lastUpdatedAt: number | null
9-
flush: () => void
10-
}
11-
12-
export default function usePrefetch(options: VisitOptions = {}): Readable<InertiaPrefetch> {
13-
const { subscribe, update } = writable<InertiaPrefetch>({
14-
isPrefetched: false,
15-
isPrefetching: false,
16-
lastUpdatedAt: null,
17-
flush() {
18-
router.flush(window.location.pathname, options)
19-
},
20-
})
5+
export default function usePrefetch(options: VisitOptions = {}) {
6+
const isPrefetched = writable(false)
7+
const isPrefetching = writable(false)
8+
const lastUpdatedAt = writable<number | null>(null)
219

2210
const cached = router.getCached(window.location.pathname, options)
2311
const inFlight = router.getPrefetching(window.location.pathname, options)
2412

25-
update((state) => ({
26-
...state,
27-
isPrefetched: cached !== null,
28-
isPrefetching: inFlight !== null,
29-
lastUpdatedAt: cached?.staleTimestamp || null,
30-
}))
13+
isPrefetched.set(cached !== null)
14+
isPrefetching.set(inFlight !== null)
15+
lastUpdatedAt.set(cached?.staleTimestamp || null)
3116

3217
let removePrefetchedListener: () => void
3318
let removePrefetchingListener: () => void
3419

3520
onMount(() => {
3621
removePrefetchingListener = router.on('prefetching', ({ detail }) => {
3722
if (detail.visit.url.pathname === window.location.pathname) {
38-
update((state) => ({ ...state, isPrefetching: true }))
23+
isPrefetching.set(true)
3924
}
4025
})
4126

4227
removePrefetchedListener = router.on('prefetched', ({ detail }) => {
4328
if (detail.visit.url.pathname === window.location.pathname) {
44-
update((state) => ({ ...state, isPrefetched: true, isPrefetching: false }))
29+
isPrefetched.set(true)
30+
isPrefetching.set(false)
4531
}
4632
})
4733
})
@@ -51,5 +37,12 @@ export default function usePrefetch(options: VisitOptions = {}): Readable<Inerti
5137
removePrefetchingListener()
5238
})
5339

54-
return { subscribe }
40+
return {
41+
isPrefetched: readonly(isPrefetched),
42+
isPrefetching: readonly(isPrefetching),
43+
lastUpdatedAt: readonly(lastUpdatedAt),
44+
flush() {
45+
router.flush(window.location.pathname, options)
46+
},
47+
}
5548
}

packages/svelte/src/remember.ts renamed to packages/svelte/src/useRemember.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { router } from '@inertiajs/core'
22
import { onDestroy } from 'svelte'
33
import { writable } from 'svelte/store'
44

5-
function useRemember<State>(initialState: State, key?: string) {
5+
export default function useRemember<State>(initialState: State, key?: string) {
66
const restored = router.restore(key) as State | undefined
77
const store = writable(restored !== undefined ? restored : initialState)
88
const unsubscribe = store.subscribe((state) => router.remember(state, key))
@@ -11,5 +11,3 @@ function useRemember<State>(initialState: State, key?: string) {
1111

1212
return store
1313
}
14-
15-
export default useRemember

packages/svelte/test-app/Pages/Remember/Components/ComponentA.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script>
2-
import { remember } from '@inertiajs/svelte'
2+
import { useRemember } from '@inertiajs/svelte'
33
44
let untracked = ''
55
6-
const data = remember(
6+
const data = useRemember(
77
{
88
name: '',
99
remember: false,

packages/svelte/test-app/Pages/Remember/Components/ComponentB.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
<script>
2-
import { remember } from '@inertiajs/svelte'
2+
import { useRemember } from '@inertiajs/svelte'
33
44
let untracked = ''
55
6-
const data = remember(
6+
const data = useRemember(
77
{
88
name: '',
99
remember: false,

0 commit comments

Comments
 (0)