[IMPROVEMENT] Stop inserting last message as message object from rooms stream if room is focused (#2069)

* [IMPROVEMENT] No insert last message if the room is focused

* fix discussion/threads

Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
Djorkaeff Alexandre 2020-04-30 14:53:35 -03:00 committed by GitHub
parent 022b0330bf
commit 4e948f897c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 3 deletions

View File

@ -31,7 +31,7 @@ export const ROOMS = createRequestTypes('ROOMS', [
'OPEN_SEARCH_HEADER',
'CLOSE_SEARCH_HEADER'
]);
export const ROOM = createRequestTypes('ROOM', ['LEAVE', 'DELETE', 'REMOVED', 'USER_TYPING']);
export const ROOM = createRequestTypes('ROOM', ['SUBSCRIBE', 'UNSUBSCRIBE', 'LEAVE', 'DELETE', 'REMOVED', 'USER_TYPING']);
export const APP = createRequestTypes('APP', ['START', 'READY', 'INIT', 'INIT_LOCAL_SETTINGS']);
export const MESSAGES = createRequestTypes('MESSAGES', ['REPLY_BROADCAST']);
export const CREATE_CHANNEL = createRequestTypes('CREATE_CHANNEL', [...defaultTypes]);

View File

@ -1,5 +1,19 @@
import * as types from './actionsTypes';
export function subscribeRoom(rid) {
return {
type: types.ROOM.SUBSCRIBE,
rid
};
}
export function unsubscribeRoom(rid) {
return {
type: types.ROOM.UNSUBSCRIBE,
rid
};
}
export function leaveRoom(rid, t) {
return {
type: types.ROOM.LEAVE,

View File

@ -10,6 +10,7 @@ import reduxStore from '../../createStore';
import { addUserTyping, removeUserTyping, clearUserTyping } from '../../../actions/usersTyping';
import debounce from '../../../utils/debounce';
import RocketChat from '../../rocketchat';
import { subscribeRoom, unsubscribeRoom } from '../../../actions/room';
const WINDOW_TIME = 1000;
@ -38,6 +39,8 @@ export default class RoomSubscription {
if (!this.isAlive) {
this.unsubscribe();
}
reduxStore.dispatch(subscribeRoom(this.rid));
}
unsubscribe = async() => {
@ -59,6 +62,8 @@ export default class RoomSubscription {
if (this.timer) {
clearTimeout(this.timer);
}
reduxStore.dispatch(unsubscribeRoom(this.rid));
}
removeListener = async(promise) => {

View File

@ -141,7 +141,8 @@ const createOrUpdateSubscription = async(subscription, room) => {
}
}
if (tmp.lastMessage) {
const { rooms } = store.getState().room;
if (tmp.lastMessage && !rooms.includes(tmp.rid)) {
const lastMessage = buildMessage(tmp.lastMessage);
const messagesCollection = db.collections.get('messages');
let messageRecord;

View File

@ -2,11 +2,23 @@ import { ROOM } from '../actions/actionsTypes';
const initialState = {
rid: null,
isDeleting: false
isDeleting: false,
rooms: []
};
export default function(state = initialState, action) {
switch (action.type) {
case ROOM.SUBSCRIBE:
return {
...state,
rooms: [action.rid, ...state.rooms]
};
case ROOM.UNSUBSCRIBE:
return {
...state,
rooms: state.rooms
.filter(room => room.rid === action.rid)
};
case ROOM.LEAVE:
return {
...state,