@@ -163,9 +163,9 @@ export class Router {
163
163
} )
164
164
}
165
165
166
- protected locationVisit ( url : URL , preserveScroll : LocationVisit [ 'preserveScroll' ] ) : boolean | void {
166
+ protected locationVisit ( url : URL , preserveScroll : LocationVisit [ 'preserveScroll' ] , preserveUrl : LocationVisit [ 'preserveUrl' ] ) : boolean | void {
167
167
try {
168
- const locationVisit : LocationVisit = { preserveScroll }
168
+ const locationVisit : LocationVisit = { preserveScroll, preserveUrl }
169
169
window . sessionStorage . setItem ( 'inertiaLocationVisit' , JSON . stringify ( locationVisit ) )
170
170
window . location . href = url . href
171
171
if ( urlWithoutHash ( window . location ) . href === urlWithoutHash ( url ) . href ) {
@@ -190,7 +190,11 @@ export class Router {
190
190
page . url += window . location . hash
191
191
page . rememberedState = window . history . state ?. rememberedState ?? { }
192
192
page . scrollRegions = window . history . state ?. scrollRegions ?? [ ]
193
- this . setPage ( page , { preserveScroll : locationVisit . preserveScroll , preserveState : true } ) . then ( ( ) => {
193
+ this . setPage ( page , {
194
+ preserveScroll : locationVisit . preserveScroll ,
195
+ preserveUrl : locationVisit . preserveUrl ,
196
+ preserveState : true ,
197
+ } ) . then ( ( ) => {
194
198
if ( locationVisit . preserveScroll ) {
195
199
this . restoreScrollPositions ( )
196
200
}
@@ -260,6 +264,7 @@ export class Router {
260
264
replace = false ,
261
265
preserveScroll = false ,
262
266
preserveState = false ,
267
+ preserveUrl = false ,
263
268
only = [ ] ,
264
269
except = [ ] ,
265
270
headers = { } ,
@@ -295,6 +300,7 @@ export class Router {
295
300
replace,
296
301
preserveScroll,
297
302
preserveState,
303
+ preserveUrl,
298
304
only,
299
305
except,
300
306
headers,
@@ -394,6 +400,7 @@ export class Router {
394
400
}
395
401
preserveScroll = this . resolvePreserveOption ( preserveScroll , pageResponse ) as boolean
396
402
preserveState = this . resolvePreserveOption ( preserveState , pageResponse )
403
+ preserveUrl = this . resolvePreserveOption ( preserveUrl , pageResponse ) as boolean
397
404
if ( preserveState && window . history . state ?. rememberedState && pageResponse . component === this . page . component ) {
398
405
pageResponse . rememberedState = window . history . state . rememberedState
399
406
}
@@ -424,7 +431,7 @@ export class Router {
424
431
if ( requestUrl . hash && ! locationUrl . hash && urlWithoutHash ( requestUrl ) . href === locationUrl . href ) {
425
432
locationUrl . hash = requestUrl . hash
426
433
}
427
- this . locationVisit ( locationUrl , preserveScroll === true )
434
+ this . locationVisit ( locationUrl , preserveScroll === true , preserveUrl === true )
428
435
} else if ( error . response ) {
429
436
if ( fireInvalidEvent ( error . response ) ) {
430
437
modal . show ( error . response . data )
@@ -458,19 +465,27 @@ export class Router {
458
465
replace = false ,
459
466
preserveScroll = false ,
460
467
preserveState = false ,
468
+ preserveUrl = false ,
461
469
} : {
462
470
visitId ?: VisitId
463
471
replace ?: boolean
464
472
preserveScroll ?: PreserveStateOption
465
473
preserveState ?: PreserveStateOption
474
+ preserveUrl ?: PreserveStateOption
466
475
} = { } ,
467
476
) : Promise < void > {
468
477
return Promise . resolve ( this . resolveComponent ( page . component ) ) . then ( ( component ) => {
469
478
if ( visitId === this . visitId ) {
470
479
page . scrollRegions = page . scrollRegions || [ ]
471
480
page . rememberedState = page . rememberedState || { }
472
481
replace = replace || hrefToUrl ( page . url ) . href === window . location . href
482
+
483
+ if ( preserveUrl ) {
484
+ page . url = window . location . href
485
+ }
486
+
473
487
replace ? this . replaceState ( page ) : this . pushState ( page )
488
+
474
489
this . swapComponent ( { component, page, preserveState } ) . then ( ( ) => {
475
490
if ( ! preserveScroll ) {
476
491
this . resetScrollPositions ( )
0 commit comments