Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F32517019
D3741.1767124218.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
2 KB
Referenced Files
None
Subscribers
None
D3741.1767124218.diff
View Options
diff --git a/web/modals/threads/members/add-members-list.react.js b/web/modals/threads/members/add-members-list.react.js
new file mode 100644
--- /dev/null
+++ b/web/modals/threads/members/add-members-list.react.js
@@ -0,0 +1,79 @@
+// @flow
+
+import _groupBy from 'lodash/fp/groupBy';
+import _toPairs from 'lodash/fp/toPairs';
+import * as React from 'react';
+
+import type { UserListItem } from 'lib/types/user-types';
+
+import AddMembersItemGroup from './add-members-group.react';
+
+type Props = {
+ +userListItems: $ReadOnlyArray<UserListItem>,
+ +pendingUsersToAdd: $ReadOnlySet<string>,
+ +switchUser: string => void,
+};
+
+function AddMembersList(props: Props): React.Node {
+ const { userListItems, pendingUsersToAdd, switchUser } = props;
+
+ const usersAvailableToAdd = React.useMemo(
+ () => userListItems.filter(user => !user.alertText),
+ [userListItems],
+ );
+
+ const groupedAvailableUsersList = React.useMemo(
+ () => _groupBy(userInfo => userInfo.notice)(usersAvailableToAdd),
+ [usersAvailableToAdd],
+ );
+
+ const membersInParentThread = React.useMemo(
+ () =>
+ groupedAvailableUsersList['undefined']
+ ? ['Users in parent channel', groupedAvailableUsersList['undefined']]
+ : undefined,
+ [groupedAvailableUsersList],
+ );
+
+ const membersNotInParentThread = React.useMemo(
+ () =>
+ _toPairs(groupedAvailableUsersList)
+ .filter(group => group[0] !== 'undefined')
+ .sort((a, b) => a[0].localeCompare(b[0]))
+ .map(([header, users]) => [
+ header.charAt(0).toUpperCase() + header.substring(1),
+ users,
+ ]),
+ [groupedAvailableUsersList],
+ );
+
+ const usersUnavailableToAdd = React.useMemo(() => {
+ const usersUnavailable = userListItems.filter(user => user.alertText);
+ if (!usersUnavailable.length) {
+ return null;
+ }
+ return ['Unavailable users', usersUnavailable];
+ }, [userListItems]);
+
+ const sortedGroupedUsersList = React.useMemo(
+ () =>
+ [
+ membersInParentThread,
+ ...membersNotInParentThread,
+ usersUnavailableToAdd,
+ ].filter(Boolean),
+ [membersInParentThread, membersNotInParentThread, usersUnavailableToAdd],
+ );
+
+ return sortedGroupedUsersList.map(([header, userInfos]) => (
+ <AddMembersItemGroup
+ key={header}
+ header={header}
+ userInfos={userInfos}
+ onUserClick={switchUser}
+ usersAdded={pendingUsersToAdd}
+ />
+ ));
+}
+
+export default AddMembersList;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Dec 30, 7:50 PM (3 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
5869561
Default Alt Text
D3741.1767124218.diff (2 KB)
Attached To
Mode
D3741: [web] Introduce `AddMembersList` component
Attached
Detach File
Event Timeline
Log In to Comment