import React, { useCallback } from 'react'; import { TouchableOpacity } from 'react-native'; import { useUserList } from '@sendbird/uikit-chat-hooks'; import type { SendbirdParticipant } from '@sendbird/uikit-utils'; import StatusComposition from '../components/StatusComposition'; import UserSelectableBar from '../components/UserSelectableBar'; import type { OpenChannelRegisterOperatorFragment } from '../domain/openChannelUserList/types'; import createUserListModule from '../domain/userList/module/createUserListModule'; import type { UserListModule } from '../domain/userList/types'; import { useLocalization, useSendbirdChat } from '../hooks/useContext'; const createOpenChannelRegisterOperatorFragment = ( initModule?: Partial>, ): OpenChannelRegisterOperatorFragment => { const UserListModule = createUserListModule(initModule); return ({ channel, onPressHeaderLeft, sortComparator, renderUser, onPressHeaderRight, queryCreator = () => channel.createParticipantListQuery({ 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 = channel.isOperator(user); return ( { setSelectedUsers(([...draft]) => { if (isSelected) draft.splice(userIdx, 1); else draft.push(user); return draft; }); }} > ); }, [channel, renderUser], ); return ( STRINGS.OPEN_CHANNEL_REGISTER_OPERATOR.HEADER_RIGHT({ selectedUsers })} headerTitle={STRINGS.OPEN_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 createOpenChannelRegisterOperatorFragment;