Skip to content

Commit 4543aa3

Browse files
authored
fix: channel requests should occur after the sdk is initialized (#994)
## Description Channel requests should occur after the sdk is initialized. ticket: [CLNP-2440] [CLNP-2440]: https://sendbird.atlassian.net/browse/CLNP-2440?atlOrigin=eyJpIjoiNWRkNTljNzYxNjVmNDY3MDlhMDU5Y2ZhYzA5YTRkZjUiLCJwIjoiZ2l0aHViLWNvbS1KU1cifQ
1 parent 495a751 commit 4543aa3

File tree

2 files changed

+25
-14
lines changed

2 files changed

+25
-14
lines changed

src/hooks/useAsyncRequest.ts

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from 'react';
1+
import { DependencyList, useEffect, useState } from 'react';
22

33
interface Request<Response> {
44
(): Promise<Response>;
@@ -7,6 +7,8 @@ interface Request<Response> {
77

88
interface Options {
99
resetResponseOnRefresh?: boolean;
10+
persistLoadingIfNoResponse?: boolean;
11+
deps?: DependencyList;
1012
}
1113

1214
interface State<T, E = unknown> {
@@ -26,7 +28,11 @@ export function useAsyncRequest<T>(request: Request<T>, options?: Options): Retu
2628
try {
2729
setState((prev) => ({ loading: true, error: undefined, response: options?.resetResponseOnRefresh ? undefined : prev.response }));
2830
const response = await request();
29-
setState((prev) => ({ ...prev, response, loading: false }));
31+
if (response) {
32+
setState((prev) => ({ ...prev, response, loading: false }));
33+
} else {
34+
setState((prev) => ({ ...prev, loading: Boolean(options?.persistLoadingIfNoResponse) }));
35+
}
3036
} catch (error) {
3137
setState((prev) => ({ ...prev, error, loading: false }));
3238
}
@@ -39,7 +45,7 @@ export function useAsyncRequest<T>(request: Request<T>, options?: Options): Retu
3945
request.cancel();
4046
}
4147
};
42-
}, []);
48+
}, options?.deps ?? []);
4349

4450
return { ...state, refresh: updateWithRequest };
4551
}

src/modules/ChannelSettings/context/ChannelSettingsProvider.tsx

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,24 +85,29 @@ const ChannelSettingsProvider = ({
8585
async () => {
8686
logger.info('ChannelSettings: fetching channel');
8787

88-
let errorMessage: string | undefined;
89-
9088
if (!channelUrl) {
91-
errorMessage = 'channel url is required';
89+
logger.warning('ChannelSettings: channel url is required');
90+
return;
9291
} else if (!sdkStore.initialized || !sdkStore.sdk) {
93-
errorMessage = 'SDK is not initialized';
92+
logger.warning('ChannelSettings: SDK is not initialized');
93+
return;
9494
} else if (!sdkStore.sdk.groupChannel) {
95-
errorMessage = 'GroupChannelModule is not specified in the SDK';
95+
logger.warning('ChannelSettings: GroupChannelModule is not specified in the SDK');
96+
return;
9697
}
9798

98-
if (errorMessage) {
99-
logger.warning(`ChannelSettings: ${errorMessage}`);
100-
throw new Error(errorMessage);
99+
try {
100+
return await sdkStore.sdk.groupChannel.getChannel(channelUrl);
101+
} catch (error) {
102+
logger.error('ChannelSettings: fetching channel error:', error.message);
103+
throw error;
101104
}
102-
103-
return sdkStore.sdk.groupChannel.getChannel(channelUrl);
104105
},
105-
{ resetResponseOnRefresh: true },
106+
{
107+
resetResponseOnRefresh: true,
108+
persistLoadingIfNoResponse: true,
109+
deps: [sdkStore.initialized, sdkStore.sdk.groupChannel],
110+
},
106111
);
107112

108113
useEffect(() => {

0 commit comments

Comments
 (0)