@sendbird/uikit-react-native 1.1.1 → 1.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/lib/commonjs/components/FileViewer.js +8 -3
  2. package/lib/commonjs/components/FileViewer.js.map +1 -1
  3. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +47 -15
  4. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  5. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +51 -34
  6. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  7. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js +2 -1
  8. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  9. package/lib/commonjs/components/MessageRenderer/index.js +7 -2
  10. package/lib/commonjs/components/MessageRenderer/index.js.map +1 -1
  11. package/lib/commonjs/contexts/SendbirdChat.js +1 -1
  12. package/lib/commonjs/contexts/SendbirdChat.js.map +1 -1
  13. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +39 -6
  14. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  15. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  16. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  17. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +35 -2
  18. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  19. package/lib/commonjs/fragments/createGroupChannelListFragment.js +1 -1
  20. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  21. package/lib/commonjs/libs/SBUError.js +41 -0
  22. package/lib/commonjs/libs/SBUError.js.map +1 -0
  23. package/lib/commonjs/libs/SBUUtils.js +20 -0
  24. package/lib/commonjs/libs/SBUUtils.js.map +1 -0
  25. package/lib/commonjs/localization/StringSet.type.js +6 -0
  26. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  27. package/lib/commonjs/platform/createFileService.expo.js +6 -4
  28. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  29. package/lib/commonjs/platform/createFileService.native.js +20 -8
  30. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  31. package/lib/commonjs/platform/types.js +4 -0
  32. package/lib/commonjs/platform/types.js.map +1 -1
  33. package/lib/commonjs/version.js +1 -1
  34. package/lib/commonjs/version.js.map +1 -1
  35. package/lib/module/components/FileViewer.js +9 -4
  36. package/lib/module/components/FileViewer.js.map +1 -1
  37. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +48 -17
  38. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  39. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +52 -35
  40. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  41. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js +2 -1
  42. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  43. package/lib/module/components/MessageRenderer/index.js +7 -2
  44. package/lib/module/components/MessageRenderer/index.js.map +1 -1
  45. package/lib/module/contexts/SendbirdChat.js +1 -1
  46. package/lib/module/contexts/SendbirdChat.js.map +1 -1
  47. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +38 -7
  48. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  49. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  50. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  51. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +34 -3
  52. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  53. package/lib/module/fragments/createGroupChannelListFragment.js +1 -1
  54. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  55. package/lib/module/libs/SBUError.js +32 -0
  56. package/lib/module/libs/SBUError.js.map +1 -0
  57. package/lib/module/libs/SBUUtils.js +10 -0
  58. package/lib/module/libs/SBUUtils.js.map +1 -0
  59. package/lib/module/localization/StringSet.type.js +6 -0
  60. package/lib/module/localization/StringSet.type.js.map +1 -1
  61. package/lib/module/platform/createFileService.expo.js +5 -4
  62. package/lib/module/platform/createFileService.expo.js.map +1 -1
  63. package/lib/module/platform/createFileService.native.js +18 -8
  64. package/lib/module/platform/createFileService.native.js.map +1 -1
  65. package/lib/module/platform/types.js +1 -1
  66. package/lib/module/platform/types.js.map +1 -1
  67. package/lib/module/version.js +1 -1
  68. package/lib/module/version.js.map +1 -1
  69. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  70. package/lib/typescript/src/libs/SBUError.d.ts +14 -0
  71. package/lib/typescript/src/libs/SBUUtils.d.ts +3 -0
  72. package/lib/typescript/src/localization/StringSet.type.d.ts +3 -0
  73. package/lib/typescript/src/platform/types.d.ts +2 -1
  74. package/lib/typescript/src/version.d.ts +1 -1
  75. package/package.json +5 -5
  76. package/src/components/FileViewer.tsx +12 -4
  77. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +55 -12
  78. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +38 -30
  79. package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +1 -1
  80. package/src/components/MessageRenderer/index.tsx +5 -2
  81. package/src/contexts/SendbirdChat.tsx +1 -1
  82. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +28 -4
  83. package/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.tsx +1 -1
  84. package/src/domain/groupChannelSettings/module/moduleContext.tsx +26 -3
  85. package/src/fragments/createGroupChannelListFragment.tsx +1 -1
  86. package/src/libs/SBUError.ts +26 -0
  87. package/src/libs/SBUUtils.ts +9 -0
  88. package/src/localization/StringSet.type.ts +10 -0
  89. package/src/platform/createFileService.expo.ts +5 -4
  90. package/src/platform/createFileService.native.ts +17 -8
  91. package/src/platform/types.ts +3 -1
  92. package/src/version.ts +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useState","View","Icon","Image","createStyleSheet","useUIKitTheme","getAvailableUriFromFileMessage","usePlatformService","VideoFileMessage","message","colors","mediaService","fileUrl","style","styles","image","backgroundColor","onBackground04","state","setState","thumbnail","loading","imageNotFound","getVideoThumbnail","url","timeMills","then","result","path","prev","Error","catch","container","uri","PlayIcon","onBackground02","playIcon","onBackgroundReverse01","alignItems","justifyContent","width","maxWidth","height","borderRadius","position","padding"],"sources":["VideoFileMessage.tsx"],"sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { View } from 'react-native';\n\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { getAvailableUriFromFileMessage } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../../hooks/useContext';\nimport type { FileMessageProps } from './index';\n\nconst VideoFileMessage = ({ message }: FileMessageProps) => {\n const { colors } = useUIKitTheme();\n\n const { mediaService } = usePlatformService();\n const fileUrl = getAvailableUriFromFileMessage(message);\n const style = [styles.image, { backgroundColor: colors.onBackground04 }];\n\n const [state, setState] = useState({\n thumbnail: null as null | string,\n loading: true,\n imageNotFound: false,\n });\n\n useEffect(() => {\n mediaService\n ?.getVideoThumbnail({ url: fileUrl, timeMills: 1000 })\n .then((result) => {\n if (result?.path) {\n setState((prev) => ({ ...prev, loading: false, thumbnail: result.path }));\n } else {\n throw new Error('Cannot generate thumbnail');\n }\n })\n .catch(() => {\n setState((prev) => ({ ...prev, loading: false, imageNotFound: true }));\n });\n }, []);\n\n if (state.loading || state.imageNotFound) {\n return (\n <View style={[style, styles.container]}>\n <PlayIcon />\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <Image\n source={{ uri: state.thumbnail || fileUrl }}\n style={style}\n resizeMode={'cover'}\n resizeMethod={'resize'}\n onError={() => setState((prev) => ({ ...prev, imageNotFound: true }))}\n />\n <PlayIcon />\n </View>\n );\n};\n\nconst PlayIcon = () => {\n const { colors } = useUIKitTheme();\n\n return (\n <Icon\n icon={'play'}\n size={28}\n color={colors.onBackground02}\n containerStyle={[styles.playIcon, { backgroundColor: colors.onBackgroundReverse01 }]}\n />\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n width: 240,\n maxWidth: 240,\n height: 160,\n borderRadius: 16,\n },\n playIcon: {\n position: 'absolute',\n padding: 10,\n borderRadius: 50,\n },\n});\n\nexport default VideoFileMessage;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useEffect","useRef","useState","View","Icon","Image","createStyleSheet","useUIKitTheme","getAvailableUriFromFileMessage","usePlatformService","useRetry","videoFileUrl","retryCount","state","setState","thumbnail","loading","retryCountRef","retryTimeoutRef","mediaService","fetchThumbnail","getVideoThumbnail","url","timeMills","then","result","path","reloadReservation","current","setTimeout","clearTimeout","VideoFileMessage","message","colors","fileUrl","style","styles","image","backgroundColor","onBackground04","container","uri","PlayIcon","onBackground02","playIcon","onBackgroundReverse01","alignItems","justifyContent","width","maxWidth","height","borderRadius","position","padding"],"sources":["VideoFileMessage.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { View } from 'react-native';\n\nimport { Icon, Image, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { getAvailableUriFromFileMessage } from '@sendbird/uikit-utils';\n\nimport { usePlatformService } from '../../../hooks/useContext';\nimport type { FileMessageProps } from './index';\n\nconst useRetry = (videoFileUrl: string, retryCount = 5) => {\n const [state, setState] = useState({ thumbnail: null as null | string, loading: true });\n const retryCountRef = useRef(0);\n const retryTimeoutRef = useRef<NodeJS.Timeout>();\n\n const { mediaService } = usePlatformService();\n\n const fetchThumbnail = () => {\n return mediaService?.getVideoThumbnail({ url: videoFileUrl, timeMills: 1000 }).then((result) => {\n setState({ loading: false, thumbnail: result?.path ?? null });\n });\n };\n\n useEffect(() => {\n if (!state.thumbnail) {\n const reloadReservation = () => {\n if (retryCountRef.current < retryCount) {\n retryTimeoutRef.current = setTimeout(() => {\n retryCountRef.current++;\n reloadReservation();\n fetchThumbnail();\n }, retryCountRef.current * 5000);\n }\n };\n\n return reloadReservation();\n } else {\n return clearTimeout(retryTimeoutRef.current);\n }\n }, [state.thumbnail]);\n\n return state;\n};\n\nconst VideoFileMessage = ({ message }: FileMessageProps) => {\n const { colors } = useUIKitTheme();\n\n const fileUrl = getAvailableUriFromFileMessage(message);\n const style = [styles.image, { backgroundColor: colors.onBackground04 }];\n\n const { loading, thumbnail } = useRetry(fileUrl);\n\n if (loading) {\n return (\n <View style={[style, styles.container]}>\n <PlayIcon />\n </View>\n );\n }\n\n return (\n <View style={styles.container}>\n <Image source={{ uri: thumbnail || fileUrl }} style={style} resizeMode={'cover'} resizeMethod={'resize'} />\n <PlayIcon />\n </View>\n );\n};\n\nconst PlayIcon = () => {\n const { colors } = useUIKitTheme();\n\n return (\n <Icon\n icon={'play'}\n size={28}\n color={colors.onBackground02}\n containerStyle={[styles.playIcon, { backgroundColor: colors.onBackgroundReverse01 }]}\n />\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n image: {\n width: 240,\n maxWidth: 240,\n height: 160,\n borderRadius: 16,\n },\n playIcon: {\n position: 'absolute',\n padding: 10,\n borderRadius: 50,\n },\n});\n\nexport default VideoFileMessage;\n"],"mappings":"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"}
@@ -21,7 +21,8 @@ const MessageIncomingSenderName = _ref => {
21
21
  style: styles.sender
22
22
  }, (message.isFileMessage() || message.isUserMessage()) && /*#__PURE__*/React.createElement(Text, {
23
23
  caption1: true,
24
- color: colors.ui.message.incoming.enabled.textSenderName
24
+ color: colors.ui.message.incoming.enabled.textSenderName,
25
+ numberOfLines: 1
25
26
  }, ((_message$sender = message.sender) === null || _message$sender === void 0 ? void 0 : _message$sender.nickname) || STRINGS.LABELS.USER_NO_NAME));
26
27
  };
