mattermost-mobile/app/reducers/views/team.js
Elias Nahum 334a07aabe
Performance improvements (#3911)
* Improve sidebar performance on first load

* Initial work for switch channel

* Revert android changes

* Split Sidebar per Platform

* Fix waitForHydration executing the callback more than once

* Fix custom emoji not showing on Android

* Finalize Channel Switch

* Enable Android Ram Bundles

* Select the right team for lastChannelForTeam

* Channel loading post indicator

* Fix main sidebar base intl provider

* Update mm-redux

* No need to request configAndLicense on launch

* Load channel member roles

* Rename closeChannelDrawer to closeMainSidebar

* do not throw errors when console is called while running tests

* constant for LOADING_POSTS_HEIGHT

* Remove show more if a long post is edited and no longer long

* Update mm-redux#batch-actions branch

* Code review

* Clear notifications if channel was switched

* Import Platform

Co-authored-by: Miguel Alatzar <migbot@users.noreply.github.com>
2020-02-17 21:18:09 -07:00

83 lines
1.9 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {combineReducers} from 'redux';
import {ChannelTypes, TeamTypes} from 'mattermost-redux/action_types';
import {ViewTypes} from 'app/constants';
function lastTeamId(state = '', action) {
switch (action.type) {
case TeamTypes.SELECT_TEAM:
return action.data;
default:
return state;
}
}
function setLastChannelForTeam(state, teamId, channel) {
if (!channel?.id) {
return state;
}
const team = state[channel.team_id || teamId];
const channelIds = [];
if (team) {
channelIds.push(...team);
const index = channelIds.indexOf(channel.id);
if (index === -1) {
channelIds.unshift(channel.id);
channelIds.slice(0, 5);
} else {
channelIds.splice(index, 1);
channelIds.unshift(channel.id);
}
} else {
channelIds.push(channel.id);
}
return {
...state,
[teamId]: channelIds,
};
}
function lastChannelForTeam(state = {}, action) {
switch (action.type) {
case ChannelTypes.SELECT_CHANNEL: {
return setLastChannelForTeam(state, action.extra?.teamId, action.extra?.channel);
}
case ViewTypes.REMOVE_LAST_CHANNEL_FOR_TEAM: {
const {data} = action;
const team = state[data.teamId];
if (!data.channelId) {
return state;
}
if (team) {
const channelIds = [...team];
const index = channelIds.indexOf(data.channelId);
if (index !== -1) {
channelIds.splice(index, 1);
}
return {
...state,
[data.teamId]: channelIds,
};
}
return state;
}
default:
return state;
}
}
export default combineReducers({
lastTeamId,
lastChannelForTeam,
});