@@ -7,6 +7,7 @@ import { navigating } from '$app/stores';
7
7
import { FlashMessage , type FlashMessageType } from './flashMessage.js' ;
8
8
import { FlashRouter } from './router.js' ;
9
9
import type { FlashOptions } from './options.js' ;
10
+ import { afterNavigate , beforeNavigate } from '$app/navigation' ;
10
11
11
12
const cookieName = 'flash' ;
12
13
@@ -17,63 +18,48 @@ function getRouter(page: Readable<Page>, initialData?: FlashMessageType) {
17
18
if ( ! router ) {
18
19
router = new FlashRouter ( ) ;
19
20
routers . set ( page , router ) ;
20
- subscribeToNavigation ( page ) ;
21
21
router . getFlashMessage ( get ( page ) . route . id ) . message . set ( initialData ) ;
22
+ subscribeToNavigation ( page ) ;
22
23
}
23
24
24
- /*
25
- else if (routeId && initialData !== undefined) {
26
- const flashMessage = router.getFlashMessage(routeId);
27
- flashMessage.message.set(
28
- initialData ?? parseFlashCookie(flashMessage.options.flashCookieOptions),
29
- { concatenateArray: !flashMessage.options.clearArray }
30
- );
31
- }
32
- */
33
-
34
- /*
35
- Array.from(router.routes.entries())
36
- .map(([route, flash]) => {
37
- return { route, message: get(flash.message) };
38
- })
39
- .forEach((m) => console.log(m));
40
- */
41
-
42
25
return router ;
43
26
}
44
27
45
28
function subscribeToNavigation ( page : Readable < Page > ) {
46
29
if ( ! browser ) return ;
47
30
48
31
page . subscribe ( ( $page ) => {
49
- const flash = getRouter ( page ) . getFlashMessage ( $page . route . id ) ;
50
- const cookieData = parseFlashCookie ( flash . options . flashCookieOptions ) ;
32
+ const cookieData = parseFlashCookie ( ) ;
51
33
52
34
if ( cookieData !== undefined ) {
35
+ console . log ( '🚀 ~ page.subscribe:' , cookieData , $page . route . id ) ;
36
+ const flash = getRouter ( page ) . getFlashMessage ( $page . route . id ) ;
53
37
flash . message . set ( cookieData , { concatenateArray : ! flash . options . clearArray } ) ;
38
+ clearFlashCookie ( flash . options . flashCookieOptions ) ;
54
39
}
55
40
} ) ;
56
41
57
- navigating . subscribe ( ( nav ) => {
58
- if ( ! nav ) {
59
- const flash = getRouter ( page ) . getFlashMessage ( get ( page ) . route . id ) ;
60
- const cookieData = parseFlashCookie ( flash . options . flashCookieOptions ) ;
61
-
62
- if ( cookieData !== undefined ) {
63
- flash . message . set ( cookieData , { concatenateArray : ! flash . options . clearArray } ) ;
64
- }
65
- return ;
66
- } else {
67
- const navTo = nav ?. to ?. route . id ;
68
- if ( navTo ) {
69
- const flash = getRouter ( page ) . getFlashMessage ( navTo ) ;
70
-
71
- if ( flash . options . clearOnNavigate && nav . from ?. route . id != navTo ) {
72
- flash . message . set ( undefined ) ;
73
- }
42
+ beforeNavigate ( ( nav ) => {
43
+ const navTo = nav ?. to ?. route . id ;
44
+ if ( navTo ) {
45
+ const flash = getRouter ( page ) . getFlashMessage ( navTo ) ;
46
+ if ( flash . options . clearOnNavigate && nav . from ?. route . id != navTo ) {
47
+ console . log ( '🚀 ~ beforeNavigate ~ clear message on nav to:' , navTo ) ;
48
+ flash . message . set ( undefined ) ;
74
49
}
75
50
}
76
51
} ) ;
52
+
53
+ afterNavigate ( ( ) => {
54
+ const cookieData = parseFlashCookie ( ) ;
55
+
56
+ if ( cookieData !== undefined ) {
57
+ console . log ( '🚀 ~ afterNavigate:' , cookieData , get ( page ) . route . id ) ;
58
+ const flash = getRouter ( page ) . getFlashMessage ( get ( page ) . route . id ) ;
59
+ flash . message . set ( cookieData , { concatenateArray : ! flash . options . clearArray } ) ;
60
+ clearFlashCookie ( flash . options . flashCookieOptions ) ;
61
+ }
62
+ } ) ;
77
63
}
78
64
79
65
export function initFlash (
@@ -154,28 +140,34 @@ export function getFlash(
154
140
* @returns {Promise<boolean> } `true` if a flash message existed, `false` if not.
155
141
*/
156
142
export async function updateFlash ( page : Readable < Page > , update ?: ( ) => Promise < void > ) {
157
- const flashMessage = getRouter ( page ) . getFlashMessage ( get ( page ) . route . id ) ;
158
-
159
143
// Update before setting the new message, so navigation events can pass through first.
160
144
if ( update ) await update ( ) ;
161
- if ( browser ) await tick ( ) ;
162
145
163
- const cookieData = parseFlashCookie ( flashMessage . options . flashCookieOptions ) as
164
- | App . PageData [ 'flash' ]
165
- | undefined ;
146
+ const cookieData = parseFlashCookie ( ) as App . PageData [ 'flash' ] | undefined ;
166
147
167
148
if ( cookieData !== undefined ) {
168
- flashMessage . message . set ( cookieData , { concatenateArray : ! flashMessage . options . clearArray } ) ;
149
+ if ( browser ) await tick ( ) ;
150
+ const flash = getRouter ( page ) . getFlashMessage ( get ( page ) . route . id ) ;
151
+ flash . message . set ( cookieData , { concatenateArray : ! flash . options . clearArray } ) ;
152
+ clearFlashCookie ( flash . options . flashCookieOptions ) ;
169
153
}
170
154
171
155
return ! ! cookieData ;
172
156
}
173
157
174
158
///////////////////////////////////////////////////////////
175
159
176
- function parseFlashCookie (
177
- clearOptions ?: CookieSerializeOptions
178
- ) : App . PageData [ 'flash' ] | undefined {
160
+ function clearFlashCookie ( options : CookieSerializeOptions ) {
161
+ // Clear parsed cookie
162
+ if ( browser ) {
163
+ document . cookie = serialize ( cookieName , '' , {
164
+ ...options ,
165
+ maxAge : 0
166
+ } ) ;
167
+ }
168
+ }
169
+
170
+ function parseFlashCookie ( ) : App . PageData [ 'flash' ] | undefined {
179
171
const cookieString = document . cookie ;
180
172
if ( ! cookieString || ! cookieString . includes ( cookieName + '=' ) ) return undefined ;
181
173
@@ -192,18 +184,7 @@ function parseFlashCookie(
192
184
} , output ) ;
193
185
}
194
186
195
- function clearFlashCookie ( options : CookieSerializeOptions ) {
196
- // Clear parsed cookie
197
- if ( browser ) {
198
- document . cookie = serialize ( cookieName , '' , {
199
- ...options ,
200
- maxAge : 0
201
- } ) ;
202
- }
203
- }
204
-
205
187
const cookies = parseCookieString ( cookieString ) ;
206
- if ( clearOptions ) clearFlashCookie ( clearOptions ) ;
207
188
208
189
if ( cookies [ cookieName ] ) {
209
190
try {
0 commit comments