stream-chat-react-native-core 4.7.0-beta.2 → 4.7.0-beta.5

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 (43) hide show
  1. package/README.md +1 -0
  2. package/lib/commonjs/components/Attachment/Card.js +23 -14
  3. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  4. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +23 -13
  5. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  6. package/lib/commonjs/components/Chat/hooks/useIsOnline.js +6 -6
  7. package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
  8. package/lib/commonjs/components/Message/Message.js +6 -6
  9. package/lib/commonjs/components/Message/Message.js.map +1 -1
  10. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +22 -15
  11. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  12. package/lib/commonjs/components/Reply/Reply.js +5 -5
  13. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  14. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +23 -13
  15. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  16. package/lib/commonjs/version.json +1 -1
  17. package/lib/module/components/Attachment/Card.js +23 -14
  18. package/lib/module/components/Attachment/Card.js.map +1 -1
  19. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +23 -13
  20. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  21. package/lib/module/components/Chat/hooks/useIsOnline.js +6 -6
  22. package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
  23. package/lib/module/components/Message/Message.js +6 -6
  24. package/lib/module/components/Message/Message.js.map +1 -1
  25. package/lib/module/components/Message/MessageSimple/utils/renderText.js +22 -15
  26. package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
  27. package/lib/module/components/Reply/Reply.js +5 -5
  28. package/lib/module/components/Reply/Reply.js.map +1 -1
  29. package/lib/module/contexts/messageInputContext/MessageInputContext.js +23 -13
  30. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  31. package/lib/module/version.json +1 -1
  32. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts +11 -0
  33. package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts +1 -1
  34. package/lib/typescript/components/Message/Message.d.ts +9 -3
  35. package/package.json +2 -2
  36. package/src/components/Attachment/Card.tsx +3 -0
  37. package/src/components/AttachmentPicker/AttachmentPicker.tsx +19 -25
  38. package/src/components/Chat/hooks/useIsOnline.ts +7 -7
  39. package/src/components/Message/Message.tsx +8 -4
  40. package/src/components/Message/MessageSimple/utils/renderText.tsx +6 -1
  41. package/src/components/Reply/Reply.tsx +3 -1
  42. package/src/contexts/messageInputContext/MessageInputContext.tsx +13 -3
  43. package/src/version.json +1 -1
