Skip to content

Commit 2492252

Browse files
author
Sravan S
authored
feat: add interface overrideInviteUser (#370)
Add overrideInviteUser to ChannelList, CreateChannel and ChannelSettings This interface overrides InviteMember functionality. Customer has to create the channel and close the popup manually ``` export type OverrideInviteUserType = { users: Array<string>; onClose: () => void; channelType: 'group' | 'supergroup' | 'broadcast'; }; ChannelList.overrideInviteUser?(params: OverrideInviteUserType): void; CreateChannel.overrideInviteUser?(params: OverrideInviteUserType): void; ``` ``` export type OverrideInviteMemberType = { users: Array<string>; onClose: () => void; channel: GroupChannel; }; ChannelSettings.overrideInviteUser?(params: OverrideInviteMemberType): void; ``` example: ``` <ChannelList overrideInviteUser={({users, onClose, channelType}) => { createMyChannel(users, channelType).then(() => { onClose(); }) }} /> ``` fixes: https://sendbird.atlassian.net/browse/UIKIT-2542
1 parent eb744a0 commit 2492252

File tree

10 files changed

+72
-1
lines changed

10 files changed

+72
-1
lines changed

scripts/index_d_ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -310,8 +310,15 @@ declare module "SendbirdUIKitGlobal" {
310310
channelListQuery?: GroupChannelListQueryParams;
311311
}
312312

313+
export type OverrideInviteUserType = {
314+
users: Array<string>;
315+
onClose: () => void;
316+
channelType: 'group' | 'supergroup' | 'broadcast';
317+
};
318+
313319
export interface ChannelListProviderProps {
314320
allowProfileEdit?: boolean;
321+
overrideInviteUser?(params: OverrideInviteUserType): void;
315322
onBeforeCreateChannel?(users: Array<string>): GroupChannelCreateParams;
316323
onThemeChange?(theme: string): void;
317324
onProfileEditSuccess?(user: User): void;
@@ -381,9 +388,16 @@ declare module "SendbirdUIKitGlobal" {
381388
onLeaveChannel?: () => void;
382389
}
383390

391+
export type OverrideInviteMemberType = {
392+
users: Array<string>;
393+
onClose: () => void;
394+
channel: GroupChannel;
395+
};
396+
384397
export interface ChannelSettingsProviderInterface {
385398
channelUrl: string;
386399
onCloseClick?(): void;
400+
overrideInviteUser?(params: OverrideInviteMemberType): void;
387401
onChannelModified?(channel: GroupChannel): void;
388402
onBeforeUpdateChannel?(currentTitle: string, currentImg: File, data: string): GroupChannelUpdateParams;
389403
queries?: ChannelSettingsQueries;
@@ -409,6 +423,7 @@ declare module "SendbirdUIKitGlobal" {
409423
className?: string;
410424
onCloseClick?(): void;
411425
onChannelModified?(channel: GroupChannel): void;
426+
overrideInviteUser?(params: OverrideInviteMemberType): void;
412427
onBeforeUpdateChannel?(currentTitle: string, currentImg: File, data: string): GroupChannelUpdateParams;
413428
queries?: ChannelSettingsQueries;
414429
renderUserProfile?: (props: RenderUserProfileProps) => React.ReactNode | React.ReactElement;
@@ -1020,11 +1035,13 @@ declare module "SendbirdUIKitGlobal" {
10201035
export interface CreateChannelProviderProps {
10211036
children?: React.ReactNode | React.ReactElement;
10221037
onCreateChannel(channel: GroupChannel): void;
1038+
overrideInviteUser?(params: OverrideInviteUserType): void;
10231039
onBeforeCreateChannel?(users: Array<string>): GroupChannelCreateParams;
10241040
userListQuery?(): UserListQuery;
10251041
}
10261042

10271043
export interface CreateChannelContextInterface {
1044+
overrideInviteUser?(params: OverrideInviteUserType): void;
10281045
onBeforeCreateChannel?(users: Array<string>): GroupChannelCreateParams;
10291046
createChannel: (channelParams: GroupChannelCreateParams) => Promise<GroupChannel>;
10301047
sdk: SendbirdGroupChat | SendbirdOpenChat;

src/smart-components/ChannelList/components/AddChannel/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,14 @@ import Icon, { IconTypes, IconColors } from '../../../../ui/Icon';
55

66
import CreateChannel from '../../../CreateChannel';
77
import useSendbirdStateContext from '../../../../hooks/useSendbirdStateContext';
8+
import { useChannelListContext } from '../../context/ChannelListProvider';
89

910
export const AddChannel: React.VoidFunctionComponent = () => {
1011
const [showModal, setShowModal] = useState(false);
1112
const state = useSendbirdStateContext();
1213
const isOnline = state?.config?.isOnline;
1314
const disabled = !isOnline;
15+
const { overrideInviteUser } = useChannelListContext();
1416

1517
return (
1618
<>
@@ -35,6 +37,7 @@ export const AddChannel: React.VoidFunctionComponent = () => {
3537
onCancel={() => {
3638
setShowModal(false);
3739
}}
40+
overrideInviteUser={overrideInviteUser}
3841
onCreateChannel={() => {
3942
setShowModal(false);
4043
}}

src/smart-components/ChannelList/context/ChannelListProvider.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import useSendbirdStateContext from '../../../hooks/useSendbirdStateContext';
3131
import { CustomUseReducerDispatcher } from '../../../lib/SendbirdState';
3232
import channelListReducers from '../dux/reducers';
3333
import channelListInitialState from '../dux/initialState';
34+
import { CHANNEL_TYPE } from '../../CreateChannel/types';
3435

3536
interface ApplicationUserListQuery {
3637
limit?: number;
@@ -65,9 +66,16 @@ interface ChannelListQueries {
6566
channelListQuery?: GroupChannelListQuery;
6667
}
6768

69+
type OverrideInviteUserType = {
70+
users: Array<string>;
71+
onClose: () => void;
72+
channelType: CHANNEL_TYPE;
73+
};
74+
6875
export interface ChannelListProviderProps {
6976
allowProfileEdit?: boolean;
7077
onBeforeCreateChannel?(users: Array<string>): GroupChannelCreateParams;
78+
overrideInviteUser?(params: OverrideInviteUserType): void;
7179
onThemeChange?(theme: string): void;
7280
onProfileEditSuccess?(user: User): void;
7381
onChannelSelect?(channel: GroupChannel): void;
@@ -139,6 +147,7 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
139147
onThemeChange,
140148
onBeforeCreateChannel,
141149
sortChannelList,
150+
overrideInviteUser,
142151
disableAutoSelect,
143152
isTypingIndicatorEnabled = null,
144153
isMessageReceiptStatusEnabled = null,
@@ -347,6 +356,7 @@ const ChannelListProvider: React.FC<ChannelListProviderProps> = (props: ChannelL
347356
onProfileEditSuccess,
348357
onThemeChange,
349358
onBeforeCreateChannel,
359+
overrideInviteUser,
350360
onChannelSelect,
351361
sortChannelList,
352362
loading,

src/smart-components/ChannelList/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const ChannelList: React.FC<ChannelListProps> = (props: ChannelListProps) => {
1616
allowProfileEdit={props?.allowProfileEdit}
1717
onBeforeCreateChannel={props?.onBeforeCreateChannel}
1818
onThemeChange={props?.onThemeChange}
19+
overrideInviteUser={props?.overrideInviteUser}
1920
onProfileEditSuccess={props?.onProfileEditSuccess}
2021
onChannelSelect={props?.onChannelSelect}
2122
sortChannelList={props?.sortChannelList}

src/smart-components/ChannelSettings/components/ModerationPanel/InviteUsersModal.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export default function InviteUsers({
2626
const sdk = state?.stores?.sdkStore?.sdk;
2727
const globalUserListQuery = state?.config?.userListQuery;
2828

29-
const { channel } = useChannelSettingsContext();
29+
const { channel, overrideInviteUser } = useChannelSettingsContext();
3030
const { stringSet } = useLocalization();
3131

3232
useEffect(() => {
@@ -48,6 +48,14 @@ export default function InviteUsers({
4848
onCancel={() => onCancel()}
4949
onSubmit={() => {
5050
const members = Object.keys(selectedMembers).filter((m) => selectedMembers[m]);
51+
if(typeof overrideInviteUser === 'function') {
52+
overrideInviteUser({
53+
users: members,
54+
onClose: onCancel,
55+
channel,
56+
});
57+
return;
58+
}
5159
channel?.inviteWithUserIds(members).then(() => {
5260
onSubmit(members);
5361
});

src/smart-components/ChannelSettings/context/ChannelSettingsProvider.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,19 @@ interface ChannelSettingsQueries {
2525
applicationUserListQuery?: ApplicationUserListQuery;
2626
}
2727

28+
type OverrideInviteUserType = {
29+
users: Array<string>;
30+
onClose: () => void;
31+
channel: GroupChannel;
32+
};
33+
2834
export type ChannelSettingsContextProps = {
2935
children?: React.ReactElement;
3036
channelUrl: string;
3137
className?: string;
3238
onCloseClick?(): void;
3339
onLeaveChannel?(): void;
40+
overrideInviteUser?(params: OverrideInviteUserType): void;
3441
onChannelModified?(channel: GroupChannel): void;
3542
onBeforeUpdateChannel?(currentTitle: string, currentImg: File, data: string): GroupChannelUpdateParams;
3643
queries?: ChannelSettingsQueries;
@@ -42,6 +49,7 @@ interface ChannelSettingsProviderInterface {
4249
channelUrl: string;
4350
onCloseClick?(): void;
4451
onLeaveChannel?(): void;
52+
overrideInviteUser?(params: OverrideInviteUserType): void;
4553
onChannelModified?(channel: GroupChannel): void;
4654
onBeforeUpdateChannel?(currentTitle: string, currentImg: File, data: string): GroupChannelUpdateParams;
4755
queries?: ChannelSettingsQueries;
@@ -61,6 +69,7 @@ const ChannelSettingsProvider: React.FC<ChannelSettingsContextProps> = (props: C
6169
onCloseClick,
6270
onLeaveChannel,
6371
onChannelModified,
72+
overrideInviteUser,
6473
onBeforeUpdateChannel,
6574
queries,
6675
} = props;
@@ -114,6 +123,7 @@ const ChannelSettingsProvider: React.FC<ChannelSettingsContextProps> = (props: C
114123
onChannelModified,
115124
onBeforeUpdateChannel,
116125
queries,
126+
overrideInviteUser,
117127
setChannelUpdateId,
118128
forceUpdateUI,
119129
channel,

src/smart-components/ChannelSettings/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ interface ChannelSettingsProps extends ChannelSettingsUIProps, ChannelSettingsCo
1414
const ChannelSettings: React.FC<ChannelSettingsProps> = (props: ChannelSettingsProps) => {
1515
return (
1616
<ChannelSettingsProvider
17+
overrideInviteUser={props?.overrideInviteUser}
1718
channelUrl={props.channelUrl}
1819
onCloseClick={props?.onCloseClick}
1920
onLeaveChannel={props?.onLeaveChannel}

src/smart-components/CreateChannel/components/InviteUsers/index.tsx

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ const InviteUsers: React.FC<InviteUsersProps> = ({
4141
const {
4242
onBeforeCreateChannel,
4343
onCreateChannel,
44+
overrideInviteUser,
4445
createChannel,
4546
type,
4647
} = useCreateChannelContext();
@@ -91,6 +92,14 @@ const InviteUsers: React.FC<InviteUsersProps> = ({
9192
onCancel={onCancel}
9293
onSubmit={() => {
9394
const selectedUserList = Object.keys(selectedUsers);
95+
if (typeof overrideInviteUser === 'function') {
96+
overrideInviteUser({
97+
users: selectedUserList,
98+
onClose: onCancel,
99+
channelType: type,
100+
});
101+
return;
102+
}
94103
if (selectedUserList.length > 0) {
95104
if (onBeforeCreateChannel) {
96105
const params = onBeforeCreateChannel(selectedUserList);

src/smart-components/CreateChannel/context/CreateChannelProvider.tsx

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,16 @@ export interface UserListQuery {
1717
next(): Promise<Array<User>>;
1818
}
1919

20+
type OverrideInviteUserType = {
21+
users: Array<string>;
22+
onClose: () => void;
23+
channelType: CHANNEL_TYPE;
24+
};
25+
2026
export interface CreateChannelProviderProps {
2127
children?: React.ReactElement;
2228
onCreateChannel(channel: GroupChannel): void;
29+
overrideInviteUser?(params: OverrideInviteUserType): void;
2330
onBeforeCreateChannel?(users: Array<string>): GroupChannelCreateParams;
2431
userListQuery?(): UserListQuery;
2532
}
@@ -31,6 +38,7 @@ export interface CreateChannelContextInterface {
3138
createChannel: CreateChannel;
3239
sdk: SendbirdGroupChat;
3340
userListQuery?(): UserListQuery;
41+
overrideInviteUser?(params: OverrideInviteUserType): void;
3442
onCreateChannel?(channel: GroupChannel): void;
3543
step: number,
3644
setStep: React.Dispatch<React.SetStateAction<number>>,
@@ -43,6 +51,7 @@ const CreateChannelProvider: React.FC<CreateChannelProviderProps> = (props: Crea
4351
children,
4452
onCreateChannel,
4553
onBeforeCreateChannel,
54+
overrideInviteUser,
4655
userListQuery,
4756
} = props;
4857

@@ -59,6 +68,7 @@ const CreateChannelProvider: React.FC<CreateChannelProviderProps> = (props: Crea
5968
onBeforeCreateChannel,
6069
createChannel,
6170
onCreateChannel,
71+
overrideInviteUser,
6272
userListQuery: userListQuery || userListQuery_,
6373
step,
6474
setStep,

src/smart-components/CreateChannel/index.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ const CreateChannel: React.FC<CreateChannelProps> = (props: CreateChannelProps)
1616
onBeforeCreateChannel,
1717
userListQuery,
1818
onCreateChannel,
19+
overrideInviteUser,
1920
onCancel,
2021
renderStepOne,
2122
} = props;
@@ -24,6 +25,7 @@ const CreateChannel: React.FC<CreateChannelProps> = (props: CreateChannelProps)
2425
onBeforeCreateChannel={onBeforeCreateChannel}
2526
userListQuery={userListQuery}
2627
onCreateChannel={onCreateChannel}
28+
overrideInviteUser={overrideInviteUser}
2729
>
2830
<CreateChannelUI
2931
renderStepOne={renderStepOne}

0 commit comments

Comments
 (0)