@sendbird/uikit-react-native 3.11.1 → 3.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  2. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  3. package/lib/commonjs/libs/InternalLocalCacheStorage.js +6 -1
  4. package/lib/commonjs/libs/InternalLocalCacheStorage.js.map +1 -1
  5. package/lib/commonjs/platform/createFileService.expo.js +3 -3
  6. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  7. package/lib/commonjs/platform/createMediaService.expo.js +1 -1
  8. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  9. package/lib/commonjs/platform/createNotificationService.native.js +31 -6
  10. package/lib/commonjs/platform/createNotificationService.native.js.map +1 -1
  11. package/lib/commonjs/types.js.map +1 -1
  12. package/lib/commonjs/utils/expoBackwardUtils.js +51 -1
  13. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  14. package/lib/commonjs/version.js +1 -1
  15. package/lib/commonjs/version.js.map +1 -1
  16. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +0 -3
  17. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  18. package/lib/module/libs/InternalLocalCacheStorage.js +6 -1
  19. package/lib/module/libs/InternalLocalCacheStorage.js.map +1 -1
  20. package/lib/module/platform/createFileService.expo.js +3 -3
  21. package/lib/module/platform/createFileService.expo.js.map +1 -1
  22. package/lib/module/platform/createMediaService.expo.js +1 -1
  23. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  24. package/lib/module/platform/createNotificationService.native.js +32 -6
  25. package/lib/module/platform/createNotificationService.native.js.map +1 -1
  26. package/lib/module/types.js.map +1 -1
  27. package/lib/module/utils/expoBackwardUtils.js +52 -1
  28. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  29. package/lib/module/version.js +1 -1
  30. package/lib/module/version.js.map +1 -1
  31. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  32. package/lib/typescript/src/domain/openChannel/component/OpenChannelHeader.d.ts +1 -1
  33. package/lib/typescript/src/hooks/useChannelInputItems.d.ts +1 -1
  34. package/lib/typescript/src/platform/createNotificationService.native.d.ts +13 -1
  35. package/lib/typescript/src/types.d.ts +4 -1
  36. package/lib/typescript/src/utils/expoBackwardUtils.d.ts +36 -0
  37. package/lib/typescript/src/version.d.ts +1 -1
  38. package/package.json +14 -5
  39. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +0 -3
  40. package/src/libs/InternalLocalCacheStorage.ts +6 -1
  41. package/src/platform/createFileService.expo.ts +5 -3
  42. package/src/platform/createMediaService.expo.tsx +1 -1
  43. package/src/platform/createNotificationService.native.ts +53 -7
  44. package/src/types.ts +5 -1
  45. package/src/utils/expoBackwardUtils.ts +71 -1
  46. package/src/version.ts +1 -1
@@ -226,9 +226,6 @@ const GroupChannelMessageList = props => {
226
226
  timeout: 250
227
227
  });
228
228
  }
229
- },
230
- onChannelChanged(channel) {
231
- if ((0, _uikitUtils.isDifferentChannel)(channel, props.channel)) return;
232
229
  }
233
230
  });
