1+ import type { AsyncStorageStatic } from '@react-native-async-storage/async-storage' ;
12import React , { useLayoutEffect , useMemo , useRef , useState } from 'react' ;
23import { Platform } from 'react-native' ;
4+ import type { MMKV } from 'react-native-mmkv' ;
35import { SafeAreaProvider } from 'react-native-safe-area-context' ;
46
57import SendbirdChat , { DeviceOsPlatform , SendbirdChatParams , SendbirdPlatform , SendbirdProduct } from '@sendbird/chat' ;
@@ -15,15 +17,17 @@ import {
1517 UIKitThemeProvider ,
1618} from '@sendbird/uikit-react-native-foundation' ;
1719import { SBUConfig , UIKitConfigProvider } from '@sendbird/uikit-tools' ;
18- import type {
20+ import {
21+ Logger ,
22+ NOOP ,
1923 PartialDeep ,
2024 SendbirdChatSDK ,
2125 SendbirdGroupChannel ,
2226 SendbirdGroupChannelCreateParams ,
2327 SendbirdMember ,
2428 SendbirdUser ,
29+ useIsFirstMount ,
2530} from '@sendbird/uikit-utils' ;
26- import { NOOP , useIsFirstMount } from '@sendbird/uikit-utils' ;
2731
2832import { LocalizationContext , LocalizationProvider } from '../contexts/LocalizationCtx' ;
2933import { PlatformServiceProvider } from '../contexts/PlatformServiceCtx' ;
@@ -50,7 +54,7 @@ import type {
5054 PlayerServiceInterface ,
5155 RecorderServiceInterface ,
5256} from '../platform/types' ;
53- import type { ErrorBoundaryProps , LocalCacheStorage } from '../types' ;
57+ import { ErrorBoundaryProps , LocalCacheStorage } from '../types' ;
5458import VERSION from '../version' ;
5559import InternalErrorBoundaryContainer from './InternalErrorBoundaryContainer' ;
5660
@@ -78,13 +82,13 @@ const chatOmitKeys = [
7882 'appVersion' ,
7983 'localCacheEnabled' ,
8084 'useAsyncStorageStore' ,
85+ 'useMMKVStorageStore' ,
8186] as const ;
8287function sanitizeChatOptions < T extends Record < string , unknown > > ( chatOptions : T ) : T {
8388 const opts = { ...chatOptions } ;
8489 chatOmitKeys . forEach ( ( key ) => delete opts [ key ] ) ;
8590 return opts ;
8691}
87-
8892export type SendbirdUIKitContainerProps = React . PropsWithChildren < {
8993 appId : string ;
9094 platformServices : {
@@ -95,11 +99,11 @@ export type SendbirdUIKitContainerProps = React.PropsWithChildren<{
9599 player : PlayerServiceInterface ;
96100 recorder : RecorderServiceInterface ;
97101 } ;
98- chatOptions : {
99- localCacheStorage : LocalCacheStorage ;
100- onInitialized ?: ( sdkInstance : SendbirdChatSDK ) => SendbirdChatSDK ;
101- } & Partial < ChatOmittedInitParams > &
102- Partial < ChatRelatedFeaturesInUIKit > ;
102+ chatOptions : Partial < ChatOmittedInitParams > &
103+ Partial < ChatRelatedFeaturesInUIKit > & {
104+ onInitialized ?: ( sdkInstance : SendbirdChatSDK ) => SendbirdChatSDK ;
105+ localCacheStorage : LocalCacheStorage ;
106+ } ;
103107 uikitOptions ?: PartialDeep < {
104108 common : SBUConfig [ 'common' ] ;
105109 groupChannel : Omit < SBUConfig [ 'groupChannel' ] [ 'channel' ] , 'enableReactionsSupergroup' > & {
@@ -162,6 +166,10 @@ const SendbirdUIKitContainer = (props: SendbirdUIKitContainerProps) => {
162166
163167 if ( ! chatOptions . localCacheStorage ) {
164168 throw new Error ( 'SendbirdUIKitContainer: chatOptions.localCacheStorage is required' ) ;
169+ } else if ( 'getItem' in chatOptions . localCacheStorage ) {
170+ Logger . warn (
171+ 'SendbirdUIKitContainer: localCacheStorage for `AsyncStorage` is deprecated. Please use `MMKV` instead.' ,
172+ ) ;
165173 }
166174
167175 const defaultStringSet = localization ?. stringSet ?? StringSetEn ;
@@ -171,7 +179,7 @@ const SendbirdUIKitContainer = (props: SendbirdUIKitContainerProps) => {
171179
172180 const [ internalStorage ] = useState ( ( ) => new InternalLocalCacheStorage ( chatOptions . localCacheStorage ) ) ;
173181 const [ sdkInstance , setSdkInstance ] = useState < SendbirdChatSDK > ( ( ) => {
174- const sendbird = initializeSendbird ( appId , { internalStorage , ... sanitizeChatOptions ( chatOptions ) } ) ;
182+ const sendbird = initializeSendbird ( appId , sanitizeChatOptions ( chatOptions ) ) ;
175183 unsubscribes . current = sendbird . unsubscribes ;
176184 return sendbird . chatSDK ;
177185 } ) ;
@@ -183,7 +191,7 @@ const SendbirdUIKitContainer = (props: SendbirdUIKitContainerProps) => {
183191
184192 useLayoutEffect ( ( ) => {
185193 if ( ! isFirstMount ) {
186- const sendbird = initializeSendbird ( appId , { internalStorage , ... sanitizeChatOptions ( chatOptions ) } ) ;
194+ const sendbird = initializeSendbird ( appId , sanitizeChatOptions ( chatOptions ) ) ;
187195 setSdkInstance ( sendbird . chatSDK ) ;
188196 unsubscribes . current = sendbird . unsubscribes ;
189197 }
@@ -288,21 +296,23 @@ const SendbirdUIKitContainer = (props: SendbirdUIKitContainerProps) => {
288296} ;
289297
290298interface InitOptions extends ChatOmittedInitParams {
291- internalStorage : InternalLocalCacheStorage ;
299+ localCacheStorage : LocalCacheStorage ;
292300 onInitialized ?: ( sdk : SendbirdChatSDK ) => SendbirdChatSDK ;
293301}
294302const initializeSendbird = ( appId : string , options : InitOptions ) => {
295303 let chatSDK : SendbirdChatSDK ;
296304 const unsubscribes : Array < ( ) => void > = [ ] ;
297- const { internalStorage , onInitialized, ...chatInitParams } = options ;
305+ const { localCacheStorage , onInitialized, ...chatInitParams } = options ;
298306
307+ const isMMKVStorage = 'getString' in localCacheStorage ;
299308 chatSDK = SendbirdChat . init ( {
300309 ...chatInitParams ,
301310 appId,
302311 newInstance : true ,
303312 modules : [ new GroupChannelModule ( ) , new OpenChannelModule ( ) ] ,
304313 localCacheEnabled : true ,
305- useAsyncStorageStore : internalStorage as never ,
314+ useMMKVStorageStore : isMMKVStorage ? ( localCacheStorage as MMKV ) : undefined ,
315+ useAsyncStorageStore : ! isMMKVStorage ? ( localCacheStorage as AsyncStorageStatic ) : undefined ,
306316 } ) ;
307317
308318 if ( onInitialized ) {
0 commit comments