Skip to content

Commit d8df7bb

Browse files
committed
chore(uikit): optimize emoji manager
1 parent cb5a8d8 commit d8df7bb

File tree

2 files changed

+32
-11
lines changed

2 files changed

+32
-11
lines changed

packages/uikit-react-native/src/hooks/useConnection.ts

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,27 @@
11
import { useCallback } from 'react';
22

3-
import { Logger, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';
3+
import { Logger, SendbirdChatSDK, SendbirdError, SendbirdUser } from '@sendbird/uikit-utils';
44

5+
import type EmojiManager from '../libs/EmojiManager';
56
import { useSendbirdChat } from './useContext';
67
import usePushTokenRegistration from './usePushTokenRegistration';
78

89
type ConnectOptions = { nickname?: string; accessToken?: string };
10+
911
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+
}
1025

1126
const useConnection = () => {
1227
const { sdk, emojiManager, setCurrentUser, features } = useSendbirdChat();
@@ -35,23 +50,25 @@ const useConnection = () => {
3550
});
3651
}
3752

53+
await initEmoji(sdk, emojiManager);
54+
3855
Logger.debug('[useConnection]', 'connected! (online)');
3956
setCurrentUser(user);
40-
sdk.getAllEmoji().then(emojiManager.init);
4157

4258
return user;
4359
} catch (e) {
4460
const error = e as unknown as SendbirdError;
4561

4662
if (sdk.isCacheEnabled) {
47-
if (cacheRestrictCodes.some((code) => error.code === code)) {
63+
if (isCacheRestrictedError(error)) {
4864
Logger.warn('[useConnection]', 'offline connect restricted', error.message, error.code);
4965
Logger.warn('[useConnection]', 'clear cached-data');
5066
await sdk.clearCachedData().catch((e) => Logger.warn('[useConnection]', 'clear cached-data failure', e));
5167
} else if (sdk.currentUser) {
68+
await initEmoji(sdk, emojiManager);
69+
5270
Logger.debug('[useConnection]', 'connected! (offline)');
5371
setCurrentUser(sdk.currentUser);
54-
sdk.getAllEmoji().finally(emojiManager.init);
5572
return sdk.currentUser;
5673
}
5774
}

packages/uikit-react-native/src/libs/EmojiManager.ts

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,17 +31,17 @@ class EmojiManager {
3131
) {}
3232

3333
private emojiStorage = {
34-
data: null as null | SendbirdEmojiContainer,
34+
container: null as null | SendbirdEmojiContainer,
3535
get: async () => {
36-
if (!this.emojiStorage.data) {
36+
if (!this.emojiStorage.container) {
3737
const strItem = await this.internalStorage.getItem(EmojiManager.key);
38-
if (strItem) this.emojiStorage.data = Object.freeze(JSON.parse(strItem));
38+
if (strItem) this.emojiStorage.container = Object.freeze(JSON.parse(strItem));
3939
}
40-
return this.emojiStorage.data;
40+
return this.emojiStorage.container;
4141
},
42-
set: async (data: SendbirdEmojiContainer) => {
43-
this.emojiStorage.data = Object.freeze(data);
44-
await this.internalStorage.setItem(EmojiManager.key, JSON.stringify(data));
42+
set: async (container: SendbirdEmojiContainer) => {
43+
this.emojiStorage.container = Object.freeze(container);
44+
await this.internalStorage.setItem(EmojiManager.key, JSON.stringify(container));
4545
},
4646
};
4747

@@ -75,6 +75,10 @@ class EmojiManager {
7575
this._allEmoji = Object.values(this._allEmojiMap);
7676
}
7777
};
78+
79+
public get emojiHash() {
80+
return this.emojiStorage.container?.emojiHash;
81+
}
7882
}
7983

8084
export default EmojiManager;

0 commit comments

Comments
 (0)