@sendbird/uikit-react-native 3.7.4 → 3.7.6
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.
- package/README.md +6 -4
- package/lib/commonjs/components/ChannelInput/index.js +1 -1
- package/lib/commonjs/components/ChannelInput/index.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerContent.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerFooter.js.map +1 -1
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js +1 -0
- package/lib/commonjs/components/FileViewer/FileViewerHeader.js.map +1 -1
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js +3 -1
- package/lib/commonjs/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js +3 -1
- package/lib/commonjs/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +15 -1
- package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +15 -1
- package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/commonjs/hooks/usePushTokenRegistration.js +2 -2
- package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/commonjs/platform/createFileService.native.js +1 -1
- package/lib/commonjs/platform/createFileService.native.js.map +1 -1
- package/lib/commonjs/platform/createPlayerService.native.js +3 -4
- package/lib/commonjs/platform/createPlayerService.native.js.map +1 -1
- package/lib/commonjs/version.js +1 -1
- package/lib/commonjs/version.js.map +1 -1
- package/lib/module/components/ChannelInput/index.js +1 -1
- package/lib/module/components/ChannelInput/index.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js +1 -1
- package/lib/module/components/FileViewer/FileViewerContent.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerFooter.js +1 -0
- package/lib/module/components/FileViewer/FileViewerFooter.js.map +1 -1
- package/lib/module/components/FileViewer/FileViewerHeader.js +1 -0
- package/lib/module/components/FileViewer/FileViewerHeader.js.map +1 -1
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js +3 -1
- package/lib/module/components/ReactionAddons/BottomSheetReactionAddon.js.map +1 -1
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js +3 -1
- package/lib/module/components/ReactionBottomSheets/ReactionListBottomSheet.js.map +1 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +15 -1
- package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js +15 -1
- package/lib/module/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map +1 -1
- package/lib/module/hooks/usePushTokenRegistration.js +2 -2
- package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
- package/lib/module/platform/createFileService.native.js +1 -1
- package/lib/module/platform/createFileService.native.js.map +1 -1
- package/lib/module/platform/createPlayerService.native.js +3 -4
- package/lib/module/platform/createPlayerService.native.js.map +1 -1
- package/lib/module/version.js +1 -1
- package/lib/module/version.js.map +1 -1
- package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
- package/lib/typescript/src/version.d.ts +1 -1
- package/package.json +6 -6
- package/src/components/ChannelInput/index.tsx +1 -1
- package/src/components/FileViewer/FileViewerContent.tsx +1 -1
- package/src/components/FileViewer/FileViewerFooter.tsx +1 -0
- package/src/components/FileViewer/FileViewerHeader.tsx +1 -0
- package/src/components/ReactionAddons/BottomSheetReactionAddon.tsx +4 -1
- package/src/components/ReactionBottomSheets/ReactionListBottomSheet.tsx +5 -1
- package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +17 -1
- package/src/domain/groupChannelThread/component/GroupChannelThreadMessageList.tsx +16 -1
- package/src/hooks/usePushTokenRegistration.ts +2 -2
- package/src/platform/createFileService.native.ts +1 -5
- package/src/platform/createPlayerService.native.tsx +5 -4
- package/src/version.ts +1 -1
package/lib/commonjs/domain/groupChannelThread/component/GroupChannelThreadMessageList.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitUtils","_ChannelThreadMessageList","_interopRequireDefault","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelThreadMessageList","props","sdk","useSendbirdChat","setMessageToEdit","useContext","GroupChannelThreadContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","MessageList","id","useUniqHandlerId","ignorePropReached","useRef","_onTopReached","current","onTopReached","_onBottomReached","onBottomReached","scrollToBottom","useFreshCallback","animated","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","catch","_","useLayoutEffect","startingPoint","foundMessageIndex","messages","findIndex","it","createdAt","isIncludedInList","timeout","index","setTimeout","useChannelHandler","onReactionUpdated","channel","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","createElement","ref","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","renderNewMessagesButton","renderScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelThreadMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelThreadMessageList from '../../../components/ChannelThreadMessageList';\nimport { useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageList']) => {\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelThreadContexts.Fragment);\n const { subscribe } = useContext(GroupChannelThreadContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelThreadContexts.MessageList);\n\n const id = useUniqHandlerId('GroupChannelThreadMessageList');\n const ignorePropReached = useRef(false);\n\n const _onTopReached = () => {\n if (!ignorePropReached.current) {\n props.onTopReached();\n }\n };\n\n const _onBottomReached = () => {\n if (!ignorePropReached.current) {\n props.onBottomReached();\n }\n };\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useLayoutEffect(() => {\n if (props.startingPoint) {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === props.startingPoint);\n const isIncludedInList = foundMessageIndex > -1;\n if (isIncludedInList) {\n ignorePropReached.current = true;\n const timeout = 300;\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout: timeout });\n setTimeout(() => {\n ignorePropReached.current = false;\n }, timeout + 50);\n }\n }\n }, [props.startingPoint]);\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n return (\n <ChannelThreadMessageList\n {...props}\n ref={flatListRef}\n onTopReached={_onTopReached}\n onBottomReached={_onBottomReached}\n onEditMessage={setMessageToEdit}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n renderNewMessagesButton={null}\n renderScrollToBottomButton={null}\n />\n );\n};\n\nexport default React.memo(GroupChannelThreadMessageList);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_uikitChatHooks","_uikitUtils","_ChannelThreadMessageList","_interopRequireDefault","_useContext","_moduleContext","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","_extends","assign","bind","target","i","arguments","length","source","apply","GroupChannelThreadMessageList","props","sdk","useSendbirdChat","setMessageToEdit","useContext","GroupChannelThreadContexts","Fragment","subscribe","PubSub","flatListRef","lazyScrollToBottom","lazyScrollToIndex","MessageList","id","useUniqHandlerId","ignorePropReached","useRef","_onTopReached","current","onTopReached","_onBottomReached","onBottomReached","scrollToBottom","useFreshCallback","animated","undefined","hasNext","onScrolledAwayFromBottom","onResetMessageList","catch","_","useLayoutEffect","startingPoint","foundMessageIndex","messages","findIndex","it","createdAt","isIncludedInList","timeout","index","setTimeout","useChannelHandler","onReactionUpdated","channel","event","isDifferentChannel","recentMessage","isRecentMessage","messageId","scrollReachedBottomAndCanScroll","scrolledAwayFromBottom","useEffect","_ref","type","data","lastMessage","updatedMessage","lastMessageUpdated","isMaybeStreaming","hasAiBot","createElement","ref","onEditMessage","onPressNewMessagesButton","onPressScrollToBottomButton","renderNewMessagesButton","renderScrollToBottomButton","_default","React","memo","exports"],"sources":["GroupChannelThreadMessageList.tsx"],"sourcesContent":["import React, { useContext, useEffect, useLayoutEffect, useRef } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { isDifferentChannel, useFreshCallback, useUniqHandlerId } from '@sendbird/uikit-utils';\n\nimport ChannelThreadMessageList from '../../../components/ChannelThreadMessageList';\nimport { useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelThreadContexts } from '../module/moduleContext';\nimport type { GroupChannelThreadProps } from '../types';\n\nconst GroupChannelThreadMessageList = (props: GroupChannelThreadProps['MessageList']) => {\n const { sdk } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelThreadContexts.Fragment);\n const { subscribe } = useContext(GroupChannelThreadContexts.PubSub);\n const { flatListRef, lazyScrollToBottom, lazyScrollToIndex } = useContext(GroupChannelThreadContexts.MessageList);\n\n const id = useUniqHandlerId('GroupChannelThreadMessageList');\n const ignorePropReached = useRef(false);\n\n const _onTopReached = () => {\n if (!ignorePropReached.current) {\n props.onTopReached();\n }\n };\n\n const _onBottomReached = () => {\n if (!ignorePropReached.current) {\n props.onBottomReached();\n }\n };\n\n const scrollToBottom = useFreshCallback(async (animated = false) => {\n if (props.hasNext()) {\n props.onScrolledAwayFromBottom(false);\n\n await props.onResetMessageList().catch((_) => {});\n props.onScrolledAwayFromBottom(false);\n lazyScrollToBottom({ animated });\n } else {\n lazyScrollToBottom({ animated });\n }\n });\n\n useLayoutEffect(() => {\n if (props.startingPoint) {\n const foundMessageIndex = props.messages.findIndex((it) => it.createdAt === props.startingPoint);\n const isIncludedInList = foundMessageIndex > -1;\n if (isIncludedInList) {\n ignorePropReached.current = true;\n const timeout = 300;\n lazyScrollToIndex({ index: foundMessageIndex, animated: true, timeout: timeout });\n setTimeout(() => {\n ignorePropReached.current = false;\n }, timeout + 50);\n }\n }\n }, [props.startingPoint]);\n\n useChannelHandler(sdk, id, {\n onReactionUpdated(channel, event) {\n if (isDifferentChannel(channel, props.channel)) return;\n const recentMessage = props.messages[0];\n const isRecentMessage = recentMessage && recentMessage.messageId === event.messageId;\n const scrollReachedBottomAndCanScroll = !props.scrolledAwayFromBottom && !props.hasNext();\n if (isRecentMessage && scrollReachedBottomAndCanScroll) {\n lazyScrollToBottom({ animated: true, timeout: 250 });\n }\n },\n });\n\n useEffect(() => {\n return subscribe(({ type, data }) => {\n switch (type) {\n case 'TYPING_BUBBLE_RENDERED':\n case 'MESSAGES_RECEIVED': {\n if (!props.scrolledAwayFromBottom) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGES_UPDATED': {\n const lastMessage = props.channel.lastMessage;\n const [updatedMessage] = data.messages;\n\n const lastMessageUpdated =\n updatedMessage && lastMessage && lastMessage.messageId === updatedMessage.messageId;\n const isMaybeStreaming = props.channel.hasAiBot && lastMessageUpdated;\n\n if (isMaybeStreaming) {\n scrollToBottom(false);\n } else if (!props.scrolledAwayFromBottom && lastMessageUpdated) {\n scrollToBottom(true);\n }\n break;\n }\n case 'MESSAGE_SENT_SUCCESS':\n case 'MESSAGE_SENT_PENDING': {\n scrollToBottom(false);\n break;\n }\n }\n });\n }, [props.scrolledAwayFromBottom]);\n\n return (\n <ChannelThreadMessageList\n {...props}\n ref={flatListRef}\n onTopReached={_onTopReached}\n onBottomReached={_onBottomReached}\n onEditMessage={setMessageToEdit}\n onPressNewMessagesButton={scrollToBottom}\n onPressScrollToBottomButton={scrollToBottom}\n renderNewMessagesButton={null}\n renderScrollToBottomButton={null}\n />\n );\n};\n\nexport default React.memo(GroupChannelThreadMessageList);\n"],"mappings":"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"}
|
|
@@ -24,8 +24,8 @@ const usePushTokenRegistration = () => {
|
|
|
24
24
|
ios: token => sdk.unregisterAPNSPushTokenForCurrentUser(token),
|
|
25
25
|
default: token => sdk.unregisterFCMPushTokenForCurrentUser(token)
|
|
26
26
|
}), _reactNative.Platform.select({
|
|
27
|
-
ios: notificationService.getAPNSToken,
|
|
28
|
-
default: notificationService.getFCMToken
|
|
27
|
+
ios: () => notificationService.getAPNSToken(),
|
|
28
|
+
default: () => notificationService.getFCMToken()
|
|
29
29
|
})];
|
|
30
30
|
});
|
|
31
31
|
const registerPushTokenForCurrentUser = (0, _uikitUtils.useFreshCallback)(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_reactNative","_uikitUtils","_useContext","usePushTokenRegistration","sdk","useSendbirdChat","notificationService","usePlatformService","refreshListener","useRef","registerToken","unregisterToken","getToken","useIIFE","Platform","select","ios","token","registerAPNSPushTokenForCurrentUser","default","registerFCMPushTokenForCurrentUser","unregisterAPNSPushTokenForCurrentUser","unregisterFCMPushTokenForCurrentUser","getAPNSToken","getFCMToken","registerPushTokenForCurrentUser","useFreshCallback","hasPermission","hasPushPermission","pushPermission","requestPushPermission","Logger","warn","current","onTokenRefresh","log","error","unregisterPushTokenForCurrentUser","_refreshListener$curr","call","_default","exports"],"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,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,IAAAE,WAAA,GAAAF,OAAA;AAEA,IAAAG,WAAA,GAAAH,OAAA;AAEA,MAAMI,wBAAwB,GAAGA,CAAA,KAAM;EACrC,MAAM;IAAEC;EAAI,CAAC,GAAG,IAAAC,2BAAe,GAAE;EACjC,MAAM;IAAEC;EAAoB,CAAC,GAAG,IAAAC,8BAAkB,GAAE;EAEpD,MAAMC,eAAe,GAAG,IAAAC,aAAM,GAAc;EAC5C,MAAM,CAACC,aAAa,EAAEC,eAAe,EAAEC,QAAQ,CAAC,GAAG,IAAAC,mBAAO,EAAC,MAAM;IAC/D,OAAO,CACLC,qBAAQ,CAACC,MAAM,CAAC;MACdC,GAAG,EAAGC,KAAa,IAAKb,GAAG,CAACc,mCAAmC,CAACD,KAAK,CAAC;MACtEE,OAAO,EAAGF,KAAa,IAAKb,GAAG,CAACgB,kCAAkC,CAACH,KAAK;IAC1E,CAAC,CAAC,EACFH,qBAAQ,CAACC,MAAM,CAAC;MACdC,GAAG,EAAGC,KAAa,IAAKb,GAAG,CAACiB,qCAAqC,CAACJ,KAAK,CAAC;MACxEE,OAAO,EAAGF,KAAa,IAAKb,GAAG,CAACkB,oCAAoC,CAACL,KAAK;IAC5E,CAAC,CAAC,EACFH,qBAAQ,CAACC,MAAM,CAAC;MACdC,GAAG,
|
|
1
|
+
{"version":3,"names":["_react","require","_reactNative","_uikitUtils","_useContext","usePushTokenRegistration","sdk","useSendbirdChat","notificationService","usePlatformService","refreshListener","useRef","registerToken","unregisterToken","getToken","useIIFE","Platform","select","ios","token","registerAPNSPushTokenForCurrentUser","default","registerFCMPushTokenForCurrentUser","unregisterAPNSPushTokenForCurrentUser","unregisterFCMPushTokenForCurrentUser","getAPNSToken","getFCMToken","registerPushTokenForCurrentUser","useFreshCallback","hasPermission","hasPushPermission","pushPermission","requestPushPermission","Logger","warn","current","onTokenRefresh","log","error","unregisterPushTokenForCurrentUser","_refreshListener$curr","call","_default","exports"],"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":"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"}
|
|
@@ -16,7 +16,7 @@ function _toPrimitive(input, hint) { if (typeof input !== "object" || input ===
|
|
|
16
16
|
function getAndroidStoragePermissionsByAPILevel(permissionModule) {
|
|
17
17
|
if (_reactNative.Platform.OS !== 'android') return [];
|
|
18
18
|
if (_reactNative.Platform.Version > 32) {
|
|
19
|
-
return [
|
|
19
|
+
return [];
|
|
20
20
|
}
|
|
21
21
|
if (_reactNative.Platform.Version > 28) {
|
|
22
22
|
return [permissionModule.PERMISSIONS.ANDROID.READ_EXTERNAL_STORAGE];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_MEDIA_AUDIO","READ_MEDIA_IMAGES","READ_MEDIA_VIDEO","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","_ref","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","mediaLibraryPermissions","PHOTO_LIBRARY","PHOTO_LIBRARY_ADD_ONLY","NativeFileService","constructor","options","dirname","Dirs","CacheDir","DocumentDir","context","filename","fileName","extension","getFileExtension","getFileExtensionFromMime","fileType","fileUrl","getFileExtensionFromUri","normalizeFileName","path","buildDownloadPath","FileSystem","fetch","downloadedPath","file","name","type","getFileType","hasCameraPermission","status","checkMultiple","nativePermissionGranted","requestCameraPermission","requestMultiple","hasMediaLibraryPermission","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","normalizeFile","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","_ref2","openDocument","pickSingle","e","isCancel","isInProgress","_options$onOpenFailur5","UNKNOWN","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","arguments","length","Date","now","recordFilePath","startsWith","_default","exports"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as DocumentPicker from 'react-native-document-picker';\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 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 permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_AUDIO,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_IMAGES,\n permissionModule.PERMISSIONS.ANDROID.READ_MEDIA_VIDEO,\n ];\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: typeof DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const cameraPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA, permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\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(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async requestCameraPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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 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 async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const { uri, size, name, type } = await documentPickerModule.pickSingle();\n return normalizeFile({ uri, size, name, type });\n } catch (e) {\n if (!documentPickerModule.isCancel(e) && documentPickerModule.isInProgress(e)) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n }\n return null;\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: filename,\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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"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_uikitUtils","_SBUError","_interopRequireDefault","_nativePermissionGranted","_normalizeFile","obj","__esModule","default","_defineProperty","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","getAndroidStoragePermissionsByAPILevel","permissionModule","Platform","OS","Version","PERMISSIONS","ANDROID","READ_EXTERNAL_STORAGE","WRITE_EXTERNAL_STORAGE","createNativeFileService","_ref","imagePickerModule","documentPickerModule","mediaLibraryModule","fsModule","cameraPermissions","select","ios","IOS","CAMERA","MICROPHONE","android","mediaLibraryPermissions","PHOTO_LIBRARY","PHOTO_LIBRARY_ADD_ONLY","NativeFileService","constructor","options","dirname","Dirs","CacheDir","DocumentDir","context","filename","fileName","extension","getFileExtension","getFileExtensionFromMime","fileType","fileUrl","getFileExtensionFromUri","normalizeFileName","path","buildDownloadPath","FileSystem","fetch","downloadedPath","file","name","type","getFileType","hasCameraPermission","status","checkMultiple","nativePermissionGranted","requestCameraPermission","requestMultiple","hasMediaLibraryPermission","requestMediaLibraryPermission","openCamera","_response$assets","hasPermission","granted","_options$onOpenFailur","onOpenFailure","SBUError","PERMISSIONS_DENIED","response","launchCamera","presentationStyle","cameraType","mediaType","didCancel","errorCode","_options$onOpenFailur2","DEVICE_UNAVAILABLE","Error","errorMessage","fileSize","size","uri","assets","normalizeFile","openMediaLibrary","selectionLimit","_options$onOpenFailur3","launchImageLibrary","_options$onOpenFailur4","Promise","all","slice","map","_ref2","openDocument","pickSingle","e","isCancel","isInProgress","_options$onOpenFailur5","UNKNOWN","save","downloadFile","mediaTypeMap","externalDirMap","externalDir","cpExternal","catch","Logger","error","createRecordFilePath","customExtension","arguments","length","Date","now","recordFilePath","startsWith","_default","exports"],"sources":["createFileService.native.ts"],"sourcesContent":["import type { CameraRoll } from '@react-native-camera-roll/camera-roll';\nimport { Platform } from 'react-native';\nimport type * as DocumentPicker from 'react-native-document-picker';\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 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: typeof DocumentPicker;\n permissionModule: typeof Permissions;\n mediaLibraryModule: typeof CameraRoll;\n fsModule: typeof FileAccess;\n}): FileServiceInterface => {\n const cameraPermissions: Permission[] = Platform.select({\n ios: [permissionModule.PERMISSIONS.IOS.CAMERA, permissionModule.PERMISSIONS.IOS.MICROPHONE],\n android: [permissionModule.PERMISSIONS.ANDROID.CAMERA],\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(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async requestCameraPermission(): Promise<boolean> {\n const status = await permissionModule.requestMultiple(cameraPermissions);\n return nativePermissionGranted(status);\n }\n async hasMediaLibraryPermission(): Promise<boolean> {\n const status = await permissionModule.checkMultiple(mediaLibraryPermissions);\n return nativePermissionGranted(status);\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 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 async openDocument(options?: OpenDocumentOptions): Promise<FilePickerResponse> {\n try {\n const { uri, size, name, type } = await documentPickerModule.pickSingle();\n return normalizeFile({ uri, size, name, type });\n } catch (e) {\n if (!documentPickerModule.isCancel(e) && documentPickerModule.isInProgress(e)) {\n options?.onOpenFailure?.(SBUError.UNKNOWN, e);\n }\n return null;\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: filename,\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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"}
|
|
@@ -51,16 +51,15 @@ const createNativePlayerService = _ref => {
|
|
|
51
51
|
});
|
|
52
52
|
_defineProperty(this, "requestPermission", async () => {
|
|
53
53
|
if (_reactNative.Platform.OS === 'android') {
|
|
54
|
+
if (_reactNative.Platform.Version > 32) return true;
|
|
54
55
|
const {
|
|
55
|
-
READ_MEDIA_AUDIO,
|
|
56
56
|
READ_EXTERNAL_STORAGE
|
|
57
57
|
} = permissionModule.PERMISSIONS.ANDROID;
|
|
58
|
-
const
|
|
59
|
-
const status = await permissionModule.check(permission);
|
|
58
|
+
const status = await permissionModule.check(READ_EXTERNAL_STORAGE);
|
|
60
59
|
if (status === 'granted') {
|
|
61
60
|
return true;
|
|
62
61
|
} else {
|
|
63
|
-
const status = await permissionModule.request(
|
|
62
|
+
const status = await permissionModule.request(READ_EXTERNAL_STORAGE);
|
|
64
63
|
return status === 'granted';
|
|
65
64
|
}
|
|
66
65
|
} else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_uikitUtils","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","createNativePlayerService","_ref","audioRecorderModule","permissionModule","module","default","VoicePlayer","constructor","Set","state","stateSubscribers","forEach","callback","addPlayBackListener","data","stopped","currentPosition","duration","stop","catch","error","Logger","warn","playbackSubscribers","currentTime","removePlayBackListener","Platform","OS","READ_MEDIA_AUDIO","READ_EXTERNAL_STORAGE","PERMISSIONS","ANDROID","permission","Version","status","check","request","add","delete","uri","matchesOneOf","setState","setListener","sleep","startPlayer","e","removeListener","resumePlayer","pausePlayer","stopPlayer","clear","time","seekToPlayer","setSubscriptionDuration","_default","exports"],"sources":["createPlayerService.native.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type * as RNAudioRecorder from 'react-native-audio-recorder-player';\nimport * as Permissions from 'react-native-permissions';\n\nimport { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';\n\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n audioRecorderModule: typeof RNAudioRecorder;\n permissionModule: typeof Permissions;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createNativePlayerService = ({ audioRecorderModule, permissionModule }: Modules): PlayerServiceInterface => {\n const module = new audioRecorderModule.default();\n\n class VoicePlayer implements PlayerServiceInterface {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n constructor() {\n module.setSubscriptionDuration(0.1).catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);\n });\n }\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n module.addPlayBackListener(async (data) => {\n const stopped = data.currentPosition >= data.duration;\n\n if (stopped) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);\n });\n }\n if (this.state === 'playing') {\n this.playbackSubscribers.forEach((callback) => {\n callback({ currentTime: data.currentPosition, duration: data.duration, stopped });\n });\n }\n });\n };\n\n private removeListener = () => {\n module.removePlayBackListener();\n };\n\n public requestPermission = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n const { READ_MEDIA_AUDIO, READ_EXTERNAL_STORAGE } = permissionModule.PERMISSIONS.ANDROID;\n const permission = Platform.Version > 32 ? READ_MEDIA_AUDIO : READ_EXTERNAL_STORAGE;\n\n const status = await permissionModule.check(permission);\n if (status === 'granted') {\n return true;\n } else {\n const status = await permissionModule.request(permission);\n return status === 'granted';\n }\n } else {\n return true;\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n this.setState('preparing');\n this.uri = uri;\n this.setListener();\n\n // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.\n await sleep(0);\n await module.startPlayer(uri);\n\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await module.resumePlayer();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await module.pausePlayer();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['preparing', 'playing', 'paused'])) {\n await module.stopPlayer();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await module.seekToPlayer(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createNativePlayerService;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_uikitUtils","_defineProperty","obj","key","value","_toPropertyKey","Object","defineProperty","enumerable","configurable","writable","arg","_toPrimitive","String","input","hint","prim","Symbol","toPrimitive","undefined","res","call","TypeError","Number","createNativePlayerService","_ref","audioRecorderModule","permissionModule","module","default","VoicePlayer","constructor","Set","state","stateSubscribers","forEach","callback","addPlayBackListener","data","stopped","currentPosition","duration","stop","catch","error","Logger","warn","playbackSubscribers","currentTime","removePlayBackListener","Platform","OS","Version","READ_EXTERNAL_STORAGE","PERMISSIONS","ANDROID","status","check","request","add","delete","uri","matchesOneOf","setState","setListener","sleep","startPlayer","e","removeListener","resumePlayer","pausePlayer","stopPlayer","clear","time","seekToPlayer","setSubscriptionDuration","_default","exports"],"sources":["createPlayerService.native.tsx"],"sourcesContent":["import { Platform } from 'react-native';\nimport type * as RNAudioRecorder from 'react-native-audio-recorder-player';\nimport * as Permissions from 'react-native-permissions';\n\nimport { Logger, matchesOneOf, sleep } from '@sendbird/uikit-utils';\n\nimport type { PlayerServiceInterface, Unsubscribe } from './types';\n\ntype Modules = {\n audioRecorderModule: typeof RNAudioRecorder;\n permissionModule: typeof Permissions;\n};\ntype PlaybackListener = Parameters<PlayerServiceInterface['addPlaybackListener']>[number];\ntype StateListener = Parameters<PlayerServiceInterface['addStateListener']>[number];\nconst createNativePlayerService = ({ audioRecorderModule, permissionModule }: Modules): PlayerServiceInterface => {\n const module = new audioRecorderModule.default();\n\n class VoicePlayer implements PlayerServiceInterface {\n uri?: string;\n state: PlayerServiceInterface['state'] = 'idle';\n\n private readonly playbackSubscribers = new Set<PlaybackListener>();\n private readonly stateSubscribers = new Set<StateListener>();\n\n constructor() {\n module.setSubscriptionDuration(0.1).catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to set subscription duration', error);\n });\n }\n\n private setState = (state: PlayerServiceInterface['state']) => {\n this.state = state;\n this.stateSubscribers.forEach((callback) => {\n callback(state);\n });\n };\n\n private setListener = () => {\n module.addPlayBackListener(async (data) => {\n const stopped = data.currentPosition >= data.duration;\n\n if (stopped) {\n this.stop().catch((error) => {\n Logger.warn('[PlayerService.Native] Failed to stop in PlayBackListener', error);\n });\n }\n if (this.state === 'playing') {\n this.playbackSubscribers.forEach((callback) => {\n callback({ currentTime: data.currentPosition, duration: data.duration, stopped });\n });\n }\n });\n };\n\n private removeListener = () => {\n module.removePlayBackListener();\n };\n\n public requestPermission = async (): Promise<boolean> => {\n if (Platform.OS === 'android') {\n if (Platform.Version > 32) return true;\n\n const { READ_EXTERNAL_STORAGE } = permissionModule.PERMISSIONS.ANDROID;\n\n const status = await permissionModule.check(READ_EXTERNAL_STORAGE);\n if (status === 'granted') {\n return true;\n } else {\n const status = await permissionModule.request(READ_EXTERNAL_STORAGE);\n return status === 'granted';\n }\n } else {\n return true;\n }\n };\n\n public addPlaybackListener = (callback: PlaybackListener): Unsubscribe => {\n this.playbackSubscribers.add(callback);\n return () => {\n this.playbackSubscribers.delete(callback);\n };\n };\n\n public addStateListener = (callback: (state: PlayerServiceInterface['state']) => void): Unsubscribe => {\n this.stateSubscribers.add(callback);\n return () => {\n this.stateSubscribers.delete(callback);\n };\n };\n\n public play = async (uri: string): Promise<void> => {\n if (matchesOneOf(this.state, ['idle', 'stopped'])) {\n try {\n this.setState('preparing');\n this.uri = uri;\n this.setListener();\n\n // FIXME: Workaround, `module.startPlayer()` caused a significant frame-drop and prevented the 'preparing' UI transition.\n await sleep(0);\n await module.startPlayer(uri);\n\n this.setState('playing');\n } catch (e) {\n this.setState('idle');\n this.uri = undefined;\n this.removeListener();\n throw e;\n }\n } else if (matchesOneOf(this.state, ['paused']) && this.uri === uri) {\n try {\n this.setListener();\n await module.resumePlayer();\n this.setState('playing');\n } catch (e) {\n this.removeListener();\n throw e;\n }\n }\n };\n\n public pause = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['playing'])) {\n await module.pausePlayer();\n this.removeListener();\n this.setState('paused');\n }\n };\n\n public stop = async (): Promise<void> => {\n if (matchesOneOf(this.state, ['preparing', 'playing', 'paused'])) {\n await module.stopPlayer();\n this.removeListener();\n this.setState('stopped');\n }\n };\n\n public reset = async (): Promise<void> => {\n await this.stop();\n this.setState('idle');\n this.uri = undefined;\n this.playbackSubscribers.clear();\n this.stateSubscribers.clear();\n };\n\n public seek = async (time: number): Promise<void> => {\n if (matchesOneOf(this.state, ['playing', 'paused'])) {\n await module.seekToPlayer(time);\n }\n };\n }\n\n return new VoicePlayer();\n};\n\nexport default createNativePlayerService;\n"],"mappings":"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"}
|
package/lib/commonjs/version.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.7.
|
|
1
|
+
{"version":3,"names":["VERSION","_default","exports","default"],"sources":["version.ts"],"sourcesContent":["const VERSION = '3.7.6';\nexport default VERSION;\n"],"mappings":";;;;;;AAAA,MAAMA,OAAO,GAAG,OAAO;AAAC,IAAAC,QAAA,GACTD,OAAO;AAAAE,OAAA,CAAAC,OAAA,GAAAF,QAAA"}
|
|
@@ -143,7 +143,7 @@ const useTypingTrigger = (text, channel) => {
|
|
|
143
143
|
useEffect(() => {
|
|
144
144
|
function triggerTyping() {
|
|
145
145
|
if (channel.isGroupChannel()) {
|
|
146
|
-
const action = text.length === 0 ? channel.endTyping : channel.startTyping;
|
|
146
|
+
const action = () => text.length === 0 ? channel.endTyping() : channel.startTyping();
|
|
147
147
|
action().catch(error => {
|
|
148
148
|
Logger.debug('ChannelInput: Failed to trigger typing', error);
|
|
149
149
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","Logger","replace","useIIFE","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","triggerTyping","action","endTyping","startTyping","catch","error","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = text.length === 0 ? channel.endTyping : channel.startTyping;\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginRight: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","useState","KeyboardAvoidingView","Platform","StyleSheet","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","Logger","replace","useIIFE","useSendbirdChat","useMentionTextInput","AttachmentsButton","EditInput","MessageToReplyPreview","SendInput","VoiceMessageInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","ChannelInput","props","channel","keyboardAvoidOffset","messageToEdit","setMessageToEdit","top","left","right","bottom","colors","typography","sbOptions","mentionManager","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","inputMode","isFileMessage","mentionAvailable","uikit","groupChannel","enableMention","isGroupChannel","isBroadcast","inputKeyToRemount","length","inputHeight","setInputHeight","styles","inputDefault","height","fontStyle","body3","fontSize","lineHeight","textAlignVertical","textInputStyle","flatten","input","style","useTypingTrigger","useTextClearOnDisabled","inputDisabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","shouldRenderInput","createElement","SafeAreaBottom","Fragment","keyboardVerticalOffset","behavior","paddingLeft","paddingRight","backgroundColor","background","onLayout","e","nativeEvent","layout","inputContainer","_extends","key","ref","autoFocus","SuggestedMentionList","topInset","bottomInset","triggerTyping","action","endTyping","startTyping","catch","error","debug","setText","chatDisabled","isUserMessage","setTimeout","_textInputRef$current","current","focus","_ref","justifyContent","width","flex","marginRight","borderRadius","paddingTop","paddingBottom","minHeight","maxHeight","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, StyleProp, StyleSheet, TextInput, TextStyle, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n Logger,\n SendbirdBaseChannel,\n SendbirdBaseMessage,\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdFileMessageUpdateParams,\n SendbirdMember,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n SendbirdUserMessageUpdateParams,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../hooks/useContext';\nimport useMentionTextInput from '../../hooks/useMentionTextInput';\nimport type { CommonComponent, MentionedUser, Range } from '../../types';\nimport type { AttachmentsButtonProps } from './AttachmentsButton';\nimport AttachmentsButton from './AttachmentsButton';\nimport EditInput from './EditInput';\nimport type { MessageToReplyPreviewProps } from './MessageToReplyPreview';\nimport { MessageToReplyPreview } from './MessageToReplyPreview';\nimport SendInput from './SendInput';\nimport VoiceMessageInput, { VoiceMessageInputProps } from './VoiceMessageInput';\n\nexport type SuggestedMentionListProps = {\n text: string;\n selection: Range;\n topInset: number;\n bottomInset: number;\n inputHeight: number;\n onPressToMention: (user: SendbirdMember, searchStringRange: Range) => void;\n mentionedUsers: MentionedUser[];\n};\n\nexport type ChannelInputProps = {\n // style\n style?: StyleProp<TextStyle>;\n\n // default\n channel: SendbirdBaseChannel;\n shouldRenderInput: boolean;\n keyboardAvoidOffset: number;\n\n // default actions\n onPressSendUserMessage: (params: SendbirdUserMessageCreateParams) => Promise<void>;\n onPressSendFileMessage: (params: SendbirdFileMessageCreateParams) => Promise<void>;\n onPressUpdateUserMessage: (message: SendbirdUserMessage, params: SendbirdUserMessageUpdateParams) => Promise<void>;\n onPressUpdateFileMessage: (message: SendbirdFileMessage, params: SendbirdFileMessageUpdateParams) => Promise<void>;\n\n // input status\n inputFrozen: boolean;\n inputMuted: boolean;\n inputDisabled: boolean;\n\n // edit\n messageToEdit: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToEdit: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n\n // reply - only available on group channel\n messageToReply?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n setMessageToReply?: (message?: undefined | SendbirdUserMessage | SendbirdFileMessage) => void;\n messageForThread?: undefined | SendbirdUserMessage | SendbirdFileMessage;\n\n // mention\n SuggestedMentionList?: CommonComponent<SuggestedMentionListProps>;\n\n // sub-components\n AttachmentsButton?: (props: AttachmentsButtonProps) => React.ReactNode | null;\n MessageToReplyPreview?: (props: MessageToReplyPreviewProps) => React.ReactNode | null;\n VoiceMessageInput?: (props: VoiceMessageInputProps) => React.ReactNode | null;\n};\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst ChannelInput = (props: ChannelInputProps) => {\n const { channel, keyboardAvoidOffset, messageToEdit, setMessageToEdit } = props;\n\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors, typography } = useUIKitTheme();\n const { sbOptions, mentionManager } = useSendbirdChat();\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit,\n });\n const inputMode = useIIFE(() => {\n if (messageToEdit && !messageToEdit.isFileMessage()) return 'edit';\n else return 'send';\n });\n\n const mentionAvailable =\n sbOptions.uikit.groupChannel.channel.enableMention && channel.isGroupChannel() && !channel.isBroadcast;\n const inputKeyToRemount = GET_INPUT_KEY(mentionAvailable ? mentionedUsers.length === 0 : false);\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const fontStyle = useMemo(() => {\n if (!typography.body3.fontSize) return typography.body3;\n // NOTE: iOS does not support textAlignVertical, so we should adjust lineHeight to center the text in multiline TextInput.\n return { ...typography.body3, lineHeight: typography.body3.fontSize * 1.275, textAlignVertical: 'center' };\n }, [typography.body3.fontSize]);\n\n const textInputStyle = StyleSheet.flatten([styles.input, fontStyle, props.style]);\n\n useTypingTrigger(text, channel);\n useTextClearOnDisabled(onChangeText, props.inputDisabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention = (user: SendbirdMember, searchStringRange: Range) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n VoiceMessageInput={props.VoiceMessageInput ?? VoiceMessageInput}\n AttachmentsButton={props.AttachmentsButton ?? AttachmentsButton}\n MessageToReplyPreview={props.MessageToReplyPreview ?? MessageToReplyPreview}\n style={textInputStyle}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={inputKeyToRemount}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n autoFocus={AUTO_FOCUS}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n style={textInputStyle}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && props.SuggestedMentionList && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdBaseChannel) => {\n useEffect(\n () => {\n function triggerTyping() {\n if (channel.isGroupChannel()) {\n const action = () => (text.length === 0 ? channel.endTyping() : channel.startTyping());\n action().catch((error) => {\n Logger.debug('ChannelInput: Failed to trigger typing', error);\n });\n }\n }\n\n triggerTyping();\n },\n channel.isGroupChannel() ? [text] : [],\n );\n};\n\nconst useTextClearOnDisabled = (setText: (val: string) => void, chatDisabled: boolean) => {\n useEffect(() => {\n if (chatDisabled) setText('');\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: React.MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdBaseMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n input: {\n flex: 1,\n marginRight: 4,\n borderRadius: 20,\n paddingTop: 8,\n paddingBottom: 8,\n minHeight: 36,\n // Android - padding area is hidden\n // iOS - padding area is visible\n maxHeight: Platform.select({ ios: 36 * 2 + 16, android: 36 * 2 }),\n },\n});\n\nexport default React.memo(ChannelInput);\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ReactNativeZoomableView","React","useLayoutEffect","useRef","useState","StyleSheet","useWindowDimensions","Box","Image","LoadingSpinner","createStyleSheet","useHeaderStyle","useUIKitTheme","useIIFE","usePlatformService","SBUUtils","FileViewerContent","_ref","type","src","topInset","bottomInset","maxZoom","minZoom","onPress","loading","setLoading","defaultHeight","mediaService","palette","source","uri","onLoadEnd","mediaViewer","createElement","ZoomableImageView","style","absoluteFill","resizeMode","zoomProps","onTouchEnd","VideoComponent","top","bottom","onLoad","styles","container","position","size","color","primary300","_ref2","props","width","height","imageSize","contentSizeProps","setContentSizeProps","contentWidth","contentHeight","safeRun","image","current","getImageSize","viewRatio","imageRatio","fitDirection","ratio","actualSize","_extends","visualTouchFeedbackEnabled","initialZoom","zIndex","flex","alignItems","justifyContent"],"sources":["FileViewerContent.tsx"],"sourcesContent":["import { ReactNativeZoomableView, ReactNativeZoomableViewProps } from '@openspacelabs/react-native-zoomable-view';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { ImageProps, ImageStyle, ImageURISource, StyleProp, StyleSheet, useWindowDimensions } from 'react-native';\n\nimport {\n Box,\n Image,\n LoadingSpinner,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { FileType, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\n\ntype Props = {\n type: FileType;\n src: string;\n topInset?: number;\n bottomInset?: number;\n maxZoom?: number;\n minZoom?: number;\n onPress?: () => void;\n};\nconst FileViewerContent = ({ type, src, topInset = 0, bottomInset = 0, maxZoom = 4, minZoom = 1, onPress }: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { defaultHeight } = useHeaderStyle();\n const { mediaService } = usePlatformService();\n const { palette } = useUIKitTheme();\n\n const source = { uri: src };\n const onLoadEnd = () => setLoading(false);\n const mediaViewer = useIIFE(() => {\n switch (type) {\n case 'image': {\n return (\n <ZoomableImageView\n source={source}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={onLoadEnd}\n zoomProps={{\n minZoom,\n maxZoom,\n onTouchEnd: onPress,\n }}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n return (\n <mediaService.VideoComponent\n source={source}\n style={[StyleSheet.absoluteFill, { top: topInset, bottom: defaultHeight + bottomInset }]}\n resizeMode={'contain'}\n onLoad={onLoadEnd}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box style={styles.container}>\n {mediaViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </Box>\n );\n};\n\nconst ZoomableImageView = ({\n zoomProps,\n ...props\n}: {\n source: ImageURISource;\n style: StyleProp<ImageStyle>;\n resizeMode: ImageProps['resizeMode'];\n onLoadEnd: () => void;\n zoomProps?: ReactNativeZoomableViewProps;\n}) => {\n const { width, height } = useWindowDimensions();\n\n const imageSize = useRef<{ width: number; height: number }>();\n const [contentSizeProps, setContentSizeProps] = useState<ReactNativeZoomableViewProps>({\n contentWidth: width,\n contentHeight: height,\n });\n\n useLayoutEffect(() => {\n SBUUtils.safeRun(async () => {\n if (props.source.uri) {\n const image = imageSize.current ?? (await SBUUtils.getImageSize(props.source.uri));\n imageSize.current = image;\n\n const viewRatio = width / height;\n const imageRatio = image.width / image.height;\n\n const fitDirection = viewRatio > imageRatio ? 'height' : 'width';\n const ratio = fitDirection === 'height' ? height / image.height : width / image.width;\n const actualSize = { width: image.width * ratio, height: image.height * ratio };\n\n setContentSizeProps({\n contentWidth: actualSize.width,\n contentHeight: actualSize.height,\n });\n }\n });\n }, [props.source.uri, width, height]);\n\n return (\n <ReactNativeZoomableView\n visualTouchFeedbackEnabled={false}\n style={{ width, height }}\n initialZoom={1}\n {...contentSizeProps}\n {...zoomProps}\n >\n <Image {...props} />\n </ReactNativeZoomableView>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex:
|
|
1
|
+
{"version":3,"names":["ReactNativeZoomableView","React","useLayoutEffect","useRef","useState","StyleSheet","useWindowDimensions","Box","Image","LoadingSpinner","createStyleSheet","useHeaderStyle","useUIKitTheme","useIIFE","usePlatformService","SBUUtils","FileViewerContent","_ref","type","src","topInset","bottomInset","maxZoom","minZoom","onPress","loading","setLoading","defaultHeight","mediaService","palette","source","uri","onLoadEnd","mediaViewer","createElement","ZoomableImageView","style","absoluteFill","resizeMode","zoomProps","onTouchEnd","VideoComponent","top","bottom","onLoad","styles","container","position","size","color","primary300","_ref2","props","width","height","imageSize","contentSizeProps","setContentSizeProps","contentWidth","contentHeight","safeRun","image","current","getImageSize","viewRatio","imageRatio","fitDirection","ratio","actualSize","_extends","visualTouchFeedbackEnabled","initialZoom","zIndex","flex","alignItems","justifyContent"],"sources":["FileViewerContent.tsx"],"sourcesContent":["import { ReactNativeZoomableView, ReactNativeZoomableViewProps } from '@openspacelabs/react-native-zoomable-view';\nimport React, { useLayoutEffect, useRef, useState } from 'react';\nimport { ImageProps, ImageStyle, ImageURISource, StyleProp, StyleSheet, useWindowDimensions } from 'react-native';\n\nimport {\n Box,\n Image,\n LoadingSpinner,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { FileType, useIIFE } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../hooks/useContext';\nimport SBUUtils from '../../libs/SBUUtils';\n\ntype Props = {\n type: FileType;\n src: string;\n topInset?: number;\n bottomInset?: number;\n maxZoom?: number;\n minZoom?: number;\n onPress?: () => void;\n};\nconst FileViewerContent = ({ type, src, topInset = 0, bottomInset = 0, maxZoom = 4, minZoom = 1, onPress }: Props) => {\n const [loading, setLoading] = useState(true);\n\n const { defaultHeight } = useHeaderStyle();\n const { mediaService } = usePlatformService();\n const { palette } = useUIKitTheme();\n\n const source = { uri: src };\n const onLoadEnd = () => setLoading(false);\n const mediaViewer = useIIFE(() => {\n switch (type) {\n case 'image': {\n return (\n <ZoomableImageView\n source={source}\n style={StyleSheet.absoluteFill}\n resizeMode={'contain'}\n onLoadEnd={onLoadEnd}\n zoomProps={{\n minZoom,\n maxZoom,\n onTouchEnd: onPress,\n }}\n />\n );\n }\n\n case 'video':\n case 'audio': {\n return (\n <mediaService.VideoComponent\n source={source}\n style={[StyleSheet.absoluteFill, { top: topInset, bottom: defaultHeight + bottomInset }]}\n resizeMode={'contain'}\n onLoad={onLoadEnd}\n />\n );\n }\n\n default: {\n return null;\n }\n }\n });\n\n return (\n <Box style={styles.container}>\n {mediaViewer}\n {loading && <LoadingSpinner style={{ position: 'absolute' }} size={40} color={palette.primary300} />}\n </Box>\n );\n};\n\nconst ZoomableImageView = ({\n zoomProps,\n ...props\n}: {\n source: ImageURISource;\n style: StyleProp<ImageStyle>;\n resizeMode: ImageProps['resizeMode'];\n onLoadEnd: () => void;\n zoomProps?: ReactNativeZoomableViewProps;\n}) => {\n const { width, height } = useWindowDimensions();\n\n const imageSize = useRef<{ width: number; height: number }>();\n const [contentSizeProps, setContentSizeProps] = useState<ReactNativeZoomableViewProps>({\n contentWidth: width,\n contentHeight: height,\n });\n\n useLayoutEffect(() => {\n SBUUtils.safeRun(async () => {\n if (props.source.uri) {\n const image = imageSize.current ?? (await SBUUtils.getImageSize(props.source.uri));\n imageSize.current = image;\n\n const viewRatio = width / height;\n const imageRatio = image.width / image.height;\n\n const fitDirection = viewRatio > imageRatio ? 'height' : 'width';\n const ratio = fitDirection === 'height' ? height / image.height : width / image.width;\n const actualSize = { width: image.width * ratio, height: image.height * ratio };\n\n setContentSizeProps({\n contentWidth: actualSize.width,\n contentHeight: actualSize.height,\n });\n }\n });\n }, [props.source.uri, width, height]);\n\n return (\n <ReactNativeZoomableView\n visualTouchFeedbackEnabled={false}\n style={{ width, height }}\n initialZoom={1}\n {...contentSizeProps}\n {...zoomProps}\n >\n <Image {...props} />\n </ReactNativeZoomableView>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 0,\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerContent;\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useSafeAreaInsets","Box","Icon","PressBox","createStyleSheet","useHeaderStyle","useUIKitTheme","FileViewerFooter","_ref","bottomInset","deleteShown","onPressDelete","onPressDownload","palette","defaultHeight","left","right","createElement","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingBottom","height","backgroundColor","overlay01","activeOpacity","onPress","buttonContainer","icon","size","color","onBackgroundDark01","titleContainer","disabled","position","bottom","flexDirection","alignItems","justifyContent","width","flex"],"sources":["FileViewerFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\n\ntype Props = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\n\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onPressDownload} style={styles.buttonContainer}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer} />\n <PressBox activeOpacity={0.75} onPress={onPressDelete} style={styles.buttonContainer} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </PressBox>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SACEC,GAAG,EACHC,IAAI,EACJC,QAAQ,EACRC,gBAAgB,EAChBC,cAAc,EACdC,aAAa,QACR,yCAAyC;AAShD,MAAMC,gBAAgB,GAAGC,IAAA,IAAyE;EAAA,IAAxE;IAAEC,WAAW;IAAEC,WAAW;IAAEC,aAAa;IAAEC;EAAuB,CAAC,GAAAJ,IAAA;EAC3F,MAAM;IAAEK;EAAQ,CAAC,GAAGP,aAAa,EAAE;EACnC,MAAM;IAAEQ;EAAc,CAAC,GAAGT,cAAc,EAAE;EAC1C,MAAM;IAAEU,IAAI;IAAEC;EAAM,CAAC,GAAGhB,iBAAiB,EAAE;EAE3C,oBACED,KAAA,CAAAkB,aAAA,CAAChB,GAAG;IACFiB,KAAK,EAAE,CACLC,MAAM,CAACC,SAAS,EAChB;MACEC,WAAW,EAAEF,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGP,IAAI;MACtDQ,YAAY,EAAEJ,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGN,KAAK;MACxDQ,aAAa,EAAEf,WAAW;MAC1BgB,MAAM,EAAEX,aAAa,GAAGL,WAAW;MACnCiB,eAAe,EAAEb,OAAO,CAACc;IAC3B,CAAC;EACD,gBAEF5B,KAAA,CAAAkB,aAAA,CAACd,QAAQ;IAACyB,aAAa,EAAE,IAAK;IAACC,OAAO,EAAEjB,eAAgB;IAACM,KAAK,EAAEC,MAAM,CAACW;EAAgB,gBACrF/B,KAAA,CAAAkB,aAAA,CAACf,IAAI;IAAC6B,IAAI,EAAE,UAAW;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAEpB,OAAO,CAACqB;EAAmB,EAAG,CAC9D,eACXnC,KAAA,CAAAkB,aAAA,CAAChB,GAAG;IAACiB,KAAK,EAAEC,MAAM,CAACgB;EAAe,EAAG,eACrCpC,KAAA,CAAAkB,aAAA,CAACd,QAAQ;IAACyB,aAAa,EAAE,IAAK;IAACC,OAAO,EAAElB,aAAc;IAACO,KAAK,EAAEC,MAAM,CAACW,eAAgB;IAACM,QAAQ,EAAE,CAAC1B;EAAY,GAC1GA,WAAW,iBAAIX,KAAA,CAAAkB,aAAA,CAACf,IAAI;IAAC6B,IAAI,EAAE,QAAS;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAEpB,OAAO,CAACqB;EAAmB,EAAG,CAC5E,CACP;AAEV,CAAC;AAED,MAAMf,MAAM,GAAGf,gBAAgB,CAAC;EAC9BgB,SAAS,EAAE;IACTiB,QAAQ,EAAE,UAAU;
|
|
1
|
+
{"version":3,"names":["React","useSafeAreaInsets","Box","Icon","PressBox","createStyleSheet","useHeaderStyle","useUIKitTheme","FileViewerFooter","_ref","bottomInset","deleteShown","onPressDelete","onPressDownload","palette","defaultHeight","left","right","createElement","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingBottom","height","backgroundColor","overlay01","activeOpacity","onPress","buttonContainer","icon","size","color","onBackgroundDark01","titleContainer","disabled","zIndex","position","bottom","flexDirection","alignItems","justifyContent","width","flex"],"sources":["FileViewerFooter.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\n\ntype Props = {\n bottomInset: number;\n deleteShown: boolean;\n onPressDelete: () => void;\n onPressDownload: () => void;\n};\n\nconst FileViewerFooter = ({ bottomInset, deleteShown, onPressDelete, onPressDownload }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingBottom: bottomInset,\n height: defaultHeight + bottomInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onPressDownload} style={styles.buttonContainer}>\n <Icon icon={'download'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer} />\n <PressBox activeOpacity={0.75} onPress={onPressDelete} style={styles.buttonContainer} disabled={!deleteShown}>\n {deleteShown && <Icon icon={'delete'} size={24} color={palette.onBackgroundDark01} />}\n </PressBox>\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 1,\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default FileViewerFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SACEC,GAAG,EACHC,IAAI,EACJC,QAAQ,EACRC,gBAAgB,EAChBC,cAAc,EACdC,aAAa,QACR,yCAAyC;AAShD,MAAMC,gBAAgB,GAAGC,IAAA,IAAyE;EAAA,IAAxE;IAAEC,WAAW;IAAEC,WAAW;IAAEC,aAAa;IAAEC;EAAuB,CAAC,GAAAJ,IAAA;EAC3F,MAAM;IAAEK;EAAQ,CAAC,GAAGP,aAAa,EAAE;EACnC,MAAM;IAAEQ;EAAc,CAAC,GAAGT,cAAc,EAAE;EAC1C,MAAM;IAAEU,IAAI;IAAEC;EAAM,CAAC,GAAGhB,iBAAiB,EAAE;EAE3C,oBACED,KAAA,CAAAkB,aAAA,CAAChB,GAAG;IACFiB,KAAK,EAAE,CACLC,MAAM,CAACC,SAAS,EAChB;MACEC,WAAW,EAAEF,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGP,IAAI;MACtDQ,YAAY,EAAEJ,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGN,KAAK;MACxDQ,aAAa,EAAEf,WAAW;MAC1BgB,MAAM,EAAEX,aAAa,GAAGL,WAAW;MACnCiB,eAAe,EAAEb,OAAO,CAACc;IAC3B,CAAC;EACD,gBAEF5B,KAAA,CAAAkB,aAAA,CAACd,QAAQ;IAACyB,aAAa,EAAE,IAAK;IAACC,OAAO,EAAEjB,eAAgB;IAACM,KAAK,EAAEC,MAAM,CAACW;EAAgB,gBACrF/B,KAAA,CAAAkB,aAAA,CAACf,IAAI;IAAC6B,IAAI,EAAE,UAAW;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAEpB,OAAO,CAACqB;EAAmB,EAAG,CAC9D,eACXnC,KAAA,CAAAkB,aAAA,CAAChB,GAAG;IAACiB,KAAK,EAAEC,MAAM,CAACgB;EAAe,EAAG,eACrCpC,KAAA,CAAAkB,aAAA,CAACd,QAAQ;IAACyB,aAAa,EAAE,IAAK;IAACC,OAAO,EAAElB,aAAc;IAACO,KAAK,EAAEC,MAAM,CAACW,eAAgB;IAACM,QAAQ,EAAE,CAAC1B;EAAY,GAC1GA,WAAW,iBAAIX,KAAA,CAAAkB,aAAA,CAACf,IAAI;IAAC6B,IAAI,EAAE,QAAS;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAEpB,OAAO,CAACqB;EAAmB,EAAG,CAC5E,CACP;AAEV,CAAC;AAED,MAAMf,MAAM,GAAGf,gBAAgB,CAAC;EAC9BgB,SAAS,EAAE;IACTiB,MAAM,EAAE,CAAC;IACTC,QAAQ,EAAE,UAAU;IACpBvB,IAAI,EAAE,CAAC;IACPC,KAAK,EAAE,CAAC;IACRuB,MAAM,EAAE,CAAC;IACTC,aAAa,EAAE,KAAK;IACpBC,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE,QAAQ;IACxBpB,iBAAiB,EAAE;EACrB,CAAC;EACDQ,eAAe,EAAE;IACfa,KAAK,EAAE,EAAE;IACTlB,MAAM,EAAE,EAAE;IACVgB,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB,CAAC;EACDP,cAAc,EAAE;IACdS,IAAI,EAAE,CAAC;IACPH,UAAU,EAAE,QAAQ;IACpBC,cAAc,EAAE;EAClB;AACF,CAAC,CAAC;AAEF,eAAenC,gBAAgB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useSafeAreaInsets","Box","Icon","PressBox","Text","createStyleSheet","useHeaderStyle","useUIKitTheme","truncate","FileViewerHeader","_ref","headerShown","topInset","onClose","subtitle","title","palette","defaultHeight","left","right","createElement","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","backgroundColor","overlay01","activeOpacity","onPress","buttonContainer","icon","size","color","onBackgroundDark01","titleContainer","h2","numberOfLines","mode","maxLen","caption2","top","position","flexDirection","alignItems","justifyContent","width","flex","marginBottom"],"sources":["FileViewerHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { truncate } from '@sendbird/uikit-utils';\n\ntype Props = {\n headerShown?: boolean;\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\n\nconst FileViewerHeader = ({ headerShown = true, topInset, onClose, subtitle, title }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n if (!headerShown) return null;\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingTop: topInset,\n height: defaultHeight + topInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onClose} style={styles.buttonContainer}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.title} numberOfLines={1}>\n {truncate(title, { mode: 'mid', maxLen: 18 })}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>\n {subtitle}\n </Text>\n </Box>\n <Box style={styles.buttonContainer} />\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n title: {\n marginBottom: 2,\n },\n});\n\nexport default FileViewerHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,gCAAgC;AAElE,SACEC,GAAG,EACHC,IAAI,EACJC,QAAQ,EACRC,IAAI,EACJC,gBAAgB,EAChBC,cAAc,EACdC,aAAa,QACR,yCAAyC;AAChD,SAASC,QAAQ,QAAQ,uBAAuB;AAUhD,MAAMC,gBAAgB,GAAGC,IAAA,IAAuE;EAAA,IAAtE;IAAEC,WAAW,GAAG,IAAI;IAAEC,QAAQ;IAAEC,OAAO;IAAEC,QAAQ;IAAEC;EAAa,CAAC,GAAAL,IAAA;EACzF,MAAM;IAAEM;EAAQ,CAAC,GAAGT,aAAa,EAAE;EACnC,MAAM;IAAEU;EAAc,CAAC,GAAGX,cAAc,EAAE;EAC1C,MAAM;IAAEY,IAAI;IAAEC;EAAM,CAAC,GAAGnB,iBAAiB,EAAE;EAE3C,IAAI,CAACW,WAAW,EAAE,OAAO,IAAI;EAE7B,oBACEZ,KAAA,CAAAqB,aAAA,CAACnB,GAAG;IACFoB,KAAK,EAAE,CACLC,MAAM,CAACC,SAAS,EAChB;MACEC,WAAW,EAAEF,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGP,IAAI;MACtDQ,YAAY,EAAEJ,MAAM,CAACC,SAAS,CAACE,iBAAiB,GAAGN,KAAK;MACxDQ,UAAU,EAAEf,QAAQ;MACpBgB,MAAM,EAAEX,aAAa,GAAGL,QAAQ;MAChCiB,eAAe,EAAEb,OAAO,CAACc;IAC3B,CAAC;EACD,gBAEF/B,KAAA,CAAAqB,aAAA,CAACjB,QAAQ;IAAC4B,aAAa,EAAE,IAAK;IAACC,OAAO,EAAEnB,OAAQ;IAACQ,KAAK,EAAEC,MAAM,CAACW;EAAgB,gBAC7ElC,KAAA,CAAAqB,aAAA,CAAClB,IAAI;IAACgC,IAAI,EAAE,OAAQ;IAACC,IAAI,EAAE,EAAG;IAACC,KAAK,EAAEpB,OAAO,CAACqB;EAAmB,EAAG,CAC3D,eACXtC,KAAA,CAAAqB,aAAA,CAACnB,GAAG;IAACoB,KAAK,EAAEC,MAAM,CAACgB;EAAe,gBAChCvC,KAAA,CAAAqB,aAAA,CAAChB,IAAI;IAACmC,EAAE;IAACH,KAAK,EAAEpB,OAAO,CAACqB,kBAAmB;IAAChB,KAAK,EAAEC,MAAM,CAACP,KAAM;IAACyB,aAAa,EAAE;EAAE,GAC/EhC,QAAQ,CAACO,KAAK,EAAE;IAAE0B,IAAI,EAAE,KAAK;IAAEC,MAAM,EAAE;EAAG,CAAC,CAAC,CACxC,eACP3C,KAAA,CAAAqB,aAAA,CAAChB,IAAI;IAACuC,QAAQ;IAACP,KAAK,EAAEpB,OAAO,CAACqB,kBAAmB;IAACG,aAAa,EAAE;EAAE,GAChE1B,QAAQ,CACJ,CACH,eACNf,KAAA,CAAAqB,aAAA,CAACnB,GAAG;IAACoB,KAAK,EAAEC,MAAM,CAACW;EAAgB,EAAG,CAClC;AAEV,CAAC;AAED,MAAMX,MAAM,GAAGjB,gBAAgB,CAAC;EAC9BkB,SAAS,EAAE;IACTqB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"names":["React","useSafeAreaInsets","Box","Icon","PressBox","Text","createStyleSheet","useHeaderStyle","useUIKitTheme","truncate","FileViewerHeader","_ref","headerShown","topInset","onClose","subtitle","title","palette","defaultHeight","left","right","createElement","style","styles","container","paddingLeft","paddingHorizontal","paddingRight","paddingTop","height","backgroundColor","overlay01","activeOpacity","onPress","buttonContainer","icon","size","color","onBackgroundDark01","titleContainer","h2","numberOfLines","mode","maxLen","caption2","zIndex","top","position","flexDirection","alignItems","justifyContent","width","flex","marginBottom"],"sources":["FileViewerHeader.tsx"],"sourcesContent":["import React from 'react';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport {\n Box,\n Icon,\n PressBox,\n Text,\n createStyleSheet,\n useHeaderStyle,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { truncate } from '@sendbird/uikit-utils';\n\ntype Props = {\n headerShown?: boolean;\n topInset: number;\n onClose: () => void;\n title: string;\n subtitle: string;\n};\n\nconst FileViewerHeader = ({ headerShown = true, topInset, onClose, subtitle, title }: Props) => {\n const { palette } = useUIKitTheme();\n const { defaultHeight } = useHeaderStyle();\n const { left, right } = useSafeAreaInsets();\n\n if (!headerShown) return null;\n\n return (\n <Box\n style={[\n styles.container,\n {\n paddingLeft: styles.container.paddingHorizontal + left,\n paddingRight: styles.container.paddingHorizontal + right,\n paddingTop: topInset,\n height: defaultHeight + topInset,\n backgroundColor: palette.overlay01,\n },\n ]}\n >\n <PressBox activeOpacity={0.75} onPress={onClose} style={styles.buttonContainer}>\n <Icon icon={'close'} size={24} color={palette.onBackgroundDark01} />\n </PressBox>\n <Box style={styles.titleContainer}>\n <Text h2 color={palette.onBackgroundDark01} style={styles.title} numberOfLines={1}>\n {truncate(title, { mode: 'mid', maxLen: 18 })}\n </Text>\n <Text caption2 color={palette.onBackgroundDark01} numberOfLines={1}>\n {subtitle}\n </Text>\n </Box>\n <Box style={styles.buttonContainer} />\n </Box>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n zIndex: 1,\n top: 0,\n left: 0,\n right: 0,\n position: 'absolute',\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: 12,\n },\n buttonContainer: {\n width: 32,\n height: 32,\n alignItems: 'center',\n justifyContent: 'center',\n },\n titleContainer: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n },\n title: {\n marginBottom: 2,\n },\n});\n\nexport default FileViewerHeader;\n"],"mappings":"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"}
|
|
@@ -61,7 +61,9 @@ const BottomSheetReactionAddon = _ref => {
|
|
|
61
61
|
const currentUserIdx = reactionUserIds.indexOf((currentUser === null || currentUser === void 0 ? void 0 : currentUser.userId) ?? UNKNOWN_USER_ID);
|
|
62
62
|
const reacted = currentUserIdx > -1;
|
|
63
63
|
const onPress = async () => {
|
|
64
|
-
const action =
|
|
64
|
+
const action = (message, key) => {
|
|
65
|
+
return reacted ? channel.deleteReaction(message, key) : channel.addReaction(message, key);
|
|
66
|
+
};
|
|
65
67
|
await action(message, key).catch(error => {
|
|
66
68
|
Logger.warn('Failed to reaction', error);
|
|
67
69
|
}).finally(() => {
|