@sendbird/uikit-react-native 1.1.1 → 2.0.0-rc.0

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 (174) hide show
  1. package/README.md +1 -1
  2. package/lib/commonjs/components/ChatFlatList.js +10 -8
  3. package/lib/commonjs/components/ChatFlatList.js.map +1 -1
  4. package/lib/commonjs/components/FileViewer.js +8 -3
  5. package/lib/commonjs/components/FileViewer.js.map +1 -1
  6. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +47 -15
  7. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  8. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +51 -34
  9. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  10. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js +2 -1
  11. package/lib/commonjs/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  12. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +3 -1
  13. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  14. package/lib/commonjs/components/MessageRenderer/index.js +7 -2
  15. package/lib/commonjs/components/MessageRenderer/index.js.map +1 -1
  16. package/lib/commonjs/containers/SendbirdUIKitContainer.js +12 -15
  17. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  18. package/lib/commonjs/contexts/SendbirdChat.js +9 -9
  19. package/lib/commonjs/contexts/SendbirdChat.js.map +1 -1
  20. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +39 -6
  21. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  22. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js +4 -4
  23. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  24. package/lib/commonjs/domain/groupChannel/types.js.map +1 -1
  25. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js +4 -2
  26. package/lib/commonjs/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  27. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  28. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  29. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +4 -2
  30. package/lib/commonjs/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  31. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +44 -13
  32. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  33. package/lib/commonjs/domain/groupChannelUserList/types.js.map +1 -1
  34. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js +7 -6
  35. package/lib/commonjs/fragments/createGroupChannelCreateFragment.js.map +1 -1
  36. package/lib/commonjs/fragments/createGroupChannelFragment.js +12 -12
  37. package/lib/commonjs/fragments/createGroupChannelFragment.js.map +1 -1
  38. package/lib/commonjs/fragments/createGroupChannelListFragment.js +1 -1
  39. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  40. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js +4 -4
  41. package/lib/commonjs/fragments/createGroupChannelMembersFragment.js.map +1 -1
  42. package/lib/commonjs/hooks/useConnection.js +35 -34
  43. package/lib/commonjs/hooks/useConnection.js.map +1 -1
  44. package/lib/commonjs/hooks/usePushTokenRegistration.js +2 -2
  45. package/lib/commonjs/hooks/usePushTokenRegistration.js.map +1 -1
  46. package/lib/commonjs/index.js +10 -1
  47. package/lib/commonjs/index.js.map +1 -1
  48. package/lib/commonjs/libs/InternalLocalCacheStorage.js +8 -0
  49. package/lib/commonjs/libs/InternalLocalCacheStorage.js.map +1 -1
  50. package/lib/commonjs/libs/SBUError.js +41 -0
  51. package/lib/commonjs/libs/SBUError.js.map +1 -0
  52. package/lib/commonjs/libs/SBUUtils.js +20 -0
  53. package/lib/commonjs/libs/SBUUtils.js.map +1 -0
  54. package/lib/commonjs/localization/StringSet.type.js +6 -0
  55. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  56. package/lib/commonjs/platform/createFileService.expo.js +6 -4
  57. package/lib/commonjs/platform/createFileService.expo.js.map +1 -1
  58. package/lib/commonjs/platform/createFileService.native.js +18 -8
  59. package/lib/commonjs/platform/createFileService.native.js.map +1 -1
  60. package/lib/commonjs/platform/types.js +4 -0
  61. package/lib/commonjs/platform/types.js.map +1 -1
  62. package/lib/commonjs/version.js +1 -1
  63. package/lib/commonjs/version.js.map +1 -1
  64. package/lib/module/components/ChatFlatList.js +10 -8
  65. package/lib/module/components/ChatFlatList.js.map +1 -1
  66. package/lib/module/components/FileViewer.js +9 -4
  67. package/lib/module/components/FileViewer.js.map +1 -1
  68. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +48 -17
  69. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  70. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +52 -35
  71. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  72. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js +2 -1
  73. package/lib/module/components/MessageRenderer/MessageIncomingSenderName.js.map +1 -1
  74. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +3 -1
  75. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  76. package/lib/module/components/MessageRenderer/index.js +7 -2
  77. package/lib/module/components/MessageRenderer/index.js.map +1 -1
  78. package/lib/module/containers/SendbirdUIKitContainer.js +10 -15
  79. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  80. package/lib/module/contexts/SendbirdChat.js +10 -10
  81. package/lib/module/contexts/SendbirdChat.js.map +1 -1
  82. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +38 -7
  83. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  84. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js +5 -5
  85. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  86. package/lib/module/domain/groupChannel/types.js.map +1 -1
  87. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js +3 -2
  88. package/lib/module/domain/groupChannelList/component/GroupChannelListList.js.map +1 -1
  89. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js +1 -1
  90. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsInfo.js.map +1 -1
  91. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js +3 -2
  92. package/lib/module/domain/groupChannelSettings/component/GroupChannelSettingsMenu.js.map +1 -1
  93. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +43 -14
  94. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  95. package/lib/module/domain/groupChannelUserList/types.js.map +1 -1
  96. package/lib/module/fragments/createGroupChannelCreateFragment.js +7 -6
  97. package/lib/module/fragments/createGroupChannelCreateFragment.js.map +1 -1
  98. package/lib/module/fragments/createGroupChannelFragment.js +12 -12
  99. package/lib/module/fragments/createGroupChannelFragment.js.map +1 -1
  100. package/lib/module/fragments/createGroupChannelListFragment.js +1 -1
  101. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  102. package/lib/module/fragments/createGroupChannelMembersFragment.js +4 -4
  103. package/lib/module/fragments/createGroupChannelMembersFragment.js.map +1 -1
  104. package/lib/module/hooks/useConnection.js +35 -35
  105. package/lib/module/hooks/useConnection.js.map +1 -1
  106. package/lib/module/hooks/usePushTokenRegistration.js +2 -2
  107. package/lib/module/hooks/usePushTokenRegistration.js.map +1 -1
  108. package/lib/module/index.js +1 -0
  109. package/lib/module/index.js.map +1 -1
  110. package/lib/module/libs/InternalLocalCacheStorage.js +7 -0
  111. package/lib/module/libs/InternalLocalCacheStorage.js.map +1 -1
  112. package/lib/module/libs/SBUError.js +32 -0
  113. package/lib/module/libs/SBUError.js.map +1 -0
  114. package/lib/module/libs/SBUUtils.js +10 -0
  115. package/lib/module/libs/SBUUtils.js.map +1 -0
  116. package/lib/module/localization/StringSet.type.js +6 -0
  117. package/lib/module/localization/StringSet.type.js.map +1 -1
  118. package/lib/module/platform/createFileService.expo.js +5 -4
  119. package/lib/module/platform/createFileService.expo.js.map +1 -1
  120. package/lib/module/platform/createFileService.native.js +18 -9
  121. package/lib/module/platform/createFileService.native.js.map +1 -1
  122. package/lib/module/platform/types.js +1 -1
  123. package/lib/module/platform/types.js.map +1 -1
  124. package/lib/module/version.js +1 -1
  125. package/lib/module/version.js.map +1 -1
  126. package/lib/typescript/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.d.ts +2 -2
  127. package/lib/typescript/src/components/MessageRenderer/index.d.ts +1 -1
  128. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +1 -1
  129. package/lib/typescript/src/contexts/SendbirdChat.d.ts +1 -1
  130. package/lib/typescript/src/domain/groupChannel/component/GroupChannelInput/index.d.ts +3 -3
  131. package/lib/typescript/src/domain/groupChannel/component/GroupChannelMessageList.d.ts +6 -6
  132. package/lib/typescript/src/domain/groupChannel/types.d.ts +3 -3
  133. package/lib/typescript/src/domain/groupChannelUserList/types.d.ts +2 -2
  134. package/lib/typescript/src/hooks/useContext.d.ts +5 -5
  135. package/lib/typescript/src/index.d.ts +1 -0
  136. package/lib/typescript/src/libs/InternalLocalCacheStorage.d.ts +2 -0
  137. package/lib/typescript/src/libs/SBUError.d.ts +14 -0
  138. package/lib/typescript/src/libs/SBUUtils.d.ts +3 -0
  139. package/lib/typescript/src/localization/StringSet.type.d.ts +3 -0
  140. package/lib/typescript/src/platform/types.d.ts +2 -1
  141. package/lib/typescript/src/version.d.ts +1 -1
  142. package/package.json +8 -8
  143. package/src/components/ChatFlatList.tsx +5 -4
  144. package/src/components/FileViewer.tsx +12 -4
  145. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +55 -12
  146. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +38 -30
  147. package/src/components/MessageRenderer/MessageIncomingSenderName.tsx +1 -1
  148. package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +5 -3
  149. package/src/components/MessageRenderer/index.tsx +5 -2
  150. package/src/containers/SendbirdUIKitContainer.tsx +13 -9
  151. package/src/contexts/SendbirdChat.tsx +18 -13
  152. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +28 -4
  153. package/src/domain/groupChannel/component/GroupChannelInput/index.tsx +5 -5
  154. package/src/domain/groupChannel/types.ts +6 -6
  155. package/src/domain/groupChannelList/component/GroupChannelListList.tsx +3 -2
  156. package/src/domain/groupChannelSettings/component/GroupChannelSettingsInfo.tsx +1 -1
  157. package/src/domain/groupChannelSettings/component/GroupChannelSettingsMenu.tsx +3 -2
  158. package/src/domain/groupChannelSettings/module/moduleContext.tsx +33 -18
  159. package/src/domain/groupChannelUserList/types.ts +3 -3
  160. package/src/fragments/createGroupChannelCreateFragment.tsx +8 -7
  161. package/src/fragments/createGroupChannelFragment.tsx +4 -12
  162. package/src/fragments/createGroupChannelListFragment.tsx +1 -1
  163. package/src/fragments/createGroupChannelMembersFragment.tsx +4 -3
  164. package/src/hooks/useConnection.ts +40 -43
  165. package/src/hooks/usePushTokenRegistration.ts +2 -2
  166. package/src/index.ts +1 -0
  167. package/src/libs/InternalLocalCacheStorage.ts +5 -0
  168. package/src/libs/SBUError.ts +26 -0
  169. package/src/libs/SBUUtils.ts +9 -0
  170. package/src/localization/StringSet.type.ts +10 -0
  171. package/src/platform/createFileService.expo.ts +5 -4
  172. package/src/platform/createFileService.native.ts +17 -9
  173. package/src/platform/types.ts +3 -1
  174. package/src/version.ts +1 -1
