stream-chat-react-native-core 4.6.1 → 4.7.0-beta.1

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 (200) hide show
  1. package/lib/commonjs/components/Attachment/Attachment.js +22 -13
  2. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Gallery.js +72 -37
  4. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/VideoThumbnail.js +83 -0
  6. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -0
  7. package/lib/commonjs/components/Attachment/hooks/useGoToURL.js +1 -1
  8. package/lib/commonjs/components/Attachment/hooks/useGoToURL.js.map +1 -1
  9. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  10. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  11. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js +5 -5
  12. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js.map +1 -1
  13. package/lib/commonjs/components/Channel/Channel.js +19 -14
  14. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  15. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +4 -2
  16. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  17. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +43 -28
  18. package/lib/commonjs/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  19. package/lib/commonjs/components/ImageGallery/ImageGallery.js +167 -345
  20. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  21. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js +4 -4
  22. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  23. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +225 -0
  24. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -0
  25. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +102 -40
  26. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  27. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +145 -0
  28. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -0
  29. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js +31 -34
  30. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js.map +1 -1
  31. package/lib/commonjs/components/ImageGallery/components/ProgressControl.js +153 -0
  32. package/lib/commonjs/components/ImageGallery/components/ProgressControl.js.map +1 -0
  33. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +373 -0
  34. package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -0
  35. package/lib/commonjs/components/Message/Message.js +23 -13
  36. package/lib/commonjs/components/Message/Message.js.map +1 -1
  37. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +4 -2
  38. package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  39. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +25 -23
  40. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  41. package/lib/commonjs/components/Reply/Reply.js +32 -12
  42. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  43. package/lib/commonjs/components/Spinner/Spinner.js +12 -4
  44. package/lib/commonjs/components/Spinner/Spinner.js.map +1 -1
  45. package/lib/commonjs/components/index.js +26 -0
  46. package/lib/commonjs/components/index.js.map +1 -1
  47. package/lib/commonjs/contexts/messageContext/MessageContext.js +2 -2
  48. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  49. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  50. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  51. package/lib/commonjs/contexts/messagesContext/MessagesContext.js +2 -2
  52. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  53. package/lib/commonjs/contexts/themeContext/utils/theme.js +10 -1
  54. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  55. package/lib/commonjs/icons/Pause.js +61 -0
  56. package/lib/commonjs/icons/Pause.js.map +1 -0
  57. package/lib/commonjs/icons/Play.js +42 -0
  58. package/lib/commonjs/icons/Play.js.map +1 -0
  59. package/lib/commonjs/icons/index.js +26 -0
  60. package/lib/commonjs/icons/index.js.map +1 -1
  61. package/lib/commonjs/mock-builders/api/queryMembers.js +98 -1
  62. package/lib/commonjs/mock-builders/api/queryMembers.js.map +1 -1
  63. package/lib/commonjs/native.js +7 -1
  64. package/lib/commonjs/native.js.map +1 -1
  65. package/lib/commonjs/utils/getUrlOfImageAttachment.js +1 -1
  66. package/lib/commonjs/utils/getUrlOfImageAttachment.js.map +1 -1
  67. package/lib/commonjs/version.json +1 -1
  68. package/lib/module/components/Attachment/Attachment.js +22 -13
  69. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  70. package/lib/module/components/Attachment/Gallery.js +72 -37
  71. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  72. package/lib/module/components/Attachment/VideoThumbnail.js +83 -0
  73. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -0
  74. package/lib/module/components/Attachment/hooks/useGoToURL.js +1 -1
  75. package/lib/module/components/Attachment/hooks/useGoToURL.js.map +1 -1
  76. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  77. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  78. package/lib/module/components/Attachment/utils/getAspectRatio.js +5 -5
  79. package/lib/module/components/Attachment/utils/getAspectRatio.js.map +1 -1
  80. package/lib/module/components/Channel/Channel.js +19 -14
  81. package/lib/module/components/Channel/Channel.js.map +1 -1
  82. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +4 -2
  83. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  84. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js +43 -28
  85. package/lib/module/components/ChannelPreview/hooks/useChannelPreviewDisplayName.js.map +1 -1
  86. package/lib/module/components/ImageGallery/ImageGallery.js +167 -345
  87. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  88. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js +4 -4
  89. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  90. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +225 -0
  91. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -0
  92. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +102 -40
  93. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  94. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +145 -0
  95. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -0
  96. package/lib/module/components/ImageGallery/components/ImageGrid.js +31 -34
  97. package/lib/module/components/ImageGallery/components/ImageGrid.js.map +1 -1
  98. package/lib/module/components/ImageGallery/components/ProgressControl.js +153 -0
  99. package/lib/module/components/ImageGallery/components/ProgressControl.js.map +1 -0
  100. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +373 -0
  101. package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -0
  102. package/lib/module/components/Message/Message.js +23 -13
  103. package/lib/module/components/Message/Message.js.map +1 -1
  104. package/lib/module/components/Message/hooks/useCreateMessageContext.js +4 -2
  105. package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
  106. package/lib/module/components/MessageOverlay/MessageOverlay.js +25 -23
  107. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  108. package/lib/module/components/Reply/Reply.js +32 -12
  109. package/lib/module/components/Reply/Reply.js.map +1 -1
  110. package/lib/module/components/Spinner/Spinner.js +12 -4
  111. package/lib/module/components/Spinner/Spinner.js.map +1 -1
  112. package/lib/module/components/index.js +26 -0
  113. package/lib/module/components/index.js.map +1 -1
  114. package/lib/module/contexts/messageContext/MessageContext.js +2 -2
  115. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  116. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  117. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  118. package/lib/module/contexts/messagesContext/MessagesContext.js +2 -2
  119. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  120. package/lib/module/contexts/themeContext/utils/theme.js +10 -1
  121. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  122. package/lib/module/icons/Pause.js +61 -0
  123. package/lib/module/icons/Pause.js.map +1 -0
  124. package/lib/module/icons/Play.js +42 -0
  125. package/lib/module/icons/Play.js.map +1 -0
  126. package/lib/module/icons/index.js +26 -0
  127. package/lib/module/icons/index.js.map +1 -1
  128. package/lib/module/mock-builders/api/queryMembers.js +98 -1
  129. package/lib/module/mock-builders/api/queryMembers.js.map +1 -1
  130. package/lib/module/native.js +7 -1
  131. package/lib/module/native.js.map +1 -1
  132. package/lib/module/utils/getUrlOfImageAttachment.js +1 -1
  133. package/lib/module/utils/getUrlOfImageAttachment.js.map +1 -1
  134. package/lib/module/version.json +1 -1
  135. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  136. package/lib/typescript/components/Attachment/VideoThumbnail.d.ts +4 -0
  137. package/lib/typescript/components/Attachment/utils/buildGallery/types.d.ts +1 -0
  138. package/lib/typescript/components/Attachment/utils/getAspectRatio.d.ts +1 -1
  139. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  140. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  141. package/lib/typescript/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.d.ts +1 -0
  142. package/lib/typescript/components/ChannelPreview/hooks/useChannelPreviewDisplayName.d.ts +4 -4
  143. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +2 -0
  144. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +27 -0
  145. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +18 -2
  146. package/lib/typescript/components/ImageGallery/components/ImageGalleryVideoControl.d.ts +3 -0
  147. package/lib/typescript/components/ImageGallery/components/ProgressControl.d.ts +5 -0
  148. package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +36 -0
  149. package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
  150. package/lib/typescript/components/Spinner/Spinner.d.ts +7 -1
  151. package/lib/typescript/components/index.d.ts +2 -0
  152. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +3 -1
  153. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +1 -0
  154. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +2 -0
  155. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +9 -0
  156. package/lib/typescript/icons/Pause.d.ts +3 -0
  157. package/lib/typescript/icons/Play.d.ts +3 -0
  158. package/lib/typescript/icons/index.d.ts +2 -0
  159. package/lib/typescript/mock-builders/api/queryMembers.d.ts +161 -0
  160. package/lib/typescript/mock-builders/api/utils.d.ts +7 -0
  161. package/lib/typescript/mock-builders/generator/user.d.ts +30 -0
  162. package/lib/typescript/mock-builders/mock.d.ts +3 -0
  163. package/lib/typescript/native.d.ts +66 -1
  164. package/package.json +1 -1
  165. package/src/components/Attachment/Attachment.tsx +11 -7
  166. package/src/components/Attachment/Gallery.tsx +75 -36
  167. package/src/components/Attachment/VideoThumbnail.tsx +45 -0
  168. package/src/components/Attachment/hooks/useGoToURL.ts +1 -1
  169. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +1 -0
  170. package/src/components/Attachment/utils/buildGallery/types.ts +1 -0
  171. package/src/components/Attachment/utils/getAspectRatio.ts +7 -5
  172. package/src/components/Channel/Channel.tsx +4 -0
  173. package/src/components/Channel/hooks/useCreateMessagesContext.ts +2 -0
  174. package/src/components/ChannelPreview/hooks/__tests__/useChannelPreviewDisplayName.test.tsx +83 -0
  175. package/src/components/ChannelPreview/hooks/useChannelPreviewDisplayName.ts +43 -26
  176. package/src/components/ImageGallery/ImageGallery.tsx +145 -667
  177. package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +4 -4
  178. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +224 -0
  179. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +114 -19
  180. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +103 -0
  181. package/src/components/ImageGallery/components/ImageGrid.tsx +12 -25
  182. package/src/components/ImageGallery/components/ProgressControl.tsx +107 -0
  183. package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +722 -0
  184. package/src/components/Message/Message.tsx +10 -3
  185. package/src/components/Message/hooks/useCreateMessageContext.ts +2 -0
  186. package/src/components/MessageOverlay/MessageOverlay.tsx +2 -0
  187. package/src/components/Reply/Reply.tsx +36 -23
  188. package/src/components/Spinner/Spinner.tsx +11 -4
  189. package/src/components/index.ts +2 -0
  190. package/src/contexts/messageContext/MessageContext.tsx +2 -0
  191. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +1 -0
  192. package/src/contexts/messagesContext/MessagesContext.tsx +2 -0
  193. package/src/contexts/themeContext/utils/theme.ts +18 -0
  194. package/src/icons/Pause.tsx +14 -0
  195. package/src/icons/Play.tsx +17 -0
  196. package/src/icons/index.ts +2 -0
  197. package/src/mock-builders/api/queryMembers.js +98 -0
  198. package/src/native.ts +59 -1
  199. package/src/utils/getUrlOfImageAttachment.ts +1 -1
  200. package/src/version.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["useImageGalleryGestures.tsx"],"names":["HasPinched","IsSwiping","MARGIN","useImageGalleryGestures","currentImageHeight","halfScreenHeight","halfScreenWidth","headerFooterVisible","offsetScale","overlayOpacity","photoLength","scale","screenHeight","screenWidth","setSelectedIndex","translateX","translateY","translationX","setOverlay","isAndroid","Platform","OS","hasHitBottomScale","hasHitTopScale","originX","originY","oldFocalX","oldFocalY","focalX","focalY","index","offsetX","offsetY","focalOffsetX","focalOffsetY","adjustedFocalX","adjustedFocalY","tapX","tapY","numberOfPinchFingers","isSwiping","isPinch","hasPinched","resetTouchValues","value","UNDETERMINED","resetMovementValues","onPan","onActive","evt","numberOfPointers","TRUE","FALSE","translationY","maxXYRatio","Math","abs","localEvtScale","onFinish","finalXPosition","velocityX","finalYPosition","velocityY","duration","easing","Easing","out","ease","clamp","deceleration","velocity","onStart","onPinch","triggerHaptic","onSingleTap","onDoubleTap","absoluteX","absoluteY","translateYTopBottom","lowerBound","upperBound","min","max"],"mappings":"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","sourcesContent":["import { Platform } from 'react-native';\nimport type {\n PanGestureHandlerGestureEvent,\n PinchGestureHandlerGestureEvent,\n TapGestureHandlerGestureEvent,\n} from 'react-native-gesture-handler';\nimport {\n cancelAnimation,\n Easing,\n runOnJS,\n SharedValue,\n useAnimatedGestureHandler,\n useSharedValue,\n withDecay,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { useOverlayContext } from '../../../contexts/overlayContext/OverlayContext';\nimport { triggerHaptic } from '../../../native';\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nconst MARGIN = 32;\n\nexport const useImageGalleryGestures = ({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n}: {\n currentImageHeight: number;\n halfScreenHeight: number;\n halfScreenWidth: number;\n headerFooterVisible: SharedValue<number>;\n offsetScale: SharedValue<number>;\n overlayOpacity: SharedValue<number>;\n photoLength: number;\n scale: SharedValue<number>;\n screenHeight: number;\n screenWidth: number;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n translateX: SharedValue<number>;\n translateY: SharedValue<number>;\n translationX: SharedValue<number>;\n}) => {\n const { setOverlay } = useOverlayContext();\n const isAndroid = Platform.OS === 'android';\n\n /**\n * Values to track scale for haptic feedback firing\n */\n const hasHitBottomScale = useSharedValue(1);\n const hasHitTopScale = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const originX = useSharedValue(0);\n const originY = useSharedValue(0);\n const oldFocalX = useSharedValue(0);\n const oldFocalY = useSharedValue(0);\n const focalX = useSharedValue(0);\n const focalY = useSharedValue(0);\n const index = useSharedValue(0);\n\n /**\n * Shared values for movement\n */\n const offsetX = useSharedValue(0);\n const offsetY = useSharedValue(0);\n\n /**\n * Shared values for touch tracking\n */\n const focalOffsetX = useSharedValue(0);\n const focalOffsetY = useSharedValue(0);\n const adjustedFocalX = useSharedValue(0);\n const adjustedFocalY = useSharedValue(0);\n const tapX = useSharedValue(0);\n const tapY = useSharedValue(0);\n\n /**\n * Shared values for gesture tracking\n */\n const numberOfPinchFingers = useSharedValue(0);\n const isSwiping = useSharedValue(0);\n const isPinch = useSharedValue(false);\n const hasPinched = useSharedValue(0);\n\n /**\n * Reset gesture values for use on touch release\n */\n const resetTouchValues = () => {\n 'worklet';\n focalX.value = 0;\n focalY.value = 0;\n oldFocalX.value = 0;\n oldFocalY.value = 0;\n originX.value = 0;\n originY.value = 0;\n focalOffsetX.value = 0;\n focalOffsetY.value = 0;\n numberOfPinchFingers.value = 0;\n isPinch.value = false;\n isSwiping.value = IsSwiping.UNDETERMINED;\n };\n\n /**\n * Reset movement values for use on selected photo change\n */\n const resetMovementValues = () => {\n 'worklet';\n translateX.value = 0;\n translateY.value = 0;\n scale.value = 1;\n offsetScale.value = 1;\n };\n\n /**\n * We use simultaneousHandlers to allow pan and pinch gesture handlers\n * depending on the gesture. The touch is fully handled by the pinch\n * gesture handler once it has began so all interactions by the pan\n * handler are blocked if isPinch.value is true\n */\n const onPan = useAnimatedGestureHandler<PanGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n if (evt.numberOfPointers === 1 && !isPinch.value) {\n /**\n * If Android where a second finger cannot be added back and\n * removing one finger returns to Pan Handler then adjust origin\n * on finger remove and set swiping false\n */\n if (isAndroid && hasPinched.value === HasPinched.TRUE) {\n hasPinched.value = HasPinched.FALSE;\n isSwiping.value = IsSwiping.FALSE;\n offsetX.value = translateX.value + evt.translationX;\n offsetY.value = translateY.value - evt.translationY;\n }\n\n /**\n * isSwiping is used to prevent Y movement if a clear swipe to next\n * or previous is begun when at the edge of a photo. The value is\n * either 0, 1, or 2, via the IsSwiping enum designating undetermined,\n * true, or false and is reset on releasing the touch\n */\n if (isSwiping.value === IsSwiping.UNDETERMINED) {\n const maxXYRatio = isAndroid ? 1 : 0.25;\n if (\n Math.abs(evt.translationX / evt.translationY) > maxXYRatio &&\n (Math.abs(-halfScreenWidth * (scale.value - 1) - offsetX.value) < 3 ||\n Math.abs(halfScreenWidth * (scale.value - 1) - offsetX.value) < 3)\n ) {\n isSwiping.value = IsSwiping.TRUE;\n }\n if (Math.abs(evt.translationY) > 25) {\n isSwiping.value = IsSwiping.FALSE;\n }\n }\n\n /**\n * localEvtScale is used for swipe away\n */\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * If not swiping translate the image in X and Y to the event\n * translation plus offset. If swiping only translate X, if\n * swiping down when at top of screen or centered balance scale\n * using offset to a degree (this needs improvement the calculation\n * is incorrect but likely needs origin use to be 100%)\n */\n translateX.value =\n scale.value !== offsetScale.value\n ? offsetX.value * localEvtScale - evt.translationX\n : offsetX.value - evt.translationX;\n translateY.value =\n isSwiping.value !== IsSwiping.TRUE\n ? scale.value !== offsetScale.value\n ? offsetY.value * localEvtScale + evt.translationY\n : offsetY.value + evt.translationY\n : translateY.value;\n\n /**\n * If swiping down start scaling down the image for swipe\n * away effect\n */\n scale.value =\n currentImageHeight * offsetScale.value < screenHeight && translateY.value > 0\n ? offsetScale.value * (1 - (1 / 3) * (translateY.value / screenHeight))\n : currentImageHeight * offsetScale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * offsetScale.value - halfScreenHeight\n ? offsetScale.value *\n (1 -\n (1 / 3) *\n ((translateY.value -\n ((currentImageHeight / 2) * offsetScale.value - halfScreenHeight)) /\n screenHeight))\n : scale.value;\n\n overlayOpacity.value = localEvtScale;\n }\n },\n onFinish: (evt) => {\n if (!isPinch.value && evt.numberOfPointers < 2) {\n /**\n * To determine if the fling should page to the next image we\n * calculate a final position based on the current position and\n * event velocity\n */\n const finalXPosition = evt.translationX - evt.velocityX * 0.3;\n const finalYPosition = evt.translationY + evt.velocityY * 0.1;\n\n /**\n * If there is a next photo, the image is lined up to the right\n * edge, the swipe is to the left, and the final position is more\n * than half the screen width, move to the next image\n */\n if (\n index.value < photoLength - 1 &&\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value + 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value + 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n\n /**\n * If there is a previous photo, the image is lined up to the left\n * edge, the swipe is to the right, and the final position is more\n * than half the screen width, move to the previous image\n */\n } else if (\n index.value > 0 &&\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth &&\n isSwiping.value === IsSwiping.TRUE\n ) {\n cancelAnimation(translationX);\n translationX.value = withTiming(\n -(screenWidth + MARGIN) * (index.value - 1),\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n resetMovementValues();\n index.value = index.value - 1;\n runOnJS(setSelectedIndex)(index.value);\n },\n );\n }\n\n /**\n * When the pan is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise use decay\n * with a clamping at the edges to give the effect the image is\n * sliding along using velocity and friction\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1), {\n duration: 200,\n })\n : withDecay({\n clamp: [\n -halfScreenWidth * (scale.value - 1),\n halfScreenWidth * (scale.value - 1),\n ],\n deceleration: 0.99,\n velocity: -evt.velocityX,\n });\n\n /**\n * When the pan is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise use decay with a clamping at the edges to give the effect\n * the image is sliding along using velocity and friction\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? withTiming((currentImageHeight / 2) * scale.value - halfScreenHeight)\n : translateY.value < (-currentImageHeight / 2) * scale.value + halfScreenHeight\n ? withTiming((-currentImageHeight / 2) * scale.value + halfScreenHeight)\n : withDecay({\n clamp: [\n (-currentImageHeight / 2) * scale.value + halfScreenHeight,\n (currentImageHeight / 2) * scale.value - halfScreenHeight,\n ],\n deceleration: 0.99,\n velocity: evt.velocityY,\n });\n\n resetTouchValues();\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n scale.value =\n scale.value !== offsetScale.value ? withTiming(offsetScale.value) : offsetScale.value;\n\n /**\n * If the photo is centered or at the top of the screen if scaled larger\n * than the screen, and not paging left or right, and the final Y position\n * is greater than half the screen using swipe velocity and position, close\n * the overlay\n */\n if (\n finalYPosition > halfScreenHeight &&\n offsetY.value + 8 >= (currentImageHeight / 2) * scale.value - halfScreenHeight &&\n isSwiping.value !== IsSwiping.TRUE &&\n translateY.value !== 0 &&\n !(\n Math.abs(halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value < 0 &&\n finalXPosition < -halfScreenWidth\n ) &&\n !(\n Math.abs(-halfScreenWidth * (scale.value - 1) + offsetX.value) < 3 &&\n translateX.value > 0 &&\n finalXPosition > halfScreenWidth\n )\n ) {\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n overlayOpacity.value = withTiming(\n 0,\n {\n duration: 200,\n easing: Easing.out(Easing.ease),\n },\n () => {\n runOnJS(setOverlay)('none');\n },\n );\n scale.value = withTiming(0.6, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value =\n evt.velocityY > 1000\n ? withDecay({\n velocity: evt.velocityY,\n })\n : withTiming(halfScreenHeight + (currentImageHeight / 2) * scale.value, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withDecay({\n velocity: -evt.velocityX,\n });\n }\n }\n },\n onStart: () => {\n if (!isPinch.value) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight, photoLength],\n );\n\n /**\n * On pinch is run when two or more fingers touch the screen, it then takes over\n * all touch handling even if the number of fingers is reduced to one until the\n * touch is complete\n */\n const onPinch = useAnimatedGestureHandler<PinchGestureHandlerGestureEvent>(\n {\n onActive: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isPinch.value && isAndroid) {\n /**\n * Set hasPinched to true so when removing one finger the pan active\n * state adjusts the offset\n */\n hasPinched.value = HasPinched.TRUE;\n\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Set pinch to true to stop all pan gesture interactions, we do this\n * again here for Android outside the check that creates type\n */\n isPinch.value = true;\n\n /**\n * The scale is clamped to a minimum of 1 and maximum of 8 for aesthetics.\n * We use the clamped value to determine a local event scale so the focal\n * point does not become out of sync with the actual photo scaling, e.g.\n * evt.scale is 20 but scale is 8, using evt.scale for offset will put the\n * photo and calculations out of sync\n */\n scale.value = clamp(offsetScale.value * evt.scale, 1, 8);\n const localEvtScale = scale.value / offsetScale.value;\n\n /**\n * When we hit the top or bottom of the scale clamping we run a haptic\n * trigger, we track if it has been run to not spam the trigger\n */\n if (scale.value !== 8 && scale.value !== 1) {\n hasHitTopScale.value = 0;\n hasHitBottomScale.value = 0;\n } else if (scale.value === 8 && hasHitTopScale.value === 0) {\n hasHitTopScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n } else if (scale.value === 1 && hasHitBottomScale.value === 0) {\n hasHitBottomScale.value = 1;\n runOnJS(triggerHaptic)('impactLight');\n }\n\n /**\n * We calculate the adjusted focal point on the photo using the events\n * focal position on the screen, screen size, and current photo offset\n */\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n\n /**\n * If the number of fingers on the screen changes, the position of the\n * focal point will change and this needs to be accounted for, e.g. if\n * two fingers are on the screen the focal is between them, but if one is\n * then removed the focal is now at the remaining fingers touch position.\n * If this happens without accounting for the change the image will jump\n * around, we keep track of the previous two finger focal to adjust for this\n * change in a reduction from two fingers to one, then if another finger\n * is added again we adjust the origin to account for the difference between\n * the original two finger touch and the new two finger touch position.\n */\n if (numberOfPinchFingers.value !== evt.numberOfPointers) {\n numberOfPinchFingers.value = evt.numberOfPointers;\n if (evt.numberOfPointers === 1) {\n focalOffsetX.value = oldFocalX.value - adjustedFocalX.value;\n focalOffsetY.value = oldFocalY.value - adjustedFocalY.value;\n } else if (numberOfPinchFingers.value > 1) {\n originX.value =\n originX.value -\n (oldFocalX.value / localEvtScale - adjustedFocalX.value / localEvtScale);\n originY.value =\n originY.value -\n (oldFocalY.value / localEvtScale - adjustedFocalY.value / localEvtScale);\n }\n }\n\n /**\n * If pinch handler has been activated via two fingers then the fingers\n * reduced to one we keep track of the old focal using the focal offset\n * from when the number of fingers was two. We then translate the photo\n * taking into account the offset, focal, focal offset, origin, and scale.\n */\n if (numberOfPinchFingers.value === 1) {\n oldFocalX.value = adjustedFocalX.value + focalOffsetX.value;\n oldFocalY.value = adjustedFocalY.value + focalOffsetY.value;\n translateX.value = offsetX.value - oldFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + oldFocalY.value - localEvtScale * originY.value;\n\n /**\n * If the number of fingers in the gesture is greater than one the\n * adjusted focal point is saved as the old focal and the photo is\n * translated taking into account the offset, focal, origin, and scale.\n */\n } else if (numberOfPinchFingers.value > 1) {\n oldFocalX.value = adjustedFocalX.value;\n oldFocalY.value = adjustedFocalY.value;\n translateX.value = offsetX.value - adjustedFocalX.value + localEvtScale * originX.value;\n translateY.value = offsetY.value + adjustedFocalY.value - localEvtScale * originY.value;\n }\n },\n onFinish: () => {\n if (isPinch.value) {\n /**\n * When the pinch is finished if the scale is less than 1 return the\n * photo to center, if the photo is inside the edges of the screen\n * return the photo to line up with the edges, otherwise leave the\n * photo in its current position\n */\n translateX.value =\n scale.value < 1\n ? withTiming(0)\n : translateX.value > halfScreenWidth * (scale.value - 1)\n ? withTiming(halfScreenWidth * (scale.value - 1))\n : translateX.value < -halfScreenWidth * (scale.value - 1)\n ? withTiming(-halfScreenWidth * (scale.value - 1))\n : translateX.value;\n\n /**\n * When the pinch is finished if the height is less than the screen\n * height return the photo to center, if the photo is inside the\n * edges of the screen return the photo to line up with the edges,\n * otherwise leave the photo in its current position\n */\n translateY.value =\n currentImageHeight * scale.value < screenHeight\n ? withTiming(0)\n : translateY.value > (currentImageHeight / 2) * scale.value - screenHeight / 2\n ? withTiming((currentImageHeight / 2) * scale.value - screenHeight / 2)\n : translateY.value < (-currentImageHeight / 2) * scale.value + screenHeight / 2\n ? withTiming((-currentImageHeight / 2) * scale.value + screenHeight / 2)\n : translateY.value;\n\n /**\n * If the scale has been reduced below one, i.e. zoomed out, translate\n * the zoom back to one\n */\n offsetScale.value = scale.value < 1 ? 1 : scale.value;\n scale.value = scale.value < 1 ? withTiming(1) : scale.value;\n resetTouchValues();\n }\n },\n onStart: (evt) => {\n /**\n * Android starts with a zero event with 1 touch instead of two\n * we therefore must wait to capture starting info until the double\n * touch begins\n */\n if (!isAndroid) {\n /**\n * Cancel any previous motion animation on translations when a touch\n * begins to interrupt the animation and take over the position handling\n */\n cancelAnimation(translateX);\n cancelAnimation(translateY);\n cancelAnimation(scale);\n\n /**\n * Set pinch to true to stop all pan gesture interactions\n */\n isPinch.value = true;\n\n /**\n * Reset isSwiping as now the pan gesture handler is no longer running\n */\n isSwiping.value = IsSwiping.UNDETERMINED;\n\n /**\n * Set initial values for pinch gesture interaction handler\n */\n numberOfPinchFingers.value = evt.numberOfPointers;\n offsetX.value = translateX.value;\n offsetY.value = translateY.value;\n adjustedFocalX.value = evt.focalX - (halfScreenWidth - offsetX.value);\n adjustedFocalY.value = evt.focalY - (halfScreenHeight + offsetY.value);\n originX.value = adjustedFocalX.value;\n originY.value = adjustedFocalY.value;\n offsetScale.value = scale.value;\n }\n\n /**\n * Reset hasPinched for Android single finger offset\n */\n hasPinched.value = HasPinched.FALSE;\n },\n },\n [currentImageHeight],\n );\n\n /**\n * Single tap handler for header hiding and showing\n */\n const onSingleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: () => {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = headerFooterVisible.value > 0 ? withTiming(0) : withTiming(1);\n },\n });\n\n /**\n * Double tap handler to zoom back out and hide header and footer\n */\n const onDoubleTap = useAnimatedGestureHandler<TapGestureHandlerGestureEvent>({\n onActive: (evt) => {\n if (Math.abs(tapX.value - evt.absoluteX) < 64 && Math.abs(tapY.value - evt.absoluteY) < 64) {\n if (offsetScale.value === 1 && offsetX.value === 0 && offsetY.value === 0) {\n offsetScale.value = 2;\n scale.value = withTiming(2, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateX.value = withTiming(evt.absoluteX - halfScreenWidth, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (currentImageHeight * 2 > screenHeight) {\n const translateYTopBottom =\n evt.absoluteY > halfScreenHeight\n ? -(currentImageHeight * 2 - screenHeight) / 2\n : (currentImageHeight * 2 - screenHeight) / 2;\n translateY.value = withTiming(translateYTopBottom, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n }\n } else {\n offsetScale.value = 1;\n scale.value = withTiming(1, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n offsetX.value = 0;\n offsetY.value = 0;\n translateX.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n translateY.value = withTiming(0, {\n duration: 200,\n easing: Easing.out(Easing.ease),\n });\n if (headerFooterVisible.value !== 0) {\n cancelAnimation(headerFooterVisible);\n headerFooterVisible.value = withTiming(0);\n }\n }\n }\n },\n onStart: (evt) => {\n tapX.value = evt.absoluteX;\n tapY.value = evt.absoluteY;\n },\n });\n\n return {\n onDoubleTap,\n onPan,\n onPinch,\n onSingleTap,\n };\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n"]}
