Skip to content

Commit 815a7e9

Browse files
committed
refactor
1 parent c5d608c commit 815a7e9

File tree

3 files changed

+23
-58
lines changed

3 files changed

+23
-58
lines changed

packages/core/src/page.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class CurrentPage {
8787
this.page = page
8888
this.cleared = false
8989

90-
prefetchedRequests.updateCachedResponsesWithOnceProps()
90+
prefetchedRequests.syncCachedOnceProps()
9191

9292
if (isNewComponent) {
9393
this.fireEventsFor('newComponent')
@@ -219,6 +219,23 @@ class CurrentPage {
219219
public fireEventsFor(event: PageEvent): void {
220220
this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())
221221
}
222+
223+
public passOncePropsTo(toPage: Page, { overwrite = false }: { overwrite?: boolean } = {}): void {
224+
const onceProps = toPage.onceProps ?? {}
225+
226+
Object.entries(onceProps).forEach(([key, onceProp]) => {
227+
const existingOnceProp = this.page.onceProps?.[key]
228+
229+
if (existingOnceProp === undefined) {
230+
return
231+
}
232+
233+
if (overwrite || toPage.props[onceProp.prop] === undefined) {
234+
toPage.props[onceProp.prop] = this.page.props[existingOnceProp.prop]
235+
toPage.onceProps![key].expiresAt = existingOnceProp.expiresAt
236+
}
237+
})
238+
}
222239
}
223240

224241
export const page = new CurrentPage()

packages/core/src/prefetched.ts

Lines changed: 4 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class PrefetchedRequests {
6868
}).then((response) => {
6969
this.remove(params)
7070

71-
this.preserveOncePropsInResponse(response)
71+
currentPage.passOncePropsTo(response.getPageResponse())
7272

7373
this.cached.push({
7474
params: { ...params },
@@ -264,27 +264,14 @@ class PrefetchedRequests {
264264
)
265265
}
266266

267-
public updateCachedResponsesWithOnceProps(): void {
268-
const current = currentPage.get()
269-
270-
if (Object.keys(current.onceProps ?? {}).length === 0) {
267+
public syncCachedOnceProps(): void {
268+
if (Object.keys(currentPage.get().onceProps ?? {}).length === 0) {
271269
return
272270
}
273271

274272
this.cached.forEach((prefetched) => {
275273
prefetched.response.then((response) => {
276-
const page = response.getPageResponse()
277-
278-
Object.entries(page.onceProps ?? {}).forEach(([key, onceProp]) => {
279-
const existingOnceProp = current.onceProps?.[key]
280-
281-
if (existingOnceProp === undefined) {
282-
return
283-
}
284-
285-
page.props[onceProp.prop] = current.props[existingOnceProp.prop]
286-
page.onceProps![key].expiresAt = existingOnceProp.expiresAt
287-
})
274+
currentPage.passOncePropsTo(response.getPageResponse(), { overwrite: true })
288275

289276
const oncePropsExpiresIn = this.getOncePropsExpiresIn(response)
290277

@@ -302,24 +289,6 @@ class PrefetchedRequests {
302289
})
303290
}
304291

305-
protected preserveOncePropsInResponse(response: Response): void {
306-
const current = currentPage.get()
307-
const page = response.getPageResponse()
308-
309-
Object.entries(page.onceProps ?? {}).forEach(([key, onceProp]) => {
310-
const existingOnceProp = current.onceProps?.[key]
311-
312-
if (existingOnceProp === undefined) {
313-
return
314-
}
315-
316-
if (page.props[onceProp.prop] === undefined) {
317-
page.props[onceProp.prop] = current.props[existingOnceProp.prop]
318-
page.onceProps![key].expiresAt = existingOnceProp.expiresAt
319-
}
320-
})
321-
}
322-
323292
protected getOncePropsExpiresIn(response: Response): number | null {
324293
const page = response.getPageResponse()
325294
const expiryTimes = Object.values(page.onceProps ?? {})

packages/core/src/response.ts

Lines changed: 1 addition & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ export class Response {
169169
}
170170

171171
this.mergeProps(pageResponse)
172-
this.preserveOnceProps(pageResponse)
172+
currentPage.passOncePropsTo(pageResponse)
173173
this.preserveEqualProps(pageResponse)
174174

175175
await this.setRememberedState(pageResponse)
@@ -235,27 +235,6 @@ export class Response {
235235
return responseUrl.pathname + responseUrl.search + responseUrl.hash
236236
}
237237

238-
protected preserveOnceProps(pageResponse: Page): void {
239-
const onceProps = pageResponse.onceProps || {}
240-
241-
Object.entries(onceProps).forEach(([key, onceProp]) => {
242-
// Check if the current page has the same onceProp key
243-
const existingOnceProp = currentPage.get().onceProps?.[key]
244-
245-
if (existingOnceProp === undefined) {
246-
return
247-
}
248-
249-
const currentValue = currentPage.get().props[existingOnceProp.prop]
250-
251-
if (pageResponse.props[onceProp.prop] === undefined) {
252-
// Only preserve if no new value was provided for this prop
253-
pageResponse.props[onceProp.prop] = currentValue
254-
onceProps[key].expiresAt = existingOnceProp.expiresAt
255-
}
256-
})
257-
}
258-
259238
protected preserveEqualProps(pageResponse: Page): void {
260239
if (pageResponse.component !== currentPage.get().component || config.get('future.preserveEqualProps') !== true) {
261240
return

0 commit comments

Comments
 (0)