notification working
This commit is contained in:
@@ -30,6 +30,7 @@ import {
|
||||
saveEncryptedSecretKey,
|
||||
getEncryptedSecretKey,
|
||||
} from '../lib/crypto'
|
||||
import { REMINDER_TIME_KEY, REMINDER_ENABLED_KEY } from '../hooks/useReminder'
|
||||
|
||||
type MongoUser = {
|
||||
id: string
|
||||
@@ -40,6 +41,11 @@ type MongoUser = {
|
||||
tutorial?: boolean
|
||||
backgroundImage?: string | null
|
||||
backgroundImages?: string[]
|
||||
reminder?: {
|
||||
enabled: boolean
|
||||
time?: string
|
||||
timezone?: string
|
||||
}
|
||||
}
|
||||
|
||||
type AuthContextValue = {
|
||||
@@ -135,6 +141,18 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
}
|
||||
}
|
||||
|
||||
function syncReminderFromDb(mongoUser: MongoUser) {
|
||||
const r = mongoUser.reminder
|
||||
if (r) {
|
||||
localStorage.setItem(REMINDER_ENABLED_KEY, r.enabled ? 'true' : 'false')
|
||||
if (r.time) localStorage.setItem(REMINDER_TIME_KEY, r.time)
|
||||
else localStorage.removeItem(REMINDER_TIME_KEY)
|
||||
} else {
|
||||
localStorage.setItem(REMINDER_ENABLED_KEY, 'false')
|
||||
localStorage.removeItem(REMINDER_TIME_KEY)
|
||||
}
|
||||
}
|
||||
|
||||
// Register or fetch user from MongoDB
|
||||
async function syncUserWithDatabase(authUser: User) {
|
||||
try {
|
||||
@@ -148,12 +166,11 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
try {
|
||||
console.log('[Auth] Fetching user by email:', email)
|
||||
const existingUser = await getUserByEmail(email, token) as MongoUser
|
||||
// console.log('[Auth] Found existing user:', existingUser.id)
|
||||
setUserId(existingUser.id)
|
||||
setMongoUser(existingUser)
|
||||
syncReminderFromDb(existingUser)
|
||||
} catch (error) {
|
||||
console.warn('[Auth] User not found, registering...', error)
|
||||
// User doesn't exist, register them
|
||||
const newUser = await registerUser(
|
||||
{
|
||||
email,
|
||||
@@ -165,6 +182,7 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
console.log('[Auth] Registered new user:', newUser.id)
|
||||
setUserId(newUser.id)
|
||||
setMongoUser(newUser)
|
||||
syncReminderFromDb(newUser)
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('[Auth] Error syncing user with database:', error)
|
||||
@@ -226,13 +244,11 @@ export function AuthProvider({ children }: { children: ReactNode }) {
|
||||
}
|
||||
|
||||
async function signOut() {
|
||||
// Clear secret key from memory
|
||||
setSecretKey(null)
|
||||
setMongoUser(null)
|
||||
// Clear pending tour step (session state)
|
||||
localStorage.removeItem('gj-tour-pending-step')
|
||||
// Keep device key and encrypted key for next login
|
||||
// Do NOT clear localStorage or IndexedDB
|
||||
localStorage.removeItem(REMINDER_TIME_KEY)
|
||||
localStorage.removeItem(REMINDER_ENABLED_KEY)
|
||||
await firebaseSignOut(auth)
|
||||
setUserId(null)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user