알림 전체닫기 오류 수정
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user