Skip to content

Commit ae5e0a4

Browse files
authored
Merge pull request #86 from sendbird/feat/query-creators
[UIKIT-3756] Feat/query creators
2 parents d8df7bb + ee42915 commit ae5e0a4

19 files changed

+125
-77
lines changed

packages/uikit-react-native/src/domain/groupChannelBannedUsers/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdGroupChannel, SendbirdRestrictedUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -9,6 +10,7 @@ export type GroupChannelBannedUsersProps = {
910
channel: SendbirdGroupChannel;
1011
onPressHeaderLeft: GroupChannelBannedUsersProps['Header']['onPressHeaderLeft'];
1112
renderUser?: GroupChannelBannedUsersProps['List']['renderUser'];
13+
queryCreator?: UseUserListOptions<SendbirdRestrictedUser>['queryCreator'];
1214
};
1315
Header: {
1416
onPressHeaderLeft: () => void;

packages/uikit-react-native/src/domain/groupChannelMutedMembers/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdGroupChannel, SendbirdRestrictedUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -9,6 +10,7 @@ export type GroupChannelMutedMembersProps = {
910
channel: SendbirdGroupChannel;
1011
onPressHeaderLeft: GroupChannelMutedMembersProps['Header']['onPressHeaderLeft'];
1112
renderUser?: GroupChannelMutedMembersProps['List']['renderUser'];
13+
queryCreator?: UseUserListOptions<SendbirdRestrictedUser>['queryCreator'];
1214
};
1315
Header: {
1416
onPressHeaderLeft: () => void;

packages/uikit-react-native/src/domain/groupChannelOperators/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdGroupChannel, SendbirdUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -10,6 +11,7 @@ export type GroupChannelOperatorsProps = {
1011
onPressHeaderLeft: GroupChannelOperatorsProps['Header']['onPressHeaderLeft'];
1112
onPressHeaderRight: GroupChannelOperatorsProps['Header']['onPressHeaderRight'];
1213
renderUser?: GroupChannelOperatorsProps['List']['renderUser'];
14+
queryCreator?: UseUserListOptions<SendbirdUser>['queryCreator'];
1315
};
1416
Header: {
1517
onPressHeaderLeft: () => void;

packages/uikit-react-native/src/domain/groupChannelUserList/types.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -42,28 +42,26 @@ export type GroupChannelInviteFragment<User extends UserStruct> = CommonComponen
4242
GroupChannelInviteProps<User>['Fragment']
4343
>;
4444

45-
export interface GroupChannelMembersProps<User extends UserStruct> {
45+
export interface GroupChannelMembersProps {
4646
Fragment: {
4747
channel: SendbirdGroupChannel;
4848
onPressHeaderLeft: () => void;
4949
onPressHeaderRight: () => void;
50-
sortComparator?: UseUserListOptions<User>['sortComparator'];
51-
renderUser?: UserListProps<User>['List']['renderUser'];
50+
sortComparator?: UseUserListOptions<SendbirdMember>['sortComparator'];
51+
renderUser?: UserListProps<SendbirdMember>['List']['renderUser'];
52+
queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
5253
};
5354
}
54-
export type GroupChannelMembersFragment<User extends UserStruct> = CommonComponent<
55-
GroupChannelMembersProps<User>['Fragment']
56-
>;
55+
export type GroupChannelMembersFragment = CommonComponent<GroupChannelMembersProps['Fragment']>;
5756

58-
export interface GroupChannelRegisterOperatorProps<User extends UserStruct = SendbirdMember> {
57+
export interface GroupChannelRegisterOperatorProps {
5958
Fragment: {
6059
channel: SendbirdGroupChannel;
6160
onPressHeaderLeft: () => void;
6261
onPressHeaderRight: (channel: SendbirdGroupChannel) => void;
63-
sortComparator?: UseUserListOptions<User>['sortComparator'];
64-
renderUser?: UserListProps<User>['List']['renderUser'];
62+
sortComparator?: UseUserListOptions<SendbirdMember>['sortComparator'];
63+
renderUser?: UserListProps<SendbirdMember>['List']['renderUser'];
64+
queryCreator?: UseUserListOptions<SendbirdMember>['queryCreator'];
6565
};
6666
}
67-
export type GroupChannelRegisterOperatorFragment<User extends UserStruct> = CommonComponent<
68-
GroupChannelRegisterOperatorProps<User>['Fragment']
69-
>;
67+
export type GroupChannelRegisterOperatorFragment = CommonComponent<GroupChannelRegisterOperatorProps['Fragment']>;

packages/uikit-react-native/src/domain/openChannelBannedUsers/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdOpenChannel, SendbirdRestrictedUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -9,6 +10,7 @@ export type OpenChannelBannedUsersProps = {
910
channel: SendbirdOpenChannel;
1011
onPressHeaderLeft: OpenChannelBannedUsersProps['Header']['onPressHeaderLeft'];
1112
renderUser?: OpenChannelBannedUsersProps['List']['renderUser'];
13+
queryCreator?: UseUserListOptions<SendbirdRestrictedUser>['queryCreator'];
1214
};
1315
Header: {
1416
onPressHeaderLeft: () => void;

packages/uikit-react-native/src/domain/openChannelMutedParticipants/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdOpenChannel, SendbirdRestrictedUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -9,6 +10,7 @@ export type OpenChannelMutedParticipantsProps = {
910
channel: SendbirdOpenChannel;
1011
onPressHeaderLeft: OpenChannelMutedParticipantsProps['Header']['onPressHeaderLeft'];
1112
renderUser?: OpenChannelMutedParticipantsProps['List']['renderUser'];
13+
queryCreator?: UseUserListOptions<SendbirdRestrictedUser>['queryCreator'];
1214
};
1315
Header: {
1416
onPressHeaderLeft: () => void;

packages/uikit-react-native/src/domain/openChannelOperators/types.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type React from 'react';
22

3+
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
34
import type { SendbirdOpenChannel, SendbirdUser } from '@sendbird/uikit-utils';
45

56
import type { CommonComponent } from '../../types';
@@ -10,6 +11,7 @@ export type OpenChannelOperatorsProps = {
1011
onPressHeaderLeft: OpenChannelOperatorsProps['Header']['onPressHeaderLeft'];
1112
onPressHeaderRight: OpenChannelOperatorsProps['Header']['onPressHeaderRight'];
1213
renderUser?: OpenChannelOperatorsProps['List']['renderUser'];
14+
queryCreator?: UseUserListOptions<SendbirdUser>['queryCreator'];
1315
};
1416
Header: {
1517
onPressHeaderLeft: () => void;
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,30 @@
11
import type { UseUserListOptions } from '@sendbird/uikit-chat-hooks';
2-
import type { SendbirdOpenChannel, SendbirdParticipant, UserStruct } from '@sendbird/uikit-utils';
2+
import type { SendbirdOpenChannel, SendbirdParticipant, SendbirdUser } from '@sendbird/uikit-utils';
33

44
import type { CommonComponent } from '../../types';
55
import type { UserListProps } from '../userList/types';
66

7-
export interface OpenChannelParticipantsProps<User extends UserStruct> {
7+
export interface OpenChannelParticipantsProps {
88
Fragment: {
99
channel: SendbirdOpenChannel;
1010
onPressHeaderLeft: () => void;
11-
sortComparator?: UseUserListOptions<User>['sortComparator'];
12-
renderUser?: UserListProps<User>['List']['renderUser'];
11+
renderUser?: UserListProps<SendbirdParticipant>['List']['renderUser'];
12+
// NOTE: SDK does not migrate the response type of query to Participant from User yet due to backward compat.
13+
queryCreator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['queryCreator'];
14+
sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
1315
};
1416
}
15-
export type OpenChannelParticipantsFragment<User extends UserStruct> = CommonComponent<
16-
OpenChannelParticipantsProps<User>['Fragment']
17-
>;
17+
export type OpenChannelParticipantsFragment = CommonComponent<OpenChannelParticipantsProps['Fragment']>;
1818

19-
export interface OpenChannelRegisterOperatorProps<User extends UserStruct = SendbirdParticipant> {
19+
export interface OpenChannelRegisterOperatorProps {
2020
Fragment: {
2121
channel: SendbirdOpenChannel;
2222
onPressHeaderLeft: () => void;
2323
onPressHeaderRight: (channel: SendbirdOpenChannel) => void;
24-
sortComparator?: UseUserListOptions<User>['sortComparator'];
25-
renderUser?: UserListProps<User>['List']['renderUser'];
24+
renderUser?: UserListProps<SendbirdParticipant>['List']['renderUser'];
25+
// NOTE: SDK does not migrate the response type of query to Participant from User yet due to backward compat.
26+
queryCreator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['queryCreator'];
27+
sortComparator?: UseUserListOptions<SendbirdUser | SendbirdParticipant>['sortComparator'];
2628
};
2729
}
28-
export type OpenChannelRegisterOperatorFragment<User extends UserStruct> = CommonComponent<
29-
OpenChannelRegisterOperatorProps<User>['Fragment']
30-
>;
30+
export type OpenChannelRegisterOperatorFragment = CommonComponent<OpenChannelRegisterOperatorProps['Fragment']>;

packages/uikit-react-native/src/fragments/createGroupChannelBannedUsersFragment.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react';
22

33
import { useUserList } from '@sendbird/uikit-chat-hooks';
44
import { useActionMenu } from '@sendbird/uikit-react-native-foundation';
5-
import { NOOP, useFreshCallback } from '@sendbird/uikit-utils';
5+
import { useFreshCallback } from '@sendbird/uikit-utils';
66

77
import StatusComposition from '../components/StatusComposition';
88
import UserActionBar from '../components/UserActionBar';
@@ -18,14 +18,17 @@ const createGroupChannelBannedUsersFragment = (
1818
): GroupChannelBannedUsersFragment => {
1919
const GroupChannelBannedUsersModule = createGroupChannelBannedUsersModule(initModule);
2020

21-
return ({ onPressHeaderLeft = NOOP, channel, renderUser }) => {
21+
return ({
22+
onPressHeaderLeft,
23+
channel,
24+
renderUser,
25+
queryCreator = () => channel.createBannedUserListQuery({ limit: 20 }),
26+
}) => {
2227
const { STRINGS } = useLocalization();
2328
const { currentUser, sdk } = useSendbirdChat();
2429
const { openMenu } = useActionMenu();
2530

26-
const { users, deleteUser, loading, next, refresh, error } = useUserList(sdk, {
27-
queryCreator: () => channel.createBannedUserListQuery({ limit: 20 }),
28-
});
31+
const { users, deleteUser, loading, next, refresh, error } = useUserList(sdk, { queryCreator });
2932

3033
const _renderUser: NonNullable<typeof renderUser> = useFreshCallback((props) => {
3134
if (renderUser) return renderUser(props);

packages/uikit-react-native/src/fragments/createGroupChannelMembersFragment.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,17 @@ const RETURN_EMPTY_STRING = () => '';
1717

1818
const createGroupChannelMembersFragment = (
1919
initModule?: Partial<UserListModule<SendbirdMember>>,
20-
): GroupChannelMembersFragment<SendbirdMember> => {
20+
): GroupChannelMembersFragment => {
2121
const UserListModule = createUserListModule<SendbirdMember>(initModule);
2222

23-
return ({ channel, onPressHeaderLeft, onPressHeaderRight, renderUser }) => {
23+
return ({
24+
channel,
25+
onPressHeaderLeft,
26+
onPressHeaderRight,
27+
renderUser,
28+
sortComparator,
29+
queryCreator = () => channel.createMemberListQuery({ limit: 20 }),
30+
}) => {
2431
const handlerId = useUniqHandlerId('GroupChannelMembersFragment');
2532

2633
const refreshSchedule = useRef<NodeJS.Timeout>();
@@ -30,7 +37,8 @@ const createGroupChannelMembersFragment = (
3037
const { show } = useUserProfile();
3138

3239
const { users, refresh, loading, next, error, upsertUser, deleteUser } = useUserList(sdk, {
33-
queryCreator: () => channel.createMemberListQuery({ limit: 20 }),
40+
queryCreator,
41+
sortComparator,
3442
});
3543

3644
useChannelHandler(sdk, handlerId, {

0 commit comments

Comments
 (0)