Skip to content

Commit e2476c5

Browse files
authored
feat: add customExtensionParams for sdk.addSendbirdExtensions (#698)
Addresses https://sendbird.atlassian.net/browse/AC-264 Added the 3rd parameter; customData in the `sdk.addSendbirdExtension` so it can be delivered from the outside of UIKit React.
1 parent 70b3400 commit e2476c5

File tree

10 files changed

+42
-4
lines changed

10 files changed

+42
-4
lines changed

scripts/index_d_ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,7 @@ declare module "SendbirdUIKitGlobal" {
294294
isMessageReceiptStatusEnabledOnChannelList?: boolean;
295295
uikitOptions?: UIKitOptions;
296296
sdkInitParams?: SendbirdChatParams<Module[]>;
297+
customExtensionParams?: Record<string, string>;
297298
}
298299

299300
export interface SendBirdStateConfig {

src/lib/Sendbird.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import { useMarkAsDeliveredScheduler } from './hooks/useMarkAsDeliveredScheduler
3535
import { getCaseResolvedReplyType, getCaseResolvedThreadReplySelectType } from './utils/resolvedReplyType';
3636
import { useUnmount } from '../hooks/useUnmount';
3737
import { disconnectSdk } from './hooks/useConnect/disconnectSdk';
38-
import { UIKitOptions, CommonUIKitConfigProps, SendbirdChatInitParams } from './types';
38+
import { UIKitOptions, CommonUIKitConfigProps, SendbirdChatInitParams, CustomExtensionParams } from './types';
3939

4040
export type UserListQueryType = {
4141
hasNext?: boolean;
@@ -88,6 +88,7 @@ export interface SendbirdProviderProps extends CommonUIKitConfigProps {
8888
uikitOptions?: UIKitOptions;
8989
isUserIdUsedForNickname?: boolean;
9090
sdkInitParams?: SendbirdChatInitParams;
91+
customExtensionParams?: CustomExtensionParams;
9192
}
9293

9394
function Sendbird(props: SendbirdProviderProps) {
@@ -150,6 +151,7 @@ const SendbirdSDK = ({
150151
breakpoint = false,
151152
isUserIdUsedForNickname = true,
152153
sdkInitParams,
154+
customExtensionParams,
153155
}: SendbirdProviderProps): React.ReactElement => {
154156
const {
155157
logLevel = '',
@@ -182,6 +184,7 @@ const SendbirdSDK = ({
182184
customApiHost,
183185
customWebSocketHost,
184186
sdkInitParams,
187+
customExtensionParams,
185188
sdk,
186189
sdkDispatcher,
187190
userDispatcher,

src/lib/hooks/useConnect/__test__/setupConnection.spec.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,4 +221,23 @@ describe('useConnect/setupConnection/setUpParams', () => {
221221
});
222222
expect(newSdk).toEqual(mockSdk);
223223
});
224+
225+
it('should call init with customExtensionParams', async () => {
226+
const setUpConnectionProps = generateSetUpConnectionParams();
227+
const { appId, customExtensionParams } = setUpConnectionProps;
228+
const newSdk = setUpParams({ appId, customExtensionParams });
229+
// @ts-ignore
230+
expect(require('@sendbird/chat').init).toBeCalledWith({
231+
appId,
232+
newInstance: true,
233+
modules: [
234+
// @ts-ignore
235+
new (require('@sendbird/chat/groupChannel').GroupChannelModule)(),
236+
// @ts-ignore
237+
new (require('@sendbird/chat/openChannel').OpenChannelModule)(),
238+
],
239+
customExtensionParams,
240+
});
241+
expect(newSdk).toEqual(mockSdk);
242+
});
224243
});

src/lib/hooks/useConnect/connect.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export async function connect({
1717
accessToken,
1818
sdk,
1919
sdkInitParams,
20+
customExtensionParams,
2021
isMobile,
2122
}: ConnectTypes): Promise<void> {
2223
await disconnectSdk({
@@ -39,6 +40,7 @@ export async function connect({
3940
profileUrl,
4041
accessToken,
4142
sdkInitParams,
43+
customExtensionParams,
4244
isMobile,
4345
});
4446
}

src/lib/hooks/useConnect/index.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export default function useConnect(triggerTypes: TriggerTypes, staticTypes: Stat
1717
userDispatcher,
1818
initDashboardConfigs,
1919
sdkInitParams,
20+
customExtensionParams,
2021
} = staticTypes;
2122
logger?.info?.('SendbirdProvider | useConnect', { ...triggerTypes, ...staticTypes });
2223

@@ -39,6 +40,7 @@ export default function useConnect(triggerTypes: TriggerTypes, staticTypes: Stat
3940
initDashboardConfigs,
4041
isUserIdUsedForNickname,
4142
sdkInitParams,
43+
customExtensionParams,
4244
isMobile,
4345
});
4446
} catch (error) {
@@ -65,6 +67,7 @@ export default function useConnect(triggerTypes: TriggerTypes, staticTypes: Stat
6567
initDashboardConfigs,
6668
isUserIdUsedForNickname,
6769
sdkInitParams,
70+
customExtensionParams,
6871
isMobile,
6972
});
7073
} catch (error) {

src/lib/hooks/useConnect/setupConnection.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { USER_ACTIONS } from '../../dux/user/actionTypes';
88
import { isTextuallyNull } from '../../../utils';
99

1010
import { SetupConnectionTypes } from './types';
11-
import { SendbirdChatInitParams } from '../../types';
11+
import { CustomExtensionParams, SendbirdChatInitParams } from '../../types';
1212

1313
const APP_VERSION_STRING = '__react_dev_mode__';
1414

@@ -32,6 +32,7 @@ export function setUpParams({
3232
customApiHost?: string;
3333
customWebSocketHost?: string;
3434
sdkInitParams?: SendbirdChatInitParams;
35+
customExtensionParams?: CustomExtensionParams;
3536
}): SendbirdChat {
3637
const params = {
3738
modules: [
@@ -80,6 +81,7 @@ export async function setUpConnection({
8081
accessToken,
8182
isUserIdUsedForNickname,
8283
sdkInitParams,
84+
customExtensionParams,
8385
isMobile = false,
8486
}: SetupConnectionTypes): Promise<void> {
8587
return new Promise((resolve, reject) => {
@@ -116,6 +118,7 @@ export async function setUpConnection({
116118
isMobile
117119
? (DeviceOsPlatform?.MOBILE_WEB ?? 'mobile_web')
118120
: (DeviceOsPlatform?.WEB ?? 'web'),
121+
customExtensionParams,
119122
);
120123
newSdk.addExtension('sb_uikit', APP_VERSION_STRING);
121124

src/lib/hooks/useConnect/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { UserActionTypes } from '../../dux/user/actionTypes';
77

88
import { Logger } from '../../SendbirdState';
99

10-
import { SendbirdChatInitParams } from '../../types';
10+
import { SendbirdChatInitParams, CustomExtensionParams } from '../../types';
1111

1212
type SdkDispatcher = React.Dispatch<SdkActionTypes>;
1313
type UserDispatcher = React.Dispatch<UserActionTypes>;
@@ -35,6 +35,7 @@ export type StaticTypes = {
3535
userDispatcher: UserDispatcher;
3636
initDashboardConfigs: (sdk: SendbirdChat) => Promise<void>;
3737
sdkInitParams?: SendbirdChatInitParams;
38+
customExtensionParams?: CustomExtensionParams;
3839
};
3940

4041
export type ConnectTypes = TriggerTypes & StaticTypes;

src/lib/types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,3 +248,4 @@ export type UIKitOptions = PartialDeep<{
248248
}>;
249249

250250
export type SendbirdChatInitParams = Omit<SendbirdChatParams<Module[]>, 'appId'>;
251+
export type CustomExtensionParams = Record<string, string>;

src/modules/App/index.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ export default function App(props) {
4848
uikitOptions,
4949
isUserIdUsedForNickname,
5050
sdkInitParams,
51+
customExtensionParams,
5152
} = props;
5253
const [currentChannel, setCurrentChannel] = useState(null);
5354
return (
@@ -84,6 +85,7 @@ export default function App(props) {
8485
uikitOptions={uikitOptions}
8586
isUserIdUsedForNickname={isUserIdUsedForNickname}
8687
sdkInitParams={sdkInitParams}
88+
customExtensionParams={customExtensionParams}
8789
>
8890
<AppLayout
8991
isReactionEnabled={isReactionEnabled}
@@ -157,6 +159,7 @@ App.propTypes = {
157159
isMessageReceiptStatusEnabledOnChannelList: PropTypes.bool,
158160
isUserIdUsedForNickname: PropTypes.bool,
159161
sdkInitParams: PropTypes.shape({}),
162+
customExtensionParams: PropTypes.shape({}),
160163
};
161164

162165
App.defaultProps = {
@@ -198,4 +201,5 @@ App.defaultProps = {
198201
isMessageReceiptStatusEnabledOnChannelList: undefined,
199202
isUserIdUsedForNickname: true,
200203
sdkInitParams: undefined,
204+
customExtensionParams: undefined,
201205
};

src/modules/App/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
SendBirdProviderConfig,
1212
} from '../../types';
1313

14-
import { SendbirdChatInitParams } from '../../lib/types';
14+
import { CustomExtensionParams, SendbirdChatInitParams } from '../../lib/types';
1515

1616
export interface AppLayoutProps {
1717
isReactionEnabled?: boolean;
@@ -78,4 +78,5 @@ export default interface AppProps {
7878
isTypingIndicatorEnabledOnChannelList?: boolean;
7979
isMessageReceiptStatusEnabledOnChannelList?: boolean;
8080
sdkInitParams?: SendbirdChatInitParams;
81+
customExtensionParams?: CustomExtensionParams;
8182
}

0 commit comments

Comments
 (0)