@sendbird/uikit-react-native 2.2.0 → 2.3.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 (135) hide show
  1. package/README.md +42 -17
  2. package/lib/commonjs/components/FileViewer.js +2 -5
  3. package/lib/commonjs/components/FileViewer.js.map +1 -1
  4. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js +1 -1
  5. package/lib/commonjs/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  6. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js +1 -1
  7. package/lib/commonjs/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  8. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js +1 -6
  9. package/lib/commonjs/components/MessageRenderer/FileMessage/index.js.map +1 -1
  10. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js +2 -2
  11. package/lib/commonjs/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  12. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +5 -3
  13. package/lib/commonjs/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  14. package/lib/commonjs/containers/SendbirdUIKitContainer.js +14 -3
  15. package/lib/commonjs/containers/SendbirdUIKitContainer.js.map +1 -1
  16. package/lib/commonjs/contexts/PlatformServiceCtx.js.map +1 -1
  17. package/lib/commonjs/contexts/SendbirdChatCtx.js +10 -14
  18. package/lib/commonjs/contexts/SendbirdChatCtx.js.map +1 -1
  19. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js +68 -13
  20. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  21. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js +1 -0
  22. package/lib/commonjs/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  23. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js +3 -1
  24. package/lib/commonjs/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  25. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js +2 -2
  26. package/lib/commonjs/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  27. package/lib/commonjs/fragments/createGroupChannelListFragment.js +4 -14
  28. package/lib/commonjs/fragments/createGroupChannelListFragment.js.map +1 -1
  29. package/lib/commonjs/hooks/useKeyboardStatus.js +13 -9
  30. package/lib/commonjs/hooks/useKeyboardStatus.js.map +1 -1
  31. package/lib/commonjs/index.js.map +1 -1
  32. package/lib/commonjs/libs/ImageCompressionConfig.js +38 -0
  33. package/lib/commonjs/libs/ImageCompressionConfig.js.map +1 -0
  34. package/lib/commonjs/libs/SBUUtils.js +27 -0
  35. package/lib/commonjs/libs/SBUUtils.js.map +1 -1
  36. package/lib/commonjs/localization/StringSet.type.js +3 -0
  37. package/lib/commonjs/localization/StringSet.type.js.map +1 -1
  38. package/lib/commonjs/platform/createMediaService.expo.js +35 -1
  39. package/lib/commonjs/platform/createMediaService.expo.js.map +1 -1
  40. package/lib/commonjs/platform/createMediaService.native.js +41 -6
  41. package/lib/commonjs/platform/createMediaService.native.js.map +1 -1
  42. package/lib/commonjs/platform/dynamicModule.js +9 -57
  43. package/lib/commonjs/platform/dynamicModule.js.map +1 -1
  44. package/lib/commonjs/platform/types.js.map +1 -1
  45. package/lib/commonjs/version.js +1 -1
  46. package/lib/commonjs/version.js.map +1 -1
  47. package/lib/module/components/FileViewer.js +2 -5
  48. package/lib/module/components/FileViewer.js.map +1 -1
  49. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js +1 -1
  50. package/lib/module/components/MessageRenderer/FileMessage/ImageFileMessage.js.map +1 -1
  51. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js +1 -1
  52. package/lib/module/components/MessageRenderer/FileMessage/VideoFileMessage.js.map +1 -1
  53. package/lib/module/components/MessageRenderer/FileMessage/index.js +1 -5
  54. package/lib/module/components/MessageRenderer/FileMessage/index.js.map +1 -1
  55. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js +2 -2
  56. package/lib/module/components/MessageRenderer/UserMessage/BaseUserMessage.js.map +1 -1
  57. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js +4 -4
  58. package/lib/module/components/MessageRenderer/UserMessage/OpenGraphUserMessage.js.map +1 -1
  59. package/lib/module/containers/SendbirdUIKitContainer.js +13 -3
  60. package/lib/module/containers/SendbirdUIKitContainer.js.map +1 -1
  61. package/lib/module/contexts/PlatformServiceCtx.js.map +1 -1
  62. package/lib/module/contexts/SendbirdChatCtx.js +12 -14
  63. package/lib/module/contexts/SendbirdChatCtx.js.map +1 -1
  64. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js +69 -14
  65. package/lib/module/domain/groupChannel/component/GroupChannelInput/SendInput.js.map +1 -1
  66. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js +1 -0
  67. package/lib/module/domain/groupChannel/component/GroupChannelInput/index.js.map +1 -1
  68. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js +3 -2
  69. package/lib/module/domain/groupChannel/component/GroupChannelMessageList.js.map +1 -1
  70. package/lib/module/domain/groupChannelSettings/module/moduleContext.js +2 -2
  71. package/lib/module/domain/groupChannelSettings/module/moduleContext.js.map +1 -1
  72. package/lib/module/fragments/createGroupChannelListFragment.js +5 -9
  73. package/lib/module/fragments/createGroupChannelListFragment.js.map +1 -1
  74. package/lib/module/hooks/useKeyboardStatus.js +12 -9
  75. package/lib/module/hooks/useKeyboardStatus.js.map +1 -1
  76. package/lib/module/index.js.map +1 -1
  77. package/lib/module/libs/ImageCompressionConfig.js +30 -0
  78. package/lib/module/libs/ImageCompressionConfig.js.map +1 -0
  79. package/lib/module/libs/SBUUtils.js +26 -1
  80. package/lib/module/libs/SBUUtils.js.map +1 -1
  81. package/lib/module/localization/StringSet.type.js +3 -0
  82. package/lib/module/localization/StringSet.type.js.map +1 -1
  83. package/lib/module/platform/createMediaService.expo.js +33 -1
  84. package/lib/module/platform/createMediaService.expo.js.map +1 -1
  85. package/lib/module/platform/createMediaService.native.js +38 -5
  86. package/lib/module/platform/createMediaService.native.js.map +1 -1
  87. package/lib/module/platform/dynamicModule.js +10 -56
  88. package/lib/module/platform/dynamicModule.js.map +1 -1
  89. package/lib/module/platform/types.js.map +1 -1
  90. package/lib/module/version.js +1 -1
  91. package/lib/module/version.js.map +1 -1
  92. package/lib/typescript/src/containers/SendbirdUIKitContainer.d.ts +10 -7
  93. package/lib/typescript/src/contexts/PlatformServiceCtx.d.ts +8 -2
  94. package/lib/typescript/src/contexts/SendbirdChatCtx.d.ts +8 -3
  95. package/lib/typescript/src/hooks/useContext.d.ts +2 -29
  96. package/lib/typescript/src/index.d.ts +1 -1
  97. package/lib/typescript/src/libs/ImageCompressionConfig.d.ts +16 -0
  98. package/lib/typescript/src/libs/SBUUtils.d.ts +6 -0
  99. package/lib/typescript/src/localization/StringSet.type.d.ts +3 -0
  100. package/lib/typescript/src/platform/createMediaService.expo.d.ts +5 -1
  101. package/lib/typescript/src/platform/createMediaService.native.d.ts +7 -5
  102. package/lib/typescript/src/platform/dynamicModule.d.ts +7 -12
  103. package/lib/typescript/src/platform/types.d.ts +28 -3
  104. package/lib/typescript/src/version.d.ts +1 -1
  105. package/package.json +15 -5
  106. package/src/components/FileViewer.tsx +2 -5
  107. package/src/components/MessageRenderer/FileMessage/ImageFileMessage.tsx +6 -1
  108. package/src/components/MessageRenderer/FileMessage/VideoFileMessage.tsx +1 -1
  109. package/src/components/MessageRenderer/FileMessage/index.tsx +1 -4
  110. package/src/components/MessageRenderer/UserMessage/BaseUserMessage.tsx +2 -2
  111. package/src/components/MessageRenderer/UserMessage/OpenGraphUserMessage.tsx +4 -4
  112. package/src/containers/SendbirdUIKitContainer.tsx +25 -6
  113. package/src/contexts/PlatformServiceCtx.tsx +9 -2
  114. package/src/contexts/SendbirdChatCtx.tsx +22 -19
  115. package/src/domain/groupChannel/component/GroupChannelInput/SendInput.tsx +82 -14
  116. package/src/domain/groupChannel/component/GroupChannelInput/index.tsx +1 -0
  117. package/src/domain/groupChannel/component/GroupChannelMessageList.tsx +3 -2
  118. package/src/domain/groupChannelSettings/module/moduleContext.tsx +8 -2
  119. package/src/fragments/createGroupChannelListFragment.tsx +5 -9
  120. package/src/hooks/useKeyboardStatus.ts +10 -5
  121. package/src/index.ts +1 -0
  122. package/src/libs/ImageCompressionConfig.ts +31 -0
  123. package/src/libs/SBUUtils.ts +28 -1
  124. package/src/localization/StringSet.type.ts +7 -0
  125. package/src/platform/createMediaService.expo.tsx +24 -1
  126. package/src/platform/createMediaService.native.tsx +31 -9
  127. package/src/platform/dynamicModule.ts +17 -59
  128. package/src/platform/types.ts +29 -7
  129. package/src/version.ts +1 -1
  130. package/lib/commonjs/utils/common.js +0 -19
  131. package/lib/commonjs/utils/common.js.map +0 -1
  132. package/lib/module/utils/common.js +0 -7
  133. package/lib/module/utils/common.js.map +0 -1
  134. package/lib/typescript/src/utils/common.d.ts +0 -1
  135. package/src/utils/common.ts +0 -8
@@ -2,7 +2,7 @@ import React, { forwardRef } from 'react';
2
2
  import { Platform, TouchableOpacity, View } from 'react-native';
3
3
  import { MentionType } from '@sendbird/chat/message';
4
4
  import { Icon, TextInput, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
5
- import { conditionChaining } from '@sendbird/uikit-utils';
5
+ import { conditionChaining, isImage, shouldCompressImage } from '@sendbird/uikit-utils';
6
6
  import { useLocalization, usePlatformService, useSendbirdChat } from '../../../../hooks/useContext';
7
7
  import SBUError from '../../../../libs/SBUError';
8
8
  import SBUUtils from '../../../../libs/SBUUtils';
@@ -19,13 +19,16 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
19
19
  mentionedUsers
20
20
  } = _ref;
21
21
  const {
22
- mentionManager
22
+ mentionManager,
23
+ imageCompressionConfig,
24
+ features
23
25
  } = useSendbirdChat();
24
26
  const {
25
27
  STRINGS
26
28
  } = useLocalization();
27
29
  const {
28
- fileService
30
+ fileService,
31
+ mediaService
29
32
  } = usePlatformService();