234
231
  (0, _react.useEffect)(() => {
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitReactNativeFoundation","_uikitTools","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","sbOptions","groupChannelFragmentOptions","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","groupChannelPubSub","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToMessageId","onPressReplyMessageInThread","MessageList","isFirstMount","useIsFirstMount","hasSeenNewLineRef","useRef","isNewLineInViewportRef","isNewLineExistInChannelRef","scrolledAwayFromBottomRef","isVisibleUnreadMessageFloating","setIsVisibleUnreadMessageFloating","useState","viewableMessages","hasUserMarkedAsUnreadRef","unreadFirstMessage","setUnreadFirstMessage","undefined","pendingBottomReachedRef","updateHasSeenNewLine","useCallback","hasSeenNewLine","current","_props$onNewLineSeenC","onNewLineSeenChange","updateHasUserMarkedAsUnread","hasUserMarkedAsUnread","_props$onUserMarkedAs","onUserMarkedAsUnreadChange","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessage","messages","find","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","timestamp","Date","now","messageId","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","onScrolledAwayFromBottom","value","scrollToBottom","hasNext","onResetMessageList","onPressUnreadMessagesFloatingCloseButton","_props$resetNewMessag","resetNewMessages","confirmAndMarkAsRead","url","getPrevNonSilentMessage","prevMessageIndex","prevMessage","silent","findFirstUnreadMessage","isNewLineExistInChannel","uikit","groupChannel","enableMarkAsUnread","msg","index","_props$hasPrevious","isMarkedAsUnreadMessage","myLastRead","prevNonSilentMessage","hasNoPreviousAndNoPrevMessage","hasPrevious","prevMessageIsRead","isMessageUnread","useEffect","foundUnreadFirstMessage","processNewLineVisibility","unreadFirstMsg","_viewableMessages$cur","isNewLineInViewport","some","message","updateUnreadMessagesFloatingProps","newMessages","markAsUnread","markAsRead","onViewableItemsChanged","info","viewableItems","filter","token","item","map","onPressMarkAsUnreadMessage","unreadMessagesFloatingPropsRef","canAutoMarkAsRead","visible","unreadMessageCount","onPressClose","useGroupChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","onChannelChanged","subscribe","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","foundFirstUnreadMessage","pubsub","payload","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","searchItem","onPressParentMessage","parentMessage","childMessage","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","onBottomReached","currentTime","elapsedTime","timeoutThreshold","_props$onBottomReache","_props$onBottomReache2","createElement","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","_default","exports","React","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import type { ViewToken } from '@react-native/virtualized-lists';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n SendbirdMessage,\n SendbirdSendableMessage,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useFreshCallback,\n useIsFirstMount,\n} from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { UnreadMessagesFloatingProps } from '../../../components/UnreadMessagesFloating';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToMessageId, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const isFirstMount = useIsFirstMount();\n\n const hasSeenNewLineRef = useRef(false);\n const isNewLineInViewportRef = useRef(false);\n const isNewLineExistInChannelRef = useRef(false);\n const scrolledAwayFromBottomRef = useRef(false);\n const [isVisibleUnreadMessageFloating, setIsVisibleUnreadMessageFloating] = useState(false);\n const viewableMessages = useRef<SendbirdMessage[]>();\n const hasUserMarkedAsUnreadRef = useRef(false);\n const [unreadFirstMessage, setUnreadFirstMessage] = useState<SendbirdMessage | undefined>(undefined);\n const pendingBottomReachedRef = useRef<{ timeout: number; timestamp: number } | null>(null);\n\n const updateHasSeenNewLine = useCallback(\n (hasSeenNewLine: boolean) => {\n if (hasSeenNewLineRef.current !== hasSeenNewLine) {\n hasSeenNewLineRef.current = hasSeenNewLine;\n props.onNewLineSeenChange?.(hasSeenNewLine);\n }\n },\n [props.onNewLineSeenChange],\n );\n\n const updateHasUserMarkedAsUnread = useCallback(\n (hasUserMarkedAsUnread: boolean) => {\n if (hasUserMarkedAsUnreadRef.current !== hasUserMarkedAsUnread) {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n props.onUserMarkedAsUnreadChange?.(hasUserMarkedAsUnread);\n }\n },\n [props.onUserMarkedAsUnreadChange],\n );\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessage = props.messages.find((it) => it.createdAt === createdAt);\n const isIncludedInList = !!foundMessage;\n pendingBottomReachedRef.current = null;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n pendingBottomReachedRef.current = { timeout, timestamp: Date.now() };\n lazyScrollToMessageId({ messageId: foundMessage.messageId, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n scrolledAwayFromBottomRef.current = value;\n props.onScrolledAwayFromBottom(value);\n });\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n const onPressUnreadMessagesFloatingCloseButton = useCallback(() => {\n updateHasSeenNewLine(true);\n updateHasUserMarkedAsUnread(false);\n props.resetNewMessages?.();\n confirmAndMarkAsRead([props.channel]);\n }, [updateHasSeenNewLine, updateHasUserMarkedAsUnread, props.channel.url, props.resetNewMessages]);\n\n const getPrevNonSilentMessage = useCallback(\n (messages: SendbirdMessage[], prevMessageIndex: number): SendbirdMessage | null => {\n if (messages.length <= prevMessageIndex) {\n return null;\n }\n\n const prevMessage = messages[prevMessageIndex];\n if (prevMessage) {\n if (prevMessage.silent) {\n return getPrevNonSilentMessage(messages, prevMessageIndex + 1);\n } else {\n return prevMessage;\n }\n }\n return null;\n },\n [],\n );\n\n const findFirstUnreadMessage = useFreshCallback((isNewLineExistInChannel: boolean) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread || !isNewLineExistInChannel) {\n return;\n }\n\n return props.messages.find((msg, index) => {\n if (msg.silent) {\n return false;\n }\n\n const isMarkedAsUnreadMessage = props.channel.myLastRead === msg.createdAt - 1;\n if (isMarkedAsUnreadMessage) {\n return true;\n }\n\n const prevNonSilentMessage = getPrevNonSilentMessage(props.messages, index + 1);\n const hasNoPreviousAndNoPrevMessage = !props.hasPrevious?.() && prevNonSilentMessage == null;\n const prevMessageIsRead =\n prevNonSilentMessage != null && prevNonSilentMessage.createdAt <= props.channel.myLastRead;\n const isMessageUnread = props.channel.myLastRead < msg.createdAt;\n return (hasNoPreviousAndNoPrevMessage || prevMessageIsRead) && isMessageUnread;\n });\n });\n\n useEffect(() => {\n if (!unreadFirstMessage) {\n const foundUnreadFirstMessage = findFirstUnreadMessage(props.isNewLineExistInChannel ?? false);\n if (foundUnreadFirstMessage) {\n processNewLineVisibility(foundUnreadFirstMessage);\n setUnreadFirstMessage(foundUnreadFirstMessage);\n }\n }\n }, [props.messages, props.channel.myLastRead, sbOptions.uikit.groupChannel.channel.enableMarkAsUnread]);\n\n const processNewLineVisibility = useFreshCallback((unreadFirstMsg: SendbirdMessage | undefined) => {\n const isNewLineInViewport = !!viewableMessages.current?.some(\n (message) => message.messageId === unreadFirstMsg?.messageId,\n );\n\n if (isNewLineInViewportRef.current !== isNewLineInViewport) {\n isNewLineInViewportRef.current = isNewLineInViewport;\n updateUnreadMessagesFloatingProps();\n if (!isNewLineInViewport || hasSeenNewLineRef.current) {\n return;\n }\n\n updateHasSeenNewLine(true);\n if (hasUserMarkedAsUnreadRef.current) {\n return;\n }\n\n if (0 < props.newMessages.length) {\n props.channel.markAsUnread(props.newMessages[0]);\n } else {\n props.channel.markAsRead();\n }\n }\n });\n\n const onViewableItemsChanged = useFreshCallback(\n async (info: { viewableItems: Array<ViewToken<SendbirdMessage>>; changed: Array<ViewToken<SendbirdMessage>> }) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n return;\n }\n\n viewableMessages.current = info.viewableItems.filter((token) => token.item).map((token) => token.item);\n processNewLineVisibility(unreadFirstMessage);\n },\n );\n\n const onPressMarkAsUnreadMessage = useCallback(\n async (message: SendbirdMessage) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && message) {\n await props.channel.markAsUnread(message);\n updateHasUserMarkedAsUnread(true);\n }\n },\n [sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, updateHasUserMarkedAsUnread],\n );\n\n useEffect(() => {\n isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current;\n }, [props.isNewLineExistInChannel, viewableMessages.current]);\n\n const unreadMessagesFloatingPropsRef = useRef<UnreadMessagesFloatingProps>();\n const updateUnreadMessagesFloatingProps = useFreshCallback(() => {\n const canAutoMarkAsRead =\n !scrolledAwayFromBottomRef.current &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current);\n\n unreadMessagesFloatingPropsRef.current = {\n visible:\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread &&\n !canAutoMarkAsRead &&\n isNewLineExistInChannelRef.current &&\n 0 < props.channel.unreadMessageCount &&\n !isNewLineInViewportRef.current,\n onPressClose: onPressUnreadMessagesFloatingCloseButton,\n unreadMessageCount: props.channel.unreadMessageCount,\n };\n if (isVisibleUnreadMessageFloating !== unreadMessagesFloatingPropsRef.current.visible) {\n setIsVisibleUnreadMessageFloating(unreadMessagesFloatingPropsRef.current.visible);\n }\n });\n\n useEffect(() => {\n updateUnreadMessagesFloatingProps();\n }, [\n isNewLineExistInChannelRef.current,\n props.channel.unreadMessageCount,\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread,\n ]);\n\n useGroupChannelHandler(sdk, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n onChannelChanged(channel) {\n if (isDifferentChannel(channel, props.channel)) return;\n },\n });\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n case 'ON_MARKED_AS_READ_BY_CURRENT_USER': {\n updateUnreadMessagesFloatingProps();\n break;\n }\n case 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER': {\n isNewLineExistInChannelRef.current = true;\n const foundFirstUnreadMessage = findFirstUnreadMessage(true);\n processNewLineVisibility(foundFirstUnreadMessage);\n setUnreadFirstMessage(foundFirstUnreadMessage);\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n const onBottomReached = useFreshCallback(() => {\n if (props.hasNext()) {\n if (pendingBottomReachedRef.current) {\n const currentTime = Date.now();\n const elapsedTime = currentTime - pendingBottomReachedRef.current.timestamp;\n\n const timeoutThreshold = 500;\n if (elapsedTime >= pendingBottomReachedRef.current.timeout + timeoutThreshold) {\n props.onBottomReached?.();\n pendingBottomReachedRef.current = null;\n }\n } else {\n props.onBottomReached?.();\n }\n }\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onViewableItemsChanged={onViewableItemsChanged}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n onPressMarkAsUnreadMessage={onPressMarkAsUnreadMessage}\n onBottomReached={onBottomReached}\n unreadFirstMessage={unreadFirstMessage}\n unreadMessagesFloatingProps={unreadMessagesFloatingPropsRef.current}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitReactNativeFoundation","_uikitTools","_uikitUtils","_ChannelMessageList","_interopRequireDefault","_constants","_useContext","_moduleContext","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","GroupChannelMessageList","props","toast","useToast","STRINGS","useLocalization","sdk","sbOptions","groupChannelFragmentOptions","useSendbirdChat","setMessageToEdit","setMessageToReply","useContext","GroupChannelContexts","Fragment","groupChannelPubSub","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToMessageId","onPressReplyMessageInThread","MessageList","isFirstMount","useIsFirstMount","hasSeenNewLineRef","useRef","isNewLineInViewportRef","isNewLineExistInChannelRef","scrolledAwayFromBottomRef","isVisibleUnreadMessageFloating","setIsVisibleUnreadMessageFloating","useState","viewableMessages","hasUserMarkedAsUnreadRef","unreadFirstMessage","setUnreadFirstMessage","undefined","pendingBottomReachedRef","updateHasSeenNewLine","useCallback","hasSeenNewLine","current","_props$onNewLineSeenC","onNewLineSeenChange","updateHasUserMarkedAsUnread","hasUserMarkedAsUnread","_props$onUserMarkedAs","onUserMarkedAsUnreadChange","scrollToMessageWithCreatedAt","useFreshCallback","createdAt","focusAnimated","timeout","foundMessage","messages","find","it","isIncludedInList","setTimeout","onUpdateSearchItem","startingPoint","MESSAGE_FOCUS_ANIMATION_DELAY","timestamp","Date","now","messageId","animated","channel","messageOffsetTimestamp","onResetMessageListWithStartingPoint","catch","_","onScrolledAwayFromBottom","value","scrollToBottom","hasNext","onResetMessageList","onPressUnreadMessagesFloatingCloseButton","_props$resetNewMessag","resetNewMessages","confirmAndMarkAsRead","url","getPrevNonSilentMessage","prevMessageIndex","prevMessage","silent","findFirstUnreadMessage","isNewLineExistInChannel","uikit","groupChannel","enableMarkAsUnread","msg","index","_props$hasPrevious","isMarkedAsUnreadMessage","myLastRead","prevNonSilentMessage","hasNoPreviousAndNoPrevMessage","hasPrevious","prevMessageIsRead","isMessageUnread","useEffect","foundUnreadFirstMessage","processNewLineVisibility","unreadFirstMsg","_viewableMessages$cur","isNewLineInViewport","some","message","updateUnreadMessagesFloatingProps","newMessages","markAsUnread","markAsRead","onViewableItemsChanged","info","viewableItems","filter","token","item","map","onPressMarkAsUnreadMessage","unreadMessagesFloatingPropsRef","canAutoMarkAsRead","visible","unreadMessageCount","onPressClose","useGroupChannelHandler","onReactionUpdated","event","isDifferentChannel","recentMessage","isRecentMessage","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","subscribe","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","foundFirstUnreadMessage","pubsub","payload","MESSAGE_SEARCH_SAFE_SCROLL_DELAY","searchItem","onPressParentMessage","parentMessage","childMessage","replyType","threadReplySelectType","show","TOAST","FIND_PARENT_MSG_ERROR","canScrollToParent","onBottomReached","currentTime","elapsedTime","timeoutThreshold","_props$onBottomReache","_props$onBottomReache2","createElement","ref","onReplyMessage","onReplyInThreadMessage","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","unreadMessagesFloatingProps","_default","exports","React","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import type { ViewToken } from '@react-native/virtualized-lists';\nimport React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\n\nimport { useToast } from '@sendbird/uikit-react-native-foundation';\nimport { useGroupChannelHandler } from '@sendbird/uikit-tools';\nimport {\n SendbirdMessage,\n SendbirdSendableMessage,\n confirmAndMarkAsRead,\n isDifferentChannel,\n useFreshCallback,\n useIsFirstMount,\n} from '@sendbird/uikit-utils';\n\nimport ChannelMessageList from '../../../components/ChannelMessageList';\nimport { UnreadMessagesFloatingProps } from '../../../components/UnreadMessagesFloating';\nimport { MESSAGE_FOCUS_ANIMATION_DELAY, MESSAGE_SEARCH_SAFE_SCROLL_DELAY } from '../../../constants';\nimport { GroupChannelFragmentOptionsPubSubContextPayload } from '../../../contexts/SendbirdChatCtx';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => {\n const toast = useToast();\n const { STRINGS } = useLocalization();\n const { sdk, sbOptions, groupChannelFragmentOptions } = useSendbirdChat();\n const { setMessageToEdit, setMessageToReply } = useContext(GroupChannelContexts.Fragment);\n const groupChannelPubSub = useContext(GroupChannelContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToMessageId, onPressReplyMessageInThread } = useContext(\n GroupChannelContexts.MessageList,\n );\n\n const isFirstMount = useIsFirstMount();\n\n const hasSeenNewLineRef = useRef(false);\n const isNewLineInViewportRef = useRef(false);\n const isNewLineExistInChannelRef = useRef(false);\n const scrolledAwayFromBottomRef = useRef(false);\n const [isVisibleUnreadMessageFloating, setIsVisibleUnreadMessageFloating] = useState(false);\n const viewableMessages = useRef<SendbirdMessage[]>();\n const hasUserMarkedAsUnreadRef = useRef(false);\n const [unreadFirstMessage, setUnreadFirstMessage] = useState<SendbirdMessage | undefined>(undefined);\n const pendingBottomReachedRef = useRef<{ timeout: number; timestamp: number } | null>(null);\n\n const updateHasSeenNewLine = useCallback(\n (hasSeenNewLine: boolean) => {\n if (hasSeenNewLineRef.current !== hasSeenNewLine) {\n hasSeenNewLineRef.current = hasSeenNewLine;\n props.onNewLineSeenChange?.(hasSeenNewLine);\n }\n },\n [props.onNewLineSeenChange],\n );\n\n const updateHasUserMarkedAsUnread = useCallback(\n (hasUserMarkedAsUnread: boolean) => {\n if (hasUserMarkedAsUnreadRef.current !== hasUserMarkedAsUnread) {\n hasUserMarkedAsUnreadRef.current = hasUserMarkedAsUnread;\n props.onUserMarkedAsUnreadChange?.(hasUserMarkedAsUnread);\n }\n },\n [props.onUserMarkedAsUnreadChange],\n );\n\n const scrollToMessageWithCreatedAt = useFreshCallback(\n (createdAt: number, focusAnimated: boolean, timeout: number): boolean => {\n const foundMessage = props.messages.find((it) => it.createdAt === createdAt);\n const isIncludedInList = !!foundMessage;\n pendingBottomReachedRef.current = null;\n\n if (isIncludedInList) {\n if (focusAnimated) {\n setTimeout(() => props.onUpdateSearchItem({ startingPoint: createdAt }), MESSAGE_FOCUS_ANIMATION_DELAY);\n }\n pendingBottomReachedRef.current = { timeout, timestamp: Date.now() };\n lazyScrollToMessageId({ messageId: foundMessage.messageId, animated: true, timeout });\n } else {\n if (props.channel.messageOffsetTimestamp <= createdAt) {\n if (focusAnimated) {\n props.onUpdateSearchItem({ startingPoint: createdAt });\n }\n props.onResetMessageListWithStartingPoint(createdAt).catch((_) => {});\n } else {\n return false;\n }\n }\n return true;\n },\n );\n\n const onScrolledAwayFromBottom = useFreshCallback((value: boolean) => {\n scrolledAwayFromBottomRef.current = value;\n props.onScrolledAwayFromBottom(value);\n });\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onUpdateSearchItem(undefined);\n onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n const onPressUnreadMessagesFloatingCloseButton = useCallback(() => {\n updateHasSeenNewLine(true);\n updateHasUserMarkedAsUnread(false);\n props.resetNewMessages?.();\n confirmAndMarkAsRead([props.channel]);\n }, [updateHasSeenNewLine, updateHasUserMarkedAsUnread, props.channel.url, props.resetNewMessages]);\n\n const getPrevNonSilentMessage = useCallback(\n (messages: SendbirdMessage[], prevMessageIndex: number): SendbirdMessage | null => {\n if (messages.length <= prevMessageIndex) {\n return null;\n }\n\n const prevMessage = messages[prevMessageIndex];\n if (prevMessage) {\n if (prevMessage.silent) {\n return getPrevNonSilentMessage(messages, prevMessageIndex + 1);\n } else {\n return prevMessage;\n }\n }\n return null;\n },\n [],\n );\n\n const findFirstUnreadMessage = useFreshCallback((isNewLineExistInChannel: boolean) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread || !isNewLineExistInChannel) {\n return;\n }\n\n return props.messages.find((msg, index) => {\n if (msg.silent) {\n return false;\n }\n\n const isMarkedAsUnreadMessage = props.channel.myLastRead === msg.createdAt - 1;\n if (isMarkedAsUnreadMessage) {\n return true;\n }\n\n const prevNonSilentMessage = getPrevNonSilentMessage(props.messages, index + 1);\n const hasNoPreviousAndNoPrevMessage = !props.hasPrevious?.() && prevNonSilentMessage == null;\n const prevMessageIsRead =\n prevNonSilentMessage != null && prevNonSilentMessage.createdAt <= props.channel.myLastRead;\n const isMessageUnread = props.channel.myLastRead < msg.createdAt;\n return (hasNoPreviousAndNoPrevMessage || prevMessageIsRead) && isMessageUnread;\n });\n });\n\n useEffect(() => {\n if (!unreadFirstMessage) {\n const foundUnreadFirstMessage = findFirstUnreadMessage(props.isNewLineExistInChannel ?? false);\n if (foundUnreadFirstMessage) {\n processNewLineVisibility(foundUnreadFirstMessage);\n setUnreadFirstMessage(foundUnreadFirstMessage);\n }\n }\n }, [props.messages, props.channel.myLastRead, sbOptions.uikit.groupChannel.channel.enableMarkAsUnread]);\n\n const processNewLineVisibility = useFreshCallback((unreadFirstMsg: SendbirdMessage | undefined) => {\n const isNewLineInViewport = !!viewableMessages.current?.some(\n (message) => message.messageId === unreadFirstMsg?.messageId,\n );\n\n if (isNewLineInViewportRef.current !== isNewLineInViewport) {\n isNewLineInViewportRef.current = isNewLineInViewport;\n updateUnreadMessagesFloatingProps();\n if (!isNewLineInViewport || hasSeenNewLineRef.current) {\n return;\n }\n\n updateHasSeenNewLine(true);\n if (hasUserMarkedAsUnreadRef.current) {\n return;\n }\n\n if (0 < props.newMessages.length) {\n props.channel.markAsUnread(props.newMessages[0]);\n } else {\n props.channel.markAsRead();\n }\n }\n });\n\n const onViewableItemsChanged = useFreshCallback(\n async (info: { viewableItems: Array<ViewToken<SendbirdMessage>>; changed: Array<ViewToken<SendbirdMessage>> }) => {\n if (!sbOptions.uikit.groupChannel.channel.enableMarkAsUnread) {\n return;\n }\n\n viewableMessages.current = info.viewableItems.filter((token) => token.item).map((token) => token.item);\n processNewLineVisibility(unreadFirstMessage);\n },\n );\n\n const onPressMarkAsUnreadMessage = useCallback(\n async (message: SendbirdMessage) => {\n if (sbOptions.uikit.groupChannel.channel.enableMarkAsUnread && message) {\n await props.channel.markAsUnread(message);\n updateHasUserMarkedAsUnread(true);\n }\n },\n [sbOptions.uikit.groupChannel.channel.enableMarkAsUnread, updateHasUserMarkedAsUnread],\n );\n\n useEffect(() => {\n isNewLineExistInChannelRef.current = !!props.isNewLineExistInChannel && !!viewableMessages.current;\n }, [props.isNewLineExistInChannel, viewableMessages.current]);\n\n const unreadMessagesFloatingPropsRef = useRef<UnreadMessagesFloatingProps>();\n const updateUnreadMessagesFloatingProps = useFreshCallback(() => {\n const canAutoMarkAsRead =\n !scrolledAwayFromBottomRef.current &&\n !hasUserMarkedAsUnreadRef.current &&\n (hasSeenNewLineRef.current || !isNewLineExistInChannelRef.current);\n\n unreadMessagesFloatingPropsRef.current = {\n visible:\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread &&\n !canAutoMarkAsRead &&\n isNewLineExistInChannelRef.current &&\n 0 < props.channel.unreadMessageCount &&\n !isNewLineInViewportRef.current,\n onPressClose: onPressUnreadMessagesFloatingCloseButton,\n unreadMessageCount: props.channel.unreadMessageCount,\n };\n if (isVisibleUnreadMessageFloating !== unreadMessagesFloatingPropsRef.current.visible) {\n setIsVisibleUnreadMessageFloating(unreadMessagesFloatingPropsRef.current.visible);\n }\n });\n\n useEffect(() => {\n updateUnreadMessagesFloatingProps();\n }, [\n isNewLineExistInChannelRef.current,\n props.channel.unreadMessageCount,\n sbOptions.uikit.groupChannel.channel.enableMarkAsUnread,\n ]);\n\n useGroupChannelHandler(sdk, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return groupChannelPubSub.subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n case 'ON_MARKED_AS_READ_BY_CURRENT_USER': {\n updateUnreadMessagesFloatingProps();\n break;\n }\n case 'ON_MARKED_AS_UNREAD_BY_CURRENT_USER': {\n isNewLineExistInChannelRef.current = true;\n const foundFirstUnreadMessage = findFirstUnreadMessage(true);\n processNewLineVisibility(foundFirstUnreadMessage);\n setUnreadFirstMessage(foundFirstUnreadMessage);\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n useEffect(() => {\n return groupChannelFragmentOptions.pubsub.subscribe((payload: GroupChannelFragmentOptionsPubSubContextPayload) => {\n switch (payload.type) {\n case 'OVERRIDE_SEARCH_ITEM_STARTING_POINT': {\n scrollToMessageWithCreatedAt(payload.data.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n break;\n }\n }\n });\n }, []);\n\n useEffect(() => {\n // Only trigger once when message list mount with initial props.searchItem\n // - Search screen + searchItem > mount message list\n // - Reset message list + searchItem > re-mount message list\n if (isFirstMount && props.searchItem) {\n scrollToMessageWithCreatedAt(props.searchItem.startingPoint, false, MESSAGE_SEARCH_SAFE_SCROLL_DELAY);\n }\n }, [isFirstMount]);\n\n const onPressParentMessage = useFreshCallback(\n (parentMessage: SendbirdMessage, childMessage: SendbirdSendableMessage) => {\n if (\n onPressReplyMessageInThread &&\n sbOptions.uikit.groupChannel.channel.replyType === 'thread' &&\n sbOptions.uikit.groupChannel.channel.threadReplySelectType === 'thread'\n ) {\n if (parentMessage.createdAt >= props.channel.messageOffsetTimestamp) {\n onPressReplyMessageInThread(parentMessage as SendbirdSendableMessage, childMessage.createdAt);\n } else {\n toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n } else {\n const canScrollToParent = scrollToMessageWithCreatedAt(parentMessage.createdAt, true, 0);\n if (!canScrollToParent) toast.show(STRINGS.TOAST.FIND_PARENT_MSG_ERROR, 'error');\n }\n },\n );\n\n const onBottomReached = useFreshCallback(() => {\n if (props.hasNext()) {\n if (pendingBottomReachedRef.current) {\n const currentTime = Date.now();\n const elapsedTime = currentTime - pendingBottomReachedRef.current.timestamp;\n\n const timeoutThreshold = 500;\n if (elapsedTime >= pendingBottomReachedRef.current.timeout + timeoutThreshold) {\n props.onBottomReached?.();\n pendingBottomReachedRef.current = null;\n }\n } else {\n props.onBottomReached?.();\n }\n }\n });\n\n return (\n <ChannelMessageList\n {...props}\n ref={flatListRef}\n onScrolledAwayFromBottom={onScrolledAwayFromBottom}\n onReplyMessage={setMessageToReply}\n onReplyInThreadMessage={setMessageToReply}\n onEditMessage={setMessageToEdit}\n onViewableItemsChanged={onViewableItemsChanged}\n onPressParentMessage={onPressParentMessage}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n onPressMarkAsUnreadMessage={onPressMarkAsUnreadMessage}\n onBottomReached={onBottomReached}\n unreadFirstMessage={unreadFirstMessage}\n unreadMessagesFloatingProps={unreadMessagesFloatingPropsRef.current}\n />\n );\n};\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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","ignoreList":[]}
@@ -40,7 +40,12 @@ class InternalLocalCacheStorage {
40
40
  }
