From c4ad0e7ab3b04284227fba02e52c1d1314de012a Mon Sep 17 00:00:00 2001 From: Djorkaeff Alexandre Date: Thu, 23 Apr 2020 14:44:48 -0300 Subject: [PATCH 1/2] [IMPROVEMENT] No insert last message if the room is focused --- app/actions/actionsTypes.js | 2 +- app/actions/room.js | 13 +++++++++++++ app/lib/methods/subscriptions/room.js | 5 +++++ app/lib/methods/subscriptions/rooms.js | 3 ++- app/reducers/room.js | 10 ++++++++++ 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/app/actions/actionsTypes.js b/app/actions/actionsTypes.js index 33e202a569..13be7e6a0a 100644 --- a/app/actions/actionsTypes.js +++ b/app/actions/actionsTypes.js @@ -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]); diff --git a/app/actions/room.js b/app/actions/room.js index 76a37b656e..9d31352e70 100644 --- a/app/actions/room.js +++ b/app/actions/room.js @@ -1,5 +1,18 @@ import * as types from './actionsTypes'; +export function subscribeRoom(rid) { + return { + type: types.ROOM.SUBSCRIBE, + rid + }; +} + +export function unsubscribeRoom() { + return { + type: types.ROOM.UNSUBSCRIBE + }; +} + export function leaveRoom(rid, t) { return { type: types.ROOM.LEAVE, diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js index 507c36b093..ec2c37b6ab 100644 --- a/app/lib/methods/subscriptions/room.js +++ b/app/lib/methods/subscriptions/room.js @@ -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()); } removeListener = async(promise) => { diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index d80f3dd84b..4bd6d2cff5 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -141,7 +141,8 @@ const createOrUpdateSubscription = async(subscription, room) => { } } - if (tmp.lastMessage) { + const roomState = store.getState().room; + if (tmp.lastMessage && roomState.rid !== tmp.rid) { const lastMessage = buildMessage(tmp.lastMessage); const messagesCollection = db.collections.get('messages'); let messageRecord; diff --git a/app/reducers/room.js b/app/reducers/room.js index 6a34aa8d53..8ce1fda616 100644 --- a/app/reducers/room.js +++ b/app/reducers/room.js @@ -7,6 +7,16 @@ const initialState = { export default function(state = initialState, action) { switch (action.type) { + case ROOM.SUBSCRIBE: + return { + ...state, + rid: action.rid + }; + case ROOM.UNSUBSCRIBE: + return { + ...state, + rid: null + }; case ROOM.LEAVE: return { ...state, From 397c5b488cb411990f4c72bdd47b48d7c40726cc Mon Sep 17 00:00:00 2001 From: Djorkaeff Alexandre Date: Tue, 28 Apr 2020 09:30:48 -0300 Subject: [PATCH 2/2] fix discussion/threads --- app/actions/room.js | 5 +++-- app/lib/methods/subscriptions/room.js | 2 +- app/lib/methods/subscriptions/rooms.js | 4 ++-- app/reducers/room.js | 8 +++++--- 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/app/actions/room.js b/app/actions/room.js index 9d31352e70..3b3b213f25 100644 --- a/app/actions/room.js +++ b/app/actions/room.js @@ -7,9 +7,10 @@ export function subscribeRoom(rid) { }; } -export function unsubscribeRoom() { +export function unsubscribeRoom(rid) { return { - type: types.ROOM.UNSUBSCRIBE + type: types.ROOM.UNSUBSCRIBE, + rid }; } diff --git a/app/lib/methods/subscriptions/room.js b/app/lib/methods/subscriptions/room.js index ec2c37b6ab..f6df8b3434 100644 --- a/app/lib/methods/subscriptions/room.js +++ b/app/lib/methods/subscriptions/room.js @@ -63,7 +63,7 @@ export default class RoomSubscription { clearTimeout(this.timer); } - reduxStore.dispatch(unsubscribeRoom()); + reduxStore.dispatch(unsubscribeRoom(this.rid)); } removeListener = async(promise) => { diff --git a/app/lib/methods/subscriptions/rooms.js b/app/lib/methods/subscriptions/rooms.js index 4bd6d2cff5..85e0ac3a94 100644 --- a/app/lib/methods/subscriptions/rooms.js +++ b/app/lib/methods/subscriptions/rooms.js @@ -141,8 +141,8 @@ const createOrUpdateSubscription = async(subscription, room) => { } } - const roomState = store.getState().room; - if (tmp.lastMessage && roomState.rid !== tmp.rid) { + 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; diff --git a/app/reducers/room.js b/app/reducers/room.js index 8ce1fda616..762905feaf 100644 --- a/app/reducers/room.js +++ b/app/reducers/room.js @@ -2,7 +2,8 @@ import { ROOM } from '../actions/actionsTypes'; const initialState = { rid: null, - isDeleting: false + isDeleting: false, + rooms: [] }; export default function(state = initialState, action) { @@ -10,12 +11,13 @@ export default function(state = initialState, action) { case ROOM.SUBSCRIBE: return { ...state, - rid: action.rid + rooms: [action.rid, ...state.rooms] }; case ROOM.UNSUBSCRIBE: return { ...state, - rid: null + rooms: state.rooms + .filter(room => room.rid === action.rid) }; case ROOM.LEAVE: return {