@@ -195,15 +195,21 @@ var MessageWithContext = function MessageWithContext(props) {
195
195
 
196
196
  var alignment = forceAlignMessages && (forceAlignMessages === 'left' || forceAlignMessages === 'right') ? forceAlignMessages : isMyMessage ? 'right' : 'left';
197
197
  var attachments = !isMessageTypeDeleted && Array.isArray(message.attachments) ? message.attachments.reduce(function (acc, cur) {
198
- if (cur.type === 'file' || cur.type === 'video') {
198
+ if (cur.type === 'file') {
199
199
  acc.files.push(cur);
200
200
  acc.other = [];
201
+ } else if (cur.type === 'video' && !cur.og_scrape_url) {
202
+ acc.videos.push({
203
+ image_url: cur.asset_url,
204
+ type: 'video'
205
+ });
206
+ acc.other = [];
201
207
  } else if (cur.type === 'image' && !cur.title_link && !cur.og_scrape_url) {
202
208
  if (cur.image_url || cur.thumb_url) {
203
209
  acc.images.push(cur);
204
210
  acc.other = [];
205
211
  }
206
- } else if (!acc.files.length && !acc.images.length) {
212
+ } else if (!acc.files.length && !acc.images.length && !acc.videos.length) {
207
213
  acc.other.push(cur);
208
214
  }
209
215
 
@@ -211,11 +217,13 @@ var MessageWithContext = function MessageWithContext(props) {
211
217
  }, {
212
218
  files: [],
213
219
  images: [],
214
- other: []
220
+ other: [],
221
+ videos: []
215
222
  }) : {
216
223
  files: [],
217
224
  images: [],
218
- other: []
225
+ other: [],
226
+ videos: []
219
227
  };
220
228
  var hasAttachmentActions = !isMessageTypeDeleted && Array.isArray(message.attachments) && message.attachments.some(function (attachment) {
221
229
  return attachment.actions && attachment.actions.length;
@@ -233,7 +241,7 @@ var MessageWithContext = function MessageWithContext(props) {
233
241
  return !!attachments.files.length;
234
242
 
235
243
  case 'gallery':
236
- return !!attachments.images.length;
244
+ return !!attachments.images.length || !!attachments.videos.length;
237
245
 
238
246
  case 'text':
239
247
  default:
@@ -405,7 +413,8 @@ var MessageWithContext = function MessageWithContext(props) {
405
413
  OverlayReactionList: OverlayReactionList,
406
414
  ownCapabilities: ownCapabilities,
407
415
  supportedReactions: supportedReactions,
408
- threadList: threadList
416
+ threadList: threadList,
417
+ videos: attachments.videos
409
418
  });
410
419
  setOverlay('message');
411
420
 
@@ -524,7 +533,8 @@ var MessageWithContext = function MessageWithContext(props) {
524
533
  showAvatar: showAvatar,
525
534
  showMessageOverlay: showMessageOverlay,
526
535
  showMessageStatus: typeof showMessageStatus === 'boolean' ? showMessageStatus : isMyMessage,
527
- threadList: threadList
536
+ threadList: threadList,
537
+ videos: attachments.videos
528
538
  });
529
539
  if (!(isMessageTypeDeleted || messageContentOrder.length)) return null;
530
540
  return _react["default"].createElement(_reactNative.View, {
@@ -535,7 +545,7 @@ var MessageWithContext = function MessageWithContext(props) {
535
545
  __self: _this,
536
546
  __source: {
537
547
  fileName: _jsxFileName,
538
- lineNumber: 659,
548
+ lineNumber: 666,
539
549
  columnNumber: 5
540
550
  }
541
551
  }, _react["default"].createElement(_reactNative.View, {
@@ -545,7 +555,7 @@ var MessageWithContext = function MessageWithContext(props) {
545
555
  __self: _this,
546
556
  __source: {
547
557
  fileName: _jsxFileName,
548
- lineNumber: 663,
558
+ lineNumber: 670,
549
559
  columnNumber: 7
550
560
  }
551
561
  }, _react["default"].createElement(_reactNative.View, {
@@ -555,7 +565,7 @@ var MessageWithContext = function MessageWithContext(props) {
555
565
  __self: _this,
556
566
  __source: {
557
567
  fileName: _jsxFileName,
558
- lineNumber: 671,
568
+ lineNumber: 678,
559
569
  columnNumber: 9
560
570
  }
561
571
  }, _react["default"].createElement(_MessageContext.MessageProvider, {
@@ -563,14 +573,14 @@ var MessageWithContext = function MessageWithContext(props) {
563
573
  __self: _this,
564
574
  __source: {
565
575
  fileName: _jsxFileName,
566
- lineNumber: 678,
576
+ lineNumber: 685,
567
577
  columnNumber: 11
568
578
  }
569
579
  }, _react["default"].createElement(MessageSimple, {
570
580
  __self: _this,
571
581
  __source: {
572
582
  fileName: _jsxFileName,
573
- lineNumber: 679,
583
+ lineNumber: 686,
574
584
  columnNumber: 13
575
585
  }
576
586
  })))));
@@ -695,7 +705,7 @@ var Message = function Message(props) {
695
705
  __self: _this,
696
706
  __source: {
697
707
  fileName: _jsxFileName,
698
- lineNumber: 839,
708
+ lineNumber: 846,
699
709
  columnNumber: 5
700
710
  }
701
711
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Message.tsx"],"names":["MessageWithContext","props","isMessageTypeDeleted","message","type","channel","client","disabled","dismissKeyboard","dismissKeyboardOnMessageTouch","enableLongPress","enforceUniqueReaction","forceAlignMessages","goToMessage","groupStyles","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","lastReceivedId","members","messageActions","messageActionsProp","defaultMessageActions","messageContentOrderProp","messageContentOrder","messagesContext","MessageSimple","onLongPressProp","onLongPress","onLongPressMessageProp","onLongPressMessage","onPressProp","onPress","onPressMessageProp","onPressMessage","onPressInProp","onPressIn","onPressInMessageProp","onPressInMessage","onThreadSelect","openThread","OverlayReactionList","preventPress","removeMessage","retrySendMessage","selectReaction","setData","setEditingState","setOverlay","setQuotedMessageState","showAvatar","showMessageStatus","showUnreadUnderlay","style","supportedReactions","t","isTargetedMessage","threadList","updateMessage","theme","colors","bg_gradient_start","targetedMessageBackground","targetedMessageUnderlay","messageSimple","actionsEnabled","status","MessageStatusTypes","RECEIVED","isMyMessage","userID","user","id","handleAction","name","value","sendAction","data","parent_id","onPressQuotedMessage","quotedMessage","errorOrFailed","FAILED","error","Keyboard","dismiss","quoted_message","showMessageOverlay","alignment","attachments","Array","isArray","reduce","acc","cur","files","push","other","title_link","og_scrape_url","image_url","thumb_url","images","length","hasAttachmentActions","some","attachment","actions","filter","content","text","onlyEmojis","emojiRegex","test","onOpenThread","hasReactions","latest_reactions","clientId","reactions","reactionType","reactionsOfReactionType","reaction","hasOwnReaction","user_id","own","ownCapabilities","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","blockUser","copyMessage","deleteMessage","editMessage","flagMessage","muteUser","pinMessage","quotedReply","retry","threadReply","unpinMessage","messageReactions","isThreadMessage","dismissOverlay","sendReaction","undefined","Boolean","messageContext","messageReactionTitle","otherAttachments","actionHandlers","resendMessage","toggleBanUser","toggleMuteUser","toggleReaction","payload","defaultHandler","emitter","event","lastGroupMessage","onPressArgs","additionalInfo","handleOnPress","onPressInArgs","handleOnpressIn","pinned","backgroundColor","areEqual","prevProps","nextProps","prevGoToMessage","isAttachmentEqual","prevIsTargetedMessage","prevLastReceivedId","prevMembers","prevMessage","prevMutedUsers","mutedUsers","prevShowUnreadUnderlay","prevT","nextGoToMessage","nextIsTargetedMessage","nextLastReceivedId","nextMembers","nextMessage","nextMutedUsers","nextShowUnreadUnderlay","nextT","membersEqual","Object","keys","repliesEqual","reply_count","lastReceivedIdChangedAndMatters","goToMessageChangedAndMatters","quoted_message_id","isPrevMessageTypeDeleted","isNextMessageTypeDeleted","messageEqual","readBy","updated_at","isPrevQuotedMessageTypeDeleted","isNextQuotedMessageTypeDeleted","quotedMessageEqual","messageUserBannedEqual","banned","prevMessageAttachments","nextMessageAttachments","attachmentsEqual","every","index","attachmentKeysEqual","latestReactionsEqual","mutedUserSame","mutedUser","target","showUnreadUnderlayEqual","tEqual","targetedMessageEqual","MemoizedMessage","React","memo","Message"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Keyboard, StyleProp, View, ViewStyle } from 'react-native';\n\nimport type { Attachment, UserResponse } from 'stream-chat';\n\nimport { useCreateMessageContext } from './hooks/useCreateMessageContext';\nimport { useMessageActionHandlers } from './hooks/useMessageActionHandlers';\nimport { useMessageActions } from './hooks/useMessageActions';\nimport { messageActions as defaultMessageActions } from './utils/messageActions';\n\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\nimport {\n KeyboardContextValue,\n useKeyboardContext,\n} from '../../contexts/keyboardContext/KeyboardContext';\nimport {\n MessageContextValue,\n MessageProvider,\n Reactions,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessageOverlayContextValue,\n useMessageOverlayContext,\n} from '../../contexts/messageOverlayContext/MessageOverlayContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport { triggerHaptic } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { emojiRegex, MessageStatusTypes } from '../../utils/utils';\n\nimport {\n isMessageWithStylesReadByAndDateSeparator,\n MessageType,\n} from '../MessageList/hooks/useMessageList';\nimport type { MessageActionListItemProps } from '../MessageOverlay/MessageActionListItem';\n\nexport type TouchableEmitter =\n | 'card'\n | 'fileAttachment'\n | 'gallery'\n | 'giphy'\n | 'message'\n | 'messageContent'\n | 'messageReplies'\n | 'reactionList'\n | 'textLink';\n\nexport type TextMentionTouchableHandlerPayload<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n emitter: 'textMention';\n additionalInfo?: { user?: UserResponse<StreamChatGenerics> };\n};\n\nexport type TouchableHandlerPayload = {\n defaultHandler?: () => void;\n event?: GestureResponderEvent;\n} & (\n | {\n additionalInfo?: Record<string, unknown>;\n emitter?: TouchableEmitter;\n }\n | TextMentionTouchableHandlerPayload\n);\n\nexport type MessageTouchableHandlerPayload<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TouchableHandlerPayload & {\n actionHandlers?: MessageActionHandlers;\n message?: MessageType<StreamChatGenerics>;\n};\n\nexport type MessageActionHandlers = {\n deleteMessage: () => Promise<void>;\n editMessage: () => void;\n pinMessage: () => Promise<void>;\n quotedReply: () => void;\n resendMessage: () => Promise<void>;\n showMessageOverlay: () => void;\n toggleBanUser: () => Promise<void>;\n toggleMuteUser: () => Promise<void>;\n toggleReaction: (reactionType: string) => Promise<void>;\n};\n\nexport type MessagePropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n ChannelContextValue<StreamChatGenerics>,\n 'channel' | 'disabled' | 'enforceUniqueReaction' | 'members'\n> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client' | 'mutedUsers'> &\n Pick<KeyboardContextValue, 'dismissKeyboard'> &\n Partial<Omit<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'>> &\n Pick<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'> &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'dismissKeyboardOnMessageTouch'\n | 'forceAlignMessages'\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleQuotedReply'\n | 'handleReaction'\n | 'handleRetry'\n | 'handleThreadReply'\n | 'isAttachmentEqual'\n | 'messageActions'\n | 'messageContentOrder'\n | 'MessageSimple'\n | 'onLongPressMessage'\n | 'onPressInMessage'\n | 'onPressMessage'\n | 'OverlayReactionList'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'selectReaction'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'supportedReactions'\n | 'updateMessage'\n > &\n Pick<MessageOverlayContextValue<StreamChatGenerics>, 'setData'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<TranslationContextValue, 't'> & {\n messagesContext: MessagesContextValue<StreamChatGenerics>;\n /**\n * Whether or not users are able to long press messages.\n */\n enableLongPress?: boolean;\n goToMessage?: (messageId: string) => void;\n isTargetedMessage?: boolean;\n /**\n * Array of allowed actions or null on message, this can also be a function returning the array.\n * If all the actions need to be disabled an empty array should be provided as value of prop\n */\n /**\n * You can call methods available on the Message\n * component such as handleEdit, handleDelete, handleAction etc.\n *\n * Source - [Message](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/Message.tsx)\n *\n * By default, we show the overlay with all the message actions on long press.\n *\n * @param message Message object which was long pressed\n * @param event Event object for onLongPress event\n **/\n onLongPress?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n\n /**\n * You can call methods available on the Message\n * component such as handleEdit, handleDelete, handleAction etc.\n *\n * Source - [Message](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/Message.tsx)\n *\n * By default, we will dismiss the keyboard on press.\n *\n * @param message Message object which was long pressed\n * @param event Event object for onLongPress event\n * */\n onPress?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n onPressIn?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n /**\n * Handler to open the thread on message. This is callback for touch event for replies button.\n *\n * @param message A message object to open the thread upon.\n */\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n showUnreadUnderlay?: boolean;\n style?: StyleProp<ViewStyle>;\n };\n\n/**\n * Since this component doesn't consume `messages` from `MessagesContext`,\n * we memoized and broke it up to prevent new messages from re-rendering\n * each individual Message component.\n */\nconst MessageWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePropsWithContext<StreamChatGenerics>,\n) => {\n const isMessageTypeDeleted = props.message.type === 'deleted';\n\n const {\n channel,\n client,\n disabled,\n dismissKeyboard,\n dismissKeyboardOnMessageTouch,\n enableLongPress = true,\n enforceUniqueReaction,\n forceAlignMessages = false,\n goToMessage,\n groupStyles = ['bottom'],\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n lastReceivedId,\n members,\n message,\n messageActions: messageActionsProp = defaultMessageActions,\n messageContentOrder: messageContentOrderProp,\n messagesContext,\n MessageSimple,\n onLongPress: onLongPressProp,\n onLongPressMessage: onLongPressMessageProp,\n onPress: onPressProp,\n onPressMessage: onPressMessageProp,\n onPressIn: onPressInProp,\n onPressInMessage: onPressInMessageProp,\n onThreadSelect,\n openThread,\n OverlayReactionList,\n preventPress,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setData,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n showAvatar,\n showMessageStatus,\n showUnreadUnderlay,\n style,\n supportedReactions,\n t,\n isTargetedMessage,\n threadList = false,\n updateMessage,\n } = props;\n\n const {\n theme: {\n colors: { bg_gradient_start, targetedMessageBackground },\n messageSimple: { targetedMessageUnderlay },\n },\n } = useTheme();\n\n const actionsEnabled =\n message.type === 'regular' && message.status === MessageStatusTypes.RECEIVED;\n\n const isMyMessage = client && message && client.userID === message.user?.id;\n\n const handleAction = async (name: string, value: string) => {\n if (message.id) {\n const data = await channel?.sendAction(message.id, { [name]: value });\n if (data?.message) {\n updateMessage(data.message);\n } else {\n removeMessage({\n id: message.id,\n parent_id: message.parent_id,\n });\n }\n }\n };\n\n const onPressQuotedMessage = (quotedMessage: MessageType<StreamChatGenerics>) => {\n if (!goToMessage) return;\n\n goToMessage(quotedMessage.id);\n };\n\n const errorOrFailed = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onPress = (error = errorOrFailed) => {\n if (dismissKeyboardOnMessageTouch) {\n Keyboard.dismiss();\n }\n const quotedMessage = message.quoted_message as MessageType<StreamChatGenerics>;\n if (error) {\n showMessageOverlay(false, true);\n } else if (quotedMessage) {\n onPressQuotedMessage(quotedMessage);\n }\n };\n\n const alignment =\n forceAlignMessages && (forceAlignMessages === 'left' || forceAlignMessages === 'right')\n ? forceAlignMessages\n : isMyMessage\n ? 'right'\n : 'left';\n\n /**\n * attachments contain files/images or other attachments\n *\n * if a URL attachment is present with a file/image then we\n * show just the text and markdown should make the link\n * clickable\n */\n const attachments =\n !isMessageTypeDeleted && Array.isArray(message.attachments)\n ? message.attachments.reduce(\n (acc, cur) => {\n if (cur.type === 'file' || cur.type === 'video') {\n acc.files.push(cur);\n acc.other = []; // remove other attachments if a file exists\n } else if (cur.type === 'image' && !cur.title_link && !cur.og_scrape_url) {\n /**\n * this next if is not combined with the above one for cases where we have\n * an image with no url links at all falling back to being an attachment\n */\n if (cur.image_url || cur.thumb_url) {\n acc.images.push(cur);\n acc.other = []; // remove other attachments if an image exists\n }\n // only add other attachments if there are no files/images\n } else if (!acc.files.length && !acc.images.length) {\n acc.other.push(cur);\n }\n\n return acc;\n },\n {\n files: [] as Attachment<StreamChatGenerics>[],\n images: [] as Attachment<StreamChatGenerics>[],\n other: [] as Attachment<StreamChatGenerics>[],\n },\n )\n : {\n files: [] as Attachment<StreamChatGenerics>[],\n images: [] as Attachment<StreamChatGenerics>[],\n other: [] as Attachment<StreamChatGenerics>[],\n };\n\n /**\n * Check if any actions to prevent long press\n */\n const hasAttachmentActions =\n !isMessageTypeDeleted &&\n Array.isArray(message.attachments) &&\n message.attachments.some((attachment) => attachment.actions && attachment.actions.length);\n\n const messageContentOrder = messageContentOrderProp.filter((content) => {\n if (content === 'quoted_reply') {\n return !!message.quoted_message;\n }\n\n switch (content) {\n case 'attachments':\n return !!attachments.other.length;\n case 'files':\n return !!attachments.files.length;\n case 'gallery':\n return !!attachments.images.length;\n case 'text':\n default:\n return !!message.text;\n }\n });\n\n const onlyEmojis =\n !attachments.files.length &&\n !attachments.images.length &&\n !attachments.other.length &&\n !!message.text &&\n emojiRegex.test(message.text);\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const hasReactions =\n !isMessageTypeDeleted && !!message.latest_reactions && message.latest_reactions.length > 0;\n\n const clientId = client.userID;\n\n const reactions = hasReactions\n ? supportedReactions.reduce((acc, cur) => {\n const reactionType = cur.type;\n const reactionsOfReactionType = message.latest_reactions?.filter(\n (reaction) => reaction.type === reactionType,\n );\n\n if (reactionsOfReactionType?.length) {\n const hasOwnReaction = reactionsOfReactionType.some(\n (reaction) => reaction.user_id === clientId,\n );\n acc.push({ own: hasOwnReaction, type: reactionType });\n }\n\n return acc;\n }, [] as Reactions)\n : [];\n\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n } = useMessageActions({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n });\n\n const showMessageOverlay = async (messageReactions = false, error = errorOrFailed) => {\n await dismissKeyboard();\n\n const isThreadMessage = threadList || !!message.parent_id;\n\n const dismissOverlay = () => setOverlay('none');\n\n const messageActions =\n typeof messageActionsProp !== 'function'\n ? messageActionsProp\n : messageActionsProp({\n blockUser,\n copyMessage,\n deleteMessage,\n dismissOverlay,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n muteUser,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n });\n\n setData({\n alignment,\n clientId: client.userID,\n files: attachments.files,\n groupStyles,\n handleReaction: ownCapabilities.sendReaction ? handleReaction : undefined,\n images: attachments.images,\n message,\n messageActions: messageActions?.filter(Boolean) as MessageActionListItemProps[] | undefined,\n messageContext: { ...messageContext, disabled: true, preventPress: true },\n messageReactionTitle: !error && messageReactions ? t('Message Reactions') : undefined,\n messagesContext: { ...messagesContext, messageContentOrder },\n onlyEmojis,\n otherAttachments: attachments.other,\n OverlayReactionList,\n ownCapabilities,\n supportedReactions,\n threadList,\n });\n\n setOverlay('message');\n };\n\n const actionHandlers: MessageActionHandlers = {\n deleteMessage: handleDeleteMessage,\n editMessage: handleEditMessage,\n pinMessage: handleTogglePinMessage,\n quotedReply: handleQuotedReplyMessage,\n resendMessage: handleResendMessage,\n showMessageOverlay,\n toggleBanUser: handleToggleBanUser,\n toggleMuteUser: handleToggleMuteUser,\n toggleReaction: handleToggleReaction,\n };\n\n const onLongPressMessage =\n disabled || hasAttachmentActions\n ? () => null\n : onLongPressMessageProp\n ? (payload?: TouchableHandlerPayload) =>\n onLongPressMessageProp({\n actionHandlers,\n defaultHandler: payload?.defaultHandler || showMessageOverlay,\n emitter: payload?.emitter || 'message',\n event: payload?.event,\n message,\n })\n : onLongPressProp\n ? (payload?: TouchableHandlerPayload) =>\n onLongPressProp({\n actionHandlers,\n defaultHandler: payload?.defaultHandler || showMessageOverlay,\n emitter: payload?.emitter || 'message',\n event: payload?.event,\n })\n : enableLongPress\n ? () => {\n triggerHaptic('impactMedium');\n showMessageOverlay(false);\n }\n : () => null;\n\n const messageContext = useCreateMessageContext({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files: attachments.files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images: attachments.images,\n isMyMessage,\n lastGroupMessage: groupStyles?.[0] === 'single' || groupStyles?.[0] === 'bottom',\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress: onLongPressMessage,\n onlyEmojis,\n onOpenThread,\n onPress: (payload) => {\n const onPressArgs = {\n actionHandlers,\n additionalInfo: payload.additionalInfo,\n defaultHandler: payload.defaultHandler || onPress,\n emitter: payload.emitter || 'message',\n event: payload.event,\n message,\n };\n\n const handleOnPress = () => {\n if (onPressProp) return onPressProp(onPressArgs);\n if (onPressMessageProp) return onPressMessageProp(onPressArgs);\n if (payload.defaultHandler) return payload.defaultHandler();\n\n return onPress();\n };\n\n handleOnPress();\n },\n onPressIn:\n onPressInProp || onPressInMessageProp\n ? (payload) => {\n const onPressInArgs = {\n actionHandlers,\n defaultHandler: payload.defaultHandler,\n emitter: payload.emitter || 'message',\n event: payload.event,\n message,\n };\n const handleOnpressIn = () => {\n if (onPressInProp) return onPressInProp(onPressInArgs);\n if (onPressInMessageProp) return onPressInMessageProp(onPressInArgs);\n };\n handleOnpressIn();\n }\n : null,\n otherAttachments: attachments.other,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus: typeof showMessageStatus === 'boolean' ? showMessageStatus : isMyMessage,\n threadList,\n });\n\n if (!(isMessageTypeDeleted || messageContentOrder.length)) return null;\n\n return (\n <View\n style={[message.pinned && { backgroundColor: targetedMessageBackground }]}\n testID='message-wrapper'\n >\n <View\n style={[\n style,\n {\n backgroundColor: showUnreadUnderlay ? bg_gradient_start : undefined,\n },\n ]}\n >\n <View\n style={[\n isTargetedMessage\n ? { backgroundColor: targetedMessageBackground, ...targetedMessageUnderlay }\n : {},\n ]}\n >\n <MessageProvider value={messageContext}>\n <MessageSimple />\n </MessageProvider>\n </View>\n </View>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessagePropsWithContext<StreamChatGenerics>,\n nextProps: MessagePropsWithContext<StreamChatGenerics>,\n) => {\n const {\n goToMessage: prevGoToMessage,\n isAttachmentEqual,\n isTargetedMessage: prevIsTargetedMessage,\n lastReceivedId: prevLastReceivedId,\n members: prevMembers,\n message: prevMessage,\n mutedUsers: prevMutedUsers,\n showUnreadUnderlay: prevShowUnreadUnderlay,\n t: prevT,\n } = prevProps;\n const {\n goToMessage: nextGoToMessage,\n isTargetedMessage: nextIsTargetedMessage,\n lastReceivedId: nextLastReceivedId,\n members: nextMembers,\n message: nextMessage,\n mutedUsers: nextMutedUsers,\n showUnreadUnderlay: nextShowUnreadUnderlay,\n t: nextT,\n } = nextProps;\n\n const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length;\n if (!membersEqual) return false;\n\n const repliesEqual = prevMessage.reply_count === nextMessage.reply_count;\n if (!repliesEqual) return false;\n\n const lastReceivedIdChangedAndMatters =\n prevLastReceivedId !== nextLastReceivedId &&\n (prevLastReceivedId === prevMessage.id ||\n prevLastReceivedId === nextMessage.id ||\n nextLastReceivedId === prevMessage.id ||\n nextLastReceivedId === nextMessage.id);\n\n if (lastReceivedIdChangedAndMatters) return false;\n\n const goToMessageChangedAndMatters =\n nextMessage.quoted_message_id && prevGoToMessage !== nextGoToMessage;\n\n if (goToMessageChangedAndMatters) return false;\n\n const isPrevMessageTypeDeleted = prevMessage.type === 'deleted';\n const isNextMessageTypeDeleted = nextMessage.type === 'deleted';\n\n const messageEqual =\n isPrevMessageTypeDeleted === isNextMessageTypeDeleted &&\n (isMessageWithStylesReadByAndDateSeparator(prevMessage) && prevMessage.readBy) ===\n (isMessageWithStylesReadByAndDateSeparator(nextMessage) && nextMessage.readBy) &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned &&\n prevMessage.updated_at === nextMessage.updated_at;\n\n if (!messageEqual) return false;\n\n const isPrevQuotedMessageTypeDeleted = prevMessage.quoted_message?.type === 'deleted';\n const isNextQuotedMessageTypeDeleted = nextMessage.quoted_message?.type === 'deleted';\n\n const quotedMessageEqual =\n prevMessage.quoted_message?.id === nextMessage.quoted_message?.id &&\n isPrevQuotedMessageTypeDeleted === isNextQuotedMessageTypeDeleted;\n\n if (!quotedMessageEqual) return false;\n\n const messageUserBannedEqual = prevMessage.user?.banned === nextMessage.user?.banned;\n if (!messageUserBannedEqual) return false;\n\n const prevMessageAttachments = prevMessage.attachments;\n const nextMessageAttachments = nextMessage.attachments;\n const attachmentsEqual =\n (Array.isArray(prevMessageAttachments) &&\n Array.isArray(nextMessageAttachments) &&\n prevMessageAttachments.length === nextMessageAttachments.length &&\n prevMessageAttachments.every((attachment, index) => {\n const attachmentKeysEqual =\n attachment.type === 'image'\n ? attachment.image_url === nextMessageAttachments[index].image_url &&\n attachment.thumb_url === nextMessageAttachments[index].thumb_url\n : attachment.type === nextMessageAttachments[index].type;\n\n if (isAttachmentEqual)\n return (\n attachmentKeysEqual && !!isAttachmentEqual(attachment, nextMessageAttachments[index])\n );\n\n return attachmentKeysEqual;\n })) ||\n prevMessageAttachments === nextMessageAttachments;\n if (!attachmentsEqual) return false;\n\n const latestReactionsEqual =\n Array.isArray(prevMessage.latest_reactions) && Array.isArray(nextMessage.latest_reactions)\n ? prevMessage.latest_reactions.length === nextMessage.latest_reactions.length &&\n prevMessage.latest_reactions.every(\n ({ type }, index) => type === nextMessage.latest_reactions?.[index].type,\n )\n : prevMessage.latest_reactions === nextMessage.latest_reactions;\n if (!latestReactionsEqual) return false;\n\n const mutedUserSame =\n prevMutedUsers.length === nextMutedUsers.length ||\n prevMutedUsers.some((mutedUser) => mutedUser.target.id === prevMessage.user?.id) ===\n nextMutedUsers.some((mutedUser) => mutedUser.target.id === nextMessage.user?.id);\n if (!mutedUserSame) return false;\n\n const showUnreadUnderlayEqual = prevShowUnreadUnderlay === nextShowUnreadUnderlay;\n if (!showUnreadUnderlayEqual) return false;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const targetedMessageEqual = prevIsTargetedMessage === nextIsTargetedMessage;\n if (!targetedMessageEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessage = React.memo(MessageWithContext, areEqual) as typeof MessageWithContext;\n\nexport type MessageProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<MessagePropsWithContext<StreamChatGenerics>, 'groupStyles' | 'message'>> &\n Pick<MessagePropsWithContext<StreamChatGenerics>, 'groupStyles' | 'message'>;\n\n/**\n * Message - A high level component which implements all the logic required for a message.\n * The actual rendering of the message is delegated via the \"Message\" property\n *\n * @example ./Message.md\n */\nexport const Message = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageProps<StreamChatGenerics>,\n) => {\n const { channel, disabled, enforceUniqueReaction, members } =\n useChannelContext<StreamChatGenerics>();\n const { client, mutedUsers } = useChatContext<StreamChatGenerics>();\n const { dismissKeyboard } = useKeyboardContext();\n const { setData } = useMessageOverlayContext<StreamChatGenerics>();\n const messagesContext = useMessagesContext<StreamChatGenerics>();\n const { setOverlay } = useOverlayContext();\n const { openThread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n\n return (\n <MemoizedMessage<StreamChatGenerics>\n {...messagesContext}\n {...{\n channel,\n client,\n disabled,\n dismissKeyboard,\n enforceUniqueReaction,\n members,\n messagesContext,\n mutedUsers,\n openThread,\n setData,\n setOverlay,\n t,\n }}\n {...props}\n />\n );\n};\n"]}
1
+ {"version":3,"sources":["Message.tsx"],"names":["MessageWithContext","props","isMessageTypeDeleted","message","type","channel","client","disabled","dismissKeyboard","dismissKeyboardOnMessageTouch","enableLongPress","enforceUniqueReaction","forceAlignMessages","goToMessage","groupStyles","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","lastReceivedId","members","messageActions","messageActionsProp","defaultMessageActions","messageContentOrderProp","messageContentOrder","messagesContext","MessageSimple","onLongPressProp","onLongPress","onLongPressMessageProp","onLongPressMessage","onPressProp","onPress","onPressMessageProp","onPressMessage","onPressInProp","onPressIn","onPressInMessageProp","onPressInMessage","onThreadSelect","openThread","OverlayReactionList","preventPress","removeMessage","retrySendMessage","selectReaction","setData","setEditingState","setOverlay","setQuotedMessageState","showAvatar","showMessageStatus","showUnreadUnderlay","style","supportedReactions","t","isTargetedMessage","threadList","updateMessage","theme","colors","bg_gradient_start","targetedMessageBackground","targetedMessageUnderlay","messageSimple","actionsEnabled","status","MessageStatusTypes","RECEIVED","isMyMessage","userID","user","id","handleAction","name","value","sendAction","data","parent_id","onPressQuotedMessage","quotedMessage","errorOrFailed","FAILED","error","Keyboard","dismiss","quoted_message","showMessageOverlay","alignment","attachments","Array","isArray","reduce","acc","cur","files","push","other","og_scrape_url","videos","image_url","asset_url","title_link","thumb_url","images","length","hasAttachmentActions","some","attachment","actions","filter","content","text","onlyEmojis","emojiRegex","test","onOpenThread","hasReactions","latest_reactions","clientId","reactions","reactionType","reactionsOfReactionType","reaction","hasOwnReaction","user_id","own","ownCapabilities","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","blockUser","copyMessage","deleteMessage","editMessage","flagMessage","muteUser","pinMessage","quotedReply","retry","threadReply","unpinMessage","messageReactions","isThreadMessage","dismissOverlay","sendReaction","undefined","Boolean","messageContext","messageReactionTitle","otherAttachments","actionHandlers","resendMessage","toggleBanUser","toggleMuteUser","toggleReaction","payload","defaultHandler","emitter","event","lastGroupMessage","onPressArgs","additionalInfo","handleOnPress","onPressInArgs","handleOnpressIn","pinned","backgroundColor","areEqual","prevProps","nextProps","prevGoToMessage","isAttachmentEqual","prevIsTargetedMessage","prevLastReceivedId","prevMembers","prevMessage","prevMutedUsers","mutedUsers","prevShowUnreadUnderlay","prevT","nextGoToMessage","nextIsTargetedMessage","nextLastReceivedId","nextMembers","nextMessage","nextMutedUsers","nextShowUnreadUnderlay","nextT","membersEqual","Object","keys","repliesEqual","reply_count","lastReceivedIdChangedAndMatters","goToMessageChangedAndMatters","quoted_message_id","isPrevMessageTypeDeleted","isNextMessageTypeDeleted","messageEqual","readBy","updated_at","isPrevQuotedMessageTypeDeleted","isNextQuotedMessageTypeDeleted","quotedMessageEqual","messageUserBannedEqual","banned","prevMessageAttachments","nextMessageAttachments","attachmentsEqual","every","index","attachmentKeysEqual","latestReactionsEqual","mutedUserSame","mutedUser","target","showUnreadUnderlayEqual","tEqual","targetedMessageEqual","MemoizedMessage","React","memo","Message"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Keyboard, StyleProp, View, ViewStyle } from 'react-native';\n\nimport type { Attachment, UserResponse } from 'stream-chat';\n\nimport { useCreateMessageContext } from './hooks/useCreateMessageContext';\nimport { useMessageActionHandlers } from './hooks/useMessageActionHandlers';\nimport { useMessageActions } from './hooks/useMessageActions';\nimport { messageActions as defaultMessageActions } from './utils/messageActions';\n\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\nimport {\n KeyboardContextValue,\n useKeyboardContext,\n} from '../../contexts/keyboardContext/KeyboardContext';\nimport {\n MessageContextValue,\n MessageProvider,\n Reactions,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessageOverlayContextValue,\n useMessageOverlayContext,\n} from '../../contexts/messageOverlayContext/MessageOverlayContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport { triggerHaptic } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { emojiRegex, MessageStatusTypes } from '../../utils/utils';\n\nimport {\n isMessageWithStylesReadByAndDateSeparator,\n MessageType,\n} from '../MessageList/hooks/useMessageList';\nimport type { MessageActionListItemProps } from '../MessageOverlay/MessageActionListItem';\n\nexport type TouchableEmitter =\n | 'card'\n | 'fileAttachment'\n | 'gallery'\n | 'giphy'\n | 'message'\n | 'messageContent'\n | 'messageReplies'\n | 'reactionList'\n | 'textLink';\n\nexport type TextMentionTouchableHandlerPayload<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n emitter: 'textMention';\n additionalInfo?: { user?: UserResponse<StreamChatGenerics> };\n};\n\nexport type TouchableHandlerPayload = {\n defaultHandler?: () => void;\n event?: GestureResponderEvent;\n} & (\n | {\n additionalInfo?: Record<string, unknown>;\n emitter?: TouchableEmitter;\n }\n | TextMentionTouchableHandlerPayload\n);\n\nexport type MessageTouchableHandlerPayload<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = TouchableHandlerPayload & {\n actionHandlers?: MessageActionHandlers;\n message?: MessageType<StreamChatGenerics>;\n};\n\nexport type MessageActionHandlers = {\n deleteMessage: () => Promise<void>;\n editMessage: () => void;\n pinMessage: () => Promise<void>;\n quotedReply: () => void;\n resendMessage: () => Promise<void>;\n showMessageOverlay: () => void;\n toggleBanUser: () => Promise<void>;\n toggleMuteUser: () => Promise<void>;\n toggleReaction: (reactionType: string) => Promise<void>;\n};\n\nexport type MessagePropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<\n ChannelContextValue<StreamChatGenerics>,\n 'channel' | 'disabled' | 'enforceUniqueReaction' | 'members'\n> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client' | 'mutedUsers'> &\n Pick<KeyboardContextValue, 'dismissKeyboard'> &\n Partial<Omit<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'>> &\n Pick<MessageContextValue<StreamChatGenerics>, 'groupStyles' | 'message'> &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'dismissKeyboardOnMessageTouch'\n | 'forceAlignMessages'\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleQuotedReply'\n | 'handleReaction'\n | 'handleRetry'\n | 'handleThreadReply'\n | 'isAttachmentEqual'\n | 'messageActions'\n | 'messageContentOrder'\n | 'MessageSimple'\n | 'onLongPressMessage'\n | 'onPressInMessage'\n | 'onPressMessage'\n | 'OverlayReactionList'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'selectReaction'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'supportedReactions'\n | 'updateMessage'\n > &\n Pick<MessageOverlayContextValue<StreamChatGenerics>, 'setData'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<TranslationContextValue, 't'> & {\n messagesContext: MessagesContextValue<StreamChatGenerics>;\n /**\n * Whether or not users are able to long press messages.\n */\n enableLongPress?: boolean;\n goToMessage?: (messageId: string) => void;\n isTargetedMessage?: boolean;\n /**\n * Array of allowed actions or null on message, this can also be a function returning the array.\n * If all the actions need to be disabled an empty array should be provided as value of prop\n */\n /**\n * You can call methods available on the Message\n * component such as handleEdit, handleDelete, handleAction etc.\n *\n * Source - [Message](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/Message.tsx)\n *\n * By default, we show the overlay with all the message actions on long press.\n *\n * @param message Message object which was long pressed\n * @param event Event object for onLongPress event\n **/\n onLongPress?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n\n /**\n * You can call methods available on the Message\n * component such as handleEdit, handleDelete, handleAction etc.\n *\n * Source - [Message](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Message/Message.tsx)\n *\n * By default, we will dismiss the keyboard on press.\n *\n * @param message Message object which was long pressed\n * @param event Event object for onLongPress event\n * */\n onPress?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n onPressIn?: (payload: Partial<MessageTouchableHandlerPayload<StreamChatGenerics>>) => void;\n /**\n * Handler to open the thread on message. This is callback for touch event for replies button.\n *\n * @param message A message object to open the thread upon.\n */\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n showUnreadUnderlay?: boolean;\n style?: StyleProp<ViewStyle>;\n };\n\n/**\n * Since this component doesn't consume `messages` from `MessagesContext`,\n * we memoized and broke it up to prevent new messages from re-rendering\n * each individual Message component.\n */\nconst MessageWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessagePropsWithContext<StreamChatGenerics>,\n) => {\n const isMessageTypeDeleted = props.message.type === 'deleted';\n\n const {\n channel,\n client,\n disabled,\n dismissKeyboard,\n dismissKeyboardOnMessageTouch,\n enableLongPress = true,\n enforceUniqueReaction,\n forceAlignMessages = false,\n goToMessage,\n groupStyles = ['bottom'],\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n lastReceivedId,\n members,\n message,\n messageActions: messageActionsProp = defaultMessageActions,\n messageContentOrder: messageContentOrderProp,\n messagesContext,\n MessageSimple,\n onLongPress: onLongPressProp,\n onLongPressMessage: onLongPressMessageProp,\n onPress: onPressProp,\n onPressMessage: onPressMessageProp,\n onPressIn: onPressInProp,\n onPressInMessage: onPressInMessageProp,\n onThreadSelect,\n openThread,\n OverlayReactionList,\n preventPress,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setData,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n showAvatar,\n showMessageStatus,\n showUnreadUnderlay,\n style,\n supportedReactions,\n t,\n isTargetedMessage,\n threadList = false,\n updateMessage,\n } = props;\n\n const {\n theme: {\n colors: { bg_gradient_start, targetedMessageBackground },\n messageSimple: { targetedMessageUnderlay },\n },\n } = useTheme();\n\n const actionsEnabled =\n message.type === 'regular' && message.status === MessageStatusTypes.RECEIVED;\n\n const isMyMessage = client && message && client.userID === message.user?.id;\n\n const handleAction = async (name: string, value: string) => {\n if (message.id) {\n const data = await channel?.sendAction(message.id, { [name]: value });\n if (data?.message) {\n updateMessage(data.message);\n } else {\n removeMessage({\n id: message.id,\n parent_id: message.parent_id,\n });\n }\n }\n };\n\n const onPressQuotedMessage = (quotedMessage: MessageType<StreamChatGenerics>) => {\n if (!goToMessage) return;\n\n goToMessage(quotedMessage.id);\n };\n\n const errorOrFailed = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onPress = (error = errorOrFailed) => {\n if (dismissKeyboardOnMessageTouch) {\n Keyboard.dismiss();\n }\n const quotedMessage = message.quoted_message as MessageType<StreamChatGenerics>;\n if (error) {\n showMessageOverlay(false, true);\n } else if (quotedMessage) {\n onPressQuotedMessage(quotedMessage);\n }\n };\n\n const alignment =\n forceAlignMessages && (forceAlignMessages === 'left' || forceAlignMessages === 'right')\n ? forceAlignMessages\n : isMyMessage\n ? 'right'\n : 'left';\n\n /**\n * attachments contain files/images or other attachments\n *\n * if a URL attachment is present with a file/image then we\n * show just the text and markdown should make the link\n * clickable\n */\n const attachments =\n !isMessageTypeDeleted && Array.isArray(message.attachments)\n ? message.attachments.reduce(\n (acc, cur) => {\n if (cur.type === 'file') {\n acc.files.push(cur);\n acc.other = []; // remove other attachments if a file exists\n } else if (cur.type === 'video' && !cur.og_scrape_url) {\n acc.videos.push({ image_url: cur.asset_url, type: 'video' });\n acc.other = [];\n } else if (cur.type === 'image' && !cur.title_link && !cur.og_scrape_url) {\n /**\n * this next if is not combined with the above one for cases where we have\n * an image with no url links at all falling back to being an attachment\n */\n if (cur.image_url || cur.thumb_url) {\n acc.images.push(cur);\n acc.other = []; // remove other attachments if an image exists\n }\n // only add other attachments if there are no files/images\n } else if (!acc.files.length && !acc.images.length && !acc.videos.length) {\n acc.other.push(cur);\n }\n\n return acc;\n },\n {\n files: [] as Attachment<StreamChatGenerics>[],\n images: [] as Attachment<StreamChatGenerics>[],\n other: [] as Attachment<StreamChatGenerics>[],\n videos: [] as Attachment<StreamChatGenerics>[],\n },\n )\n : {\n files: [] as Attachment<StreamChatGenerics>[],\n images: [] as Attachment<StreamChatGenerics>[],\n other: [] as Attachment<StreamChatGenerics>[],\n videos: [] as Attachment<StreamChatGenerics>[],\n };\n\n /**\n * Check if any actions to prevent long press\n */\n const hasAttachmentActions =\n !isMessageTypeDeleted &&\n Array.isArray(message.attachments) &&\n message.attachments.some((attachment) => attachment.actions && attachment.actions.length);\n\n const messageContentOrder = messageContentOrderProp.filter((content) => {\n if (content === 'quoted_reply') {\n return !!message.quoted_message;\n }\n\n switch (content) {\n case 'attachments':\n return !!attachments.other.length;\n case 'files':\n return !!attachments.files.length;\n case 'gallery':\n return !!attachments.images.length || !!attachments.videos.length;\n case 'text':\n default:\n return !!message.text;\n }\n });\n\n const onlyEmojis =\n !attachments.files.length &&\n !attachments.images.length &&\n !attachments.other.length &&\n !!message.text &&\n emojiRegex.test(message.text);\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const hasReactions =\n !isMessageTypeDeleted && !!message.latest_reactions && message.latest_reactions.length > 0;\n\n const clientId = client.userID;\n\n const reactions = hasReactions\n ? supportedReactions.reduce((acc, cur) => {\n const reactionType = cur.type;\n const reactionsOfReactionType = message.latest_reactions?.filter(\n (reaction) => reaction.type === reactionType,\n );\n\n if (reactionsOfReactionType?.length) {\n const hasOwnReaction = reactionsOfReactionType.some(\n (reaction) => reaction.user_id === clientId,\n );\n acc.push({ own: hasOwnReaction, type: reactionType });\n }\n\n return acc;\n }, [] as Reactions)\n : [];\n\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n } = useMessageActions({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n });\n\n const showMessageOverlay = async (messageReactions = false, error = errorOrFailed) => {\n await dismissKeyboard();\n\n const isThreadMessage = threadList || !!message.parent_id;\n\n const dismissOverlay = () => setOverlay('none');\n\n const messageActions =\n typeof messageActionsProp !== 'function'\n ? messageActionsProp\n : messageActionsProp({\n blockUser,\n copyMessage,\n deleteMessage,\n dismissOverlay,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n muteUser,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n });\n\n setData({\n alignment,\n clientId: client.userID,\n files: attachments.files,\n groupStyles,\n handleReaction: ownCapabilities.sendReaction ? handleReaction : undefined,\n images: attachments.images,\n message,\n messageActions: messageActions?.filter(Boolean) as MessageActionListItemProps[] | undefined,\n messageContext: { ...messageContext, disabled: true, preventPress: true },\n messageReactionTitle: !error && messageReactions ? t('Message Reactions') : undefined,\n messagesContext: { ...messagesContext, messageContentOrder },\n onlyEmojis,\n otherAttachments: attachments.other,\n OverlayReactionList,\n ownCapabilities,\n supportedReactions,\n threadList,\n videos: attachments.videos,\n });\n\n setOverlay('message');\n };\n\n const actionHandlers: MessageActionHandlers = {\n deleteMessage: handleDeleteMessage,\n editMessage: handleEditMessage,\n pinMessage: handleTogglePinMessage,\n quotedReply: handleQuotedReplyMessage,\n resendMessage: handleResendMessage,\n showMessageOverlay,\n toggleBanUser: handleToggleBanUser,\n toggleMuteUser: handleToggleMuteUser,\n toggleReaction: handleToggleReaction,\n };\n\n const onLongPressMessage =\n disabled || hasAttachmentActions\n ? () => null\n : onLongPressMessageProp\n ? (payload?: TouchableHandlerPayload) =>\n onLongPressMessageProp({\n actionHandlers,\n defaultHandler: payload?.defaultHandler || showMessageOverlay,\n emitter: payload?.emitter || 'message',\n event: payload?.event,\n message,\n })\n : onLongPressProp\n ? (payload?: TouchableHandlerPayload) =>\n onLongPressProp({\n actionHandlers,\n defaultHandler: payload?.defaultHandler || showMessageOverlay,\n emitter: payload?.emitter || 'message',\n event: payload?.event,\n })\n : enableLongPress\n ? () => {\n triggerHaptic('impactMedium');\n showMessageOverlay(false);\n }\n : () => null;\n\n const messageContext = useCreateMessageContext({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files: attachments.files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images: attachments.images,\n isMyMessage,\n lastGroupMessage: groupStyles?.[0] === 'single' || groupStyles?.[0] === 'bottom',\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress: onLongPressMessage,\n onlyEmojis,\n onOpenThread,\n onPress: (payload) => {\n const onPressArgs = {\n actionHandlers,\n additionalInfo: payload.additionalInfo,\n defaultHandler: payload.defaultHandler || onPress,\n emitter: payload.emitter || 'message',\n event: payload.event,\n message,\n };\n\n const handleOnPress = () => {\n if (onPressProp) return onPressProp(onPressArgs);\n if (onPressMessageProp) return onPressMessageProp(onPressArgs);\n if (payload.defaultHandler) return payload.defaultHandler();\n\n return onPress();\n };\n\n handleOnPress();\n },\n onPressIn:\n onPressInProp || onPressInMessageProp\n ? (payload) => {\n const onPressInArgs = {\n actionHandlers,\n defaultHandler: payload.defaultHandler,\n emitter: payload.emitter || 'message',\n event: payload.event,\n message,\n };\n const handleOnpressIn = () => {\n if (onPressInProp) return onPressInProp(onPressInArgs);\n if (onPressInMessageProp) return onPressInMessageProp(onPressInArgs);\n };\n handleOnpressIn();\n }\n : null,\n otherAttachments: attachments.other,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus: typeof showMessageStatus === 'boolean' ? showMessageStatus : isMyMessage,\n threadList,\n videos: attachments.videos,\n });\n\n if (!(isMessageTypeDeleted || messageContentOrder.length)) return null;\n\n return (\n <View\n style={[message.pinned && { backgroundColor: targetedMessageBackground }]}\n testID='message-wrapper'\n >\n <View\n style={[\n style,\n {\n backgroundColor: showUnreadUnderlay ? bg_gradient_start : undefined,\n },\n ]}\n >\n <View\n style={[\n isTargetedMessage\n ? { backgroundColor: targetedMessageBackground, ...targetedMessageUnderlay }\n : {},\n ]}\n >\n <MessageProvider value={messageContext}>\n <MessageSimple />\n </MessageProvider>\n </View>\n </View>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessagePropsWithContext<StreamChatGenerics>,\n nextProps: MessagePropsWithContext<StreamChatGenerics>,\n) => {\n const {\n goToMessage: prevGoToMessage,\n isAttachmentEqual,\n isTargetedMessage: prevIsTargetedMessage,\n lastReceivedId: prevLastReceivedId,\n members: prevMembers,\n message: prevMessage,\n mutedUsers: prevMutedUsers,\n showUnreadUnderlay: prevShowUnreadUnderlay,\n t: prevT,\n } = prevProps;\n const {\n goToMessage: nextGoToMessage,\n isTargetedMessage: nextIsTargetedMessage,\n lastReceivedId: nextLastReceivedId,\n members: nextMembers,\n message: nextMessage,\n mutedUsers: nextMutedUsers,\n showUnreadUnderlay: nextShowUnreadUnderlay,\n t: nextT,\n } = nextProps;\n\n const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length;\n if (!membersEqual) return false;\n\n const repliesEqual = prevMessage.reply_count === nextMessage.reply_count;\n if (!repliesEqual) return false;\n\n const lastReceivedIdChangedAndMatters =\n prevLastReceivedId !== nextLastReceivedId &&\n (prevLastReceivedId === prevMessage.id ||\n prevLastReceivedId === nextMessage.id ||\n nextLastReceivedId === prevMessage.id ||\n nextLastReceivedId === nextMessage.id);\n\n if (lastReceivedIdChangedAndMatters) return false;\n\n const goToMessageChangedAndMatters =\n nextMessage.quoted_message_id && prevGoToMessage !== nextGoToMessage;\n\n if (goToMessageChangedAndMatters) return false;\n\n const isPrevMessageTypeDeleted = prevMessage.type === 'deleted';\n const isNextMessageTypeDeleted = nextMessage.type === 'deleted';\n\n const messageEqual =\n isPrevMessageTypeDeleted === isNextMessageTypeDeleted &&\n (isMessageWithStylesReadByAndDateSeparator(prevMessage) && prevMessage.readBy) ===\n (isMessageWithStylesReadByAndDateSeparator(nextMessage) && nextMessage.readBy) &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned &&\n prevMessage.updated_at === nextMessage.updated_at;\n\n if (!messageEqual) return false;\n\n const isPrevQuotedMessageTypeDeleted = prevMessage.quoted_message?.type === 'deleted';\n const isNextQuotedMessageTypeDeleted = nextMessage.quoted_message?.type === 'deleted';\n\n const quotedMessageEqual =\n prevMessage.quoted_message?.id === nextMessage.quoted_message?.id &&\n isPrevQuotedMessageTypeDeleted === isNextQuotedMessageTypeDeleted;\n\n if (!quotedMessageEqual) return false;\n\n const messageUserBannedEqual = prevMessage.user?.banned === nextMessage.user?.banned;\n if (!messageUserBannedEqual) return false;\n\n const prevMessageAttachments = prevMessage.attachments;\n const nextMessageAttachments = nextMessage.attachments;\n const attachmentsEqual =\n (Array.isArray(prevMessageAttachments) &&\n Array.isArray(nextMessageAttachments) &&\n prevMessageAttachments.length === nextMessageAttachments.length &&\n prevMessageAttachments.every((attachment, index) => {\n const attachmentKeysEqual =\n attachment.type === 'image'\n ? attachment.image_url === nextMessageAttachments[index].image_url &&\n attachment.thumb_url === nextMessageAttachments[index].thumb_url\n : attachment.type === nextMessageAttachments[index].type;\n\n if (isAttachmentEqual)\n return (\n attachmentKeysEqual && !!isAttachmentEqual(attachment, nextMessageAttachments[index])\n );\n\n return attachmentKeysEqual;\n })) ||\n prevMessageAttachments === nextMessageAttachments;\n if (!attachmentsEqual) return false;\n\n const latestReactionsEqual =\n Array.isArray(prevMessage.latest_reactions) && Array.isArray(nextMessage.latest_reactions)\n ? prevMessage.latest_reactions.length === nextMessage.latest_reactions.length &&\n prevMessage.latest_reactions.every(\n ({ type }, index) => type === nextMessage.latest_reactions?.[index].type,\n )\n : prevMessage.latest_reactions === nextMessage.latest_reactions;\n if (!latestReactionsEqual) return false;\n\n const mutedUserSame =\n prevMutedUsers.length === nextMutedUsers.length ||\n prevMutedUsers.some((mutedUser) => mutedUser.target.id === prevMessage.user?.id) ===\n nextMutedUsers.some((mutedUser) => mutedUser.target.id === nextMessage.user?.id);\n if (!mutedUserSame) return false;\n\n const showUnreadUnderlayEqual = prevShowUnreadUnderlay === nextShowUnreadUnderlay;\n if (!showUnreadUnderlayEqual) return false;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const targetedMessageEqual = prevIsTargetedMessage === nextIsTargetedMessage;\n if (!targetedMessageEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessage = React.memo(MessageWithContext, areEqual) as typeof MessageWithContext;\n\nexport type MessageProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<MessagePropsWithContext<StreamChatGenerics>, 'groupStyles' | 'message'>> &\n Pick<MessagePropsWithContext<StreamChatGenerics>, 'groupStyles' | 'message'>;\n\n/**\n * Message - A high level component which implements all the logic required for a message.\n * The actual rendering of the message is delegated via the \"Message\" property\n *\n * @example ./Message.md\n */\nexport const Message = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageProps<StreamChatGenerics>,\n) => {\n const { channel, disabled, enforceUniqueReaction, members } =\n useChannelContext<StreamChatGenerics>();\n const { client, mutedUsers } = useChatContext<StreamChatGenerics>();\n const { dismissKeyboard } = useKeyboardContext();\n const { setData } = useMessageOverlayContext<StreamChatGenerics>();\n const messagesContext = useMessagesContext<StreamChatGenerics>();\n const { setOverlay } = useOverlayContext();\n const { openThread } = useThreadContext<StreamChatGenerics>();\n const { t } = useTranslationContext();\n\n return (\n <MemoizedMessage<StreamChatGenerics>\n {...messagesContext}\n {...{\n channel,\n client,\n disabled,\n dismissKeyboard,\n enforceUniqueReaction,\n members,\n messagesContext,\n mutedUsers,\n openThread,\n setData,\n setOverlay,\n t,\n }}\n {...props}\n />\n );\n};\n"]}
@@ -44,7 +44,8 @@ var useCreateMessageContext = function useCreateMessageContext(_ref) {
44
44
  showAvatar = _ref.showAvatar,
45
45
  showMessageOverlay = _ref.showMessageOverlay,
46
46
  showMessageStatus = _ref.showMessageStatus,
47
- threadList = _ref.threadList;
47
+ threadList = _ref.threadList,
48
+ videos = _ref.videos;
48
49
  var groupStylesLength = groupStyles.length;
49
50
  var reactionsValue = reactions.map(function (_ref2) {
50
51
  var own = _ref2.own,
@@ -95,7 +96,8 @@ var useCreateMessageContext = function useCreateMessageContext(_ref) {
95
96
  showAvatar: showAvatar,
96
97
  showMessageOverlay: showMessageOverlay,
97
98
  showMessageStatus: showMessageStatus,
98
- threadList: threadList
99
+ threadList: threadList,
100
+ videos: videos
99
101
  };
100
102
  }, [actionsEnabled, quotedMessageDeletedValue, alignment, disabled, goToMessage, groupStylesLength, hasReactions, lastGroupMessage, lastReceivedId, membersValue, messageValue, reactionsValue, showAvatar, showMessageStatus, threadList]);
101
103
  return messageContext;
@@ -1 +1 @@
1
- {"version":3,"sources":["useCreateMessageContext.ts"],"names":["useCreateMessageContext","actionsEnabled","alignment","channel","disabled","files","goToMessage","groupStyles","handleAction","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleToggleReaction","hasReactions","images","isMyMessage","lastGroupMessage","lastReceivedId","members","message","messageContentOrder","onLongPress","onlyEmojis","onOpenThread","onPress","onPressIn","otherAttachments","preventPress","reactions","showAvatar","showMessageOverlay","showMessageStatus","threadList","groupStylesLength","length","reactionsValue","map","own","type","join","latestReactions","latest_reactions","undefined","readBy","messageValue","updated_at","deleted_at","status","text","reply_count","membersValue","JSON","stringify","quotedMessageDeletedValue","quoted_message","messageContext"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { isMessageWithStylesReadByAndDateSeparator } from '../../MessageList/hooks/useMessageList';\n\nexport const useCreateMessageContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images,\n isMyMessage,\n lastGroupMessage,\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress,\n onlyEmojis,\n onOpenThread,\n onPress,\n onPressIn,\n otherAttachments,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus,\n threadList,\n}: MessageContextValue<StreamChatGenerics>) => {\n const groupStylesLength = groupStyles.length;\n const reactionsValue = reactions.map(({ own, type }) => `${own}${type}`).join();\n const latestReactions = message.latest_reactions ? message.latest_reactions : undefined;\n const readBy = isMessageWithStylesReadByAndDateSeparator(message) && message.readBy;\n const messageValue = `${latestReactions ? latestReactions.map(({ type }) => type).join() : ''}${\n message.updated_at\n }${message.deleted_at}${readBy}${message.status}${message.type}${message.text}${\n message.reply_count\n }`;\n const membersValue = JSON.stringify(members);\n\n const quotedMessageDeletedValue = message.quoted_message?.deleted_at;\n\n const messageContext: MessageContextValue<StreamChatGenerics> = useMemo(\n () => ({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images,\n isMyMessage,\n lastGroupMessage,\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress,\n onlyEmojis,\n onOpenThread,\n onPress,\n onPressIn,\n otherAttachments,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus,\n threadList,\n }),\n [\n actionsEnabled,\n quotedMessageDeletedValue,\n alignment,\n disabled,\n goToMessage,\n groupStylesLength,\n hasReactions,\n lastGroupMessage,\n lastReceivedId,\n membersValue,\n messageValue,\n reactionsValue,\n showAvatar,\n showMessageStatus,\n threadList,\n ],\n );\n\n return messageContext;\n};\n"]}
1
+ {"version":3,"sources":["useCreateMessageContext.ts"],"names":["useCreateMessageContext","actionsEnabled","alignment","channel","disabled","files","goToMessage","groupStyles","handleAction","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleToggleReaction","hasReactions","images","isMyMessage","lastGroupMessage","lastReceivedId","members","message","messageContentOrder","onLongPress","onlyEmojis","onOpenThread","onPress","onPressIn","otherAttachments","preventPress","reactions","showAvatar","showMessageOverlay","showMessageStatus","threadList","videos","groupStylesLength","length","reactionsValue","map","own","type","join","latestReactions","latest_reactions","undefined","readBy","messageValue","updated_at","deleted_at","status","text","reply_count","membersValue","JSON","stringify","quotedMessageDeletedValue","quoted_message","messageContext"],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\n\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { isMessageWithStylesReadByAndDateSeparator } from '../../MessageList/hooks/useMessageList';\n\nexport const useCreateMessageContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images,\n isMyMessage,\n lastGroupMessage,\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress,\n onlyEmojis,\n onOpenThread,\n onPress,\n onPressIn,\n otherAttachments,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus,\n threadList,\n videos,\n}: MessageContextValue<StreamChatGenerics>) => {\n const groupStylesLength = groupStyles.length;\n const reactionsValue = reactions.map(({ own, type }) => `${own}${type}`).join();\n const latestReactions = message.latest_reactions ? message.latest_reactions : undefined;\n const readBy = isMessageWithStylesReadByAndDateSeparator(message) && message.readBy;\n const messageValue = `${latestReactions ? latestReactions.map(({ type }) => type).join() : ''}${\n message.updated_at\n }${message.deleted_at}${readBy}${message.status}${message.type}${message.text}${\n message.reply_count\n }`;\n const membersValue = JSON.stringify(members);\n\n const quotedMessageDeletedValue = message.quoted_message?.deleted_at;\n\n const messageContext: MessageContextValue<StreamChatGenerics> = useMemo(\n () => ({\n actionsEnabled,\n alignment,\n channel,\n disabled,\n files,\n goToMessage,\n groupStyles,\n handleAction,\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleToggleReaction,\n hasReactions,\n images,\n isMyMessage,\n lastGroupMessage,\n lastReceivedId,\n members,\n message,\n messageContentOrder,\n onLongPress,\n onlyEmojis,\n onOpenThread,\n onPress,\n onPressIn,\n otherAttachments,\n preventPress,\n reactions,\n showAvatar,\n showMessageOverlay,\n showMessageStatus,\n threadList,\n videos,\n }),\n [\n actionsEnabled,\n quotedMessageDeletedValue,\n alignment,\n disabled,\n goToMessage,\n groupStylesLength,\n hasReactions,\n lastGroupMessage,\n lastReceivedId,\n membersValue,\n messageValue,\n reactionsValue,\n showAvatar,\n showMessageStatus,\n threadList,\n ],\n );\n\n return messageContext;\n};\n"]}