30
33
  const {
31
34
  colors
@@ -54,13 +57,13 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
54
57
  title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_CAMERA,
55
58
  icon: 'camera',
56
59
  onPress: async () => {
57
- const photo = await fileService.openCamera({
60
+ const mediaFile = await fileService.openCamera({
58
61
  mediaType: 'all',
59
62
  onOpenFailure: error => {
60
63
  if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
61
64
  alert({
62
65
  title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
63
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),
66
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
64
67
  buttons: [{
65
68
  text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
66
69
  onPress: () => SBUUtils.openSettings()
@@ -72,22 +75,39 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
72
75
  }
73
76
  });
74
77
 
75
- if (photo) {
76
- onSendFileMessage(photo).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
78
+ if (mediaFile) {
79
+ // Image compression
80
+ if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)) {
81
+ await SBUUtils.safeRun(async () => {
82
+ const compressed = await mediaService.compressImage({
83
+ uri: mediaFile.uri,
84
+ maxWidth: imageCompressionConfig.width,
85
+ maxHeight: imageCompressionConfig.height,
86
+ compressionRate: imageCompressionConfig.compressionRate
87
+ });
88
+
89
+ if (compressed) {
90
+ mediaFile.uri = compressed.uri;
91
+ mediaFile.size = compressed.size;
92
+ }
93
+ });
94
+ }
95
+
96
+ onSendFileMessage(mediaFile).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
77
97
  }
78
98
  }
79
99
  }, {
80
100
  title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_PHOTO_LIBRARY,
81
101
  icon: 'photo',
82
102
  onPress: async () => {
83
- const photo = await fileService.openMediaLibrary({
103
+ const mediaFiles = await fileService.openMediaLibrary({
84
104
  selectionLimit: 1,
85
105
  mediaType: 'all',
86
106
  onOpenFailure: error => {
87
107
  if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
88
108
  alert({
89
109
  title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
90
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),
110
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
91
111
  buttons: [{
92
112
  text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
93
113
  onPress: () => SBUUtils.openSettings()
@@ -99,20 +119,55 @@ const SendInput = /*#__PURE__*/forwardRef(function SendInput(_ref, ref) {
99
119
  }
100
120
  });
101
121
 
102
- if (photo && photo[0]) {
103
- onSendFileMessage(photo[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
122
+ if (mediaFiles && mediaFiles[0]) {
123
+ const mediaFile = mediaFiles[0]; // Image compression
124
+
125
+ if (isImage(mediaFile.uri, mediaFile.type) && shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)) {
126
+ await SBUUtils.safeRun(async () => {
127
+ const compressed = await mediaService.compressImage({
128
+ uri: mediaFile.uri,
129
+ maxWidth: imageCompressionConfig.width,
130
+ maxHeight: imageCompressionConfig.height,
131
+ compressionRate: imageCompressionConfig.compressionRate
132
+ });
133
+
134
+ if (compressed) {
135
+ mediaFile.uri = compressed.uri;
136
+ mediaFile.size = compressed.size;
137
+ }
138
+ });
139
+ }
140
+
141
+ onSendFileMessage(mediaFiles[0]).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
104
142
  }
105
143
  }
106
144
  }, {
107
145
  title: STRINGS.GROUP_CHANNEL.DIALOG_ATTACHMENT_FILES,
108
146
  icon: 'document',
109
147
  onPress: async () => {
110
- const file = await fileService.openDocument({
148
+ const documentFile = await fileService.openDocument({
111
149
  onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error')
112
150
  });
113
151
 
114
- if (file) {
115
- onSendFileMessage(file).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
152
+ if (documentFile) {
153
+ // Image compression
154
+ if (isImage(documentFile.uri, documentFile.type) && shouldCompressImage(documentFile.uri, features.imageCompressionEnabled)) {
155
+ await SBUUtils.safeRun(async () => {
156
+ const compressed = await mediaService.compressImage({
157
+ uri: documentFile.uri,
158
+ maxWidth: imageCompressionConfig.width,
159
+ maxHeight: imageCompressionConfig.height,
160
+ compressionRate: imageCompressionConfig.compressionRate
161
+ });
162
+
163
+ if (compressed) {
164
+ documentFile.uri = compressed.uri;
165
+ documentFile.size = compressed.size;
166
+ }
167
+ });
168
+ }
169
+
170
+ onSendFileMessage(documentFile).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));
116
171
  }
117
172
  }
118
173
  }]
@@ -1 +1 @@
1
- {"version":3,"names":["React","forwardRef","Platform","TouchableOpacity","View","MentionType","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","conditionChaining","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","SendInput","ref","onSendUserMessage","onSendFileMessage","text","onChangeText","disabled","frozen","muted","onSelectionChange","mentionedUsers","mentionManager","STRINGS","fileService","colors","openSheet","alert","toast","onPressSend","mention","userIds","map","it","user","userId","messageTemplate","textToMentionedMessageTemplate","type","USERS","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_MUTED","INPUT_PLACEHOLDER_ACTIVE","textToMentionedComponents","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","maxHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n TouchableOpacity,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\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, useSendbirdChat } from '../../../../hooks/useContext';\nimport SBUError from '../../../../libs/SBUError';\nimport SBUUtils from '../../../../libs/SBUUtils';\nimport type { MentionedUser } from '../../../../types';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n onChangeText: (val: string) => void;\n frozen: boolean;\n muted: boolean;\n disabled: boolean;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n mentionedUsers: MentionedUser[];\n};\nconst SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(\n {\n onSendUserMessage,\n onSendFileMessage,\n text,\n onChangeText,\n disabled,\n frozen,\n muted,\n onSelectionChange,\n mentionedUsers,\n },\n ref,\n) {\n const { mentionManager } = useSendbirdChat();\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 const mention = {\n userIds: mentionedUsers.map((it) => it.user.userId),\n messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),\n type: MentionType.USERS,\n };\n\n onSendUserMessage(text, mention).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n onChangeText('');\n };\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 ref={ref}\n multiline\n disableFullscreenUI\n onSelectionChange={onSelectionChange}\n editable={!disabled}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={conditionChaining(\n [frozen, muted],\n [\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_MUTED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE,\n ],\n )}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\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","forwardRef","Platform","TouchableOpacity","View","MentionType","Icon","TextInput","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","conditionChaining","isImage","shouldCompressImage","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","SendInput","ref","onSendUserMessage","onSendFileMessage","text","onChangeText","disabled","frozen","muted","onSelectionChange","mentionedUsers","mentionManager","imageCompressionConfig","features","STRINGS","fileService","mediaService","colors","openSheet","alert","toast","onPressSend","mention","userIds","map","it","user","userId","messageTemplate","textToMentionedMessageTemplate","type","USERS","catch","show","TOAST","SEND_MSG_ERROR","onPressAttachment","sheetItems","title","GROUP_CHANNEL","DIALOG_ATTACHMENT_CAMERA","icon","onPress","mediaFile","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","ALERT_PERMISSIONS_OK","openSettings","OPEN_CAMERA_ERROR","uri","imageCompressionEnabled","safeRun","compressed","compressImage","maxWidth","width","maxHeight","height","compressionRate","size","DIALOG_ATTACHMENT_PHOTO_LIBRARY","mediaFiles","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","DIALOG_ATTACHMENT_FILES","documentFile","openDocument","OPEN_FILES_ERROR","styles","sendInputContainer","ui","input","default","highlight","active","iconAttach","INPUT_PLACEHOLDER_DISABLED","INPUT_PLACEHOLDER_MUTED","INPUT_PLACEHOLDER_ACTIVE","textToMentionedComponents","Boolean","trim","iconSend","paddingVertical","paddingHorizontal","alignItems","flexDirection","flex","marginRight","minHeight","select","ios","borderRadius","padding","marginLeft"],"sources":["SendInput.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport {\n NativeSyntheticEvent,\n Platform,\n TextInput as RNTextInput,\n TextInputSelectionChangeEventData,\n TouchableOpacity,\n View,\n} from 'react-native';\n\nimport { MentionType } from '@sendbird/chat/message';\nimport {\n Icon,\n TextInput,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport { conditionChaining, isImage, shouldCompressImage } from '@sendbird/uikit-utils';\n\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../../hooks/useContext';\nimport SBUError from '../../../../libs/SBUError';\nimport SBUUtils from '../../../../libs/SBUUtils';\nimport type { MentionedUser } from '../../../../types';\nimport type { GroupChannelProps } from '../../types';\n\ntype SendInputProps = GroupChannelProps['Input'] & {\n text: string;\n onChangeText: (val: string) => void;\n frozen: boolean;\n muted: boolean;\n disabled: boolean;\n onSelectionChange: (e: NativeSyntheticEvent<TextInputSelectionChangeEventData>) => void;\n mentionedUsers: MentionedUser[];\n};\nconst SendInput = forwardRef<RNTextInput, SendInputProps>(function SendInput(\n {\n onSendUserMessage,\n onSendFileMessage,\n text,\n onChangeText,\n disabled,\n frozen,\n muted,\n onSelectionChange,\n mentionedUsers,\n },\n ref,\n) {\n const { mentionManager, imageCompressionConfig, features } = useSendbirdChat();\n const { STRINGS } = useLocalization();\n const { fileService, mediaService } = usePlatformService();\n const { colors } = useUIKitTheme();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const toast = useToast();\n\n const onPressSend = () => {\n const mention = {\n userIds: mentionedUsers.map((it) => it.user.userId),\n messageTemplate: mentionManager.textToMentionedMessageTemplate(text, mentionedUsers),\n type: MentionType.USERS,\n };\n\n onSendUserMessage(text, mention).catch(() => toast.show(STRINGS.TOAST.SEND_MSG_ERROR, 'error'));\n onChangeText('');\n };\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 mediaFile = 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(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\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 (mediaFile) {\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n onSendFileMessage(mediaFile).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 mediaFiles = 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(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n\n if (mediaFiles && mediaFiles[0]) {\n const mediaFile = mediaFiles[0];\n\n // Image compression\n if (\n isImage(mediaFile.uri, mediaFile.type) &&\n shouldCompressImage(mediaFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: mediaFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n mediaFile.uri = compressed.uri;\n mediaFile.size = compressed.size;\n }\n });\n }\n\n onSendFileMessage(mediaFiles[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 documentFile = await fileService.openDocument({\n onOpenFailure: () => toast.show(STRINGS.TOAST.OPEN_FILES_ERROR, 'error'),\n });\n\n if (documentFile) {\n // Image compression\n if (\n isImage(documentFile.uri, documentFile.type) &&\n shouldCompressImage(documentFile.uri, features.imageCompressionEnabled)\n ) {\n await SBUUtils.safeRun(async () => {\n const compressed = await mediaService.compressImage({\n uri: documentFile.uri,\n maxWidth: imageCompressionConfig.width,\n maxHeight: imageCompressionConfig.height,\n compressionRate: imageCompressionConfig.compressionRate,\n });\n\n if (compressed) {\n documentFile.uri = compressed.uri;\n documentFile.size = compressed.size;\n }\n });\n }\n\n onSendFileMessage(documentFile).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 ref={ref}\n multiline\n disableFullscreenUI\n onSelectionChange={onSelectionChange}\n editable={!disabled}\n onChangeText={onChangeText}\n style={styles.input}\n placeholder={conditionChaining(\n [frozen, muted],\n [\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_DISABLED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_MUTED,\n STRINGS.GROUP_CHANNEL.INPUT_PLACEHOLDER_ACTIVE,\n ],\n )}\n >\n {mentionManager.textToMentionedComponents(text, mentionedUsers)}\n </TextInput>\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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"}
@@ -20,6 +20,7 @@ const KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({
20
20
  default: undefined
21
21
  }); // FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)
22
22
  // To workaround temporarily, change the key for re-mount the component.
23
+ // -> This will affect to keyboard blur when add/remove first mentioned user.
23
24
 
24
25
  const GET_INPUT_KEY = shouldReset => shouldReset ? 'uikit-input-clear' : 'uikit-input'; // TODO: Refactor 'Edit' mode to clearly
25
26
 
@@ -1 +1 @@
1
- {"version":3,"names":["React","useContext","useEffect","useRef","useState","KeyboardAvoidingView","Platform","View","useSafeAreaInsets","createStyleSheet","useUIKitTheme","getGroupChannelChatAvailableState","replace","useIIFE","useSendbirdChat","useMentionTextInput","GroupChannelContexts","EditInput","SendInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","GroupChannelInput","props","top","left","right","bottom","colors","features","mentionManager","channel","messageToEdit","setMessageToEdit","keyboardAvoidOffset","Fragment","chatAvailableState","mentionAvailable","userMentionEnabled","isGroupChannel","isBroadcast","inputMode","isFileMessage","inputHeight","setInputHeight","styles","inputDefault","height","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useTypingTrigger","useTextPersistenceOnDisabled","disabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","length","shouldRenderInput","paddingLeft","paddingRight","backgroundColor","background","e","nativeEvent","layout","inputContainer","endTyping","startTyping","setText","chatDisabled","textTmpRef","current","isUserMessage","setTimeout","focus","SafeAreaBottom","justifyContent","width","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { MutableRefObject, useContext, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, TextInput, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../../../hooks/useContext';\nimport useMentionTextInput from '../../../../hooks/useMentionTextInput';\nimport { GroupChannelContexts } from '../../module/moduleContext';\nimport type { GroupChannelProps } from '../../types';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { features, mentionManager } = useSendbirdChat();\n const {\n channel,\n messageToEdit,\n setMessageToEdit,\n keyboardAvoidOffset = 0,\n } = useContext(GroupChannelContexts.Fragment);\n\n const chatAvailableState = getGroupChannelChatAvailableState(channel);\n const mentionAvailable = features.userMentionEnabled && channel.isGroupChannel() && !channel.isBroadcast;\n const inputMode = useIIFE(() => {\n if (!messageToEdit) return 'send';\n if (messageToEdit.isFileMessage()) return 'send';\n return 'edit';\n });\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit: messageToEdit,\n });\n\n useTypingTrigger(text, channel);\n useTextPersistenceOnDisabled(text, onChangeText, chatAvailableState.disabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention: GroupChannelProps['SuggestedMentionList']['onPressToMention'] = (user, searchStringRange) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n {...chatAvailableState}\n key={GET_INPUT_KEY(mentionedUsers.length === 0)}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={GET_INPUT_KEY(mentionedUsers.length === 0)}\n ref={textInputRef as never}\n autoFocus={AUTO_FOCUS}\n text={text}\n onChangeText={onChangeText}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n disabled={chatAvailableState.disabled}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdGroupChannel) => {\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n};\n\nconst useTextPersistenceOnDisabled = (text: string, setText: (val: string) => void, chatDisabled: boolean) => {\n const textTmpRef = useRef('');\n\n useEffect(() => {\n if (chatDisabled) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n});\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","createStyleSheet","useUIKitTheme","getGroupChannelChatAvailableState","replace","useIIFE","useSendbirdChat","useMentionTextInput","GroupChannelContexts","EditInput","SendInput","AUTO_FOCUS","select","ios","android","default","KEYBOARD_AVOID_VIEW_BEHAVIOR","undefined","GET_INPUT_KEY","shouldReset","GroupChannelInput","props","top","left","right","bottom","colors","features","mentionManager","channel","messageToEdit","setMessageToEdit","keyboardAvoidOffset","Fragment","chatAvailableState","mentionAvailable","userMentionEnabled","isGroupChannel","isBroadcast","inputMode","isFileMessage","inputHeight","setInputHeight","styles","inputDefault","height","selection","onSelectionChange","textInputRef","text","onChangeText","mentionedUsers","useTypingTrigger","useTextPersistenceOnDisabled","disabled","useAutoFocusOnEditMode","onPressToMention","user","searchStringRange","mentionedMessageText","asMentionedMessageText","range","start","end","length","shouldRenderInput","paddingLeft","paddingRight","backgroundColor","background","e","nativeEvent","layout","inputContainer","endTyping","startTyping","setText","chatDisabled","textTmpRef","current","isUserMessage","setTimeout","focus","SafeAreaBottom","justifyContent","width","memo"],"sources":["index.tsx"],"sourcesContent":["import React, { MutableRefObject, useContext, useEffect, useRef, useState } from 'react';\nimport { KeyboardAvoidingView, Platform, TextInput, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport { createStyleSheet, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';\nimport {\n SendbirdFileMessage,\n SendbirdGroupChannel,\n SendbirdUserMessage,\n getGroupChannelChatAvailableState,\n replace,\n useIIFE,\n} from '@sendbird/uikit-utils';\n\nimport { useSendbirdChat } from '../../../../hooks/useContext';\nimport useMentionTextInput from '../../../../hooks/useMentionTextInput';\nimport { GroupChannelContexts } from '../../module/moduleContext';\nimport type { GroupChannelProps } from '../../types';\nimport EditInput from './EditInput';\nimport SendInput from './SendInput';\n\nconst AUTO_FOCUS = Platform.select({ ios: false, android: true, default: false });\nconst KEYBOARD_AVOID_VIEW_BEHAVIOR = Platform.select({ ios: 'padding' as const, default: undefined });\n\n// FIXME(iOS): Dynamic style does not work properly when typing the CJK. (https://github.com/facebook/react-native/issues/26107)\n// To workaround temporarily, change the key for re-mount the component.\n// -> This will affect to keyboard blur when add/remove first mentioned user.\nconst GET_INPUT_KEY = (shouldReset: boolean) => (shouldReset ? 'uikit-input-clear' : 'uikit-input');\n\n// TODO: Refactor 'Edit' mode to clearly\nconst GroupChannelInput = (props: GroupChannelProps['Input']) => {\n const { top, left, right, bottom } = useSafeAreaInsets();\n const { colors } = useUIKitTheme();\n const { features, mentionManager } = useSendbirdChat();\n const {\n channel,\n messageToEdit,\n setMessageToEdit,\n keyboardAvoidOffset = 0,\n } = useContext(GroupChannelContexts.Fragment);\n\n const chatAvailableState = getGroupChannelChatAvailableState(channel);\n const mentionAvailable = features.userMentionEnabled && channel.isGroupChannel() && !channel.isBroadcast;\n const inputMode = useIIFE(() => {\n if (!messageToEdit) return 'send';\n if (messageToEdit.isFileMessage()) return 'send';\n return 'edit';\n });\n\n const [inputHeight, setInputHeight] = useState(styles.inputDefault.height);\n\n const { selection, onSelectionChange, textInputRef, text, onChangeText, mentionedUsers } = useMentionTextInput({\n messageToEdit: messageToEdit,\n });\n\n useTypingTrigger(text, channel);\n useTextPersistenceOnDisabled(text, onChangeText, chatAvailableState.disabled);\n useAutoFocusOnEditMode(textInputRef, messageToEdit);\n\n const onPressToMention: GroupChannelProps['SuggestedMentionList']['onPressToMention'] = (user, searchStringRange) => {\n const mentionedMessageText = mentionManager.asMentionedMessageText(user, true);\n const range = { start: searchStringRange.start, end: searchStringRange.start + mentionedMessageText.length - 1 };\n\n onChangeText(replace(text, searchStringRange.start, searchStringRange.end, mentionedMessageText), { user, range });\n };\n\n if (!props.shouldRenderInput) {\n return <SafeAreaBottom height={bottom} />;\n }\n\n return (\n <>\n <KeyboardAvoidingView\n keyboardVerticalOffset={-bottom + keyboardAvoidOffset}\n behavior={KEYBOARD_AVOID_VIEW_BEHAVIOR}\n >\n <View style={{ paddingLeft: left, paddingRight: right, backgroundColor: colors.background }}>\n <View onLayout={(e) => setInputHeight(e.nativeEvent.layout.height)} style={styles.inputContainer}>\n {inputMode === 'send' && (\n <SendInput\n {...props}\n {...chatAvailableState}\n key={GET_INPUT_KEY(mentionedUsers.length === 0)}\n ref={textInputRef as never}\n text={text}\n onChangeText={onChangeText}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n />\n )}\n {inputMode === 'edit' && messageToEdit && (\n <EditInput\n {...props}\n key={GET_INPUT_KEY(mentionedUsers.length === 0)}\n ref={textInputRef as never}\n autoFocus={AUTO_FOCUS}\n text={text}\n onChangeText={onChangeText}\n messageToEdit={messageToEdit}\n setMessageToEdit={setMessageToEdit}\n disabled={chatAvailableState.disabled}\n onSelectionChange={onSelectionChange}\n mentionedUsers={mentionedUsers}\n />\n )}\n </View>\n <SafeAreaBottom height={bottom} />\n </View>\n </KeyboardAvoidingView>\n {mentionAvailable && (\n <props.SuggestedMentionList\n text={text}\n selection={selection}\n inputHeight={inputHeight}\n topInset={top}\n bottomInset={bottom}\n onPressToMention={onPressToMention}\n mentionedUsers={mentionedUsers}\n />\n )}\n </>\n );\n};\n\nconst useTypingTrigger = (text: string, channel: SendbirdGroupChannel) => {\n useEffect(() => {\n if (text.length === 0) channel.endTyping();\n else channel.startTyping();\n }, [text]);\n};\n\nconst useTextPersistenceOnDisabled = (text: string, setText: (val: string) => void, chatDisabled: boolean) => {\n const textTmpRef = useRef('');\n\n useEffect(() => {\n if (chatDisabled) {\n textTmpRef.current = text;\n setText('');\n } else {\n setText(textTmpRef.current);\n }\n }, [chatDisabled]);\n};\n\nconst useAutoFocusOnEditMode = (\n textInputRef: MutableRefObject<TextInput | undefined>,\n messageToEdit?: SendbirdUserMessage | SendbirdFileMessage,\n) => {\n useEffect(() => {\n if (messageToEdit?.isUserMessage()) {\n if (!AUTO_FOCUS) setTimeout(() => textInputRef.current?.focus(), 500);\n }\n }, [messageToEdit]);\n};\n\nconst SafeAreaBottom = ({ height }: { height: number }) => {\n return <View style={{ height }} />;\n};\n\nconst styles = createStyleSheet({\n inputContainer: {\n justifyContent: 'center',\n width: '100%',\n },\n inputDefault: {\n height: 56,\n },\n});\n\nexport default React.memo(GroupChannelInput);\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
2
2
 
3
3
  import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';
4
- import { Linking, Platform, View } from 'react-native';
4
+ import { Platform, View } from 'react-native';
5
5
  import { useSafeAreaInsets } from 'react-native-safe-area-context';
6
6
  import { ChannelFrozenBanner, createStyleSheet, useAlert, useBottomSheet, useToast, useUIKitTheme } from '@sendbird/uikit-react-native-foundation';
7
7
  import { Logger, getAvailableUriFromFileMessage, getFileExtension, getFileType, isMyMessage, messageKeyExtractor, shouldRenderReaction, toMegabyte, useFreshCallback } from '@sendbird/uikit-utils';
@@ -9,6 +9,7 @@ import ChatFlatList from '../../../components/ChatFlatList';
9
9
  import { ReactionAddons } from '../../../components/ReactionAddons';
10
10
  import { DEPRECATION_WARNING } from '../../../constants';
11
11
  import { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';
12
+ import SBUUtils from '../../../libs/SBUUtils';
12
13
  import { GroupChannelContexts } from '../module/moduleContext';
13
14
  const HANDLE_NEXT_MSG_SEPARATELY = Platform.select({
14
15
  default: true
@@ -286,7 +287,7 @@ const useGetMessagePressActions = _ref3 => {
286
287
 
287
288
  default:
288
289
  {
289
- response.onPress = () => Linking.openURL(msg.url).catch();
290
+ response.onPress = () => SBUUtils.openURL(msg.url);
290
291
 
291
292
  break;
292
293
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useContext","useEffect","useRef","useState","Linking","Platform","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","ChatFlatList","ReactionAddons","DEPRECATION_WARNING","useLocalization","usePlatformService","useSendbirdChat","GroupChannelContexts","HANDLE_NEXT_MSG_SEPARATELY","select","default","GroupChannelMessageList","currentUserId","channel","messages","renderMessage","nextMessages","newMessagesFromMembers","onBottomReached","onTopReached","renderNewMessagesButton","renderScrollToBottomButton","onResendFailedMessage","onDeleteMessage","onPressImageMessage","onPressMediaMessage","flatListProps","enableMessageGrouping","STRINGS","colors","left","right","scrollLeaveBottom","setScrollLeaveBottom","scrollRef","newMessagesInternalBuffer","setNewMessagesInternalBuffer","getMessagePressActions","useGetMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","item","index","onPress","onLongPress","message","prevMessage","nextMessage","length","prev","concat","onLeaveScrollBottom","val","flex","backgroundColor","background","isFrozen","styles","frozenBanner","GROUP_CHANNEL","LIST_BANNER_FROZEN","url","frozenListPadding","contentContainerStyle","newMsgButton","visible","current","scrollToBottom","newMessages","scrollButton","toast","openSheet","alert","clipboardService","fileService","features","setMessageToEdit","Fragment","handleFailedMessage","sheetItems","title","DIALOG_MESSAGE_FAILED_RETRY","catch","show","TOAST","RESEND_MSG_ERROR","DIALOG_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","confirmDelete","DIALOG_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL","DIALOG_MESSAGE_DELETE_CONFIRM_OK","style","DELETE_MSG_ERROR","msg","isUserMessage","isFileMessage","undefined","response","push","icon","DIALOG_MESSAGE_COPY","setString","COPY_OK","sendingStatus","DIALOG_MESSAGE_EDIT","DIALOG_MESSAGE_DELETE","DIALOG_MESSAGE_SAVE","size","DOWNLOAD_START","save","fileUrl","fileName","name","fileType","type","then","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","warn","ON_PRESS_IMAGE_MESSAGE","openURL","HeaderComponent","reactionEnabled","onClose","position","zIndex","top","paddingBottom","bottom","alignSelf","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { Linking, ListRenderItem, Platform, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BottomSheetItem } from '@sendbird/uikit-react-native-foundation';\nimport {\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage, SendbirdMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport {\n Logger,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { ChatFlatListRef } from '../../../components/ChatFlatList';\nimport ChatFlatList from '../../../components/ChatFlatList';\nimport { ReactionAddons } from '../../../components/ReactionAddons';\nimport { DEPRECATION_WARNING } from '../../../constants';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst HANDLE_NEXT_MSG_SEPARATELY = Platform.select({ default: true });\n\nconst GroupChannelMessageList = ({\n currentUserId,\n channel,\n messages,\n renderMessage,\n nextMessages,\n newMessagesFromMembers,\n onBottomReached,\n onTopReached,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n onResendFailedMessage,\n onDeleteMessage,\n onPressImageMessage,\n onPressMediaMessage,\n flatListProps,\n enableMessageGrouping,\n}: GroupChannelProps['MessageList']) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { left, right } = useSafeAreaInsets();\n const [scrollLeaveBottom, setScrollLeaveBottom] = useState(false);\n const scrollRef = useRef<ChatFlatListRef>(null);\n const [newMessagesInternalBuffer, setNewMessagesInternalBuffer] = useState(() => newMessagesFromMembers);\n const getMessagePressActions = useGetMessagePressActions({\n channel,\n currentUserId,\n onDeleteMessage,\n onResendFailedMessage,\n onPressImageMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress } = getMessagePressActions(item);\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n enableMessageGrouping,\n channel,\n currentUserId,\n });\n });\n\n if (!HANDLE_NEXT_MSG_SEPARATELY) {\n useEffect(() => {\n if (newMessagesInternalBuffer.length !== 0) {\n setNewMessagesInternalBuffer((prev) => prev.concat(newMessagesFromMembers));\n }\n onBottomReached();\n }, [newMessagesFromMembers]);\n }\n\n const onLeaveScrollBottom = useCallback((val: boolean) => {\n if (!HANDLE_NEXT_MSG_SEPARATELY) setNewMessagesInternalBuffer([]);\n setScrollLeaveBottom(val);\n }, []);\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.GROUP_CHANNEL.LIST_BANNER_FROZEN} />\n )}\n <ChatFlatList\n nextMessages={nextMessages}\n onBottomReached={onBottomReached}\n onTopReached={onTopReached}\n onLeaveScrollBottom={onLeaveScrollBottom}\n currentUserId={currentUserId}\n {...flatListProps}\n listKey={`group-channel-messages-${channel.url}`}\n ref={scrollRef}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: scrollLeaveBottom,\n onPress: () => scrollRef.current?.scrollToBottom(false),\n newMessages: !HANDLE_NEXT_MSG_SEPARATELY ? newMessagesInternalBuffer : newMessagesFromMembers,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View pointerEvents={scrollLeaveBottom ? 'auto' : 'none'} style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: scrollLeaveBottom,\n onPress: () => scrollRef.current?.scrollToBottom(false),\n })}\n </View>\n )}\n </View>\n );\n};\n\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\nconst useGetMessagePressActions = ({\n channel,\n currentUserId,\n onResendFailedMessage,\n onDeleteMessage,\n onPressImageMessage,\n onPressMediaMessage,\n}: Pick<\n GroupChannelProps['MessageList'],\n | 'channel'\n | 'currentUserId'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressImageMessage'\n | 'onPressMediaMessage'\n>) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { features } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelContexts.Fragment);\n\n const handleFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_FAILED_RETRY,\n onPress: () =>\n onResendFailedMessage(message).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error')),\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => confirmDelete(message),\n },\n ],\n });\n };\n const confirmDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error')),\n },\n ],\n });\n };\n\n return (msg: SendbirdMessage) => {\n if (!msg.isUserMessage() && !msg.isFileMessage()) {\n return { onPress: undefined, onLongPress: undefined };\n }\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const response: { onPress?: () => void; onLongPress?: () => void } = {\n onPress: undefined,\n onLongPress: undefined,\n };\n\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'copy',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_COPY,\n onPress: () => {\n clipboardService.setString(msg.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push(\n {\n icon: 'edit',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_EDIT,\n onPress: () => setMessageToEdit(msg),\n },\n {\n icon: 'delete',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n },\n );\n }\n }\n\n if (msg.isFileMessage()) {\n sheetItems.push({\n icon: 'download',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_SAVE,\n onPress: async () => {\n if (toMegabyte(msg.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: msg.url, fileName: msg.name, fileType: msg.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push({\n icon: 'delete',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n });\n }\n\n const fileType = getFileType(msg.type || getFileExtension(msg.name));\n switch (fileType) {\n case 'image':\n case 'video':\n case 'audio': {\n response.onPress = () => {\n if (onPressImageMessage && fileType === 'image') {\n Logger.warn(DEPRECATION_WARNING.GROUP_CHANNEL.ON_PRESS_IMAGE_MESSAGE);\n onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));\n }\n onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));\n };\n break;\n }\n default: {\n response.onPress = () => Linking.openURL(msg.url).catch();\n break;\n }\n }\n }\n\n if (sheetItems.length > 0) {\n response.onLongPress = () => {\n openSheet({\n sheetItems,\n HeaderComponent: shouldRenderReaction(channel, features.reactionEnabled)\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />\n : undefined,\n });\n };\n }\n\n if (msg.sendingStatus === 'failed') {\n response.onLongPress = () => handleFailedMessage(msg);\n response.onPress = () => {\n onResendFailedMessage(msg).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n };\n }\n\n if (msg.sendingStatus === 'pending') {\n response.onLongPress = undefined;\n response.onPress = undefined;\n }\n\n return response;\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useCallback","useContext","useEffect","useRef","useState","Platform","View","useSafeAreaInsets","ChannelFrozenBanner","createStyleSheet","useAlert","useBottomSheet","useToast","useUIKitTheme","Logger","getAvailableUriFromFileMessage","getFileExtension","getFileType","isMyMessage","messageKeyExtractor","shouldRenderReaction","toMegabyte","useFreshCallback","ChatFlatList","ReactionAddons","DEPRECATION_WARNING","useLocalization","usePlatformService","useSendbirdChat","SBUUtils","GroupChannelContexts","HANDLE_NEXT_MSG_SEPARATELY","select","default","GroupChannelMessageList","currentUserId","channel","messages","renderMessage","nextMessages","newMessagesFromMembers","onBottomReached","onTopReached","renderNewMessagesButton","renderScrollToBottomButton","onResendFailedMessage","onDeleteMessage","onPressImageMessage","onPressMediaMessage","flatListProps","enableMessageGrouping","STRINGS","colors","left","right","scrollLeaveBottom","setScrollLeaveBottom","scrollRef","newMessagesInternalBuffer","setNewMessagesInternalBuffer","getMessagePressActions","useGetMessagePressActions","safeAreaLayout","paddingLeft","paddingRight","renderItem","item","index","onPress","onLongPress","message","prevMessage","nextMessage","length","prev","concat","onLeaveScrollBottom","val","flex","backgroundColor","background","isFrozen","styles","frozenBanner","GROUP_CHANNEL","LIST_BANNER_FROZEN","url","frozenListPadding","contentContainerStyle","newMsgButton","visible","current","scrollToBottom","newMessages","scrollButton","toast","openSheet","alert","clipboardService","fileService","features","setMessageToEdit","Fragment","handleFailedMessage","sheetItems","title","DIALOG_MESSAGE_FAILED_RETRY","catch","show","TOAST","RESEND_MSG_ERROR","DIALOG_MESSAGE_FAILED_REMOVE","titleColor","ui","dialog","none","destructive","confirmDelete","DIALOG_MESSAGE_DELETE_CONFIRM_TITLE","buttons","text","DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL","DIALOG_MESSAGE_DELETE_CONFIRM_OK","style","DELETE_MSG_ERROR","msg","isUserMessage","isFileMessage","undefined","response","push","icon","DIALOG_MESSAGE_COPY","setString","COPY_OK","sendingStatus","DIALOG_MESSAGE_EDIT","DIALOG_MESSAGE_DELETE","DIALOG_MESSAGE_SAVE","size","DOWNLOAD_START","save","fileUrl","fileName","name","fileType","type","then","DOWNLOAD_OK","log","err","DOWNLOAD_ERROR","warn","ON_PRESS_IMAGE_MESSAGE","openURL","HeaderComponent","reactionEnabled","onClose","position","zIndex","top","paddingBottom","bottom","alignSelf","memo"],"sources":["GroupChannelMessageList.tsx"],"sourcesContent":["import React, { useCallback, useContext, useEffect, useRef, useState } from 'react';\nimport { ListRenderItem, Platform, View } from 'react-native';\nimport { useSafeAreaInsets } from 'react-native-safe-area-context';\n\nimport type { BottomSheetItem } from '@sendbird/uikit-react-native-foundation';\nimport {\n ChannelFrozenBanner,\n createStyleSheet,\n useAlert,\n useBottomSheet,\n useToast,\n useUIKitTheme,\n} from '@sendbird/uikit-react-native-foundation';\nimport type { SendbirdFileMessage, SendbirdMessage, SendbirdUserMessage } from '@sendbird/uikit-utils';\nimport {\n Logger,\n getAvailableUriFromFileMessage,\n getFileExtension,\n getFileType,\n isMyMessage,\n messageKeyExtractor,\n shouldRenderReaction,\n toMegabyte,\n useFreshCallback,\n} from '@sendbird/uikit-utils';\n\nimport type { ChatFlatListRef } from '../../../components/ChatFlatList';\nimport ChatFlatList from '../../../components/ChatFlatList';\nimport { ReactionAddons } from '../../../components/ReactionAddons';\nimport { DEPRECATION_WARNING } from '../../../constants';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport { GroupChannelContexts } from '../module/moduleContext';\nimport type { GroupChannelProps } from '../types';\n\nconst HANDLE_NEXT_MSG_SEPARATELY = Platform.select({ default: true });\n\nconst GroupChannelMessageList = ({\n currentUserId,\n channel,\n messages,\n renderMessage,\n nextMessages,\n newMessagesFromMembers,\n onBottomReached,\n onTopReached,\n renderNewMessagesButton,\n renderScrollToBottomButton,\n onResendFailedMessage,\n onDeleteMessage,\n onPressImageMessage,\n onPressMediaMessage,\n flatListProps,\n enableMessageGrouping,\n}: GroupChannelProps['MessageList']) => {\n const { STRINGS } = useLocalization();\n const { colors } = useUIKitTheme();\n const { left, right } = useSafeAreaInsets();\n const [scrollLeaveBottom, setScrollLeaveBottom] = useState(false);\n const scrollRef = useRef<ChatFlatListRef>(null);\n const [newMessagesInternalBuffer, setNewMessagesInternalBuffer] = useState(() => newMessagesFromMembers);\n const getMessagePressActions = useGetMessagePressActions({\n channel,\n currentUserId,\n onDeleteMessage,\n onResendFailedMessage,\n onPressImageMessage,\n onPressMediaMessage,\n });\n\n const safeAreaLayout = { paddingLeft: left, paddingRight: right };\n\n const renderItem: ListRenderItem<SendbirdMessage> = useFreshCallback(({ item, index }) => {\n const { onPress, onLongPress } = getMessagePressActions(item);\n return renderMessage({\n message: item,\n prevMessage: messages[index + 1],\n nextMessage: messages[index - 1],\n onPress,\n onLongPress,\n enableMessageGrouping,\n channel,\n currentUserId,\n });\n });\n\n if (!HANDLE_NEXT_MSG_SEPARATELY) {\n useEffect(() => {\n if (newMessagesInternalBuffer.length !== 0) {\n setNewMessagesInternalBuffer((prev) => prev.concat(newMessagesFromMembers));\n }\n onBottomReached();\n }, [newMessagesFromMembers]);\n }\n\n const onLeaveScrollBottom = useCallback((val: boolean) => {\n if (!HANDLE_NEXT_MSG_SEPARATELY) setNewMessagesInternalBuffer([]);\n setScrollLeaveBottom(val);\n }, []);\n\n return (\n <View style={[{ flex: 1, backgroundColor: colors.background }, safeAreaLayout]}>\n {channel.isFrozen && (\n <ChannelFrozenBanner style={styles.frozenBanner} text={STRINGS.GROUP_CHANNEL.LIST_BANNER_FROZEN} />\n )}\n <ChatFlatList\n nextMessages={nextMessages}\n onBottomReached={onBottomReached}\n onTopReached={onTopReached}\n onLeaveScrollBottom={onLeaveScrollBottom}\n currentUserId={currentUserId}\n {...flatListProps}\n listKey={`group-channel-messages-${channel.url}`}\n ref={scrollRef}\n data={messages}\n renderItem={renderItem}\n keyExtractor={messageKeyExtractor}\n contentContainerStyle={[\n // { minHeight: '100%', justifyContent: 'flex-end' },\n channel.isFrozen && styles.frozenListPadding,\n flatListProps?.contentContainerStyle,\n ]}\n />\n {renderNewMessagesButton && (\n <View style={[styles.newMsgButton, safeAreaLayout]}>\n {renderNewMessagesButton({\n visible: scrollLeaveBottom,\n onPress: () => scrollRef.current?.scrollToBottom(false),\n newMessages: !HANDLE_NEXT_MSG_SEPARATELY ? newMessagesInternalBuffer : newMessagesFromMembers,\n })}\n </View>\n )}\n {renderScrollToBottomButton && (\n <View pointerEvents={scrollLeaveBottom ? 'auto' : 'none'} style={[styles.scrollButton, safeAreaLayout]}>\n {renderScrollToBottomButton({\n visible: scrollLeaveBottom,\n onPress: () => scrollRef.current?.scrollToBottom(false),\n })}\n </View>\n )}\n </View>\n );\n};\n\ntype HandleableMessage = SendbirdUserMessage | SendbirdFileMessage;\nconst useGetMessagePressActions = ({\n channel,\n currentUserId,\n onResendFailedMessage,\n onDeleteMessage,\n onPressImageMessage,\n onPressMediaMessage,\n}: Pick<\n GroupChannelProps['MessageList'],\n | 'channel'\n | 'currentUserId'\n | 'onResendFailedMessage'\n | 'onDeleteMessage'\n | 'onPressImageMessage'\n | 'onPressMediaMessage'\n>) => {\n const { colors } = useUIKitTheme();\n const { STRINGS } = useLocalization();\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { alert } = useAlert();\n const { clipboardService, fileService } = usePlatformService();\n const { features } = useSendbirdChat();\n const { setMessageToEdit } = useContext(GroupChannelContexts.Fragment);\n\n const handleFailedMessage = (message: HandleableMessage) => {\n openSheet({\n sheetItems: [\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_FAILED_RETRY,\n onPress: () =>\n onResendFailedMessage(message).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error')),\n },\n {\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_FAILED_REMOVE,\n titleColor: colors.ui.dialog.default.none.destructive,\n onPress: () => confirmDelete(message),\n },\n ],\n });\n };\n const confirmDelete = (message: HandleableMessage) => {\n alert({\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_TITLE,\n buttons: [\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_CANCEL,\n },\n {\n text: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE_CONFIRM_OK,\n style: 'destructive',\n onPress: () => onDeleteMessage(message).catch(() => toast.show(STRINGS.TOAST.DELETE_MSG_ERROR, 'error')),\n },\n ],\n });\n };\n\n return (msg: SendbirdMessage) => {\n if (!msg.isUserMessage() && !msg.isFileMessage()) {\n return { onPress: undefined, onLongPress: undefined };\n }\n\n const sheetItems: BottomSheetItem['sheetItems'] = [];\n const response: { onPress?: () => void; onLongPress?: () => void } = {\n onPress: undefined,\n onLongPress: undefined,\n };\n\n if (msg.isUserMessage()) {\n sheetItems.push({\n icon: 'copy',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_COPY,\n onPress: () => {\n clipboardService.setString(msg.message || '');\n toast.show(STRINGS.TOAST.COPY_OK, 'success');\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push(\n {\n icon: 'edit',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_EDIT,\n onPress: () => setMessageToEdit(msg),\n },\n {\n icon: 'delete',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n },\n );\n }\n }\n\n if (msg.isFileMessage()) {\n sheetItems.push({\n icon: 'download',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_SAVE,\n onPress: async () => {\n if (toMegabyte(msg.size) > 4) {\n toast.show(STRINGS.TOAST.DOWNLOAD_START, 'success');\n }\n\n fileService\n .save({ fileUrl: msg.url, fileName: msg.name, fileType: msg.type })\n .then((response) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_OK, 'success');\n Logger.log('File saved to', response);\n })\n .catch((err) => {\n toast.show(STRINGS.TOAST.DOWNLOAD_ERROR, 'error');\n Logger.log('File save failure', err);\n });\n },\n });\n\n if (isMyMessage(msg, currentUserId) && msg.sendingStatus === 'succeeded') {\n sheetItems.push({\n icon: 'delete',\n title: STRINGS.GROUP_CHANNEL.DIALOG_MESSAGE_DELETE,\n onPress: () => confirmDelete(msg),\n });\n }\n\n const fileType = getFileType(msg.type || getFileExtension(msg.name));\n switch (fileType) {\n case 'image':\n case 'video':\n case 'audio': {\n response.onPress = () => {\n if (onPressImageMessage && fileType === 'image') {\n Logger.warn(DEPRECATION_WARNING.GROUP_CHANNEL.ON_PRESS_IMAGE_MESSAGE);\n onPressImageMessage(msg, getAvailableUriFromFileMessage(msg));\n }\n onPressMediaMessage?.(msg, () => onDeleteMessage(msg), getAvailableUriFromFileMessage(msg));\n };\n break;\n }\n default: {\n response.onPress = () => SBUUtils.openURL(msg.url);\n break;\n }\n }\n }\n\n if (sheetItems.length > 0) {\n response.onLongPress = () => {\n openSheet({\n sheetItems,\n HeaderComponent: shouldRenderReaction(channel, features.reactionEnabled)\n ? ({ onClose }) => <ReactionAddons.BottomSheet message={msg} channel={channel} onClose={onClose} />\n : undefined,\n });\n };\n }\n\n if (msg.sendingStatus === 'failed') {\n response.onLongPress = () => handleFailedMessage(msg);\n response.onPress = () => {\n onResendFailedMessage(msg).catch(() => toast.show(STRINGS.TOAST.RESEND_MSG_ERROR, 'error'));\n };\n }\n\n if (msg.sendingStatus === 'pending') {\n response.onLongPress = undefined;\n response.onPress = undefined;\n }\n\n return response;\n };\n};\n\nconst styles = createStyleSheet({\n frozenBanner: {\n position: 'absolute',\n zIndex: 999,\n top: 8,\n left: 8,\n right: 8,\n },\n frozenListPadding: {\n paddingBottom: 32,\n },\n newMsgButton: {\n position: 'absolute',\n zIndex: 999,\n bottom: 10,\n alignSelf: 'center',\n },\n scrollButton: {\n position: 'absolute',\n zIndex: 998,\n bottom: 10,\n right: 16,\n },\n});\n\nexport default React.memo(GroupChannelMessageList);\n"],"mappings":";;AAAA,OAAOA,KAAP,IAAgBC,WAAhB,EAA6BC,UAA7B,EAAyCC,SAAzC,EAAoDC,MAApD,EAA4DC,QAA5D,QAA4E,OAA5E;AACA,SAAyBC,QAAzB,EAAmCC,IAAnC,QAA+C,cAA/C;AACA,SAASC,iBAAT,QAAkC,gCAAlC;AAGA,SACEC,mBADF,EAEEC,gBAFF,EAGEC,QAHF,EAIEC,cAJF,EAKEC,QALF,EAMEC,aANF,QAOO,yCAPP;AASA,SACEC,MADF,EAEEC,8BAFF,EAGEC,gBAHF,EAIEC,WAJF,EAKEC,WALF,EAMEC,mBANF,EAOEC,oBAPF,EAQEC,UARF,EASEC,gBATF,QAUO,uBAVP;AAaA,OAAOC,YAAP,MAAyB,kCAAzB;AACA,SAASC,cAAT,QAA+B,oCAA/B;AACA,SAASC,mBAAT,QAAoC,oBAApC;AACA,SAASC,eAAT,EAA0BC,kBAA1B,EAA8CC,eAA9C,QAAqE,2BAArE;AACA,OAAOC,QAAP,MAAqB,wBAArB;AACA,SAASC,oBAAT,QAAqC,yBAArC;AAGA,MAAMC,0BAA0B,GAAG1B,QAAQ,CAAC2B,MAAT,CAAgB;EAAEC,OAAO,EAAE;AAAX,CAAhB,CAAnC;;AAEA,MAAMC,uBAAuB,GAAG,QAiBQ;EAAA,IAjBP;IAC/BC,aAD+B;IAE/BC,OAF+B;IAG/BC,QAH+B;IAI/BC,aAJ+B;IAK/BC,YAL+B;IAM/BC,sBAN+B;IAO/BC,eAP+B;IAQ/BC,YAR+B;IAS/BC,uBAT+B;IAU/BC,0BAV+B;IAW/BC,qBAX+B;IAY/BC,eAZ+B;IAa/BC,mBAb+B;IAc/BC,mBAd+B;IAe/BC,aAf+B;IAgB/BC;EAhB+B,CAiBO;EACtC,MAAM;IAAEC;EAAF,IAAczB,eAAe,EAAnC;EACA,MAAM;IAAE0B;EAAF,IAAavC,aAAa,EAAhC;EACA,MAAM;IAAEwC,IAAF;IAAQC;EAAR,IAAkB/C,iBAAiB,EAAzC;EACA,MAAM,CAACgD,iBAAD,EAAoBC,oBAApB,IAA4CpD,QAAQ,CAAC,KAAD,CAA1D;EACA,MAAMqD,SAAS,GAAGtD,MAAM,CAAkB,IAAlB,CAAxB;EACA,MAAM,CAACuD,yBAAD,EAA4BC,4BAA5B,IAA4DvD,QAAQ,CAAC,MAAMoC,sBAAP,CAA1E;EACA,MAAMoB,sBAAsB,GAAGC,yBAAyB,CAAC;IACvDzB,OADuD;IAEvDD,aAFuD;IAGvDW,eAHuD;IAIvDD,qBAJuD;IAKvDE,mBALuD;IAMvDC;EANuD,CAAD,CAAxD;EASA,MAAMc,cAAc,GAAG;IAAEC,WAAW,EAAEV,IAAf;IAAqBW,YAAY,EAAEV;EAAnC,CAAvB;EAEA,MAAMW,UAA2C,GAAG3C,gBAAgB,CAAC,SAAqB;IAAA,IAApB;MAAE4C,IAAF;MAAQC;IAAR,CAAoB;IACxF,MAAM;MAAEC,OAAF;MAAWC;IAAX,IAA2BT,sBAAsB,CAACM,IAAD,CAAvD;IACA,OAAO5B,aAAa,CAAC;MACnBgC,OAAO,EAAEJ,IADU;MAEnBK,WAAW,EAAElC,QAAQ,CAAC8B,KAAK,GAAG,CAAT,CAFF;MAGnBK,WAAW,EAAEnC,QAAQ,CAAC8B,KAAK,GAAG,CAAT,CAHF;MAInBC,OAJmB;MAKnBC,WALmB;MAMnBnB,qBANmB;MAOnBd,OAPmB;MAQnBD;IARmB,CAAD,CAApB;EAUD,CAZmE,CAApE;;EAcA,IAAI,CAACJ,0BAAL,EAAiC;IAC/B7B,SAAS,CAAC,MAAM;MACd,IAAIwD,yBAAyB,CAACe,MAA1B,KAAqC,CAAzC,EAA4C;QAC1Cd,4BAA4B,CAAEe,IAAD,IAAUA,IAAI,CAACC,MAAL,CAAYnC,sBAAZ,CAAX,CAA5B;MACD;;MACDC,eAAe;IAChB,CALQ,EAKN,CAACD,sBAAD,CALM,CAAT;EAMD;;EAED,MAAMoC,mBAAmB,GAAG5E,WAAW,CAAE6E,GAAD,IAAkB;IACxD,IAAI,CAAC9C,0BAAL,EAAiC4B,4BAA4B,CAAC,EAAD,CAA5B;IACjCH,oBAAoB,CAACqB,GAAD,CAApB;EACD,CAHsC,EAGpC,EAHoC,CAAvC;EAKA,oBACE,oBAAC,IAAD;IAAM,KAAK,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAR;MAAWC,eAAe,EAAE3B,MAAM,CAAC4B;IAAnC,CAAD,EAAkDlB,cAAlD;EAAb,GACG1B,OAAO,CAAC6C,QAAR,iBACC,oBAAC,mBAAD;IAAqB,KAAK,EAAEC,MAAM,CAACC,YAAnC;IAAiD,IAAI,EAAEhC,OAAO,CAACiC,aAAR,CAAsBC;EAA7E,EAFJ,eAIE,oBAAC,YAAD;IACE,YAAY,EAAE9C,YADhB;IAEE,eAAe,EAAEE,eAFnB;IAGE,YAAY,EAAEC,YAHhB;IAIE,mBAAmB,EAAEkC,mBAJvB;IAKE,aAAa,EAAEzC;EALjB,GAMMc,aANN;IAOE,OAAO,EAAG,0BAAyBb,OAAO,CAACkD,GAAI,EAPjD;IAQE,GAAG,EAAE7B,SARP;IASE,IAAI,EAAEpB,QATR;IAUE,UAAU,EAAE4B,UAVd;IAWE,YAAY,EAAE9C,mBAXhB;IAYE,qBAAqB,EAAE,CACrB;IACAiB,OAAO,CAAC6C,QAAR,IAAoBC,MAAM,CAACK,iBAFN,EAGrBtC,aAHqB,aAGrBA,aAHqB,uBAGrBA,aAAa,CAAEuC,qBAHM;EAZzB,GAJF,EAsBG7C,uBAAuB,iBACtB,oBAAC,IAAD;IAAM,KAAK,EAAE,CAACuC,MAAM,CAACO,YAAR,EAAsB3B,cAAtB;EAAb,GACGnB,uBAAuB,CAAC;IACvB+C,OAAO,EAAEnC,iBADc;IAEvBa,OAAO,EAAE;MAAA;;MAAA,6BAAMX,SAAS,CAACkC,OAAhB,uDAAM,mBAAmBC,cAAnB,CAAkC,KAAlC,CAAN;IAAA,CAFc;IAGvBC,WAAW,EAAE,CAAC9D,0BAAD,GAA8B2B,yBAA9B,GAA0DlB;EAHhD,CAAD,CAD1B,CAvBJ,EA+BGI,0BAA0B,iBACzB,oBAAC,IAAD;IAAM,aAAa,EAAEW,iBAAiB,GAAG,MAAH,GAAY,MAAlD;IAA0D,KAAK,EAAE,CAAC2B,MAAM,CAACY,YAAR,EAAsBhC,cAAtB;EAAjE,GACGlB,0BAA0B,CAAC;IAC1B8C,OAAO,EAAEnC,iBADiB;IAE1Ba,OAAO,EAAE;MAAA;;MAAA,8BAAMX,SAAS,CAACkC,OAAhB,wDAAM,oBAAmBC,cAAnB,CAAkC,KAAlC,CAAN;IAAA;EAFiB,CAAD,CAD7B,CAhCJ,CADF;AA0CD,CAzGD;;AA4GA,MAAM/B,yBAAyB,GAAG,SAe5B;EAAA,IAf6B;IACjCzB,OADiC;IAEjCD,aAFiC;IAGjCU,qBAHiC;IAIjCC,eAJiC;IAKjCC,mBALiC;IAMjCC;EANiC,CAe7B;EACJ,MAAM;IAAEI;EAAF,IAAavC,aAAa,EAAhC;EACA,MAAM;IAAEsC;EAAF,IAAczB,eAAe,EAAnC;EACA,MAAMqE,KAAK,GAAGnF,QAAQ,EAAtB;EACA,MAAM;IAAEoF;EAAF,IAAgBrF,cAAc,EAApC;EACA,MAAM;IAAEsF;EAAF,IAAYvF,QAAQ,EAA1B;EACA,MAAM;IAAEwF,gBAAF;IAAoBC;EAApB,IAAoCxE,kBAAkB,EAA5D;EACA,MAAM;IAAEyE;EAAF,IAAexE,eAAe,EAApC;EACA,MAAM;IAAEyE;EAAF,IAAuBpG,UAAU,CAAC6B,oBAAoB,CAACwE,QAAtB,CAAvC;;EAEA,MAAMC,mBAAmB,GAAIjC,OAAD,IAAgC;IAC1D0B,SAAS,CAAC;MACRQ,UAAU,EAAE,CACV;QACEC,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBsB,2BAD/B;QAEEtC,OAAO,EAAE,MACPvB,qBAAqB,CAACyB,OAAD,CAArB,CAA+BqC,KAA/B,CAAqC,MAAMZ,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAcC,gBAAzB,EAA2C,OAA3C,CAA3C;MAHJ,CADU,EAMV;QACEL,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsB2B,4BAD/B;QAEEC,UAAU,EAAE5D,MAAM,CAAC6D,EAAP,CAAUC,MAAV,CAAiBjF,OAAjB,CAAyBkF,IAAzB,CAA8BC,WAF5C;QAGEhD,OAAO,EAAE,MAAMiD,aAAa,CAAC/C,OAAD;MAH9B,CANU;IADJ,CAAD,CAAT;EAcD,CAfD;;EAgBA,MAAM+C,aAAa,GAAI/C,OAAD,IAAgC;IACpD2B,KAAK,CAAC;MACJQ,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBkC,mCADzB;MAEJC,OAAO,EAAE,CACP;QACEC,IAAI,EAAErE,OAAO,CAACiC,aAAR,CAAsBqC;MAD9B,CADO,EAIP;QACED,IAAI,EAAErE,OAAO,CAACiC,aAAR,CAAsBsC,gCAD9B;QAEEC,KAAK,EAAE,aAFT;QAGEvD,OAAO,EAAE,MAAMtB,eAAe,CAACwB,OAAD,CAAf,CAAyBqC,KAAzB,CAA+B,MAAMZ,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAce,gBAAzB,EAA2C,OAA3C,CAArC;MAHjB,CAJO;IAFL,CAAD,CAAL;EAaD,CAdD;;EAgBA,OAAQC,GAAD,IAA0B;IAC/B,IAAI,CAACA,GAAG,CAACC,aAAJ,EAAD,IAAwB,CAACD,GAAG,CAACE,aAAJ,EAA7B,EAAkD;MAChD,OAAO;QAAE3D,OAAO,EAAE4D,SAAX;QAAsB3D,WAAW,EAAE2D;MAAnC,CAAP;IACD;;IAED,MAAMxB,UAAyC,GAAG,EAAlD;IACA,MAAMyB,QAA4D,GAAG;MACnE7D,OAAO,EAAE4D,SAD0D;MAEnE3D,WAAW,EAAE2D;IAFsD,CAArE;;IAKA,IAAIH,GAAG,CAACC,aAAJ,EAAJ,EAAyB;MACvBtB,UAAU,CAAC0B,IAAX,CAAgB;QACdC,IAAI,EAAE,MADQ;QAEd1B,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBgD,mBAFf;QAGdhE,OAAO,EAAE,MAAM;UACb8B,gBAAgB,CAACmC,SAAjB,CAA2BR,GAAG,CAACvD,OAAJ,IAAe,EAA1C;UACAyB,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAcyB,OAAzB,EAAkC,SAAlC;QACD;MANa,CAAhB;;MASA,IAAIpH,WAAW,CAAC2G,GAAD,EAAM1F,aAAN,CAAX,IAAmC0F,GAAG,CAACU,aAAJ,KAAsB,WAA7D,EAA0E;QACxE/B,UAAU,CAAC0B,IAAX,CACE;UACEC,IAAI,EAAE,MADR;UAEE1B,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBoD,mBAF/B;UAGEpE,OAAO,EAAE,MAAMiC,gBAAgB,CAACwB,GAAD;QAHjC,CADF,EAME;UACEM,IAAI,EAAE,QADR;UAEE1B,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBqD,qBAF/B;UAGErE,OAAO,EAAE,MAAMiD,aAAa,CAACQ,GAAD;QAH9B,CANF;MAYD;IACF;;IAED,IAAIA,GAAG,CAACE,aAAJ,EAAJ,EAAyB;MACvBvB,UAAU,CAAC0B,IAAX,CAAgB;QACdC,IAAI,EAAE,UADQ;QAEd1B,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBsD,mBAFf;QAGdtE,OAAO,EAAE,YAAY;UACnB,IAAI/C,UAAU,CAACwG,GAAG,CAACc,IAAL,CAAV,GAAuB,CAA3B,EAA8B;YAC5B5C,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAc+B,cAAzB,EAAyC,SAAzC;UACD;;UAEDzC,WAAW,CACR0C,IADH,CACQ;YAAEC,OAAO,EAAEjB,GAAG,CAACvC,GAAf;YAAoByD,QAAQ,EAAElB,GAAG,CAACmB,IAAlC;YAAwCC,QAAQ,EAAEpB,GAAG,CAACqB;UAAtD,CADR,EAEGC,IAFH,CAESlB,QAAD,IAAc;YAClBlC,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAcuC,WAAzB,EAAsC,SAAtC;YACAtI,MAAM,CAACuI,GAAP,CAAW,eAAX,EAA4BpB,QAA5B;UACD,CALH,EAMGtB,KANH,CAMU2C,GAAD,IAAS;YACdvD,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAc0C,cAAzB,EAAyC,OAAzC;YACAzI,MAAM,CAACuI,GAAP,CAAW,mBAAX,EAAgCC,GAAhC;UACD,CATH;QAUD;MAlBa,CAAhB;;MAqBA,IAAIpI,WAAW,CAAC2G,GAAD,EAAM1F,aAAN,CAAX,IAAmC0F,GAAG,CAACU,aAAJ,KAAsB,WAA7D,EAA0E;QACxE/B,UAAU,CAAC0B,IAAX,CAAgB;UACdC,IAAI,EAAE,QADQ;UAEd1B,KAAK,EAAEtD,OAAO,CAACiC,aAAR,CAAsBqD,qBAFf;UAGdrE,OAAO,EAAE,MAAMiD,aAAa,CAACQ,GAAD;QAHd,CAAhB;MAKD;;MAED,MAAMoB,QAAQ,GAAGhI,WAAW,CAAC4G,GAAG,CAACqB,IAAJ,IAAYlI,gBAAgB,CAAC6G,GAAG,CAACmB,IAAL,CAA7B,CAA5B;;MACA,QAAQC,QAAR;QACE,KAAK,OAAL;QACA,KAAK,OAAL;QACA,KAAK,OAAL;UAAc;YACZhB,QAAQ,CAAC7D,OAAT,GAAmB,MAAM;cACvB,IAAIrB,mBAAmB,IAAIkG,QAAQ,KAAK,OAAxC,EAAiD;gBAC/CnI,MAAM,CAAC0I,IAAP,CAAY/H,mBAAmB,CAAC2D,aAApB,CAAkCqE,sBAA9C;gBACA1G,mBAAmB,CAAC8E,GAAD,EAAM9G,8BAA8B,CAAC8G,GAAD,CAApC,CAAnB;cACD;;cACD7E,mBAAmB,SAAnB,IAAAA,mBAAmB,WAAnB,YAAAA,mBAAmB,CAAG6E,GAAH,EAAQ,MAAM/E,eAAe,CAAC+E,GAAD,CAA7B,EAAoC9G,8BAA8B,CAAC8G,GAAD,CAAlE,CAAnB;YACD,CAND;;YAOA;UACD;;QACD;UAAS;YACPI,QAAQ,CAAC7D,OAAT,GAAmB,MAAMvC,QAAQ,CAAC6H,OAAT,CAAiB7B,GAAG,CAACvC,GAArB,CAAzB;;YACA;UACD;MAhBH;IAkBD;;IAED,IAAIkB,UAAU,CAAC/B,MAAX,GAAoB,CAAxB,EAA2B;MACzBwD,QAAQ,CAAC5D,WAAT,GAAuB,MAAM;QAC3B2B,SAAS,CAAC;UACRQ,UADQ;UAERmD,eAAe,EAAEvI,oBAAoB,CAACgB,OAAD,EAAUgE,QAAQ,CAACwD,eAAnB,CAApB,GACb;YAAA,IAAC;cAAEC;YAAF,CAAD;YAAA,oBAAiB,oBAAC,cAAD,CAAgB,WAAhB;cAA4B,OAAO,EAAEhC,GAArC;cAA0C,OAAO,EAAEzF,OAAnD;cAA4D,OAAO,EAAEyH;YAArE,EAAjB;UAAA,CADa,GAEb7B;QAJI,CAAD,CAAT;MAMD,CAPD;IAQD;;IAED,IAAIH,GAAG,CAACU,aAAJ,KAAsB,QAA1B,EAAoC;MAClCN,QAAQ,CAAC5D,WAAT,GAAuB,MAAMkC,mBAAmB,CAACsB,GAAD,CAAhD;;MACAI,QAAQ,CAAC7D,OAAT,GAAmB,MAAM;QACvBvB,qBAAqB,CAACgF,GAAD,CAArB,CAA2BlB,KAA3B,CAAiC,MAAMZ,KAAK,CAACa,IAAN,CAAWzD,OAAO,CAAC0D,KAAR,CAAcC,gBAAzB,EAA2C,OAA3C,CAAvC;MACD,CAFD;IAGD;;IAED,IAAIe,GAAG,CAACU,aAAJ,KAAsB,SAA1B,EAAqC;MACnCN,QAAQ,CAAC5D,WAAT,GAAuB2D,SAAvB;MACAC,QAAQ,CAAC7D,OAAT,GAAmB4D,SAAnB;IACD;;IAED,OAAOC,QAAP;EACD,CAhHD;AAiHD,CA1KD;;AA4KA,MAAM/C,MAAM,GAAGzE,gBAAgB,CAAC;EAC9B0E,YAAY,EAAE;IACZ2E,QAAQ,EAAE,UADE;IAEZC,MAAM,EAAE,GAFI;IAGZC,GAAG,EAAE,CAHO;IAIZ3G,IAAI,EAAE,CAJM;IAKZC,KAAK,EAAE;EALK,CADgB;EAQ9BiC,iBAAiB,EAAE;IACjB0E,aAAa,EAAE;EADE,CARW;EAW9BxE,YAAY,EAAE;IACZqE,QAAQ,EAAE,UADE;IAEZC,MAAM,EAAE,GAFI;IAGZG,MAAM,EAAE,EAHI;IAIZC,SAAS,EAAE;EAJC,CAXgB;EAiB9BrE,YAAY,EAAE;IACZgE,QAAQ,EAAE,UADE;IAEZC,MAAM,EAAE,GAFI;IAGZG,MAAM,EAAE,EAHI;IAIZ5G,KAAK,EAAE;EAJK;AAjBgB,CAAD,CAA/B;AAyBA,4BAAevD,KAAK,CAACqK,IAAN,CAAWlI,uBAAX,CAAf"}
@@ -83,7 +83,7 @@ export const GroupChannelSettingsContextsProvider = _ref => {
83
83
  if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
84
84
  alert({
85
85
  title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
86
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),
86
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_CAMERA, STRINGS.LABELS.PERMISSION_APP_NAME),
87
87
  buttons: [{
88
88
  text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
89
89
  onPress: () => SBUUtils.openSettings()
@@ -109,7 +109,7 @@ export const GroupChannelSettingsContextsProvider = _ref => {
109
109
  if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {
110
110
  alert({
111
111
  title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,
112
- message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),
112
+ message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(STRINGS.LABELS.PERMISSION_DEVICE_STORAGE, STRINGS.LABELS.PERMISSION_APP_NAME),
113
113
  buttons: [{
114
114
  text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK,
115
115
  onPress: () => SBUUtils.openSettings()
@@ -1 +1 @@
1
- {"version":3,"names":["React","createContext","useCallback","useChannelHandler","useActionMenu","useAlert","useBottomSheet","usePrompt","useToast","NOOP","isDifferentChannel","useForceUpdate","useUniqId","ProviderLayout","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","GroupChannelSettingsContexts","Fragment","channel","headerTitle","headerRight","onPressHeaderRight","HOOK_NAME","GroupChannelSettingsContextsProvider","children","uniqId","forceUpdate","STRINGS","sdk","fileService","alert","onChannelChanged","eventChannel","onChannelFrozen","onChannelUnfrozen","onUserBanned","toast","openSheet","openPrompt","openMenu","updateChannel","params","changeChannelName","title","GROUP_CHANNEL_SETTINGS","DIALOG_CHANGE_NAME_PROMPT_TITLE","submitLabel","DIALOG_CHANGE_NAME_PROMPT_OK","placeholder","DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER","defaultValue","name","onSubmit","channelName","changeChannelImage","DIALOG_CHANGE_IMAGE_MENU_TITLE","menuItems","DIALOG_CHANGE_IMAGE_MENU_CAMERA","onPress","file","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","buttons","text","ALERT_PERMISSIONS_OK","openSettings","show","TOAST","OPEN_CAMERA_ERROR","coverImage","DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY","files","openMediaLibrary","selectionLimit","OPEN_PHOTO_LIBRARY_ERROR","sheetItems","DIALOG_CHANGE_NAME","DIALOG_CHANGE_IMAGE","HEADER_TITLE","HEADER_RIGHT"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useActionMenu, useAlert, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';\nimport {\n NOOP,\n SendbirdBaseChannel,\n SendbirdGroupChannel,\n SendbirdGroupChannelUpdateParams,\n isDifferentChannel,\n useForceUpdate,\n useUniqId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport SBUError from '../../../libs/SBUError';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport type { GroupChannelSettingsContextsType, GroupChannelSettingsModule } from '../types';\n\nexport const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {\n Fragment: createContext({\n channel: {} as SendbirdGroupChannel,\n headerTitle: '',\n headerRight: '',\n onPressHeaderRight: NOOP,\n }),\n};\n\nconst HOOK_NAME = 'GroupChannelSettingsContextsProvider';\nexport const GroupChannelSettingsContextsProvider: GroupChannelSettingsModule['Provider'] = ({ children, channel }) => {\n const uniqId = useUniqId(HOOK_NAME);\n const forceUpdate = useForceUpdate();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { fileService } = usePlatformService();\n const { alert } = useAlert();\n\n const onChannelChanged = (eventChannel: SendbirdBaseChannel) => {\n if (isDifferentChannel(eventChannel, channel)) return;\n forceUpdate();\n };\n\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onChannelChanged: onChannelChanged,\n onChannelFrozen: onChannelChanged,\n onChannelUnfrozen: onChannelChanged,\n onUserBanned: onChannelChanged,\n });\n\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { openPrompt } = usePrompt();\n const { openMenu } = useActionMenu();\n\n const updateChannel = useCallback(\n async (params: SendbirdGroupChannelUpdateParams) => {\n await channel.updateChannel(params);\n forceUpdate();\n },\n [channel],\n );\n\n const changeChannelName = useCallback(() => {\n openPrompt({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_TITLE,\n submitLabel: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_OK,\n placeholder: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER,\n defaultValue: channel.name,\n onSubmit: (channelName) => updateChannel({ name: channelName }),\n });\n }, [STRINGS, updateChannel, channel.name]);\n\n const changeChannelImage = useCallback(() => {\n openMenu({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_TITLE,\n menuItems: [\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const file = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('camera', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n if (!file) return;\n\n await updateChannel({ coverImage: file });\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const files = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE('device storage', 'UIKitSample'),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n if (!files || !files[0]) return;\n\n await updateChannel({ coverImage: files[0] });\n },\n },\n ],\n });\n }, [STRINGS, updateChannel]);\n\n const onPressHeaderRight = useCallback(() => {\n openSheet({\n sheetItems: [\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME, onPress: changeChannelName },\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE, onPress: changeChannelImage },\n ],\n });\n }, [STRINGS, changeChannelImage, changeChannelName]);\n\n return (\n <ProviderLayout>\n <GroupChannelSettingsContexts.Fragment.Provider\n value={{\n channel,\n headerTitle: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_TITLE,\n headerRight: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_RIGHT,\n onPressHeaderRight,\n }}\n >\n {children}\n </GroupChannelSettingsContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","createContext","useCallback","useChannelHandler","useActionMenu","useAlert","useBottomSheet","usePrompt","useToast","NOOP","isDifferentChannel","useForceUpdate","useUniqId","ProviderLayout","useLocalization","usePlatformService","useSendbirdChat","SBUError","SBUUtils","GroupChannelSettingsContexts","Fragment","channel","headerTitle","headerRight","onPressHeaderRight","HOOK_NAME","GroupChannelSettingsContextsProvider","children","uniqId","forceUpdate","STRINGS","sdk","fileService","alert","onChannelChanged","eventChannel","onChannelFrozen","onChannelUnfrozen","onUserBanned","toast","openSheet","openPrompt","openMenu","updateChannel","params","changeChannelName","title","GROUP_CHANNEL_SETTINGS","DIALOG_CHANGE_NAME_PROMPT_TITLE","submitLabel","DIALOG_CHANGE_NAME_PROMPT_OK","placeholder","DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER","defaultValue","name","onSubmit","channelName","changeChannelImage","DIALOG_CHANGE_IMAGE_MENU_TITLE","menuItems","DIALOG_CHANGE_IMAGE_MENU_CAMERA","onPress","file","openCamera","mediaType","onOpenFailure","error","code","CODE","ERR_PERMISSIONS_DENIED","DIALOG","ALERT_PERMISSIONS_TITLE","message","ALERT_PERMISSIONS_MESSAGE","LABELS","PERMISSION_CAMERA","PERMISSION_APP_NAME","buttons","text","ALERT_PERMISSIONS_OK","openSettings","show","TOAST","OPEN_CAMERA_ERROR","coverImage","DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY","files","openMediaLibrary","selectionLimit","PERMISSION_DEVICE_STORAGE","OPEN_PHOTO_LIBRARY_ERROR","sheetItems","DIALOG_CHANGE_NAME","DIALOG_CHANGE_IMAGE","HEADER_TITLE","HEADER_RIGHT"],"sources":["moduleContext.tsx"],"sourcesContent":["import React, { createContext, useCallback } from 'react';\n\nimport { useChannelHandler } from '@sendbird/uikit-chat-hooks';\nimport { useActionMenu, useAlert, useBottomSheet, usePrompt, useToast } from '@sendbird/uikit-react-native-foundation';\nimport {\n NOOP,\n SendbirdBaseChannel,\n SendbirdGroupChannel,\n SendbirdGroupChannelUpdateParams,\n isDifferentChannel,\n useForceUpdate,\n useUniqId,\n} from '@sendbird/uikit-utils';\n\nimport ProviderLayout from '../../../components/ProviderLayout';\nimport { useLocalization, usePlatformService, useSendbirdChat } from '../../../hooks/useContext';\nimport SBUError from '../../../libs/SBUError';\nimport SBUUtils from '../../../libs/SBUUtils';\nimport type { GroupChannelSettingsContextsType, GroupChannelSettingsModule } from '../types';\n\nexport const GroupChannelSettingsContexts: GroupChannelSettingsContextsType = {\n Fragment: createContext({\n channel: {} as SendbirdGroupChannel,\n headerTitle: '',\n headerRight: '',\n onPressHeaderRight: NOOP,\n }),\n};\n\nconst HOOK_NAME = 'GroupChannelSettingsContextsProvider';\nexport const GroupChannelSettingsContextsProvider: GroupChannelSettingsModule['Provider'] = ({ children, channel }) => {\n const uniqId = useUniqId(HOOK_NAME);\n const forceUpdate = useForceUpdate();\n const { STRINGS } = useLocalization();\n const { sdk } = useSendbirdChat();\n const { fileService } = usePlatformService();\n const { alert } = useAlert();\n\n const onChannelChanged = (eventChannel: SendbirdBaseChannel) => {\n if (isDifferentChannel(eventChannel, channel)) return;\n forceUpdate();\n };\n\n useChannelHandler(sdk, `${HOOK_NAME}_${uniqId}`, {\n onChannelChanged: onChannelChanged,\n onChannelFrozen: onChannelChanged,\n onChannelUnfrozen: onChannelChanged,\n onUserBanned: onChannelChanged,\n });\n\n const toast = useToast();\n const { openSheet } = useBottomSheet();\n const { openPrompt } = usePrompt();\n const { openMenu } = useActionMenu();\n\n const updateChannel = useCallback(\n async (params: SendbirdGroupChannelUpdateParams) => {\n await channel.updateChannel(params);\n forceUpdate();\n },\n [channel],\n );\n\n const changeChannelName = useCallback(() => {\n openPrompt({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_TITLE,\n submitLabel: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_OK,\n placeholder: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME_PROMPT_PLACEHOLDER,\n defaultValue: channel.name,\n onSubmit: (channelName) => updateChannel({ name: channelName }),\n });\n }, [STRINGS, updateChannel, channel.name]);\n\n const changeChannelImage = useCallback(() => {\n openMenu({\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_TITLE,\n menuItems: [\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_CAMERA,\n onPress: async () => {\n const file = await fileService.openCamera({\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_CAMERA,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_CAMERA_ERROR, 'error');\n }\n },\n });\n if (!file) return;\n\n await updateChannel({ coverImage: file });\n },\n },\n {\n title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE_MENU_PHOTO_LIBRARY,\n onPress: async () => {\n const files = await fileService.openMediaLibrary({\n selectionLimit: 1,\n mediaType: 'photo',\n onOpenFailure: (error) => {\n if (error.code === SBUError.CODE.ERR_PERMISSIONS_DENIED) {\n alert({\n title: STRINGS.DIALOG.ALERT_PERMISSIONS_TITLE,\n message: STRINGS.DIALOG.ALERT_PERMISSIONS_MESSAGE(\n STRINGS.LABELS.PERMISSION_DEVICE_STORAGE,\n STRINGS.LABELS.PERMISSION_APP_NAME,\n ),\n buttons: [{ text: STRINGS.DIALOG.ALERT_PERMISSIONS_OK, onPress: () => SBUUtils.openSettings() }],\n });\n } else {\n toast.show(STRINGS.TOAST.OPEN_PHOTO_LIBRARY_ERROR, 'error');\n }\n },\n });\n if (!files || !files[0]) return;\n\n await updateChannel({ coverImage: files[0] });\n },\n },\n ],\n });\n }, [STRINGS, updateChannel]);\n\n const onPressHeaderRight = useCallback(() => {\n openSheet({\n sheetItems: [\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_NAME, onPress: changeChannelName },\n { title: STRINGS.GROUP_CHANNEL_SETTINGS.DIALOG_CHANGE_IMAGE, onPress: changeChannelImage },\n ],\n });\n }, [STRINGS, changeChannelImage, changeChannelName]);\n\n return (\n <ProviderLayout>\n <GroupChannelSettingsContexts.Fragment.Provider\n value={{\n channel,\n headerTitle: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_TITLE,\n headerRight: STRINGS.GROUP_CHANNEL_SETTINGS.HEADER_RIGHT,\n onPressHeaderRight,\n }}\n >\n {children}\n </GroupChannelSettingsContexts.Fragment.Provider>\n </ProviderLayout>\n );\n};\n"],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import React, { useEffect } from 'react';
2
- import { AppState } from 'react-native';
1
+ import React from 'react';
3
2
  import { useGroupChannelList } from '@sendbird/uikit-chat-hooks';
4
- import { PASS, useFreshCallback } from '@sendbird/uikit-utils';
3
+ import { PASS, useAppState, useFreshCallback } from '@sendbird/uikit-utils';
5
4
  import StatusComposition from '../components/StatusComposition';
6
5
  import GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';
7
6
  import createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';
@@ -37,12 +36,9 @@ const createGroupChannelListFragment = initModule => {
37
36
  });
38
37
 
39
38
  if (features.deliveryReceiptEnabled) {
40
- useEffect(() => {
41
- const listener = AppState.addEventListener('change', status => {
42
- if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);
43
- });
44
- return () => listener.remove();
45
- }, []);
39
+ useAppState('change', status => {
40
+ if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);
41
+ });
46
42
  }
47
43
 
48
44
  const _renderGroupChannelPreview = useFreshCallback((channel, onLongPressChannel) => {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useEffect","AppState","useGroupChannelList","PASS","useFreshCallback","StatusComposition","GroupChannelPreviewContainer","createGroupChannelListModule","useSendbirdChat","createGroupChannelListFragment","initModule","GroupChannelListModule","onPressChannel","onPressCreateChannel","queryCreator","collectionCreator","renderGroupChannelPreview","skipTypeSelection","flatListProps","menuItemCreator","sdk","currentUser","features","markAsDeliveredWithChannel","groupChannels","next","loading","userId","enableCollectionWithoutLocalCache","deliveryReceiptEnabled","listener","addEventListener","status","forEach","remove","_renderGroupChannelPreview","channel","onLongPressChannel","isChannelTypeAvailable","broadcastChannelEnabled","superGroupChannelEnabled","ListEmptyComponent","contentContainerStyle","flexGrow"],"sources":["createGroupChannelListFragment.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport { AppState } from 'react-native';\n\nimport { useGroupChannelList } from '@sendbird/uikit-chat-hooks';\nimport { PASS, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';\nimport createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';\nimport type {\n GroupChannelListFragment,\n GroupChannelListModule,\n GroupChannelListProps,\n} from '../domain/groupChannelList/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {\n const GroupChannelListModule = createGroupChannelListModule(initModule);\n return ({\n onPressChannel,\n onPressCreateChannel,\n queryCreator,\n collectionCreator,\n renderGroupChannelPreview,\n skipTypeSelection = false,\n flatListProps = {},\n menuItemCreator = PASS,\n }) => {\n const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();\n const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {\n queryCreator,\n collectionCreator,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n if (features.deliveryReceiptEnabled) {\n useEffect(() => {\n const listener = AppState.addEventListener('change', (status) => {\n if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);\n });\n return () => listener.remove();\n }, []);\n }\n\n const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(\n (channel, onLongPressChannel) => {\n if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);\n return (\n <GroupChannelPreviewContainer\n channel={channel}\n onPress={() => onPressChannel(channel)}\n onLongPress={() => onLongPressChannel()}\n />\n );\n },\n );\n\n const isChannelTypeAvailable = features.broadcastChannelEnabled || features.superGroupChannelEnabled;\n\n return (\n <GroupChannelListModule.Provider>\n <GroupChannelListModule.Header />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelListModule.StatusLoading />}>\n <GroupChannelListModule.List\n menuItemCreator={menuItemCreator}\n renderGroupChannelPreview={_renderGroupChannelPreview}\n groupChannels={groupChannels}\n onLoadNext={next}\n flatListProps={{\n ListEmptyComponent: <GroupChannelListModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }}\n />\n </StatusComposition>\n <GroupChannelListModule.TypeSelector\n skipTypeSelection={isChannelTypeAvailable ? skipTypeSelection : true}\n onSelectType={onPressCreateChannel}\n />\n </GroupChannelListModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelListFragment;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;AACA,SAASC,QAAT,QAAyB,cAAzB;AAEA,SAASC,mBAAT,QAAoC,4BAApC;AACA,SAASC,IAAT,EAAeC,gBAAf,QAAuC,uBAAvC;AAEA,OAAOC,iBAAP,MAA8B,iCAA9B;AACA,OAAOC,4BAAP,MAAyC,4CAAzC;AACA,OAAOC,4BAAP,MAAyC,gEAAzC;AAMA,SAASC,eAAT,QAAgC,qBAAhC;;AAEA,MAAMC,8BAA8B,GAAIC,UAAD,IAA4E;EACjH,MAAMC,sBAAsB,GAAGJ,4BAA4B,CAACG,UAAD,CAA3D;EACA,OAAO,QASD;IAAA,IATE;MACNE,cADM;MAENC,oBAFM;MAGNC,YAHM;MAINC,iBAJM;MAKNC,yBALM;MAMNC,iBAAiB,GAAG,KANd;MAONC,aAAa,GAAG,EAPV;MAQNC,eAAe,GAAGhB;IARZ,CASF;IACJ,MAAM;MAAEiB,GAAF;MAAOC,WAAP;MAAoBC,QAApB;MAA8BC;IAA9B,IAA6Df,eAAe,EAAlF;IACA,MAAM;MAAEgB,aAAF;MAAiBC,IAAjB;MAAuBC;IAAvB,IAAmCxB,mBAAmB,CAACkB,GAAD,EAAMC,WAAN,aAAMA,WAAN,uBAAMA,WAAW,CAAEM,MAAnB,EAA2B;MACrFb,YADqF;MAErFC,iBAFqF;MAGrFa,iCAAiC,EAAE,CAACd;IAHiD,CAA3B,CAA5D;;IAMA,IAAIQ,QAAQ,CAACO,sBAAb,EAAqC;MACnC7B,SAAS,CAAC,MAAM;QACd,MAAM8B,QAAQ,GAAG7B,QAAQ,CAAC8B,gBAAT,CAA0B,QAA1B,EAAqCC,MAAD,IAAY;UAC/D,IAAIA,MAAM,KAAK,QAAf,EAAyBR,aAAa,CAACS,OAAd,CAAsBV,0BAAtB;QAC1B,CAFgB,CAAjB;QAGA,OAAO,MAAMO,QAAQ,CAACI,MAAT,EAAb;MACD,CALQ,EAKN,EALM,CAAT;IAMD;;IAED,MAAMC,0BAAsF,GAAG/B,gBAAgB,CAC7G,CAACgC,OAAD,EAAUC,kBAAV,KAAiC;MAC/B,IAAIrB,yBAAJ,EAA+B,OAAOA,yBAAyB,CAACoB,OAAD,EAAUC,kBAAV,CAAhC;MAC/B,oBACE,oBAAC,4BAAD;QACE,OAAO,EAAED,OADX;QAEE,OAAO,EAAE,MAAMxB,cAAc,CAACwB,OAAD,CAF/B;QAGE,WAAW,EAAE,MAAMC,kBAAkB;MAHvC,EADF;IAOD,CAV4G,CAA/G;;IAaA,MAAMC,sBAAsB,GAAGhB,QAAQ,CAACiB,uBAAT,IAAoCjB,QAAQ,CAACkB,wBAA5E;IAEA,oBACE,oBAAC,sBAAD,CAAwB,QAAxB,qBACE,oBAAC,sBAAD,CAAwB,MAAxB,OADF,eAEE,oBAAC,iBAAD;MAAmB,OAAO,EAAEd,OAA5B;MAAqC,gBAAgB,eAAE,oBAAC,sBAAD,CAAwB,aAAxB;IAAvD,gBACE,oBAAC,sBAAD,CAAwB,IAAxB;MACE,eAAe,EAAEP,eADnB;MAEE,yBAAyB,EAAEgB,0BAF7B;MAGE,aAAa,EAAEX,aAHjB;MAIE,UAAU,EAAEC,IAJd;MAKE,aAAa,EAAE;QACbgB,kBAAkB,eAAE,oBAAC,sBAAD,CAAwB,WAAxB,OADP;QAEbC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE;QAAZ,CAFV;QAGb,GAAGzB;MAHU;IALjB,EADF,CAFF,eAeE,oBAAC,sBAAD,CAAwB,YAAxB;MACE,iBAAiB,EAAEoB,sBAAsB,GAAGrB,iBAAH,GAAuB,IADlE;MAEE,YAAY,EAAEJ;IAFhB,EAfF,CADF;EAsBD,CA/DD;AAgED,CAlED;;AAoEA,eAAeJ,8BAAf"}
1
+ {"version":3,"names":["React","useGroupChannelList","PASS","useAppState","useFreshCallback","StatusComposition","GroupChannelPreviewContainer","createGroupChannelListModule","useSendbirdChat","createGroupChannelListFragment","initModule","GroupChannelListModule","onPressChannel","onPressCreateChannel","queryCreator","collectionCreator","renderGroupChannelPreview","skipTypeSelection","flatListProps","menuItemCreator","sdk","currentUser","features","markAsDeliveredWithChannel","groupChannels","next","loading","userId","enableCollectionWithoutLocalCache","deliveryReceiptEnabled","status","forEach","_renderGroupChannelPreview","channel","onLongPressChannel","isChannelTypeAvailable","broadcastChannelEnabled","superGroupChannelEnabled","ListEmptyComponent","contentContainerStyle","flexGrow"],"sources":["createGroupChannelListFragment.tsx"],"sourcesContent":["import React from 'react';\n\nimport { useGroupChannelList } from '@sendbird/uikit-chat-hooks';\nimport { PASS, useAppState, useFreshCallback } from '@sendbird/uikit-utils';\n\nimport StatusComposition from '../components/StatusComposition';\nimport GroupChannelPreviewContainer from '../containers/GroupChannelPreviewContainer';\nimport createGroupChannelListModule from '../domain/groupChannelList/module/createGroupChannelListModule';\nimport type {\n GroupChannelListFragment,\n GroupChannelListModule,\n GroupChannelListProps,\n} from '../domain/groupChannelList/types';\nimport { useSendbirdChat } from '../hooks/useContext';\n\nconst createGroupChannelListFragment = (initModule?: Partial<GroupChannelListModule>): GroupChannelListFragment => {\n const GroupChannelListModule = createGroupChannelListModule(initModule);\n return ({\n onPressChannel,\n onPressCreateChannel,\n queryCreator,\n collectionCreator,\n renderGroupChannelPreview,\n skipTypeSelection = false,\n flatListProps = {},\n menuItemCreator = PASS,\n }) => {\n const { sdk, currentUser, features, markAsDeliveredWithChannel } = useSendbirdChat();\n const { groupChannels, next, loading } = useGroupChannelList(sdk, currentUser?.userId, {\n queryCreator,\n collectionCreator,\n enableCollectionWithoutLocalCache: !queryCreator,\n });\n\n if (features.deliveryReceiptEnabled) {\n useAppState('change', (status) => {\n if (status === 'active') groupChannels.forEach(markAsDeliveredWithChannel);\n });\n }\n\n const _renderGroupChannelPreview: GroupChannelListProps['List']['renderGroupChannelPreview'] = useFreshCallback(\n (channel, onLongPressChannel) => {\n if (renderGroupChannelPreview) return renderGroupChannelPreview(channel, onLongPressChannel);\n return (\n <GroupChannelPreviewContainer\n channel={channel}\n onPress={() => onPressChannel(channel)}\n onLongPress={() => onLongPressChannel()}\n />\n );\n },\n );\n\n const isChannelTypeAvailable = features.broadcastChannelEnabled || features.superGroupChannelEnabled;\n\n return (\n <GroupChannelListModule.Provider>\n <GroupChannelListModule.Header />\n <StatusComposition loading={loading} LoadingComponent={<GroupChannelListModule.StatusLoading />}>\n <GroupChannelListModule.List\n menuItemCreator={menuItemCreator}\n renderGroupChannelPreview={_renderGroupChannelPreview}\n groupChannels={groupChannels}\n onLoadNext={next}\n flatListProps={{\n ListEmptyComponent: <GroupChannelListModule.StatusEmpty />,\n contentContainerStyle: { flexGrow: 1 },\n ...flatListProps,\n }}\n />\n </StatusComposition>\n <GroupChannelListModule.TypeSelector\n skipTypeSelection={isChannelTypeAvailable ? skipTypeSelection : true}\n onSelectType={onPressCreateChannel}\n />\n </GroupChannelListModule.Provider>\n );\n };\n};\n\nexport default createGroupChannelListFragment;\n"],"mappings":"AAAA,OAAOA,KAAP,MAAkB,OAAlB;AAEA,SAASC,mBAAT,QAAoC,4BAApC;AACA,SAASC,IAAT,EAAeC,WAAf,EAA4BC,gBAA5B,QAAoD,uBAApD;AAEA,OAAOC,iBAAP,MAA8B,iCAA9B;AACA,OAAOC,4BAAP,MAAyC,4CAAzC;AACA,OAAOC,4BAAP,MAAyC,gEAAzC;AAMA,SAASC,eAAT,QAAgC,qBAAhC;;AAEA,MAAMC,8BAA8B,GAAIC,UAAD,IAA4E;EACjH,MAAMC,sBAAsB,GAAGJ,4BAA4B,CAACG,UAAD,CAA3D;EACA,OAAO,QASD;IAAA,IATE;MACNE,cADM;MAENC,oBAFM;MAGNC,YAHM;MAINC,iBAJM;MAKNC,yBALM;MAMNC,iBAAiB,GAAG,KANd;MAONC,aAAa,GAAG,EAPV;MAQNC,eAAe,GAAGjB;IARZ,CASF;IACJ,MAAM;MAAEkB,GAAF;MAAOC,WAAP;MAAoBC,QAApB;MAA8BC;IAA9B,IAA6Df,eAAe,EAAlF;IACA,MAAM;MAAEgB,aAAF;MAAiBC,IAAjB;MAAuBC;IAAvB,IAAmCzB,mBAAmB,CAACmB,GAAD,EAAMC,WAAN,aAAMA,WAAN,uBAAMA,WAAW,CAAEM,MAAnB,EAA2B;MACrFb,YADqF;MAErFC,iBAFqF;MAGrFa,iCAAiC,EAAE,CAACd;IAHiD,CAA3B,CAA5D;;IAMA,IAAIQ,QAAQ,CAACO,sBAAb,EAAqC;MACnC1B,WAAW,CAAC,QAAD,EAAY2B,MAAD,IAAY;QAChC,IAAIA,MAAM,KAAK,QAAf,EAAyBN,aAAa,CAACO,OAAd,CAAsBR,0BAAtB;MAC1B,CAFU,CAAX;IAGD;;IAED,MAAMS,0BAAsF,GAAG5B,gBAAgB,CAC7G,CAAC6B,OAAD,EAAUC,kBAAV,KAAiC;MAC/B,IAAIlB,yBAAJ,EAA+B,OAAOA,yBAAyB,CAACiB,OAAD,EAAUC,kBAAV,CAAhC;MAC/B,oBACE,oBAAC,4BAAD;QACE,OAAO,EAAED,OADX;QAEE,OAAO,EAAE,MAAMrB,cAAc,CAACqB,OAAD,CAF/B;QAGE,WAAW,EAAE,MAAMC,kBAAkB;MAHvC,EADF;IAOD,CAV4G,CAA/G;;IAaA,MAAMC,sBAAsB,GAAGb,QAAQ,CAACc,uBAAT,IAAoCd,QAAQ,CAACe,wBAA5E;IAEA,oBACE,oBAAC,sBAAD,CAAwB,QAAxB,qBACE,oBAAC,sBAAD,CAAwB,MAAxB,OADF,eAEE,oBAAC,iBAAD;MAAmB,OAAO,EAAEX,OAA5B;MAAqC,gBAAgB,eAAE,oBAAC,sBAAD,CAAwB,aAAxB;IAAvD,gBACE,oBAAC,sBAAD,CAAwB,IAAxB;MACE,eAAe,EAAEP,eADnB;MAEE,yBAAyB,EAAEa,0BAF7B;MAGE,aAAa,EAAER,aAHjB;MAIE,UAAU,EAAEC,IAJd;MAKE,aAAa,EAAE;QACba,kBAAkB,eAAE,oBAAC,sBAAD,CAAwB,WAAxB,OADP;QAEbC,qBAAqB,EAAE;UAAEC,QAAQ,EAAE;QAAZ,CAFV;QAGb,GAAGtB;MAHU;IALjB,EADF,CAFF,eAeE,oBAAC,sBAAD,CAAwB,YAAxB;MACE,iBAAiB,EAAEiB,sBAAsB,GAAGlB,iBAAH,GAAuB,IADlE;MAEE,YAAY,EAAEJ;IAFhB,EAfF,CADF;EAsBD,CA5DD;AA6DD,CA/DD;;AAiEA,eAAeJ,8BAAf"}