UNPKG

mattermost-redux

Version:

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

111 lines (110 loc) 4.25 kB
"use strict"; // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. Object.defineProperty(exports, "__esModule", { value: true }); exports.getRolesByNames = getRolesByNames; exports.getRoleByName = getRoleByName; exports.getRole = getRole; exports.editRole = editRole; exports.setPendingRoles = setPendingRoles; exports.loadRolesIfNeeded = loadRolesIfNeeded; const action_types_1 = require("mattermost-redux/action_types"); const client_1 = require("mattermost-redux/client"); const roles_helpers_1 = require("mattermost-redux/selectors/entities/roles_helpers"); const helpers_1 = require("./helpers"); const constants_1 = require("../constants"); function getRolesByNames(rolesNames) { return (0, helpers_1.bindClientFunc)({ clientFunc: client_1.Client4.getRolesByNames, onRequest: action_types_1.RoleTypes.ROLES_BY_NAMES_REQUEST, onSuccess: [action_types_1.RoleTypes.RECEIVED_ROLES, action_types_1.RoleTypes.ROLES_BY_NAMES_SUCCESS], onFailure: action_types_1.RoleTypes.ROLES_BY_NAMES_FAILURE, params: [ rolesNames, ], }); } function getRoleByName(roleName) { return (0, helpers_1.bindClientFunc)({ clientFunc: client_1.Client4.getRoleByName, onRequest: action_types_1.RoleTypes.ROLE_BY_NAME_REQUEST, onSuccess: [action_types_1.RoleTypes.RECEIVED_ROLE, action_types_1.RoleTypes.ROLE_BY_NAME_SUCCESS], onFailure: action_types_1.RoleTypes.ROLE_BY_NAME_FAILURE, params: [ roleName, ], }); } function getRole(roleId) { return (0, helpers_1.bindClientFunc)({ clientFunc: client_1.Client4.getRole, onRequest: action_types_1.RoleTypes.ROLE_BY_ID_REQUEST, onSuccess: [action_types_1.RoleTypes.RECEIVED_ROLE, action_types_1.RoleTypes.ROLE_BY_ID_SUCCESS], onFailure: action_types_1.RoleTypes.ROLE_BY_ID_FAILURE, params: [ roleId, ], }); } function editRole(role) { return (0, helpers_1.bindClientFunc)({ clientFunc: client_1.Client4.patchRole, onRequest: action_types_1.RoleTypes.EDIT_ROLE_REQUEST, onSuccess: [action_types_1.RoleTypes.RECEIVED_ROLE, action_types_1.RoleTypes.EDIT_ROLE_SUCCESS], onFailure: action_types_1.RoleTypes.EDIT_ROLE_FAILURE, params: [ role.id, role, ], }); } function setPendingRoles(roles) { return { type: action_types_1.RoleTypes.SET_PENDING_ROLES, data: roles, }; } function loadRolesIfNeeded(roles) { return async (dispatch, getState) => { const state = getState(); let pendingRoles = new Set(); try { pendingRoles = new Set(state.entities.roles.pending); } catch (e) { // do nothing } for (const role of roles) { pendingRoles.add(role); } if (!state.entities.general.serverVersion) { dispatch(setPendingRoles(Array.from(pendingRoles))); setTimeout(() => dispatch(loadRolesIfNeeded([])), 500); return { data: [] }; } const loadedRoles = (0, roles_helpers_1.getRoles)(state); const newRoles = new Set(); for (const role of pendingRoles) { if (!loadedRoles[role] && role.trim() !== '') { newRoles.add(role); } } if (state.entities.roles.pending) { await dispatch(setPendingRoles([])); } if (newRoles.size > 0) { const newRolesArray = Array.from(newRoles); const getRolesRequests = []; for (let i = 0; i < newRolesArray.length; i += constants_1.General.MAX_GET_ROLES_BY_NAMES) { const chunk = newRolesArray.slice(i, i + constants_1.General.MAX_GET_ROLES_BY_NAMES); getRolesRequests.push(dispatch(getRolesByNames(chunk))); } const result = await Promise.all(getRolesRequests); return result.reduce((acc, val) => { acc.data = acc.data.concat(val.data); return acc; }, { data: [] }); } return { data: state.entities.roles.roles }; }; }