41
41
  async removeItem(key) {
42
42
  if (this._mmkv) {
43
- this._mmkv.delete(key);
43
+ // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility
44
+ if (this._mmkv.delete) {
45
+ this._mmkv.delete(key);
46
+ } else if (this._mmkv.remove) {
47
+ this._mmkv.remove(key);
48
+ }
44
49
  } else if (this._async) {
45
50
  return this._async.removeItem(key);
46
51
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_uikitUtils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","InternalLocalCacheStorage","constructor","storage","ASYNC_NOOP","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","setItem","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3","exports","default"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n this._mmkv.delete(key);\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_uikitUtils","require","_defineProperty","e","r","t","_toPropertyKey","Object","defineProperty","value","enumerable","configurable","writable","i","_toPrimitive","Symbol","toPrimitive","call","TypeError","String","Number","InternalLocalCacheStorage","constructor","storage","ASYNC_NOOP","_mmkv","_async","getAllKeys","getItem","key","getString","removeItem","delete","remove","setItem","set","multiGet","keys","Promise","all","map","_this$_async","multiRemove","_this$_async2","multiSet","keyValuePairs","_this$_async3","exports","default"],"sources":["InternalLocalCacheStorage.ts"],"sourcesContent":["import { ASYNC_NOOP } from '@sendbird/uikit-utils';\n\nimport type {\n AsyncLocalCacheStorage,\n KeyValuePairGet,\n KeyValuePairSet,\n LocalCacheStorage,\n MMKVLocalCacheStorage,\n} from '../types';\n\nexport default class InternalLocalCacheStorage implements AsyncLocalCacheStorage {\n private readonly _mmkv?: MMKVLocalCacheStorage;\n private readonly _async?: AsyncLocalCacheStorage;\n\n constructor(storage: LocalCacheStorage) {\n if ('getString' in storage) {\n this._mmkv = storage;\n } else {\n this._async = storage;\n }\n }\n\n async getAllKeys() {\n if (this._mmkv) {\n return this._mmkv.getAllKeys();\n } else if (this._async) {\n return this._async.getAllKeys();\n } else {\n return [];\n }\n }\n\n async getItem(key: string) {\n if (this._mmkv) {\n return this._mmkv.getString(key) ?? null;\n } else if (this._async) {\n return this._async.getItem(key);\n } else {\n return null;\n }\n }\n\n async removeItem(key: string) {\n if (this._mmkv) {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n if (this._mmkv.delete) {\n this._mmkv.delete(key);\n } else if (this._mmkv.remove) {\n this._mmkv.remove(key);\n }\n } else if (this._async) {\n return this._async.removeItem(key);\n }\n }\n\n async setItem(key: string, value: string) {\n if (this._mmkv) {\n this._mmkv.set(key, value);\n } else if (this._async) {\n return this._async.setItem(key, value);\n }\n }\n\n async multiGet(keys: string[]) {\n if (this._mmkv) {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n } else if (this._async) {\n if (this._async?.multiGet) {\n return this._async.multiGet(keys);\n } else {\n return Promise.all(keys.map(async (key) => [key, await this.getItem(key)] as KeyValuePairGet));\n }\n } else {\n return [];\n }\n }\n\n async multiRemove(keys: string[]) {\n if (this._mmkv) {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n } else if (this._async) {\n if (this._async?.multiRemove) {\n await this._async.multiRemove(keys);\n } else {\n await Promise.all(keys.map(async (key) => this.removeItem(key)));\n }\n }\n }\n\n async multiSet(keyValuePairs: Array<KeyValuePairSet>) {\n if (this._mmkv) {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n } else if (this._async) {\n if (this._async?.multiSet) {\n await this._async.multiSet(keyValuePairs);\n } else {\n await Promise.all(keyValuePairs.map(([key, value]) => this.setItem(key, value)));\n }\n }\n }\n\n clear = ASYNC_NOOP;\n flushGetRequests = ASYNC_NOOP;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -117,17 +117,17 @@ const createExpoFileService = ({
117
117
  const granted = await this.requestMediaLibraryWritePermission();
118
118
  if (!granted) throw new Error('Permission not granted');
119
119
  }
120
- const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;
120
+ const basePath = _expoBackwardUtils.default.fileSystem.getDocumentDirectory(fsModule) || _expoBackwardUtils.default.fileSystem.getCacheDirectory(fsModule);
121
121
  if (!basePath) throw new Error('Cannot determine directory');
122
122
  const downloadPath = `${basePath}/${options.fileName}`;
123
- const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);
123
+ const response = await _expoBackwardUtils.default.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);
124
124
  if ((0, _uikitUtils.getFileType)(options.fileType || '').match(/video|image/)) {
125
125
  await mediaLibraryModule.saveToLibraryAsync(response.uri);
126
126
  }
