알림 전체닫기 오류 수정

This commit is contained in:
Macbook
2026-06-04 14:03:52 +09:00
parent c84bb43450
commit 87d100c41e
@@ -233,6 +233,17 @@ export const TradeNotificationProvider: React.FC<ProviderProps> = ({
useEffect(() => { useEffect(() => {
if (!settingsLoaded) return; if (!settingsLoaded) return;
/**
* 앱 설정이 DB 에서 로드 완료된 시점에 readIds 를 즉시 동기화한다.
* STOMP 가 앱 시작 직후 구독 시 readIds 가 아직 빈 상태여서 이미 닫은
* 알림이 다시 팝업으로 뜨는 타이밍 버그를 방지한다.
*/
const dbRead = loadReadIds();
if (dbRead.size > 0) {
const merged = new Set([...readIdsRef.current, ...dbRead]);
readIdsRef.current = merged;
setReadIds(merged);
}
setToastNotifications([]); setToastNotifications([]);
void refreshHistory({ serverOnly: true, rawServerList: true }); void refreshHistory({ serverOnly: true, rawServerList: true });
}, [refreshHistory, settingsLoaded, settingsSessionKey]); }, [refreshHistory, settingsLoaded, settingsSessionKey]);
@@ -262,7 +273,9 @@ export const TradeNotificationProvider: React.FC<ProviderProps> = ({
* STOMP 재연결 시 동일 신호가 재수신되거나 20 초 폴링에서 새로 발견되어도 * STOMP 재연결 시 동일 신호가 재수신되거나 20 초 폴링에서 새로 발견되어도
* 사용자가 명시적으로 닫은 알림은 다시 열리지 않는다. * 사용자가 명시적으로 닫은 알림은 다시 열리지 않는다.
*/ */
const alreadyRead = readIdsRef.current.has(id); // readIdsRef.current (인메모리) 와 DB 캐시(loadReadIds) 모두 확인.
// 앱 시작 초기 설정 로드 전 STOMP 신호 수신 시에도 읽음 상태를 올바르게 판단한다.
const alreadyRead = readIdsRef.current.has(id) || loadReadIds().has(id);
setAllNotifications(prev => { setAllNotifications(prev => {
const existing = prev.find(n => n.id === id); const existing = prev.find(n => n.id === id);