@@ -53,14 +53,13 @@ export function ALEPH({ initial }: {
53
53
await import ( getModuleImportUrl ( baseUrl , { id : dep . url . replace ( reModuleExt , '.js' ) , hash : dep . hash } , e . forceRefetch ) )
54
54
}
55
55
if ( mod . asyncDeps . filter ( ( { url } ) => url . startsWith ( '#useDeno.' ) ) . length > 0 ) {
56
- await import ( `/_aleph/data${ [ url . pathname , url . query . toString ( ) ] . filter ( Boolean ) . join ( '@' ) } /data.js` + ( e . forceRefetch ? `?t=${ Date . now ( ) } ` : '' ) ) . then ( ( { default : data } ) => {
57
- if ( util . isPlainObject ( data ) ) {
58
- for ( const key in data ) {
59
- const useDenoUrl = `useDeno://${ url . pathname } ?${ url . query . toString ( ) } #${ key } `
60
- Object . assign ( window , { [ useDenoUrl ] : data [ key ] } )
61
- }
56
+ const { default : data } = await import ( `/_aleph/data${ [ url . pathname , url . query . toString ( ) ] . filter ( Boolean ) . join ( '@' ) } /data.js` + ( e . forceRefetch ? `?t=${ Date . now ( ) } ` : '' ) )
57
+ if ( util . isPlainObject ( data ) ) {
58
+ for ( const key in data ) {
59
+ const useDenoUrl = `useDeno://${ url . pathname } ?${ url . query . toString ( ) } #${ key } `
60
+ Object . assign ( window , { [ useDenoUrl ] : data [ key ] } )
62
61
}
63
- } )
62
+ }
64
63
}
65
64
}
66
65
const pc = ctree . find ( pc => pc . id === mod . id )
@@ -70,8 +69,8 @@ export function ALEPH({ initial }: {
70
69
} )
71
70
await Promise . all ( imports )
72
71
setRoute ( { ...createPageProps ( ctree ) , url } )
73
- if ( util . isInt ( e . scrollTo ) ) {
74
- ( window as any ) . scrollTo ( e . scrollTo , 0 )
72
+ if ( e . resetScroll ) {
73
+ ( window as any ) . scrollTo ( 0 , 0 )
75
74
}
76
75
} else {
77
76
setRoute ( { Page : null , pageProps : { } , url } )
@@ -150,14 +149,13 @@ export function ALEPH({ initial }: {
150
149
await import ( getModuleImportUrl ( baseUrl , { id : dep . url . replace ( reModuleExt , '.js' ) , hash : dep . hash } ) )
151
150
}
152
151
if ( mod . asyncDeps . filter ( ( { url } ) => url . startsWith ( '#useDeno.' ) ) . length > 0 ) {
153
- await import ( `/_aleph/data${ [ url . pathname , url . query . toString ( ) ] . filter ( Boolean ) . join ( '@' ) } /data.js` ) . then ( ( { default : data } ) => {
154
- if ( util . isPlainObject ( data ) ) {
155
- for ( const key in data ) {
156
- const useDenoUrl = `useDeno://${ url . pathname } ?${ url . query . toString ( ) } #${ key } `
157
- Object . assign ( window , { [ useDenoUrl ] : data [ key ] } )
158
- }
152
+ const { default : data } = await import ( `/_aleph/data${ [ url . pathname , url . query . toString ( ) ] . filter ( Boolean ) . join ( '@' ) } /data.js` )
153
+ if ( util . isPlainObject ( data ) ) {
154
+ for ( const key in data ) {
155
+ const useDenoUrl = `useDeno://${ url . pathname } ?${ url . query . toString ( ) } #${ key } `
156
+ Object . assign ( window , { [ useDenoUrl ] : data [ key ] } )
159
157
}
160
- } )
158
+ }
161
159
}
162
160
}
163
161
} )
@@ -176,6 +174,23 @@ export function ALEPH({ initial }: {
176
174
}
177
175
} , [ ref ] )
178
176
177
+ useEffect ( ( ) => {
178
+ const win = window as any
179
+ const { location, document, scrollX, scrollY, ALEPH } = win
180
+ const { hashAnchorScroll } = ALEPH
181
+ if ( location . hash ) {
182
+ const anchor = document . getElementById ( location . hash . slice ( 1 ) )
183
+ if ( anchor ) {
184
+ const { left, top } = anchor . getBoundingClientRect ( )
185
+ win . scroll ( {
186
+ top : top + scrollY - ( hashAnchorScroll ?. offset ?. top || 0 ) ,
187
+ left : left + scrollX - ( hashAnchorScroll ?. offset ?. left || 0 ) ,
188
+ behavior : hashAnchorScroll ?. behavior
189
+ } )
190
+ }
191
+ }
192
+ } , [ route ] )
193
+
179
194
return (
180
195
React . createElement (
181
196
ErrorBoundary ,
@@ -211,7 +226,7 @@ export async function redirect(url: string, replace?: boolean) {
211
226
} else {
212
227
history . pushState ( null , '' , url )
213
228
}
214
- events . emit ( 'popstate' , { type : 'popstate' , scrollTo : 0 } )
229
+ events . emit ( 'popstate' , { type : 'popstate' , resetScroll : true } )
215
230
}
216
231
217
232
export function getModuleImportUrl ( baseUrl : string , mod : RouteModule , forceRefetch = false ) {
0 commit comments