127
127
  return response.uri;
128
128
  }
129
129
  createRecordFilePath(customExtension = 'm4a') {
130
- const basePath = fsModule.cacheDirectory;
130
+ const basePath = _expoBackwardUtils.default.fileSystem.getCacheDirectory(fsModule);
131
131
  if (!basePath) throw new Error('Cannot determine directory');
132
132
  const filename = `record-${Date.now()}.${customExtension}`;
133
133
  return {
@@ -1 +1 @@
1
- {"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","documentDirectory","cacheDirectory","downloadPath","fileName","downloadAsync","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath = fsModule.documentDirectory || fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await fsModule.downloadAsync(options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = fsModule.cacheDirectory;\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_uikitUtils","require","_SBUError","_interopRequireDefault","_expoBackwardUtils","_expoPermissionGranted","e","__esModule","default","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","expoPermissionGranted","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","SBUError","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","expoBackwardUtils","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","getFileType","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath","_default","exports"],"sources":["createFileService.expo.ts"],"sourcesContent":["import type * as ExpoDocumentPicker from 'expo-document-picker';\nimport type * as ExpoFs from 'expo-file-system';\nimport type * as ExpoImagePicker from 'expo-image-picker';\nimport type * as ExpoMediaLibrary from 'expo-media-library';\n\nimport { getFileType } from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoMediaLibraryPermissionResponse, ExpoPermissionResponse } from '../utils/expoPermissionGranted';\nimport expoPermissionGranted from '../utils/expoPermissionGranted';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nconst createExpoFileService = ({\n imagePickerModule,\n documentPickerModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ExpoImagePicker;\n documentPickerModule: typeof ExpoDocumentPicker;\n mediaLibraryModule: typeof ExpoMediaLibrary;\n fsModule: typeof ExpoFs;\n}): FileServiceInterface => {\n class ExpoFileServiceInterface implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.getCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const res = (await imagePickerModule.requestCameraPermissionsAsync()) as ExpoPermissionResponse;\n return expoPermissionGranted([res]);\n }\n\n async hasMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.getMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryReadPermission(): Promise<boolean> {\n const perms = (await imagePickerModule.requestMediaLibraryPermissionsAsync(\n false,\n )) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async hasMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.getPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async requestMediaLibraryWritePermission(): Promise<boolean> {\n const perms = (await mediaLibraryModule.requestPermissionsAsync(true, [])) as ExpoMediaLibraryPermissionResponse;\n return expoPermissionGranted([perms]);\n }\n\n async openCamera(options?: OpenCameraOptions): Promise<FilePickerResponse> {\n const hasPermission = await this.hasCameraPermission();\n if (!hasPermission) {\n const granted = await this.requestCameraPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchCameraAsync({\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n return file;\n }\n\n async openMediaLibrary(options: OpenMediaLibraryOptions) {\n const hasPermission = await this.hasMediaLibraryReadPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryReadPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const selectionLimit = options?.selectionLimit || 1;\n const response = await imagePickerModule.launchImageLibraryAsync({\n selectionLimit,\n mediaTypes: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return imagePickerModule.MediaTypeOptions.Images;\n case 'video':\n return imagePickerModule.MediaTypeOptions.Videos;\n case 'all':\n return imagePickerModule.MediaTypeOptions.All;\n default:\n return imagePickerModule.MediaTypeOptions.Images;\n }\n })(),\n });\n if (expoBackwardUtils.imagePicker.isCanceled(response)) return null;\n return expoBackwardUtils.imagePicker.toFilePickerResponses(response, fsModule);\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const response = await documentPickerModule.getDocumentAsync({ type: '*/*' });\n if (expoBackwardUtils.documentPicker.isCanceled(response)) return null;\n\n const [file] = await expoBackwardUtils.documentPicker.toFilePickerResponses(response);\n return file;\n } catch (e) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n return null;\n }\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryWritePermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryWritePermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const basePath =\n expoBackwardUtils.fileSystem.getDocumentDirectory(fsModule) ||\n expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const downloadPath = `${basePath}/${options.fileName}`;\n\n const response = await expoBackwardUtils.fileSystem.downloadFile(fsModule, options.fileUrl, downloadPath);\n if (getFileType(options.fileType || '').match(/video|image/)) {\n await mediaLibraryModule.saveToLibraryAsync(response.uri);\n }\n return response.uri;\n }\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const basePath = expoBackwardUtils.fileSystem.getCacheDirectory(fsModule);\n if (!basePath) throw new Error('Cannot determine directory');\n\n const filename = `record-${Date.now()}.${customExtension}`;\n return {\n uri: `${basePath}/${filename}`,\n recordFilePath: `${basePath}/${filename}`,\n };\n }\n }\n\n return new ExpoFileServiceInterface();\n};\n\nexport default createExpoFileService;\n"],"mappings":"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","ignoreList":[]}
@@ -140,7 +140,7 @@ const createExpoMediaService = ({
140
140
  }], {
141
141
  compress: Math.min(Math.max(0, compressionRate), 1)
142
142
  });
