Changeset View
Changeset View
Standalone View
Standalone View
web/modals/threads/members/add-members-list-content.react.js
- This file was moved from web/modals/threads/members/add-members-list.react.js.
// @flow | // @flow | ||||
import _groupBy from 'lodash/fp/groupBy'; | import _groupBy from 'lodash/fp/groupBy'; | ||||
import _toPairs from 'lodash/fp/toPairs'; | import _toPairs from 'lodash/fp/toPairs'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import type { UserListItem } from 'lib/types/user-types'; | import type { UserListItem } from 'lib/types/user-types'; | ||||
import AddMembersItemGroup from './add-members-group.react'; | import AddMembersList from '../../components/add-members-list.react'; | ||||
type Props = { | type Props = { | ||||
+userListItems: $ReadOnlyArray<UserListItem>, | +userListItems: $ReadOnlyArray<UserListItem>, | ||||
+pendingUsersToAdd: $ReadOnlySet<string>, | +pendingUsersToAdd: $ReadOnlySet<string>, | ||||
+switchUser: string => void, | +switchUser: string => void, | ||||
+hasParentThread: boolean, | +hasParentThread: boolean, | ||||
}; | }; | ||||
function AddMembersList(props: Props): React.Node { | function AddMembersListContent(props: Props): React.Node { | ||||
const { | const { | ||||
userListItems, | userListItems, | ||||
pendingUsersToAdd, | pendingUsersToAdd, | ||||
switchUser, | switchUser, | ||||
hasParentThread, | hasParentThread, | ||||
} = props; | } = props; | ||||
const usersAvailableToAdd = React.useMemo( | const usersAvailableToAdd = React.useMemo( | ||||
Show All 35 Lines | function AddMembersListContent(props: Props): React.Node { | ||||
}, [userListItems]); | }, [userListItems]); | ||||
const sortedGroupedUsersList = React.useMemo( | const sortedGroupedUsersList = React.useMemo( | ||||
() => | () => | ||||
[ | [ | ||||
membersInParentThread, | membersInParentThread, | ||||
...membersNotInParentThread, | ...membersNotInParentThread, | ||||
usersUnavailableToAdd, | usersUnavailableToAdd, | ||||
].filter(Boolean), | ] | ||||
.filter(Boolean) | |||||
.map(([header, userInfos]) => ({ header, userInfos })), | |||||
[membersInParentThread, membersNotInParentThread, usersUnavailableToAdd], | [membersInParentThread, membersNotInParentThread, usersUnavailableToAdd], | ||||
); | ); | ||||
return sortedGroupedUsersList.map(([header, userInfos]) => ( | return ( | ||||
<AddMembersItemGroup | <AddMembersList | ||||
key={header} | switchUser={switchUser} | ||||
header={header} | pendingUsersToAdd={pendingUsersToAdd} | ||||
userInfos={userInfos} | sortedGroupedUsersList={sortedGroupedUsersList} | ||||
onUserClick={switchUser} | |||||
usersAdded={pendingUsersToAdd} | |||||
/> | /> | ||||
)); | ); | ||||
} | } | ||||
export default AddMembersList; | export default AddMembersListContent; |