@sendbird/uikit-react-native 3.12.0 → 3.12.2

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 (78) hide show
  1. package/lib/commonjs/components/ChannelMessageList/index.js +1 -1
  2. package/lib/commonjs/components/ChannelMessageList/index.js.map +1 -1
  3. package/lib/commonjs/components/ChannelThreadMessageList/index.js +1 -1
  4. package/lib/commonjs/components/ChannelThreadMessageList/index.js.map +1 -1
  5. package/lib/commonjs/components/FileViewer/FileViewerContent.js +1 -1
  6. package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -1
  7. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +1 -1
  8. package/lib/commonjs/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
  9. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
  10. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  11. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +1 -1
  12. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -1
  13. package/lib/commonjs/fragments/createOpenChannelParticipantsFragment.js +1 -1
  14. package/lib/commonjs/fragments/createOpenChannelParticipantsFragment.js.map +1 -1
  15. package/lib/commonjs/hooks/useMentionTextInput.js +1 -1
  16. package/lib/commonjs/hooks/useMentionTextInput.js.map +1 -1
  17. package/lib/commonjs/hooks/usePushTokenRegistration.js +1 -1
  18. package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
  19. package/lib/commonjs/hooks/useVoiceMessageInput.js +1 -1
  20. package/lib/commonjs/hooks/useVoiceMessageInput.js.map +1 -1
  21. package/lib/commonjs/platform/createFileService.expo.js +4 -0
  22. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  23. package/lib/commonjs/platform/createFileService.native.js +2 -0
  24. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  25. package/lib/commonjs/utils/expoBackwardUtils.js +2 -2
  26. package/lib/commonjs/utils/expoBackwardUtils.js.map +1 -1
  27. package/lib/commonjs/version.js +1 -1
  28. package/lib/commonjs/version.js.map +1 -1
  29. package/lib/module/components/ChannelMessageList/index.js +1 -1
  30. package/lib/module/components/ChannelMessageList/index.js.map +1 -1
  31. package/lib/module/components/ChannelThreadMessageList/index.js +1 -1
  32. package/lib/module/components/ChannelThreadMessageList/index.js.map +1 -1
  33. package/lib/module/components/FileViewer/FileViewerContent.js +1 -1
  34. package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -1
  35. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js +1 -1
  36. package/lib/module/components/ReactionBottomSheets/ReactionUserListBottomSheet.js.map +1 -1
  37. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +2 -2
  38. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  39. package/lib/module/fragments/createGroupChannelMembersFragment.js +1 -1
  40. package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -1
  41. package/lib/module/fragments/createOpenChannelParticipantsFragment.js +1 -1
  42. package/lib/module/fragments/createOpenChannelParticipantsFragment.js.map +1 -1
  43. package/lib/module/hooks/useMentionTextInput.js +1 -1
  44. package/lib/module/hooks/useMentionTextInput.js.map +1 -1
  45. package/lib/module/hooks/usePushTokenRegistration.js +1 -1
  46. package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
  47. package/lib/module/hooks/useVoiceMessageInput.js +1 -1
  48. package/lib/module/hooks/useVoiceMessageInput.js.map +1 -1
  49. package/lib/module/platform/createFileService.expo.js +4 -0
  50. package/lib/module/platform/createFileService.expo.js.map +1 -1
  51. package/lib/module/platform/createFileService.native.js +2 -0
  52. package/lib/module/platform/createFileService.native.js.map +1 -1
  53. package/lib/module/utils/expoBackwardUtils.js +2 -2
  54. package/lib/module/utils/expoBackwardUtils.js.map +1 -1
  55. package/lib/module/version.js +1 -1
  56. package/lib/module/version.js.map +1 -1
  57. package/lib/typescript/src/components/ChannelMessageList/index.d.ts +1 -2
  58. package/lib/typescript/src/components/ChannelThreadMessageList/index.d.ts +1 -2
  59. package/lib/typescript/src/containers/InternalErrorBoundaryContainer.d.ts +1 -1
  60. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  61. package/lib/typescript/src/hooks/useMentionTextInput.d.ts +1 -1
  62. package/lib/typescript/src/libs/MentionManager.d.ts +1 -1
  63. package/lib/typescript/src/version.d.ts +1 -1
  64. package/package.json +5 -5
  65. package/src/components/ChannelMessageList/index.tsx +4 -2
  66. package/src/components/ChannelThreadMessageList/index.tsx +4 -2
  67. package/src/components/FileViewer/FileViewerContent.tsx +1 -1
  68. package/src/components/ReactionBottomSheets/ReactionUserListBottomSheet.tsx +1 -1
  69. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +2 -2
  70. package/src/fragments/createGroupChannelMembersFragment.tsx +1 -1
  71. package/src/fragments/createOpenChannelParticipantsFragment.tsx +1 -1
  72. package/src/hooks/useMentionTextInput.ts +1 -1
  73. package/src/hooks/usePushTokenRegistration.ts +1 -1
  74. package/src/hooks/useVoiceMessageInput.ts +1 -1
  75. package/src/platform/createFileService.expo.ts +4 -0
  76. package/src/platform/createFileService.native.ts +2 -0
  77. package/src/utils/expoBackwardUtils.ts +2 -2
  78. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useRef","useChannelHandler","useUserList","useActionMenu","ASYNC_NOOP","ifThenOr","isDifferentChannel","useFreshCallback","useUniqHandlerId","StatusComposition","UserActionBar","UNKNOWN_USER_ID","createUserListModule","useLocalization","useSendbirdChat","useUserProfile","RETURN_EMPTY_STRING","createOpenChannelParticipantsFragment","initModule","UserListModule","channel","onPressHeaderLeft","renderUser","sortComparator","queryCreator","createParticipantListQuery","limit","handlerId","refreshSchedule","STRINGS","sdk","currentUser","openMenu","show","users","refresh","loading","next","error","upsertUser","deleteUser","onUserExited","eventChannel","user","userId","onUserBanned","onOperatorUpdated","current","clearTimeout","setTimeout","onUserMuted","isOpenChannel","isMuted","onUserUnmuted","_renderUser","selectedUsers","setSelectedUsers","isUserMuted","isUserOperator","isOperator","isCurrentUserOperator","createElement","muted","uri","profileUrl","label","LABELS","USER_BAR_OPERATOR","name","nickname","USER_NO_NAME","USER_BAR_ME_POSTFIX","disabled","onPressActionMenu","menuItems","push","title","UNREGISTER_OPERATOR","REGISTER_AS_OPERATOR","onPress","removeOperators","addOperators","UNMUTE","MUTE","unmuteUser","muteUser","BAN","style","banUser","onPressAvatar","Provider","headerRight","headerTitle","OPEN_CHANNEL_PARTICIPANTS","HEADER_TITLE","Header","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","onLoadNext","ListEmptyComponent","StatusEmpty"],"sources":["createOpenChannelParticipantsFragment.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nimport { useChannelHandler, useUserList } from '@sendbird/uikit-chat-hooks';\nimport type { ActionMenuItem } from '@sendbird/uikit-react-native-foundation';\nimport { useActionMenu } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdParticipant } from '@sendbird/uikit-utils';\nimport { ASYNC_NOOP, ifThenOr, isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport UserActionBar from '../components/UserActionBar';\nimport { UNKNOWN_USER_ID } from '../constants';\nimport type { OpenChannelParticipantsFragment } from '../domain/openChannelUserList/types';\nimport createUserListModule from '../domain/userList/module/createUserListModule';\nimport type { UserListModule } from '../domain/userList/types';\nimport { useLocalization, useSendbirdChat, useUserProfile } from '../hooks/useContext';\n\nconst RETURN_EMPTY_STRING = () => '';\nconst createOpenChannelParticipantsFragment = (\n initModule?: Partial<UserListModule<SendbirdParticipant>>,\n): OpenChannelParticipantsFragment => {\n const UserListModule = createUserListModule<SendbirdParticipant>(initModule);\n\n return ({\n channel,\n onPressHeaderLeft,\n renderUser,\n sortComparator,\n queryCreator = () => channel.createParticipantListQuery({ limit: 20 }),\n }) => {\n const handlerId = useUniqHandlerId('OpenChannelParticipantsFragment');\n\n const refreshSchedule = useRef<NodeJS.Timeout>();\n const { STRINGS } = useLocalization();\n const { sdk, currentUser } = useSendbirdChat();\n const { openMenu } = useActionMenu();\n const { show } = useUserProfile();\n\n const { users, refresh, loading, next, error, upsertUser, deleteUser } = useUserList(sdk, {\n queryCreator,\n sortComparator,\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n onUserExited(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel)) return;\n deleteUser(user.userId);\n },\n onUserBanned(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel)) return;\n deleteUser(user.userId);\n },\n onOperatorUpdated(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (refreshSchedule.current) clearTimeout(refreshSchedule.current);\n refreshSchedule.current = setTimeout(() => refresh(), 500);\n },\n onUserMuted(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel) || !eventChannel.isOpenChannel()) return;\n // @ts-ignore - SDK should migrate User to Participant\n user.isMuted = true;\n upsertUser(user);\n },\n onUserUnmuted(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel) || !eventChannel.isOpenChannel()) return;\n // @ts-ignore - SDK should migrate User to Participant\n user.isMuted = false;\n upsertUser(user);\n },\n },\n 'open',\n );\n\n const _renderUser: NonNullable<typeof renderUser> = useFreshCallback((user, selectedUsers, setSelectedUsers) => {\n if (renderUser) return renderUser(user, selectedUsers, setSelectedUsers);\n\n const isUserMuted = user.isMuted;\n const isUserOperator = channel.isOperator(user.userId);\n const isCurrentUserOperator = channel.isOperator(currentUser?.userId ?? UNKNOWN_USER_ID);\n\n return (\n <UserActionBar\n muted={isUserMuted}\n uri={user.profileUrl}\n label={ifThenOr(isUserOperator, STRINGS.LABELS.USER_BAR_OPERATOR, '')}\n name={\n (user.nickname || STRINGS.LABELS.USER_NO_NAME) +\n ifThenOr(user.userId === currentUser?.userId, STRINGS.LABELS.USER_BAR_ME_POSTFIX, '')\n }\n disabled={user.userId === currentUser?.userId}\n onPressActionMenu={ifThenOr(isCurrentUserOperator, () => {\n const menuItems: ActionMenuItem['menuItems'] = [];\n\n menuItems.push({\n title: ifThenOr(isUserOperator, STRINGS.LABELS.UNREGISTER_OPERATOR, STRINGS.LABELS.REGISTER_AS_OPERATOR),\n onPress: ifThenOr(\n isUserOperator,\n () => channel.removeOperators([user.userId]),\n () => channel.addOperators([user.userId]),\n ),\n });\n\n menuItems.push({\n title: ifThenOr(isUserMuted, STRINGS.LABELS.UNMUTE, STRINGS.LABELS.MUTE),\n onPress: ifThenOr(\n isUserMuted,\n () => channel.unmuteUser(user),\n () => channel.muteUser(user),\n ),\n });\n\n menuItems.push({\n title: STRINGS.LABELS.BAN,\n style: 'destructive',\n onPress: () => channel.banUser(user),\n });\n\n openMenu({ title: user.nickname || STRINGS.LABELS.USER_NO_NAME, menuItems });\n })}\n onPressAvatar={() => show(user)}\n />\n );\n });\n\n return (\n <UserListModule.Provider\n headerRight={RETURN_EMPTY_STRING}\n headerTitle={STRINGS.OPEN_CHANNEL_PARTICIPANTS.HEADER_TITLE}\n >\n <UserListModule.Header onPressHeaderRight={ASYNC_NOOP} onPressHeaderLeft={onPressHeaderLeft} />\n <StatusComposition\n loading={loading}\n LoadingComponent={<UserListModule.StatusLoading />}\n error={Boolean(error)}\n ErrorComponent={<UserListModule.StatusError onPressRetry={refresh} />}\n >\n <UserListModule.List\n users={users as SendbirdParticipant[]}\n renderUser={_renderUser}\n onLoadNext={next}\n ListEmptyComponent={<UserListModule.StatusEmpty />}\n />\n </StatusComposition>\n </UserListModule.Provider>\n );\n };\n};\n\nexport default createOpenChannelParticipantsFragment;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useRef","useChannelHandler","useUserList","useActionMenu","ASYNC_NOOP","ifThenOr","isDifferentChannel","useFreshCallback","useUniqHandlerId","StatusComposition","UserActionBar","UNKNOWN_USER_ID","createUserListModule","useLocalization","useSendbirdChat","useUserProfile","RETURN_EMPTY_STRING","createOpenChannelParticipantsFragment","initModule","UserListModule","channel","onPressHeaderLeft","renderUser","sortComparator","queryCreator","createParticipantListQuery","limit","handlerId","refreshSchedule","undefined","STRINGS","sdk","currentUser","openMenu","show","users","refresh","loading","next","error","upsertUser","deleteUser","onUserExited","eventChannel","user","userId","onUserBanned","onOperatorUpdated","current","clearTimeout","setTimeout","onUserMuted","isOpenChannel","isMuted","onUserUnmuted","_renderUser","selectedUsers","setSelectedUsers","isUserMuted","isUserOperator","isOperator","isCurrentUserOperator","createElement","muted","uri","profileUrl","label","LABELS","USER_BAR_OPERATOR","name","nickname","USER_NO_NAME","USER_BAR_ME_POSTFIX","disabled","onPressActionMenu","menuItems","push","title","UNREGISTER_OPERATOR","REGISTER_AS_OPERATOR","onPress","removeOperators","addOperators","UNMUTE","MUTE","unmuteUser","muteUser","BAN","style","banUser","onPressAvatar","Provider","headerRight","headerTitle","OPEN_CHANNEL_PARTICIPANTS","HEADER_TITLE","Header","onPressHeaderRight","LoadingComponent","StatusLoading","Boolean","ErrorComponent","StatusError","onPressRetry","List","onLoadNext","ListEmptyComponent","StatusEmpty"],"sources":["createOpenChannelParticipantsFragment.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nimport { useChannelHandler, useUserList } from '@sendbird/uikit-chat-hooks';\nimport type { ActionMenuItem } from '@sendbird/uikit-react-native-foundation';\nimport { useActionMenu } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdParticipant } from '@sendbird/uikit-utils';\nimport { ASYNC_NOOP, ifThenOr, isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport UserActionBar from '../components/UserActionBar';\nimport { UNKNOWN_USER_ID } from '../constants';\nimport type { OpenChannelParticipantsFragment } from '../domain/openChannelUserList/types';\nimport createUserListModule from '../domain/userList/module/createUserListModule';\nimport type { UserListModule } from '../domain/userList/types';\nimport { useLocalization, useSendbirdChat, useUserProfile } from '../hooks/useContext';\n\nconst RETURN_EMPTY_STRING = () => '';\nconst createOpenChannelParticipantsFragment = (\n initModule?: Partial<UserListModule<SendbirdParticipant>>,\n): OpenChannelParticipantsFragment => {\n const UserListModule = createUserListModule<SendbirdParticipant>(initModule);\n\n return ({\n channel,\n onPressHeaderLeft,\n renderUser,\n sortComparator,\n queryCreator = () => channel.createParticipantListQuery({ limit: 20 }),\n }) => {\n const handlerId = useUniqHandlerId('OpenChannelParticipantsFragment');\n\n const refreshSchedule = useRef<NodeJS.Timeout | undefined>(undefined);\n const { STRINGS } = useLocalization();\n const { sdk, currentUser } = useSendbirdChat();\n const { openMenu } = useActionMenu();\n const { show } = useUserProfile();\n\n const { users, refresh, loading, next, error, upsertUser, deleteUser } = useUserList(sdk, {\n queryCreator,\n sortComparator,\n });\n\n useChannelHandler(\n sdk,\n handlerId,\n {\n onUserExited(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel)) return;\n deleteUser(user.userId);\n },\n onUserBanned(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel)) return;\n deleteUser(user.userId);\n },\n onOperatorUpdated(eventChannel) {\n if (isDifferentChannel(eventChannel, channel)) return;\n if (refreshSchedule.current) clearTimeout(refreshSchedule.current);\n refreshSchedule.current = setTimeout(() => refresh(), 500);\n },\n onUserMuted(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel) || !eventChannel.isOpenChannel()) return;\n // @ts-ignore - SDK should migrate User to Participant\n user.isMuted = true;\n upsertUser(user);\n },\n onUserUnmuted(eventChannel, user) {\n if (isDifferentChannel(eventChannel, channel) || !eventChannel.isOpenChannel()) return;\n // @ts-ignore - SDK should migrate User to Participant\n user.isMuted = false;\n upsertUser(user);\n },\n },\n 'open',\n );\n\n const _renderUser: NonNullable<typeof renderUser> = useFreshCallback((user, selectedUsers, setSelectedUsers) => {\n if (renderUser) return renderUser(user, selectedUsers, setSelectedUsers);\n\n const isUserMuted = user.isMuted;\n const isUserOperator = channel.isOperator(user.userId);\n const isCurrentUserOperator = channel.isOperator(currentUser?.userId ?? UNKNOWN_USER_ID);\n\n return (\n <UserActionBar\n muted={isUserMuted}\n uri={user.profileUrl}\n label={ifThenOr(isUserOperator, STRINGS.LABELS.USER_BAR_OPERATOR, '')}\n name={\n (user.nickname || STRINGS.LABELS.USER_NO_NAME) +\n ifThenOr(user.userId === currentUser?.userId, STRINGS.LABELS.USER_BAR_ME_POSTFIX, '')\n }\n disabled={user.userId === currentUser?.userId}\n onPressActionMenu={ifThenOr(isCurrentUserOperator, () => {\n const menuItems: ActionMenuItem['menuItems'] = [];\n\n menuItems.push({\n title: ifThenOr(isUserOperator, STRINGS.LABELS.UNREGISTER_OPERATOR, STRINGS.LABELS.REGISTER_AS_OPERATOR),\n onPress: ifThenOr(\n isUserOperator,\n () => channel.removeOperators([user.userId]),\n () => channel.addOperators([user.userId]),\n ),\n });\n\n menuItems.push({\n title: ifThenOr(isUserMuted, STRINGS.LABELS.UNMUTE, STRINGS.LABELS.MUTE),\n onPress: ifThenOr(\n isUserMuted,\n () => channel.unmuteUser(user),\n () => channel.muteUser(user),\n ),\n });\n\n menuItems.push({\n title: STRINGS.LABELS.BAN,\n style: 'destructive',\n onPress: () => channel.banUser(user),\n });\n\n openMenu({ title: user.nickname || STRINGS.LABELS.USER_NO_NAME, menuItems });\n })}\n onPressAvatar={() => show(user)}\n />\n );\n });\n\n return (\n <UserListModule.Provider\n headerRight={RETURN_EMPTY_STRING}\n headerTitle={STRINGS.OPEN_CHANNEL_PARTICIPANTS.HEADER_TITLE}\n >\n <UserListModule.Header onPressHeaderRight={ASYNC_NOOP} onPressHeaderLeft={onPressHeaderLeft} />\n <StatusComposition\n loading={loading}\n LoadingComponent={<UserListModule.StatusLoading />}\n error={Boolean(error)}\n ErrorComponent={<UserListModule.StatusError onPressRetry={refresh} />}\n >\n <UserListModule.List\n users={users as SendbirdParticipant[]}\n renderUser={_renderUser}\n onLoadNext={next}\n ListEmptyComponent={<UserListModule.StatusEmpty />}\n />\n </StatusComposition>\n </UserListModule.Provider>\n );\n };\n};\n\nexport default createOpenChannelParticipantsFragment;\n"],"mappings":"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","ignoreList":[]}
