Merge pull request #4220 from urbit/ixv/fix-unread-resubscribe

notifications: clear state before processing initial update
This commit is contained in:
matildepark 2021-01-05 17:52:33 -05:00 committed by GitHub
commit 03d7e5d96f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,6 +8,7 @@ import {
import { makePatDa } from "~/logic/lib/util";
import _ from "lodash";
import {StoreState} from "../store/type";
import { BigIntOrderedMap } from '../lib/BigIntOrderedMap';
type HarkState = Pick<StoreState, "notifications" | "notificationsGraphConfig" | "notificationsGroupConfig" | "unreads" | "notificationsChatConfig">;
@ -189,6 +190,7 @@ function unreadEach(json: any, state: HarkState) {
function unreads(json: any, state: HarkState) {
const data = _.get(json, 'unreads');
if(data) {
clearState(state);
data.forEach(({ index, stats }) => {
const { unreads, notifications, last } = stats;
updateNotificationStats(state, index, 'notifications', x => x + notifications);
@ -204,6 +206,29 @@ function unreads(json: any, state: HarkState) {
}
}
function clearState(state){
let initialState = {
notifications: new BigIntOrderedMap<Timebox>(),
archivedNotifications: new BigIntOrderedMap<Timebox>(),
notificationsGroupConfig: [],
notificationsChatConfig: [],
notificationsGraphConfig: {
watchOnSelf: false,
mentions: false,
watching: [],
},
unreads: {
graph: {},
group: {}
},
notificationsCount: 0
};
Object.keys(initialState).forEach(key => {
state[key] = initialState[key];
});
}
function updateUnreadCount(state: HarkState, index: NotifIndex, count: (c: number) => number) {
if(!('graph' in index)) {
return;