fixed code v3
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
// src/context/UnreadContext.jsx
|
||||
import { createContext, useContext, useState, useCallback, useMemo } from 'react';
|
||||
|
||||
const UnreadContext = createContext(null);
|
||||
@@ -46,13 +47,24 @@ export function UnreadProvider({ children }) {
|
||||
});
|
||||
}, []);
|
||||
|
||||
/**
|
||||
* Полностью сбрасывает unreadMap — вызывается при смене пользователя
|
||||
* (логин/логаут), чтобы счётчики предыдущей сессии не "протекали"
|
||||
* в новую. UnreadProvider не вложен внутрь AuthProvider, поэтому
|
||||
* реагировать на logout() напрямую не может — это делает компонент
|
||||
* ниже по дереву, имеющий доступ к обоим контекстам (см. UnreadListener в App.jsx).
|
||||
*/
|
||||
const resetUnread = useCallback(() => {
|
||||
setUnreadMap({});
|
||||
}, []);
|
||||
|
||||
const totalUnread = useMemo(() =>
|
||||
Object.values(unreadMap).reduce((sum, c) => sum + c, 0),
|
||||
[unreadMap]
|
||||
);
|
||||
|
||||
return (
|
||||
<UnreadContext.Provider value={{ unreadMap, totalUnread, setChatUnread, clearChatUnread, updateFromChats }}>
|
||||
<UnreadContext.Provider value={{ unreadMap, totalUnread, setChatUnread, clearChatUnread, updateFromChats, resetUnread }}>
|
||||
{children}
|
||||
</UnreadContext.Provider>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user