@@ -162,9 +162,9 @@ export class Router {
162
162
} )
163
163
}
164
164
165
- protected locationVisit ( url : URL , preserveScroll : LocationVisit [ 'preserveScroll' ] ) : boolean | void {
165
+ protected locationVisit ( url : URL , preserveScroll : LocationVisit [ 'preserveScroll' ] , preserveUrl : LocationVisit [ 'preserveUrl' ] ) : boolean | void {
166
166
try {
167
- const locationVisit : LocationVisit = { preserveScroll }
167
+ const locationVisit : LocationVisit = { preserveScroll, preserveUrl }
168
168
window . sessionStorage . setItem ( 'inertiaLocationVisit' , JSON . stringify ( locationVisit ) )
169
169
window . location . href = url . href
170
170
if ( urlWithoutHash ( window . location ) . href === urlWithoutHash ( url ) . href ) {
@@ -189,7 +189,11 @@ export class Router {
189
189
page . url += window . location . hash
190
190
page . rememberedState = window . history . state ?. rememberedState ?? { }
191
191
page . scrollRegions = window . history . state ?. scrollRegions ?? [ ]
192
- this . setPage ( page , { preserveScroll : locationVisit . preserveScroll , preserveState : true } ) . then ( ( ) => {
192
+ this . setPage ( page , {
193
+ preserveScroll : locationVisit . preserveScroll ,
194
+ preserveUrl : locationVisit . preserveUrl ,
195
+ preserveState : true ,
196
+ } ) . then ( ( ) => {
193
197
if ( locationVisit . preserveScroll ) {
194
198
this . restoreScrollPositions ( )
195
199
}
@@ -259,6 +263,7 @@ export class Router {
259
263
replace = false ,
260
264
preserveScroll = false ,
261
265
preserveState = false ,
266
+ preserveUrl = false ,
262
267
only = [ ] ,
263
268
headers = { } ,
264
269
errorBag = '' ,
@@ -293,6 +298,7 @@ export class Router {
293
298
replace,
294
299
preserveScroll,
295
300
preserveState,
301
+ preserveUrl,
296
302
only,
297
303
headers,
298
304
errorBag,
@@ -378,6 +384,7 @@ export class Router {
378
384
}
379
385
preserveScroll = this . resolvePreserveOption ( preserveScroll , pageResponse ) as boolean
380
386
preserveState = this . resolvePreserveOption ( preserveState , pageResponse )
387
+ preserveUrl = this . resolvePreserveOption ( preserveUrl , pageResponse ) as boolean
381
388
if ( preserveState && window . history . state ?. rememberedState && pageResponse . component === this . page . component ) {
382
389
pageResponse . rememberedState = window . history . state . rememberedState
383
390
}
@@ -408,7 +415,7 @@ export class Router {
408
415
if ( requestUrl . hash && ! locationUrl . hash && urlWithoutHash ( requestUrl ) . href === locationUrl . href ) {
409
416
locationUrl . hash = requestUrl . hash
410
417
}
411
- this . locationVisit ( locationUrl , preserveScroll === true )
418
+ this . locationVisit ( locationUrl , preserveScroll === true , preserveUrl === true )
412
419
} else if ( error . response ) {
413
420
if ( fireInvalidEvent ( error . response ) ) {
414
421
modal . show ( error . response . data )
@@ -442,19 +449,27 @@ export class Router {
442
449
replace = false ,
443
450
preserveScroll = false ,
444
451
preserveState = false ,
452
+ preserveUrl = false ,
445
453
} : {
446
454
visitId ?: VisitId
447
455
replace ?: boolean
448
456
preserveScroll ?: PreserveStateOption
449
457
preserveState ?: PreserveStateOption
458
+ preserveUrl ?: PreserveStateOption
450
459
} = { } ,
451
460
) : Promise < void > {
452
461
return Promise . resolve ( this . resolveComponent ( page . component ) ) . then ( ( component ) => {
453
462
if ( visitId === this . visitId ) {
454
463
page . scrollRegions = page . scrollRegions || [ ]
455
464
page . rememberedState = page . rememberedState || { }
456
465
replace = replace || hrefToUrl ( page . url ) . href === window . location . href
466
+
467
+ if ( preserveUrl ) {
468
+ page . url = window . location . href
469
+ }
470
+
457
471
replace ? this . replaceState ( page ) : this . pushState ( page )
472
+
458
473
this . swapComponent ( { component, page, preserveState } ) . then ( ( ) => {
459
474
if ( ! preserveScroll ) {
460
475
this . resetScrollPositions ( )
0 commit comments