mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
86 lines (69 loc) • 2.74 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {createSelector} from 'reselect';
import {ScopeTypes} from 'constants/schemes';
import {getAllChannels} from 'selectors/entities/channels';
import {getTeams} from 'selectors/entities/teams';
import {Channel} from 'types/channels';
import {Scheme} from 'types/schemes';
import {GlobalState} from 'types/store';
import {Team} from 'types/teams';
export function getSchemes(state: GlobalState): {
[x: string]: Scheme;
} {
return state.entities.schemes.schemes;
}
export function getScheme(state: GlobalState, id: string): Scheme {
const schemes = getSchemes(state);
return schemes[id];
}
export function makeGetSchemeChannels() {
return (createSelector(
getAllChannels,
(state: GlobalState, props: {schemeId: string}) => getScheme(state, props.schemeId),
(allChannels, scheme) => {
if (!scheme) {
return [];
}
if (scheme.scope === ScopeTypes.TEAM) {
const msg = `Not implemented: scheme '${scheme.id}' is team-scope but 'getSchemeChannels' only accepts channel-scoped schemes.`;
console.log(msg); // eslint-disable-line no-console
return [];
}
const schemeChannels: Channel[] = [];
Object.entries(allChannels).forEach((item: [string, Channel]) => {
const [, channel] = item;
if (channel.scheme_id === scheme.id) {
schemeChannels.push(channel);
}
});
return schemeChannels;
}) as (b: GlobalState, a: {
schemeId: string;
}) => Channel[]);
}
export function makeGetSchemeTeams() {
return (createSelector(
getTeams,
(state: GlobalState, props: {schemeId: string}) => getScheme(state, props.schemeId),
(allTeams, scheme) => {
if (!scheme) {
return [];
}
if (scheme.scope === ScopeTypes.CHANNEL) {
const msg = `Error: scheme '${scheme.id}' is channel-scoped but 'getSchemeChannels' only accepts team-scoped schemes.`;
console.log(msg); // eslint-disable-line no-console
return [];
}
const schemeTeams: Team[] = [];
Object.entries(allTeams).forEach((item: [string, Team]) => {
const [, team] = item;
if (team.scheme_id === scheme.id) {
schemeTeams.push(team);
}
});
return schemeTeams;
}) as (b: GlobalState, a: {
schemeId: string;
}) => Team[]);
}