mattermost-redux
Version:
Common code (API client, Redux stores, logic, utility functions) for building a Mattermost client
51 lines (40 loc) • 1.78 kB
text/typescript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {createSelector} from 'reselect';
import {getCurrentChannelId, getUsers} from 'selectors/entities/common';
import {getTeammateNameDisplaySetting} from 'selectors/entities/preferences';
import {GlobalState} from 'types/store';
import {Typing} from 'types/typing';
import {UserProfile} from 'types/users';
import {IDMappedObjects} from 'types/utilities';
import {displayUsername} from 'utils/user_utils';
const getUsersTypingImpl = (profiles: IDMappedObjects<UserProfile>, teammateNameDisplay: string, channelId: string, parentPostId: string, typing: Typing): string[] => {
const id = channelId + parentPostId;
if (typing[id]) {
const users = Object.keys(typing[id]);
if (users.length) {
return users.map((userId) => {
return displayUsername(profiles[userId], teammateNameDisplay);
});
}
}
return [];
};
export function makeGetUsersTypingByChannelAndPost(): (state: GlobalState, props: {channelId: string; postId: string}) => string[] {
return createSelector(
getUsers,
getTeammateNameDisplaySetting,
(state: GlobalState, options: {channelId: string; postId: string}) => options.channelId,
(state: GlobalState, options: {channelId: string; postId: string}) => options.postId,
(state: GlobalState) => state.entities.typing,
getUsersTypingImpl,
);
}
export const getUsersTyping: (state: GlobalState) => string[] = createSelector(
getUsers,
getTeammateNameDisplaySetting,
getCurrentChannelId,
(state) => state.entities.posts.selectedPostId,
(state) => state.entities.typing,
getUsersTypingImpl,
);