@@ -83,6 +83,8 @@ const OpenGraphUserMessage = _ref => {
83
83
 
84
84
  const styles = createStyleSheet({
85
85
  container: {
86
+ width: 240,
87
+ maxWidth: 240,
86
88
  borderRadius: 16,
87
89
  overflow: 'hidden'
88
90
  },
@@ -96,7 +98,7 @@ const styles = createStyleSheet({
96
98
  paddingBottom: 12
97
99
  },
98
100
  ogImageContainer: {
99
- width: 240,
101
+ flex: 1,
100
102
  height: 136
101
103
  },
102
104
  ogImage: {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","Linking","TouchableOpacity","View","Icon","Image","Text","URLParsedText","createStyleSheet","useUIKitTheme","conditionChaining","useLocalization","OpenGraphUserMessage","message","variant","pressed","ogMetaData","STRINGS","colors","select","palette","color","ui","imageNotFound","setImageNotFound","styles","container","backgroundColor","background","messageContainer","textMsg","Boolean","updatedAt","textEdited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","openURL","url","catch","ogImageContainer","dark","background500","light","background200","ogImage","onBackground02","uri","defaultImage","ogContainer","background400","background100","onBackground01","ogTitle","title","description","ogDesc","borderRadius","overflow","paddingVertical","paddingHorizontal","paddingTop","paddingBottom","width","height","marginBottom","lineHeight"],"sources":["OpenGraphUserMessage.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Linking, TouchableOpacity, View } from 'react-native';\nimport type Sendbird from 'sendbird';\n\nimport {\n Icon,\n Image,\n Text,\n URLParsedText,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../../hooks/useContext';\nimport type { UserMessageProps } from './index';\n\ntype Props = UserMessageProps & {\n ogMetaData: Sendbird.OGMetaData;\n};\nconst OpenGraphUserMessage = ({ message, variant, pressed, ogMetaData }: Props) => {\n const { STRINGS } = useLocalization();\n const { colors, select, palette } = useUIKitTheme();\n const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];\n const [imageNotFound, setImageNotFound] = useState(false);\n return (\n <View style={[styles.container, { backgroundColor: color.background }]}>\n <View style={styles.messageContainer}>\n <URLParsedText body3 color={color.textMsg}>\n {message.message}\n {Boolean(message.updatedAt) && (\n <Text body3 color={color.textEdited}>\n {STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX}\n </Text>\n )}\n </URLParsedText>\n </View>\n <TouchableOpacity activeOpacity={0.7} onPress={() => Linking.openURL(ogMetaData.url).catch()}>\n <View\n style={[\n styles.ogImageContainer,\n { backgroundColor: select({ dark: palette.background500, light: palette.background200 }) },\n ]}\n >\n {conditionChaining(\n [imageNotFound],\n [\n <Icon containerStyle={styles.ogImage} icon={'thumbnail-none'} size={48} color={colors.onBackground02} />,\n <Image\n source={{ uri: ogMetaData.defaultImage?.url }}\n style={styles.ogImage}\n resizeMode={'cover'}\n onError={() => setImageNotFound(true)}\n />,\n ],\n )}\n </View>\n <View\n style={[\n styles.ogContainer,\n { backgroundColor: select({ dark: palette.background400, light: palette.background100 }) },\n ]}\n >\n <Text numberOfLines={3} body2 color={colors.onBackground01} style={styles.ogTitle}>\n {ogMetaData.title}\n </Text>\n {Boolean(ogMetaData.description) && (\n <Text numberOfLines={1} caption2 color={colors.onBackground01} style={styles.ogDesc}>\n {ogMetaData.description}\n </Text>\n )}\n <Text numberOfLines={1} caption2 color={colors.onBackground02}>\n {ogMetaData.url}\n </Text>\n </View>\n </TouchableOpacity>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n borderRadius: 16,\n overflow: 'hidden',\n },\n messageContainer: {\n paddingVertical: 6,\n paddingHorizontal: 12,\n },\n ogContainer: {\n paddingHorizontal: 12,\n paddingTop: 8,\n paddingBottom: 12,\n },\n ogImageContainer: {\n width: 240,\n height: 136,\n },\n ogImage: {\n width: '100%',\n height: '100%',\n },\n ogTitle: {\n marginBottom: 4,\n },\n ogDesc: {\n lineHeight: 14,\n marginBottom: 8,\n },\n});\n\nexport default OpenGraphUserMessage;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","Linking","TouchableOpacity","View","Icon","Image","Text","URLParsedText","createStyleSheet","useUIKitTheme","conditionChaining","useLocalization","OpenGraphUserMessage","message","variant","pressed","ogMetaData","STRINGS","colors","select","palette","color","ui","imageNotFound","setImageNotFound","styles","container","backgroundColor","background","messageContainer","textMsg","Boolean","updatedAt","textEdited","GROUP_CHANNEL","MESSAGE_BUBBLE_EDITED_POSTFIX","openURL","url","catch","ogImageContainer","dark","background500","light","background200","ogImage","onBackground02","uri","defaultImage","ogContainer","background400","background100","onBackground01","ogTitle","title","description","ogDesc","width","maxWidth","borderRadius","overflow","paddingVertical","paddingHorizontal","paddingTop","paddingBottom","flex","height","marginBottom","lineHeight"],"sources":["OpenGraphUserMessage.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Linking, TouchableOpacity, View } from 'react-native';\n\nimport type { OGMetaData } from '@sendbird/chat/message';\nimport {\n Icon,\n Image,\n Text,\n URLParsedText,\n createStyleSheet,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining } from '@sendbird/uikit-utils';\n\nimport { useLocalization } from '../../../hooks/useContext';\nimport type { UserMessageProps } from './index';\n\ntype Props = UserMessageProps & {\n ogMetaData: OGMetaData;\n};\nconst OpenGraphUserMessage = ({ message, variant, pressed, ogMetaData }: Props) => {\n const { STRINGS } = useLocalization();\n const { colors, select, palette } = useUIKitTheme();\n const color = colors.ui.message[variant][pressed ? 'pressed' : 'enabled'];\n const [imageNotFound, setImageNotFound] = useState(false);\n return (\n <View style={[styles.container, { backgroundColor: color.background }]}>\n <View style={styles.messageContainer}>\n <URLParsedText body3 color={color.textMsg}>\n {message.message}\n {Boolean(message.updatedAt) && (\n <Text body3 color={color.textEdited}>\n {STRINGS.GROUP_CHANNEL.MESSAGE_BUBBLE_EDITED_POSTFIX}\n </Text>\n )}\n </URLParsedText>\n </View>\n <TouchableOpacity activeOpacity={0.7} onPress={() => Linking.openURL(ogMetaData.url).catch()}>\n <View\n style={[\n styles.ogImageContainer,\n { backgroundColor: select({ dark: palette.background500, light: palette.background200 }) },\n ]}\n >\n {conditionChaining(\n [imageNotFound],\n [\n <Icon containerStyle={styles.ogImage} icon={'thumbnail-none'} size={48} color={colors.onBackground02} />,\n <Image\n source={{ uri: ogMetaData.defaultImage?.url }}\n style={styles.ogImage}\n resizeMode={'cover'}\n onError={() => setImageNotFound(true)}\n />,\n ],\n )}\n </View>\n <View\n style={[\n styles.ogContainer,\n { backgroundColor: select({ dark: palette.background400, light: palette.background100 }) },\n ]}\n >\n <Text numberOfLines={3} body2 color={colors.onBackground01} style={styles.ogTitle}>\n {ogMetaData.title}\n </Text>\n {Boolean(ogMetaData.description) && (\n <Text numberOfLines={1} caption2 color={colors.onBackground01} style={styles.ogDesc}>\n {ogMetaData.description}\n </Text>\n )}\n <Text numberOfLines={1} caption2 color={colors.onBackground02}>\n {ogMetaData.url}\n </Text>\n </View>\n </TouchableOpacity>\n </View>\n );\n};\n\nconst styles = createStyleSheet({\n container: {\n width: 240,\n maxWidth: 240,\n borderRadius: 16,\n overflow: 'hidden',\n },\n messageContainer: {\n paddingVertical: 6,\n paddingHorizontal: 12,\n },\n ogContainer: {\n paddingHorizontal: 12,\n paddingTop: 8,\n paddingBottom: 12,\n },\n ogImageContainer: {\n flex: 1,\n height: 136,\n },\n ogImage: {\n width: '100%',\n height: '100%',\n },\n ogTitle: {\n marginBottom: 4,\n },\n ogDesc: {\n lineHeight: 14,\n marginBottom: 8,\n },\n});\n\nexport default OpenGraphUserMessage;\n"],"mappings":"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"}
@@ -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":"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"}
@@ -1,7 +1,9 @@
1
1
  import React, { useEffect, useRef, useState } from 'react';
2
2
  import { Platform } from 'react-native';
3
3
  import { SafeAreaProvider } from 'react-native-safe-area-context';
4
- import Sendbird from 'sendbird';
4
+ import Sendbird from '@sendbird/chat';
5
+ import { GroupChannelModule } from '@sendbird/chat/groupChannel';
6
+ import { OpenChannelModule } from '@sendbird/chat/openChannel';
5
7
  import { DialogProvider, Header, HeaderStyleProvider, LightUIKitTheme, ToastProvider, UIKitThemeProvider } from '@sendbird/uikit-react-native-foundation';
6
8
  import { LocalizationProvider } from '../contexts/Localization';
7
9
  import { PlatformServiceProvider } from '../contexts/PlatformService';
@@ -33,30 +35,23 @@ const SendbirdUIKitContainer = _ref => {
33
35
 
34
36
  const getSendbirdSDK = () => {
35
37
  let sdk;
36
-
37
- if (chatOptions !== null && chatOptions !== void 0 && chatOptions.localCacheStorage) {
38
- sdk = new Sendbird({
39
- appId,
40
- localCacheEnabled: true
41
- });
42
- sdk.useAsyncStorageAsDatabase(new InternalLocalCacheStorage(chatOptions.localCacheStorage));
43
- } else {
44
- sdk = new Sendbird({
45
- appId
46
- });
47
- }
38
+ sdk = Sendbird.init({
39
+ appId,
40
+ modules: [new GroupChannelModule(), new OpenChannelModule()],
41
+ localCacheEnabled: Boolean(chatOptions === null || chatOptions === void 0 ? void 0 : chatOptions.localCacheStorage),
42
+ // @ts-ignore
43
+ useAsyncStorageStore: chatOptions !== null && chatOptions !== void 0 && chatOptions.localCacheStorage ? new InternalLocalCacheStorage(chatOptions.localCacheStorage) : undefined
44
+ });
48
45
 
49
46
  if (chatOptions !== null && chatOptions !== void 0 && chatOptions.onInitialized) {
50
47
  sdk = chatOptions === null || chatOptions === void 0 ? void 0 : chatOptions.onInitialized(sdk);
51
48
  }
52
49
 
53
50
  if (SendbirdUIKit.VERSION) {
54
- // @ts-ignore
55
51
  sdk.addExtension('sb_uikit', SendbirdUIKit.VERSION);
56
52
  }
57
53
 
58
54
  if (SendbirdUIKit.PLATFORM) {
59
- // @ts-ignore
60
55
  sdk.addExtension('device-os-platform', SendbirdUIKit.PLATFORM);
61
56
  }
62
57
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","useRef","useState","Platform","SafeAreaProvider","Sendbird","DialogProvider","Header","HeaderStyleProvider","LightUIKitTheme","ToastProvider","UIKitThemeProvider","LocalizationProvider","PlatformServiceProvider","SendbirdChatProvider","useLocalization","InternalLocalCacheStorage","StringSetEn","SBUDynamicModule","VERSION","InternalErrorBoundaryContainer","NetInfo","get","SendbirdUIKit","Object","freeze","PLATFORM","OS","toLowerCase","SendbirdUIKitContainer","children","appId","chatOptions","platformServices","localization","styles","toast","errorBoundary","unsubscribes","current","getSendbirdSDK","sdk","localCacheStorage","localCacheEnabled","useAsyncStorageAsDatabase","onInitialized","addExtension","addEventListener","listener","callback","callbackType","unsubscribe","state","online","Boolean","isConnected","isInternetReachable","push","setOnlineListener","onOnline","setOfflineListener","onOffline","sdkInstance","setSdkInstance","forEach","u","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","stringSet","file","notification","clipboard","media","theme","HeaderComponent","defaultHeaderTitleAlign","statusBarTranslucent","dismissTimeout","LocalizedDialogProvider","STRINGS","alert","ok","DIALOG","ALERT_DEFAULT_OK","prompt","PROMPT_DEFAULT_OK","cancel","PROMPT_DEFAULT_CANCEL","placeholder","PROMPT_DEFAULT_PLACEHOLDER"],"sources":["SendbirdUIKitContainer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform } from 'react-native';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\nimport Sendbird from 'sendbird';\n\nimport type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n DialogProvider,\n Header,\n HeaderStyleProvider,\n LightUIKitTheme,\n ToastProvider,\n UIKitThemeProvider,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nimport { LocalizationProvider } from '../contexts/Localization';\nimport { PlatformServiceProvider } from '../contexts/PlatformService';\nimport { SendbirdChatProvider } from '../contexts/SendbirdChat';\nimport { useLocalization } from '../hooks/useContext';\nimport InternalLocalCacheStorage from '../libs/InternalLocalCacheStorage';\nimport StringSetEn from '../localization/StringSet.en';\nimport type { StringSet } from '../localization/StringSet.type';\nimport SBUDynamicModule from '../platform/dynamicModule';\nimport type {\n ClipboardServiceInterface,\n FileServiceInterface,\n MediaServiceInterface,\n NotificationServiceInterface,\n} from '../platform/types';\nimport type { ErrorBoundaryProps, LocalCacheStorage } from '../types';\nimport VERSION from '../version';\nimport InternalErrorBoundaryContainer from './InternalErrorBoundaryContainer';\n\nconst NetInfo = SBUDynamicModule.get('@react-native-community/netinfo', 'warn');\n\nexport const SendbirdUIKit = Object.freeze({\n VERSION,\n PLATFORM: Platform.OS.toLowerCase(),\n});\n\nexport type SendbirdUIKitContainerProps = React.PropsWithChildren<{\n appId: string;\n platformServices: {\n file: FileServiceInterface;\n notification: NotificationServiceInterface;\n clipboard: ClipboardServiceInterface;\n media?: MediaServiceInterface;\n };\n chatOptions?: {\n localCacheStorage?: LocalCacheStorage;\n onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;\n enableAutoPushTokenRegistration?: boolean;\n enableChannelListTypingIndicator?: boolean;\n enableChannelListMessageReceiptStatus?: boolean;\n };\n localization?: {\n stringSet?: StringSet;\n };\n styles?: {\n theme?: UIKitTheme;\n statusBarTranslucent?: boolean;\n defaultHeaderTitleAlign?: 'left' | 'center';\n defaultHeaderHeight?: number;\n HeaderComponent?: HeaderStyleContextType['HeaderComponent'];\n };\n toast?: {\n dismissTimeout?: number;\n };\n errorBoundary?: {\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) => JSX.Element;\n };\n}>;\n\nconst SendbirdUIKitContainer = ({\n children,\n appId,\n chatOptions,\n platformServices,\n localization,\n styles,\n toast,\n errorBoundary,\n}: SendbirdUIKitContainerProps) => {\n const unsubscribes = useRef<(() => void)[]>([]).current;\n const getSendbirdSDK = () => {\n let sdk: SendbirdChatSDK;\n\n if (chatOptions?.localCacheStorage) {\n sdk = new Sendbird({ appId, localCacheEnabled: true });\n sdk.useAsyncStorageAsDatabase(new InternalLocalCacheStorage(chatOptions.localCacheStorage));\n } else {\n sdk = new Sendbird({ appId });\n }\n\n if (chatOptions?.onInitialized) {\n sdk = chatOptions?.onInitialized(sdk);\n }\n\n if (SendbirdUIKit.VERSION) {\n // @ts-ignore\n sdk.addExtension('sb_uikit', SendbirdUIKit.VERSION);\n }\n if (SendbirdUIKit.PLATFORM) {\n // @ts-ignore\n sdk.addExtension('device-os-platform', SendbirdUIKit.PLATFORM);\n }\n\n if (NetInfo?.addEventListener) {\n const listener = (callback: () => void, callbackType: 'online' | 'offline') => {\n const unsubscribe = NetInfo.addEventListener((state) => {\n const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);\n if (online && callbackType === 'online') callback();\n if (!online && callbackType === 'offline') callback();\n });\n unsubscribes.push(unsubscribe);\n return unsubscribe;\n };\n sdk.setOnlineListener?.((onOnline) => listener(onOnline, 'online'));\n sdk.setOfflineListener?.((onOffline) => listener(onOffline, 'offline'));\n }\n return sdk;\n };\n\n const [sdkInstance, setSdkInstance] = useState<SendbirdChatSDK>(getSendbirdSDK);\n\n useEffect(() => {\n setSdkInstance(getSendbirdSDK);\n return () => {\n unsubscribes.forEach((u) => {\n try {\n u();\n } catch {}\n });\n };\n }, [appId, chatOptions?.localCacheStorage]);\n\n return (\n <SafeAreaProvider>\n <SendbirdChatProvider\n sdkInstance={sdkInstance}\n enableAutoPushTokenRegistration={chatOptions?.enableAutoPushTokenRegistration ?? true}\n enableChannelListTypingIndicator={chatOptions?.enableChannelListTypingIndicator ?? false}\n enableChannelListMessageReceiptStatus={chatOptions?.enableChannelListMessageReceiptStatus ?? false}\n >\n <LocalizationProvider stringSet={localization?.stringSet ?? StringSetEn}>\n <PlatformServiceProvider\n fileService={platformServices.file}\n notificationService={platformServices.notification}\n clipboardService={platformServices.clipboard}\n mediaService={platformServices.media}\n >\n <UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>\n <HeaderStyleProvider\n HeaderComponent={styles?.HeaderComponent ?? Header}\n defaultTitleAlign={styles?.defaultHeaderTitleAlign ?? 'left'}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <LocalizedDialogProvider>\n <ToastProvider dismissTimeout={toast?.dismissTimeout}>\n <InternalErrorBoundaryContainer {...errorBoundary}>{children}</InternalErrorBoundaryContainer>\n </ToastProvider>\n </LocalizedDialogProvider>\n </HeaderStyleProvider>\n </UIKitThemeProvider>\n </PlatformServiceProvider>\n </LocalizationProvider>\n </SendbirdChatProvider>\n </SafeAreaProvider>\n );\n};\n\nconst LocalizedDialogProvider = ({ children }: React.PropsWithChildren) => {\n const { STRINGS } = useLocalization();\n return (\n <DialogProvider\n defaultLabels={{\n alert: {\n ok: STRINGS.DIALOG.ALERT_DEFAULT_OK,\n },\n prompt: {\n ok: STRINGS.DIALOG.PROMPT_DEFAULT_OK,\n cancel: STRINGS.DIALOG.PROMPT_DEFAULT_CANCEL,\n placeholder: STRINGS.DIALOG.PROMPT_DEFAULT_PLACEHOLDER,\n },\n }}\n >\n {children}\n </DialogProvider>\n );\n};\n\nexport default SendbirdUIKitContainer;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useEffect","useRef","useState","Platform","SafeAreaProvider","Sendbird","GroupChannelModule","OpenChannelModule","DialogProvider","Header","HeaderStyleProvider","LightUIKitTheme","ToastProvider","UIKitThemeProvider","LocalizationProvider","PlatformServiceProvider","SendbirdChatProvider","useLocalization","InternalLocalCacheStorage","StringSetEn","SBUDynamicModule","VERSION","InternalErrorBoundaryContainer","NetInfo","get","SendbirdUIKit","Object","freeze","PLATFORM","OS","toLowerCase","SendbirdUIKitContainer","children","appId","chatOptions","platformServices","localization","styles","toast","errorBoundary","unsubscribes","current","getSendbirdSDK","sdk","init","modules","localCacheEnabled","Boolean","localCacheStorage","useAsyncStorageStore","undefined","onInitialized","addExtension","addEventListener","listener","callback","callbackType","unsubscribe","state","online","isConnected","isInternetReachable","push","setOnlineListener","onOnline","setOfflineListener","onOffline","sdkInstance","setSdkInstance","forEach","u","enableAutoPushTokenRegistration","enableChannelListTypingIndicator","enableChannelListMessageReceiptStatus","stringSet","file","notification","clipboard","media","theme","HeaderComponent","defaultHeaderTitleAlign","statusBarTranslucent","dismissTimeout","LocalizedDialogProvider","STRINGS","alert","ok","DIALOG","ALERT_DEFAULT_OK","prompt","PROMPT_DEFAULT_OK","cancel","PROMPT_DEFAULT_CANCEL","placeholder","PROMPT_DEFAULT_PLACEHOLDER"],"sources":["SendbirdUIKitContainer.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport { Platform } from 'react-native';\nimport { SafeAreaProvider } from 'react-native-safe-area-context';\n\nimport Sendbird from '@sendbird/chat';\nimport { GroupChannelModule } from '@sendbird/chat/groupChannel';\nimport { OpenChannelModule } from '@sendbird/chat/openChannel';\nimport type { HeaderStyleContextType, UIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n DialogProvider,\n Header,\n HeaderStyleProvider,\n LightUIKitTheme,\n ToastProvider,\n UIKitThemeProvider,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdChatSDK } from '@sendbird/uikit-utils';\n\nimport { LocalizationProvider } from '../contexts/Localization';\nimport { PlatformServiceProvider } from '../contexts/PlatformService';\nimport { SendbirdChatProvider } from '../contexts/SendbirdChat';\nimport { useLocalization } from '../hooks/useContext';\nimport InternalLocalCacheStorage from '../libs/InternalLocalCacheStorage';\nimport StringSetEn from '../localization/StringSet.en';\nimport type { StringSet } from '../localization/StringSet.type';\nimport SBUDynamicModule from '../platform/dynamicModule';\nimport type {\n ClipboardServiceInterface,\n FileServiceInterface,\n MediaServiceInterface,\n NotificationServiceInterface,\n} from '../platform/types';\nimport type { ErrorBoundaryProps, LocalCacheStorage } from '../types';\nimport VERSION from '../version';\nimport InternalErrorBoundaryContainer from './InternalErrorBoundaryContainer';\n\nconst NetInfo = SBUDynamicModule.get('@react-native-community/netinfo', 'warn');\n\nexport const SendbirdUIKit = Object.freeze({\n VERSION,\n PLATFORM: Platform.OS.toLowerCase(),\n});\n\nexport type SendbirdUIKitContainerProps = React.PropsWithChildren<{\n appId: string;\n platformServices: {\n file: FileServiceInterface;\n notification: NotificationServiceInterface;\n clipboard: ClipboardServiceInterface;\n media?: MediaServiceInterface;\n };\n chatOptions?: {\n localCacheStorage?: LocalCacheStorage;\n onInitialized?: (sdkInstance: SendbirdChatSDK) => SendbirdChatSDK;\n enableAutoPushTokenRegistration?: boolean;\n enableChannelListTypingIndicator?: boolean;\n enableChannelListMessageReceiptStatus?: boolean;\n };\n localization?: {\n stringSet?: StringSet;\n };\n styles?: {\n theme?: UIKitTheme;\n statusBarTranslucent?: boolean;\n defaultHeaderTitleAlign?: 'left' | 'center';\n defaultHeaderHeight?: number;\n HeaderComponent?: HeaderStyleContextType['HeaderComponent'];\n };\n toast?: {\n dismissTimeout?: number;\n };\n errorBoundary?: {\n onError?: (props: ErrorBoundaryProps) => void;\n ErrorInfoComponent?: (props: ErrorBoundaryProps) => JSX.Element;\n };\n}>;\n\nconst SendbirdUIKitContainer = ({\n children,\n appId,\n chatOptions,\n platformServices,\n localization,\n styles,\n toast,\n errorBoundary,\n}: SendbirdUIKitContainerProps) => {\n const unsubscribes = useRef<(() => void)[]>([]).current;\n const getSendbirdSDK = () => {\n let sdk: SendbirdChatSDK;\n\n sdk = Sendbird.init({\n appId,\n modules: [new GroupChannelModule(), new OpenChannelModule()],\n localCacheEnabled: Boolean(chatOptions?.localCacheStorage),\n // @ts-ignore\n useAsyncStorageStore: chatOptions?.localCacheStorage\n ? new InternalLocalCacheStorage(chatOptions.localCacheStorage)\n : undefined,\n });\n\n if (chatOptions?.onInitialized) {\n sdk = chatOptions?.onInitialized(sdk);\n }\n\n if (SendbirdUIKit.VERSION) {\n sdk.addExtension('sb_uikit', SendbirdUIKit.VERSION);\n }\n\n if (SendbirdUIKit.PLATFORM) {\n sdk.addExtension('device-os-platform', SendbirdUIKit.PLATFORM);\n }\n\n if (NetInfo?.addEventListener) {\n const listener = (callback: () => void, callbackType: 'online' | 'offline') => {\n const unsubscribe = NetInfo.addEventListener((state) => {\n const online = Boolean(state.isConnected) || Boolean(state.isInternetReachable);\n if (online && callbackType === 'online') callback();\n if (!online && callbackType === 'offline') callback();\n });\n unsubscribes.push(unsubscribe);\n return unsubscribe;\n };\n sdk.setOnlineListener?.((onOnline) => listener(onOnline, 'online'));\n sdk.setOfflineListener?.((onOffline) => listener(onOffline, 'offline'));\n }\n return sdk;\n };\n\n const [sdkInstance, setSdkInstance] = useState<SendbirdChatSDK>(getSendbirdSDK);\n\n useEffect(() => {\n setSdkInstance(getSendbirdSDK);\n return () => {\n unsubscribes.forEach((u) => {\n try {\n u();\n } catch {}\n });\n };\n }, [appId, chatOptions?.localCacheStorage]);\n\n return (\n <SafeAreaProvider>\n <SendbirdChatProvider\n sdkInstance={sdkInstance}\n enableAutoPushTokenRegistration={chatOptions?.enableAutoPushTokenRegistration ?? true}\n enableChannelListTypingIndicator={chatOptions?.enableChannelListTypingIndicator ?? false}\n enableChannelListMessageReceiptStatus={chatOptions?.enableChannelListMessageReceiptStatus ?? false}\n >\n <LocalizationProvider stringSet={localization?.stringSet ?? StringSetEn}>\n <PlatformServiceProvider\n fileService={platformServices.file}\n notificationService={platformServices.notification}\n clipboardService={platformServices.clipboard}\n mediaService={platformServices.media}\n >\n <UIKitThemeProvider theme={styles?.theme ?? LightUIKitTheme}>\n <HeaderStyleProvider\n HeaderComponent={styles?.HeaderComponent ?? Header}\n defaultTitleAlign={styles?.defaultHeaderTitleAlign ?? 'left'}\n statusBarTranslucent={styles?.statusBarTranslucent ?? true}\n >\n <LocalizedDialogProvider>\n <ToastProvider dismissTimeout={toast?.dismissTimeout}>\n <InternalErrorBoundaryContainer {...errorBoundary}>{children}</InternalErrorBoundaryContainer>\n </ToastProvider>\n </LocalizedDialogProvider>\n </HeaderStyleProvider>\n </UIKitThemeProvider>\n </PlatformServiceProvider>\n </LocalizationProvider>\n </SendbirdChatProvider>\n </SafeAreaProvider>\n );\n};\n\nconst LocalizedDialogProvider = ({ children }: React.PropsWithChildren) => {\n const { STRINGS } = useLocalization();\n return (\n <DialogProvider\n defaultLabels={{\n alert: {\n ok: STRINGS.DIALOG.ALERT_DEFAULT_OK,\n },\n prompt: {\n ok: STRINGS.DIALOG.PROMPT_DEFAULT_OK,\n cancel: STRINGS.DIALOG.PROMPT_DEFAULT_CANCEL,\n placeholder: STRINGS.DIALOG.PROMPT_DEFAULT_PLACEHOLDER,\n },\n }}\n >\n {children}\n </DialogProvider>\n );\n};\n\nexport default SendbirdUIKitContainer;\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import React, { useCallback, useEffect, useState } from 'react';
2
2
  import { AppState } from 'react-native';
3
3
  import { useAppFeatures } from '@sendbird/uikit-chat-hooks';
4
- import { useForceUpdate } from '@sendbird/uikit-utils';
4
+ import { confirmAndMarkAsDelivered, useForceUpdate } from '@sendbird/uikit-utils';
5
5
  export const SendbirdChatContext = /*#__PURE__*/React.createContext(null);
6
6
  export const SendbirdChatProvider = _ref => {
7
7
  let {
@@ -23,29 +23,29 @@ export const SendbirdChatProvider = _ref => {
23
23
  const updateCurrentUserInfo = useCallback(async (nickname, profile) => {
24
24
  let user = currentUser;
25
25
  if (!user) throw new Error('Current user is not defined, please connect using `useConnection()` hook first');
26
+ const params = {
27
+ nickname
28
+ };
26
29
 
27
- if (typeof profile === 'undefined') {
28
- user = await sdkInstance.updateCurrentUserInfo(nickname, sdkInstance.currentUser.profileUrl);
29
- } else if (typeof profile === 'string') {
30
- user = await sdkInstance.updateCurrentUserInfo(nickname, profile);
30
+ if (typeof profile === 'string') {
31
+ params.profileUrl = profile;
31
32
  } else if (typeof profile === 'object') {
32
- user = await sdkInstance.updateCurrentUserInfoWithProfileImage(nickname, profile);
33
+ params.profileImage = profile;
33
34
  } else {
34
35
  throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);
35
36
  }
36
37
 
38
+ user = await sdkInstance.updateCurrentUserInfo(params);
37
39
  setCurrentUser(user);
38
40
  return user;
39
41
  }, [sdkInstance, currentUser, setCurrentUser]);
40
42
  const markAsDeliveredWithChannel = useCallback(channel => {
41
- if (appFeatures.deliveryReceiptEnabled && channel.unreadMessageCount > 0) {
42
- sdkInstance.markAsDelivered(channel.url);
43
- }
43
+ if (appFeatures.deliveryReceiptEnabled) confirmAndMarkAsDelivered(sdkInstance, channel);
44
44
  }, [sdkInstance, appFeatures.deliveryReceiptEnabled]);
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.connectionState === 'CLOSED' && sdkInstance.setForegroundState();else sdkInstance.connectionState === '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","confirmAndMarkAsDelivered","useForceUpdate","SendbirdChatContext","createContext","SendbirdChatProvider","children","sdkInstance","enableAutoPushTokenRegistration","enableChannelListMessageReceiptStatus","enableChannelListTypingIndicator","currentUser","_setCurrentUser","forceUpdate","appFeatures","setCurrentUser","user","updateCurrentUserInfo","nickname","profile","Error","params","profileUrl","profileImage","markAsDeliveredWithChannel","channel","deliveryReceiptEnabled","listener","status","connectionState","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 {\n SendbirdChatSDK,\n SendbirdGroupChannel,\n SendbirdUser,\n SendbirdUserUpdateParams,\n} from '@sendbird/uikit-utils';\nimport { confirmAndMarkAsDelivered, 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 const params: SendbirdUserUpdateParams = { nickname };\n\n if (typeof profile === 'string') {\n params.profileUrl = profile;\n } else if (typeof profile === 'object') {\n params.profileImage = profile;\n } else {\n throw new Error(`Cannot update profile, not supported profile type(${typeof profile})`);\n }\n\n user = await sdkInstance.updateCurrentUserInfo(params);\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) confirmAndMarkAsDelivered(sdkInstance, channel);\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.connectionState === 'CLOSED' && sdkInstance.setForegroundState();\n else sdkInstance.connectionState === '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":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AACA,SAASC,QAAT,EAAmBC,gBAAnB,EAAqCC,IAArC,QAAiD,cAAjD;AAEA,SACEC,IADF,EAEEC,SAFF,EAGEC,gBAHF,EAIEC,QAJF,EAKEC,cALF,EAMEC,QANF,EAOEC,aAPF,QAQO,yCARP;AASA,SAASC,iBAAT,QAAkC,uBAAlC;AAEA,SAASC,eAAT,EAA0BC,kBAA1B,QAAoD,8BAApD;AACA,OAAOC,QAAP,MAAqB,2BAArB;AACA,OAAOC,QAAP,MAAqB,2BAArB;;AAQA,MAAMC,SAAS,GAAG,QAAuF;EAAA,IAAtF;IAAEC,iBAAF;IAAqBC,iBAArB;IAAwCC,IAAxC;IAA8CC,OAA9C;IAAuDC;EAAvD,CAAsF;EACvG,MAAM;IAAEC;EAAF,IAAcV,eAAe,EAAnC;EACA,MAAM;IAAEW;EAAF,IAAkBV,kBAAkB,EAA1C;EACA,MAAM;IAAEW;EAAF,IAAad,aAAa,EAAhC;EACA,MAAM;IAAEe;EAAF,IAAgBjB,cAAc,EAApC;EACA,MAAM;IAAEkB;EAAF,IAAYnB,QAAQ,EAA1B;EACA,MAAMoB,KAAK,GAAGlB,QAAQ,EAAtB;;EAEA,MAAMmB,WAAW,GAAG,MAAM;IACxBX,iBAAiB,CAACE,IAAD,CAAjB,CAAwBU,KAAxB,CAA8B,MAAMF,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcC,cAAzB,EAAyC,OAAzC,CAApC;IACAZ,OAAO,CAAC,EAAD,CAAP;EACD,CAHD;;EAIA,MAAMa,iBAAiB,GAAG,MAAM;IAC9BR,SAAS,CAAC;MACRS,UAAU,EAAE,CACV;QACEC,KAAK,EAAEb,OAAO,CAACc,aAAR,CAAsBC,wBAD/B;QAEEC,IAAI,EAAE,QAFR;QAGEC,OAAO,EAAE,YAAY;UACnB,MAAMC,KAAK,GAAG,MAAMjB,WAAW,CAACkB,UAAZ,CAAuB;YACzCC,SAAS,EAAE,KAD8B;YAEzCC,aAAa,EAAGC,KAAD,IAAW;cACxB,IAAIA,KAAK,CAACC,IAAN,KAAe/B,QAAQ,CAACgC,IAAT,CAAcC,sBAAjC,EAAyD;gBACvDrB,KAAK,CAAC;kBACJS,KAAK,EAAEb,OAAO,CAAC0B,MAAR,CAAeC,uBADlB;kBAEJC,OAAO,EAAE5B,OAAO,CAAC0B,MAAR,CAAeG,yBAAf,CAAyC,QAAzC,EAAmD,aAAnD,CAFL;kBAGJC,OAAO,EAAE,CAAC;oBAAEjC,IAAI,EAAEG,OAAO,CAAC0B,MAAR,CAAeK,oBAAvB;oBAA6Cd,OAAO,EAAE,MAAMxB,QAAQ,CAACuC,YAAT;kBAA5D,CAAD;gBAHL,CAAD,CAAL;cAKD,CAND,MAMO;gBACL3B,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcwB,iBAAzB,EAA4C,OAA5C;cACD;YACF;UAZwC,CAAvB,CAApB;;UAeA,IAAIf,KAAJ,EAAW;YACTtB,iBAAiB,CAACsB,KAAD,CAAjB,CAAyBX,KAAzB,CAA+B,MAAMF,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcC,cAAzB,EAAyC,OAAzC,CAArC;UACD;QACF;MAtBH,CADU,EAyBV;QACEG,KAAK,EAAEb,OAAO,CAACc,aAAR,CAAsBoB,+BAD/B;QAEElB,IAAI,EAAE,OAFR;QAGEC,OAAO,EAAE,YAAY;UACnB,MAAMC,KAAK,GAAG,MAAMjB,WAAW,CAACkC,gBAAZ,CAA6B;YAC/CC,cAAc,EAAE,CAD+B;YAE/ChB,SAAS,EAAE,KAFoC;YAG/CC,aAAa,EAAGC,KAAD,IAAW;cACxB,IAAIA,KAAK,CAACC,IAAN,KAAe/B,QAAQ,CAACgC,IAAT,CAAcC,sBAAjC,EAAyD;gBACvDrB,KAAK,CAAC;kBACJS,KAAK,EAAEb,OAAO,CAAC0B,MAAR,CAAeC,uBADlB;kBAEJC,OAAO,EAAE5B,OAAO,CAAC0B,MAAR,CAAeG,yBAAf,CAAyC,gBAAzC,EAA2D,aAA3D,CAFL;kBAGJC,OAAO,EAAE,CAAC;oBAAEjC,IAAI,EAAEG,OAAO,CAAC0B,MAAR,CAAeK,oBAAvB;oBAA6Cd,OAAO,EAAE,MAAMxB,QAAQ,CAACuC,YAAT;kBAA5D,CAAD;gBAHL,CAAD,CAAL;cAKD,CAND,MAMO;gBACL3B,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAc4B,wBAAzB,EAAmD,OAAnD;cACD;YACF;UAb8C,CAA7B,CAApB;;UAgBA,IAAInB,KAAK,IAAIA,KAAK,CAAC,CAAD,CAAlB,EAAuB;YACrBtB,iBAAiB,CAACsB,KAAK,CAAC,CAAD,CAAN,CAAjB,CAA4BX,KAA5B,CAAkC,MAAMF,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcC,cAAzB,EAAyC,OAAzC,CAAxC;UACD;QACF;MAvBH,CAzBU,EAkDV;QACEG,KAAK,EAAEb,OAAO,CAACc,aAAR,CAAsBwB,uBAD/B;QAEEtB,IAAI,EAAE,UAFR;QAGEC,OAAO,EAAE,YAAY;UACnB,MAAMsB,IAAI,GAAG,MAAMtC,WAAW,CAACuC,YAAZ,CAAyB;YAC1CnB,aAAa,EAAE,MAAMhB,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcgC,gBAAzB,EAA2C,OAA3C;UADqB,CAAzB,CAAnB;;UAIA,IAAIF,IAAJ,EAAU;YACR3C,iBAAiB,CAAC2C,IAAD,CAAjB,CAAwBhC,KAAxB,CAA8B,MAAMF,KAAK,CAACG,IAAN,CAAWR,OAAO,CAACS,KAAR,CAAcC,cAAzB,EAAyC,OAAzC,CAApC;UACD;QACF;MAXH,CAlDU;IADJ,CAAD,CAAT;EAkED,CAnED;;EAqEA,oBACE,oBAAC,IAAD;IAAM,KAAK,EAAEgC,MAAM,CAACC;EAApB,gBACE,oBAAC,gBAAD;IAAkB,OAAO,EAAEhC,iBAA3B;IAA8C,QAAQ,EAAEZ;EAAxD,gBACE,oBAAC,IAAD;IACE,KAAK,EAAEA,QAAQ,GAAGG,MAAM,CAAC0C,EAAP,CAAUC,KAAV,CAAgBC,OAAhB,CAAwB/C,QAAxB,CAAiCgD,SAApC,GAAgD7C,MAAM,CAAC0C,EAAP,CAAUC,KAAV,CAAgBC,OAAhB,CAAwBE,MAAxB,CAA+BD,SADhG;IAEE,IAAI,EAAE,KAFR;IAGE,IAAI,EAAE,EAHR;IAIE,cAAc,EAAEL,MAAM,CAACO;EAJzB,EADF,CADF,eASE,oBAAC,SAAD;IACE,SAAS,MADX;IAEE,QAAQ,EAAE,CAAClD,QAFb;IAGE,KAAK,EAAEF,IAHT;IAIE,YAAY,EAAEC,OAJhB;IAKE,KAAK,EAAE4C,MAAM,CAACG,KALhB;IAME,WAAW,EAAExD,iBAAiB,CAC5B,CAACU,QAAD,CAD4B,EAE5B,CAACC,OAAO,CAACc,aAAR,CAAsBoC,0BAAvB,EAAmDlD,OAAO,CAACc,aAAR,CAAsBqC,wBAAzE,CAF4B;EANhC,EATF,EAoBGC,OAAO,CAACvD,IAAI,CAACwD,IAAL,EAAD,CAAP,iBACC,oBAAC,gBAAD;IAAkB,OAAO,EAAE/C,WAA3B;IAAwC,QAAQ,EAAEP;EAAlD,gBACE,oBAAC,IAAD;IACE,KAAK,EAAEA,QAAQ,GAAGG,MAAM,CAAC0C,EAAP,CAAUC,KAAV,CAAgBC,OAAhB,CAAwB/C,QAAxB,CAAiCgD,SAApC,GAAgD7C,MAAM,CAAC0C,EAAP,CAAUC,KAAV,CAAgBC,OAAhB,CAAwBE,MAAxB,CAA+BD,SADhG;IAEE,IAAI,EAAE,MAFR;IAGE,IAAI,EAAE,EAHR;IAIE,cAAc,EAAEL,MAAM,CAACY;EAJzB,EADF,CArBJ,CADF;AAiCD,CAlHD;;AAoHA,MAAMZ,MAAM,GAAG1D,gBAAgB,CAAC;EAC9B2D,kBAAkB,EAAE;IAClBY,eAAe,EAAE,EADC;IAElBC,iBAAiB,EAAE,EAFD;IAGlBC,UAAU,EAAE,QAHM;IAIlBC,aAAa,EAAE;EAJG,CADU;EAO9Bb,KAAK,EAAE;IACLc,IAAI,EAAE,CADD;IAELC,WAAW,EAAE,CAFR;IAGLC,SAAS,EAAE,EAHN;IAILC,SAAS,EAAE,KAAKnF,QAAQ,CAACoF,MAAT,CAAgB;MAAEC,GAAG,EAAE,GAAP;MAAYlB,OAAO,EAAE;IAArB,CAAhB,CAJX;IAKLmB,YAAY,EAAE;EALT,CAPuB;EAc9BhB,UAAU,EAAE;IACVW,WAAW,EAAE,CADH;IAEVM,OAAO,EAAE;EAFC,CAdkB;EAkB9BZ,QAAQ,EAAE;IACRa,UAAU,EAAE,CADJ;IAERD,OAAO,EAAE;EAFD;AAlBoB,CAAD,CAA/B;AAwBA,eAAexE,SAAf"}
@@ -4,7 +4,7 @@ import React, { useContext, useEffect, useRef, useState } from 'react';
4
4
  import { KeyboardAvoidingView, Platform, View } from 'react-native';
5
5
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
6
6
  import { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
7
- import { groupChannelChatUnavailable, useIIFE } from '@sendbird/uikit-utils';
7
+ import { isGroupChannelChatUnavailable, useIIFE } from '@sendbird/uikit-utils';
8
8
  import { GroupChannelContexts } from '../../module/moduleContext';
9
9
  import EditInput from './EditInput';
10
10
  import SendInput from './SendInput';
@@ -32,18 +32,18 @@ const GroupChannelInput = props => {
32
32
  } = useContext(GroupChannelContexts.Fragment);
33
33
  const [text, setText] = useState('');
34
34
  const textTmpRef = useRef('');
35
- const disabled = groupChannelChatUnavailable(channel);
35
+ const isChatUnavailable = isGroupChannelChatUnavailable(channel);
36
36
  useEffect(() => {
37
37
  if (text.length === 0) channel.endTyping();else channel.startTyping();
38
38
  }, [text]);
39
39
  useEffect(() => {
40
- if (disabled) {
40
+ if (isChatUnavailable) {
41
41
  textTmpRef.current = text;
42
42
  setText('');
43
43
  } else {
44
44
  setText(textTmpRef.current);
45
45
  }
46
- }, [disabled]);
46
+ }, [isChatUnavailable]);
47
47
  const inputMode = useIIFE(() => {
48
48
  if (!editMessage) return 'send';
49
49
  if (editMessage.isFileMessage()) return 'send';
@@ -66,7 +66,7 @@ const GroupChannelInput = props => {
66
66
  }, inputMode === 'send' && /*#__PURE__*/React.createElement(SendInput, _extends({}, props, {
67
67
  text: text,
68
68
  setText: setText,
69
- disabled: disabled
69
+ disabled: isChatUnavailable
70
70
  })), inputMode === 'edit' && editMessage && /*#__PURE__*/React.createElement(EditInput, _extends({}, props, {
71
71
  text: text,
72
72
  setText: setText,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","useEffect","useRef","useState","KeyboardAvoidingView","Platform","View","useSafeAreaInsets","useUIKitTheme","groupChannelChatUnavailable","useIIFE","GroupChannelContexts","EditInput","SendInput","KEYBOARD_AVOID_VIEW_BEHAVIOR","select","ios","default","undefined","GroupChannelInput","props","channel","left","right","bottom","colors","editMessage","setEditMessage","keyboardAvoidOffset","Fragment","text","setText","textTmpRef","disabled","length","endTyping","startTyping","current","inputMode","isFileMessage","paddingLeft","paddingRight","backgroundColor","background","justifyContent","width","SafeAreaBottom","height","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { groupChannelChatUnavailable, useIIFE } from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../module/moduleContext';\nimport type { GroupChannelProps } from '../../types';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const { channel } = props;\n\n const { left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { editMessage, setEditMessage, keyboardAvoidOffset = 0 } = useContext(GroupChannelContexts.Fragment);\n\n const [text, setText] = useState('');\n const textTmpRef = useRef('');\n const disabled = groupChannelChatUnavailable(channel);\n\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n\n useEffect(() => {\n if (disabled) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [disabled]);\n\n const inputMode = useIIFE(() => {\n if (!editMessage) return 'send';\n if (editMessage.isFileMessage()) return 'send';\n return 'edit';\n });\n\n return (\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View style={{ justifyContent: 'center', width: '100%' }}>\n {inputMode === 'send' && <SendInput {...props} text={text} setText={setText} disabled={disabled} />}\n {inputMode === 'edit' && editMessage && (\n <EditInput\n {...props}\n text={text}\n setText={setText}\n editMessage={editMessage}\n setEditMessage={setEditMessage}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n );\n};\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nexport default React.memo(GroupChannelInput);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useContext","useEffect","useRef","useState","KeyboardAvoidingView","Platform","View","useSafeAreaInsets","useUIKitTheme","isGroupChannelChatUnavailable","useIIFE","GroupChannelContexts","EditInput","SendInput","KEYBOARD_AVOID_VIEW_BEHAVIOR","select","ios","default","undefined","GroupChannelInput","props","channel","left","right","bottom","colors","editMessage","setEditMessage","keyboardAvoidOffset","Fragment","text","setText","textTmpRef","isChatUnavailable","length","endTyping","startTyping","current","inputMode","isFileMessage","paddingLeft","paddingRight","backgroundColor","background","justifyContent","width","SafeAreaBottom","height","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { useContext, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport { isGroupChannelChatUnavailable, useIIFE } from '@sendbird/uikit-utils';\n\nimport { GroupChannelContexts } from '../../module/moduleContext';\nimport type { GroupChannelProps } from '../../types';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const { channel } = props;\n\n const { left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { editMessage, setEditMessage, keyboardAvoidOffset = 0 } = useContext(GroupChannelContexts.Fragment);\n\n const [text, setText] = useState('');\n const textTmpRef = useRef('');\n const isChatUnavailable = isGroupChannelChatUnavailable(channel);\n\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n\n useEffect(() => {\n if (isChatUnavailable) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [isChatUnavailable]);\n\n const inputMode = useIIFE(() => {\n if (!editMessage) return 'send';\n if (editMessage.isFileMessage()) return 'send';\n return 'edit';\n });\n\n return (\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View style={{ justifyContent: 'center', width: '100%' }}>\n {inputMode === 'send' && <SendInput {...props} text={text} setText={setText} disabled={isChatUnavailable} />}\n {inputMode === 'edit' && editMessage && (\n <EditInput\n {...props}\n text={text}\n setText={setText}\n editMessage={editMessage}\n setEditMessage={setEditMessage}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n );\n};\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nexport default React.memo(GroupChannelInput);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatListProps } from 'react-native';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n SendbirdFileMessage,\n SendbirdFileMessageParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageParams,\n} from '@sendbird/uikit-utils';\n\nimport type { FileType } from '../../platform/types';\nimport type { CommonComponent } from '../../types';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n\n onBeforeSendFileMessage?: (\n params: SendbirdFileMessageParams,\n ) => SendbirdFileMessageParams | Promise<SendbirdFileMessageParams>;\n onBeforeSendUserMessage?: (\n params: SendbirdUserMessageParams,\n ) => SendbirdUserMessageParams | Promise<SendbirdUserMessageParams>;\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n queryCreator?: UseGroupChannelMessagesOptions['queryCreator'];\n\n /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/\n onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];\n };\n Header: {\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: SendbirdGroupChannel;\n messages: SendbirdMessage[];\n nextMessages: SendbirdMessage[];\n newMessagesFromMembers: SendbirdMessage[];\n onTopReached: () => void;\n onBottomReached: () => void;\n\n onResendFailedMessage: (failedMessage: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n channel: GroupChannelProps['MessageList']['channel'];\n currentUserId?: GroupChannelProps['MessageList']['currentUserId'];\n enableMessageGrouping: GroupChannelProps['MessageList']['enableMessageGrouping'];\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n\n /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/\n onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;\n };\n Input: {\n channel: SendbirdGroupChannel;\n onSendFileMessage: (file: FileType) => Promise<void>;\n onSendUserMessage: (text: string) => Promise<void>;\n onUpdateFileMessage: (editedFile: FileType, message: SendbirdFileMessage) => Promise<void>;\n onUpdateUserMessage: (editedText: string, message: SendbirdUserMessage) => Promise<void>;\n };\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n channel: SendbirdGroupChannel;\n editMessage?: SendbirdUserMessage | SendbirdFileMessage;\n setEditMessage: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n keyboardAvoidOffset?: number;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;\n"],"mappings":""}
1
+ {"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["import type React from 'react';\nimport type { FlatListProps } from 'react-native';\n\nimport type { UseGroupChannelMessagesOptions } from '@sendbird/uikit-chat-hooks';\nimport type {\n SendbirdFileMessage,\n SendbirdFileMessageCreateParams,\n SendbirdGroupChannel,\n SendbirdMessage,\n SendbirdUser,\n SendbirdUserMessage,\n SendbirdUserMessageCreateParams,\n} from '@sendbird/uikit-utils';\n\nimport type { FileType } from '../../platform/types';\nimport type { CommonComponent } from '../../types';\n\nexport interface GroupChannelProps {\n Fragment: {\n channel: SendbirdGroupChannel;\n onChannelDeleted: () => void;\n onPressHeaderLeft: GroupChannelProps['Header']['onPressHeaderLeft'];\n onPressHeaderRight: GroupChannelProps['Header']['onPressHeaderRight'];\n\n onBeforeSendFileMessage?: (\n params: SendbirdFileMessageCreateParams,\n ) => SendbirdFileMessageCreateParams | Promise<SendbirdFileMessageCreateParams>;\n onBeforeSendUserMessage?: (\n params: SendbirdUserMessageCreateParams,\n ) => SendbirdUserMessageCreateParams | Promise<SendbirdUserMessageCreateParams>;\n onPressMediaMessage?: GroupChannelProps['MessageList']['onPressMediaMessage'];\n\n renderMessage?: GroupChannelProps['MessageList']['renderMessage'];\n renderNewMessagesButton?: GroupChannelProps['MessageList']['renderNewMessagesButton'];\n renderScrollToBottomButton?: GroupChannelProps['MessageList']['renderScrollToBottomButton'];\n\n enableTypingIndicator?: GroupChannelProps['Provider']['enableTypingIndicator'];\n enableMessageGrouping?: GroupChannelProps['MessageList']['enableMessageGrouping'];\n\n keyboardAvoidOffset?: GroupChannelProps['Provider']['keyboardAvoidOffset'];\n flatListProps?: GroupChannelProps['MessageList']['flatListProps'];\n sortComparator?: UseGroupChannelMessagesOptions['sortComparator'];\n collectionCreator?: UseGroupChannelMessagesOptions['collectionCreator'];\n queryCreator?: UseGroupChannelMessagesOptions['queryCreator'];\n\n /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/\n onPressImageMessage?: GroupChannelProps['MessageList']['onPressImageMessage'];\n };\n Header: {\n onPressHeaderLeft: () => void;\n onPressHeaderRight: () => void;\n };\n MessageList: {\n enableMessageGrouping: boolean;\n currentUserId?: string;\n channel: SendbirdGroupChannel;\n messages: SendbirdMessage[];\n nextMessages: SendbirdMessage[];\n newMessagesFromMembers: SendbirdMessage[];\n onTopReached: () => void;\n onBottomReached: () => void;\n\n onResendFailedMessage: (failedMessage: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onDeleteMessage: (message: SendbirdUserMessage | SendbirdFileMessage) => Promise<void>;\n onPressMediaMessage?: (message: SendbirdFileMessage, deleteMessage: () => Promise<void>, uri: string) => void;\n\n renderMessage: (props: {\n message: SendbirdMessage;\n prevMessage?: SendbirdMessage;\n nextMessage?: SendbirdMessage;\n onPress?: () => void;\n onLongPress?: () => void;\n channel: GroupChannelProps['MessageList']['channel'];\n currentUserId?: GroupChannelProps['MessageList']['currentUserId'];\n enableMessageGrouping: GroupChannelProps['MessageList']['enableMessageGrouping'];\n }) => React.ReactElement | null;\n renderNewMessagesButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n newMessages: SendbirdMessage[];\n }>;\n renderScrollToBottomButton: null | CommonComponent<{\n visible: boolean;\n onPress: () => void;\n }>;\n flatListProps?: Omit<FlatListProps<SendbirdMessage>, 'data' | 'renderItem'>;\n\n /** @deprecated `onPressImageMessage` is deprecated, please use `onPressMediaMessage` instead **/\n onPressImageMessage?: (message: SendbirdFileMessage, uri: string) => void;\n };\n Input: {\n channel: SendbirdGroupChannel;\n onSendFileMessage: (file: FileType) => Promise<void>;\n onSendUserMessage: (text: string) => Promise<void>;\n onUpdateFileMessage: (editedFile: FileType, message: SendbirdFileMessage) => Promise<void>;\n onUpdateUserMessage: (editedText: string, message: SendbirdUserMessage) => Promise<void>;\n };\n Provider: {\n channel: SendbirdGroupChannel;\n enableTypingIndicator: boolean;\n keyboardAvoidOffset?: number;\n };\n}\n\n/**\n * Internal context for GroupChannel\n * For example, the developer can create a custom header\n * with getting data from the domain context\n * */\nexport interface GroupChannelContextsType {\n Fragment: React.Context<{\n headerTitle: string;\n channel: SendbirdGroupChannel;\n editMessage?: SendbirdUserMessage | SendbirdFileMessage;\n setEditMessage: (msg?: SendbirdUserMessage | SendbirdFileMessage) => void;\n keyboardAvoidOffset?: number;\n }>;\n TypingIndicator: React.Context<{\n typingUsers: SendbirdUser[];\n }>;\n}\nexport interface GroupChannelModule {\n Provider: CommonComponent<GroupChannelProps['Provider']>;\n Header: CommonComponent<GroupChannelProps['Header']>;\n MessageList: CommonComponent<GroupChannelProps['MessageList']>;\n Input: CommonComponent<GroupChannelProps['Input']>;\n StatusEmpty: CommonComponent;\n StatusLoading: CommonComponent;\n}\n\nexport type GroupChannelFragment = CommonComponent<GroupChannelProps['Fragment']>;\n"],"mappings":""}