@@ -31,8 +31,8 @@ import {
31
31
} from './router'
32
32
33
33
import Log from '../../Log'
34
- import { isBoolean , isComponentConstructor , symbols } from './helpers'
35
- import { getProvider , hasProvider , isPageExpired , types , addPersistData } from './provider'
34
+ import { isBoolean , isComponentConstructor , isFunction , symbols } from './helpers'
35
+ import { getProvider , hasProvider , isPageExpired , dataHooks , addPersistData } from './provider'
36
36
import { createComponent } from './components'
37
37
import { executeTransition } from './transition'
38
38
import { getActiveWidget } from './widgets'
@@ -120,7 +120,7 @@ const loader = async request => {
120
120
}
121
121
}
122
122
123
- // If type is not a constructor
123
+ // If page is Lightning Component instance
124
124
if ( ! isConstruct ) {
125
125
request . page = type
126
126
// if we have have a data route for current page
@@ -136,6 +136,12 @@ const loader = async request => {
136
136
// and check platform settings in we want to re-use instance
137
137
if ( route . path === currentRoute ) {
138
138
request . isSharedInstance = true
139
+ // since we're re-using the instance we must attach
140
+ // historyState to the request to prevent it from
141
+ // being overridden.
142
+ if ( isFunction ( request . page . historyState ) ) {
143
+ request . copiedHistoryState = request . page . historyState ( )
144
+ }
139
145
}
140
146
} else {
141
147
request . page = createComponent ( stage , type )
@@ -162,7 +168,7 @@ const loader = async request => {
162
168
request . provider = provider
163
169
request . providerType = loadType
164
170
165
- await types [ request . isSharedInstance ? 'shared' : loadType ] ( request )
171
+ await dataHooks [ loadType ] ( request )
166
172
167
173
// we early exit if the current request is expired
168
174
if ( hash !== getLastHash ( ) ) {
0 commit comments