package/README.md CHANGED
@@ -11,6 +11,7 @@
11
11
  [![NPM](https://img.shields.io/npm/v/stream-chat-react-native.svg)](https://www.npmjs.com/package/stream-chat-react-native)
12
12
  [![Build Status](https://github.com/GetStream/stream-chat-react-native/workflows/test/badge.svg?branch=main)](https://github.com/GetStream/stream-chat-react-native/actions)
13
13
  [![Component Reference](https://img.shields.io/badge/docs-component%20reference-blue.svg)](https://getstream.io/chat/docs/sdk/reactnative)
14
+ [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=GetStream_stream-chat-react-native&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=GetStream_stream-chat-react-native)
14
15
 
15
16
  <img align="right" src="https://getstream.imgix.net/images/ios-chat-tutorial/iphone_chat_art@3x.png?auto=format,enhance" width="50%" />
16
17
 
@@ -129,6 +129,9 @@ var CardWithContext = function CardWithContext(props) {
129
129
  onLongPress: function onLongPress(event) {
130
130
  if (_onLongPress) {
131
131
  _onLongPress({
132
+ additionalInfo: {
133
+ url: og_scrape_url
134
+ },
132
135
  emitter: 'card',
133
136
  event: event
134
137
  });
@@ -137,6 +140,9 @@ var CardWithContext = function CardWithContext(props) {
137
140
  onPress: function onPress(event) {
138
141
  if (_onPress) {
139
142
  _onPress({
143
+ additionalInfo: {
144
+ url: og_scrape_url
145
+ },
140
146
  defaultHandler: defaultOnPress,
141
147
  emitter: 'card',
142
148
  event: event
@@ -146,6 +152,9 @@ var CardWithContext = function CardWithContext(props) {
146
152
  onPressIn: function onPressIn(event) {
147
153
  if (_onPressIn) {
148
154
  _onPressIn({
155
+ additionalInfo: {
156
+ url: og_scrape_url
157
+ },
149
158
  defaultHandler: defaultOnPress,
150
159
  emitter: 'card',
151
160
  event: event
@@ -165,21 +174,21 @@ var CardWithContext = function CardWithContext(props) {
165
174
  __self: _this,
166
175
  __source: {
167
176
  fileName: _jsxFileName,
168
- lineNumber: 179,
177
+ lineNumber: 182,
169
178
  columnNumber: 22
170
179
  }
171
180
  })), CardCover && _react["default"].createElement(CardCover, (0, _extends2["default"])({}, props, {
172
181
  __self: _this,
173
182
  __source: {
174
183
  fileName: _jsxFileName,
175
- lineNumber: 180,
184
+ lineNumber: 183,
176
185
  columnNumber: 21
177
186
  }
178
187
  })), uri && !CardCover && _react["default"].createElement(_reactNative.View, {
179
188
  __self: _this,
180
189
  __source: {
181
190
  fileName: _jsxFileName,
182
- lineNumber: 182,
191
+ lineNumber: 185,
183
192
  columnNumber: 9
184
193
  }
185
194
  }, _react["default"].createElement(_reactNative.Image, {
@@ -191,7 +200,7 @@ var CardWithContext = function CardWithContext(props) {
191
200
  __self: _this,
192
201
  __source: {
193
202
  fileName: _jsxFileName,
194
- lineNumber: 183,
203
+ lineNumber: 186,
195
204
  columnNumber: 11
196
205
  }
197
206
  }), author_name && _react["default"].createElement(_reactNative.View, {
@@ -199,7 +208,7 @@ var CardWithContext = function CardWithContext(props) {
199
208
  __self: _this,
200
209
  __source: {
201
210
  fileName: _jsxFileName,
202
- lineNumber: 189,
211
+ lineNumber: 192,
203
212
  columnNumber: 13
204
213
  }
205
214
  }, _react["default"].createElement(_reactNative.View, {
@@ -209,7 +218,7 @@ var CardWithContext = function CardWithContext(props) {
209
218
  __self: _this,
210
219
  __source: {
211
220
  fileName: _jsxFileName,
212
- lineNumber: 190,
221
+ lineNumber: 193,
213
222
  columnNumber: 15
214
223
  }
215
224
  }, _react["default"].createElement(_reactNative.Text, {
@@ -219,14 +228,14 @@ var CardWithContext = function CardWithContext(props) {
219
228
  __self: _this,
220
229
  __source: {
221
230
  fileName: _jsxFileName,
222
- lineNumber: 198,
231
+ lineNumber: 201,
223
232
  columnNumber: 17
224
233
  }
225
234
  }, author_name)))), CardFooter ? _react["default"].createElement(CardFooter, (0, _extends2["default"])({}, props, {
226
235
  __self: _this,
227
236
  __source: {
228
237
  fileName: _jsxFileName,
229
- lineNumber: 214,
238
+ lineNumber: 217,
230
239
  columnNumber: 9
231
240
  }
232
241
  })) : _react["default"].createElement(_reactNative.View, {
@@ -234,7 +243,7 @@ var CardWithContext = function CardWithContext(props) {
234
243
  __self: _this,
235
244
  __source: {
236
245
  fileName: _jsxFileName,
237
- lineNumber: 216,
246
+ lineNumber: 219,
238
247
  columnNumber: 9
239
248
  }
240
249
  }, _react["default"].createElement(_reactNative.View, {
@@ -246,7 +255,7 @@ var CardWithContext = function CardWithContext(props) {
246
255
  __self: _this,
247
256
  __source: {
248
257
  fileName: _jsxFileName,
249
- lineNumber: 217,
258
+ lineNumber: 220,
250
259
  columnNumber: 11
251
260
  }
252
261
  }, !uri && author_name && _react["default"].createElement(_reactNative.Text, {
@@ -256,7 +265,7 @@ var CardWithContext = function CardWithContext(props) {
256
265
  __self: _this,
257
266
  __source: {
258
267
  fileName: _jsxFileName,
259
- lineNumber: 226,
268
+ lineNumber: 229,
260
269
  columnNumber: 15
261
270
  }
262
271
  }, author_name), title && _react["default"].createElement(_reactNative.Text, {
@@ -267,7 +276,7 @@ var CardWithContext = function CardWithContext(props) {
267
276
  __self: _this,
268
277
  __source: {
269
278
  fileName: _jsxFileName,
270
- lineNumber: 238,
279
+ lineNumber: 241,
271
280
  columnNumber: 15
272
281
  }
273
282
  }, title), text && _react["default"].createElement(_reactNative.Text, {
@@ -278,7 +287,7 @@ var CardWithContext = function CardWithContext(props) {
278
287
  __self: _this,
279
288
  __source: {
280
289
  fileName: _jsxFileName,
281
- lineNumber: 246,
290
+ lineNumber: 249,
282
291
  columnNumber: 15
283
292
  }
284
293
  }, text))));
@@ -317,7 +326,7 @@ var Card = function Card(props) {
317
326
  __self: _this,
318
327
  __source: {
319
328
  fileName: _jsxFileName,
320
- lineNumber: 287,
329
+ lineNumber: 290,
321
330
  columnNumber: 5
322
331
  }
323
332
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Card.tsx"],"names":["styles","StyleSheet","create","authorName","fontSize","fontWeight","authorNameContainer","borderTopRightRadius","paddingHorizontal","paddingTop","authorNameFooter","padding","authorNameMask","bottom","left","position","cardCover","borderRadius","height","marginHorizontal","cardFooter","flexDirection","justifyContent","container","overflow","width","description","title","CardWithContext","props","additionalTouchableProps","author_name","CardCover","CardFooter","CardHeader","image_url","og_scrape_url","onLongPress","onPress","onPressIn","preventPress","stylesProp","text","thumb_url","theme","colors","accent_blue","black","blue_alice","transparent","messageSimple","card","authorNameFooterContainer","cover","footer","titleStyle","footerStyle","noURI","uri","error","openURL","defaultOnPress","event","emitter","defaultHandler","backgroundColor","color","borderLeftColor","MemoizedCard","React","memo","Card","message","channelId","cid","messageId","id","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Image,\n ImageStyle,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { useGoToURL } from './hooks/useGoToURL';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { makeImageCompatibleUrl } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n authorName: { fontSize: 14.5, fontWeight: '600' },\n authorNameContainer: {\n borderTopRightRadius: 15,\n paddingHorizontal: 8,\n paddingTop: 8,\n },\n authorNameFooter: {\n fontSize: 14.5,\n fontWeight: '600',\n padding: 8,\n },\n authorNameMask: {\n bottom: 0,\n left: 8,\n position: 'absolute',\n },\n cardCover: {\n borderRadius: 8,\n height: 140,\n marginHorizontal: 8,\n },\n cardFooter: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: 10,\n },\n container: {\n overflow: 'hidden',\n width: 256,\n },\n description: {\n fontSize: 12,\n marginHorizontal: 8,\n },\n title: {\n fontSize: 12,\n marginHorizontal: 8,\n },\n});\n\nexport type CardPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Attachment<StreamChatGenerics> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n 'onLongPress' | 'onPress' | 'onPressIn' | 'preventPress'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'CardCover' | 'CardFooter' | 'CardHeader'\n > & {\n channelId: string | undefined;\n messageId: string | undefined;\n styles?: Partial<{\n authorName: StyleProp<TextStyle>;\n authorNameContainer: StyleProp<ViewStyle>;\n authorNameFooter: StyleProp<TextStyle>;\n authorNameFooterContainer: StyleProp<ViewStyle>;\n authorNameMask: StyleProp<ViewStyle>;\n cardCover: StyleProp<ImageStyle>;\n cardFooter: StyleProp<ViewStyle>;\n container: StyleProp<ViewStyle>;\n description: StyleProp<TextStyle>;\n title: StyleProp<TextStyle>;\n }>;\n };\n\nconst CardWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: CardPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n author_name,\n CardCover,\n CardFooter,\n CardHeader,\n image_url,\n og_scrape_url,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n styles: stylesProp = {},\n text,\n thumb_url,\n title,\n } = props;\n\n const {\n theme: {\n colors: { accent_blue, black, blue_alice, transparent },\n messageSimple: {\n card: {\n authorName,\n authorNameContainer,\n authorNameFooter,\n authorNameFooterContainer,\n authorNameMask,\n container,\n cover,\n footer: { description, title: titleStyle, ...footerStyle },\n noURI,\n },\n },\n },\n } = useTheme();\n\n const uri = image_url || thumb_url;\n\n const [error, openURL] = useGoToURL(og_scrape_url || uri);\n\n const defaultOnPress = () => !error && openURL && openURL();\n\n return (\n <TouchableOpacity\n disabled={preventPress}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n emitter: 'card',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n defaultHandler: defaultOnPress,\n emitter: 'card',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n defaultHandler: defaultOnPress,\n emitter: 'card',\n event,\n });\n }\n }}\n style={[styles.container, container, stylesProp.container]}\n testID='card-attachment'\n {...additionalTouchableProps}\n >\n {CardHeader && <CardHeader {...props} />}\n {CardCover && <CardCover {...props} />}\n {uri && !CardCover && (\n <View>\n <Image\n resizeMode='cover'\n source={{ uri: makeImageCompatibleUrl(uri) }}\n style={[styles.cardCover, cover, stylesProp.cardCover]}\n />\n {author_name && (\n <View style={[styles.authorNameMask, authorNameMask, stylesProp.authorNameMask]}>\n <View\n style={[\n styles.authorNameContainer,\n { backgroundColor: blue_alice },\n authorNameContainer,\n stylesProp.authorNameContainer,\n ]}\n >\n <Text\n style={[\n styles.authorName,\n { color: accent_blue },\n authorName,\n stylesProp.authorName,\n ]}\n >\n {author_name}\n </Text>\n </View>\n </View>\n )}\n </View>\n )}\n {CardFooter ? (\n <CardFooter {...props} />\n ) : (\n <View style={[styles.cardFooter, footerStyle, stylesProp.cardFooter]}>\n <View\n style={[\n authorNameFooterContainer,\n { backgroundColor: transparent },\n !uri ? { borderLeftColor: accent_blue, ...noURI } : {},\n stylesProp.authorNameFooterContainer,\n ]}\n >\n {!uri && author_name && (\n <Text\n style={[\n styles.authorNameFooter,\n { color: accent_blue },\n authorNameFooter,\n stylesProp.authorNameFooter,\n ]}\n >\n {author_name}\n </Text>\n )}\n {title && (\n <Text\n numberOfLines={1}\n style={[styles.title, { color: black }, titleStyle, stylesProp.title]}\n >\n {title}\n </Text>\n )}\n {text && (\n <Text\n numberOfLines={3}\n style={[styles.description, { color: black }, description, stylesProp.description]}\n >\n {text}\n </Text>\n )}\n </View>\n </View>\n )}\n </TouchableOpacity>\n );\n};\n\nconst MemoizedCard = React.memo(CardWithContext, () => true) as typeof CardWithContext;\n\nexport type CardProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Attachment<StreamChatGenerics> &\n Partial<\n Pick<MessageContextValue<StreamChatGenerics>, 'onLongPress' | 'onPress' | 'onPressIn'> &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'CardCover' | 'CardFooter' | 'CardHeader'\n >\n >;\n\n/**\n * UI component for card in attachments.\n */\nexport const Card = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: CardProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onPress, onPressIn, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { additionalTouchableProps, CardCover, CardFooter, CardHeader } =\n useMessagesContext<StreamChatGenerics>();\n\n return (\n <MemoizedCard\n {...{\n additionalTouchableProps,\n CardCover,\n CardFooter,\n CardHeader,\n channelId: message.cid,\n messageId: message.id,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nCard.displayName = 'Card{messageSimple{card}}';\n"]}
1
+ {"version":3,"sources":["Card.tsx"],"names":["styles","StyleSheet","create","authorName","fontSize","fontWeight","authorNameContainer","borderTopRightRadius","paddingHorizontal","paddingTop","authorNameFooter","padding","authorNameMask","bottom","left","position","cardCover","borderRadius","height","marginHorizontal","cardFooter","flexDirection","justifyContent","container","overflow","width","description","title","CardWithContext","props","additionalTouchableProps","author_name","CardCover","CardFooter","CardHeader","image_url","og_scrape_url","onLongPress","onPress","onPressIn","preventPress","stylesProp","text","thumb_url","theme","colors","accent_blue","black","blue_alice","transparent","messageSimple","card","authorNameFooterContainer","cover","footer","titleStyle","footerStyle","noURI","uri","error","openURL","defaultOnPress","event","additionalInfo","url","emitter","defaultHandler","backgroundColor","color","borderLeftColor","MemoizedCard","React","memo","Card","message","channelId","cid","messageId","id","displayName"],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n Image,\n ImageStyle,\n StyleProp,\n StyleSheet,\n Text,\n TextStyle,\n TouchableOpacity,\n View,\n ViewStyle,\n} from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { useGoToURL } from './hooks/useGoToURL';\n\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { makeImageCompatibleUrl } from '../../utils/utils';\n\nconst styles = StyleSheet.create({\n authorName: { fontSize: 14.5, fontWeight: '600' },\n authorNameContainer: {\n borderTopRightRadius: 15,\n paddingHorizontal: 8,\n paddingTop: 8,\n },\n authorNameFooter: {\n fontSize: 14.5,\n fontWeight: '600',\n padding: 8,\n },\n authorNameMask: {\n bottom: 0,\n left: 8,\n position: 'absolute',\n },\n cardCover: {\n borderRadius: 8,\n height: 140,\n marginHorizontal: 8,\n },\n cardFooter: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n padding: 10,\n },\n container: {\n overflow: 'hidden',\n width: 256,\n },\n description: {\n fontSize: 12,\n marginHorizontal: 8,\n },\n title: {\n fontSize: 12,\n marginHorizontal: 8,\n },\n});\n\nexport type CardPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Attachment<StreamChatGenerics> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n 'onLongPress' | 'onPress' | 'onPressIn' | 'preventPress'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'CardCover' | 'CardFooter' | 'CardHeader'\n > & {\n channelId: string | undefined;\n messageId: string | undefined;\n styles?: Partial<{\n authorName: StyleProp<TextStyle>;\n authorNameContainer: StyleProp<ViewStyle>;\n authorNameFooter: StyleProp<TextStyle>;\n authorNameFooterContainer: StyleProp<ViewStyle>;\n authorNameMask: StyleProp<ViewStyle>;\n cardCover: StyleProp<ImageStyle>;\n cardFooter: StyleProp<ViewStyle>;\n container: StyleProp<ViewStyle>;\n description: StyleProp<TextStyle>;\n title: StyleProp<TextStyle>;\n }>;\n };\n\nconst CardWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: CardPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n author_name,\n CardCover,\n CardFooter,\n CardHeader,\n image_url,\n og_scrape_url,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n styles: stylesProp = {},\n text,\n thumb_url,\n title,\n } = props;\n\n const {\n theme: {\n colors: { accent_blue, black, blue_alice, transparent },\n messageSimple: {\n card: {\n authorName,\n authorNameContainer,\n authorNameFooter,\n authorNameFooterContainer,\n authorNameMask,\n container,\n cover,\n footer: { description, title: titleStyle, ...footerStyle },\n noURI,\n },\n },\n },\n } = useTheme();\n\n const uri = image_url || thumb_url;\n\n const [error, openURL] = useGoToURL(og_scrape_url || uri);\n\n const defaultOnPress = () => !error && openURL && openURL();\n\n return (\n <TouchableOpacity\n disabled={preventPress}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n additionalInfo: { url: og_scrape_url },\n emitter: 'card',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n additionalInfo: { url: og_scrape_url },\n defaultHandler: defaultOnPress,\n emitter: 'card',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n additionalInfo: { url: og_scrape_url },\n defaultHandler: defaultOnPress,\n emitter: 'card',\n event,\n });\n }\n }}\n style={[styles.container, container, stylesProp.container]}\n testID='card-attachment'\n {...additionalTouchableProps}\n >\n {CardHeader && <CardHeader {...props} />}\n {CardCover && <CardCover {...props} />}\n {uri && !CardCover && (\n <View>\n <Image\n resizeMode='cover'\n source={{ uri: makeImageCompatibleUrl(uri) }}\n style={[styles.cardCover, cover, stylesProp.cardCover]}\n />\n {author_name && (\n <View style={[styles.authorNameMask, authorNameMask, stylesProp.authorNameMask]}>\n <View\n style={[\n styles.authorNameContainer,\n { backgroundColor: blue_alice },\n authorNameContainer,\n stylesProp.authorNameContainer,\n ]}\n >\n <Text\n style={[\n styles.authorName,\n { color: accent_blue },\n authorName,\n stylesProp.authorName,\n ]}\n >\n {author_name}\n </Text>\n </View>\n </View>\n )}\n </View>\n )}\n {CardFooter ? (\n <CardFooter {...props} />\n ) : (\n <View style={[styles.cardFooter, footerStyle, stylesProp.cardFooter]}>\n <View\n style={[\n authorNameFooterContainer,\n { backgroundColor: transparent },\n !uri ? { borderLeftColor: accent_blue, ...noURI } : {},\n stylesProp.authorNameFooterContainer,\n ]}\n >\n {!uri && author_name && (\n <Text\n style={[\n styles.authorNameFooter,\n { color: accent_blue },\n authorNameFooter,\n stylesProp.authorNameFooter,\n ]}\n >\n {author_name}\n </Text>\n )}\n {title && (\n <Text\n numberOfLines={1}\n style={[styles.title, { color: black }, titleStyle, stylesProp.title]}\n >\n {title}\n </Text>\n )}\n {text && (\n <Text\n numberOfLines={3}\n style={[styles.description, { color: black }, description, stylesProp.description]}\n >\n {text}\n </Text>\n )}\n </View>\n </View>\n )}\n </TouchableOpacity>\n );\n};\n\nconst MemoizedCard = React.memo(CardWithContext, () => true) as typeof CardWithContext;\n\nexport type CardProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Attachment<StreamChatGenerics> &\n Partial<\n Pick<MessageContextValue<StreamChatGenerics>, 'onLongPress' | 'onPress' | 'onPressIn'> &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n 'additionalTouchableProps' | 'CardCover' | 'CardFooter' | 'CardHeader'\n >\n >;\n\n/**\n * UI component for card in attachments.\n */\nexport const Card = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: CardProps<StreamChatGenerics>,\n) => {\n const { message, onLongPress, onPress, onPressIn, preventPress } =\n useMessageContext<StreamChatGenerics>();\n const { additionalTouchableProps, CardCover, CardFooter, CardHeader } =\n useMessagesContext<StreamChatGenerics>();\n\n return (\n <MemoizedCard\n {...{\n additionalTouchableProps,\n CardCover,\n CardFooter,\n CardHeader,\n channelId: message.cid,\n messageId: message.id,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n }}\n {...props}\n />\n );\n};\n\nCard.displayName = 'Card{messageSimple{card}}';\n"]}
@@ -77,6 +77,7 @@ var AttachmentVideo = function AttachmentVideo(props) {
77
77
  ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
78
78
  maxNumberOfFiles = props.maxNumberOfFiles,
79
79
  numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
80
+ numberOfUploads = props.numberOfUploads,
80
81
  selected = props.selected,
81
82
  setSelectedFiles = props.setSelectedFiles;
82
83
 
@@ -117,7 +118,9 @@ var AttachmentVideo = function AttachmentVideo(props) {
117
118
  });
118
119
  } else {
119
120
  setSelectedFiles(function (files) {
120
- if (files.length >= maxNumberOfFiles) {
121
+ if (numberOfUploads >= maxNumberOfFiles) {
122
+ _reactNative.Alert.alert('Maximum number of files reached');
123
+
121
124
  return files;
122
125
  }
123
126
 
@@ -208,6 +211,7 @@ var AttachmentImage = function AttachmentImage(props) {
208
211
  ImageOverlaySelectedComponent = props.ImageOverlaySelectedComponent,
209
212
  maxNumberOfFiles = props.maxNumberOfFiles,
210
213
  numberOfAttachmentPickerImageColumns = props.numberOfAttachmentPickerImageColumns,
214
+ numberOfUploads = props.numberOfUploads,
211
215
  selected = props.selected,
212
216
  setSelectedImages = props.setSelectedImages;
213
217
 
@@ -230,7 +234,9 @@ var AttachmentImage = function AttachmentImage(props) {
230
234
  });
231
235
  } else {
232
236
  setSelectedImages(function (images) {
233
- if (images.length >= maxNumberOfFiles) {
237
+ if (numberOfUploads >= maxNumberOfFiles) {
238
+ _reactNative.Alert.alert('Maximum number of files reached');
239
+
234
240
  return images;
235
241
  }
236
242
 
@@ -244,7 +250,7 @@ var AttachmentImage = function AttachmentImage(props) {
244
250
  __self: _this,
245
251
  __source: {
246
252
  fileName: _jsxFileName,
247
- lineNumber: 200,
253
+ lineNumber: 202,
248
254
  columnNumber: 5
249
255
  }
250
256
  }, _react["default"].createElement(_reactNative.ImageBackground, {
@@ -259,7 +265,7 @@ var AttachmentImage = function AttachmentImage(props) {
259
265
  __self: _this,
260
266
  __source: {
261
267
  fileName: _jsxFileName,
262
- lineNumber: 201,
268
+ lineNumber: 203,
263
269
  columnNumber: 7
264
270
  }
265
271
  }, selected && _react["default"].createElement(_reactNative.View, {
@@ -269,25 +275,26 @@ var AttachmentImage = function AttachmentImage(props) {
269
275
  __self: _this,
270
276
  __source: {
271
277
  fileName: _jsxFileName,
272
- lineNumber: 213,
278
+ lineNumber: 215,
273
279
  columnNumber: 11
274
280
  }
275
281
  }, _react["default"].createElement(ImageOverlaySelectedComponent, {
276
282
  __self: _this,
277
283
  __source: {
278
284
  fileName: _jsxFileName,
279
- lineNumber: 214,
285
+ lineNumber: 216,
280
286
  columnNumber: 13
281
287
  }
282
288
  }))));
283
289
  };
284
290
 
285
- var renderImage = function renderImage(_ref) {
291
+ var renderItem = function renderItem(_ref) {
286
292
  var item = _ref.item;
287
293
  var asset = item.asset,
288
294
  ImageOverlaySelectedComponent = item.ImageOverlaySelectedComponent,
289
295
  maxNumberOfFiles = item.maxNumberOfFiles,
290
296
  numberOfAttachmentPickerImageColumns = item.numberOfAttachmentPickerImageColumns,
297
+ numberOfUploads = item.numberOfUploads,
291
298
  selected = item.selected,
292
299
  setSelectedFiles = item.setSelectedFiles,
293
300
  setSelectedImages = item.setSelectedImages;
@@ -298,12 +305,13 @@ var renderImage = function renderImage(_ref) {
298
305
  ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
299
306
  maxNumberOfFiles: maxNumberOfFiles,
300
307
  numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
308
+ numberOfUploads: numberOfUploads,
301
309
  selected: selected,
302
310
  setSelectedImages: setSelectedImages,
303
311
  __self: _this,
304
312
  __source: {
305
313
  fileName: _jsxFileName,
306
- lineNumber: 256,
314
+ lineNumber: 247,
307
315
  columnNumber: 5
308
316
  }
309
317
  }) : _react["default"].createElement(AttachmentVideo, {
@@ -311,12 +319,13 @@ var renderImage = function renderImage(_ref) {
311
319
  ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
312
320
  maxNumberOfFiles: maxNumberOfFiles,
313
321
  numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
322
+ numberOfUploads: numberOfUploads,
314
323
  selected: selected,
315
324
  setSelectedFiles: setSelectedFiles,
316
325
  __self: _this,
317
326
  __source: {
318
327
  fileName: _jsxFileName,
319
- lineNumber: 265,
328
+ lineNumber: 257,
320
329
  columnNumber: 5
321
330
  }
322
331
  });
@@ -512,6 +521,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
512
521
  ImageOverlaySelectedComponent: ImageOverlaySelectedComponent,
513
522
  maxNumberOfFiles: maxNumberOfFiles,
514
523
  numberOfAttachmentPickerImageColumns: numberOfAttachmentPickerImageColumns,
524
+ numberOfUploads: selectedFiles.length + selectedImages.length,
515
525
  selected: selectedImages.some(function (image) {
516
526
  return image.uri === asset.uri;
517
527
  }) || selectedFiles.some(function (file) {
@@ -542,7 +552,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
542
552
  __self: _this,
543
553
  __source: {
544
554
  fileName: _jsxFileName,
545
- lineNumber: 511,
555
+ lineNumber: 505,
546
556
  columnNumber: 9
547
557
  }
548
558
  }, _react["default"].createElement(_bottomSheet.BottomSheetFlatList, {
@@ -557,11 +567,11 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
557
567
  },
558
568
  numColumns: numberOfAttachmentPickerImageColumns != null ? numberOfAttachmentPickerImageColumns : 3,
559
569
  onEndReached: getMorePhotos,
560
- renderItem: renderImage,
570
+ renderItem: renderItem,
561
571
  __self: _this,
562
572
  __source: {
563
573
  fileName: _jsxFileName,
564
- lineNumber: 527,
574
+ lineNumber: 521,
565
575
  columnNumber: 11
566
576
  }
567
577
  })), selectedPicker === 'images' && photoError && _react["default"].createElement(AttachmentPickerError, {
@@ -572,7 +582,7 @@ var AttachmentPicker = _react["default"].forwardRef(function (props, ref) {
572
582
  __self: _this,
573
583
  __source: {
574
584
  fileName: _jsxFileName,
575
- lineNumber: 542,
585
+ lineNumber: 536,
576
586
  columnNumber: 11
577
587
  }
578
588
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["AttachmentPicker.tsx"],"names":["dayjs","extend","duration","styles","StyleSheet","create","container","flexGrow","durationText","fontWeight","overlay","alignItems","flex","videoView","bottom","display","flexDirection","justifyContent","paddingHorizontal","position","width","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","selected","setSelectedFiles","theme","attachmentPicker","image","imageOverlay","colors","white","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","format","size","onPressVideo","files","filter","file","length","name","filename","fileSize","type","margin","backgroundColor","color","AttachmentImage","setSelectedImages","onPressImage","images","renderImage","item","contentType","fileType","startsWith","AttachmentPicker","React","forwardRef","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","numberOfAttachmentImagesToLoadPerCall","translucentStatusBar","bottomSheetContentContainer","closePicker","selectedFiles","selectedImages","selectedPicker","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursor","setEndCursor","photoError","setPhotoError","hasNextPage","setHasNextPage","loadingPhotos","setLoadingPhotos","photos","setPhotos","bottomSheetCloseOnKeyboardShowTimeout","getMorePhotos","after","first","results","assets","console","log","backAction","undefined","backHandler","BackHandler","addEventListener","remove","hideAttachmentPicker","current","clearTimeout","setTimeout","close","keyboardSubscription","Platform","OS","Keyboard","addListener","removeListener","selectedPhotos","map","some","handleHeight","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidBottomBarHeightAdjustment","initialSnapPoint","finalSnapPoint","snapPoints","opacity","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n BackHandler,\n Dimensions,\n ImageBackground,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\n\nimport BottomSheet, {\n BottomSheetFlatList,\n BottomSheetHandleProps,\n TouchableOpacity,\n} from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport { lookup } from 'mime-types';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../icons';\nimport { getPhotos } from '../../native';\nimport type { Asset, File } from '../../types/types';\nimport { vh, vw } from '../../utils/utils';\n\ndayjs.extend(duration);\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\ntype AttachmentImageProps = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentVideoProps = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = () => {\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (files.length >= maxNumberOfFiles) {\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (images.length >= maxNumberOfFiles) {\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst renderImage = ({\n item,\n}: {\n item: {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n };\n}) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const contentType = lookup(asset.filename) || 'multipart/form-data';\n\n const fileType = asset.filename\n ? contentType.startsWith('image/')\n ? 'image'\n : 'video'\n : asset.type === 'video'\n ? 'video'\n : 'image';\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [endCursor, setEndCursor] = useState<string>();\n const [photoError, setPhotoError] = useState(false);\n const [hasNextPage, setHasNextPage] = useState(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const bottomSheetCloseOnKeyboardShowTimeout = useRef<NodeJS.Timeout>();\n\n const getMorePhotos = async () => {\n if (hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images') {\n setLoadingPhotos(true);\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n if (endCursor) {\n setPhotos([...photos, ...results.assets]);\n } else {\n setPhotos(results.assets);\n }\n setEndCursor(results.endCursor);\n setHasNextPage(results.hasNextPage || false);\n } catch (error) {\n console.log(error);\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n };\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker]);\n\n useEffect(() => {\n const hideAttachmentPicker = () => {\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n setSelectedPicker(undefined);\n // This short timeout is to prevent a race condition\n // where the close function is called during the point when a internal container layout happens within the bottomsheet due to keyboard affecting the layout\n // If the container layout measures a shorter height than previous but if the close snapped to the previous height's position, the bottom sheet will show up\n // this short delay ensures that close function is always called after a container layout due to keyboard change\n bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(\n () => (ref as React.MutableRefObject<BottomSheet | undefined>).current?.close(),\n 150,\n );\n };\n const keyboardSubscription =\n Platform.OS === 'ios'\n ? Keyboard.addListener('keyboardWillShow', hideAttachmentPicker)\n : Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n if (Platform.OS === 'ios') {\n Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);\n } else {\n Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);\n }\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n setEndCursor(undefined);\n setHasNextPage(true);\n }\n }\n }, [currentIndex]);\n\n useEffect(() => {\n if (\n selectedPicker === 'images' &&\n endCursor === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n setPhotoError(false);\n getMorePhotos();\n }\n }, [currentIndex, selectedPicker]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n selected:\n selectedImages.some((image) => image.uri === asset.uri) ||\n selectedFiles.some((file) => file.uri === asset.uri),\n setSelectedFiles,\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n const androidBottomBarHeightAdjustment =\n Platform.OS === 'android'\n ? bottomBarHeight === statusBarHeight\n ? translucentStatusBar\n ? 0\n : StatusBar.currentHeight ?? 0\n : translucentStatusBar\n ? bottomBarHeight > statusBarHeight\n ? -bottomBarHeight + statusBarHeight\n : bottomBarHeight > 0\n ? -statusBarHeight\n : 0\n : bottomBarHeight > 0\n ? 0\n : statusBarHeight\n : 0;\n\n const initialSnapPoint =\n attachmentPickerBottomSheetHeight ?? Platform.OS === 'android'\n ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight\n : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderImage}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={attachmentPickerBottomSheetHeight}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}
1
+ {"version":3,"sources":["AttachmentPicker.tsx"],"names":["dayjs","extend","duration","styles","StyleSheet","create","container","flexGrow","durationText","fontWeight","overlay","alignItems","flex","videoView","bottom","display","flexDirection","justifyContent","paddingHorizontal","position","width","screenHeight","fullScreenHeight","Dimensions","get","height","AttachmentVideo","props","asset","ImageOverlaySelectedComponent","maxNumberOfFiles","numberOfAttachmentPickerImageColumns","numberOfUploads","selected","setSelectedFiles","theme","attachmentPicker","image","imageOverlay","colors","white","playableDuration","uri","videoDuration","ONE_HOUR_IN_SECONDS","durationLabel","isDurationLongerThanHour","formattedDurationParam","formattedVideoDuration","format","size","onPressVideo","files","filter","file","Alert","alert","name","filename","fileSize","type","margin","backgroundColor","color","AttachmentImage","setSelectedImages","onPressImage","images","renderItem","item","contentType","fileType","startsWith","AttachmentPicker","React","forwardRef","ref","AttachmentPickerBottomSheetHandle","attachmentPickerBottomSheetHandleHeight","attachmentPickerBottomSheetHeight","AttachmentPickerError","attachmentPickerErrorButtonText","AttachmentPickerErrorImage","attachmentPickerErrorText","numberOfAttachmentImagesToLoadPerCall","translucentStatusBar","bottomSheetContentContainer","closePicker","selectedFiles","selectedImages","selectedPicker","setSelectedPicker","topInset","currentIndex","setCurrentIndex","endCursor","setEndCursor","photoError","setPhotoError","hasNextPage","setHasNextPage","loadingPhotos","setLoadingPhotos","photos","setPhotos","bottomSheetCloseOnKeyboardShowTimeout","getMorePhotos","after","first","results","assets","console","log","backAction","undefined","backHandler","BackHandler","addEventListener","remove","hideAttachmentPicker","current","clearTimeout","setTimeout","close","keyboardSubscription","Platform","OS","Keyboard","addListener","removeListener","selectedPhotos","map","length","some","handleHeight","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidBottomBarHeightAdjustment","initialSnapPoint","finalSnapPoint","snapPoints","opacity","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useMemo, useRef, useState } from 'react';\nimport {\n Alert,\n BackHandler,\n Dimensions,\n ImageBackground,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n Text,\n View,\n} from 'react-native';\n\nimport BottomSheet, {\n BottomSheetFlatList,\n BottomSheetHandleProps,\n TouchableOpacity,\n} from '@gorhom/bottom-sheet';\nimport dayjs from 'dayjs';\nimport duration from 'dayjs/plugin/duration';\nimport { lookup } from 'mime-types';\n\nimport type { AttachmentPickerErrorProps } from './components/AttachmentPickerError';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Recorder } from '../../icons';\nimport { getPhotos } from '../../native';\nimport type { Asset, File } from '../../types/types';\nimport { vh, vw } from '../../utils/utils';\n\ndayjs.extend(duration);\n\nconst styles = StyleSheet.create({\n container: {\n flexGrow: 1,\n },\n durationText: {\n fontWeight: 'bold',\n },\n overlay: {\n alignItems: 'flex-end',\n flex: 1,\n },\n videoView: {\n bottom: 5,\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'space-between',\n paddingHorizontal: 5,\n position: 'absolute',\n width: '100%',\n },\n});\n\nconst screenHeight = vh(100);\nconst fullScreenHeight = Dimensions.get('window').height;\n\nexport type AttachmentPickerItemType = {\n asset: Asset;\n ImageOverlaySelectedComponent: React.ComponentType;\n maxNumberOfFiles: number;\n numberOfUploads: number;\n selected: boolean;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n numberOfAttachmentPickerImageColumns?: number;\n};\n\ntype AttachmentImageProps = Omit<AttachmentPickerItemType, 'setSelectedFiles'>;\n\ntype AttachmentVideoProps = Omit<AttachmentPickerItemType, 'setSelectedImages'>;\n\nconst AttachmentVideo: React.FC<AttachmentVideoProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { durationText, image, imageOverlay },\n colors: { overlay, white },\n },\n } = useTheme();\n\n const { duration, playableDuration, uri } = asset;\n\n const videoDuration = duration ? duration : playableDuration;\n\n const ONE_HOUR_IN_SECONDS = 3600;\n\n let durationLabel = '00:00';\n\n if (videoDuration) {\n const isDurationLongerThanHour = videoDuration / ONE_HOUR_IN_SECONDS >= 1;\n const formattedDurationParam = isDurationLongerThanHour ? 'HH:mm:ss' : 'mm:ss';\n const formattedVideoDuration = dayjs\n .duration(videoDuration, 'second')\n .format(formattedDurationParam);\n durationLabel = formattedVideoDuration;\n }\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const onPressVideo = () => {\n if (selected) {\n setSelectedFiles((files) => files.filter((file) => file.uri !== asset.uri));\n } else {\n setSelectedFiles((files) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return files;\n }\n return [\n ...files,\n {\n duration: durationLabel,\n name: asset.filename,\n size: asset.fileSize,\n type: 'video',\n uri: asset.uri,\n },\n ];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressVideo}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n <View style={styles.videoView}>\n <Recorder height={20} pathFill={white} width={25} />\n {videoDuration ? (\n <Text style={[styles.durationText, durationText, { color: white }]}>\n {durationLabel}\n </Text>\n ) : null}\n </View>\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst AttachmentImage: React.FC<AttachmentImageProps> = (props) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedImages,\n } = props;\n const {\n theme: {\n attachmentPicker: { image, imageOverlay },\n colors: { overlay },\n },\n } = useTheme();\n\n const size = vw(100) / (numberOfAttachmentPickerImageColumns || 3) - 2;\n\n const { uri } = asset;\n\n const onPressImage = () => {\n if (selected) {\n setSelectedImages((images) => images.filter((image) => image.uri !== asset.uri));\n } else {\n setSelectedImages((images) => {\n if (numberOfUploads >= maxNumberOfFiles) {\n Alert.alert('Maximum number of files reached');\n return images;\n }\n return [...images, asset];\n });\n }\n };\n\n return (\n <TouchableOpacity onPress={onPressImage}>\n <ImageBackground\n source={{ uri }}\n style={[\n {\n height: size,\n margin: 1,\n width: size,\n },\n image,\n ]}\n >\n {selected && (\n <View style={[styles.overlay, { backgroundColor: overlay }, imageOverlay]}>\n <ImageOverlaySelectedComponent />\n </View>\n )}\n </ImageBackground>\n </TouchableOpacity>\n );\n};\n\nconst renderItem = ({ item }: { item: AttachmentPickerItemType }) => {\n const {\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads,\n selected,\n setSelectedFiles,\n setSelectedImages,\n } = item;\n\n const contentType = lookup(asset.filename) || 'multipart/form-data';\n\n const fileType = asset.filename\n ? contentType.startsWith('image/')\n ? 'image'\n : 'video'\n : asset.type === 'video'\n ? 'video'\n : 'image';\n\n return fileType === 'image' ? (\n <AttachmentImage\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedImages={setSelectedImages}\n />\n ) : (\n <AttachmentVideo\n asset={asset}\n ImageOverlaySelectedComponent={ImageOverlaySelectedComponent}\n maxNumberOfFiles={maxNumberOfFiles}\n numberOfAttachmentPickerImageColumns={numberOfAttachmentPickerImageColumns}\n numberOfUploads={numberOfUploads}\n selected={selected}\n setSelectedFiles={setSelectedFiles}\n />\n );\n};\n\nexport type AttachmentPickerProps = {\n /**\n * Custom UI component to render [draggable handle](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) of attachment picker.\n *\n * **Default** [AttachmentPickerBottomSheetHandle](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx)\n */\n AttachmentPickerBottomSheetHandle: React.FC<BottomSheetHandleProps>;\n /**\n * Custom UI component to render error component while opening attachment picker.\n *\n * **Default** [AttachmentPickerError](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerError.tsx)\n */\n AttachmentPickerError: React.ComponentType<AttachmentPickerErrorProps>;\n /**\n * Custom UI component to render error image for attachment picker\n *\n * **Default** [AttachmentPickerErrorImage](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/AttachmentPickerErrorImage.tsx)\n */\n AttachmentPickerErrorImage: React.ComponentType;\n /**\n * Custom UI component to render overlay component, that shows up on top of [selected image](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png) (with tick mark)\n *\n * **Default** [ImageOverlaySelectedComponent](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/ImageOverlaySelectedComponent.tsx)\n */\n ImageOverlaySelectedComponent: React.ComponentType;\n attachmentPickerBottomSheetHandleHeight?: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentPickerErrorButtonText?: string;\n attachmentPickerErrorText?: string;\n numberOfAttachmentImagesToLoadPerCall?: number;\n numberOfAttachmentPickerImageColumns?: number;\n translucentStatusBar?: boolean;\n};\n\nexport const AttachmentPicker = React.forwardRef(\n (props: AttachmentPickerProps, ref: React.ForwardedRef<BottomSheet>) => {\n const {\n AttachmentPickerBottomSheetHandle,\n attachmentPickerBottomSheetHandleHeight,\n attachmentPickerBottomSheetHeight,\n AttachmentPickerError,\n attachmentPickerErrorButtonText,\n AttachmentPickerErrorImage,\n attachmentPickerErrorText,\n ImageOverlaySelectedComponent,\n numberOfAttachmentImagesToLoadPerCall,\n numberOfAttachmentPickerImageColumns,\n translucentStatusBar,\n } = props;\n\n const {\n theme: {\n attachmentPicker: { bottomSheetContentContainer },\n colors: { white },\n },\n } = useTheme();\n const {\n closePicker,\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n topInset,\n } = useAttachmentPickerContext();\n\n const [currentIndex, setCurrentIndex] = useState(-1);\n const [endCursor, setEndCursor] = useState<string>();\n const [photoError, setPhotoError] = useState(false);\n const [hasNextPage, setHasNextPage] = useState(true);\n const [loadingPhotos, setLoadingPhotos] = useState(false);\n const [photos, setPhotos] = useState<Asset[]>([]);\n const bottomSheetCloseOnKeyboardShowTimeout = useRef<NodeJS.Timeout>();\n\n const getMorePhotos = async () => {\n if (hasNextPage && !loadingPhotos && currentIndex > -1 && selectedPicker === 'images') {\n setLoadingPhotos(true);\n try {\n const results = await getPhotos({\n after: endCursor,\n first: numberOfAttachmentImagesToLoadPerCall ?? 60,\n });\n if (endCursor) {\n setPhotos([...photos, ...results.assets]);\n } else {\n setPhotos(results.assets);\n }\n setEndCursor(results.endCursor);\n setHasNextPage(results.hasNextPage || false);\n } catch (error) {\n console.log(error);\n setPhotoError(true);\n }\n setLoadingPhotos(false);\n }\n };\n\n useEffect(() => {\n const backAction = () => {\n if (selectedPicker) {\n setSelectedPicker(undefined);\n closePicker();\n return true;\n }\n\n return false;\n };\n\n const backHandler = BackHandler.addEventListener('hardwareBackPress', backAction);\n\n return () => backHandler.remove();\n }, [selectedPicker]);\n\n useEffect(() => {\n const hideAttachmentPicker = () => {\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n setSelectedPicker(undefined);\n // This short timeout is to prevent a race condition\n // where the close function is called during the point when a internal container layout happens within the bottomsheet due to keyboard affecting the layout\n // If the container layout measures a shorter height than previous but if the close snapped to the previous height's position, the bottom sheet will show up\n // this short delay ensures that close function is always called after a container layout due to keyboard change\n bottomSheetCloseOnKeyboardShowTimeout.current = setTimeout(\n () => (ref as React.MutableRefObject<BottomSheet | undefined>).current?.close(),\n 150,\n );\n };\n const keyboardSubscription =\n Platform.OS === 'ios'\n ? Keyboard.addListener('keyboardWillShow', hideAttachmentPicker)\n : Keyboard.addListener('keyboardDidShow', hideAttachmentPicker);\n\n return () => {\n if (keyboardSubscription?.remove) {\n keyboardSubscription.remove();\n return;\n }\n\n // To keep compatibility with older versions of React Native, where `remove()` is not available\n if (Platform.OS === 'ios') {\n Keyboard.removeListener('keyboardWillShow', hideAttachmentPicker);\n } else {\n Keyboard.removeListener('keyboardDidShow', hideAttachmentPicker);\n }\n if (bottomSheetCloseOnKeyboardShowTimeout.current) {\n clearTimeout(bottomSheetCloseOnKeyboardShowTimeout.current);\n }\n };\n }, []);\n\n useEffect(() => {\n if (currentIndex < 0) {\n setSelectedPicker(undefined);\n if (!loadingPhotos) {\n setEndCursor(undefined);\n setHasNextPage(true);\n }\n }\n }, [currentIndex]);\n\n useEffect(() => {\n if (\n selectedPicker === 'images' &&\n endCursor === undefined &&\n currentIndex > -1 &&\n !loadingPhotos\n ) {\n setPhotoError(false);\n getMorePhotos();\n }\n }, [currentIndex, selectedPicker]);\n\n const selectedPhotos = photos.map((asset) => ({\n asset,\n ImageOverlaySelectedComponent,\n maxNumberOfFiles,\n numberOfAttachmentPickerImageColumns,\n numberOfUploads: selectedFiles.length + selectedImages.length,\n selected:\n selectedImages.some((image) => image.uri === asset.uri) ||\n selectedFiles.some((file) => file.uri === asset.uri),\n setSelectedFiles,\n setSelectedImages,\n }));\n\n const handleHeight = attachmentPickerBottomSheetHandleHeight || 20;\n\n /**\n * This is to handle issues with Android measurements coming back incorrect.\n * If the StatusBar height is perfectly 1/2 of the difference between the two\n * dimensions for screen and window, it is incorrect and we need to account for\n * this. If you use a translucent header bar more adjustments are needed.\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - screenHeight - statusBarHeight;\n const androidBottomBarHeightAdjustment =\n Platform.OS === 'android'\n ? bottomBarHeight === statusBarHeight\n ? translucentStatusBar\n ? 0\n : StatusBar.currentHeight ?? 0\n : translucentStatusBar\n ? bottomBarHeight > statusBarHeight\n ? -bottomBarHeight + statusBarHeight\n : bottomBarHeight > 0\n ? -statusBarHeight\n : 0\n : bottomBarHeight > 0\n ? 0\n : statusBarHeight\n : 0;\n\n const initialSnapPoint =\n attachmentPickerBottomSheetHeight ?? Platform.OS === 'android'\n ? 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment) - handleHeight\n : 308 + (fullScreenHeight - screenHeight + androidBottomBarHeightAdjustment);\n\n const finalSnapPoint =\n Platform.OS === 'android'\n ? fullScreenHeight - topInset - handleHeight\n : fullScreenHeight - topInset;\n\n /**\n * Snap points changing cause a rerender of the position,\n * this is an issue if you are calling close on the bottom sheet.\n */\n const snapPoints = useMemo(\n () => [initialSnapPoint, finalSnapPoint],\n [initialSnapPoint, finalSnapPoint],\n );\n\n return (\n <>\n <BottomSheet\n containerHeight={fullScreenHeight}\n enablePanDownToClose={true}\n handleComponent={\n /**\n * using `null` here instead of `style={{ opacity: photoError ? 0 : 1 }}`\n * as opacity is not an allowed style\n */\n photoError ? null : AttachmentPickerBottomSheetHandle\n }\n handleHeight={handleHeight}\n index={-1}\n onChange={setCurrentIndex}\n ref={ref}\n snapPoints={snapPoints}\n >\n <BottomSheetFlatList\n contentContainerStyle={[\n styles.container,\n { backgroundColor: white },\n bottomSheetContentContainer,\n { opacity: photoError ? 0 : 1 },\n ]}\n data={selectedPhotos}\n keyExtractor={(item) => item.asset.uri}\n numColumns={numberOfAttachmentPickerImageColumns ?? 3}\n onEndReached={getMorePhotos}\n renderItem={renderItem}\n />\n </BottomSheet>\n {selectedPicker === 'images' && photoError && (\n <AttachmentPickerError\n attachmentPickerBottomSheetHeight={attachmentPickerBottomSheetHeight}\n attachmentPickerErrorButtonText={attachmentPickerErrorButtonText}\n AttachmentPickerErrorImage={AttachmentPickerErrorImage}\n attachmentPickerErrorText={attachmentPickerErrorText}\n />\n )}\n </>\n );\n },\n);\n\nAttachmentPicker.displayName = 'AttachmentPicker';\n"]}
@@ -33,9 +33,9 @@ var useIsOnline = function useIsOnline(client) {
33
33
  setConnectionRecovering = _useState4[1];
34
34
 
35
35
  var isMounted = (0, _useIsMountedRef.useIsMountedRef)();
36
- var clientExits = !!client;
36
+ var clientExists = !!client;
37
37
  var onBackground = (0, _react.useCallback)(function () {
38
- if (!closeConnectionOnBackground) return;
38
+ if (!closeConnectionOnBackground || !clientExists) return;
39
39
 
40
40
  for (var cid in client.activeChannels) {
41
41
  var channel = client.activeChannels[cid];
@@ -44,11 +44,11 @@ var useIsOnline = function useIsOnline(client) {
44
44
 
45
45
  client.closeConnection();
46
46
  setIsOnline(false);
47
- }, [closeConnectionOnBackground, client]);
47
+ }, [closeConnectionOnBackground, client, clientExists]);
48
48
  var onForeground = (0, _react.useCallback)(function () {
49
- if (!closeConnectionOnBackground) return;
49
+ if (!closeConnectionOnBackground || !clientExists) return;
50
50
  client.openConnection();
51
- }, [closeConnectionOnBackground, client]);
51
+ }, [closeConnectionOnBackground, client, clientExists]);
52
52
  (0, _useAppStateListener.useAppStateListener)(onForeground, onBackground);
53
53
  (0, _react.useEffect)(function () {
54
54
  var handleChangedEvent = function handleChangedEvent(event) {
@@ -135,7 +135,7 @@ var useIsOnline = function useIsOnline(client) {
135
135
  });
136
136
  unsubscribeNetInfo == null ? void 0 : unsubscribeNetInfo();
137
137
  };
138
- }, [clientExits]);
138
+ }, [clientExists]);
139
139
  return {
140
140
  connectionRecovering: connectionRecovering,
141
141
  isOnline: isOnline
@@ -1 +1 @@
1
- {"version":3,"sources":["useIsOnline.ts"],"names":["useIsOnline","client","closeConnectionOnBackground","isOnline","setIsOnline","connectionRecovering","setConnectionRecovering","isMounted","clientExits","onBackground","cid","activeChannels","channel","state","setIsUpToDate","closeConnection","onForeground","openConnection","handleChangedEvent","event","online","handleRecoveredEvent","notifyChatClient","netInfoState","wsConnection","onlineStatusChanged","type","unsubscribeNetInfo","setNetInfoListener","NetInfo","addEventListener","isHealthy","setInitialOnlineState","fetch","status","current","chatListeners","push","on","forEach","listener","unsubscribe"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { StreamChat, Event as StreamEvent } from 'stream-chat';\n\nimport { useAppStateListener } from '../../../hooks/useAppStateListener';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\nimport { NetInfo } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n/**\n * Disconnect the websocket connection when app goes to background,\n * and reconnect when app comes to foreground.\n * We do this to make sure, user receives push notifications when app is in the background.\n * You can't receive push notification until you have active websocket connection.\n */\nexport const useIsOnline = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n closeConnectionOnBackground = true,\n) => {\n const [isOnline, setIsOnline] = useState(true);\n const [connectionRecovering, setConnectionRecovering] = useState(false);\n const isMounted = useIsMountedRef();\n const clientExits = !!client;\n\n const onBackground = useCallback(() => {\n if (!closeConnectionOnBackground) return;\n\n for (const cid in client.activeChannels) {\n const channel = client.activeChannels[cid];\n channel?.state.setIsUpToDate(false);\n }\n\n client.closeConnection();\n setIsOnline(false);\n }, [closeConnectionOnBackground, client]);\n\n const onForeground = useCallback(() => {\n if (!closeConnectionOnBackground) return;\n\n client.openConnection();\n }, [closeConnectionOnBackground, client]);\n\n useAppStateListener(onForeground, onBackground);\n\n useEffect(() => {\n const handleChangedEvent = (event: StreamEvent<StreamChatGenerics>) => {\n setConnectionRecovering(!event.online);\n setIsOnline(event.online || false);\n };\n\n const handleRecoveredEvent = () => setConnectionRecovering(false);\n\n const notifyChatClient = (netInfoState: boolean) => {\n if (client?.wsConnection) {\n if (netInfoState) {\n client.wsConnection.onlineStatusChanged({\n type: 'online',\n } as Event);\n } else {\n client.wsConnection.onlineStatusChanged({\n type: 'offline',\n } as Event);\n }\n }\n };\n\n let unsubscribeNetInfo: NetInfoSubscription;\n const setNetInfoListener = () => {\n unsubscribeNetInfo = NetInfo.addEventListener((netInfoState) => {\n if (netInfoState === false && !client.wsConnection?.isHealthy) {\n setConnectionRecovering(true);\n setIsOnline(false);\n }\n notifyChatClient(netInfoState);\n });\n };\n\n const setInitialOnlineState = async () => {\n const status = await NetInfo.fetch();\n if (isMounted.current) {\n setIsOnline(status);\n notifyChatClient(status);\n }\n };\n\n setInitialOnlineState();\n const chatListeners: Array<ReturnType<StreamChat['on']>> = [];\n\n if (client) {\n chatListeners.push(client.on('connection.changed', handleChangedEvent));\n chatListeners.push(client.on('connection.recovered', handleRecoveredEvent));\n setNetInfoListener();\n }\n\n return () => {\n chatListeners.forEach((listener) => listener.unsubscribe?.());\n unsubscribeNetInfo?.();\n };\n }, [clientExits]);\n\n return { connectionRecovering, isOnline };\n};\n"]}
1
+ {"version":3,"sources":["useIsOnline.ts"],"names":["useIsOnline","client","closeConnectionOnBackground","isOnline","setIsOnline","connectionRecovering","setConnectionRecovering","isMounted","clientExists","onBackground","cid","activeChannels","channel","state","setIsUpToDate","closeConnection","onForeground","openConnection","handleChangedEvent","event","online","handleRecoveredEvent","notifyChatClient","netInfoState","wsConnection","onlineStatusChanged","type","unsubscribeNetInfo","setNetInfoListener","NetInfo","addEventListener","isHealthy","setInitialOnlineState","fetch","status","current","chatListeners","push","on","forEach","listener","unsubscribe"],"mappings":"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","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { StreamChat, Event as StreamEvent } from 'stream-chat';\n\nimport { useAppStateListener } from '../../../hooks/useAppStateListener';\nimport { useIsMountedRef } from '../../../hooks/useIsMountedRef';\nimport { NetInfo } from '../../../native';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\n/**\n * Disconnect the websocket connection when app goes to background,\n * and reconnect when app comes to foreground.\n * We do this to make sure the user receives push notifications when app is in the background.\n * You can't receive push notification until you have active websocket connection.\n */\nexport const useIsOnline = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n client: StreamChat<StreamChatGenerics>,\n closeConnectionOnBackground = true,\n) => {\n const [isOnline, setIsOnline] = useState(true);\n const [connectionRecovering, setConnectionRecovering] = useState(false);\n const isMounted = useIsMountedRef();\n const clientExists = !!client;\n\n const onBackground = useCallback(() => {\n if (!closeConnectionOnBackground || !clientExists) return;\n\n for (const cid in client.activeChannels) {\n const channel = client.activeChannels[cid];\n channel?.state.setIsUpToDate(false);\n }\n\n client.closeConnection();\n setIsOnline(false);\n }, [closeConnectionOnBackground, client, clientExists]);\n\n const onForeground = useCallback(() => {\n if (!closeConnectionOnBackground || !clientExists) return;\n\n client.openConnection();\n }, [closeConnectionOnBackground, client, clientExists]);\n\n useAppStateListener(onForeground, onBackground);\n\n useEffect(() => {\n const handleChangedEvent = (event: StreamEvent<StreamChatGenerics>) => {\n setConnectionRecovering(!event.online);\n setIsOnline(event.online || false);\n };\n\n const handleRecoveredEvent = () => setConnectionRecovering(false);\n\n const notifyChatClient = (netInfoState: boolean) => {\n if (client?.wsConnection) {\n if (netInfoState) {\n client.wsConnection.onlineStatusChanged({\n type: 'online',\n } as Event);\n } else {\n client.wsConnection.onlineStatusChanged({\n type: 'offline',\n } as Event);\n }\n }\n };\n\n let unsubscribeNetInfo: NetInfoSubscription;\n const setNetInfoListener = () => {\n unsubscribeNetInfo = NetInfo.addEventListener((netInfoState) => {\n if (netInfoState === false && !client.wsConnection?.isHealthy) {\n setConnectionRecovering(true);\n setIsOnline(false);\n }\n notifyChatClient(netInfoState);\n });\n };\n\n const setInitialOnlineState = async () => {\n const status = await NetInfo.fetch();\n if (isMounted.current) {\n setIsOnline(status);\n notifyChatClient(status);\n }\n };\n\n setInitialOnlineState();\n const chatListeners: Array<ReturnType<StreamChat['on']>> = [];\n\n if (client) {\n chatListeners.push(client.on('connection.changed', handleChangedEvent));\n chatListeners.push(client.on('connection.recovered', handleRecoveredEvent));\n setNetInfoListener();\n }\n\n return () => {\n chatListeners.forEach((listener) => listener.unsubscribe?.());\n unsubscribeNetInfo?.();\n };\n }, [clientExists]);\n\n return { connectionRecovering, isOnline };\n};\n"]}