mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
111 lines (110 loc) • 4.25 kB
JavaScript
;
// 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 };
};
}