|
1 | 1 | import { useCallback } from 'react'; |
2 | 2 |
|
3 | | -import { Logger, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils'; |
| 3 | +import { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils'; |
4 | 4 |
|
| 5 | +import type EmojiManager from '../libs/EmojiManager'; |
5 | 6 | import { useSendbirdChat } from './useContext'; |
6 | 7 | import usePushTokenRegistration from './usePushTokenRegistration'; |
7 | 8 |
|
8 | 9 | type ConnectOptions = { nickname?: string; accessToken?: string }; |
| 10 | + |
9 | 11 | const cacheRestrictCodes = [400300, 400301, 400302, 400310]; |
| 12 | +function isCacheRestrictedError(error: SendbirdError) { |
| 13 | + return cacheRestrictCodes.some((code) => error.code === code); |
| 14 | +} |
| 15 | + |
| 16 | +async function initEmoji(sdk: SendbirdChatSDK, emojiManager: EmojiManager) { |
| 17 | + await emojiManager.init(); |
| 18 | + if (sdk.appInfo.emojiHash !== emojiManager.emojiHash) { |
| 19 | + try { |
| 20 | + const container = await sdk.getAllEmoji(); |
| 21 | + await emojiManager.init(container); |
| 22 | + } catch {} |
| 23 | + } |
| 24 | +} |
10 | 25 |
|
11 | 26 | const useConnection = () => { |
12 | 27 | const { sdk, emojiManager, setCurrentUser, features } = useSendbirdChat(); |
@@ -35,23 +50,25 @@ const useConnection = () => { |
35 | 50 | }); |
36 | 51 | } |
37 | 52 |
|
| 53 | + await initEmoji(sdk, emojiManager); |
| 54 | + |
38 | 55 | Logger.debug('[useConnection]', 'connected! (online)'); |
39 | 56 | setCurrentUser(user); |
40 | | - sdk.getAllEmoji().then(emojiManager.init); |
41 | 57 |
|
42 | 58 | return user; |
43 | 59 | } catch (e) { |
44 | 60 | const error = e as unknown as SendbirdError; |
45 | 61 |
|
46 | 62 | if (sdk.isCacheEnabled) { |
47 | | - if (cacheRestrictCodes.some((code) => error.code === code)) { |
| 63 | + if (isCacheRestrictedError(error)) { |
48 | 64 | Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code); |
49 | 65 | Logger.warn('[useConnection]', 'clear cached-data'); |
50 | 66 | await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e)); |
51 | 67 | } else if (sdk.currentUser) { |
| 68 | + await initEmoji(sdk, emojiManager); |
| 69 | + |
52 | 70 | Logger.debug('[useConnection]', 'connected! (offline)'); |
53 | 71 | setCurrentUser(sdk.currentUser); |
54 | | - sdk.getAllEmoji().finally(emojiManager.init); |
55 | 72 | return sdk.currentUser; |
56 | 73 | } |
57 | 74 | } |
|
0 commit comments