@@ -13,7 +13,7 @@ class CurrentPage {
13
13
event : PageEvent
14
14
callback : VoidFunction
15
15
} [ ] = [ ]
16
- protected firstPageLoad = true
16
+ protected isFirstPageLoad = true
17
17
18
18
public init ( { initialPage, swapComponent, resolveComponent } : RouterInitParams ) {
19
19
this . page = initialPage
@@ -48,23 +48,23 @@ class CurrentPage {
48
48
page . scrollRegions ??= [ ]
49
49
page . rememberedState ??= { }
50
50
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
51
53
replace ? History . replaceState ( page ) : History . pushState ( page )
52
54
53
55
const isNewComponent = ! this . isTheSame ( page )
54
56
55
57
this . page = page
56
58
57
59
if ( isNewComponent ) {
58
- this . listeners
59
- . filter ( ( listener ) => listener . event === 'newComponent' )
60
- . forEach ( ( listener ) => listener . callback ( ) )
60
+ this . fireEventsFor ( 'newComponent' )
61
61
}
62
62
63
- if ( this . firstPageLoad ) {
64
- this . listeners . filter ( ( listener ) => listener . event === 'firstLoad' ) . forEach ( ( listener ) => listener . callback ( ) )
63
+ if ( this . isFirstPageLoad ) {
64
+ this . fireEventsFor ( 'firstLoad' )
65
65
}
66
66
67
- this . firstPageLoad = false
67
+ this . isFirstPageLoad = false
68
68
69
69
return this . swap ( { component, page, preserveState } ) . then ( ( ) => {
70
70
if ( ! preserveScroll ) {
@@ -78,6 +78,20 @@ class CurrentPage {
78
78
} )
79
79
}
80
80
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
+
81
95
public get ( ) : Page {
82
96
return this . page
83
97
}
@@ -125,6 +139,10 @@ class CurrentPage {
125
139
this . listeners = this . listeners . filter ( ( listener ) => listener . event !== event && listener . callback !== callback )
126
140
}
127
141
}
142
+
143
+ public fireEventsFor ( event : PageEvent ) : void {
144
+ this . listeners . filter ( ( listener ) => listener . event === event ) . forEach ( ( listener ) => listener . callback ( ) )
145
+ }
128
146
}
129
147
130
148
export const page = new CurrentPage ( )
0 commit comments