chore: fix notification client

This commit is contained in:
2026-03-02 15:36:55 +01:00
parent 81128def9f
commit 9ce621bee5
5 changed files with 23 additions and 14 deletions
+20 -1
View File
@@ -1,4 +1,4 @@
import React, { createContext, useContext, useState, useEffect, type ReactNode } from 'react';
import React, { createContext, useContext, useState, useEffect, useRef, type ReactNode } from 'react';
import {
getToken, setToken as storeToken, removeToken,
getAdminToken, setAdminToken as storeAdminToken, removeAdminToken,
@@ -8,6 +8,12 @@ import {
clearAllAuth,
} from './tokenStorage';
import { extractUsernameFromToken, extractRoleFromToken, isTokenExpired } from './jwtUtils';
import {
setupNotificationChannel,
registerForPushNotificationsAsync,
sendPushTokenToBackend,
removePushTokenFromBackend,
} from '../services/pushNotifications';
export type UserRole = 'client' | 'admin' | 'cabine' | 'livreur' | null;
@@ -30,6 +36,7 @@ interface AuthContextType extends AuthState {
const AuthContext = createContext<AuthContextType | undefined>(undefined);
export function AuthProvider({ children }: { children: ReactNode }) {
const pushTokenRef = useRef<string | null>(null);
const [state, setState] = useState<AuthState>({
token: null,
username: null,
@@ -114,6 +121,15 @@ export function AuthProvider({ children }: { children: ReactNode }) {
isAuthenticated: true,
mustChangePassword,
});
// Enregistrer le push token en arrière-plan
setupNotificationChannel().then(() =>
registerForPushNotificationsAsync()
).then((pushToken) => {
if (pushToken) {
pushTokenRef.current = pushToken;
sendPushTokenToBackend(pushToken);
}
}).catch(() => {/* silencieux */});
};
const setMustChangePassword = (value: boolean) => {
@@ -136,6 +152,9 @@ export function AuthProvider({ children }: { children: ReactNode }) {
};
const logout = async () => {
// Supprimer le push token du backend avant de se déconnecter
try { await removePushTokenFromBackend(); } catch { /* silencieux */ }
pushTokenRef.current = null;
await clearAllAuth();
setState({
token: null,