143
- const fileInfo = await fsModule.getInfoAsync(uri);
143
+ const fileInfo = await _expoBackwardUtils.default.fileSystem.getFileInfo(fsModule, uri);
144
144
  return {
145
145
  uri: compressedURI,
146
146
  size: _expoBackwardUtils.default.toFileSize(fileInfo)
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_SBUUtils","_interopRequireDefault","_expoBackwardUtils","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","LegacyExpoAVVideoAdapter","constructor","avModule","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","useEffect","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","React","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoBackwardUtils","expoAV","isLegacyAVModule","Logger","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","getInfoAsync","size","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await fsModule.getInfoAsync(uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_uikitUtils","_SBUUtils","_interopRequireDefault","_expoBackwardUtils","e","__esModule","default","_getRequireWildcardCache","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","_extends","assign","bind","arguments","length","apply","_defineProperty","_toPropertyKey","value","enumerable","configurable","writable","_toPrimitive","Symbol","toPrimitive","TypeError","String","Number","LegacyExpoAVVideoAdapter","constructor","avModule","source","resizeMode","onLoad","props","createElement","Video","useNativeControls","ExpoVideoAdapter","_videoModule","player","useVideoPlayer","useEffect","subscription","addListener","eventData","status","error","timeout","setTimeout","clearTimeout","remove","undefined","getContentFit","mode","React","VideoView","contentFit","createExpoMediaService","thumbnailModule","imageManipulator","fsModule","expoBackwardUtils","expoAV","isLegacyAVModule","Logger","warn","videoAdapter","isVideoModule","VideoComponent","getVideoThumbnail","url","quality","timeMills","uri","getThumbnailAsync","time","path","compressImage","maxWidth","maxHeight","compressionRate","originSize","SBUUtils","getImageSize","resizingSize","getDownscaleSize","width","height","compressedURI","manipulateAsync","resize","compress","Math","min","max","fileInfo","fileSystem","getFileInfo","size","toFileSize","_default","exports"],"sources":["createMediaService.expo.tsx"],"sourcesContent":["import type * as ExpoAV from 'expo-av';\nimport type * as ExpoFS from 'expo-file-system';\nimport type * as ExpoImageManipulator from 'expo-image-manipulator';\nimport type { EventSubscription } from 'expo-modules-core';\nimport type * as ExpoVideo from 'expo-video';\nimport type { StatusChangeEventPayload } from 'expo-video';\nimport type * as ExpoVideoThumbnail from 'expo-video-thumbnails';\nimport React, { useEffect } from 'react';\n\nimport { Logger, getDownscaleSize } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport expoBackwardUtils from '../utils/expoBackwardUtils';\nimport type { ExpoVideoModule } from '../utils/expoBackwardUtils';\nimport type { MediaServiceInterface, VideoProps } from './types';\n\ntype Modules = {\n avModule: ExpoVideoModule;\n thumbnailModule: typeof ExpoVideoThumbnail;\n imageManipulator: typeof ExpoImageManipulator;\n fsModule: typeof ExpoFS;\n};\n\ninterface VideoModuleAdapter {\n VideoComponent: React.ComponentType<VideoProps>;\n}\n\nclass LegacyExpoAVVideoAdapter implements VideoModuleAdapter {\n private readonly avModule: typeof ExpoAV;\n constructor(avModule: typeof ExpoAV) {\n this.avModule = avModule;\n }\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n // FIXME: type error https://github.com/expo/expo/issues/17101\n // @ts-ignore\n return <this.avModule.Video {...props} source={source} resizeMode={resizeMode} onLoad={onLoad} useNativeControls />;\n };\n}\n\nclass ExpoVideoAdapter implements VideoModuleAdapter {\n constructor(private readonly _videoModule: typeof ExpoVideo) {}\n\n VideoComponent = ({ source, resizeMode, onLoad, ...props }: VideoProps) => {\n const player = this._videoModule.useVideoPlayer(source);\n\n useEffect(() => {\n if (onLoad && player) {\n let subscription: EventSubscription | null = null;\n try {\n subscription = player.addListener('statusChange', (eventData: StatusChangeEventPayload) => {\n const { status, error } = eventData;\n if (status === 'readyToPlay' && !error) {\n onLoad();\n }\n });\n } catch (error) {\n const timeout = setTimeout(() => onLoad(), 300);\n return () => clearTimeout(timeout);\n }\n\n return () => {\n if (subscription) {\n subscription.remove();\n }\n };\n }\n return undefined;\n }, [onLoad, player]);\n\n const getContentFit = (mode: typeof resizeMode): 'cover' | 'contain' | 'fill' => {\n switch (mode) {\n case 'cover':\n return 'cover';\n case 'contain':\n return 'contain';\n case 'stretch':\n return 'fill';\n default:\n return 'contain';\n }\n };\n\n return React.createElement(this._videoModule.VideoView, {\n ...props,\n player,\n contentFit: getContentFit(resizeMode),\n });\n };\n}\n\nconst createExpoMediaService = ({\n avModule,\n thumbnailModule,\n imageManipulator,\n fsModule,\n}: Modules): MediaServiceInterface => {\n if (expoBackwardUtils.expoAV.isLegacyAVModule(avModule)) {\n Logger.warn(\n '[MediaService.Expo] expo-av is deprecated and will be removed in Expo 54. Please migrate to expo-video.',\n );\n }\n\n const videoAdapter = expoBackwardUtils.expoAV.isVideoModule(avModule)\n ? new ExpoVideoAdapter(avModule)\n : new LegacyExpoAVVideoAdapter(avModule);\n\n return {\n VideoComponent: videoAdapter.VideoComponent,\n async getVideoThumbnail({ url, quality, timeMills }) {\n try {\n const { uri } = await thumbnailModule.getThumbnailAsync(url, { quality, time: timeMills });\n return { path: uri };\n } catch {\n return null;\n }\n },\n async compressImage({ maxWidth, maxHeight, compressionRate = 1, uri }) {\n const originSize = await SBUUtils.getImageSize(uri);\n const resizingSize = getDownscaleSize(originSize, { width: maxWidth, height: maxHeight });\n\n const { uri: compressedURI } = await imageManipulator.manipulateAsync(uri, [{ resize: resizingSize }], {\n compress: Math.min(Math.max(0, compressionRate), 1),\n });\n const fileInfo = await expoBackwardUtils.fileSystem.getFileInfo(fsModule, uri);\n\n return { uri: compressedURI, size: expoBackwardUtils.toFileSize(fileInfo) };\n },\n };\n};\n\nexport default createExpoMediaService;\n"],"mappings":"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","ignoreList":[]}
@@ -5,18 +5,38 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.default = void 0;
7
7
  var _reactNative = require("react-native");
8
+ // Type definitions for Firebase Messaging Module instance
9
+ // This represents the instance returned by messaging() or getMessaging()
10
+ // We use a type alias to handle both v14 and v22+ types
11
+
12
+ // Type definitions for modular API support (Firebase v22+)
13
+ // The modular API provides standalone functions that accept a messaging instance
14
+
15
+ // Create a flexible type that can handle both v14 and v22+ Firebase modules
16
+
17
+ const isModularAPI = module => {
18
+ return typeof module.getMessaging === 'function';
19
+ };
8
20
  const createNativeNotificationService = ({
9
21
  messagingModule,
10
22
  permissionModule
11
23
  }) => {
12
- const module = messagingModule();
24
+ const isModular = isModularAPI(messagingModule);
25
+ const modularMessaging = isModular ? messagingModule : null;
26
+ const messaging = isModular ? modularMessaging.getMessaging() : messagingModule();
13
27
  const authorizedStatus = [messagingModule.AuthorizationStatus.AUTHORIZED, messagingModule.AuthorizationStatus.PROVISIONAL];
14
28
  return {
15
29
  getAPNSToken() {
16
- return module.getAPNSToken();
30
+ if (modularMessaging) {
31
+ return modularMessaging.getAPNSToken(messaging);
32
+ }
33
+ return messaging.getAPNSToken();
17
34
  },
18
35
  getFCMToken() {
19
- return module.getToken();
36
+ if (modularMessaging) {
37
+ return modularMessaging.getToken(messaging);
38
+ }
39
+ return messaging.getToken();
20
40
  },
21
41
  async hasPushPermission() {
22
42
  if (_reactNative.Platform.OS === 'android') {
@@ -24,7 +44,7 @@ const createNativeNotificationService = ({
24
44
  return result.status === 'granted';
25
45
  }
26
46
  if (_reactNative.Platform.OS === 'ios') {
27
- const status = await module.hasPermission();
47
+ const status = modularMessaging ? await modularMessaging.hasPermission(messaging) : await messaging.hasPermission();
28
48
  return authorizedStatus.includes(status);
29
49
  }
30
50
  return false;
@@ -35,13 +55,18 @@ const createNativeNotificationService = ({
35
55
  return result.status === 'granted';
36
56
  }
37
57
  if (_reactNative.Platform.OS === 'ios') {
38
- const status = await module.requestPermission();
58
+ const status = modularMessaging ? await modularMessaging.requestPermission(messaging) : await messaging.requestPermission();
39
59
  return authorizedStatus.includes(status);
40
60
  }
41
61
  return false;
42
62
  },
43
63
  onTokenRefresh(handler) {
44
- return module.onTokenRefresh(token => {
64
+ if (modularMessaging) {
65
+ return modularMessaging.onTokenRefresh(messaging, token => {
66
+ if (_reactNative.Platform.OS === 'android') handler(token);
67
+ });
68
+ }
69
+ return messaging.onTokenRefresh(token => {
45
70
  if (_reactNative.Platform.OS === 'android') handler(token);
46
71
  });
47
72
  }
@@ -1 +1 @@
1
- {"version":3,"names":["_reactNative","require","createNativeNotificationService","messagingModule","permissionModule","module","authorizedStatus","AuthorizationStatus","AUTHORIZED","PROVISIONAL","getAPNSToken","getFCMToken","getToken","hasPushPermission","Platform","OS","result","checkNotifications","status","hasPermission","includes","requestPushPermission","requestNotifications","requestPermission","onTokenRefresh","handler","token","_default","exports","default"],"sources":["createNotificationService.native.ts"],"sourcesContent":["import type RNFBMessaging from '@react-native-firebase/messaging';\nimport { Platform } from 'react-native';\nimport type * as Permissions from 'react-native-permissions';\n\nimport type { NotificationServiceInterface } from './types';\n\nconst createNativeNotificationService = ({\n messagingModule,\n permissionModule,\n}: {\n messagingModule: typeof RNFBMessaging;\n permissionModule: typeof Permissions;\n}): NotificationServiceInterface => {\n const module = messagingModule();\n const authorizedStatus = [\n messagingModule.AuthorizationStatus.AUTHORIZED,\n messagingModule.AuthorizationStatus.PROVISIONAL,\n ];\n return {\n getAPNSToken(): Promise<string | null> {\n return module.getAPNSToken();\n },\n getFCMToken(): Promise<string | null> {\n return module.getToken();\n },\n async hasPushPermission(): Promise<boolean> {\n if (Platform.OS === 'android') {\n const result = await permissionModule.checkNotifications();\n return result.status === 'granted';\n }\n\n if (Platform.OS === 'ios') {\n const status = await module.hasPermission();\n return authorizedStatus.includes(status);\n }\n\n return false;\n },\n async requestPushPermission(): Promise<boolean> {\n if (Platform.OS === 'android') {\n const result = await permissionModule.requestNotifications([]);\n return result.status === 'granted';\n }\n\n if (Platform.OS === 'ios') {\n const status = await module.requestPermission();\n return authorizedStatus.includes(status);\n }\n\n return false;\n },\n onTokenRefresh(handler: (token: string) => void): () => void | undefined {\n return module.onTokenRefresh((token) => {\n if (Platform.OS === 'android') handler(token);\n });\n },\n };\n};\n\nexport default createNativeNotificationService;\n"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AAKA,MAAMC,+BAA+B,GAAGA,CAAC;EACvCC,eAAe;EACfC;AAIF,CAAC,KAAmC;EAClC,MAAMC,MAAM,GAAGF,eAAe,CAAC,CAAC;EAChC,MAAMG,gBAAgB,GAAG,CACvBH,eAAe,CAACI,mBAAmB,CAACC,UAAU,EAC9CL,eAAe,CAACI,mBAAmB,CAACE,WAAW,CAChD;EACD,OAAO;IACLC,YAAYA,CAAA,EAA2B;MACrC,OAAOL,MAAM,CAACK,YAAY,CAAC,CAAC;IAC9B,CAAC;IACDC,WAAWA,CAAA,EAA2B;MACpC,OAAON,MAAM,CAACO,QAAQ,CAAC,CAAC;IAC1B,CAAC;IACD,MAAMC,iBAAiBA,CAAA,EAAqB;MAC1C,IAAIC,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;QAC7B,MAAMC,MAAM,GAAG,MAAMZ,gBAAgB,CAACa,kBAAkB,CAAC,CAAC;QAC1D,OAAOD,MAAM,CAACE,MAAM,KAAK,SAAS;MACpC;MAEA,IAAIJ,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;QACzB,MAAMG,MAAM,GAAG,MAAMb,MAAM,CAACc,aAAa,CAAC,CAAC;QAC3C,OAAOb,gBAAgB,CAACc,QAAQ,CAACF,MAAM,CAAC;MAC1C;MAEA,OAAO,KAAK;IACd,CAAC;IACD,MAAMG,qBAAqBA,CAAA,EAAqB;MAC9C,IAAIP,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAE;QAC7B,MAAMC,MAAM,GAAG,MAAMZ,gBAAgB,CAACkB,oBAAoB,CAAC,EAAE,CAAC;QAC9D,OAAON,MAAM,CAACE,MAAM,KAAK,SAAS;MACpC;MAEA,IAAIJ,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE;QACzB,MAAMG,MAAM,GAAG,MAAMb,MAAM,CAACkB,iBAAiB,CAAC,CAAC;QAC/C,OAAOjB,gBAAgB,CAACc,QAAQ,CAACF,MAAM,CAAC;MAC1C;MAEA,OAAO,KAAK;IACd,CAAC;IACDM,cAAcA,CAACC,OAAgC,EAA0B;MACvE,OAAOpB,MAAM,CAACmB,cAAc,CAAEE,KAAK,IAAK;QACtC,IAAIZ,qBAAQ,CAACC,EAAE,KAAK,SAAS,EAAEU,OAAO,CAACC,KAAK,CAAC;MAC/C,CAAC,CAAC;IACJ;EACF,CAAC;AACH,CAAC;AAAC,IAAAC,QAAA,GAAAC,OAAA,CAAAC,OAAA,GAEa3B,+BAA+B","ignoreList":[]}
1
+ {"version":3,"names":["_reactNative","require","isModularAPI","module","getMessaging","createNativeNotificationService","messagingModule","permissionModule","isModular","modularMessaging","messaging","authorizedStatus","AuthorizationStatus","AUTHORIZED","PROVISIONAL","getAPNSToken","getFCMToken","getToken","hasPushPermission","Platform","OS","result","checkNotifications","status","hasPermission","includes","requestPushPermission","requestNotifications","requestPermission","onTokenRefresh","handler","token","_default","exports","default"],"sources":["createNotificationService.native.ts"],"sourcesContent":["import type RNFBMessaging from '@react-native-firebase/messaging';\nimport type { FirebaseMessagingTypes } from '@react-native-firebase/messaging';\nimport { Platform } from 'react-native';\nimport type * as Permissions from 'react-native-permissions';\n\nimport type { NotificationServiceInterface } from './types';\n\n// Type definitions for Firebase Messaging Module instance\n// This represents the instance returned by messaging() or getMessaging()\n// We use a type alias to handle both v14 and v22+ types\ntype MessagingInstance = ReturnType<typeof RNFBMessaging>;\n\n// Type definitions for modular API support (Firebase v22+)\n// The modular API provides standalone functions that accept a messaging instance\ntype ModularMessagingType = {\n getMessaging: () => MessagingInstance;\n getAPNSToken: (messaging: MessagingInstance) => Promise<string | null>;\n getToken: (messaging: MessagingInstance) => Promise<string>;\n hasPermission: (messaging: MessagingInstance) => Promise<FirebaseMessagingTypes.AuthorizationStatus>;\n requestPermission: (\n messaging: MessagingInstance,\n iosPermissions?: FirebaseMessagingTypes.IOSPermissions,\n ) => Promise<FirebaseMessagingTypes.AuthorizationStatus>;\n onTokenRefresh: (messaging: MessagingInstance, listener: (token: string) => void) => () => void;\n AuthorizationStatus: typeof RNFBMessaging.AuthorizationStatus;\n};\n\n// Create a flexible type that can handle both v14 and v22+ Firebase modules\ntype FirebaseMessagingModule = typeof RNFBMessaging | ModularMessagingType;\n\nconst isModularAPI = (module: FirebaseMessagingModule): module is ModularMessagingType => {\n return typeof (module as ModularMessagingType).getMessaging === 'function';\n};\n\nconst createNativeNotificationService = ({\n messagingModule,\n permissionModule,\n}: {\n messagingModule: FirebaseMessagingModule;\n permissionModule: typeof Permissions;\n}): NotificationServiceInterface => {\n const isModular = isModularAPI(messagingModule);\n const modularMessaging = isModular ? (messagingModule as ModularMessagingType) : null;\n const messaging = isModular ? modularMessaging!.getMessaging() : (messagingModule as typeof RNFBMessaging)();\n\n const authorizedStatus = [\n messagingModule.AuthorizationStatus.AUTHORIZED,\n messagingModule.AuthorizationStatus.PROVISIONAL,\n ];\n return {\n getAPNSToken(): Promise<string | null> {\n if (modularMessaging) {\n return modularMessaging.getAPNSToken(messaging);\n }\n return messaging.getAPNSToken();\n },\n getFCMToken(): Promise<string | null> {\n if (modularMessaging) {\n return modularMessaging.getToken(messaging);\n }\n return messaging.getToken();\n },\n async hasPushPermission(): Promise<boolean> {\n if (Platform.OS === 'android') {\n const result = await permissionModule.checkNotifications();\n return result.status === 'granted';\n }\n\n if (Platform.OS === 'ios') {\n const status = modularMessaging\n ? await modularMessaging.hasPermission(messaging)\n : await messaging.hasPermission();\n return authorizedStatus.includes(status);\n }\n\n return false;\n },\n async requestPushPermission(): Promise<boolean> {\n if (Platform.OS === 'android') {\n const result = await permissionModule.requestNotifications([]);\n return result.status === 'granted';\n }\n\n if (Platform.OS === 'ios') {\n const status = modularMessaging\n ? await modularMessaging.requestPermission(messaging)\n : await messaging.requestPermission();\n return authorizedStatus.includes(status);\n }\n\n return false;\n },\n onTokenRefresh(handler: (token: string) => void): () => void | undefined {\n if (modularMessaging) {\n return modularMessaging.onTokenRefresh(messaging, (token: string) => {\n if (Platform.OS === 'android') handler(token);\n });\n }\n return messaging.onTokenRefresh((token: string) => {\n if (Platform.OS === 'android') handler(token);\n });\n },\n };\n};\n\nexport default createNativeNotificationService;\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"names":["TypingIndicatorType","exports"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'delete' | 'getAllKeys'>;\n\nexport type ErrorBoundaryProps = { error: Error; errorInfo: ErrorInfo; reset: () => void };\n\nexport type CommonComponent<P = {}> = ComponentType<P & { children?: ReactNode | undefined }>;\n\nexport type MentionedUser = {\n range: Range;\n user: SendbirdUser;\n};\n\nexport type Range = {\n start: number;\n end: number;\n};\n\nexport enum TypingIndicatorType {\n Text = 'text',\n Bubble = 'bubble',\n}\n"],"mappings":";;;;;;IAoCYA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
1
+ {"version":3,"names":["TypingIndicatorType","exports"],"sources":["types.ts"],"sourcesContent":["import type { ComponentType, ErrorInfo, ReactNode } from 'react';\nimport type { MMKV } from 'react-native-mmkv';\n\nimport type { SendbirdUser } from '@sendbird/uikit-utils';\n\nexport type LocalCacheStorage = AsyncLocalCacheStorage | MMKVLocalCacheStorage;\n\nexport type KeyValuePairGet = [string, string | null];\nexport type KeyValuePairSet = [string, string];\nexport interface AsyncLocalCacheStorage {\n getAllKeys(): Promise<readonly string[] | string[]>;\n getItem(key: string): Promise<string | null>;\n setItem(key: string, value: string): Promise<void>;\n removeItem(key: string): Promise<void>;\n\n multiSet?(keyValuePairs: Array<KeyValuePairSet>): Promise<void>;\n multiGet?(keys: string[]): Promise<readonly KeyValuePairGet[] | KeyValuePairGet[]>;\n multiRemove?(keys: string[]): Promise<void>;\n}\n\nexport type MMKVLocalCacheStorage = Pick<MMKV, 'getString' | 'set' | 'getAllKeys'> & {\n // Support both v3.x (delete) and v4.x (remove) APIs for backward compatibility\n delete?: (key: string) => void;\n remove?: (key: string) => void;\n};\n\nexport type ErrorBoundaryProps = { error: Error; errorInfo: ErrorInfo; reset: () => void };\n\nexport type CommonComponent<P = {}> = ComponentType<P & { children?: ReactNode | undefined }>;\n\nexport type MentionedUser = {\n range: Range;\n user: SendbirdUser;\n};\n\nexport type Range = {\n start: number;\n end: number;\n};\n\nexport enum TypingIndicatorType {\n Text = 'text',\n Bubble = 'bubble',\n}\n"],"mappings":";;;;;;IAwCYA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,0BAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAnBA,mBAAmB;EAAA,OAAnBA,mBAAmB;AAAA","ignoreList":[]}
@@ -6,6 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.default = void 0;
7
7
  var _normalizeFile = _interopRequireDefault(require("./normalizeFile"));
8
8
  function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ // Legacy expo-file-system API types (before SDK 54)
10
+
11
+ // New expo-file-system API types (SDK 54+)
12
+
13
+ // Union type for both legacy and new expo-file-system
14
+
9
15
  const expoBackwardUtils = {
10
16
  imagePicker: {
11
17
  isCanceled(result) {
@@ -103,11 +109,55 @@ const expoBackwardUtils = {
103
109
  }
104
110
  },
105
111
  toFileSize(info) {
106
- if ('size' in info) {
112
+ if ('size' in info && info.size !== undefined) {
107
113
  return info.size;
108
114
  } else {
109
115
  return 0;
110
116
  }
117
+ },
118
+ fileSystem: {
119
+ isLegacyModule(fsModule) {
120
+ try {
121
+ return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;
122
+ } catch {
123
+ return false;
124
+ }
125
+ },
126
+ async getFileInfo(fsModule, uri) {
127
+ if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
128
+ return await fsModule.getInfoAsync(uri);
129
+ } else {
130
+ const file = new fsModule.File(uri);
131
+ return file.info();
132
+ }
133
+ },
134
+ getDocumentDirectory(fsModule) {
135
+ if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
136
+ return fsModule.documentDirectory || null;
137
+ } else {
138
+ var _fsModule$Paths;
139
+ return ((_fsModule$Paths = fsModule.Paths) === null || _fsModule$Paths === void 0 || (_fsModule$Paths = _fsModule$Paths.document) === null || _fsModule$Paths === void 0 ? void 0 : _fsModule$Paths.uri) || null;
140
+ }
141
+ },
142
+ getCacheDirectory(fsModule) {
143
+ if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
144
+ return fsModule.cacheDirectory || null;
145
+ } else {
146
+ var _fsModule$Paths2;
147
+ return ((_fsModule$Paths2 = fsModule.Paths) === null || _fsModule$Paths2 === void 0 || (_fsModule$Paths2 = _fsModule$Paths2.cache) === null || _fsModule$Paths2 === void 0 ? void 0 : _fsModule$Paths2.uri) || null;
148
+ }
149
+ },
150
+ async downloadFile(fsModule, url, localUri) {
151
+ if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {
152
+ return await fsModule.downloadAsync(url, localUri);
153
+ } else {
154
+ const destination = new fsModule.File(localUri);
155
+ const result = await fsModule.File.downloadFileAsync(url, destination);
156
+ return {
157
+ uri: result.uri
158
+ };
159
+ }
160
+ }
111
161
  }
112
162
  };
113
163
  var _default = exports.default = expoBackwardUtils;