1
1
import * as Sentry from '@sentry/browser' ;
2
- import { getAuth , onAuthStateChanged , User } from 'firebase/auth' ;
2
+ import { getAuth , onAuthStateChanged , signOut , User } from 'firebase/auth' ;
3
3
import {
4
4
doc ,
5
5
getFirestore ,
@@ -68,6 +68,7 @@ type UserDataContextAPI = {
68
68
updateUserData : (
69
69
computeUpdatesFunc : ( prevUserData : UserData ) => Partial < UserData >
70
70
) => void ;
71
+ signOut : ( ) => Promise < void > ;
71
72
} ;
72
73
73
74
export const assignDefaultsToUserData = ( data : object ) : UserData => {
@@ -286,10 +287,9 @@ export const UserDataProvider = ({
286
287
} ;
287
288
} ) ;
288
289
289
- // initialize from localstorage
290
- React . useEffect ( ( ) => {
291
- runMigration ( ) ;
292
-
290
+ const initializeFromLocalStorage = (
291
+ { useURLLang } = { useURLLang : true }
292
+ ) => {
293
293
let localStorageData : Partial < UserData > ;
294
294
try {
295
295
localStorageData = JSON . parse (
@@ -299,9 +299,11 @@ export const UserDataProvider = ({
299
299
localStorageData = { } ;
300
300
}
301
301
302
- const urlLang = getLangFromUrl ( ) ;
303
- if ( urlLang ) {
304
- localStorageData . lang = urlLang ;
302
+ if ( useURLLang ) {
303
+ const urlLang = getLangFromUrl ( ) ;
304
+ if ( urlLang ) {
305
+ localStorageData . lang = urlLang ;
306
+ }
305
307
}
306
308
307
309
const actualUserData = assignDefaultsToUserData ( localStorageData ) ;
@@ -312,6 +314,12 @@ export const UserDataProvider = ({
312
314
localStorage . setItem ( 'guide:userData:v100' , JSON . stringify ( actualUserData ) ) ;
313
315
314
316
setUserData ( actualUserData ) ;
317
+ } ;
318
+
319
+ // initialize from localstorage
320
+ React . useEffect ( ( ) => {
321
+ runMigration ( ) ;
322
+ initializeFromLocalStorage ( ) ;
315
323
} , [ ] ) ;
316
324
317
325
const userDataAPI : UserDataContextAPI = {
@@ -363,11 +371,12 @@ export const UserDataProvider = ({
363
371
[ firebaseApp , setUserData , ! ! firebaseUser ]
364
372
) ,
365
373
366
- // signOut: (): Promise<void> => {
367
- // return signOut(getAuth(firebaseApp)).then(() => {
368
- // // todo: clear, then re-initialize from local storage
369
- // });
370
- // },
374
+ signOut : ( ) : Promise < void > => {
375
+ return signOut ( getAuth ( firebaseApp ) ) . then ( ( ) => {
376
+ localStorage . removeItem ( 'guide:userData:v100' ) ;
377
+ initializeFromLocalStorage ( { useURLLang : false } ) ;
378
+ } ) ;
379
+ } ,
371
380
372
381
// getDataExport: (): Record<string, any> => {
373
382
// return {};
0 commit comments