import React, { useCallback } from 'react'; import { TouchableOpacity } from 'react-native'; import { useUserList } from '@sendbird/uikit-chat-hooks'; import type { SendbirdMember } from '@sendbird/uikit-utils'; import StatusComposition from '../components/StatusComposition'; import UserSelectableBar from '../components/UserSelectableBar'; import type { GroupChannelRegisterOperatorFragment } from '../domain/groupChannelUserList/types'; import createUserListModule from '../domain/userList/module/createUserListModule'; import type { UserListModule } from '../domain/userList/types'; import { useLocalization, useSendbirdChat } from '../hooks/useContext'; const createGroupChannelRegisterOperatorFragment = ( initModule?: Partial>, ): GroupChannelRegisterOperatorFragment => { const UserListModule = createUserListModule(initModule); return ({ channel, onPressHeaderLeft, sortComparator, renderUser, onPressHeaderRight, queryCreator = () => channel.createMemberListQuery({ limit: 20 }), }) => { const { sdk, currentUser } = useSendbirdChat(); const { STRINGS } = useLocalization(); const { users, refreshing, refresh, next, error, loading } = useUserList(sdk, { queryCreator, sortComparator }); const _renderUser: NonNullable = useCallback( (user, selectedUsers, setSelectedUsers) => { if (renderUser) return renderUser(user, selectedUsers, setSelectedUsers); const userIdx = selectedUsers.findIndex((u) => u.userId === user.userId); const isSelected = userIdx > -1; const isOperator = user.role === 'operator'; return ( { setSelectedUsers(([...draft]) => { if (isSelected) draft.splice(userIdx, 1); else draft.push(user); return draft; }); }} > ); }, [channel, renderUser], ); return ( STRINGS.GROUP_CHANNEL_REGISTER_OPERATOR.HEADER_RIGHT({ selectedUsers })} headerTitle={STRINGS.GROUP_CHANNEL_REGISTER_OPERATOR.HEADER_TITLE} > selectedUsers.length > 0} onPressHeaderLeft={onPressHeaderLeft} onPressHeaderRight={async (users) => { await channel.addOperators(users.map((it) => it.userId)); onPressHeaderRight(channel); }} /> } ErrorComponent={ refresh()} />} > } /> ); }; }; export default createGroupChannelRegisterOperatorFragment;