This repository has been archived by the owner on Mar 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
/
index.js
87 lines (73 loc) · 2.99 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {createSelector} from 'reselect';
import {searchProfilesInCurrentChannel, getProfilesInCurrentChannel} from 'mattermost-redux/selectors/entities/users';
import {getMembersInCurrentChannel, getCurrentChannelStats, getCurrentChannel} from 'mattermost-redux/selectors/entities/channels';
import {getMembersInCurrentTeam} from 'mattermost-redux/selectors/entities/teams';
import {getChannelStats} from 'mattermost-redux/actions/channels';
import {searchProfiles} from 'mattermost-redux/actions/users';
import {sortByUsername} from 'mattermost-redux/utils/user_utils';
import {
loadProfilesAndTeamMembersAndChannelMembers,
loadTeamMembersAndChannelMembersForProfilesList,
} from 'actions/user_actions.jsx';
import {loadStatusesForProfilesList} from 'actions/status_actions.jsx';
import {setModalSearchTerm} from 'actions/views/search';
import MemberListChannel from './member_list_channel.jsx';
const getUsersAndActionsToDisplay = createSelector(
(state, users) => users,
getMembersInCurrentTeam,
getMembersInCurrentChannel,
getCurrentChannel,
(users = [], teamMembers = {}, channelMembers = {}, channel = {}) => {
const actionUserProps = {};
const usersToDisplay = [];
for (let i = 0; i < users.length; i++) {
const user = users[i];
if (teamMembers[user.id] && channelMembers[user.id] && user.delete_at === 0) {
usersToDisplay.push(user);
actionUserProps[user.id] = {
channel,
teamMember: teamMembers[user.id],
channelMember: channelMembers[user.id],
};
}
}
return {
usersToDisplay: usersToDisplay.sort(sortByUsername),
actionUserProps,
};
}
);
function mapStateToProps(state) {
const searchTerm = state.views.search.modalSearch;
let users;
if (searchTerm) {
users = searchProfilesInCurrentChannel(state, searchTerm);
} else {
users = getProfilesInCurrentChannel(state);
}
const stats = getCurrentChannelStats(state) || {member_count: 0};
return {
...getUsersAndActionsToDisplay(state, users),
currentTeamId: state.entities.teams.currentTeamId,
currentChannelId: state.entities.channels.currentChannelId,
searchTerm,
totalChannelMembers: stats.member_count,
};
}
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
searchProfiles,
getChannelStats,
setModalSearchTerm,
loadProfilesAndTeamMembersAndChannelMembers,
loadStatusesForProfilesList,
loadTeamMembersAndChannelMembersForProfilesList,
}, dispatch),
};
}
export default connect(mapStateToProps, mapDispatchToProps)(MemberListChannel);