27
28
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Text","createStyleSheet","useUIKitTheme","useLocalization","MessageIncomingSenderName","message","grouping","colors","STRINGS","styles","sender","isFileMessage","isUserMessage","ui","incoming","enabled","textSenderName","nickname","LABELS","USER_NO_NAME","marginLeft","marginBottom"],"sources":["MessageIncomingSenderName.tsx"],"sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\ntype Props = {\n message: SendbirdMessage;\n grouping: boolean;\n};\nconst MessageIncomingSenderName = ({ message, grouping }: Props) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n if (grouping) return null;\n\n return (\n <View style={styles.sender}>\n {(message.isFileMessage() || message.isUserMessage()) && (\n <Text caption1 color={colors.ui.message.incoming.enabled.textSenderName}>\n {message.sender?.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n )}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n sender: {\n marginLeft: 12,\n marginBottom: 4,\n },\n});\n\nexport default MessageIncomingSenderName;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAAqB,cAArB;AAEA,SAASC,IAAT,EAAeC,gBAAf,EAAiCC,aAAjC,QAAsD,yCAAtD;AAGA,SAASC,eAAT,QAAgC,wBAAhC;;AAMA,MAAMC,yBAAyB,GAAG,QAAkC;EAAA;;EAAA,IAAjC;IAAEC,OAAF;IAAWC;EAAX,CAAiC;EAClE,MAAM;IAAEC;EAAF,IAAaL,aAAa,EAAhC;EACA,MAAM;IAAEM;EAAF,IAAcL,eAAe,EAAnC;EACA,IAAIG,QAAJ,EAAc,OAAO,IAAP;EAEd,oBACE,oBAAC,IAAD;IAAM,KAAK,EAAEG,MAAM,CAACC;EAApB,GACG,CAACL,OAAO,CAACM,aAAR,MAA2BN,OAAO,CAACO,aAAR,EAA5B,kBACC,oBAAC,IAAD;IAAM,QAAQ,MAAd;IAAe,KAAK,EAAEL,MAAM,CAACM,EAAP,CAAUR,OAAV,CAAkBS,QAAlB,CAA2BC,OAA3B,CAAmCC;EAAzD,GACG,oBAAAX,OAAO,CAACK,MAAR,oEAAgBO,QAAhB,KAA4BT,OAAO,CAACU,MAAR,CAAeC,YAD9C,CAFJ,CADF;AASD,CAdD;;AAgBA,MAAMV,MAAM,GAAGR,gBAAgB,CAAC;EAC9BS,MAAM,EAAE;IACNU,UAAU,EAAE,EADN;IAENC,YAAY,EAAE;EAFR;AADsB,CAAD,CAA/B;AAOA,eAAejB,yBAAf"}
1
+ {"version":3,"names":["React","View","Text","createStyleSheet","useUIKitTheme","useLocalization","MessageIncomingSenderName","message","grouping","colors","STRINGS","styles","sender","isFileMessage","isUserMessage","ui","incoming","enabled","textSenderName","nickname","LABELS","USER_NO_NAME","marginLeft","marginBottom"],"sources":["MessageIncomingSenderName.tsx"],"sourcesContent":["import React from 'react';\nimport { View } from 'react-native';\n\nimport { Text, createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../hooks/useContext';\n\ntype Props = {\n message: SendbirdMessage;\n grouping: boolean;\n};\nconst MessageIncomingSenderName = ({ message, grouping }: Props) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n if (grouping) return null;\n\n return (\n <View style={styles.sender}>\n {(message.isFileMessage() || message.isUserMessage()) && (\n <Text caption1 color={colors.ui.message.incoming.enabled.textSenderName} numberOfLines={1}>\n {message.sender?.nickname || STRINGS.LABELS.USER_NO_NAME}\n </Text>\n )}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n sender: {\n marginLeft: 12,\n marginBottom: 4,\n },\n});\n\nexport default MessageIncomingSenderName;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,IAAT,QAAqB,cAArB;AAEA,SAASC,IAAT,EAAeC,gBAAf,EAAiCC,aAAjC,QAAsD,yCAAtD;AAGA,SAASC,eAAT,QAAgC,wBAAhC;;AAMA,MAAMC,yBAAyB,GAAG,QAAkC;EAAA;;EAAA,IAAjC;IAAEC,OAAF;IAAWC;EAAX,CAAiC;EAClE,MAAM;IAAEC;EAAF,IAAaL,aAAa,EAAhC;EACA,MAAM;IAAEM;EAAF,IAAcL,eAAe,EAAnC;EACA,IAAIG,QAAJ,EAAc,OAAO,IAAP;EAEd,oBACE,oBAAC,IAAD;IAAM,KAAK,EAAEG,MAAM,CAACC;EAApB,GACG,CAACL,OAAO,CAACM,aAAR,MAA2BN,OAAO,CAACO,aAAR,EAA5B,kBACC,oBAAC,IAAD;IAAM,QAAQ,MAAd;IAAe,KAAK,EAAEL,MAAM,CAACM,EAAP,CAAUR,OAAV,CAAkBS,QAAlB,CAA2BC,OAA3B,CAAmCC,cAAzD;IAAyE,aAAa,EAAE;EAAxF,GACG,oBAAAX,OAAO,CAACK,MAAR,oEAAgBO,QAAhB,KAA4BT,OAAO,CAACU,MAAR,CAAeC,YAD9C,CAFJ,CADF;AASD,CAdD;;AAgBA,MAAMV,MAAM,GAAGR,gBAAgB,CAAC;EAC9BS,MAAM,EAAE;IACNU,UAAU,EAAE,EADN;IAENC,YAAY,EAAE;EAFR;AADsB,CAAD,CAA/B;AAOA,eAAejB,yBAAf"}
@@ -108,11 +108,13 @@ const MessageRenderer = _ref => {
108
108
  })), isIncoming && /*#__PURE__*/React.createElement(MessageIncomingAvatar, {
109
109
  message: message,
110
110
  grouping: groupWithNext
111
- }), /*#__PURE__*/React.createElement(View, null, isIncoming && /*#__PURE__*/React.createElement(MessageIncomingSenderName, {
111
+ }), /*#__PURE__*/React.createElement(View, {
112
+ style: styles.bubbleContainer
113
+ }, isIncoming && /*#__PURE__*/React.createElement(MessageIncomingSenderName, {
112
114
  message: message,
113
115
  grouping: groupWithPrev
114
116
  }), /*#__PURE__*/React.createElement(View, {
115
- style: styles.bubbleContainer
117
+ style: styles.bubbleWrapper
116
118
  }, messageComponent, isIncoming && /*#__PURE__*/React.createElement(MessageTime, {
117
119
  message: message,
118
120
  grouping: groupWithNext,
@@ -150,6 +152,9 @@ const styles = createStyleSheet({
150
152
  maxWidth: 240
151
153
  },
152
154
  bubbleContainer: {
155
+ flexShrink: 1
156
+ },
157
+ bubbleWrapper: {
153
158
  flexDirection: 'row',
154
159
  alignItems: 'flex-end'
155
160
  },
@@ -1 +1 @@
1
- {"version":3,"names":["React","Pressable","View","createStyleSheet","calcMessageGrouping","conditionChaining","isMyMessage","useIIFE","DEFAULT_LONG_PRESS_DELAY","AdminMessage","FileMessage","MessageContainer","MessageDateSeparator","MessageIncomingAvatar","MessageIncomingSenderName","MessageOutgoingStatus","MessageTime","UnknownMessage","UserMessage","MessageRenderer","currentUserId","channel","message","onPress","onLongPress","rest","variant","isOutgoing","isIncoming","variantContainerStyle","incoming","styles","chatIncoming","outgoing","chatOutgoing","groupWithPrev","groupWithNext","Boolean","enableMessageGrouping","prevMessage","nextMessage","messageComponent","pressableProps","style","msgContainer","disabled","delayLongPress","messageProps","isUserMessage","pressed","isFileMessage","isAdminMessage","chatGroup","chatNonGroup","chatLastMessage","outgoingContainer","timeOutgoing","bubbleContainer","timeIncoming","flexDirection","justifyContent","alignItems","marginLeft","marginRight","marginBottom","maxWidth","memo"],"sources":["index.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { calcMessageGrouping, conditionChaining, isMyMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport { DEFAULT_LONG_PRESS_DELAY } from '../../constants';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport AdminMessage from './AdminMessage';\nimport FileMessage from './FileMessage';\nimport MessageContainer from './MessageContainer';\nimport MessageDateSeparator from './MessageDateSeparator';\nimport MessageIncomingAvatar from './MessageIncomingAvatar';\nimport MessageIncomingSenderName from './MessageIncomingSenderName';\nimport MessageOutgoingStatus from './MessageOutgoingStatus';\nimport MessageTime from './MessageTime';\nimport UnknownMessage from './UnknownMessage';\nimport UserMessage from './UserMessage';\n\ntype MessageStyleVariant = 'outgoing' | 'incoming';\nexport interface MessageRendererInterface<T = SendbirdMessage> {\n message: T;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n variant: MessageStyleVariant;\n groupWithPrev: boolean;\n groupWithNext: boolean;\n pressed: boolean;\n}\n\nconst MessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n currentUserId,\n channel,\n message,\n onPress,\n onLongPress,\n ...rest\n}) => {\n const variant: MessageStyleVariant = isMyMessage(message, currentUserId) ? 'outgoing' : 'incoming';\n const isOutgoing = variant === 'outgoing';\n const isIncoming = variant === 'incoming';\n const variantContainerStyle = { incoming: styles.chatIncoming, outgoing: styles.chatOutgoing }[variant];\n\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(rest.enableMessageGrouping),\n message,\n rest.prevMessage,\n rest.nextMessage,\n );\n\n const messageComponent = useIIFE(() => {\n const pressableProps = {\n style: styles.msgContainer,\n disabled: !onPress && !onLongPress,\n onPress,\n onLongPress,\n delayLongPress: DEFAULT_LONG_PRESS_DELAY,\n };\n const messageProps = { ...rest, variant, groupWithNext, groupWithPrev };\n\n if (message.isUserMessage()) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <UserMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n }\n\n if (message.isFileMessage()) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <FileMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n }\n\n if (message.isAdminMessage()) {\n return <AdminMessage message={message} pressed={false} {...messageProps} />;\n }\n\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <UnknownMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n });\n\n return (\n <MessageContainer>\n <MessageDateSeparator message={message} prevMessage={rest.prevMessage} />\n {message.isAdminMessage() && messageComponent}\n {!message.isAdminMessage() && (\n <View\n style={[\n variantContainerStyle,\n conditionChaining(\n [groupWithNext, Boolean(rest.nextMessage)],\n [styles.chatGroup, styles.chatNonGroup, styles.chatLastMessage],\n ),\n ]}\n >\n {isOutgoing && (\n <View style={styles.outgoingContainer}>\n <MessageOutgoingStatus channel={channel} message={message} />\n <MessageTime message={message} grouping={groupWithNext} style={styles.timeOutgoing} />\n </View>\n )}\n {isIncoming && <MessageIncomingAvatar message={message} grouping={groupWithNext} />}\n <View>\n {isIncoming && <MessageIncomingSenderName message={message} grouping={groupWithPrev} />}\n <View style={styles.bubbleContainer}>\n {messageComponent}\n {isIncoming && <MessageTime message={message} grouping={groupWithNext} style={styles.timeIncoming} />}\n </View>\n </View>\n </View>\n )}\n </MessageContainer>\n );\n};\n\nconst styles = createStyleSheet({\n chatIncoming: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'flex-end',\n },\n chatOutgoing: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n timeIncoming: {\n marginLeft: 4,\n },\n timeOutgoing: {\n marginRight: 4,\n },\n chatGroup: {\n marginBottom: 2,\n },\n chatNonGroup: {\n marginBottom: 16,\n },\n chatLastMessage: {\n marginBottom: 16,\n },\n msgContainer: {\n maxWidth: 240,\n },\n bubbleContainer: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n },\n outgoingContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default React.memo(MessageRenderer);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","Pressable","View","createStyleSheet","calcMessageGrouping","conditionChaining","isMyMessage","useIIFE","DEFAULT_LONG_PRESS_DELAY","AdminMessage","FileMessage","MessageContainer","MessageDateSeparator","MessageIncomingAvatar","MessageIncomingSenderName","MessageOutgoingStatus","MessageTime","UnknownMessage","UserMessage","MessageRenderer","currentUserId","channel","message","onPress","onLongPress","rest","variant","isOutgoing","isIncoming","variantContainerStyle","incoming","styles","chatIncoming","outgoing","chatOutgoing","groupWithPrev","groupWithNext","Boolean","enableMessageGrouping","prevMessage","nextMessage","messageComponent","pressableProps","style","msgContainer","disabled","delayLongPress","messageProps","isUserMessage","pressed","isFileMessage","isAdminMessage","chatGroup","chatNonGroup","chatLastMessage","outgoingContainer","timeOutgoing","bubbleContainer","bubbleWrapper","timeIncoming","flexDirection","justifyContent","alignItems","marginLeft","marginRight","marginBottom","maxWidth","flexShrink","memo"],"sources":["index.tsx"],"sourcesContent":["import React from 'react';\nimport { Pressable, View } from 'react-native';\n\nimport { createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdMessage } from '@sendbird/uikit-utils';\nimport { calcMessageGrouping, conditionChaining, isMyMessage, useIIFE } from '@sendbird/uikit-utils';\n\nimport { DEFAULT_LONG_PRESS_DELAY } from '../../constants';\nimport type { GroupChannelProps } from '../../domain/groupChannel/types';\nimport AdminMessage from './AdminMessage';\nimport FileMessage from './FileMessage';\nimport MessageContainer from './MessageContainer';\nimport MessageDateSeparator from './MessageDateSeparator';\nimport MessageIncomingAvatar from './MessageIncomingAvatar';\nimport MessageIncomingSenderName from './MessageIncomingSenderName';\nimport MessageOutgoingStatus from './MessageOutgoingStatus';\nimport MessageTime from './MessageTime';\nimport UnknownMessage from './UnknownMessage';\nimport UserMessage from './UserMessage';\n\ntype MessageStyleVariant = 'outgoing' | 'incoming';\nexport interface MessageRendererInterface<T = SendbirdMessage> {\n message: T;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n variant: MessageStyleVariant;\n groupWithPrev: boolean;\n groupWithNext: boolean;\n pressed: boolean;\n}\n\nconst MessageRenderer: GroupChannelProps['Fragment']['renderMessage'] = ({\n currentUserId,\n channel,\n message,\n onPress,\n onLongPress,\n ...rest\n}) => {\n const variant: MessageStyleVariant = isMyMessage(message, currentUserId) ? 'outgoing' : 'incoming';\n const isOutgoing = variant === 'outgoing';\n const isIncoming = variant === 'incoming';\n const variantContainerStyle = { incoming: styles.chatIncoming, outgoing: styles.chatOutgoing }[variant];\n\n const { groupWithPrev, groupWithNext } = calcMessageGrouping(\n Boolean(rest.enableMessageGrouping),\n message,\n rest.prevMessage,\n rest.nextMessage,\n );\n\n const messageComponent = useIIFE(() => {\n const pressableProps = {\n style: styles.msgContainer,\n disabled: !onPress && !onLongPress,\n onPress,\n onLongPress,\n delayLongPress: DEFAULT_LONG_PRESS_DELAY,\n };\n const messageProps = { ...rest, variant, groupWithNext, groupWithPrev };\n\n if (message.isUserMessage()) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <UserMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n }\n\n if (message.isFileMessage()) {\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <FileMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n }\n\n if (message.isAdminMessage()) {\n return <AdminMessage message={message} pressed={false} {...messageProps} />;\n }\n\n return (\n <Pressable {...pressableProps}>\n {({ pressed }) => <UnknownMessage message={message} pressed={pressed} {...messageProps} />}\n </Pressable>\n );\n });\n\n return (\n <MessageContainer>\n <MessageDateSeparator message={message} prevMessage={rest.prevMessage} />\n {message.isAdminMessage() && messageComponent}\n {!message.isAdminMessage() && (\n <View\n style={[\n variantContainerStyle,\n conditionChaining(\n [groupWithNext, Boolean(rest.nextMessage)],\n [styles.chatGroup, styles.chatNonGroup, styles.chatLastMessage],\n ),\n ]}\n >\n {isOutgoing && (\n <View style={styles.outgoingContainer}>\n <MessageOutgoingStatus channel={channel} message={message} />\n <MessageTime message={message} grouping={groupWithNext} style={styles.timeOutgoing} />\n </View>\n )}\n {isIncoming && <MessageIncomingAvatar message={message} grouping={groupWithNext} />}\n <View style={styles.bubbleContainer}>\n {isIncoming && <MessageIncomingSenderName message={message} grouping={groupWithPrev} />}\n <View style={styles.bubbleWrapper}>\n {messageComponent}\n {isIncoming && <MessageTime message={message} grouping={groupWithNext} style={styles.timeIncoming} />}\n </View>\n </View>\n </View>\n )}\n </MessageContainer>\n );\n};\n\nconst styles = createStyleSheet({\n chatIncoming: {\n flexDirection: 'row',\n justifyContent: 'flex-start',\n alignItems: 'flex-end',\n },\n chatOutgoing: {\n flexDirection: 'row',\n justifyContent: 'flex-end',\n alignItems: 'flex-end',\n },\n timeIncoming: {\n marginLeft: 4,\n },\n timeOutgoing: {\n marginRight: 4,\n },\n chatGroup: {\n marginBottom: 2,\n },\n chatNonGroup: {\n marginBottom: 16,\n },\n chatLastMessage: {\n marginBottom: 16,\n },\n msgContainer: {\n maxWidth: 240,\n },\n bubbleContainer: {\n flexShrink: 1,\n },\n bubbleWrapper: {\n flexDirection: 'row',\n alignItems: 'flex-end',\n },\n outgoingContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n },\n});\n\nexport default React.memo(MessageRenderer);\n"],"mappings":";;AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,SAAT,EAAoBC,IAApB,QAAgC,cAAhC;AAEA,SAASC,gBAAT,QAAiC,yCAAjC;AAEA,SAASC,mBAAT,EAA8BC,iBAA9B,EAAiDC,WAAjD,EAA8DC,OAA9D,QAA6E,uBAA7E;AAEA,SAASC,wBAAT,QAAyC,iBAAzC;AAEA,OAAOC,YAAP,MAAyB,gBAAzB;AACA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,gBAAP,MAA6B,oBAA7B;AACA,OAAOC,oBAAP,MAAiC,wBAAjC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,yBAAP,MAAsC,6BAAtC;AACA,OAAOC,qBAAP,MAAkC,yBAAlC;AACA,OAAOC,WAAP,MAAwB,eAAxB;AACA,OAAOC,cAAP,MAA2B,kBAA3B;AACA,OAAOC,WAAP,MAAwB,eAAxB;;AAaA,MAAMC,eAA+D,GAAG,QAOlE;EAAA,IAPmE;IACvEC,aADuE;IAEvEC,OAFuE;IAGvEC,OAHuE;IAIvEC,OAJuE;IAKvEC,WALuE;IAMvE,GAAGC;EANoE,CAOnE;EACJ,MAAMC,OAA4B,GAAGpB,WAAW,CAACgB,OAAD,EAAUF,aAAV,CAAX,GAAsC,UAAtC,GAAmD,UAAxF;EACA,MAAMO,UAAU,GAAGD,OAAO,KAAK,UAA/B;EACA,MAAME,UAAU,GAAGF,OAAO,KAAK,UAA/B;EACA,MAAMG,qBAAqB,GAAG;IAAEC,QAAQ,EAAEC,MAAM,CAACC,YAAnB;IAAiCC,QAAQ,EAAEF,MAAM,CAACG;EAAlD,EAAiER,OAAjE,CAA9B;EAEA,MAAM;IAAES,aAAF;IAAiBC;EAAjB,IAAmChC,mBAAmB,CAC1DiC,OAAO,CAACZ,IAAI,CAACa,qBAAN,CADmD,EAE1DhB,OAF0D,EAG1DG,IAAI,CAACc,WAHqD,EAI1Dd,IAAI,CAACe,WAJqD,CAA5D;EAOA,MAAMC,gBAAgB,GAAGlC,OAAO,CAAC,MAAM;IACrC,MAAMmC,cAAc,GAAG;MACrBC,KAAK,EAAEZ,MAAM,CAACa,YADO;MAErBC,QAAQ,EAAE,CAACtB,OAAD,IAAY,CAACC,WAFF;MAGrBD,OAHqB;MAIrBC,WAJqB;MAKrBsB,cAAc,EAAEtC;IALK,CAAvB;IAOA,MAAMuC,YAAY,GAAG,EAAE,GAAGtB,IAAL;MAAWC,OAAX;MAAoBU,aAApB;MAAmCD;IAAnC,CAArB;;IAEA,IAAIb,OAAO,CAAC0B,aAAR,EAAJ,EAA6B;MAC3B,oBACE,oBAAC,SAAD,EAAeN,cAAf,EACG;QAAA,IAAC;UAAEO;QAAF,CAAD;QAAA,oBAAiB,oBAAC,WAAD;UAAa,OAAO,EAAE3B,OAAtB;UAA+B,OAAO,EAAE2B;QAAxC,GAAqDF,YAArD,EAAjB;MAAA,CADH,CADF;IAKD;;IAED,IAAIzB,OAAO,CAAC4B,aAAR,EAAJ,EAA6B;MAC3B,oBACE,oBAAC,SAAD,EAAeR,cAAf,EACG;QAAA,IAAC;UAAEO;QAAF,CAAD;QAAA,oBAAiB,oBAAC,WAAD;UAAa,OAAO,EAAE3B,OAAtB;UAA+B,OAAO,EAAE2B;QAAxC,GAAqDF,YAArD,EAAjB;MAAA,CADH,CADF;IAKD;;IAED,IAAIzB,OAAO,CAAC6B,cAAR,EAAJ,EAA8B;MAC5B,oBAAO,oBAAC,YAAD;QAAc,OAAO,EAAE7B,OAAvB;QAAgC,OAAO,EAAE;MAAzC,GAAoDyB,YAApD,EAAP;IACD;;IAED,oBACE,oBAAC,SAAD,EAAeL,cAAf,EACG;MAAA,IAAC;QAAEO;MAAF,CAAD;MAAA,oBAAiB,oBAAC,cAAD;QAAgB,OAAO,EAAE3B,OAAzB;QAAkC,OAAO,EAAE2B;MAA3C,GAAwDF,YAAxD,EAAjB;IAAA,CADH,CADF;EAKD,CAnC+B,CAAhC;EAqCA,oBACE,oBAAC,gBAAD,qBACE,oBAAC,oBAAD;IAAsB,OAAO,EAAEzB,OAA/B;IAAwC,WAAW,EAAEG,IAAI,CAACc;EAA1D,EADF,EAEGjB,OAAO,CAAC6B,cAAR,MAA4BV,gBAF/B,EAGG,CAACnB,OAAO,CAAC6B,cAAR,EAAD,iBACC,oBAAC,IAAD;IACE,KAAK,EAAE,CACLtB,qBADK,EAELxB,iBAAiB,CACf,CAAC+B,aAAD,EAAgBC,OAAO,CAACZ,IAAI,CAACe,WAAN,CAAvB,CADe,EAEf,CAACT,MAAM,CAACqB,SAAR,EAAmBrB,MAAM,CAACsB,YAA1B,EAAwCtB,MAAM,CAACuB,eAA/C,CAFe,CAFZ;EADT,GASG3B,UAAU,iBACT,oBAAC,IAAD;IAAM,KAAK,EAAEI,MAAM,CAACwB;EAApB,gBACE,oBAAC,qBAAD;IAAuB,OAAO,EAAElC,OAAhC;IAAyC,OAAO,EAAEC;EAAlD,EADF,eAEE,oBAAC,WAAD;IAAa,OAAO,EAAEA,OAAtB;IAA+B,QAAQ,EAAEc,aAAzC;IAAwD,KAAK,EAAEL,MAAM,CAACyB;EAAtE,EAFF,CAVJ,EAeG5B,UAAU,iBAAI,oBAAC,qBAAD;IAAuB,OAAO,EAAEN,OAAhC;IAAyC,QAAQ,EAAEc;EAAnD,EAfjB,eAgBE,oBAAC,IAAD;IAAM,KAAK,EAAEL,MAAM,CAAC0B;EAApB,GACG7B,UAAU,iBAAI,oBAAC,yBAAD;IAA2B,OAAO,EAAEN,OAApC;IAA6C,QAAQ,EAAEa;EAAvD,EADjB,eAEE,oBAAC,IAAD;IAAM,KAAK,EAAEJ,MAAM,CAAC2B;EAApB,GACGjB,gBADH,EAEGb,UAAU,iBAAI,oBAAC,WAAD;IAAa,OAAO,EAAEN,OAAtB;IAA+B,QAAQ,EAAEc,aAAzC;IAAwD,KAAK,EAAEL,MAAM,CAAC4B;EAAtE,EAFjB,CAFF,CAhBF,CAJJ,CADF;AAgCD,CAzFD;;AA2FA,MAAM5B,MAAM,GAAG5B,gBAAgB,CAAC;EAC9B6B,YAAY,EAAE;IACZ4B,aAAa,EAAE,KADH;IAEZC,cAAc,EAAE,YAFJ;IAGZC,UAAU,EAAE;EAHA,CADgB;EAM9B5B,YAAY,EAAE;IACZ0B,aAAa,EAAE,KADH;IAEZC,cAAc,EAAE,UAFJ;IAGZC,UAAU,EAAE;EAHA,CANgB;EAW9BH,YAAY,EAAE;IACZI,UAAU,EAAE;EADA,CAXgB;EAc9BP,YAAY,EAAE;IACZQ,WAAW,EAAE;EADD,CAdgB;EAiB9BZ,SAAS,EAAE;IACTa,YAAY,EAAE;EADL,CAjBmB;EAoB9BZ,YAAY,EAAE;IACZY,YAAY,EAAE;EADF,CApBgB;EAuB9BX,eAAe,EAAE;IACfW,YAAY,EAAE;EADC,CAvBa;EA0B9BrB,YAAY,EAAE;IACZsB,QAAQ,EAAE;EADE,CA1BgB;EA6B9BT,eAAe,EAAE;IACfU,UAAU,EAAE;EADG,CA7Ba;EAgC9BT,aAAa,EAAE;IACbE,aAAa,EAAE,KADF;IAEbE,UAAU,EAAE;EAFC,CAhCe;EAoC9BP,iBAAiB,EAAE;IACjBK,aAAa,EAAE,KADE;IAEjBE,UAAU,EAAE,QAFK;IAGjBD,cAAc,EAAE;EAHC;AApCW,CAAD,CAA/B;AA2CA,4BAAe7D,KAAK,CAACoE,IAAN,CAAWjD,eAAX,CAAf"}
@@ -45,7 +45,7 @@ export const SendbirdChatProvider = _ref => {
45
45
  useEffect(() => {
46
46
  const listener = status => {
47
47
  // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';
48
- if (status === 'active') sdkInstance.getConnectionState() === 'CLOSED' && sdkInstance.setForegroundState();else sdkInstance.getConnectionState() === 'OPEN' && sdkInstance.setBackgroundState();
48
+ if (status === 'active') sdkInstance.getConnectionState() === 'CLOSED' && sdkInstance.setForegroundState();else if (status === 'background') sdkInstance.getConnectionState() === 'OPEN' && sdkInstance.setBackgroundState();
49
49
  };
50
50
 
51
51
  const subscriber = AppState.addEventListener('change', listener);
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useState","AppState","useAppFeatures","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","children","sdkInstance","enableAutoPushTokenRegistration","enableChannelListMessageReceiptStatus","enableChannelListTypingIndicator","currentUser","_setCurrentUser","forceUpdate","appFeatures","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","profileUrl","updateCurrentUserInfoWithProfileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","unreadMessageCount","markAsDelivered","url","listener","status","getConnectionState","setForegroundState","setBackgroundState","subscriber","addEventListener","remove","value","sdk","features","autoPushTokenRegistrationEnabled","channelListTypingIndicatorEnabled","channelListMessageReceiptStatusEnabled"],"sources":["SendbirdChat.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { AppState, AppStateStatus } from 'react-native';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdUser } from '@sendbird/uikit-utils';\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { FileType } from '../platform/types';\n\ntype Props = React.PropsWithChildren<{\n sdkInstance: SendbirdChatSDK;\n\n enableAutoPushTokenRegistration: boolean;\n enableChannelListTypingIndicator: boolean;\n enableChannelListMessageReceiptStatus: boolean;\n}>;\n\ntype Context = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n features: {\n // UIKit features\n autoPushTokenRegistrationEnabled: boolean;\n channelListTypingIndicatorEnabled: boolean;\n channelListMessageReceiptStatusEnabled: boolean;\n\n // Sendbird application features\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n};\n\nexport const SendbirdChatContext = React.createContext<Context | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n enableAutoPushTokenRegistration,\n enableChannelListMessageReceiptStatus,\n enableChannelListTypingIndicator,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n\n const setCurrentUser: Context['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: Context['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n if (typeof profile === 'undefined') {\n user = await sdkInstance.updateCurrentUserInfo(nickname, sdkInstance.currentUser.profileUrl);\n } else if (typeof profile === 'string') {\n user = await sdkInstance.updateCurrentUserInfo(nickname, profile);\n } else if (typeof profile === 'object') {\n user = await sdkInstance.updateCurrentUserInfoWithProfileImage(nickname, profile);\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: Context['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled && channel.unreadMessageCount > 0) {\n sdkInstance.markAsDelivered(channel.url);\n }\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useEffect(() => {\n const listener = (status: AppStateStatus) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.getConnectionState() === 'CLOSED' && sdkInstance.setForegroundState();\n else sdkInstance.getConnectionState() === 'OPEN' && sdkInstance.setBackgroundState();\n };\n\n const subscriber = AppState.addEventListener('change', listener);\n return () => subscriber.remove();\n }, [sdkInstance]);\n\n const value: Context = {\n sdk: sdkInstance,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n features: {\n ...appFeatures,\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,\n channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useEffect","useState","AppState","useAppFeatures","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","children","sdkInstance","enableAutoPushTokenRegistration","enableChannelListMessageReceiptStatus","enableChannelListTypingIndicator","currentUser","_setCurrentUser","forceUpdate","appFeatures","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","profileUrl","updateCurrentUserInfoWithProfileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","unreadMessageCount","markAsDelivered","url","listener","status","getConnectionState","setForegroundState","setBackgroundState","subscriber","addEventListener","remove","value","sdk","features","autoPushTokenRegistrationEnabled","channelListTypingIndicatorEnabled","channelListMessageReceiptStatusEnabled"],"sources":["SendbirdChat.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useState } from 'react';\nimport { AppState, AppStateStatus } from 'react-native';\n\nimport { useAppFeatures } from '@sendbird/uikit-chat-hooks';\nimport type { SendbirdChatSDK, SendbirdGroupChannel, SendbirdUser } from '@sendbird/uikit-utils';\nimport { useForceUpdate } from '@sendbird/uikit-utils';\n\nimport type { FileType } from '../platform/types';\n\ntype Props = React.PropsWithChildren<{\n sdkInstance: SendbirdChatSDK;\n\n enableAutoPushTokenRegistration: boolean;\n enableChannelListTypingIndicator: boolean;\n enableChannelListMessageReceiptStatus: boolean;\n}>;\n\ntype Context = {\n sdk: SendbirdChatSDK;\n currentUser?: SendbirdUser;\n setCurrentUser: React.Dispatch<React.SetStateAction<SendbirdUser | undefined>>;\n\n // helper functions\n updateCurrentUserInfo: (nickname: string, profile?: string | FileType) => Promise<SendbirdUser>;\n markAsDeliveredWithChannel: (channel: SendbirdGroupChannel) => void;\n\n features: {\n // UIKit features\n autoPushTokenRegistrationEnabled: boolean;\n channelListTypingIndicatorEnabled: boolean;\n channelListMessageReceiptStatusEnabled: boolean;\n\n // Sendbird application features\n deliveryReceiptEnabled: boolean;\n broadcastChannelEnabled: boolean;\n superGroupChannelEnabled: boolean;\n reactionEnabled: boolean;\n };\n};\n\nexport const SendbirdChatContext = React.createContext<Context | null>(null);\nexport const SendbirdChatProvider = ({\n children,\n sdkInstance,\n enableAutoPushTokenRegistration,\n enableChannelListMessageReceiptStatus,\n enableChannelListTypingIndicator,\n}: Props) => {\n const [currentUser, _setCurrentUser] = useState<SendbirdUser>();\n const forceUpdate = useForceUpdate();\n const appFeatures = useAppFeatures(sdkInstance);\n\n const setCurrentUser: Context['setCurrentUser'] = useCallback((user) => {\n // NOTE: Sendbird SDK handle User object is always same object, so force update after setCurrentUser\n _setCurrentUser(user);\n forceUpdate();\n }, []);\n\n const updateCurrentUserInfo: Context['updateCurrentUserInfo'] = useCallback(\n async (nickname, profile) => {\n let user = currentUser;\n\n if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');\n\n if (typeof profile === 'undefined') {\n user = await sdkInstance.updateCurrentUserInfo(nickname, sdkInstance.currentUser.profileUrl);\n } else if (typeof profile === 'string') {\n user = await sdkInstance.updateCurrentUserInfo(nickname, profile);\n } else if (typeof profile === 'object') {\n user = await sdkInstance.updateCurrentUserInfoWithProfileImage(nickname, profile);\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n setCurrentUser(user);\n return user;\n },\n [sdkInstance, currentUser, setCurrentUser],\n );\n\n const markAsDeliveredWithChannel: Context['markAsDeliveredWithChannel'] = useCallback(\n (channel: SendbirdGroupChannel) => {\n if (appFeatures.deliveryReceiptEnabled && channel.unreadMessageCount > 0) {\n sdkInstance.markAsDelivered(channel.url);\n }\n },\n [sdkInstance, appFeatures.deliveryReceiptEnabled],\n );\n\n useEffect(() => {\n const listener = (status: AppStateStatus) => {\n // 'active' | 'background' | 'inactive' | 'unknown' | 'extension';\n if (status === 'active') sdkInstance.getConnectionState() === 'CLOSED' && sdkInstance.setForegroundState();\n else if (status === 'background') sdkInstance.getConnectionState() === 'OPEN' && sdkInstance.setBackgroundState();\n };\n\n const subscriber = AppState.addEventListener('change', listener);\n return () => subscriber.remove();\n }, [sdkInstance]);\n\n const value: Context = {\n sdk: sdkInstance,\n currentUser,\n setCurrentUser,\n\n updateCurrentUserInfo,\n markAsDeliveredWithChannel,\n\n features: {\n ...appFeatures,\n autoPushTokenRegistrationEnabled: enableAutoPushTokenRegistration,\n channelListTypingIndicatorEnabled: enableChannelListTypingIndicator,\n channelListMessageReceiptStatusEnabled: enableChannelListMessageReceiptStatus,\n },\n };\n\n return <SendbirdChatContext.Provider value={value}>{children}</SendbirdChatContext.Provider>;\n};\n"],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import React from 'react';
2
2
  import { Platform, TouchableOpacity, View } from 'react-native';
3
- import { Icon, TextInput, createStyleSheet, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
3
+ import { Icon, TextInput, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
4
4
  import { conditionChaining } from '@sendbird/uikit-utils';
5
5
  import { useLocalization, usePlatformService } from '../../../../hooks/useContext';
6
+ import SBUError from '../../../../libs/SBUError';
7
+ import SBUUtils from '../../../../libs/SBUUtils';
6
8
 
7
9
  const SendInput = _ref => {
8
10
  let {
@@ -15,15 +17,18 @@ const SendInput = _ref => {
15
17
  const {
16
18
  STRINGS
17
19
  } = useLocalization();
18
- const {
19
- openSheet
20
- } = useBottomSheet();
21
20
  const {
22
21
  fileService
23
22
  } = usePlatformService();
24
23
  const {
25
24
  colors
26
25
  } = useUIKitTheme();
26
+ const {
27
+ openSheet
28
+ } = useBottomSheet();
29
+ const {
30
+ alert
31
+ } = useAlert();
27
32
  const toast = useToast();
28
33
 
29
34
  const onPressSend = () => {
@@ -39,7 +44,20 @@ const SendInput = _ref => {
39
44
  onPress: async () => {
40
45
  const photo = await fileService.openCamera({
41
46
  mediaType: 'all',
42
- onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error')
47
+ onOpenFailure: error => {
48
+ if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
49
+ alert({
50
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
51
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),
52
+ buttons: [{
53
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
54
+ onPress: () => SBUUtils.openSettings()
55
+ }]
56
+ });
57
+ } else {
58
+ toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
59
+ }
60
+ }
43
61
  });
44
62
 
45
63
  if (photo) {
@@ -53,7 +71,20 @@ const SendInput = _ref => {
53
71
  const photo = await fileService.openMediaLibrary({
54
72
  selectionLimit: 1,
55
73
  mediaType: 'all',
56
- onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error')
74
+ onOpenFailure: error => {
75
+ if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
76
+ alert({
77
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
78
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),
79
+ buttons: [{
80
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
81
+ onPress: () => SBUUtils.openSettings()
82
+ }]
83
+ });
84
+ } else {
85
+ toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');
86
+ }
87
+ }
57
88
  });
58
89
 
59
90
  if (photo && photo[0]) {
@@ -65,7 +96,7 @@ const SendInput = _ref => {
65
96
  icon: 'document',
66
97
  onPress: async () => {
67
98
  const file = await fileService.openDocument({
68
- onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
99
+ onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
69
100
  });
70
101
 
71
102
  if (file) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","Platform","TouchableOpacity","View","Icon","TextInput","createStyleSheet","useBottomSheet","useToast","useUIKitTheme","conditionChaining","useLocalization","usePlatformService","SendInput","onSendUserMessage","onSendFileMessage","text","setText","disabled","STRINGS","openSheet","fileService","colors","toast","onPressSend","catch","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","GROUP_CHANNEL","DIALOG_ATTACHMENT_CAMERA","icon","onPress","photo","openCamera","mediaType","onOpenFailureWithToastMessage","OPEN_CAMERA_ERROR","DIALOG_ATTACHMENT_PHOTO_LIBRARY","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","DIALOG_ATTACHMENT_FILES","file","openDocument","OPEN_FILES_ERROR","styles","sendInputContainer","ui","input","default","highlight","active","iconAttach","INPUT_PLACEHOLDER_DISABLED","INPUT_PLACEHOLDER_ACTIVE","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","maxHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React from 'react';\nimport { Platform, TouchableOpacity, View } from 'react-native';\n\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService } from '../../../../hooks/useContext';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n setText: (val: string) => void;\n disabled: boolean;\n};\nconst SendInput = ({ onSendUserMessage, onSendFileMessage, text, setText, disabled }: SendInputProps) => {\n const { STRINGS } = useLocalization();\n const { openSheet } = useBottomSheet();\n const { fileService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const toast = useToast();\n\n const onPressSend = () => {\n onSendUserMessage(text).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n setText('');\n };\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const photo = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error'),\n });\n\n if (photo) {\n onSendFileMessage(photo).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const photo = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error'),\n });\n\n if (photo && photo[0]) {\n onSendFileMessage(photo[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const file = await fileService.openDocument({\n onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (file) {\n onSendFileMessage(file).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n ],\n });\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n multiline\n editable={!disabled}\n value={text}\n onChangeText={setText}\n style={styles.input}\n placeholder={conditionChaining(\n [disabled],\n [STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED, STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE],\n )}\n />\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={onPressSend} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","Platform","TouchableOpacity","View","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","conditionChaining","useLocalization","usePlatformService","SBUError","SBUUtils","SendInput","onSendUserMessage","onSendFileMessage","text","setText","disabled","STRINGS","fileService","colors","openSheet","alert","toast","onPressSend","catch","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","GROUP_CHANNEL","DIALOG_ATTACHMENT_CAMERA","icon","onPress","photo","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","DIALOG_ATTACHMENT_PHOTO_LIBRARY","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","DIALOG_ATTACHMENT_FILES","file","openDocument","OPEN_FILES_ERROR","styles","sendInputContainer","ui","input","default","highlight","active","iconAttach","INPUT_PLACEHOLDER_DISABLED","INPUT_PLACEHOLDER_ACTIVE","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","maxHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React from 'react';\nimport { Platform, TouchableOpacity, View } from 'react-native';\n\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService } from '../../../../hooks/useContext';\nimport SBUError from '../../../../libs/SBUError';\nimport SBUUtils from '../../../../libs/SBUUtils';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n setText: (val: string) => void;\n disabled: boolean;\n};\nconst SendInput = ({ onSendUserMessage, onSendFileMessage, text, setText, disabled }: SendInputProps) => {\n const { STRINGS } = useLocalization();\n const { fileService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const onPressSend = () => {\n onSendUserMessage(text).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n setText('');\n };\n const onPressAttachment = () => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_CAMERA,\n icon: 'camera',\n onPress: async () => {\n const photo = await fileService.openCamera({\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n\n if (photo) {\n onSendFileMessage(photo).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_PHOTO_LIBRARY,\n icon: 'photo',\n onPress: async () => {\n const photo = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'all',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (photo && photo[0]) {\n onSendFileMessage(photo[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_FILES,\n icon: 'document',\n onPress: async () => {\n const file = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (file) {\n onSendFileMessage(file).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n }\n },\n },\n ],\n });\n };\n\n return (\n <View style={styles.sendInputContainer}>\n <TouchableOpacity onPress={onPressAttachment} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'add'}\n size={24}\n containerStyle={styles.iconAttach}\n />\n </TouchableOpacity>\n <TextInput\n multiline\n editable={!disabled}\n value={text}\n onChangeText={setText}\n style={styles.input}\n placeholder={conditionChaining(\n [disabled],\n [STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED, STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE],\n )}\n />\n {Boolean(text.trim()) && (\n <TouchableOpacity onPress={onPressSend} disabled={disabled}>\n <Icon\n color={disabled ? colors.ui.input.default.disabled.highlight : colors.ui.input.default.active.highlight}\n icon={'send'}\n size={24}\n containerStyle={styles.iconSend}\n />\n </TouchableOpacity>\n )}\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n sendInputContainer: {\n paddingVertical: 10,\n paddingHorizontal: 12,\n alignItems: 'center',\n flexDirection: 'row',\n },\n input: {\n flex: 1,\n marginRight: 4,\n minHeight: 36,\n maxHeight: 36 * Platform.select({ ios: 2.5, default: 2 }),\n borderRadius: 20,\n },\n iconAttach: {\n marginRight: 8,\n padding: 4,\n },\n iconSend: {\n marginLeft: 4,\n padding: 4,\n },\n});\n\nexport default SendInput;\n"],"mappings":"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"}
@@ -18,7 +18,7 @@ const GroupChannelSettingsInfo = _ => {
18
18
  } = useLocalization();
19
19
 
20
20
  if (!currentUser) {
21
- Logger.warn('Cannot render GroupChannelSettingsInfo, User is not connected');
21
+ Logger.warn('Cannot render GroupChannelSettingsInfo, please connect using `useConnection()` hook first');
22
22
  return null;
23
23
  }
24
24
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","View","Divider","Text","createStyleSheet","Logger","getGroupChannelTitle","ChannelCover","useLocalization","useSendbirdChat","GroupChannelSettingsContexts","GroupChannelSettingsInfo","_","channel","Fragment","currentUser","STRINGS","warn","styles","userInfoContainer","avatarContainer","userId","LABELS","USER_NO_NAME","CHANNEL_NO_MEMBERS","container","flex","paddingVertical","alignItems","marginBottom","userIdContainer","userIdLabel"],"sources":["GroupChannelSettingsInfo.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { View } from 'react-native';\n\nimport { Divider, Text, createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, getGroupChannelTitle } from '@sendbird/uikit-utils';\n\nimport ChannelCover from '../../../components/ChannelCover';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelSettingsContexts } from '../module/moduleContext';\nimport type { GroupChannelSettingsProps } from '../types';\n\nconst GroupChannelSettingsInfo = (_: GroupChannelSettingsProps['Info']) => {\n const { channel } = useContext(GroupChannelSettingsContexts.Fragment);\n const { currentUser } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n\n if (!currentUser) {\n Logger.warn('Cannot render GroupChannelSettingsInfo, User is not connected');\n return null;\n }\n\n return (\n <View>\n <View style={styles.userInfoContainer}>\n <ChannelCover channel={channel} size={80} containerStyle={styles.avatarContainer} />\n <Text h1 numberOfLines={1}>\n {getGroupChannelTitle(\n currentUser.userId,\n channel,\n STRINGS.LABELS.USER_NO_NAME,\n STRINGS.LABELS.CHANNEL_NO_MEMBERS,\n )}\n </Text>\n </View>\n <Divider />\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: { flex: 1 },\n userInfoContainer: { paddingVertical: 24, alignItems: 'center' },\n avatarContainer: { marginBottom: 12 },\n userIdContainer: { paddingVertical: 16 },\n userIdLabel: { marginBottom: 4 },\n});\nexport default GroupChannelSettingsInfo;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;AACA,SAASC,IAAT,QAAqB,cAArB;AAEA,SAASC,OAAT,EAAkBC,IAAlB,EAAwBC,gBAAxB,QAAgD,yCAAhD;AACA,SAASC,MAAT,EAAiBC,oBAAjB,QAA6C,uBAA7C;AAEA,OAAOC,YAAP,MAAyB,kCAAzB;AACA,SAASC,eAAT,EAA0BC,eAA1B,QAAiD,2BAAjD;AACA,SAASC,4BAAT,QAA6C,yBAA7C;;AAGA,MAAMC,wBAAwB,GAAIC,CAAD,IAA0C;EACzE,MAAM;IAAEC;EAAF,IAAcb,UAAU,CAACU,4BAA4B,CAACI,QAA9B,CAA9B;EACA,MAAM;IAAEC;EAAF,IAAkBN,eAAe,EAAvC;EACA,MAAM;IAAEO;EAAF,IAAcR,eAAe,EAAnC;;EAEA,IAAI,CAACO,WAAL,EAAkB;IAChBV,MAAM,CAACY,IAAP,CAAY,+DAAZ;IACA,OAAO,IAAP;EACD;;EAED,oBACE,oBAAC,IAAD,qBACE,oBAAC,IAAD;IAAM,KAAK,EAAEC,MAAM,CAACC;EAApB,gBACE,oBAAC,YAAD;IAAc,OAAO,EAAEN,OAAvB;IAAgC,IAAI,EAAE,EAAtC;IAA0C,cAAc,EAAEK,MAAM,CAACE;EAAjE,EADF,eAEE,oBAAC,IAAD;IAAM,EAAE,MAAR;IAAS,aAAa,EAAE;EAAxB,GACGd,oBAAoB,CACnBS,WAAW,CAACM,MADO,EAEnBR,OAFmB,EAGnBG,OAAO,CAACM,MAAR,CAAeC,YAHI,EAInBP,OAAO,CAACM,MAAR,CAAeE,kBAJI,CADvB,CAFF,CADF,eAYE,oBAAC,OAAD,OAZF,CADF;AAgBD,CA1BD;;AA4BA,MAAMN,MAAM,GAAGd,gBAAgB,CAAC;EAC9BqB,SAAS,EAAE;IAAEC,IAAI,EAAE;EAAR,CADmB;EAE9BP,iBAAiB,EAAE;IAAEQ,eAAe,EAAE,EAAnB;IAAuBC,UAAU,EAAE;EAAnC,CAFW;EAG9BR,eAAe,EAAE;IAAES,YAAY,EAAE;EAAhB,CAHa;EAI9BC,eAAe,EAAE;IAAEH,eAAe,EAAE;EAAnB,CAJa;EAK9BI,WAAW,EAAE;IAAEF,YAAY,EAAE;EAAhB;AALiB,CAAD,CAA/B;AAOA,eAAelB,wBAAf"}
1
+ {"version":3,"names":["React","useContext","View","Divider","Text","createStyleSheet","Logger","getGroupChannelTitle","ChannelCover","useLocalization","useSendbirdChat","GroupChannelSettingsContexts","GroupChannelSettingsInfo","_","channel","Fragment","currentUser","STRINGS","warn","styles","userInfoContainer","avatarContainer","userId","LABELS","USER_NO_NAME","CHANNEL_NO_MEMBERS","container","flex","paddingVertical","alignItems","marginBottom","userIdContainer","userIdLabel"],"sources":["GroupChannelSettingsInfo.tsx"],"sourcesContent":["import React, { useContext } from 'react';\nimport { View } from 'react-native';\n\nimport { Divider, Text, createStyleSheet } from '@sendbird/uikit-react-native-foundation';\nimport { Logger, getGroupChannelTitle } from '@sendbird/uikit-utils';\n\nimport ChannelCover from '../../../components/ChannelCover';\nimport { useLocalization, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelSettingsContexts } from '../module/moduleContext';\nimport type { GroupChannelSettingsProps } from '../types';\n\nconst GroupChannelSettingsInfo = (_: GroupChannelSettingsProps['Info']) => {\n const { channel } = useContext(GroupChannelSettingsContexts.Fragment);\n const { currentUser } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n\n if (!currentUser) {\n Logger.warn('Cannot render GroupChannelSettingsInfo, please connect using `useConnection()` hook first');\n return null;\n }\n\n return (\n <View>\n <View style={styles.userInfoContainer}>\n <ChannelCover channel={channel} size={80} containerStyle={styles.avatarContainer} />\n <Text h1 numberOfLines={1}>\n {getGroupChannelTitle(\n currentUser.userId,\n channel,\n STRINGS.LABELS.USER_NO_NAME,\n STRINGS.LABELS.CHANNEL_NO_MEMBERS,\n )}\n </Text>\n </View>\n <Divider />\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: { flex: 1 },\n userInfoContainer: { paddingVertical: 24, alignItems: 'center' },\n avatarContainer: { marginBottom: 12 },\n userIdContainer: { paddingVertical: 16 },\n userIdLabel: { marginBottom: 4 },\n});\nexport default GroupChannelSettingsInfo;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,UAAhB,QAAkC,OAAlC;AACA,SAASC,IAAT,QAAqB,cAArB;AAEA,SAASC,OAAT,EAAkBC,IAAlB,EAAwBC,gBAAxB,QAAgD,yCAAhD;AACA,SAASC,MAAT,EAAiBC,oBAAjB,QAA6C,uBAA7C;AAEA,OAAOC,YAAP,MAAyB,kCAAzB;AACA,SAASC,eAAT,EAA0BC,eAA1B,QAAiD,2BAAjD;AACA,SAASC,4BAAT,QAA6C,yBAA7C;;AAGA,MAAMC,wBAAwB,GAAIC,CAAD,IAA0C;EACzE,MAAM;IAAEC;EAAF,IAAcb,UAAU,CAACU,4BAA4B,CAACI,QAA9B,CAA9B;EACA,MAAM;IAAEC;EAAF,IAAkBN,eAAe,EAAvC;EACA,MAAM;IAAEO;EAAF,IAAcR,eAAe,EAAnC;;EAEA,IAAI,CAACO,WAAL,EAAkB;IAChBV,MAAM,CAACY,IAAP,CAAY,2FAAZ;IACA,OAAO,IAAP;EACD;;EAED,oBACE,oBAAC,IAAD,qBACE,oBAAC,IAAD;IAAM,KAAK,EAAEC,MAAM,CAACC;EAApB,gBACE,oBAAC,YAAD;IAAc,OAAO,EAAEN,OAAvB;IAAgC,IAAI,EAAE,EAAtC;IAA0C,cAAc,EAAEK,MAAM,CAACE;EAAjE,EADF,eAEE,oBAAC,IAAD;IAAM,EAAE,MAAR;IAAS,aAAa,EAAE;EAAxB,GACGd,oBAAoB,CACnBS,WAAW,CAACM,MADO,EAEnBR,OAFmB,EAGnBG,OAAO,CAACM,MAAR,CAAeC,YAHI,EAInBP,OAAO,CAACM,MAAR,CAAeE,kBAJI,CADvB,CAFF,CADF,eAYE,oBAAC,OAAD,OAZF,CADF;AAgBD,CA1BD;;AA4BA,MAAMN,MAAM,GAAGd,gBAAgB,CAAC;EAC9BqB,SAAS,EAAE;IAAEC,IAAI,EAAE;EAAR,CADmB;EAE9BP,iBAAiB,EAAE;IAAEQ,eAAe,EAAE,EAAnB;IAAuBC,UAAU,EAAE;EAAnC,CAFW;EAG9BR,eAAe,EAAE;IAAES,YAAY,EAAE;EAAhB,CAHa;EAI9BC,eAAe,EAAE;IAAEH,eAAe,EAAE;EAAnB,CAJa;EAK9BI,WAAW,EAAE;IAAEF,YAAY,EAAE;EAAhB;AALiB,CAAD,CAA/B;AAOA,eAAelB,wBAAf"}
@@ -1,9 +1,11 @@
1
1
  import React, { createContext, useCallback } from 'react';
2
2
  import { useActiveGroupChannel, useChannelHandler } from '@sendbird/uikit-chat-hooks';
3
- import { useActionMenu, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';
3
+ import { useActionMenu, useAlert, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';
4
4
  import { NOOP, isDifferentChannel, useForceUpdate, useUniqId } from '@sendbird/uikit-utils';
5
5
  import ProviderLayout from '../../../components/ProviderLayout';
6
6
  import { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';
7
+ import SBUError from '../../../libs/SBUError';
8
+ import SBUUtils from '../../../libs/SBUUtils';
7
9
  export const GroupChannelSettingsContexts = {
8
10
  Fragment: /*#__PURE__*/createContext({
9
11
  channel: {},
@@ -29,6 +31,9 @@ export const GroupChannelSettingsContextsProvider = _ref => {
29
31
  const {
30
32
  fileService
31
33
  } = usePlatformService();
34
+ const {
35
+ alert
36
+ } = useAlert();
32
37
  const {
33
38
  activeChannel,
34
39
  setActiveChannel
@@ -81,7 +86,20 @@ export const GroupChannelSettingsContextsProvider = _ref => {
81
86
  onPress: async () => {
82
87
  const file = await fileService.openCamera({
83
88
  mediaType: 'photo',
84
- onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error')
89
+ onOpenFailure: error => {
90
+ if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
91
+ alert({
92
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
93
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),
94
+ buttons: [{
95
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
96
+ onPress: () => SBUUtils.openSettings()
97
+ }]
98
+ });
99
+ } else {
100
+ toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');
101
+ }
102
+ }
85
103
  });
86
104
  if (!file) return;
87
105
  const params = new sdk.GroupChannelParams();
@@ -94,7 +112,20 @@ export const GroupChannelSettingsContextsProvider = _ref => {
94
112
  const files = await fileService.openMediaLibrary({
95
113
  selectionLimit: 1,
96
114
  mediaType: 'photo',
97
- onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error')
115
+ onOpenFailure: error => {
116
+ if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
117
+ alert({
118
+ title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
119
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),
120
+ buttons: [{
121
+ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
122
+ onPress: () => SBUUtils.openSettings()
123
+ }]
124
+ });
125
+ } else {
126
+ toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');
127
+ }
128
+ }
98
129
  });
99
130
  if (!files || !files[0]) return;
100
131
  const params = new sdk.GroupChannelParams();
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useActiveGroupChannel","useChannelHandler","useActionMenu","useBottomSheet","usePrompt","useToast","NOOP","isDifferentChannel","useForceUpdate","useUniqId","ProviderLayout","useLocalization","usePlatformService","useSendbirdChat","GroupChannelSettingsContexts","Fragment","channel","headerTitle","headerRight","onPressHeaderRight","HOOK_NAME","GroupChannelSettingsContextsProvider","children","uniqId","forceUpdate","STRINGS","sdk","fileService","activeChannel","setActiveChannel","onChannelChanged","isGroupChannel","onChannelFrozen","onChannelUnfrozen","toast","openSheet","openPrompt","openMenu","updateChannel","params","updatedChannel","changeChannelName","title","GROUP_CHANNEL_SETTINGS","DIALOG_CHANGE_NAME_PROMPT_TITLE","submitLabel","DIALOG_CHANGE_NAME_PROMPT_OK","placeholder","DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER","defaultValue","name","onSubmit","channelName","GroupChannelParams","changeChannelImage","DIALOG_CHANGE_IMAGE_MENU_TITLE","menuItems","DIALOG_CHANGE_IMAGE_MENU_CAMERA","onPress","file","openCamera","mediaType","onOpenFailureWithToastMessage","show","TOAST","OPEN_CAMERA_ERROR","coverImage","DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY","files","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","sheetItems","DIALOG_CHANGE_NAME","DIALOG_CHANGE_IMAGE","HEADER_TITLE","HEADER_RIGHT"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback } from 'react';\n\nimport { useActiveGroupChannel, useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useActionMenu, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';\nimport {\n NOOP,\n SendbirdGroupChannel,\n SendbirdGroupChannelParams,\n SendbirdOpenChannel,\n isDifferentChannel,\n useForceUpdate,\n useUniqId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport type { GroupChannelSettingsContextsType, GroupChannelSettingsModule } from '../types';\n\nexport const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {\n Fragment: createContext({\n channel: {} as SendbirdGroupChannel,\n headerTitle: '',\n headerRight: '',\n onPressHeaderRight: NOOP,\n }),\n};\n\nconst HOOK_NAME = 'GroupChannelSettingsContextsProvider';\nexport const GroupChannelSettingsContextsProvider: GroupChannelSettingsModule['Provider'] = ({ children, channel }) => {\n const uniqId = useUniqId(HOOK_NAME);\n const forceUpdate = useForceUpdate();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { fileService } = usePlatformService();\n\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n\n const onChannelChanged = (channel: SendbirdGroupChannel | SendbirdOpenChannel) => {\n if (isDifferentChannel(channel, activeChannel) || !channel.isGroupChannel()) return;\n setActiveChannel(channel);\n forceUpdate();\n };\n\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onChannelChanged: onChannelChanged,\n onChannelFrozen: onChannelChanged,\n onChannelUnfrozen: onChannelChanged,\n });\n\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { openPrompt } = usePrompt();\n const { openMenu } = useActionMenu();\n\n const updateChannel = useCallback(\n async (params: SendbirdGroupChannelParams) => {\n const updatedChannel = await activeChannel.updateChannel(params);\n setActiveChannel(updatedChannel);\n forceUpdate();\n },\n [activeChannel],\n );\n\n const changeChannelName = useCallback(() => {\n openPrompt({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_TITLE,\n submitLabel: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_OK,\n placeholder: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER,\n defaultValue: activeChannel.name,\n onSubmit: async (channelName) => {\n const params = new sdk.GroupChannelParams();\n params.name = channelName;\n await updateChannel(params);\n },\n });\n }, [STRINGS, updateChannel, activeChannel.name]);\n\n const changeChannelImage = useCallback(() => {\n openMenu({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_TITLE,\n menuItems: [\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const file = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error'),\n });\n if (!file) return;\n\n const params = new sdk.GroupChannelParams();\n params.coverImage = file;\n await updateChannel(params);\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const files = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailureWithToastMessage: () => toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error'),\n });\n if (!files || !files[0]) return;\n\n const params = new sdk.GroupChannelParams();\n params.coverImage = files[0];\n await updateChannel(params);\n },\n },\n ],\n });\n }, [STRINGS, updateChannel]);\n\n const onPressHeaderRight = useCallback(() => {\n openSheet({\n sheetItems: [\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME, onPress: changeChannelName },\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE, onPress: changeChannelImage },\n ],\n });\n }, [STRINGS, changeChannelImage, changeChannelName]);\n\n return (\n <ProviderLayout>\n <GroupChannelSettingsContexts.Fragment.Provider\n value={{\n channel: activeChannel,\n headerTitle: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_TITLE,\n headerRight: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_RIGHT,\n onPressHeaderRight,\n }}\n >\n {children}\n </GroupChannelSettingsContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","createContext","useCallback","useActiveGroupChannel","useChannelHandler","useActionMenu","useAlert","useBottomSheet","usePrompt","useToast","NOOP","isDifferentChannel","useForceUpdate","useUniqId","ProviderLayout","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","GroupChannelSettingsContexts","Fragment","channel","headerTitle","headerRight","onPressHeaderRight","HOOK_NAME","GroupChannelSettingsContextsProvider","children","uniqId","forceUpdate","STRINGS","sdk","fileService","alert","activeChannel","setActiveChannel","onChannelChanged","isGroupChannel","onChannelFrozen","onChannelUnfrozen","toast","openSheet","openPrompt","openMenu","updateChannel","params","updatedChannel","changeChannelName","title","GROUP_CHANNEL_SETTINGS","DIALOG_CHANGE_NAME_PROMPT_TITLE","submitLabel","DIALOG_CHANGE_NAME_PROMPT_OK","placeholder","DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER","defaultValue","name","onSubmit","channelName","GroupChannelParams","changeChannelImage","DIALOG_CHANGE_IMAGE_MENU_TITLE","menuItems","DIALOG_CHANGE_IMAGE_MENU_CAMERA","onPress","file","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","buttons","text","ALERT_PERMISSIONS_OK","openSettings","show","TOAST","OPEN_CAMERA_ERROR","coverImage","DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY","files","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","sheetItems","DIALOG_CHANGE_NAME","DIALOG_CHANGE_IMAGE","HEADER_TITLE","HEADER_RIGHT"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback } from 'react';\n\nimport { useActiveGroupChannel, useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useActionMenu, useAlert, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';\nimport {\n NOOP,\n SendbirdGroupChannel,\n SendbirdGroupChannelParams,\n SendbirdOpenChannel,\n isDifferentChannel,\n useForceUpdate,\n useUniqId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport SBUError from '../../../libs/SBUError';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport type { GroupChannelSettingsContextsType, GroupChannelSettingsModule } from '../types';\n\nexport const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {\n Fragment: createContext({\n channel: {} as SendbirdGroupChannel,\n headerTitle: '',\n headerRight: '',\n onPressHeaderRight: NOOP,\n }),\n};\n\nconst HOOK_NAME = 'GroupChannelSettingsContextsProvider';\nexport const GroupChannelSettingsContextsProvider: GroupChannelSettingsModule['Provider'] = ({ children, channel }) => {\n const uniqId = useUniqId(HOOK_NAME);\n const forceUpdate = useForceUpdate();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { fileService } = usePlatformService();\n const { alert } = useAlert();\n\n const { activeChannel, setActiveChannel } = useActiveGroupChannel(sdk, channel);\n\n const onChannelChanged = (channel: SendbirdGroupChannel | SendbirdOpenChannel) => {\n if (isDifferentChannel(channel, activeChannel) || !channel.isGroupChannel()) return;\n setActiveChannel(channel);\n forceUpdate();\n };\n\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onChannelChanged: onChannelChanged,\n onChannelFrozen: onChannelChanged,\n onChannelUnfrozen: onChannelChanged,\n });\n\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { openPrompt } = usePrompt();\n const { openMenu } = useActionMenu();\n\n const updateChannel = useCallback(\n async (params: SendbirdGroupChannelParams) => {\n const updatedChannel = await activeChannel.updateChannel(params);\n setActiveChannel(updatedChannel);\n forceUpdate();\n },\n [activeChannel],\n );\n\n const changeChannelName = useCallback(() => {\n openPrompt({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_TITLE,\n submitLabel: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_OK,\n placeholder: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER,\n defaultValue: activeChannel.name,\n onSubmit: async (channelName) => {\n const params = new sdk.GroupChannelParams();\n params.name = channelName;\n await updateChannel(params);\n },\n });\n }, [STRINGS, updateChannel, activeChannel.name]);\n\n const changeChannelImage = useCallback(() => {\n openMenu({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_TITLE,\n menuItems: [\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const file = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n if (!file) return;\n\n const params = new sdk.GroupChannelParams();\n params.coverImage = file;\n await updateChannel(params);\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const files = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n if (!files || !files[0]) return;\n\n const params = new sdk.GroupChannelParams();\n params.coverImage = files[0];\n await updateChannel(params);\n },\n },\n ],\n });\n }, [STRINGS, updateChannel]);\n\n const onPressHeaderRight = useCallback(() => {\n openSheet({\n sheetItems: [\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME, onPress: changeChannelName },\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE, onPress: changeChannelImage },\n ],\n });\n }, [STRINGS, changeChannelImage, changeChannelName]);\n\n return (\n <ProviderLayout>\n <GroupChannelSettingsContexts.Fragment.Provider\n value={{\n channel: activeChannel,\n headerTitle: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_TITLE,\n headerRight: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_RIGHT,\n onPressHeaderRight,\n }}\n >\n {children}\n </GroupChannelSettingsContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"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"}
@@ -56,7 +56,7 @@ const createGroupChannelListFragment = initModule => {
56
56
  });
57
57
 
58
58
  if (!currentUser) {
59
- Logger.warn('Cannot render GroupChannelListFragment, User is not connected');
59
+ Logger.warn('Cannot render GroupChannelListFragment, please connect using `useConnection()` hook first');
60
60
  return null;
61
61
  }
62
62
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","AppState","useGroupChannelList","Logger","PASS","useFreshCallback","StatusComposition","GroupChannelPreviewContainer","createGroupChannelListModule","useSendbirdChat","createGroupChannelListFragment","initModule","GroupChannelListModule","TypeSelectorHeader","onPressChannel","onPressCreateChannel","queryCreator","collectionCreator","renderGroupChannelPreview","flatListProps","menuItemCreator","sdk","currentUser","features","markAsDeliveredWithChannel","groupChannels","next","loading","userId","enableCollectionWithoutLocalCache","deliveryReceiptEnabled","listener","addEventListener","status","forEach","remove","_renderGroupChannelPreview","channel","onLongPressChannel","warn","ListEmptyComponent","contentContainerStyle","flexGrow"],"sources":["createGroupChannelListFragment.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { AppState } from 'react-native';\n\nimport { useGroupChannelList } from '@sendbird/uikit-chat-hooks';\nimport { Logger, PASS, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';\nimport createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';\nimport type {\n GroupChannelListFragment,\n GroupChannelListModule,\n GroupChannelListProps,\n} from '../domain/groupChannelList/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {\n const GroupChannelListModule = createGroupChannelListModule(initModule);\n return ({\n TypeSelectorHeader,\n onPressChannel,\n onPressCreateChannel,\n queryCreator,\n collectionCreator,\n renderGroupChannelPreview,\n // skipTypeSelection = true,\n flatListProps = {},\n menuItemCreator = PASS,\n }) => {\n const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();\n const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {\n queryCreator,\n collectionCreator,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n if (features.deliveryReceiptEnabled) {\n useEffect(() => {\n const listener = AppState.addEventListener('change', (status) => {\n if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);\n });\n return () => listener.remove();\n }, []);\n }\n\n const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(\n (channel, onLongPressChannel) => {\n if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);\n return (\n <GroupChannelPreviewContainer\n channel={channel}\n onPress={() => onPressChannel(channel)}\n onLongPress={() => onLongPressChannel()}\n />\n );\n },\n );\n\n if (!currentUser) {\n Logger.warn('Cannot render GroupChannelListFragment, User is not connected');\n return null;\n }\n\n return (\n <GroupChannelListModule.Provider>\n <GroupChannelListModule.Header />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelListModule.StatusLoading />}>\n <GroupChannelListModule.List\n menuItemCreator={menuItemCreator}\n renderGroupChannelPreview={_renderGroupChannelPreview}\n groupChannels={groupChannels}\n onLoadNext={next}\n flatListProps={{\n ListEmptyComponent: <GroupChannelListModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }}\n />\n </StatusComposition>\n <GroupChannelListModule.TypeSelector\n // NOTE: not included in first iteration\n skipTypeSelection\n Header={TypeSelectorHeader}\n onSelectType={onPressCreateChannel}\n />\n </GroupChannelListModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelListFragment;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,QAAT,QAAyB,cAAzB;AAEA,SAASC,mBAAT,QAAoC,4BAApC;AACA,SAASC,MAAT,EAAiBC,IAAjB,EAAuBC,gBAAvB,QAA+C,uBAA/C;AAEA,OAAOC,iBAAP,MAA8B,iCAA9B;AACA,OAAOC,4BAAP,MAAyC,4CAAzC;AACA,OAAOC,4BAAP,MAAyC,gEAAzC;AAMA,SAASC,eAAT,QAAgC,qBAAhC;;AAEA,MAAMC,8BAA8B,GAAIC,UAAD,IAA4E;EACjH,MAAMC,sBAAsB,GAAGJ,4BAA4B,CAACG,UAAD,CAA3D;EACA,OAAO,QAUD;IAAA,IAVE;MACNE,kBADM;MAENC,cAFM;MAGNC,oBAHM;MAINC,YAJM;MAKNC,iBALM;MAMNC,yBANM;MAON;MACAC,aAAa,GAAG,EARV;MASNC,eAAe,GAAGhB;IATZ,CAUF;IACJ,MAAM;MAAEiB,GAAF;MAAOC,WAAP;MAAoBC,QAApB;MAA8BC;IAA9B,IAA6Df,eAAe,EAAlF;IACA,MAAM;MAAEgB,aAAF;MAAiBC,IAAjB;MAAuBC;IAAvB,IAAmCzB,mBAAmB,CAACmB,GAAD,EAAMC,WAAN,aAAMA,WAAN,uBAAMA,WAAW,CAAEM,MAAnB,EAA2B;MACrFZ,YADqF;MAErFC,iBAFqF;MAGrFY,iCAAiC,EAAE,CAACb;IAHiD,CAA3B,CAA5D;;IAMA,IAAIO,QAAQ,CAACO,sBAAb,EAAqC;MACnC9B,SAAS,CAAC,MAAM;QACd,MAAM+B,QAAQ,GAAG9B,QAAQ,CAAC+B,gBAAT,CAA0B,QAA1B,EAAqCC,MAAD,IAAY;UAC/D,IAAIA,MAAM,KAAK,QAAf,EAAyBR,aAAa,CAACS,OAAd,CAAsBV,0BAAtB;QAC1B,CAFgB,CAAjB;QAGA,OAAO,MAAMO,QAAQ,CAACI,MAAT,EAAb;MACD,CALQ,EAKN,EALM,CAAT;IAMD;;IAED,MAAMC,0BAAsF,GAAG/B,gBAAgB,CAC7G,CAACgC,OAAD,EAAUC,kBAAV,KAAiC;MAC/B,IAAIpB,yBAAJ,EAA+B,OAAOA,yBAAyB,CAACmB,OAAD,EAAUC,kBAAV,CAAhC;MAC/B,oBACE,oBAAC,4BAAD;QACE,OAAO,EAAED,OADX;QAEE,OAAO,EAAE,MAAMvB,cAAc,CAACuB,OAAD,CAF/B;QAGE,WAAW,EAAE,MAAMC,kBAAkB;MAHvC,EADF;IAOD,CAV4G,CAA/G;;IAaA,IAAI,CAAChB,WAAL,EAAkB;MAChBnB,MAAM,CAACoC,IAAP,CAAY,+DAAZ;MACA,OAAO,IAAP;IACD;;IAED,oBACE,oBAAC,sBAAD,CAAwB,QAAxB,qBACE,oBAAC,sBAAD,CAAwB,MAAxB,OADF,eAEE,oBAAC,iBAAD;MAAmB,OAAO,EAAEZ,OAA5B;MAAqC,gBAAgB,eAAE,oBAAC,sBAAD,CAAwB,aAAxB;IAAvD,gBACE,oBAAC,sBAAD,CAAwB,IAAxB;MACE,eAAe,EAAEP,eADnB;MAEE,yBAAyB,EAAEgB,0BAF7B;MAGE,aAAa,EAAEX,aAHjB;MAIE,UAAU,EAAEC,IAJd;MAKE,aAAa,EAAE;QACbc,kBAAkB,eAAE,oBAAC,sBAAD,CAAwB,WAAxB,OADP;QAEbC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE;QAAZ,CAFV;QAGb,GAAGvB;MAHU;IALjB,EADF,CAFF,eAeE,oBAAC,sBAAD,CAAwB,YAAxB;MACE;MACA,iBAAiB,MAFnB;MAGE,MAAM,EAAEN,kBAHV;MAIE,YAAY,EAAEE;IAJhB,EAfF,CADF;EAwBD,CArED;AAsED,CAxED;;AA0EA,eAAeL,8BAAf"}
1
+ {"version":3,"names":["React","useEffect","AppState","useGroupChannelList","Logger","PASS","useFreshCallback","StatusComposition","GroupChannelPreviewContainer","createGroupChannelListModule","useSendbirdChat","createGroupChannelListFragment","initModule","GroupChannelListModule","TypeSelectorHeader","onPressChannel","onPressCreateChannel","queryCreator","collectionCreator","renderGroupChannelPreview","flatListProps","menuItemCreator","sdk","currentUser","features","markAsDeliveredWithChannel","groupChannels","next","loading","userId","enableCollectionWithoutLocalCache","deliveryReceiptEnabled","listener","addEventListener","status","forEach","remove","_renderGroupChannelPreview","channel","onLongPressChannel","warn","ListEmptyComponent","contentContainerStyle","flexGrow"],"sources":["createGroupChannelListFragment.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { AppState } from 'react-native';\n\nimport { useGroupChannelList } from '@sendbird/uikit-chat-hooks';\nimport { Logger, PASS, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';\nimport createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';\nimport type {\n GroupChannelListFragment,\n GroupChannelListModule,\n GroupChannelListProps,\n} from '../domain/groupChannelList/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {\n const GroupChannelListModule = createGroupChannelListModule(initModule);\n return ({\n TypeSelectorHeader,\n onPressChannel,\n onPressCreateChannel,\n queryCreator,\n collectionCreator,\n renderGroupChannelPreview,\n // skipTypeSelection = true,\n flatListProps = {},\n menuItemCreator = PASS,\n }) => {\n const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();\n const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {\n queryCreator,\n collectionCreator,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n if (features.deliveryReceiptEnabled) {\n useEffect(() => {\n const listener = AppState.addEventListener('change', (status) => {\n if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);\n });\n return () => listener.remove();\n }, []);\n }\n\n const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(\n (channel, onLongPressChannel) => {\n if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);\n return (\n <GroupChannelPreviewContainer\n channel={channel}\n onPress={() => onPressChannel(channel)}\n onLongPress={() => onLongPressChannel()}\n />\n );\n },\n );\n\n if (!currentUser) {\n Logger.warn('Cannot render GroupChannelListFragment, please connect using `useConnection()` hook first');\n return null;\n }\n\n return (\n <GroupChannelListModule.Provider>\n <GroupChannelListModule.Header />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelListModule.StatusLoading />}>\n <GroupChannelListModule.List\n menuItemCreator={menuItemCreator}\n renderGroupChannelPreview={_renderGroupChannelPreview}\n groupChannels={groupChannels}\n onLoadNext={next}\n flatListProps={{\n ListEmptyComponent: <GroupChannelListModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }}\n />\n </StatusComposition>\n <GroupChannelListModule.TypeSelector\n // NOTE: not included in first iteration\n skipTypeSelection\n Header={TypeSelectorHeader}\n onSelectType={onPressCreateChannel}\n />\n </GroupChannelListModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelListFragment;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,QAAT,QAAyB,cAAzB;AAEA,SAASC,mBAAT,QAAoC,4BAApC;AACA,SAASC,MAAT,EAAiBC,IAAjB,EAAuBC,gBAAvB,QAA+C,uBAA/C;AAEA,OAAOC,iBAAP,MAA8B,iCAA9B;AACA,OAAOC,4BAAP,MAAyC,4CAAzC;AACA,OAAOC,4BAAP,MAAyC,gEAAzC;AAMA,SAASC,eAAT,QAAgC,qBAAhC;;AAEA,MAAMC,8BAA8B,GAAIC,UAAD,IAA4E;EACjH,MAAMC,sBAAsB,GAAGJ,4BAA4B,CAACG,UAAD,CAA3D;EACA,OAAO,QAUD;IAAA,IAVE;MACNE,kBADM;MAENC,cAFM;MAGNC,oBAHM;MAINC,YAJM;MAKNC,iBALM;MAMNC,yBANM;MAON;MACAC,aAAa,GAAG,EARV;MASNC,eAAe,GAAGhB;IATZ,CAUF;IACJ,MAAM;MAAEiB,GAAF;MAAOC,WAAP;MAAoBC,QAApB;MAA8BC;IAA9B,IAA6Df,eAAe,EAAlF;IACA,MAAM;MAAEgB,aAAF;MAAiBC,IAAjB;MAAuBC;IAAvB,IAAmCzB,mBAAmB,CAACmB,GAAD,EAAMC,WAAN,aAAMA,WAAN,uBAAMA,WAAW,CAAEM,MAAnB,EAA2B;MACrFZ,YADqF;MAErFC,iBAFqF;MAGrFY,iCAAiC,EAAE,CAACb;IAHiD,CAA3B,CAA5D;;IAMA,IAAIO,QAAQ,CAACO,sBAAb,EAAqC;MACnC9B,SAAS,CAAC,MAAM;QACd,MAAM+B,QAAQ,GAAG9B,QAAQ,CAAC+B,gBAAT,CAA0B,QAA1B,EAAqCC,MAAD,IAAY;UAC/D,IAAIA,MAAM,KAAK,QAAf,EAAyBR,aAAa,CAACS,OAAd,CAAsBV,0BAAtB;QAC1B,CAFgB,CAAjB;QAGA,OAAO,MAAMO,QAAQ,CAACI,MAAT,EAAb;MACD,CALQ,EAKN,EALM,CAAT;IAMD;;IAED,MAAMC,0BAAsF,GAAG/B,gBAAgB,CAC7G,CAACgC,OAAD,EAAUC,kBAAV,KAAiC;MAC/B,IAAIpB,yBAAJ,EAA+B,OAAOA,yBAAyB,CAACmB,OAAD,EAAUC,kBAAV,CAAhC;MAC/B,oBACE,oBAAC,4BAAD;QACE,OAAO,EAAED,OADX;QAEE,OAAO,EAAE,MAAMvB,cAAc,CAACuB,OAAD,CAF/B;QAGE,WAAW,EAAE,MAAMC,kBAAkB;MAHvC,EADF;IAOD,CAV4G,CAA/G;;IAaA,IAAI,CAAChB,WAAL,EAAkB;MAChBnB,MAAM,CAACoC,IAAP,CAAY,2FAAZ;MACA,OAAO,IAAP;IACD;;IAED,oBACE,oBAAC,sBAAD,CAAwB,QAAxB,qBACE,oBAAC,sBAAD,CAAwB,MAAxB,OADF,eAEE,oBAAC,iBAAD;MAAmB,OAAO,EAAEZ,OAA5B;MAAqC,gBAAgB,eAAE,oBAAC,sBAAD,CAAwB,aAAxB;IAAvD,gBACE,oBAAC,sBAAD,CAAwB,IAAxB;MACE,eAAe,EAAEP,eADnB;MAEE,yBAAyB,EAAEgB,0BAF7B;MAGE,aAAa,EAAEX,aAHjB;MAIE,UAAU,EAAEC,IAJd;MAKE,aAAa,EAAE;QACbc,kBAAkB,eAAE,oBAAC,sBAAD,CAAwB,WAAxB,OADP;QAEbC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE;QAAZ,CAFV;QAGb,GAAGvB;MAHU;IALjB,EADF,CAFF,eAeE,oBAAC,sBAAD,CAAwB,YAAxB;MACE;MACA,iBAAiB,MAFnB;MAGE,MAAM,EAAEN,kBAHV;MAIE,YAAY,EAAEE;IAJhB,EAfF,CADF;EAwBD,CArED;AAsED,CAxED;;AA0EA,eAAeL,8BAAf"}
@@ -0,0 +1,32 @@
1
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
+
3
+ var SBUErrorCode;
4
+
5
+ (function (SBUErrorCode) {
6
+ SBUErrorCode[SBUErrorCode["ERR_UNKNOWN"] = 90000000] = "ERR_UNKNOWN";
7
+ SBUErrorCode[SBUErrorCode["ERR_PERMISSIONS_DENIED"] = 91001000] = "ERR_PERMISSIONS_DENIED";
8
+ SBUErrorCode[SBUErrorCode["ERR_DEVICE_UNAVAILABLE"] = 91001001] = "ERR_DEVICE_UNAVAILABLE";
9
+ })(SBUErrorCode || (SBUErrorCode = {}));
10
+
11
+ export default class SBUError extends Error {
12
+ static get UNKNOWN() {
13
+ return new SBUError(SBUErrorCode.ERR_UNKNOWN);
14
+ }
15
+
16
+ static get PERMISSIONS_DENIED() {
17
+ return new SBUError(SBUErrorCode.ERR_PERMISSIONS_DENIED);
18
+ }
19
+
20
+ static get DEVICE_UNAVAILABLE() {
21
+ return new SBUError(SBUErrorCode.ERR_DEVICE_UNAVAILABLE);
22
+ }
23
+
24
+ constructor(code, message) {
25
+ super(message);
26
+ this.code = code;
27
+ }
28
+
29
+ }
30
+
31
+ _defineProperty(SBUError, "CODE", SBUErrorCode);
32
+ //# sourceMappingURL=SBUError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["SBUErrorCode","SBUError","Error","UNKNOWN","ERR_UNKNOWN","PERMISSIONS_DENIED","ERR_PERMISSIONS_DENIED","DEVICE_UNAVAILABLE","ERR_DEVICE_UNAVAILABLE","constructor","code","message"],"sources":["SBUError.ts"],"sourcesContent":["enum SBUErrorCode {\n ERR_UNKNOWN = 90000000,\n\n // Platform service - 91001000 ~\n ERR_PERMISSIONS_DENIED = 91001000,\n ERR_DEVICE_UNAVAILABLE,\n}\n\nexport default class SBUError extends Error {\n static CODE = SBUErrorCode;\n\n static get UNKNOWN() {\n return new SBUError(SBUErrorCode.ERR_UNKNOWN);\n }\n\n static get PERMISSIONS_DENIED() {\n return new SBUError(SBUErrorCode.ERR_PERMISSIONS_DENIED);\n }\n static get DEVICE_UNAVAILABLE() {\n return new SBUError(SBUErrorCode.ERR_DEVICE_UNAVAILABLE);\n }\n\n constructor(public code: SBUErrorCode, message?: string) {\n super(message);\n }\n}\n"],"mappings":";;IAAKA,Y;;WAAAA,Y;EAAAA,Y,CAAAA,Y;EAAAA,Y,CAAAA,Y;EAAAA,Y,CAAAA,Y;GAAAA,Y,KAAAA,Y;;AAQL,eAAe,MAAMC,QAAN,SAAuBC,KAAvB,CAA6B;EAGxB,WAAPC,OAAO,GAAG;IACnB,OAAO,IAAIF,QAAJ,CAAaD,YAAY,CAACI,WAA1B,CAAP;EACD;;EAE4B,WAAlBC,kBAAkB,GAAG;IAC9B,OAAO,IAAIJ,QAAJ,CAAaD,YAAY,CAACM,sBAA1B,CAAP;EACD;;EAC4B,WAAlBC,kBAAkB,GAAG;IAC9B,OAAO,IAAIN,QAAJ,CAAaD,YAAY,CAACQ,sBAA1B,CAAP;EACD;;EAEDC,WAAW,CAAQC,IAAR,EAA4BC,OAA5B,EAA8C;IACvD,MAAMA,OAAN;IADuD,KAAtCD,IAAsC,GAAtCA,IAAsC;EAExD;;AAhByC;;gBAAvBT,Q,UACLD,Y"}
@@ -0,0 +1,10 @@
1
+ import { Linking, Platform } from 'react-native';
2
+ export default class SBUUtils {
3
+ static openSettings() {
4
+ Linking.openSettings().catch(() => {
5
+ if (Platform.OS === 'ios') Linking.openURL('App-Prefs:root');
6
+ });
7
+ }
8
+
9
+ }
10
+ //# sourceMappingURL=SBUUtils.js.map