mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
57 lines (56 loc) • 3.11 kB
JavaScript
;
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
Object.defineProperty(exports, "__esModule", { value: true });
exports.getChannelIdsForAccessControlPolicy = exports.getAccessControlSettings = void 0;
exports.getAccessControlPolicy = getAccessControlPolicy;
exports.makeGetChannelsInAccessControlPolicy = makeGetChannelsInAccessControlPolicy;
exports.searchChannelsInheritsPolicy = searchChannelsInheritsPolicy;
const general_1 = require("mattermost-redux/selectors/entities/general");
const channel_utils_1 = require("mattermost-redux/utils/channel_utils");
const channels_1 = require("./channels");
const create_selector_1 = require("../create_selector");
exports.getAccessControlSettings = (0, create_selector_1.createSelector)('getAccessControlSettings', (state) => state.entities.admin.config.AccessControlSettings, (state) => (0, general_1.getConfig)(state), (adminConfig, config) => {
// First try to get from admin config (for admin console pages)
if (adminConfig) {
return adminConfig;
}
// Otherwise, build from client config (for regular users/channel admins)
return {
EnableAttributeBasedAccessControl: config?.EnableAttributeBasedAccessControl === 'true',
EnableUserManagedAttributes: config?.EnableUserManagedAttributes === 'true',
};
});
function getAccessControlPolicy(state, id) {
return state.entities.admin.accessControlPolicies[id];
}
exports.getChannelIdsForAccessControlPolicy = (0, create_selector_1.createSelector)('getChannelIdsForAccessControlPolicy', (state, parentId) => state.entities.admin.channelsForAccessControlPolicy[parentId], (channelIds) => (Array.isArray(channelIds) ? channelIds : []));
function makeGetChannelsInAccessControlPolicy() {
return (0, create_selector_1.createSelector)('getChannelsInAccessControlPolicy', (state) => state.entities.channels.channels, (state, props) => (0, exports.getChannelIdsForAccessControlPolicy)(state, props.policyId), (state) => state.entities.teams.teams, (channels, ids, teams) => {
if (!ids) {
return [];
}
const policyChannels = [];
ids.forEach((channelId) => {
const channel = channels[channelId];
if (channel) {
const team = teams[channel.team_id] || {};
policyChannels.push({
...channel,
team_id: channel.team_id,
team_display_name: team.display_name || '',
team_name: team.name || '',
team_update_at: team.update_at || 0,
});
}
});
return policyChannels;
});
}
function searchChannelsInheritsPolicy(state, policyId, term, filters) {
const channelsInPolicy = makeGetChannelsInAccessControlPolicy();
const channelArray = channelsInPolicy(state, { policyId });
let channels = (0, channels_1.filterChannelList)(channelArray, filters);
channels = (0, channel_utils_1.filterChannelsMatchingTerm)(channels, term);
return channels;
}