UNPKG

mattermost-redux

Version:

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

51 lines (40 loc) 1.78 kB
// 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, );