Skip to content

Commit 8342fcd

Browse files
committed
fix for remember, for now
1 parent 2ebe81c commit 8342fcd

File tree

3 files changed

+33
-18
lines changed

3 files changed

+33
-18
lines changed

packages/core/src/page.ts

+25-7
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class CurrentPage {
1313
event: PageEvent
1414
callback: VoidFunction
1515
}[] = []
16-
protected firstPageLoad = true
16+
protected isFirstPageLoad = true
1717

1818
public init({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {
1919
this.page = initialPage
@@ -48,23 +48,23 @@ class CurrentPage {
4848
page.scrollRegions ??= []
4949
page.rememberedState ??= {}
5050
replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), window.location)
51+
// This is where the actual URL change happens
52+
// TODO: When we are remembering the state, "back" doesn't update the URL... why
5153
replace ? History.replaceState(page) : History.pushState(page)
5254

5355
const isNewComponent = !this.isTheSame(page)
5456

5557
this.page = page
5658

5759
if (isNewComponent) {
58-
this.listeners
59-
.filter((listener) => listener.event === 'newComponent')
60-
.forEach((listener) => listener.callback())
60+
this.fireEventsFor('newComponent')
6161
}
6262

63-
if (this.firstPageLoad) {
64-
this.listeners.filter((listener) => listener.event === 'firstLoad').forEach((listener) => listener.callback())
63+
if (this.isFirstPageLoad) {
64+
this.fireEventsFor('firstLoad')
6565
}
6666

67-
this.firstPageLoad = false
67+
this.isFirstPageLoad = false
6868

6969
return this.swap({ component, page, preserveState }).then(() => {
7070
if (!preserveScroll) {
@@ -78,6 +78,20 @@ class CurrentPage {
7878
})
7979
}
8080

81+
public setQuietly(
82+
page: Page,
83+
{
84+
preserveState = false,
85+
}: {
86+
preserveState?: PreserveStateOption
87+
} = {},
88+
) {
89+
return this.resolve(page.component).then((component) => {
90+
this.page = page
91+
return this.swap({ component, page, preserveState })
92+
})
93+
}
94+
8195
public get(): Page {
8296
return this.page
8397
}
@@ -125,6 +139,10 @@ class CurrentPage {
125139
this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback)
126140
}
127141
}
142+
143+
public fireEventsFor(event: PageEvent): void {
144+
this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())
145+
}
128146
}
129147

130148
export const page = new CurrentPage()

packages/core/src/response.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import modal from './modal'
55
import { page as currentPage } from './page'
66
import { RequestParams } from './requestParams'
77
import { SessionStorage } from './sessionStorage'
8-
import { ErrorBag, Errors, LocationVisit, Page } from './types'
8+
import { ErrorBag, Errors, Page } from './types'
99
import { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'
1010

1111
export class Response {
@@ -47,7 +47,7 @@ export class Response {
4747

4848
setHashIfSameUrl(this.requestParams.params.url, locationUrl)
4949

50-
return this.locationVisit(locationUrl, this.requestParams.params.preserveScroll === true)
50+
return this.locationVisit(locationUrl)
5151
}
5252

5353
if (fireInvalidEvent(this.response)) {
@@ -78,9 +78,9 @@ export class Response {
7878
/**
7979
* @link https://inertiajs.com/redirects#external-redirects
8080
*/
81-
protected locationVisit(url: URL, preserveScroll: LocationVisit['preserveScroll']): boolean | void {
81+
protected locationVisit(url: URL): boolean | void {
8282
try {
83-
SessionStorage.set({ preserveScroll })
83+
SessionStorage.set({ preserveScroll: this.requestParams.params.preserveScroll === true })
8484

8585
if (isSameUrlWithoutHash(window.location, url)) {
8686
window.location.reload()

packages/core/src/router.ts

+4-7
Original file line numberDiff line numberDiff line change
@@ -337,12 +337,9 @@ export class Router {
337337
return
338338
}
339339

340-
currentPage
341-
.resolve(page.component)
342-
.then((component) => currentPage.swap({ component, page, preserveState: false }))
343-
.then(() => {
344-
Scroll.restore(page)
345-
fireNavigateEvent(page)
346-
})
340+
currentPage.setQuietly(page, { preserveState: false }).then(() => {
341+
Scroll.restore(currentPage.get())
342+
fireNavigateEvent(currentPage.get())
343+
})
347344
}
348345
}

0 commit comments

Comments
 (0)