@@ -10,7 +10,7 @@ const useMentionTextInput = params => {
10
10
  sbOptions
11
11
  } = useSendbirdChat();
12
12
  const mentionedUsersRef = useRef([]);
13
- const textInputRef = useRef();
13
+ const textInputRef = useRef(undefined);
14
14
  const [text, setText] = useState('');
15
15
  const [selection, setSelection] = useState({
16
16
  start: 0,
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useRef","useState","Platform","replace","useFreshCallback","useSendbirdChat","useMentionTextInput","params","mentionManager","sbOptions","mentionedUsersRef","textInputRef","text","setText","selection","setSelection","start","end","shouldUseMentionedMessageTemplate","messageToEdit","uikit","groupChannel","channel","enableMention","_params$messageToEdit","result","templateToTextAndMentionedUsers","mentionedMessageTemplate","mentionedUsers","current","mentionedText","_params$messageToEdit2","isUserMessage","message","onChangeText","_nextText","addedMentionedUser","prevText","nextText","offset","length","push","reconcileRangeOfMentionedUsers","filtered","lastSelection","removeMentionedUsersInSelection","Math","max","foundIndex","findIndex","it","rangeHelpers","overlaps","range","remainderLength","splice","onSelectionChange","e","nativeSelection","nativeEvent","setTimeout","mentionedUser","find","_textInputRef$current","selectionBlock","setNativeProps","OS","_textInputRef$current2"],"sources":["useMentionTextInput.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { NativeSyntheticEvent, TextInput, TextInputSelectionChangeEventData } from 'react-native';\nimport { Platform } from 'react-native';\n\nimport { SendbirdFileMessage, SendbirdUserMessage, replace, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { MentionedUser } from '../types';\nimport { useSendbirdChat } from './useContext';\n\n// Note: The selection change with the keyboard cursor might not work properly with RTL languages\nconst useMentionTextInput = (params: { messageToEdit?: SendbirdUserMessage | SendbirdFileMessage }) => {\n const { mentionManager, sbOptions } = useSendbirdChat();\n\n const mentionedUsersRef = useRef<MentionedUser[]>([]);\n const textInputRef = useRef<TextInput>();\n\n const [text, setText] = useState('');\n const [selection, setSelection] = useState({ start: 0, end: 0 });\n\n // TODO: Refactor text edit logic more clearly\n useEffect(() => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(\n params.messageToEdit,\n sbOptions.uikit.groupChannel.channel.enableMention,\n )\n ) {\n const result = mentionManager.templateToTextAndMentionedUsers(\n params.messageToEdit && 'mentionedMessageTemplate' in params.messageToEdit\n ? params.messageToEdit.mentionedMessageTemplate ?? ''\n : '',\n params.messageToEdit?.mentionedUsers ?? [],\n );\n\n mentionedUsersRef.current = result.mentionedUsers;\n setText(result.mentionedText);\n } else {\n mentionedUsersRef.current = [];\n if (params.messageToEdit?.isUserMessage()) {\n setText(params.messageToEdit.message);\n }\n }\n }, [params.messageToEdit]);\n\n const onChangeText = useFreshCallback((_nextText: string, addedMentionedUser?: MentionedUser) => {\n const prevText = text;\n let nextText = _nextText;\n let offset = nextText.length - prevText.length;\n\n // Text clear\n if (nextText === '') {\n mentionedUsersRef.current = [];\n }\n // Text add\n else if (offset > 0) {\n /** Add mentioned user **/\n if (addedMentionedUser) mentionedUsersRef.current.push(addedMentionedUser);\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n selection.end,\n mentionedUsersRef.current,\n );\n }\n // Text remove\n else if (offset < 0) {\n // Ranged remove\n if (selection.start !== selection.end) {\n /** Filter mentioned users in selection range **/\n const { filtered, lastSelection } = mentionManager.removeMentionedUsersInSelection(\n selection,\n mentionedUsersRef.current,\n );\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n Math.max(selection.end, lastSelection),\n filtered,\n );\n }\n // Single remove\n else {\n /** Find mentioned user who ranges in removed selection **/\n const foundIndex = mentionedUsersRef.current.findIndex((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n /** If found, remove from the mentioned user list and remove remainder text **/\n if (foundIndex > -1) {\n const it = mentionedUsersRef.current[foundIndex];\n const remainderLength = it.range.end - it.range.start + offset;\n\n offset = -remainderLength + offset;\n nextText = replace(nextText, it.range.start, it.range.start + remainderLength, '');\n\n mentionedUsersRef.current.splice(foundIndex, 1);\n }\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n selection.end,\n mentionedUsersRef.current,\n );\n }\n }\n\n setText(nextText);\n });\n\n return {\n textInputRef,\n selection,\n onSelectionChange: useFreshCallback((e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => {\n const nativeSelection = { ...e.nativeEvent.selection };\n\n // NOTE: To synchronize call onSelectionChange after onChangeText called on each platform.\n setTimeout(() => {\n const mentionedUser = mentionedUsersRef.current.find((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, nativeSelection),\n );\n\n // Selection should be blocked if changed into mentioned area\n if (mentionedUser) {\n const selectionBlock = { start: mentionedUser.range.start, end: mentionedUser.range.end };\n textInputRef.current?.setNativeProps({ selection: selectionBlock });\n // BUG: setNativeProps called again when invoked onChangeText\n // https://github.com/facebook/react-native/issues/33520\n if (Platform.OS === 'android') {\n setTimeout(() => {\n textInputRef.current?.setNativeProps({ selection: { start: 0 } });\n }, 250);\n }\n setSelection(selectionBlock);\n } else {\n setSelection(nativeSelection);\n }\n }, 10);\n }),\n text,\n onChangeText,\n mentionedUsers: mentionedUsersRef.current,\n };\n};\n\nexport default useMentionTextInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useRef","useState","Platform","replace","useFreshCallback","useSendbirdChat","useMentionTextInput","params","mentionManager","sbOptions","mentionedUsersRef","textInputRef","undefined","text","setText","selection","setSelection","start","end","shouldUseMentionedMessageTemplate","messageToEdit","uikit","groupChannel","channel","enableMention","_params$messageToEdit","result","templateToTextAndMentionedUsers","mentionedMessageTemplate","mentionedUsers","current","mentionedText","_params$messageToEdit2","isUserMessage","message","onChangeText","_nextText","addedMentionedUser","prevText","nextText","offset","length","push","reconcileRangeOfMentionedUsers","filtered","lastSelection","removeMentionedUsersInSelection","Math","max","foundIndex","findIndex","it","rangeHelpers","overlaps","range","remainderLength","splice","onSelectionChange","e","nativeSelection","nativeEvent","setTimeout","mentionedUser","find","_textInputRef$current","selectionBlock","setNativeProps","OS","_textInputRef$current2"],"sources":["useMentionTextInput.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport type { NativeSyntheticEvent, TextInput, TextInputSelectionChangeEventData } from 'react-native';\nimport { Platform } from 'react-native';\n\nimport { SendbirdFileMessage, SendbirdUserMessage, replace, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport type { MentionedUser } from '../types';\nimport { useSendbirdChat } from './useContext';\n\n// Note: The selection change with the keyboard cursor might not work properly with RTL languages\nconst useMentionTextInput = (params: { messageToEdit?: SendbirdUserMessage | SendbirdFileMessage }) => {\n const { mentionManager, sbOptions } = useSendbirdChat();\n\n const mentionedUsersRef = useRef<MentionedUser[]>([]);\n const textInputRef = useRef<TextInput | undefined>(undefined);\n\n const [text, setText] = useState('');\n const [selection, setSelection] = useState({ start: 0, end: 0 });\n\n // TODO: Refactor text edit logic more clearly\n useEffect(() => {\n if (\n mentionManager.shouldUseMentionedMessageTemplate(\n params.messageToEdit,\n sbOptions.uikit.groupChannel.channel.enableMention,\n )\n ) {\n const result = mentionManager.templateToTextAndMentionedUsers(\n params.messageToEdit && 'mentionedMessageTemplate' in params.messageToEdit\n ? params.messageToEdit.mentionedMessageTemplate ?? ''\n : '',\n params.messageToEdit?.mentionedUsers ?? [],\n );\n\n mentionedUsersRef.current = result.mentionedUsers;\n setText(result.mentionedText);\n } else {\n mentionedUsersRef.current = [];\n if (params.messageToEdit?.isUserMessage()) {\n setText(params.messageToEdit.message);\n }\n }\n }, [params.messageToEdit]);\n\n const onChangeText = useFreshCallback((_nextText: string, addedMentionedUser?: MentionedUser) => {\n const prevText = text;\n let nextText = _nextText;\n let offset = nextText.length - prevText.length;\n\n // Text clear\n if (nextText === '') {\n mentionedUsersRef.current = [];\n }\n // Text add\n else if (offset > 0) {\n /** Add mentioned user **/\n if (addedMentionedUser) mentionedUsersRef.current.push(addedMentionedUser);\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n selection.end,\n mentionedUsersRef.current,\n );\n }\n // Text remove\n else if (offset < 0) {\n // Ranged remove\n if (selection.start !== selection.end) {\n /** Filter mentioned users in selection range **/\n const { filtered, lastSelection } = mentionManager.removeMentionedUsersInSelection(\n selection,\n mentionedUsersRef.current,\n );\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n Math.max(selection.end, lastSelection),\n filtered,\n );\n }\n // Single remove\n else {\n /** Find mentioned user who ranges in removed selection **/\n const foundIndex = mentionedUsersRef.current.findIndex((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, selection, 'underMore'),\n );\n /** If found, remove from the mentioned user list and remove remainder text **/\n if (foundIndex > -1) {\n const it = mentionedUsersRef.current[foundIndex];\n const remainderLength = it.range.end - it.range.start + offset;\n\n offset = -remainderLength + offset;\n nextText = replace(nextText, it.range.start, it.range.start + remainderLength, '');\n\n mentionedUsersRef.current.splice(foundIndex, 1);\n }\n\n /** Reconcile mentioned users range on the right side of the selection **/\n mentionedUsersRef.current = mentionManager.reconcileRangeOfMentionedUsers(\n offset,\n selection.end,\n mentionedUsersRef.current,\n );\n }\n }\n\n setText(nextText);\n });\n\n return {\n textInputRef,\n selection,\n onSelectionChange: useFreshCallback((e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => {\n const nativeSelection = { ...e.nativeEvent.selection };\n\n // NOTE: To synchronize call onSelectionChange after onChangeText called on each platform.\n setTimeout(() => {\n const mentionedUser = mentionedUsersRef.current.find((it) =>\n mentionManager.rangeHelpers.overlaps(it.range, nativeSelection),\n );\n\n // Selection should be blocked if changed into mentioned area\n if (mentionedUser) {\n const selectionBlock = { start: mentionedUser.range.start, end: mentionedUser.range.end };\n textInputRef.current?.setNativeProps({ selection: selectionBlock });\n // BUG: setNativeProps called again when invoked onChangeText\n // https://github.com/facebook/react-native/issues/33520\n if (Platform.OS === 'android') {\n setTimeout(() => {\n textInputRef.current?.setNativeProps({ selection: { start: 0 } });\n }, 250);\n }\n setSelection(selectionBlock);\n } else {\n setSelection(nativeSelection);\n }\n }, 10);\n }),\n text,\n onChangeText,\n mentionedUsers: mentionedUsersRef.current,\n };\n};\n\nexport default useMentionTextInput;\n"],"mappings":"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","ignoreList":[]}
@@ -9,7 +9,7 @@ const usePushTokenRegistration = () => {
9
9
  const {
10
10
  notificationService
11
11
  } = usePlatformService();
12
- const refreshListener = useRef();
12
+ const refreshListener = useRef(undefined);
13
13
  const [registerToken, unregisterToken, getToken] = useIIFE(() => {
14
14
  return [Platform.select({
15
15
  ios: token => sdk.registerAPNSPushTokenForCurrentUser(token),
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","Platform","Logger","useFreshCallback","useIIFE","usePlatformService","useSendbirdChat","usePushTokenRegistration","sdk","notificationService","refreshListener","registerToken","unregisterToken","getToken","select","ios","token","registerAPNSPushTokenForCurrentUser","default","registerFCMPushTokenForCurrentUser","unregisterAPNSPushTokenForCurrentUser","unregisterFCMPushTokenForCurrentUser","getAPNSToken","getFCMToken","registerPushTokenForCurrentUser","hasPermission","hasPushPermission","pushPermission","requestPushPermission","warn","current","onTokenRefresh","log","error","unregisterPushTokenForCurrentUser","_refreshListener$curr","call"],"sources":["usePushTokenRegistration.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { Platform } from 'react-native';\n\nimport { Logger, useFreshCallback, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService, useSendbirdChat } from './useContext';\n\nconst usePushTokenRegistration = () => {\n const { sdk } = useSendbirdChat();\n const { notificationService } = usePlatformService();\n\n const refreshListener = useRef<() => void>();\n const [registerToken, unregisterToken, getToken] = useIIFE(() => {\n return [\n Platform.select({\n ios: (token: string) => sdk.registerAPNSPushTokenForCurrentUser(token),\n default: (token: string) => sdk.registerFCMPushTokenForCurrentUser(token),\n }),\n Platform.select({\n ios: (token: string) => sdk.unregisterAPNSPushTokenForCurrentUser(token),\n default: (token: string) => sdk.unregisterFCMPushTokenForCurrentUser(token),\n }),\n Platform.select({\n ios: () => notificationService.getAPNSToken(),\n default: () => notificationService.getFCMToken(),\n }),\n ];\n });\n\n const registerPushTokenForCurrentUser = useFreshCallback(async () => {\n // Check and request push permission\n const hasPermission = await notificationService.hasPushPermission();\n if (!hasPermission) {\n const pushPermission = await notificationService.requestPushPermission();\n if (!pushPermission) {\n Logger.warn('[usePushTokenRegistration]', 'Not granted push permission');\n return;\n }\n }\n\n // Register token refresh listener\n refreshListener.current = notificationService.onTokenRefresh(registerToken);\n\n // Register token\n const token = await getToken();\n if (token) {\n try {\n await registerToken(token);\n Logger.log('[usePushTokenRegistration]', 'registered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);\n }\n }\n\n // Remove listener\n refreshListener.current = notificationService.onTokenRefresh(async (token) => {\n try {\n await registerToken(token);\n Logger.log('[usePushTokenRegistration]', 'registered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);\n }\n });\n });\n\n const unregisterPushTokenForCurrentUser = useFreshCallback(async () => {\n // Unregister token refresh listener\n refreshListener.current?.();\n\n // Unregister token\n const token = await getToken();\n if (token) {\n try {\n await unregisterToken(token);\n Logger.log('[usePushTokenRegistration]', 'unregistered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to unregister token:', error);\n }\n }\n });\n\n return { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser };\n};\n\nexport default usePushTokenRegistration;\n"],"mappings":"AAAA,SAASA,MAAM,QAAQ,OAAO;AAC9B,SAASC,QAAQ,QAAQ,cAAc;AAEvC,SAASC,MAAM,EAAEC,gBAAgB,EAAEC,OAAO,QAAQ,uBAAuB;AAEzE,SAASC,kBAAkB,EAAEC,eAAe,QAAQ,cAAc;AAElE,MAAMC,wBAAwB,GAAGA,CAAA,KAAM;EACrC,MAAM;IAAEC;EAAI,CAAC,GAAGF,eAAe,CAAC,CAAC;EACjC,MAAM;IAAEG;EAAoB,CAAC,GAAGJ,kBAAkB,CAAC,CAAC;EAEpD,MAAMK,eAAe,GAAGV,MAAM,CAAa,CAAC;EAC5C,MAAM,CAACW,aAAa,EAAEC,eAAe,EAAEC,QAAQ,CAAC,GAAGT,OAAO,CAAC,MAAM;IAC/D,OAAO,CACLH,QAAQ,CAACa,MAAM,CAAC;MACdC,GAAG,EAAGC,KAAa,IAAKR,GAAG,CAACS,mCAAmC,CAACD,KAAK,CAAC;MACtEE,OAAO,EAAGF,KAAa,IAAKR,GAAG,CAACW,kCAAkC,CAACH,KAAK;IAC1E,CAAC,CAAC,EACFf,QAAQ,CAACa,MAAM,CAAC;MACdC,GAAG,EAAGC,KAAa,IAAKR,GAAG,CAACY,qCAAqC,CAACJ,KAAK,CAAC;MACxEE,OAAO,EAAGF,KAAa,IAAKR,GAAG,CAACa,oCAAoC,CAACL,KAAK;IAC5E,CAAC,CAAC,EACFf,QAAQ,CAACa,MAAM,CAAC;MACdC,GAAG,EAAEA,CAAA,KAAMN,mBAAmB,CAACa,YAAY,CAAC,CAAC;MAC7CJ,OAAO,EAAEA,CAAA,KAAMT,mBAAmB,CAACc,WAAW,CAAC;IACjD,CAAC,CAAC,CACH;EACH,CAAC,CAAC;EAEF,MAAMC,+BAA+B,GAAGrB,gBAAgB,CAAC,YAAY;IACnE;IACA,MAAMsB,aAAa,GAAG,MAAMhB,mBAAmB,CAACiB,iBAAiB,CAAC,CAAC;IACnE,IAAI,CAACD,aAAa,EAAE;MAClB,MAAME,cAAc,GAAG,MAAMlB,mBAAmB,CAACmB,qBAAqB,CAAC,CAAC;MACxE,IAAI,CAACD,cAAc,EAAE;QACnBzB,MAAM,CAAC2B,IAAI,CAAC,4BAA4B,EAAE,6BAA6B,CAAC;QACxE;MACF;IACF;;IAEA;IACAnB,eAAe,CAACoB,OAAO,GAAGrB,mBAAmB,CAACsB,cAAc,CAACpB,aAAa,CAAC;;IAE3E;IACA,MAAMK,KAAK,GAAG,MAAMH,QAAQ,CAAC,CAAC;IAC9B,IAAIG,KAAK,EAAE;MACT,IAAI;QACF,MAAML,aAAa,CAACK,KAAK,CAAC;QAC1Bd,MAAM,CAAC8B,GAAG,CAAC,4BAA4B,EAAE,mBAAmB,EAAEhB,KAAK,CAAC;MACtE,CAAC,CAAC,OAAOiB,KAAK,EAAE;QACd/B,MAAM,CAAC+B,KAAK,CAAC,4BAA4B,EAAE,2BAA2B,EAAEA,KAAK,CAAC;MAChF;IACF;;IAEA;IACAvB,eAAe,CAACoB,OAAO,GAAGrB,mBAAmB,CAACsB,cAAc,CAAC,MAAOf,KAAK,IAAK;MAC5E,IAAI;QACF,MAAML,aAAa,CAACK,KAAK,CAAC;QAC1Bd,MAAM,CAAC8B,GAAG,CAAC,4BAA4B,EAAE,mBAAmB,EAAEhB,KAAK,CAAC;MACtE,CAAC,CAAC,OAAOiB,KAAK,EAAE;QACd/B,MAAM,CAAC+B,KAAK,CAAC,4BAA4B,EAAE,2BAA2B,EAAEA,KAAK,CAAC;MAChF;IACF,CAAC,CAAC;EACJ,CAAC,CAAC;EAEF,MAAMC,iCAAiC,GAAG/B,gBAAgB,CAAC,YAAY;IAAA,IAAAgC,qBAAA;IACrE;IACA,CAAAA,qBAAA,GAAAzB,eAAe,CAACoB,OAAO,cAAAK,qBAAA,eAAvBA,qBAAA,CAAAC,IAAA,CAAA1B,eAA0B,CAAC;;IAE3B;IACA,MAAMM,KAAK,GAAG,MAAMH,QAAQ,CAAC,CAAC;IAC9B,IAAIG,KAAK,EAAE;MACT,IAAI;QACF,MAAMJ,eAAe,CAACI,KAAK,CAAC;QAC5Bd,MAAM,CAAC8B,GAAG,CAAC,4BAA4B,EAAE,qBAAqB,EAAEhB,KAAK,CAAC;MACxE,CAAC,CAAC,OAAOiB,KAAK,EAAE;QACd/B,MAAM,CAAC+B,KAAK,CAAC,4BAA4B,EAAE,6BAA6B,EAAEA,KAAK,CAAC;MAClF;IACF;EACF,CAAC,CAAC;EAEF,OAAO;IAAET,+BAA+B;IAAEU;EAAkC,CAAC;AAC/E,CAAC;AAED,eAAe3B,wBAAwB","ignoreList":[]}
1
+ {"version":3,"names":["useRef","Platform","Logger","useFreshCallback","useIIFE","usePlatformService","useSendbirdChat","usePushTokenRegistration","sdk","notificationService","refreshListener","undefined","registerToken","unregisterToken","getToken","select","ios","token","registerAPNSPushTokenForCurrentUser","default","registerFCMPushTokenForCurrentUser","unregisterAPNSPushTokenForCurrentUser","unregisterFCMPushTokenForCurrentUser","getAPNSToken","getFCMToken","registerPushTokenForCurrentUser","hasPermission","hasPushPermission","pushPermission","requestPushPermission","warn","current","onTokenRefresh","log","error","unregisterPushTokenForCurrentUser","_refreshListener$curr","call"],"sources":["usePushTokenRegistration.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { Platform } from 'react-native';\n\nimport { Logger, useFreshCallback, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService, useSendbirdChat } from './useContext';\n\nconst usePushTokenRegistration = () => {\n const { sdk } = useSendbirdChat();\n const { notificationService } = usePlatformService();\n\n const refreshListener = useRef<(() => void) | undefined>(undefined);\n const [registerToken, unregisterToken, getToken] = useIIFE(() => {\n return [\n Platform.select({\n ios: (token: string) => sdk.registerAPNSPushTokenForCurrentUser(token),\n default: (token: string) => sdk.registerFCMPushTokenForCurrentUser(token),\n }),\n Platform.select({\n ios: (token: string) => sdk.unregisterAPNSPushTokenForCurrentUser(token),\n default: (token: string) => sdk.unregisterFCMPushTokenForCurrentUser(token),\n }),\n Platform.select({\n ios: () => notificationService.getAPNSToken(),\n default: () => notificationService.getFCMToken(),\n }),\n ];\n });\n\n const registerPushTokenForCurrentUser = useFreshCallback(async () => {\n // Check and request push permission\n const hasPermission = await notificationService.hasPushPermission();\n if (!hasPermission) {\n const pushPermission = await notificationService.requestPushPermission();\n if (!pushPermission) {\n Logger.warn('[usePushTokenRegistration]', 'Not granted push permission');\n return;\n }\n }\n\n // Register token refresh listener\n refreshListener.current = notificationService.onTokenRefresh(registerToken);\n\n // Register token\n const token = await getToken();\n if (token) {\n try {\n await registerToken(token);\n Logger.log('[usePushTokenRegistration]', 'registered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);\n }\n }\n\n // Remove listener\n refreshListener.current = notificationService.onTokenRefresh(async (token) => {\n try {\n await registerToken(token);\n Logger.log('[usePushTokenRegistration]', 'registered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to register token:', error);\n }\n });\n });\n\n const unregisterPushTokenForCurrentUser = useFreshCallback(async () => {\n // Unregister token refresh listener\n refreshListener.current?.();\n\n // Unregister token\n const token = await getToken();\n if (token) {\n try {\n await unregisterToken(token);\n Logger.log('[usePushTokenRegistration]', 'unregistered token:', token);\n } catch (error) {\n Logger.error('[usePushTokenRegistration]', 'failed to unregister token:', error);\n }\n }\n });\n\n return { registerPushTokenForCurrentUser, unregisterPushTokenForCurrentUser };\n};\n\nexport default usePushTokenRegistration;\n"],"mappings":"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","ignoreList":[]}
@@ -28,7 +28,7 @@ const useVoiceMessageInput = ({
28
28
  currentTime: 0,
29
29
  duration: 0
30
30
  });
31
- const recordingPath = useRef();
31
+ const recordingPath = useRef(undefined);
32
32
  const getVoiceMessageRecordingPath = () => {
33
33
  if (!recordingPath.current) throw new Error('No recording path');
34
34
  return recordingPath.current;
@@ -1 +1 @@
1
- {"version":3,"names":["useRef","useState","useAlert","Logger","getVoiceMessageFileObject","matchesOneOf","SBUUtils","useLocalization","usePlatformService","useVoiceMessageInput","onSend","onClose","alert","STRINGS","recorderService","playerService","fileService","status","setStatus","recordingTime","setRecordingTime","currentTime","minDuration","options","maxDuration","playingTime","setPlayingTime","duration","recordingPath","getVoiceMessageRecordingPath","current","Error","setVoiceMessageRecordingPath","path","clear","undefined","reset","state","actions","cancel","startRecording","granted","requestPermission","title","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_MICROPHONE","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","onPress","openSettings","error","unsubscribeRecording","addRecordingListener","prev","unsubscribeState","addStateListener","isExpo","record","uri","recordFilePath","createRecordFilePath","extension","convertedRecordPath","convertRecordPath","stopRecording","stop","playPlayer","PERMISSION_DEVICE_STORAGE","unsubscribePlayback","addPlaybackListener","play","pausePlayer","pause","send","voiceFile","Math","floor"],"sources":["useVoiceMessageInput.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport { useAlert } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, getVoiceMessageFileObject, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport { FileType } from '../platform/types';\nimport { useLocalization, usePlatformService } from './useContext';\n\ntype State = {\n /**\n * Status\n *\n * idle:\n * - cancel(): idle\n * - startRecording(): recording\n * recording:\n * - cancel(): idle\n * - stopRecording(): recording_completed\n * - send(): recording_completed > idle\n * recording_completed:\n * - cancel(): idle\n * - playPlayer(): playing\n * - send(): idle\n * playing:\n * - cancel(): idle\n * - pausePlayer(): playing_paused\n * - send(): idle\n * playing_paused:\n * - cancel(): idle\n * - playPlayer(): playing\n * - send(): idle\n * */\n status: 'idle' | 'recording' | 'recording_completed' | 'playing' | 'playing_paused';\n recordingTime: {\n currentTime: number;\n minDuration: number;\n maxDuration: number;\n };\n playingTime: {\n currentTime: number;\n duration: number;\n };\n};\n\nexport interface VoiceMessageInputResult {\n actions: {\n cancel: () => Promise<void>;\n startRecording: () => Promise<void>;\n stopRecording: () => Promise<void>;\n playPlayer: () => Promise<void>;\n pausePlayer: () => Promise<void>;\n send: () => Promise<void>;\n };\n state: State;\n}\n\ntype Props = {\n onClose: () => Promise<void>;\n onSend: (voiceFile: FileType, duration: number) => void;\n};\n\nconst useVoiceMessageInput = ({ onSend, onClose }: Props): VoiceMessageInputResult => {\n const { alert } = useAlert();\n const { STRINGS } = useLocalization();\n const { recorderService, playerService, fileService } = usePlatformService();\n const [status, setStatus] = useState<State['status']>('idle');\n\n const [recordingTime, setRecordingTime] = useState({\n currentTime: 0,\n minDuration: recorderService.options.minDuration,\n maxDuration: recorderService.options.maxDuration,\n });\n const [playingTime, setPlayingTime] = useState({\n currentTime: 0,\n duration: 0,\n });\n\n const recordingPath = useRef<{ recordFilePath: string; uri: string }>();\n const getVoiceMessageRecordingPath = () => {\n if (!recordingPath.current) throw new Error('No recording path');\n return recordingPath.current;\n };\n const setVoiceMessageRecordingPath = (path: { recordFilePath: string; uri: string }) => {\n recordingPath.current = path;\n };\n\n const clear = async () => {\n recordingPath.current = undefined;\n await playerService.reset();\n await recorderService.reset();\n setRecordingTime({\n currentTime: 0,\n minDuration: recorderService.options.minDuration,\n maxDuration: recorderService.options.maxDuration,\n });\n setPlayingTime({\n currentTime: 0,\n duration: 0,\n });\n setStatus('idle');\n };\n\n return {\n state: {\n status,\n recordingTime,\n playingTime,\n },\n actions: {\n async cancel() {\n await clear();\n },\n async startRecording() {\n const granted = await recorderService.requestPermission();\n if (!granted) {\n await onClose();\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_MICROPHONE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n Logger.error('Failed to request permission for recorder');\n return;\n }\n\n if (matchesOneOf(status, ['idle'])) {\n // Before start recording, if player is not idle, reset it.\n if (playerService.state !== 'idle') {\n await playerService.reset();\n }\n\n const unsubscribeRecording = recorderService.addRecordingListener(({ currentTime }) => {\n setRecordingTime({\n currentTime,\n maxDuration: recorderService.options.maxDuration,\n minDuration: recorderService.options.minDuration,\n });\n setPlayingTime((prev) => ({ ...prev, duration: currentTime }));\n });\n\n const unsubscribeState = recorderService.addStateListener((state) => {\n switch (state) {\n case 'recording':\n setStatus('recording');\n break;\n case 'completed':\n setStatus('recording_completed');\n unsubscribeRecording();\n unsubscribeState();\n break;\n }\n });\n\n if (SBUUtils.isExpo()) {\n await recorderService.record();\n if (recorderService.uri) {\n setVoiceMessageRecordingPath({ recordFilePath: recorderService.uri, uri: recorderService.uri });\n }\n } else {\n const recordFilePath = fileService.createRecordFilePath(recorderService.options.extension);\n const convertedRecordPath = recorderService.convertRecordPath(recordFilePath.recordFilePath);\n setVoiceMessageRecordingPath({ ...recordFilePath, recordFilePath: convertedRecordPath });\n await recorderService.record(convertedRecordPath);\n }\n }\n },\n async stopRecording() {\n if (matchesOneOf(status, ['recording'])) {\n await recorderService.stop();\n }\n },\n async playPlayer() {\n const granted = await playerService.requestPermission();\n if (!granted) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n Logger.error('Failed to request permission for player');\n return;\n }\n\n if (matchesOneOf(status, ['recording_completed', 'playing_paused'])) {\n const unsubscribePlayback = playerService.addPlaybackListener(({ currentTime, duration }) => {\n setPlayingTime({ currentTime, duration });\n });\n\n const unsubscribeState = playerService.addStateListener((state) => {\n switch (state) {\n case 'playing':\n setStatus('playing');\n break;\n case 'paused': {\n setStatus('playing_paused');\n unsubscribeState();\n unsubscribePlayback();\n break;\n }\n case 'stopped': {\n setStatus('playing_paused');\n unsubscribeState();\n unsubscribePlayback();\n setPlayingTime((prev) => ({ ...prev, currentTime: 0 }));\n break;\n }\n }\n });\n\n await playerService.play(getVoiceMessageRecordingPath().recordFilePath);\n }\n },\n async pausePlayer() {\n if (matchesOneOf(status, ['playing'])) {\n await playerService.pause();\n }\n },\n async send() {\n if (\n matchesOneOf(status, ['recording', 'recording_completed', 'playing', 'playing_paused']) &&\n recordingPath.current\n ) {\n if (status === 'recording') {\n await recorderService.stop();\n }\n const voiceFile = getVoiceMessageFileObject(recordingPath.current.uri, recorderService.options.extension);\n onSend(voiceFile, Math.floor(recordingTime.currentTime));\n await clear();\n }\n },\n },\n };\n};\n\nexport default useVoiceMessageInput;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useRef","useState","useAlert","Logger","getVoiceMessageFileObject","matchesOneOf","SBUUtils","useLocalization","usePlatformService","useVoiceMessageInput","onSend","onClose","alert","STRINGS","recorderService","playerService","fileService","status","setStatus","recordingTime","setRecordingTime","currentTime","minDuration","options","maxDuration","playingTime","setPlayingTime","duration","recordingPath","undefined","getVoiceMessageRecordingPath","current","Error","setVoiceMessageRecordingPath","path","clear","reset","state","actions","cancel","startRecording","granted","requestPermission","title","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_MICROPHONE","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","onPress","openSettings","error","unsubscribeRecording","addRecordingListener","prev","unsubscribeState","addStateListener","isExpo","record","uri","recordFilePath","createRecordFilePath","extension","convertedRecordPath","convertRecordPath","stopRecording","stop","playPlayer","PERMISSION_DEVICE_STORAGE","unsubscribePlayback","addPlaybackListener","play","pausePlayer","pause","send","voiceFile","Math","floor"],"sources":["useVoiceMessageInput.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport { useAlert } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, getVoiceMessageFileObject, matchesOneOf } from '@sendbird/uikit-utils';\n\nimport SBUUtils from '../libs/SBUUtils';\nimport { FileType } from '../platform/types';\nimport { useLocalization, usePlatformService } from './useContext';\n\ntype State = {\n /**\n * Status\n *\n * idle:\n * - cancel(): idle\n * - startRecording(): recording\n * recording:\n * - cancel(): idle\n * - stopRecording(): recording_completed\n * - send(): recording_completed > idle\n * recording_completed:\n * - cancel(): idle\n * - playPlayer(): playing\n * - send(): idle\n * playing:\n * - cancel(): idle\n * - pausePlayer(): playing_paused\n * - send(): idle\n * playing_paused:\n * - cancel(): idle\n * - playPlayer(): playing\n * - send(): idle\n * */\n status: 'idle' | 'recording' | 'recording_completed' | 'playing' | 'playing_paused';\n recordingTime: {\n currentTime: number;\n minDuration: number;\n maxDuration: number;\n };\n playingTime: {\n currentTime: number;\n duration: number;\n };\n};\n\nexport interface VoiceMessageInputResult {\n actions: {\n cancel: () => Promise<void>;\n startRecording: () => Promise<void>;\n stopRecording: () => Promise<void>;\n playPlayer: () => Promise<void>;\n pausePlayer: () => Promise<void>;\n send: () => Promise<void>;\n };\n state: State;\n}\n\ntype Props = {\n onClose: () => Promise<void>;\n onSend: (voiceFile: FileType, duration: number) => void;\n};\n\nconst useVoiceMessageInput = ({ onSend, onClose }: Props): VoiceMessageInputResult => {\n const { alert } = useAlert();\n const { STRINGS } = useLocalization();\n const { recorderService, playerService, fileService } = usePlatformService();\n const [status, setStatus] = useState<State['status']>('idle');\n\n const [recordingTime, setRecordingTime] = useState({\n currentTime: 0,\n minDuration: recorderService.options.minDuration,\n maxDuration: recorderService.options.maxDuration,\n });\n const [playingTime, setPlayingTime] = useState({\n currentTime: 0,\n duration: 0,\n });\n\n const recordingPath = useRef<{ recordFilePath: string; uri: string } | undefined>(undefined);\n const getVoiceMessageRecordingPath = () => {\n if (!recordingPath.current) throw new Error('No recording path');\n return recordingPath.current;\n };\n const setVoiceMessageRecordingPath = (path: { recordFilePath: string; uri: string }) => {\n recordingPath.current = path;\n };\n\n const clear = async () => {\n recordingPath.current = undefined;\n await playerService.reset();\n await recorderService.reset();\n setRecordingTime({\n currentTime: 0,\n minDuration: recorderService.options.minDuration,\n maxDuration: recorderService.options.maxDuration,\n });\n setPlayingTime({\n currentTime: 0,\n duration: 0,\n });\n setStatus('idle');\n };\n\n return {\n state: {\n status,\n recordingTime,\n playingTime,\n },\n actions: {\n async cancel() {\n await clear();\n },\n async startRecording() {\n const granted = await recorderService.requestPermission();\n if (!granted) {\n await onClose();\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_MICROPHONE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n Logger.error('Failed to request permission for recorder');\n return;\n }\n\n if (matchesOneOf(status, ['idle'])) {\n // Before start recording, if player is not idle, reset it.\n if (playerService.state !== 'idle') {\n await playerService.reset();\n }\n\n const unsubscribeRecording = recorderService.addRecordingListener(({ currentTime }) => {\n setRecordingTime({\n currentTime,\n maxDuration: recorderService.options.maxDuration,\n minDuration: recorderService.options.minDuration,\n });\n setPlayingTime((prev) => ({ ...prev, duration: currentTime }));\n });\n\n const unsubscribeState = recorderService.addStateListener((state) => {\n switch (state) {\n case 'recording':\n setStatus('recording');\n break;\n case 'completed':\n setStatus('recording_completed');\n unsubscribeRecording();\n unsubscribeState();\n break;\n }\n });\n\n if (SBUUtils.isExpo()) {\n await recorderService.record();\n if (recorderService.uri) {\n setVoiceMessageRecordingPath({ recordFilePath: recorderService.uri, uri: recorderService.uri });\n }\n } else {\n const recordFilePath = fileService.createRecordFilePath(recorderService.options.extension);\n const convertedRecordPath = recorderService.convertRecordPath(recordFilePath.recordFilePath);\n setVoiceMessageRecordingPath({ ...recordFilePath, recordFilePath: convertedRecordPath });\n await recorderService.record(convertedRecordPath);\n }\n }\n },\n async stopRecording() {\n if (matchesOneOf(status, ['recording'])) {\n await recorderService.stop();\n }\n },\n async playPlayer() {\n const granted = await playerService.requestPermission();\n if (!granted) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n Logger.error('Failed to request permission for player');\n return;\n }\n\n if (matchesOneOf(status, ['recording_completed', 'playing_paused'])) {\n const unsubscribePlayback = playerService.addPlaybackListener(({ currentTime, duration }) => {\n setPlayingTime({ currentTime, duration });\n });\n\n const unsubscribeState = playerService.addStateListener((state) => {\n switch (state) {\n case 'playing':\n setStatus('playing');\n break;\n case 'paused': {\n setStatus('playing_paused');\n unsubscribeState();\n unsubscribePlayback();\n break;\n }\n case 'stopped': {\n setStatus('playing_paused');\n unsubscribeState();\n unsubscribePlayback();\n setPlayingTime((prev) => ({ ...prev, currentTime: 0 }));\n break;\n }\n }\n });\n\n await playerService.play(getVoiceMessageRecordingPath().recordFilePath);\n }\n },\n async pausePlayer() {\n if (matchesOneOf(status, ['playing'])) {\n await playerService.pause();\n }\n },\n async send() {\n if (\n matchesOneOf(status, ['recording', 'recording_completed', 'playing', 'playing_paused']) &&\n recordingPath.current\n ) {\n if (status === 'recording') {\n await recorderService.stop();\n }\n const voiceFile = getVoiceMessageFileObject(recordingPath.current.uri, recorderService.options.extension);\n onSend(voiceFile, Math.floor(recordingTime.currentTime));\n await clear();\n }\n },\n },\n };\n};\n\nexport default useVoiceMessageInput;\n"],"mappings":"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","ignoreList":[]}
@@ -8,6 +8,8 @@ const createExpoFileService = ({
8
8
  mediaLibraryModule,
9
9
  fsModule
10
10
  }) => {
11
+ var _imagePickerModule$UI;
12
+ const preferredAssetRepresentationMode = (_imagePickerModule$UI = imagePickerModule.UIImagePickerPreferredAssetRepresentationMode) === null || _imagePickerModule$UI === void 0 ? void 0 : _imagePickerModule$UI.Compatible;
11
13
  class ExpoFileServiceInterface {
12
14
  async hasCameraPermission() {
13
15
  const res = await imagePickerModule.getCameraPermissionsAsync();
@@ -44,6 +46,7 @@ const createExpoFileService = ({
44
46
  }
45
47
  }
46
48
  const response = await imagePickerModule.launchCameraAsync({
49
+ preferredAssetRepresentationMode,
47
50
  mediaTypes: (() => {
48
51
  switch (options === null || options === void 0 ? void 0 : options.mediaType) {
49
52
  case 'photo':
@@ -74,6 +77,7 @@ const createExpoFileService = ({
74
77
  const selectionLimit = (options === null || options === void 0 ? void 0 : options.selectionLimit) || 1;
75
78
  const response = await imagePickerModule.launchImageLibraryAsync({
76
79
  selectionLimit,
80
+ preferredAssetRepresentationMode,
77
81
  mediaTypes: (() => {
78
82
  switch (options === null || options === void 0 ? void 0 : options.mediaType) {
79
83
  case 'photo':
@@ -1 +1 @@
1
- {"version":3,"names":["getFileType","SBUError","expoBackwardUtils","expoPermissionGranted","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","e","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath"],"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":[]}
1
+ {"version":3,"names":["getFileType","SBUError","expoBackwardUtils","expoPermissionGranted","createExpoFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","_imagePickerModule$UI","preferredAssetRepresentationMode","UIImagePickerPreferredAssetRepresentationMode","Compatible","ExpoFileServiceInterface","hasCameraPermission","res","getCameraPermissionsAsync","requestCameraPermission","requestCameraPermissionsAsync","hasMediaLibraryReadPermission","perms","getMediaLibraryPermissionsAsync","requestMediaLibraryReadPermission","requestMediaLibraryPermissionsAsync","hasMediaLibraryWritePermission","getPermissionsAsync","requestMediaLibraryWritePermission","requestPermissionsAsync","openCamera","options","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCameraAsync","mediaTypes","mediaType","MediaTypeOptions","Images","Videos","All","imagePicker","isCanceled","file","toFilePickerResponses","openMediaLibrary","_options$onOpenFailur2","selectionLimit","launchImageLibraryAsync","openDocument","getDocumentAsync","type","documentPicker","e","_options$onOpenFailur3","UNKNOWN","save","Error","basePath","fileSystem","getDocumentDirectory","getCacheDirectory","downloadPath","fileName","downloadFile","fileUrl","fileType","match","saveToLibraryAsync","uri","createRecordFilePath","customExtension","filename","Date","now","recordFilePath"],"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 const preferredAssetRepresentationMode = imagePickerModule.UIImagePickerPreferredAssetRepresentationMode?.Compatible;\n\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 preferredAssetRepresentationMode,\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 preferredAssetRepresentationMode,\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":[]}
@@ -106,6 +106,7 @@ const createNativeFileService = ({
106
106
  const response = await imagePickerModule.launchCamera({
107
107
  presentationStyle: 'fullScreen',
108
108
  cameraType: (options === null || options === void 0 ? void 0 : options.cameraType) ?? 'back',
109
+ assetRepresentationMode: 'compatible',
109
110
  mediaType: (() => {
110
111
  switch (options === null || options === void 0 ? void 0 : options.mediaType) {
111
112
  case 'photo':
@@ -156,6 +157,7 @@ const createNativeFileService = ({
156
157
  const response = await imagePickerModule.launchImageLibrary({
157
158
  presentationStyle: 'fullScreen',
158
159
  selectionLimit,
160
+ assetRepresentationMode: 'compatible',
159
161
  mediaType: (() => {
160
162
  switch (options === null || options === void 0 ? void 0 : options.mediaType) {
161
163
  case 'photo':
@@ -1 +1 @@
1
- {"version":3,"names":["Platform","Logger","getFileExtension","getFileExtensionFromMime","getFileExtensionFromUri","getFileType","normalizeFileName","SBUError","nativePermissionGranted","normalizeFile","openDocument","getAndroidStoragePermissionsByAPILevel","permissionModule","OS","Version","PERMISSIONS","ANDROID","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","requiredPermissions","select","ios","IOS","CAMERA","android","default","optionalPermissions","MICROPHONE","mediaLibraryPermissions","PHOTO_LIBRARY","PHOTO_LIBRARY_ADD_ONLY","NativeFileService","constructor","_defineProperty","options","dirname","Dirs","CacheDir","DocumentDir","context","filename","fileName","extension","fileType","fileUrl","path","buildDownloadPath","FileSystem","fetch","downloadedPath","file","name","type","hasCameraPermission","status","checkMultiple","requestCameraPermission","requiredPermissionsStatus","requestMultiple","hasMediaLibraryPermission","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","error","createRecordFilePath","customExtension","Date","now","recordFilePath","startsWith"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as FileAccess from 'react-native-file-access';\nimport type * as ImagePicker from 'react-native-image-picker';\nimport type * as Permissions from 'react-native-permissions';\nimport type { Permission } from 'react-native-permissions';\n\nimport {\n Logger,\n getFileExtension,\n getFileExtensionFromMime,\n getFileExtensionFromUri,\n getFileType,\n normalizeFileName,\n} from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport nativePermissionGranted from '../utils/nativePermissionGranted';\nimport normalizeFile from '../utils/normalizeFile';\nimport { DocumentPicker, openDocument } from './openDocument.native';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nfunction getAndroidStoragePermissionsByAPILevel(permissionModule: typeof Permissions): Permission[] {\n if (Platform.OS !== 'android') return [];\n\n if (Platform.Version > 32) {\n return [];\n }\n\n if (Platform.Version > 28) {\n return [permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE];\n }\n\n return [\n permissionModule.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE,\n permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE,\n ];\n}\n\nconst createNativeFileService = ({\n imagePickerModule,\n documentPickerModule,\n permissionModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ImagePicker;\n documentPickerModule: DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const requiredPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const optionalPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [],\n default: [],\n });\n const mediaLibraryPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY, permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY_ADD_ONLY],\n android: getAndroidStoragePermissionsByAPILevel(permissionModule),\n default: [],\n });\n\n class NativeFileService implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(requiredPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const requiredPermissionsStatus = await permissionModule.requestMultiple(requiredPermissions);\n if (!nativePermissionGranted(requiredPermissionsStatus)) return false;\n\n await permissionModule.requestMultiple(optionalPermissions);\n return true;\n }\n\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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.launchCamera({\n presentationStyle: 'fullScreen',\n cameraType: options?.cameraType ?? 'back',\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n const { fileName: name, fileSize: size, type, uri } = response.assets?.[0] ?? {};\n return normalizeFile({ uri, size, name, type });\n }\n\n async openMediaLibrary(options?: OpenMediaLibraryOptions): Promise<FilePickerResponse[] | null> {\n /**\n * NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}\n * We do not support 0 (any number of files)\n **/\n const selectionLimit = options?.selectionLimit || 1;\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibrary({\n presentationStyle: 'fullScreen',\n selectionLimit,\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n return Promise.all(\n (response.assets || [])\n .slice(0, selectionLimit)\n .map(({ fileName: name, fileSize: size, type, uri }) => normalizeFile({ uri, size, name, type })),\n );\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n return await openDocument(documentPickerModule, options);\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const { downloadedPath, file } = await this.downloadFile(options);\n\n if (Platform.OS === 'ios') {\n if (file.type === 'image' || file.type === 'video') {\n const mediaTypeMap = { 'image': 'photo', 'video': 'video' } as const;\n const mediaType = mediaTypeMap[file.type];\n await mediaLibraryModule.save(downloadedPath, { type: mediaType });\n }\n }\n\n if (Platform.OS === 'android') {\n const externalDirMap = { 'file': 'downloads', 'audio': 'audio', 'image': 'images', 'video': 'video' } as const;\n const externalDir = externalDirMap[file.type];\n await fsModule.FileSystem.cpExternal(downloadedPath, file.name, externalDir).catch(() => {\n Logger.error('Failed to save file to external storage. Retry saving to downloads directory instead.');\n return fsModule.FileSystem.cpExternal(downloadedPath, file.name, 'downloads');\n });\n }\n\n return downloadedPath;\n }\n\n private buildDownloadPath = async (options: SaveOptions) => {\n const dirname = Platform.select({ android: fsModule.Dirs.CacheDir, default: fsModule.Dirs.DocumentDir });\n const context = { dirname, filename: options.fileName };\n const extension =\n getFileExtension(options.fileName) ||\n getFileExtensionFromMime(options.fileType) ||\n getFileExtension(options.fileUrl) ||\n (await getFileExtensionFromUri(options.fileUrl));\n\n if (extension) context.filename = normalizeFileName(context.filename, extension);\n\n return { path: `${context.dirname}/${context.filename}`, ...context };\n };\n\n private downloadFile = async (options: SaveOptions) => {\n const { path, filename } = await this.buildDownloadPath(options);\n await fsModule.FileSystem.fetch(options.fileUrl, { path });\n return {\n downloadedPath: path,\n file: {\n name: filename,\n type: getFileType(getFileExtension(path)),\n } as const,\n };\n };\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const filename = `record-${Date.now()}.${customExtension}`;\n const path = `${fsModule.Dirs.CacheDir}/${filename}`;\n return Platform.select({\n ios: {\n uri: path,\n recordFilePath: path,\n },\n android: {\n uri: path.startsWith('file://') ? path : 'file://' + path,\n recordFilePath: path,\n },\n default: {\n uri: path,\n recordFilePath: path,\n },\n });\n }\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["Platform","Logger","getFileExtension","getFileExtensionFromMime","getFileExtensionFromUri","getFileType","normalizeFileName","SBUError","nativePermissionGranted","normalizeFile","openDocument","getAndroidStoragePermissionsByAPILevel","permissionModule","OS","Version","PERMISSIONS","ANDROID","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","requiredPermissions","select","ios","IOS","CAMERA","android","default","optionalPermissions","MICROPHONE","mediaLibraryPermissions","PHOTO_LIBRARY","PHOTO_LIBRARY_ADD_ONLY","NativeFileService","constructor","_defineProperty","options","dirname","Dirs","CacheDir","DocumentDir","context","filename","fileName","extension","fileType","fileUrl","path","buildDownloadPath","FileSystem","fetch","downloadedPath","file","name","type","hasCameraPermission","status","checkMultiple","requestCameraPermission","requiredPermissionsStatus","requestMultiple","hasMediaLibraryPermission","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","call","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","assetRepresentationMode","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","error","createRecordFilePath","customExtension","Date","now","recordFilePath","startsWith"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as FileAccess from 'react-native-file-access';\nimport type * as ImagePicker from 'react-native-image-picker';\nimport type * as Permissions from 'react-native-permissions';\nimport type { Permission } from 'react-native-permissions';\n\nimport {\n Logger,\n getFileExtension,\n getFileExtensionFromMime,\n getFileExtensionFromUri,\n getFileType,\n normalizeFileName,\n} from '@sendbird/uikit-utils';\n\nimport SBUError from '../libs/SBUError';\nimport nativePermissionGranted from '../utils/nativePermissionGranted';\nimport normalizeFile from '../utils/normalizeFile';\nimport { DocumentPicker, openDocument } from './openDocument.native';\nimport type {\n FilePickerResponse,\n FileServiceInterface,\n OpenCameraOptions,\n OpenDocumentOptions,\n OpenMediaLibraryOptions,\n SaveOptions,\n} from './types';\n\nfunction getAndroidStoragePermissionsByAPILevel(permissionModule: typeof Permissions): Permission[] {\n if (Platform.OS !== 'android') return [];\n\n if (Platform.Version > 32) {\n return [];\n }\n\n if (Platform.Version > 28) {\n return [permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE];\n }\n\n return [\n permissionModule.PERMISSIONS.ANDROID.WRITE_EXTERNAL_STORAGE,\n permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE,\n ];\n}\n\nconst createNativeFileService = ({\n imagePickerModule,\n documentPickerModule,\n permissionModule,\n mediaLibraryModule,\n fsModule,\n}: {\n imagePickerModule: typeof ImagePicker;\n documentPickerModule: DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const requiredPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\n default: [],\n });\n const optionalPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [],\n default: [],\n });\n const mediaLibraryPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY, permissionModule.PERMISSIONS.IOS.PHOTO_LIBRARY_ADD_ONLY],\n android: getAndroidStoragePermissionsByAPILevel(permissionModule),\n default: [],\n });\n\n class NativeFileService implements FileServiceInterface {\n async hasCameraPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(requiredPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestCameraPermission(): Promise<boolean> {\n const requiredPermissionsStatus = await permissionModule.requestMultiple(requiredPermissions);\n if (!nativePermissionGranted(requiredPermissionsStatus)) return false;\n\n await permissionModule.requestMultiple(optionalPermissions);\n return true;\n }\n\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\n }\n\n async requestMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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.launchCamera({\n presentationStyle: 'fullScreen',\n cameraType: options?.cameraType ?? 'back',\n assetRepresentationMode: 'compatible',\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n const { fileName: name, fileSize: size, type, uri } = response.assets?.[0] ?? {};\n return normalizeFile({ uri, size, name, type });\n }\n\n async openMediaLibrary(options?: OpenMediaLibraryOptions): Promise<FilePickerResponse[] | null> {\n /**\n * NOTE: options.selectionLimit {@link https://github.com/react-native-image-picker/react-native-image-picker#options}\n * We do not support 0 (any number of files)\n **/\n const selectionLimit = options?.selectionLimit || 1;\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) {\n options?.onOpenFailure?.(SBUError.PERMISSIONS_DENIED);\n return null;\n }\n }\n\n const response = await imagePickerModule.launchImageLibrary({\n presentationStyle: 'fullScreen',\n selectionLimit,\n assetRepresentationMode: 'compatible',\n mediaType: (() => {\n switch (options?.mediaType) {\n case 'photo':\n return 'photo';\n case 'video':\n return 'video';\n case 'all':\n return 'mixed';\n default:\n return 'photo';\n }\n })(),\n });\n if (response.didCancel) return null;\n if (response.errorCode === 'camera_unavailable') {\n options?.onOpenFailure?.(SBUError.DEVICE_UNAVAILABLE, new Error(response.errorMessage));\n return null;\n }\n\n return Promise.all(\n (response.assets || [])\n .slice(0, selectionLimit)\n .map(({ fileName: name, fileSize: size, type, uri }) => normalizeFile({ uri, size, name, type })),\n );\n }\n\n async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n return await openDocument(documentPickerModule, options);\n }\n\n async save(options: SaveOptions): Promise<string> {\n const hasPermission = await this.hasMediaLibraryPermission();\n if (!hasPermission) {\n const granted = await this.requestMediaLibraryPermission();\n if (!granted) throw new Error('Permission not granted');\n }\n\n const { downloadedPath, file } = await this.downloadFile(options);\n\n if (Platform.OS === 'ios') {\n if (file.type === 'image' || file.type === 'video') {\n const mediaTypeMap = { 'image': 'photo', 'video': 'video' } as const;\n const mediaType = mediaTypeMap[file.type];\n await mediaLibraryModule.save(downloadedPath, { type: mediaType });\n }\n }\n\n if (Platform.OS === 'android') {\n const externalDirMap = { 'file': 'downloads', 'audio': 'audio', 'image': 'images', 'video': 'video' } as const;\n const externalDir = externalDirMap[file.type];\n await fsModule.FileSystem.cpExternal(downloadedPath, file.name, externalDir).catch(() => {\n Logger.error('Failed to save file to external storage. Retry saving to downloads directory instead.');\n return fsModule.FileSystem.cpExternal(downloadedPath, file.name, 'downloads');\n });\n }\n\n return downloadedPath;\n }\n\n private buildDownloadPath = async (options: SaveOptions) => {\n const dirname = Platform.select({ android: fsModule.Dirs.CacheDir, default: fsModule.Dirs.DocumentDir });\n const context = { dirname, filename: options.fileName };\n const extension =\n getFileExtension(options.fileName) ||\n getFileExtensionFromMime(options.fileType) ||\n getFileExtension(options.fileUrl) ||\n (await getFileExtensionFromUri(options.fileUrl));\n\n if (extension) context.filename = normalizeFileName(context.filename, extension);\n\n return { path: `${context.dirname}/${context.filename}`, ...context };\n };\n\n private downloadFile = async (options: SaveOptions) => {\n const { path, filename } = await this.buildDownloadPath(options);\n await fsModule.FileSystem.fetch(options.fileUrl, { path });\n return {\n downloadedPath: path,\n file: {\n name: filename,\n type: getFileType(getFileExtension(path)),\n } as const,\n };\n };\n\n createRecordFilePath(customExtension = 'm4a'): { recordFilePath: string; uri: string } {\n const filename = `record-${Date.now()}.${customExtension}`;\n const path = `${fsModule.Dirs.CacheDir}/${filename}`;\n return Platform.select({\n ios: {\n uri: path,\n recordFilePath: path,\n },\n android: {\n uri: path.startsWith('file://') ? path : 'file://' + path,\n recordFilePath: path,\n },\n default: {\n uri: path,\n recordFilePath: path,\n },\n });\n }\n }\n\n return new NativeFileService();\n};\n\nexport default createNativeFileService;\n"],"mappings":";;;AACA,SAASA,QAAQ,QAAQ,cAAc;AAMvC,SACEC,MAAM,EACNC,gBAAgB,EAChBC,wBAAwB,EACxBC,uBAAuB,EACvBC,WAAW,EACXC,iBAAiB,QACZ,uBAAuB;AAE9B,OAAOC,QAAQ,MAAM,kBAAkB;AACvC,OAAOC,uBAAuB,MAAM,kCAAkC;AACtE,OAAOC,aAAa,MAAM,wBAAwB;AAClD,SAAyBC,YAAY,QAAQ,uBAAuB;AAUpE,SAASC,sCAAsCA,CAACC,gBAAoC,EAAgB;EAClG,IAAIZ,QAAQ,CAACa,EAAE,KAAK,SAAS,EAAE,OAAO,EAAE;EAExC,IAAIb,QAAQ,CAACc,OAAO,GAAG,EAAE,EAAE;IACzB,OAAO,EAAE;EACX;EAEA,IAAId,QAAQ,CAACc,OAAO,GAAG,EAAE,EAAE;IACzB,OAAO,CAACF,gBAAgB,CAACG,WAAW,CAACC,OAAO,CAACC,qBAAqB,CAAC;EACrE;EAEA,OAAO,CACLL,gBAAgB,CAACG,WAAW,CAACC,OAAO,CAACE,sBAAsB,EAC3DN,gBAAgB,CAACG,WAAW,CAACC,OAAO,CAACC,qBAAqB,CAC3D;AACH;AAEA,MAAME,uBAAuB,GAAGA,CAAC;EAC/BC,iBAAiB;EACjBC,oBAAoB;EACpBT,gBAAgB;EAChBU,kBAAkB;EAClBC;AAOF,CAAC,KAA2B;EAC1B,MAAMC,mBAAiC,GAAGxB,QAAQ,CAACyB,MAAM,CAAC;IACxDC,GAAG,EAAE,CAACd,gBAAgB,CAACG,WAAW,CAACY,GAAG,CAACC,MAAM,CAAC;IAC9CC,OAAO,EAAE,CAACjB,gBAAgB,CAACG,WAAW,CAACC,OAAO,CAACY,MAAM,CAAC;IACtDE,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAMC,mBAAiC,GAAG/B,QAAQ,CAACyB,MAAM,CAAC;IACxDC,GAAG,EAAE,CAACd,gBAAgB,CAACG,WAAW,CAACY,GAAG,CAACK,UAAU,CAAC;IAClDH,OAAO,EAAE,EAAE;IACXC,OAAO,EAAE;EACX,CAAC,CAAC;EACF,MAAMG,uBAAqC,GAAGjC,QAAQ,CAACyB,MAAM,CAAC;IAC5DC,GAAG,EAAE,CAACd,gBAAgB,CAACG,WAAW,CAACY,GAAG,CAACO,aAAa,EAAEtB,gBAAgB,CAACG,WAAW,CAACY,GAAG,CAACQ,sBAAsB,CAAC;IAC9GN,OAAO,EAAElB,sCAAsC,CAACC,gBAAgB,CAAC;IACjEkB,OAAO,EAAE;EACX,CAAC,CAAC;EAEF,MAAMM,iBAAiB,CAAiC;IAAAC,YAAA;MAAAC,eAAA,4BA2I1B,MAAOC,OAAoB,IAAK;QAC1D,MAAMC,OAAO,GAAGxC,QAAQ,CAACyB,MAAM,CAAC;UAAEI,OAAO,EAAEN,QAAQ,CAACkB,IAAI,CAACC,QAAQ;UAAEZ,OAAO,EAAEP,QAAQ,CAACkB,IAAI,CAACE;QAAY,CAAC,CAAC;QACxG,MAAMC,OAAO,GAAG;UAAEJ,OAAO;UAAEK,QAAQ,EAAEN,OAAO,CAACO;QAAS,CAAC;QACvD,MAAMC,SAAS,GACb7C,gBAAgB,CAACqC,OAAO,CAACO,QAAQ,CAAC,IAClC3C,wBAAwB,CAACoC,OAAO,CAACS,QAAQ,CAAC,IAC1C9C,gBAAgB,CAACqC,OAAO,CAACU,OAAO,CAAC,KAChC,MAAM7C,uBAAuB,CAACmC,OAAO,CAACU,OAAO,CAAC,CAAC;QAElD,IAAIF,SAAS,EAAEH,OAAO,CAACC,QAAQ,GAAGvC,iBAAiB,CAACsC,OAAO,CAACC,QAAQ,EAAEE,SAAS,CAAC;QAEhF,OAAO;UAAEG,IAAI,EAAE,GAAGN,OAAO,CAACJ,OAAO,IAAII,OAAO,CAACC,QAAQ,EAAE;UAAE,GAAGD;QAAQ,CAAC;MACvE,CAAC;MAAAN,eAAA,uBAEsB,MAAOC,OAAoB,IAAK;QACrD,MAAM;UAAEW,IAAI;UAAEL;QAAS,CAAC,GAAG,MAAM,IAAI,CAACM,iBAAiB,CAACZ,OAAO,CAAC;QAChE,MAAMhB,QAAQ,CAAC6B,UAAU,CAACC,KAAK,CAACd,OAAO,CAACU,OAAO,EAAE;UAAEC;QAAK,CAAC,CAAC;QAC1D,OAAO;UACLI,cAAc,EAAEJ,IAAI;UACpBK,IAAI,EAAE;YACJC,IAAI,EAAEX,QAAQ;YACdY,IAAI,EAAEpD,WAAW,CAACH,gBAAgB,CAACgD,IAAI,CAAC;UAC1C;QACF,CAAC;MACH,CAAC;IAAA;IAlKD,MAAMQ,mBAAmBA,CAAA,EAAqB;MAC5C,MAAMC,MAAM,GAAG,MAAM/C,gBAAgB,CAACgD,aAAa,CAACpC,mBAAmB,CAAC;MACxE,OAAOhB,uBAAuB,CAACmD,MAAM,CAAC;IACxC;IAEA,MAAME,uBAAuBA,CAAA,EAAqB;MAChD,MAAMC,yBAAyB,GAAG,MAAMlD,gBAAgB,CAACmD,eAAe,CAACvC,mBAAmB,CAAC;MAC7F,IAAI,CAAChB,uBAAuB,CAACsD,yBAAyB,CAAC,EAAE,OAAO,KAAK;MAErE,MAAMlD,gBAAgB,CAACmD,eAAe,CAAChC,mBAAmB,CAAC;MAC3D,OAAO,IAAI;IACb;IAEA,MAAMiC,yBAAyBA,CAAA,EAAqB;MAClD,MAAML,MAAM,GAAG,MAAM/C,gBAAgB,CAACgD,aAAa,CAAC3B,uBAAuB,CAAC;MAC5E,OAAOzB,uBAAuB,CAACmD,MAAM,CAAC;IACxC;IAEA,MAAMM,6BAA6BA,CAAA,EAAqB;MACtD,MAAMN,MAAM,GAAG,MAAM/C,gBAAgB,CAACmD,eAAe,CAAC9B,uBAAuB,CAAC;MAC9E,OAAOzB,uBAAuB,CAACmD,MAAM,CAAC;IACxC;IAEA,MAAMO,UAAUA,CAAC3B,OAA2B,EAA+B;MAAA,IAAA4B,gBAAA;MACzE,MAAMC,aAAa,GAAG,MAAM,IAAI,CAACV,mBAAmB,CAAC,CAAC;MACtD,IAAI,CAACU,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACR,uBAAuB,CAAC,CAAC;QACpD,IAAI,CAACQ,OAAO,EAAE;UAAA,IAAAC,qBAAA;UACZ/B,OAAO,aAAPA,OAAO,gBAAA+B,qBAAA,GAAP/B,OAAO,CAAEgC,aAAa,cAAAD,qBAAA,eAAtBA,qBAAA,CAAAE,IAAA,CAAAjC,OAAO,EAAkBhC,QAAQ,CAACkE,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAMtD,iBAAiB,CAACuD,YAAY,CAAC;QACpDC,iBAAiB,EAAE,YAAY;QAC/BC,UAAU,EAAE,CAAAtC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEsC,UAAU,KAAI,MAAM;QACzCC,uBAAuB,EAAE,YAAY;QACrCC,SAAS,EAAE,CAAC,MAAM;UAChB,QAAQxC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEwC,SAAS;YACxB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,KAAK;cACR,OAAO,OAAO;YAChB;cACE,OAAO,OAAO;UAClB;QACF,CAAC,EAAE;MACL,CAAC,CAAC;MACF,IAAIL,QAAQ,CAACM,SAAS,EAAE,OAAO,IAAI;MACnC,IAAIN,QAAQ,CAACO,SAAS,KAAK,oBAAoB,EAAE;QAAA,IAAAC,sBAAA;QAC/C3C,OAAO,aAAPA,OAAO,gBAAA2C,sBAAA,GAAP3C,OAAO,CAAEgC,aAAa,cAAAW,sBAAA,eAAtBA,sBAAA,CAAAV,IAAA,CAAAjC,OAAO,EAAkBhC,QAAQ,CAAC4E,kBAAkB,EAAE,IAAIC,KAAK,CAACV,QAAQ,CAACW,YAAY,CAAC,CAAC;QACvF,OAAO,IAAI;MACb;MAEA,MAAM;QAAEvC,QAAQ,EAAEU,IAAI;QAAE8B,QAAQ,EAAEC,IAAI;QAAE9B,IAAI;QAAE+B;MAAI,CAAC,GAAG,EAAArB,gBAAA,GAAAO,QAAQ,CAACe,MAAM,cAAAtB,gBAAA,uBAAfA,gBAAA,CAAkB,CAAC,CAAC,KAAI,CAAC,CAAC;MAChF,OAAO1D,aAAa,CAAC;QAAE+E,GAAG;QAAED,IAAI;QAAE/B,IAAI;QAAEC;MAAK,CAAC,CAAC;IACjD;IAEA,MAAMiC,gBAAgBA,CAACnD,OAAiC,EAAwC;MAC9F;AACN;AACA;AACA;MACM,MAAMoD,cAAc,GAAG,CAAApD,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEoD,cAAc,KAAI,CAAC;MACnD,MAAMvB,aAAa,GAAG,MAAM,IAAI,CAACJ,yBAAyB,CAAC,CAAC;MAC5D,IAAI,CAACI,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACJ,6BAA6B,CAAC,CAAC;QAC1D,IAAI,CAACI,OAAO,EAAE;UAAA,IAAAuB,sBAAA;UACZrD,OAAO,aAAPA,OAAO,gBAAAqD,sBAAA,GAAPrD,OAAO,CAAEgC,aAAa,cAAAqB,sBAAA,eAAtBA,sBAAA,CAAApB,IAAA,CAAAjC,OAAO,EAAkBhC,QAAQ,CAACkE,kBAAkB,CAAC;UACrD,OAAO,IAAI;QACb;MACF;MAEA,MAAMC,QAAQ,GAAG,MAAMtD,iBAAiB,CAACyE,kBAAkB,CAAC;QAC1DjB,iBAAiB,EAAE,YAAY;QAC/Be,cAAc;QACdb,uBAAuB,EAAE,YAAY;QACrCC,SAAS,EAAE,CAAC,MAAM;UAChB,QAAQxC,OAAO,aAAPA,OAAO,uBAAPA,OAAO,CAAEwC,SAAS;YACxB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,OAAO;cACV,OAAO,OAAO;YAChB,KAAK,KAAK;cACR,OAAO,OAAO;YAChB;cACE,OAAO,OAAO;UAClB;QACF,CAAC,EAAE;MACL,CAAC,CAAC;MACF,IAAIL,QAAQ,CAACM,SAAS,EAAE,OAAO,IAAI;MACnC,IAAIN,QAAQ,CAACO,SAAS,KAAK,oBAAoB,EAAE;QAAA,IAAAa,sBAAA;QAC/CvD,OAAO,aAAPA,OAAO,gBAAAuD,sBAAA,GAAPvD,OAAO,CAAEgC,aAAa,cAAAuB,sBAAA,eAAtBA,sBAAA,CAAAtB,IAAA,CAAAjC,OAAO,EAAkBhC,QAAQ,CAAC4E,kBAAkB,EAAE,IAAIC,KAAK,CAACV,QAAQ,CAACW,YAAY,CAAC,CAAC;QACvF,OAAO,IAAI;MACb;MAEA,OAAOU,OAAO,CAACC,GAAG,CAChB,CAACtB,QAAQ,CAACe,MAAM,IAAI,EAAE,EACnBQ,KAAK,CAAC,CAAC,EAAEN,cAAc,CAAC,CACxBO,GAAG,CAAC,CAAC;QAAEpD,QAAQ,EAAEU,IAAI;QAAE8B,QAAQ,EAAEC,IAAI;QAAE9B,IAAI;QAAE+B;MAAI,CAAC,KAAK/E,aAAa,CAAC;QAAE+E,GAAG;QAAED,IAAI;QAAE/B,IAAI;QAAEC;MAAK,CAAC,CAAC,CACpG,CAAC;IACH;IAEA,MAAM/C,YAAYA,CAAC6B,OAA6B,EAA+B;MAC7E,OAAO,MAAM7B,YAAY,CAACW,oBAAoB,EAAEkB,OAAO,CAAC;IAC1D;IAEA,MAAM4D,IAAIA,CAAC5D,OAAoB,EAAmB;MAChD,MAAM6B,aAAa,GAAG,MAAM,IAAI,CAACJ,yBAAyB,CAAC,CAAC;MAC5D,IAAI,CAACI,aAAa,EAAE;QAClB,MAAMC,OAAO,GAAG,MAAM,IAAI,CAACJ,6BAA6B,CAAC,CAAC;QAC1D,IAAI,CAACI,OAAO,EAAE,MAAM,IAAIe,KAAK,CAAC,wBAAwB,CAAC;MACzD;MAEA,MAAM;QAAE9B,cAAc;QAAEC;MAAK,CAAC,GAAG,MAAM,IAAI,CAAC6C,YAAY,CAAC7D,OAAO,CAAC;MAEjE,IAAIvC,QAAQ,CAACa,EAAE,KAAK,KAAK,EAAE;QACzB,IAAI0C,IAAI,CAACE,IAAI,KAAK,OAAO,IAAIF,IAAI,CAACE,IAAI,KAAK,OAAO,EAAE;UAClD,MAAM4C,YAAY,GAAG;YAAE,OAAO,EAAE,OAAO;YAAE,OAAO,EAAE;UAAQ,CAAU;UACpE,MAAMtB,SAAS,GAAGsB,YAAY,CAAC9C,IAAI,CAACE,IAAI,CAAC;UACzC,MAAMnC,kBAAkB,CAAC6E,IAAI,CAAC7C,cAAc,EAAE;YAAEG,IAAI,EAAEsB;UAAU,CAAC,CAAC;QACpE;MACF;MAEA,IAAI/E,QAAQ,CAACa,EAAE,KAAK,SAAS,EAAE;QAC7B,MAAMyF,cAAc,GAAG;UAAE,MAAM,EAAE,WAAW;UAAE,OAAO,EAAE,OAAO;UAAE,OAAO,EAAE,QAAQ;UAAE,OAAO,EAAE;QAAQ,CAAU;QAC9G,MAAMC,WAAW,GAAGD,cAAc,CAAC/C,IAAI,CAACE,IAAI,CAAC;QAC7C,MAAMlC,QAAQ,CAAC6B,UAAU,CAACoD,UAAU,CAAClD,cAAc,EAAEC,IAAI,CAACC,IAAI,EAAE+C,WAAW,CAAC,CAACE,KAAK,CAAC,MAAM;UACvFxG,MAAM,CAACyG,KAAK,CAAC,uFAAuF,CAAC;UACrG,OAAOnF,QAAQ,CAAC6B,UAAU,CAACoD,UAAU,CAAClD,cAAc,EAAEC,IAAI,CAACC,IAAI,EAAE,WAAW,CAAC;QAC/E,CAAC,CAAC;MACJ;MAEA,OAAOF,cAAc;IACvB;IA4BAqD,oBAAoBA,CAACC,eAAe,GAAG,KAAK,EAA2C;MACrF,MAAM/D,QAAQ,GAAG,UAAUgE,IAAI,CAACC,GAAG,CAAC,CAAC,IAAIF,eAAe,EAAE;MAC1D,MAAM1D,IAAI,GAAG,GAAG3B,QAAQ,CAACkB,IAAI,CAACC,QAAQ,IAAIG,QAAQ,EAAE;MACpD,OAAO7C,QAAQ,CAACyB,MAAM,CAAC;QACrBC,GAAG,EAAE;UACH8D,GAAG,EAAEtC,IAAI;UACT6D,cAAc,EAAE7D;QAClB,CAAC;QACDrB,OAAO,EAAE;UACP2D,GAAG,EAAEtC,IAAI,CAAC8D,UAAU,CAAC,SAAS,CAAC,GAAG9D,IAAI,GAAG,SAAS,GAAGA,IAAI;UACzD6D,cAAc,EAAE7D;QAClB,CAAC;QACDpB,OAAO,EAAE;UACP0D,GAAG,EAAEtC,IAAI;UACT6D,cAAc,EAAE7D;QAClB;MACF,CAAC,CAAC;IACJ;EACF;EAEA,OAAO,IAAId,iBAAiB,CAAC,CAAC;AAChC,CAAC;AAED,eAAejB,uBAAuB","ignoreList":[]}
@@ -18,13 +18,13 @@ const expoBackwardUtils = {
18
18
  const promises = assets.map(({
19
19
  fileName: name,
20
20
  fileSize: size,
21
- type,
21
+ mimeType,
22
22
  uri
23
23
  }) => normalizeFile({
24
24
  uri,
25
25
  size,
26
26
  name,
27
- type
27
+ type: mimeType
28
28
  }));
29
29
  return Promise.all(promises);
30
30
  } else if ('uri' in result && typeof result.uri === 'string') {
@@ -1 +1 @@
1
- {"version":3,"names":["normalizeFile","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","type","uri","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","mimeType","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport 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 ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, type, uri }) =>\n normalizeFile({ uri, size, name, type }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["normalizeFile","expoBackwardUtils","imagePicker","isCanceled","result","canceled","cancelled","toFilePickerResponses","fsModule","assets","promises","map","fileName","name","fileSize","size","mimeType","uri","type","Promise","all","fileInfo","getInfoAsync","response","toFileSize","documentPicker","expoAV","isLegacyAVModule","module","Video","isAudioModule","useAudioRecorder","isVideoModule","useVideoPlayer","info","undefined","fileSystem","isLegacyModule","getFileInfo","file","File","getDocumentDirectory","documentDirectory","_fsModule$Paths","Paths","document","getCacheDirectory","cacheDirectory","_fsModule$Paths2","cache","downloadFile","url","localUri","downloadAsync","destination","downloadFileAsync"],"sources":["expoBackwardUtils.ts"],"sourcesContent":["import type * as ExpoAudio from 'expo-audio';\nimport type * as ExpoAV from 'expo-av';\nimport 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 ExpoVideo from 'expo-video';\n\nimport type { FilePickerResponse } from '../platform/types';\nimport normalizeFile from './normalizeFile';\n\n// Legacy expo-file-system API types (before SDK 54)\ninterface ExpoFileSystemLegacy {\n documentDirectory: string | null;\n cacheDirectory: string | null;\n getInfoAsync(fileUri: string, options?: unknown): Promise<ExpoFs.FileInfo>;\n downloadAsync(uri: string, fileUri: string, options?: unknown): Promise<{ uri: string }>;\n}\n\n// New expo-file-system API types (SDK 54+)\ninterface ExpoDirectory {\n uri: string;\n}\n\ninterface ExpoFileSystemNew {\n File: {\n new (...uris: (string | unknown)[]): {\n info(options?: unknown): ExpoFs.FileInfo;\n };\n downloadFileAsync(url: string, destination: unknown, options?: unknown): Promise<{ uri: string }>;\n };\n Directory: new (...uris: (string | unknown)[]) => ExpoDirectory;\n Paths: {\n document: ExpoDirectory;\n cache: ExpoDirectory;\n };\n}\n\n// Union type for both legacy and new expo-file-system\ntype ExpoFileSystemModule = ExpoFileSystemLegacy | ExpoFileSystemNew | typeof ExpoFs;\n\nconst expoBackwardUtils = {\n imagePicker: {\n isCanceled(result: ExpoImagePicker.ImagePickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.cancelled;\n },\n async toFilePickerResponses(\n result: ExpoImagePicker.ImagePickerResult,\n fsModule: typeof ExpoFs,\n ): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ fileName: name, fileSize: size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n const fileInfo = await fsModule.getInfoAsync(result.uri);\n const response = await normalizeFile({ uri: result.uri, size: expoBackwardUtils.toFileSize(fileInfo) });\n return [response];\n } else {\n return [];\n }\n },\n },\n documentPicker: {\n isCanceled(result: ExpoDocumentPicker.DocumentPickerResult) {\n // @ts-expect-error backward compatibility\n return result.canceled ?? result.type === 'cancel';\n },\n async toFilePickerResponses(result: ExpoDocumentPicker.DocumentPickerResult): Promise<FilePickerResponse[]> {\n if (result.assets) {\n const assets = result.assets || [];\n const promises = assets.map(({ name, size, mimeType, uri }) =>\n normalizeFile({ uri, size, name, type: mimeType }),\n );\n\n return Promise.all(promises);\n } else if ('uri' in result && typeof result.uri === 'string') {\n // @ts-expect-error backward compatibility\n const { mimeType, uri, size, name } = result;\n const response = await normalizeFile({ uri, size, name, type: mimeType });\n\n return [response];\n } else {\n return [];\n }\n },\n },\n expoAV: {\n isLegacyAVModule(module: ExpoAudioModule | ExpoVideoModule): module is typeof ExpoAV {\n try {\n return 'Video' in module && 'Audio' in module && typeof module.Video === 'function';\n } catch {\n return false;\n }\n },\n isAudioModule(module: ExpoAudioModule): module is typeof ExpoAudio {\n try {\n return 'useAudioRecorder' in module && typeof module.useAudioRecorder === 'function';\n } catch {\n return false;\n }\n },\n isVideoModule(module: ExpoVideoModule): module is typeof ExpoVideo {\n try {\n return 'VideoView' in module && 'useVideoPlayer' in module && typeof module.useVideoPlayer === 'function';\n } catch {\n return false;\n }\n },\n },\n toFileSize(info: ExpoFs.FileInfo) {\n if ('size' in info && info.size !== undefined) {\n return info.size;\n } else {\n return 0;\n }\n },\n fileSystem: {\n isLegacyModule(fsModule: ExpoFileSystemModule): fsModule is ExpoFileSystemLegacy {\n try {\n return 'documentDirectory' in fsModule || 'cacheDirectory' in fsModule;\n } catch {\n return false;\n }\n },\n async getFileInfo(fsModule: ExpoFileSystemModule, uri: string): Promise<ExpoFs.FileInfo> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.getInfoAsync(uri);\n } else {\n const file = new fsModule.File(uri);\n return file.info();\n }\n },\n getDocumentDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.documentDirectory || null;\n } else {\n return fsModule.Paths?.document?.uri || null;\n }\n },\n getCacheDirectory(fsModule: ExpoFileSystemModule): string | null {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return fsModule.cacheDirectory || null;\n } else {\n return fsModule.Paths?.cache?.uri || null;\n }\n },\n async downloadFile(fsModule: ExpoFileSystemModule, url: string, localUri: string): Promise<{ uri: string }> {\n if (expoBackwardUtils.fileSystem.isLegacyModule(fsModule)) {\n return await fsModule.downloadAsync(url, localUri);\n } else {\n const destination = new fsModule.File(localUri);\n const result = await fsModule.File.downloadFileAsync(url, destination as never);\n return { uri: result.uri };\n }\n },\n },\n};\n\nexport type ExpoAudioModule = typeof ExpoAV | typeof ExpoAudio;\nexport type ExpoVideoModule = typeof ExpoAV | typeof ExpoVideo;\n\nexport default expoBackwardUtils;\n"],"mappings":"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","ignoreList":[]}
@@ -1,3 +1,3 @@
1
- const VERSION = '3.12.0';
1
+ const VERSION = '3.12.2';
2
2
  export default VERSION;
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.12.0';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
1
+ {"version":3,"names":["VERSION"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.12.2';\nexport default VERSION;\n"],"mappings":"AAAA,MAAMA,OAAO,GAAG,QAAQ;AACxB,eAAeA,OAAO","ignoreList":[]}
@@ -65,6 +65,5 @@ export type ChannelMessageListProps<T extends SendbirdGroupChannel | SendbirdOpe
65
65
  } & {
66
66
  ref?: Ref<FlatList<SendbirdMessage>> | undefined;
67
67
  };
68
- declare const ChannelMessageList: <T extends SendbirdGroupChannel | SendbirdOpenChannel>({ searchItem, hasNext, channel, onEditMessage, onReplyMessage, onReplyInThreadMessage, onDeleteMessage, onResendFailedMessage, onPressMediaMessage, onPressParentMessage, onPressMarkAsUnreadMessage, currentUserId, renderUnreadMessagesFloating, renderNewMessagesButton, renderScrollToBottomButton, renderMessage, messages, newMessages, unreadFirstMessage, enableMessageGrouping, onScrolledAwayFromBottom, scrolledAwayFromBottom, onBottomReached, onTopReached, flatListComponent, flatListProps, onViewableItemsChanged, onPressNewMessagesButton, onPressScrollToBottomButton, unreadMessagesFloatingProps, }: ChannelMessageListProps<T>, ref: React.ForwardedRef<FlatList<SendbirdMessage>>) => React.JSX.Element;
69
- declare const _default: typeof ChannelMessageList;
68
+ declare const _default: <T extends SendbirdGroupChannel | SendbirdOpenChannel>(props: ChannelMessageListProps<T>) => React.ReactElement | null;
70
69
  export default _default;
@@ -51,6 +51,5 @@ export type ChannelThreadMessageListProps<T extends SendbirdGroupChannel | Sendb
51
51
  } & {
52
52
  ref?: Ref<FlatList<SendbirdMessage>> | undefined;
53
53
  };
54
- declare const ChannelThreadMessageList: <T extends SendbirdGroupChannel | SendbirdOpenChannel>({ searchItem, hasNext, channel, onEditMessage, onDeleteMessage, onResendFailedMessage, onPressMediaMessage, currentUserId, renderNewMessagesButton, renderScrollToBottomButton, renderMessage, messages, newMessages, enableMessageGrouping, onScrolledAwayFromBottom, scrolledAwayFromBottom, onBottomReached, onTopReached, flatListProps, onPressNewMessagesButton, onPressScrollToBottomButton, }: ChannelThreadMessageListProps<T>, ref: React.ForwardedRef<FlatList<SendbirdMessage>>) => React.JSX.Element;
55
- declare const _default: typeof ChannelThreadMessageList;
54
+ declare const _default: <T extends SendbirdGroupChannel | SendbirdOpenChannel>(props: ChannelThreadMessageListProps<T>) => React.ReactElement | null;
56
55
  export default _default;