UNPKG

mattermost-redux

Version:

Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client

473 lines 22.3 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. var redux_1 = require("redux"); var action_types_1 = require("../../action_types"); var team_utils_1 = require("../../utils/team_utils"); function currentTeamId(state, action) { if (state === void 0) { state = ''; } switch (action.type) { case action_types_1.TeamTypes.SELECT_TEAM: return action.data; case action_types_1.UserTypes.LOGOUT_SUCCESS: return ''; default: return state; } } function teams(state, action) { var _a, _b; if (state === void 0) { state = {}; } switch (action.type) { case action_types_1.TeamTypes.RECEIVED_TEAMS_LIST: case action_types_1.SchemeTypes.RECEIVED_SCHEME_TEAMS: return Object.assign({}, state, team_utils_1.teamListToMap(action.data)); case action_types_1.UserTypes.LOGIN: // Used by the mobile app return Object.assign({}, state, team_utils_1.teamListToMap(action.data.teams)); case action_types_1.TeamTypes.RECEIVED_TEAMS: return Object.assign({}, state, action.data); case action_types_1.TeamTypes.CREATED_TEAM: case action_types_1.TeamTypes.UPDATED_TEAM: case action_types_1.TeamTypes.PATCHED_TEAM: case action_types_1.TeamTypes.REGENERATED_TEAM_INVITE_ID: case action_types_1.TeamTypes.RECEIVED_TEAM: return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[action.data.id] = action.data, _a)); case action_types_1.TeamTypes.RECEIVED_TEAM_DELETED: { var nextState = tslib_1.__assign({}, state); var teamId = action.data.id; if (nextState.hasOwnProperty(teamId)) { Reflect.deleteProperty(nextState, teamId); return nextState; } return state; } case action_types_1.TeamTypes.UPDATED_TEAM_SCHEME: { var _c = action.data, teamId = _c.teamId, schemeId = _c.schemeId; var team = state[teamId]; if (!team) { return state; } return tslib_1.__assign(tslib_1.__assign({}, state), (_b = {}, _b[teamId] = tslib_1.__assign(tslib_1.__assign({}, team), { scheme_id: schemeId }), _b)); } case action_types_1.UserTypes.LOGOUT_SUCCESS: return {}; default: return state; } } function myMembers(state, action) { var e_1, _a, e_2, _b, _c, _d, _e, _f, _g, e_3, _h; if (state === void 0) { state = {}; } function updateState(receivedTeams, currentState) { if (receivedTeams === void 0) { receivedTeams = {}; } if (currentState === void 0) { currentState = {}; } return Object.keys(receivedTeams).forEach(function (teamId) { if (receivedTeams[teamId].delete_at > 0 && currentState[teamId]) { Reflect.deleteProperty(currentState, teamId); } }); } switch (action.type) { case action_types_1.TeamTypes.RECEIVED_MY_TEAM_MEMBER: { var nextState = tslib_1.__assign({}, state); var member = action.data; if (member.delete_at === 0) { nextState[member.team_id] = member; } return nextState; } case action_types_1.TeamTypes.RECEIVED_MY_TEAM_MEMBERS: { var nextState = {}; var members = action.data; try { for (var members_1 = tslib_1.__values(members), members_1_1 = members_1.next(); !members_1_1.done; members_1_1 = members_1.next()) { var m = members_1_1.value; if (m.delete_at == null || m.delete_at === 0) { var prevMember = state[m.team_id] || { mention_count: 0, msg_count: 0 }; nextState[m.team_id] = tslib_1.__assign(tslib_1.__assign({}, prevMember), m); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (members_1_1 && !members_1_1.done && (_a = members_1.return)) _a.call(members_1); } finally { if (e_1) throw e_1.error; } } return nextState; } case action_types_1.TeamTypes.RECEIVED_TEAMS_LIST: { var nextState = tslib_1.__assign({}, state); var receivedTeams = team_utils_1.teamListToMap(action.data); updateState(receivedTeams, nextState); return nextState; } case action_types_1.TeamTypes.RECEIVED_TEAMS: { var nextState = tslib_1.__assign({}, state); var receivedTeams = action.data; updateState(receivedTeams, nextState); return nextState; } case action_types_1.TeamTypes.RECEIVED_MY_TEAM_UNREADS: { var nextState = tslib_1.__assign({}, state); var unreads = action.data; try { for (var unreads_1 = tslib_1.__values(unreads), unreads_1_1 = unreads_1.next(); !unreads_1_1.done; unreads_1_1 = unreads_1.next()) { var u = unreads_1_1.value; var msgCount = u.msg_count < 0 ? 0 : u.msg_count; var mentionCount = u.mention_count < 0 ? 0 : u.mention_count; var m = tslib_1.__assign(tslib_1.__assign({}, state[u.team_id]), { mention_count: mentionCount, msg_count: msgCount }); nextState[u.team_id] = m; } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (unreads_1_1 && !unreads_1_1.done && (_b = unreads_1.return)) _b.call(unreads_1); } finally { if (e_2) throw e_2.error; } } return nextState; } case action_types_1.ChannelTypes.INCREMENT_UNREAD_MSG_COUNT: { var _j = action.data, teamId = _j.teamId, amount = _j.amount, onlyMentions = _j.onlyMentions; var member = state[teamId]; if (!member) { // Don't keep track of unread posts until we've loaded the actual team member return state; } if (onlyMentions) { // Incrementing the msg_count marks the team as unread, so don't do that if these posts shouldn't be unread return state; } return tslib_1.__assign(tslib_1.__assign({}, state), (_c = {}, _c[teamId] = tslib_1.__assign(tslib_1.__assign({}, member), { msg_count: member.msg_count + amount }), _c)); } case action_types_1.ChannelTypes.DECREMENT_UNREAD_MSG_COUNT: { var _k = action.data, teamId = _k.teamId, amount = _k.amount; var member = state[teamId]; if (!member) { // Don't keep track of unread posts until we've loaded the actual team member return state; } return tslib_1.__assign(tslib_1.__assign({}, state), (_d = {}, _d[teamId] = tslib_1.__assign(tslib_1.__assign({}, member), { msg_count: Math.max(member.msg_count - Math.abs(amount), 0) }), _d)); } case action_types_1.ChannelTypes.INCREMENT_UNREAD_MENTION_COUNT: { var _l = action.data, teamId = _l.teamId, amount = _l.amount; var member = state[teamId]; if (!member) { // Don't keep track of unread posts until we've loaded the actual team member return state; } return tslib_1.__assign(tslib_1.__assign({}, state), (_e = {}, _e[teamId] = tslib_1.__assign(tslib_1.__assign({}, member), { mention_count: member.mention_count + amount }), _e)); } case action_types_1.ChannelTypes.DECREMENT_UNREAD_MENTION_COUNT: { var _m = action.data, teamId = _m.teamId, amount = _m.amount; var member = state[teamId]; if (!member) { // Don't keep track of unread posts until we've loaded the actual team member return state; } return tslib_1.__assign(tslib_1.__assign({}, state), (_f = {}, _f[teamId] = tslib_1.__assign(tslib_1.__assign({}, member), { mention_count: Math.max(member.mention_count - amount, 0) }), _f)); } case action_types_1.TeamTypes.LEAVE_TEAM: case action_types_1.TeamTypes.RECEIVED_TEAM_DELETED: { var nextState = tslib_1.__assign({}, state); var data = action.data; Reflect.deleteProperty(nextState, data.id); return nextState; } case action_types_1.TeamTypes.UPDATED_TEAM_MEMBER_SCHEME_ROLES: { return updateMyTeamMemberSchemeRoles(state, action); } case action_types_1.ChannelTypes.POST_UNREAD_SUCCESS: { var _o = action.data, teamId = _o.teamId, deltaMsgs = _o.deltaMsgs, mentionCount = _o.mentionCount, msgCount = _o.msgCount; var teamState = state[teamId]; if (!teamState) { return state; } var newTeamState = tslib_1.__assign(tslib_1.__assign({}, teamState), { msg_count: (typeof teamState.msg_count === 'undefined' ? msgCount : teamState.msg_count - deltaMsgs), mention_count: (typeof teamState.mention_count === 'undefined' ? mentionCount : teamState.mention_count + mentionCount) }); return tslib_1.__assign(tslib_1.__assign({}, state), (_g = {}, _g[teamId] = newTeamState, _g)); } case action_types_1.UserTypes.LOGIN: { // Used by the mobile app var _p = action.data, teamMembers = _p.teamMembers, teamUnreads = _p.teamUnreads; var nextState = tslib_1.__assign({}, state); var _loop_1 = function (m) { if (m.delete_at == null || m.delete_at === 0) { var unread = teamUnreads.find(function (u) { return u.team_id === m.team_id; }); if (unread) { m.mention_count = unread.mention_count; m.msg_count = unread.msg_count; } nextState[m.team_id] = m; } }; try { for (var teamMembers_1 = tslib_1.__values(teamMembers), teamMembers_1_1 = teamMembers_1.next(); !teamMembers_1_1.done; teamMembers_1_1 = teamMembers_1.next()) { var m = teamMembers_1_1.value; _loop_1(m); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (teamMembers_1_1 && !teamMembers_1_1.done && (_h = teamMembers_1.return)) _h.call(teamMembers_1); } finally { if (e_3) throw e_3.error; } } return nextState; } case action_types_1.UserTypes.LOGOUT_SUCCESS: return {}; default: return state; } } function membersInTeam(state, action) { var _a, e_4, _b, e_5, _c, _d, _e; if (state === void 0) { state = {}; } switch (action.type) { case action_types_1.TeamTypes.RECEIVED_MEMBER_IN_TEAM: { var data = action.data; var members = tslib_1.__assign({}, (state[data.team_id] || {})); members[data.user_id] = data; return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[data.team_id] = members, _a)); } case action_types_1.TeamTypes.RECEIVED_TEAM_MEMBERS: { var data = action.data; if (data && data.length) { var nextState = tslib_1.__assign({}, state); try { for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) { var member = data_1_1.value; if (nextState[member.team_id]) { nextState[member.team_id] = tslib_1.__assign({}, nextState[member.team_id]); } else { nextState[member.team_id] = {}; } nextState[member.team_id][member.user_id] = member; } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (data_1_1 && !data_1_1.done && (_b = data_1.return)) _b.call(data_1); } finally { if (e_4) throw e_4.error; } } return nextState; } return state; } case action_types_1.TeamTypes.RECEIVED_MEMBERS_IN_TEAM: { var data = action.data; if (data && data.length) { var teamId = data[0].team_id; var members = tslib_1.__assign({}, (state[teamId] || {})); try { for (var data_2 = tslib_1.__values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) { var member = data_2_1.value; members[member.user_id] = member; } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (data_2_1 && !data_2_1.done && (_c = data_2.return)) _c.call(data_2); } finally { if (e_5) throw e_5.error; } } return tslib_1.__assign(tslib_1.__assign({}, state), (_d = {}, _d[teamId] = members, _d)); } return state; } case action_types_1.TeamTypes.REMOVE_MEMBER_FROM_TEAM: { var data = action.data; var members = state[data.team_id]; if (members) { var nextState = tslib_1.__assign({}, members); Reflect.deleteProperty(nextState, data.user_id); return tslib_1.__assign(tslib_1.__assign({}, state), (_e = {}, _e[data.team_id] = nextState, _e)); } return state; } case action_types_1.TeamTypes.RECEIVED_TEAM_DELETED: { var nextState = tslib_1.__assign({}, state); var teamId = action.data.id; if (nextState.hasOwnProperty(teamId)) { Reflect.deleteProperty(nextState, teamId); return nextState; } return state; } case action_types_1.TeamTypes.UPDATED_TEAM_MEMBER_SCHEME_ROLES: { return updateTeamMemberSchemeRoles(state, action); } case action_types_1.UserTypes.LOGOUT_SUCCESS: return {}; default: return state; } } function stats(state, action) { var _a; if (state === void 0) { state = {}; } switch (action.type) { case action_types_1.TeamTypes.RECEIVED_TEAM_STATS: { var stat = action.data; return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[stat.team_id] = stat, _a)); } case action_types_1.TeamTypes.RECEIVED_TEAM_DELETED: { var nextState = tslib_1.__assign({}, state); var teamId = action.data.id; if (nextState.hasOwnProperty(teamId)) { Reflect.deleteProperty(nextState, teamId); return nextState; } return state; } case action_types_1.UserTypes.LOGOUT_SUCCESS: return {}; default: return state; } } function groupsAssociatedToTeam(state, action) { var e_6, _a, e_7, _b, e_8, _c, e_9, _d; if (state === void 0) { state = {}; } switch (action.type) { case action_types_1.GroupTypes.RECEIVED_GROUP_ASSOCIATED_TO_TEAM: { var _e = action.data, teamID = _e.teamID, groups = _e.groups; var nextState = tslib_1.__assign({}, state); var associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []); try { for (var groups_1 = tslib_1.__values(groups), groups_1_1 = groups_1.next(); !groups_1_1.done; groups_1_1 = groups_1.next()) { var group = groups_1_1.value; associatedGroupIDs.add(group.id); } } catch (e_6_1) { e_6 = { error: e_6_1 }; } finally { try { if (groups_1_1 && !groups_1_1.done && (_a = groups_1.return)) _a.call(groups_1); } finally { if (e_6) throw e_6.error; } } nextState[teamID] = { ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size }; return nextState; } case action_types_1.GroupTypes.RECEIVED_GROUPS_ASSOCIATED_TO_TEAM: { var _f = action.data, teamID = _f.teamID, groups = _f.groups, totalGroupCount = _f.totalGroupCount; var nextState = tslib_1.__assign({}, state); var associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []); try { for (var groups_2 = tslib_1.__values(groups), groups_2_1 = groups_2.next(); !groups_2_1.done; groups_2_1 = groups_2.next()) { var group = groups_2_1.value; associatedGroupIDs.add(group.id); } } catch (e_7_1) { e_7 = { error: e_7_1 }; } finally { try { if (groups_2_1 && !groups_2_1.done && (_b = groups_2.return)) _b.call(groups_2); } finally { if (e_7) throw e_7.error; } } nextState[teamID] = { ids: Array.from(associatedGroupIDs), totalCount: totalGroupCount }; return nextState; } case action_types_1.GroupTypes.RECEIVED_ALL_GROUPS_ASSOCIATED_TO_TEAM: { var _g = action.data, teamID = _g.teamID, groups = _g.groups; var nextState = tslib_1.__assign({}, state); var associatedGroupIDs = new Set([]); try { for (var groups_3 = tslib_1.__values(groups), groups_3_1 = groups_3.next(); !groups_3_1.done; groups_3_1 = groups_3.next()) { var group = groups_3_1.value; associatedGroupIDs.add(group.id); } } catch (e_8_1) { e_8 = { error: e_8_1 }; } finally { try { if (groups_3_1 && !groups_3_1.done && (_c = groups_3.return)) _c.call(groups_3); } finally { if (e_8) throw e_8.error; } } var ids = Array.from(associatedGroupIDs); nextState[teamID] = { ids: ids, totalCount: ids.length }; return nextState; } case action_types_1.GroupTypes.RECEIVED_GROUP_NOT_ASSOCIATED_TO_TEAM: case action_types_1.GroupTypes.RECEIVED_GROUPS_NOT_ASSOCIATED_TO_TEAM: { var _h = action.data, teamID = _h.teamID, groups = _h.groups; var nextState = tslib_1.__assign({}, state); var associatedGroupIDs = new Set(state[teamID] ? state[teamID].ids : []); try { for (var groups_4 = tslib_1.__values(groups), groups_4_1 = groups_4.next(); !groups_4_1.done; groups_4_1 = groups_4.next()) { var group = groups_4_1.value; associatedGroupIDs.delete(group.id); } } catch (e_9_1) { e_9 = { error: e_9_1 }; } finally { try { if (groups_4_1 && !groups_4_1.done && (_d = groups_4.return)) _d.call(groups_4); } finally { if (e_9) throw e_9.error; } } nextState[teamID] = { ids: Array.from(associatedGroupIDs), totalCount: associatedGroupIDs.size }; return nextState; } default: return state; } } function updateTeamMemberSchemeRoles(state, action) { var _a, _b; var _c = action.data, teamId = _c.teamId, userId = _c.userId, isSchemeUser = _c.isSchemeUser, isSchemeAdmin = _c.isSchemeAdmin; var team = state[teamId]; if (team) { var member = team[userId]; if (member) { return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[teamId] = tslib_1.__assign(tslib_1.__assign({}, state[teamId]), (_b = {}, _b[userId] = tslib_1.__assign(tslib_1.__assign({}, state[teamId][userId]), { scheme_user: isSchemeUser, scheme_admin: isSchemeAdmin }), _b)), _a)); } } return state; } function updateMyTeamMemberSchemeRoles(state, action) { var _a; var _b = action.data, teamId = _b.teamId, isSchemeUser = _b.isSchemeUser, isSchemeAdmin = _b.isSchemeAdmin; var member = state[teamId]; if (member) { return tslib_1.__assign(tslib_1.__assign({}, state), (_a = {}, _a[teamId] = tslib_1.__assign(tslib_1.__assign({}, state[teamId]), { scheme_user: isSchemeUser, scheme_admin: isSchemeAdmin }), _a)); } return state; } function totalCount(state, action) { if (state === void 0) { state = 0; } switch (action.type) { case action_types_1.TeamTypes.RECEIVED_TOTAL_TEAM_COUNT: { return action.data; } default: return state; } } exports.default = redux_1.combineReducers({ // the current selected team currentTeamId: currentTeamId, // object where every key is the team id and has and object with the team detail teams: teams, // object where every key is the team id and has and object with the team members detail myMembers: myMembers, // object where every key is the team id and has an object of members in the team where the key is user id membersInTeam: membersInTeam, // object where every key is the team id and has an object with the team stats stats: stats, groupsAssociatedToTeam: groupsAssociatedToTeam, totalCount: totalCount, }); //# sourceMappingURL=teams.js.map