notification working

This commit is contained in:
2026-04-20 15:23:28 +05:30
parent 93dbf2023c
commit 237ba6b3c1
12 changed files with 523 additions and 86 deletions

View File

@@ -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)
}