Only update read marker when giving focus/mounting column

pull/1424/head
Thibaut Girka 2020-09-15 20:54:26 +02:00 committed by ThibG
parent 145ed37978
commit 94c290d7d2
2 changed files with 9 additions and 2 deletions

View File

@ -57,7 +57,7 @@ const mapStateToProps = state => ({
hasMore: state.getIn(['notifications', 'hasMore']), hasMore: state.getIn(['notifications', 'hasMore']),
numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size, numPending: state.getIn(['notifications', 'pendingItems'], ImmutableList()).size,
notifCleaningActive: state.getIn(['notifications', 'cleaningMode']), notifCleaningActive: state.getIn(['notifications', 'cleaningMode']),
lastReadId: state.getIn(['notifications', 'lastReadId']), lastReadId: state.getIn(['notifications', 'readMarkerId']),
}); });
/* glitch */ /* glitch */
@ -227,7 +227,7 @@ class Notifications extends React.PureComponent {
accountId={item.get('account')} accountId={item.get('account')}
onMoveUp={this.handleMoveUp} onMoveUp={this.handleMoveUp}
onMoveDown={this.handleMoveDown} onMoveDown={this.handleMoveDown}
unread={lastReadId && compareId(item.get('id'), lastReadId) > 0} unread={lastReadId !== '0' && compareId(item.get('id'), lastReadId) > 0}
/> />
)); ));
} else { } else {

View File

@ -39,6 +39,7 @@ const initialState = ImmutableMap({
mounted: 0, mounted: 0,
unread: 0, unread: 0,
lastReadId: '0', lastReadId: '0',
readMarkerId: '0',
isLoading: false, isLoading: false,
cleaningMode: false, cleaningMode: false,
isTabVisible: true, isTabVisible: true,
@ -183,6 +184,7 @@ const deleteMarkedNotifs = (state) => {
const updateMounted = (state) => { const updateMounted = (state) => {
state = state.update('mounted', count => count + 1); state = state.update('mounted', count => count + 1);
if (!shouldCountUnreadNotifications(state)) { if (!shouldCountUnreadNotifications(state)) {
state = state.set('readMarkerId', state.get('lastReadId'));
state = clearUnread(state); state = clearUnread(state);
} }
return state; return state;
@ -191,6 +193,7 @@ const updateMounted = (state) => {
const updateVisibility = (state, visibility) => { const updateVisibility = (state, visibility) => {
state = state.set('isTabVisible', visibility); state = state.set('isTabVisible', visibility);
if (!shouldCountUnreadNotifications(state)) { if (!shouldCountUnreadNotifications(state)) {
state = state.set('readMarkerId', state.get('lastReadId'));
state = clearUnread(state); state = clearUnread(state);
} }
return state; return state;
@ -212,6 +215,10 @@ const recountUnread = (state, last_read_id) => {
mutable.set('lastReadId', last_read_id); mutable.set('lastReadId', last_read_id);
} }
if (compareId(last_read_id, mutable.get('readMarkerId')) > 0) {
mutable.set('readMarkerId', last_read_id);
}
if (state.get('unread') > 0 || shouldCountUnreadNotifications(state)) { if (state.get('unread') > 0 || shouldCountUnreadNotifications(state)) {
mutable.set('unread', mutable.get('pendingItems').count(item => item !== null) + mutable.get('items').count(item => item && compareId(item.get('id'), last_read_id) > 0)); mutable.set('unread', mutable.get('pendingItems').count(item => item !== null) + mutable.get('items').count(item => item && compareId(item.get('id'), last_read_id) > 0));
} }