stream-chat-react-native-core 4.9.0-beta.3 → 4.10.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 (150) hide show
  1. package/lib/commonjs/components/Attachment/Gallery.js +246 -190
  2. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/VideoThumbnail.js +11 -5
  4. package/lib/commonjs/components/Attachment/VideoThumbnail.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  6. package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  7. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js +7 -3
  8. package/lib/commonjs/components/ChannelPreview/ChannelPreview.js.map +1 -1
  9. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  10. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  11. package/lib/commonjs/components/Chat/Chat.js +9 -5
  12. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  13. package/lib/commonjs/components/ImageGallery/ImageGallery.js +25 -22
  14. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  15. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +15 -15
  16. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  17. package/lib/commonjs/components/Message/Message.js +13 -8
  18. package/lib/commonjs/components/Message/Message.js.map +1 -1
  19. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +7 -4
  20. package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  21. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +34 -35
  22. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  23. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  24. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  25. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +15 -13
  26. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  27. package/lib/commonjs/contexts/translationContext/TranslationContext.js +8 -4
  28. package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
  29. package/lib/commonjs/hooks/useStreami18n.js.map +1 -1
  30. package/lib/commonjs/hooks/useTranslatedMessage.js +34 -0
  31. package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -0
  32. package/lib/commonjs/mock-builders/api/getOrCreateChannel.js.map +1 -1
  33. package/lib/commonjs/mock-builders/generator/attachment.js +3 -2
  34. package/lib/commonjs/mock-builders/generator/attachment.js.map +1 -1
  35. package/lib/commonjs/mock-builders/generator/channel.js +8 -4
  36. package/lib/commonjs/mock-builders/generator/channel.js.map +1 -1
  37. package/lib/commonjs/utils/getUrlOfImageAttachment.js +1 -1
  38. package/lib/commonjs/utils/getUrlOfImageAttachment.js.map +1 -1
  39. package/lib/commonjs/version.json +1 -1
  40. package/lib/module/components/Attachment/Gallery.js +246 -190
  41. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  42. package/lib/module/components/Attachment/VideoThumbnail.js +11 -5
  43. package/lib/module/components/Attachment/VideoThumbnail.js.map +1 -1
  44. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +1 -0
  45. package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
  46. package/lib/module/components/ChannelPreview/ChannelPreview.js +7 -3
  47. package/lib/module/components/ChannelPreview/ChannelPreview.js.map +1 -1
  48. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +2 -1
  49. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  50. package/lib/module/components/Chat/Chat.js +9 -5
  51. package/lib/module/components/Chat/Chat.js.map +1 -1
  52. package/lib/module/components/ImageGallery/ImageGallery.js +25 -22
  53. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  54. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +15 -15
  55. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  56. package/lib/module/components/Message/Message.js +13 -8
  57. package/lib/module/components/Message/Message.js.map +1 -1
  58. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +7 -4
  59. package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
  60. package/lib/module/contexts/messageInputContext/MessageInputContext.js +34 -35
  61. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  62. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +2 -2
  63. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  64. package/lib/module/contexts/overlayContext/OverlayProvider.js +15 -13
  65. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  66. package/lib/module/contexts/translationContext/TranslationContext.js +8 -4
  67. package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
  68. package/lib/module/hooks/useStreami18n.js.map +1 -1
  69. package/lib/module/hooks/useTranslatedMessage.js +34 -0
  70. package/lib/module/hooks/useTranslatedMessage.js.map +1 -0
  71. package/lib/module/mock-builders/api/getOrCreateChannel.js.map +1 -1
  72. package/lib/module/mock-builders/generator/attachment.js +3 -2
  73. package/lib/module/mock-builders/generator/attachment.js.map +1 -1
  74. package/lib/module/mock-builders/generator/channel.js +8 -4
  75. package/lib/module/mock-builders/generator/channel.js.map +1 -1
  76. package/lib/module/utils/getUrlOfImageAttachment.js +1 -1
  77. package/lib/module/utils/getUrlOfImageAttachment.js.map +1 -1
  78. package/lib/module/version.json +1 -1
  79. package/lib/typescript/components/Attachment/VideoThumbnail.d.ts +3 -1
  80. package/lib/typescript/components/Attachment/utils/buildGallery/types.d.ts +1 -0
  81. package/lib/typescript/components/ChannelPreview/__tests__/ChannelPreview.test.d.ts +1 -0
  82. package/lib/typescript/components/Message/MessageSimple/__tests__/MessageTextContainer.test.d.ts +1 -0
  83. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +1 -0
  84. package/lib/typescript/contexts/messageInputContext/__tests__/MessageInputContext.test.d.ts +1 -0
  85. package/lib/typescript/contexts/messageInputContext/__tests__/isValidMessage.test.d.ts +1 -0
  86. package/lib/typescript/contexts/messageInputContext/__tests__/pickFile.test.d.ts +1 -0
  87. package/lib/typescript/contexts/messageInputContext/__tests__/removeFile.test.d.ts +1 -0
  88. package/lib/typescript/contexts/messageInputContext/__tests__/removeImage.test.d.ts +1 -0
  89. package/lib/typescript/contexts/messageInputContext/__tests__/sendMessage.test.d.ts +1 -0
  90. package/lib/typescript/contexts/messageInputContext/__tests__/sendMessageAsync.test.d.ts +1 -0
  91. package/lib/typescript/contexts/messageInputContext/__tests__/updateMessage.test.d.ts +1 -0
  92. package/lib/typescript/contexts/messageInputContext/__tests__/uploadFile.test.d.ts +1 -0
  93. package/lib/typescript/contexts/messageInputContext/__tests__/uploadImage.test.d.ts +1 -0
  94. package/lib/typescript/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.d.ts +1 -0
  95. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +2 -1
  96. package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +7 -2
  97. package/lib/typescript/hooks/__tests__/useTranslatedMessage.test.d.ts +1 -0
  98. package/lib/typescript/hooks/useStreami18n.d.ts +2 -2
  99. package/lib/typescript/hooks/useTranslatedMessage.d.ts +3 -0
  100. package/lib/typescript/mock-builders/api/getOrCreateChannel.d.ts +13 -1
  101. package/lib/typescript/mock-builders/event/messageNew.d.ts +2 -0
  102. package/lib/typescript/mock-builders/event/messageRead.d.ts +8 -0
  103. package/lib/typescript/mock-builders/generator/attachment.d.ts +10 -0
  104. package/lib/typescript/mock-builders/generator/channel.d.ts +27 -23
  105. package/lib/typescript/mock-builders/generator/message.d.ts +38 -0
  106. package/lib/typescript/mock-builders/generator/user.d.ts +9 -9
  107. package/package.json +7 -6
  108. package/src/components/Attachment/Gallery.tsx +231 -140
  109. package/src/components/Attachment/VideoThumbnail.tsx +12 -5
  110. package/src/components/Attachment/__tests__/Attachment.test.js +12 -0
  111. package/src/components/Attachment/__tests__/Gallery.test.js +23 -1
  112. package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +1 -0
  113. package/src/components/Attachment/utils/buildGallery/types.ts +1 -0
  114. package/src/components/ChannelPreview/ChannelPreview.tsx +7 -1
  115. package/src/components/ChannelPreview/__tests__/{ChannelPreview.test.js → ChannelPreview.test.tsx} +79 -41
  116. package/src/components/ChannelPreview/hooks/__tests__/useLatestMessagePreview.test.tsx +56 -21
  117. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +4 -1
  118. package/src/components/Chat/Chat.tsx +6 -3
  119. package/src/components/ImageGallery/ImageGallery.tsx +10 -6
  120. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +2 -1
  121. package/src/components/Message/Message.tsx +8 -1
  122. package/src/components/Message/MessageSimple/MessageTextContainer.tsx +7 -1
  123. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +108 -0
  124. package/src/components/Message/MessageSimple/__tests__/__snapshots__/{MessageTextContainer.test.js.snap → MessageTextContainer.test.tsx.snap} +0 -0
  125. package/src/contexts/messageInputContext/MessageInputContext.tsx +10 -4
  126. package/src/contexts/messageInputContext/__tests__/MessageInputContext.test.tsx +208 -0
  127. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessage.test.tsx.snap +113 -0
  128. package/src/contexts/messageInputContext/__tests__/__snapshots__/sendMessageAsync.test.tsx.snap +33 -0
  129. package/src/contexts/messageInputContext/__tests__/isValidMessage.test.tsx +71 -0
  130. package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +67 -0
  131. package/src/contexts/messageInputContext/__tests__/removeFile.test.tsx +82 -0
  132. package/src/contexts/messageInputContext/__tests__/removeImage.test.tsx +80 -0
  133. package/src/contexts/messageInputContext/__tests__/sendMessage.test.tsx +286 -0
  134. package/src/contexts/messageInputContext/__tests__/sendMessageAsync.test.tsx +124 -0
  135. package/src/contexts/messageInputContext/__tests__/updateMessage.test.tsx +92 -0
  136. package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +76 -0
  137. package/src/contexts/messageInputContext/__tests__/uploadImage.test.tsx +55 -0
  138. package/src/contexts/messageInputContext/__tests__/useMessageDetailsForState.test.tsx +62 -0
  139. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +2 -1
  140. package/src/contexts/overlayContext/OverlayProvider.tsx +4 -3
  141. package/src/contexts/translationContext/TranslationContext.tsx +10 -1
  142. package/src/hooks/__tests__/useTranslatedMessage.test.tsx +106 -0
  143. package/src/hooks/useStreami18n.ts +2 -2
  144. package/src/hooks/useTranslatedMessage.ts +30 -0
  145. package/src/mock-builders/api/{getOrCreateChannel.js → getOrCreateChannel.ts} +8 -1
  146. package/src/mock-builders/generator/attachment.js +4 -2
  147. package/src/mock-builders/generator/{channel.js → channel.ts} +19 -10
  148. package/src/utils/getUrlOfImageAttachment.ts +1 -1
  149. package/src/version.json +1 -1
  150. package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.js +0 -65
@@ -1 +1 @@
1
- {"version":3,"sources":["Gallery.tsx"],"names":["MemoizedGalleryImage","React","memo","GalleryImage","prevProps","nextProps","uri","styles","StyleSheet","create","errorTextSize","fontSize","galleryContainer","borderTopLeftRadius","borderTopRightRadius","flexDirection","flexWrap","overflow","imageContainer","alignItems","display","justifyContent","padding","imageContainerStyle","flex","imageLoadingIndicatorStyle","position","moreImagesContainer","margin","moreImagesText","color","fontWeight","GalleryWithContext","props","additionalTouchableProps","alignment","groupStyles","hasThreadReplies","ImageLoadingFailedIndicator","ImageLoadingIndicator","images","legacyImageViewerSwipeBehaviour","message","onLongPress","onPress","onPressIn","preventPress","setImage","setImages","setOverlay","threadList","videos","VideoThumbnail","isLoadingImage","isLoadingImageError","setLoadingImage","setLoadingImageError","theme","overlay","colors","messageSimple","gallery","galleryItemColumn","gridHeight","gridWidth","image","maxHeight","maxWidth","minHeight","minWidth","sizeConfig","imagesAndVideos","length","height","invertedDirections","thumbnailGrid","width","messageText","text","messageId","id","numOfColumns","map","rows","colIndex","numOfRows","rowIndex","resizeMode","type","url","openImageViewer","defaultOnPress","borderRadius","event","emitter","defaultHandler","error","console","warn","absoluteFillObject","backgroundColor","areEqual","prevGroupStyles","prevHasThreadReplies","prevImages","prevMessage","prevVideos","nextGroupStyles","nextHasThreadReplies","nextImages","nextMessage","nextVideos","messageEqual","groupStylesEqual","hasThreadRepliesEqual","imagesEqual","every","index","image_url","thumb_url","videosEqual","MemoizedGallery","Gallery","propAdditionalTouchableProps","propAlignment","propGroupStyles","PropImageLoadingFailedIndicator","PropImageLoadingIndicator","propImages","propOnLongPress","propOnPress","propOnPressIn","propPreventPress","propSetImage","propSetOverlay","propThreadList","propVideos","PropVideoThumbnail","contextSetImage","contextAlignment","contextGroupStyles","contextImages","contextOnLongPress","contextOnPress","contextOnPressIn","contextPreventPress","contextThreadList","contextVideos","contextAdditionalTouchableProps","ContextImageLoadingFailedIndicator","ContextImageLoadingIndicator","ContextVideoThumnbnail","contextSetOverlay","channelId","cid","reply_count","displayName"],"mappings":";;;;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;AACA;;AAEA;;AAEA;;AAGA;;AAIA;;AAIA;;AAIA;;AAIA;;AACA;;AAEA;;;;;;;;;AAEA,IAAMA,oBAAoB,GAAGC,kBAAMC,IAAN,CAC3BC,0BAD2B,EAE3B,UAACC,SAAD,EAAYC,SAAZ;AAAA,SACE,gCAAoBD,SAAS,CAACE,GAA9B,MAAuC,gCAAoBD,SAAS,CAACC,GAA9B,CADzC;AAAA,CAF2B,CAA7B;;AAMA,IAAMC,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,aAAa,EAAE;AAAEC,IAAAA,QAAQ,EAAE;AAAZ,GADgB;AAE/BC,EAAAA,gBAAgB,EAAE;AAChBC,IAAAA,mBAAmB,EAAE,EADL;AAEhBC,IAAAA,oBAAoB,EAAE,EAFN;AAGhBC,IAAAA,aAAa,EAAE,KAHC;AAIhBC,IAAAA,QAAQ,EAAE,MAJM;AAKhBC,IAAAA,QAAQ,EAAE;AALM,GAFa;AAS/BC,EAAAA,cAAc,EAAE;AACdC,IAAAA,UAAU,EAAE,QADE;AAEdC,IAAAA,OAAO,EAAE,MAFK;AAGdL,IAAAA,aAAa,EAAE,KAHD;AAIdM,IAAAA,cAAc,EAAE,QAJF;AAKdC,IAAAA,OAAO,EAAE;AALK,GATe;AAgB/BC,EAAAA,mBAAmB,EAAE;AAAEJ,IAAAA,UAAU,EAAE,QAAd;AAAwBK,IAAAA,IAAI,EAAE,CAA9B;AAAiCH,IAAAA,cAAc,EAAE;AAAjD,GAhBU;AAiB/BI,EAAAA,0BAA0B,EAAE;AAC1BN,IAAAA,UAAU,EAAE,QADc;AAE1BE,IAAAA,cAAc,EAAE,QAFU;AAG1BK,IAAAA,QAAQ,EAAE;AAHgB,GAjBG;AAsB/BC,EAAAA,mBAAmB,EAAE;AACnBR,IAAAA,UAAU,EAAE,QADO;AAEnBE,IAAAA,cAAc,EAAE,QAFG;AAGnBO,IAAAA,MAAM,EAAE;AAHW,GAtBU;AA2B/BC,EAAAA,cAAc,EAAE;AAAEC,IAAAA,KAAK,EAAE,SAAT;AAAoBnB,IAAAA,QAAQ,EAAE,EAA9B;AAAkCoB,IAAAA,UAAU,EAAE;AAA9C;AA3Be,CAAlB,CAAf;;AAuEA,IAAMC,kBAAkB,GAAG,SAArBA,kBAAqB,CAGzBC,KAHyB,EAItB;AACH,MACEC,wBADF,GAoBID,KApBJ,CACEC,wBADF;AAAA,MAEEC,SAFF,GAoBIF,KApBJ,CAEEE,SAFF;AAAA,MAGEC,WAHF,GAoBIH,KApBJ,CAGEG,WAHF;AAAA,MAIEC,gBAJF,GAoBIJ,KApBJ,CAIEI,gBAJF;AAAA,MAKEC,2BALF,GAoBIL,KApBJ,CAKEK,2BALF;AAAA,MAMEC,qBANF,GAoBIN,KApBJ,CAMEM,qBANF;AAAA,MAOEC,MAPF,GAoBIP,KApBJ,CAOEO,MAPF;AAAA,MAQEC,+BARF,GAoBIR,KApBJ,CAQEQ,+BARF;AAAA,MASEC,OATF,GAoBIT,KApBJ,CASES,OATF;AAAA,MAUEC,YAVF,GAoBIV,KApBJ,CAUEU,WAVF;AAAA,MAWEC,QAXF,GAoBIX,KApBJ,CAWEW,OAXF;AAAA,MAYEC,UAZF,GAoBIZ,KApBJ,CAYEY,SAZF;AAAA,MAaEC,YAbF,GAoBIb,KApBJ,CAaEa,YAbF;AAAA,MAcEC,QAdF,GAoBId,KApBJ,CAcEc,QAdF;AAAA,MAeEC,SAfF,GAoBIf,KApBJ,CAeEe,SAfF;AAAA,MAgBEC,UAhBF,GAoBIhB,KApBJ,CAgBEgB,UAhBF;AAAA,MAiBEC,UAjBF,GAoBIjB,KApBJ,CAiBEiB,UAjBF;AAAA,MAkBEC,MAlBF,GAoBIlB,KApBJ,CAkBEkB,MAlBF;AAAA,MAmBEC,cAnBF,GAoBInB,KApBJ,CAmBEmB,cAnBF;;AAsBA,yBACE,wCADF;AAAA,MAAQC,cAAR,oBAAQA,cAAR;AAAA,MAAwBC,mBAAxB,oBAAwBA,mBAAxB;AAAA,MAA6CC,eAA7C,oBAA6CA,eAA7C;AAAA,MAA8DC,oBAA9D,oBAA8DA,oBAA9D;;AAGA,kBAoBI,6BApBJ;AAAA,kCACEC,KADF;AAAA,MAEcC,OAFd,mBAEIC,MAFJ,CAEcD,OAFd;AAAA,8CAGIE,aAHJ,CAIMC,OAJN;AAAA,MAKQjD,gBALR,yBAKQA,gBALR;AAAA,MAMQkD,iBANR,yBAMQA,iBANR;AAAA,MAOQC,UAPR,yBAOQA,UAPR;AAAA,MAQQC,SARR,yBAQQA,SARR;AAAA,MASQC,KATR,yBASQA,KATR;AAAA,MAUQ/C,cAVR,yBAUQA,cAVR;AAAA,MAWQgD,SAXR,yBAWQA,SAXR;AAAA,MAYQC,QAZR,yBAYQA,QAZR;AAAA,MAaQC,SAbR,yBAaQA,SAbR;AAAA,MAcQC,QAdR,yBAcQA,QAdR;AAAA,MAeQ1C,mBAfR,yBAeQA,mBAfR;AAAA,MAgBQE,cAhBR,yBAgBQA,cAhBR;;AAsBA,MAAMyC,UAAU,GAAG;AACjBP,IAAAA,UAAU,EAAVA,UADiB;AAEjBC,IAAAA,SAAS,EAATA,SAFiB;AAGjBE,IAAAA,SAAS,EAATA,SAHiB;AAIjBC,IAAAA,QAAQ,EAARA,QAJiB;AAKjBC,IAAAA,SAAS,EAATA,SALiB;AAMjBC,IAAAA,QAAQ,EAARA;AANiB,GAAnB;AASA,MAAME,eAAe,iDAAQ/B,MAAM,IAAI,EAAlB,uCAA2BW,MAAM,IAAI,EAArC,EAArB;;AACA,iBAA6D,oBAC3D;AAAA,WACE,gCAAa;AACXX,MAAAA,MAAM,EAAE+B,eADG;AAEXD,MAAAA,UAAU,EAAVA;AAFW,KAAb,CADF;AAAA,GAD2D,EAM3D,CAACC,eAAe,CAACC,MAAjB,CAN2D,CAA7D;AAAA,MAAQC,MAAR,YAAQA,MAAR;AAAA,MAAgBC,kBAAhB,YAAgBA,kBAAhB;AAAA,MAAoCC,aAApC,YAAoCA,aAApC;AAAA,MAAmDC,KAAnD,YAAmDA,KAAnD;;AASA,MAAI,EAACL,eAAD,YAACA,eAAe,CAAEC,MAAlB,CAAJ,EAA8B,OAAO,IAAP;AAC9B,MAAMK,WAAW,GAAGnC,OAAH,oBAAGA,OAAO,CAAEoC,IAA7B;AACA,MAAMC,SAAS,GAAGrC,OAAH,oBAAGA,OAAO,CAAEsC,EAA3B;AACA,MAAMC,YAAY,GAAGN,aAAa,CAACH,MAAnC;AAEA,SACE,gCAAC,iBAAD;AACE,IAAA,KAAK,EAAE,CACLjE,MAAM,CAACK,gBADF,EAEL;AACE6D,MAAAA,MAAM,EAANA,MADF;AAEEG,MAAAA,KAAK,EAALA;AAFF,KAFK,EAMLhE,gBANK,EAOL;AACEG,MAAAA,aAAa,EAAE2D,kBAAkB,GAAG,QAAH,GAAc;AADjD,KAPK,CADT;AAYE,IAAA,MAAM,EAAC,mBAZT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAcGC,aAAa,CAACO,GAAd,CAAkB,UAACC,IAAD,EAAOC,QAAP,EAAoB;AACrC,QAAMC,SAAS,GAAGF,IAAI,CAACX,MAAvB;AACA,WACE,gCAAC,iBAAD;AACE,MAAA,GAAG,gBAAaE,kBAAkB,GAAG,KAAH,GAAW,QAA1C,UAAsDU,QAD3D;AAEE,MAAA,KAAK,EAAE,CACL;AACErE,QAAAA,aAAa,EAAE2D,kBAAkB,GAAG,KAAH,GAAW;AAD9C,OADK,EAILZ,iBAJK,CAFT;AAQE,MAAA,MAAM,gBAAaY,kBAAkB,GAAG,KAAH,GAAW,QAA1C,UAAsDU,QAR9D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAUGD,IAAI,CAACD,GAAL,CAAS,gBAA2CI,QAA3C,EAAwD;AAAA,UAArDb,MAAqD,QAArDA,MAAqD;AAAA,UAA7Cc,UAA6C,QAA7CA,UAA6C;AAAA,UAAjCC,IAAiC,QAAjCA,IAAiC;AAAA,UAA3BC,GAA2B,QAA3BA,GAA2B;AAAA,UAAtBb,KAAsB,QAAtBA,KAAsB;;AAChE,UAAMc,eAAe,GAAG,SAAlBA,eAAkB,GAAM;AAC5B,YAAI,CAACjD,+BAAD,IAAoCC,OAAxC,EAAiD;AAI/CM,UAAAA,SAAS,CAAC,CAACN,OAAD,CAAD,CAAT;AACAK,UAAAA,QAAQ,CAAC;AAAEgC,YAAAA,SAAS,EAAErC,OAAO,CAACsC,EAArB;AAAyBS,YAAAA,GAAG,EAAHA;AAAzB,WAAD,CAAR;AACAxC,UAAAA,UAAU,CAAC,SAAD,CAAV;AACD,SAPD,MAOO,IAAIR,+BAAJ,EAAqC;AAC1CM,UAAAA,QAAQ,CAAC;AAAEgC,YAAAA,SAAS,EAAErC,OAAF,oBAAEA,OAAO,CAAEsC,EAAtB;AAA0BS,YAAAA,GAAG,EAAHA;AAA1B,WAAD,CAAR;AACAxC,UAAAA,UAAU,CAAC,SAAD,CAAV;AACD;AACF,OAZD;;AAcA,UAAM0C,cAAc,GAAG,SAAjBA,cAAiB,GAAM;AAC3B,YAAIH,IAAI,KAAK,OAAT,IAAoB,CAAC,sCAAzB,EAAoD;AAGlD,4CAAcC,GAAd;AACD,SAJD,MAIO;AACLC,UAAAA,eAAe;AAChB;AACF,OARD;;AAUA,UAAME,YAAY,GAAG,8DAA4B;AAC/CzD,QAAAA,SAAS,EAATA,SAD+C;AAE/CiD,QAAAA,QAAQ,EAARA,QAF+C;AAG/ChD,QAAAA,WAAW,EAAXA,WAH+C;AAI/CC,QAAAA,gBAAgB,EAAhBA,gBAJ+C;AAK/CoC,QAAAA,MAAM,EAANA,MAL+C;AAM/CC,QAAAA,kBAAkB,EAAlBA,kBAN+C;AAO/CG,QAAAA,WAAW,EAAXA,WAP+C;AAQ/CI,QAAAA,YAAY,EAAZA,YAR+C;AAS/CI,QAAAA,SAAS,EAATA,SAT+C;AAU/CC,QAAAA,QAAQ,EAARA,QAV+C;AAW/ChB,QAAAA,UAAU,EAAVA,UAX+C;AAY/CpB,QAAAA,UAAU,EAAVA,UAZ+C;AAa/C0B,QAAAA,KAAK,EAALA;AAb+C,OAA5B,CAArB;AAgBA,aACE,gCAAC,6BAAD;AACE,QAAA,aAAa,EAAE,GADjB;AAEE,QAAA,QAAQ,EAAE9B,YAFZ;AAGE,QAAA,GAAG,oBAAkBiC,SAAlB,SAA+BK,QAA/B,SAA2CE,QAA3C,SAAuDf,eAAe,CAACC,MAH5E;AAIE,QAAA,WAAW,EAAE,qBAACqB,KAAD,EAAW;AACtB,cAAIlD,YAAJ,EAAiB;AACfA,YAAAA,YAAW,CAAC;AACVmD,cAAAA,OAAO,EAAE,SADC;AAEVD,cAAAA,KAAK,EAALA;AAFU,aAAD,CAAX;AAID;AACF,SAXH;AAYE,QAAA,OAAO,EAAE,iBAACA,KAAD,EAAW;AAClB,cAAIjD,QAAJ,EAAa;AACXA,YAAAA,QAAO,CAAC;AACNmD,cAAAA,cAAc,EAAEJ,cADV;AAENG,cAAAA,OAAO,EAAE,SAFH;AAGND,cAAAA,KAAK,EAALA;AAHM,aAAD,CAAP;AAKD;AACF,SApBH;AAqBE,QAAA,SAAS,EAAE,mBAACA,KAAD,EAAW;AACpB,cAAIhD,UAAJ,EAAe;AACbA,YAAAA,UAAS,CAAC;AACRkD,cAAAA,cAAc,EAAEJ,cADR;AAERG,cAAAA,OAAO,EAAE,SAFD;AAGRD,cAAAA,KAAK,EAALA;AAHQ,aAAD,CAAT;AAKD;AACF,SA7BH;AA8BE,QAAA,KAAK,EAAE,CACLtF,MAAM,CAACW,cADF,EAEL;AACEuD,UAAAA,MAAM,EAANA,MADF;AAEEG,UAAAA,KAAK,EAALA;AAFF,SAFK,EAML1D,cANK,CA9BT;AAsCE,QAAA,MAAM,gBACJwD,kBAAkB,GAAG,KAAH,GAAW,QADzB,UAEFU,QAFE,cAEeE;AAxCvB,SAyCMpD,wBAzCN;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,UA2CGsD,IAAI,KAAK,OAAT,GACC,gCAAC,cAAD;AACE,QAAA,KAAK,EAAE,CACLI,YADK,EAEL3B,KAFK,EAGL;AACEQ,UAAAA,MAAM,EAAEA,MAAM,GAAG,CADnB;AAEEG,UAAAA,KAAK,EAAEA,KAAK,GAAG;AAFjB,SAHK,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QADD,GAYC,gCAAC,iBAAD;AAAM,QAAA,KAAK,EAAErE,MAAM,CAACgB,mBAApB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SACE,gCAAC,oBAAD;AACE,QAAA,OAAO,EAAE,iBAACyE,KAAD,EAAW;AAClBC,UAAAA,OAAO,CAACC,IAAR,CAAaF,KAAb;AACAzC,UAAAA,eAAe,CAAC,KAAD,CAAf;AACAC,UAAAA,oBAAoB,CAAC,IAAD,CAApB;AACD,SALH;AAME,QAAA,SAAS,EAAE;AAAA,iBAAMD,eAAe,CAAC,KAAD,CAArB;AAAA,SANb;AAOE,QAAA,WAAW,EAAE;AAAA,iBAAMA,eAAe,CAAC,IAAD,CAArB;AAAA,SAPf;AAQE,QAAA,UAAU,EAAEgC,UARd;AASE,QAAA,KAAK,EAAE,CACLK,YADK,EAEL3B,KAFK,EAGL;AACEQ,UAAAA,MAAM,EAAEA,MAAM,GAAG,CADnB;AAEEG,UAAAA,KAAK,EAAEA,KAAK,GAAG;AAFjB,SAHK,CATT;AAiBE,QAAA,GAAG,EAAEa,GAjBP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QADF,EAoBGpC,cAAc,IACb,gCAAC,iBAAD;AAAM,QAAA,KAAK,EAAE;AAAE3B,UAAAA,QAAQ,EAAE;AAAZ,SAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SACE,gCAAC,qBAAD;AAAuB,QAAA,KAAK,EAAEnB,MAAM,CAACkB,0BAArC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QADF,CArBJ,EAyBG6B,mBAAmB,IAClB,gCAAC,iBAAD;AAAM,QAAA,KAAK,EAAE;AAAE5B,UAAAA,QAAQ,EAAE;AAAZ,SAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SACE,gCAAC,2BAAD;AAA6B,QAAA,KAAK,EAAEnB,MAAM,CAACkB,0BAA3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QADF,CA1BJ,CAvDJ,EAuFG2D,QAAQ,KAAKH,YAAY,GAAG,CAA5B,IACDK,QAAQ,KAAKD,SAAS,GAAG,CADxB,IAEDd,eAAe,CAACC,MAAhB,GAAyB,CAFxB,GAGC,gCAAC,iBAAD;AACE,QAAA,KAAK,EAAE,CACLhE,wBAAW2F,kBADN,EAEL5F,MAAM,CAACoB,mBAFF,EAGL;AAAEyE,UAAAA,eAAe,EAAE1C;AAAnB,SAHK,EAIL/B,mBAJK,CADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,SAQE,gCAAC,iBAAD;AAAM,QAAA,KAAK,EAAE,CAACpB,MAAM,CAACsB,cAAR,EAAwBA,cAAxB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBACO0C,eAAe,CAACC,MAAhB,GAAyB,CADhC,EARF,CAHD,GAeG,IAtGN,CADF;AA0GD,KAnJA,CAVH,CADF;AAiKD,GAnKA,CAdH,CADF;AAqLD,CAjQD;;AAmQA,IAAM6B,QAAQ,GAAG,SAAXA,QAAW,CACfjG,SADe,EAEfC,SAFe,EAGZ;AACH,MACeiG,eADf,GAMIlG,SANJ,CACEgC,WADF;AAAA,MAEoBmE,oBAFpB,GAMInG,SANJ,CAEEiC,gBAFF;AAAA,MAGUmE,UAHV,GAMIpG,SANJ,CAGEoC,MAHF;AAAA,MAIWiE,WAJX,GAMIrG,SANJ,CAIEsC,OAJF;AAAA,MAKUgE,UALV,GAMItG,SANJ,CAKE+C,MALF;AAOA,MACewD,eADf,GAMItG,SANJ,CACE+B,WADF;AAAA,MAEoBwE,oBAFpB,GAMIvG,SANJ,CAEEgC,gBAFF;AAAA,MAGUwE,UAHV,GAMIxG,SANJ,CAGEmC,MAHF;AAAA,MAIWsE,WAJX,GAMIzG,SANJ,CAIEqC,OAJF;AAAA,MAKUqE,UALV,GAMI1G,SANJ,CAKE8C,MALF;AAQA,MAAM6D,YAAY,GAAG,CAAAP,WAAW,QAAX,YAAAA,WAAW,CAAEzB,EAAb,OAAoB8B,WAApB,oBAAoBA,WAAW,CAAE9B,EAAjC,CAArB;AACA,MAAI,CAACgC,YAAL,EAAmB,OAAO,KAAP;AAEnB,MAAMC,gBAAgB,GACpBX,eAAe,CAAC9B,MAAhB,KAA2BmC,eAAe,CAACnC,MAA3C,IAAqD8B,eAAe,CAAC,CAAD,CAAf,KAAuBK,eAAe,CAAC,CAAD,CAD7F;AAEA,MAAI,CAACM,gBAAL,EAAuB,OAAO,KAAP;AAEvB,MAAMC,qBAAqB,GAAGX,oBAAoB,KAAKK,oBAAvD;AACA,MAAI,CAACM,qBAAL,EAA4B,OAAO,KAAP;AAE5B,MAAMC,WAAW,GACfX,UAAU,CAAChC,MAAX,KAAsBqC,UAAU,CAACrC,MAAjC,IACAgC,UAAU,CAACY,KAAX,CACE,UAACnD,KAAD,EAAQoD,KAAR;AAAA,WACE,gCAAoBpD,KAAK,CAACqD,SAA1B,MAAyC,gCAAoBT,UAAU,CAACQ,KAAD,CAAV,CAAkBC,SAAtC,CAAzC,IACA,gCAAoBrD,KAAK,CAACsD,SAA1B,MAAyC,gCAAoBV,UAAU,CAACQ,KAAD,CAAV,CAAkBE,SAAtC,CAF3C;AAAA,GADF,CAFF;AAOA,MAAI,CAACJ,WAAL,EAAkB,OAAO,KAAP;AAElB,MAAMK,WAAW,GACfd,UAAU,CAAClC,MAAX,KAAsBuC,UAAU,CAACvC,MAAjC,IACAkC,UAAU,CAACU,KAAX,CACE,UAACnD,KAAD,EAAQoD,KAAR;AAAA,WACE,gCAAoBpD,KAAK,CAACqD,SAA1B,MAAyC,gCAAoBP,UAAU,CAACM,KAAD,CAAV,CAAkBC,SAAtC,CAAzC,IACA,gCAAoBrD,KAAK,CAACsD,SAA1B,MAAyC,gCAAoBR,UAAU,CAACM,KAAD,CAAV,CAAkBE,SAAtC,CAF3C;AAAA,GADF,CAFF;AAOA,MAAI,CAACC,WAAL,EAAkB,OAAO,KAAP;AAElB,SAAO,IAAP;AACD,CAhDD;;AAkDA,IAAMC,eAAe,GAAGxH,kBAAMC,IAAN,CAAW8B,kBAAX,EAA+BqE,QAA/B,CAAxB;;AASO,IAAMqB,OAAO,GAAG,SAAVA,OAAU,CAGrBzF,KAHqB,EAIlB;AACH,MAC4B0F,4BAD5B,GAiBI1F,KAjBJ,CACEC,wBADF;AAAA,MAEa0F,aAFb,GAiBI3F,KAjBJ,CAEEE,SAFF;AAAA,MAGe0F,eAHf,GAiBI5F,KAjBJ,CAGEG,WAHF;AAAA,MAIEC,gBAJF,GAiBIJ,KAjBJ,CAIEI,gBAJF;AAAA,MAK+ByF,+BAL/B,GAiBI7F,KAjBJ,CAKEK,2BALF;AAAA,MAMyByF,yBANzB,GAiBI9F,KAjBJ,CAMEM,qBANF;AAAA,MAOUyF,UAPV,GAiBI/F,KAjBJ,CAOEO,MAPF;AAAA,MAQeyF,eARf,GAiBIhG,KAjBJ,CAQEU,WARF;AAAA,MASWuF,WATX,GAiBIjG,KAjBJ,CASEW,OATF;AAAA,MAUauF,aAVb,GAiBIlG,KAjBJ,CAUEY,SAVF;AAAA,MAWgBuF,gBAXhB,GAiBInG,KAjBJ,CAWEa,YAXF;AAAA,MAYYuF,YAZZ,GAiBIpG,KAjBJ,CAYEc,QAZF;AAAA,MAacuF,cAbd,GAiBIrG,KAjBJ,CAaEgB,UAbF;AAAA,MAccsF,cAdd,GAiBItG,KAjBJ,CAcEiB,UAdF;AAAA,MAeUsF,UAfV,GAiBIvG,KAjBJ,CAeEkB,MAfF;AAAA,MAgBkBsF,kBAhBlB,GAiBIxG,KAjBJ,CAgBEmB,cAhBF;;AAmBA,8BAAiD,kDAAjD;AAAA,MAAkBsF,eAAlB,yBAAQ3F,QAAR;AAAA,MAAmCC,SAAnC,yBAAmCA,SAAnC;;AACA,2BAWI,wCAXJ;AAAA,MACa2F,gBADb,sBACExG,SADF;AAAA,MAEeyG,kBAFf,sBAEExG,WAFF;AAAA,MAGUyG,aAHV,sBAGErG,MAHF;AAAA,MAIEE,OAJF,sBAIEA,OAJF;AAAA,MAKeoG,kBALf,sBAKEnG,WALF;AAAA,MAMWoG,cANX,sBAMEnG,OANF;AAAA,MAOaoG,gBAPb,sBAOEnG,SAPF;AAAA,MAQgBoG,mBARhB,sBAQEnG,YARF;AAAA,MAScoG,iBATd,sBASEhG,UATF;AAAA,MAUUiG,aAVV,sBAUEhG,MAVF;;AAYA,4BAMI,0CANJ;AAAA,MAC4BiG,+BAD5B,uBACElH,wBADF;AAAA,MAE+BmH,kCAF/B,uBAEE/G,2BAFF;AAAA,MAGyBgH,4BAHzB,uBAGE/G,qBAHF;AAAA,MAIEE,+BAJF,uBAIEA,+BAJF;AAAA,MAKkB8G,sBALlB,uBAKEnG,cALF;;AAOA,2BAA0C,wCAA1C;AAAA,MAAoBoG,iBAApB,sBAAQvG,UAAR;;AAEA,MAAMT,MAAM,GAAGwF,UAAU,IAAIa,aAA7B;AACA,MAAM1F,MAAM,GAAGqF,UAAU,IAAIW,aAA7B;AAEA,MAAI,CAAC3G,MAAM,CAACgC,MAAR,IAAkB,CAACrB,MAAM,CAACqB,MAA9B,EAAsC,OAAO,IAAP;AAEtC,MAAMtC,wBAAwB,GAAGyF,4BAA4B,IAAIyB,+BAAjE;AACA,MAAMjH,SAAS,GAAGyF,aAAa,IAAIe,gBAAnC;AACA,MAAMvG,WAAW,GAAGyF,eAAe,IAAIe,kBAAvC;AACA,MAAMjG,WAAW,GAAGsF,eAAe,IAAIa,kBAAvC;AACA,MAAMjG,SAAS,GAAGsF,aAAa,IAAIa,gBAAnC;AACA,MAAMpG,OAAO,GAAGsF,WAAW,IAAIa,cAA/B;AACA,MAAMjG,YAAY,GAChB,OAAOsF,gBAAP,KAA4B,SAA5B,GAAwCA,gBAAxC,GAA2Da,mBAD7D;AAEA,MAAMlG,QAAQ,GAAGsF,YAAY,IAAIK,eAAjC;AACA,MAAMzF,UAAU,GAAGqF,cAAc,IAAIkB,iBAArC;AACA,MAAMtG,UAAU,GAAGqF,cAAc,IAAIW,iBAArC;AACA,MAAM9F,cAAc,GAAGqF,kBAAkB,IAAIc,sBAA7C;AACA,MAAMjH,2BAA2B,GAC/BwF,+BAA+B,IAAIuB,kCADrC;AAEA,MAAM9G,qBAAqB,GAAGwF,yBAAyB,IAAIuB,4BAA3D;AAEA,SACE,gCAAC,eAAD;AAEIpH,IAAAA,wBAAwB,EAAxBA,wBAFJ;AAGIC,IAAAA,SAAS,EAATA,SAHJ;AAIIsH,IAAAA,SAAS,EAAE/G,OAAF,oBAAEA,OAAO,CAAEgH,GAJxB;AAKItH,IAAAA,WAAW,EAAXA,WALJ;AAMIC,IAAAA,gBAAgB,EAAEA,gBAAgB,IAAI,CAAC,EAACK,OAAD,YAACA,OAAO,CAAEiH,WAAV,CAN3C;AAOIrH,IAAAA,2BAA2B,EAA3BA,2BAPJ;AAQIC,IAAAA,qBAAqB,EAArBA,qBARJ;AASIC,IAAAA,MAAM,EAANA,MATJ;AAUIC,IAAAA,+BAA+B,EAA/BA,+BAVJ;AAWIC,IAAAA,OAAO,EAAPA,OAXJ;AAYIC,IAAAA,WAAW,EAAXA,WAZJ;AAaIC,IAAAA,OAAO,EAAPA,OAbJ;AAcIC,IAAAA,SAAS,EAATA,SAdJ;AAeIC,IAAAA,YAAY,EAAZA,YAfJ;AAgBIC,IAAAA,QAAQ,EAARA,QAhBJ;AAiBIC,IAAAA,SAAS,EAATA,SAjBJ;AAkBIC,IAAAA,UAAU,EAAVA,UAlBJ;AAmBIC,IAAAA,UAAU,EAAVA,UAnBJ;AAoBIC,IAAAA,MAAM,EAANA,MApBJ;AAqBIC,IAAAA,cAAc,EAAdA,cArBJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF;AA0BD,CA7FM;;;AA+FPsE,OAAO,CAACkC,WAAR,GAAsB,iCAAtB","sourcesContent":["import React, { useMemo } from 'react';\nimport { StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport { GalleryImage } from './GallaryImage';\nimport { useLoadingImage } from './hooks/useLoadingImage';\nimport { buildGallery } from './utils/buildGallery/buildGallery';\n\nimport { getGalleryImageBorderRadius } from './utils/getGalleryImageBorderRadius';\n\nimport { openUrlSafely } from './utils/openUrlSafely';\n\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport {\n ImageGalleryContextValue,\n useImageGalleryContext,\n} from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { isVideoPackageAvailable } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getUrlWithoutParams } from '../../utils/utils';\n\nconst MemoizedGalleryImage = React.memo(\n GalleryImage,\n (prevProps, nextProps) =>\n getUrlWithoutParams(prevProps.uri) === getUrlWithoutParams(nextProps.uri),\n) as typeof GalleryImage;\n\nconst styles = StyleSheet.create({\n errorTextSize: { fontSize: 10 },\n galleryContainer: {\n borderTopLeftRadius: 13,\n borderTopRightRadius: 13,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n },\n imageContainer: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n padding: 1,\n },\n imageContainerStyle: { alignItems: 'center', flex: 1, justifyContent: 'center' },\n imageLoadingIndicatorStyle: {\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n },\n moreImagesContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n margin: 1,\n },\n moreImagesText: { color: '#FFFFFF', fontSize: 26, fontWeight: '700' },\n});\n\nexport type GalleryPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ImageGalleryContextValue<StreamChatGenerics>, 'setImage' | 'setImages'> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n | 'alignment'\n | 'groupStyles'\n | 'images'\n | 'videos'\n | 'onLongPress'\n | 'onPress'\n | 'onPressIn'\n | 'preventPress'\n | 'threadList'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'additionalTouchableProps'\n | 'legacyImageViewerSwipeBehaviour'\n | 'VideoThumbnail'\n | 'ImageLoadingIndicator'\n | 'ImageLoadingFailedIndicator'\n > &\n Pick<OverlayContextValue, 'setOverlay'> & {\n channelId: string | undefined;\n hasThreadReplies?: boolean;\n /**\n * `message` prop has been introduced here as part of `legacyImageViewerSwipeBehaviour` prop.\n * https://github.com/GetStream/stream-chat-react-native/commit/d5eac6193047916f140efe8e396a671675c9a63f\n * messageId and messageText may seem redundant now, but to avoid breaking change as part\n * of minor release, we are keeping those props.\n *\n * Also `message` type should ideally be imported from MessageContextValue and not be explicitely mentioned\n * here, but due to some circular dependencies within the SDK, it causes \"exccesive deep nesting\" issue with\n * typescript within Channel component. We should take it as a mini-project and resolve all these circular imports.\n *\n * TODO: Fix circular dependencies of imports\n */\n message?: MessageType<StreamChatGenerics>;\n };\n\nconst GalleryWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n alignment,\n groupStyles,\n hasThreadReplies,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n } = props;\n\n const { isLoadingImage, isLoadingImageError, setLoadingImage, setLoadingImageError } =\n useLoadingImage();\n\n const {\n theme: {\n colors: { overlay },\n messageSimple: {\n gallery: {\n galleryContainer,\n galleryItemColumn,\n gridHeight,\n gridWidth,\n image,\n imageContainer,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n moreImagesContainer,\n moreImagesText,\n },\n },\n },\n } = useTheme();\n\n const sizeConfig = {\n gridHeight,\n gridWidth,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n };\n\n const imagesAndVideos = [...(images || []), ...(videos || [])];\n const { height, invertedDirections, thumbnailGrid, width } = useMemo(\n () =>\n buildGallery({\n images: imagesAndVideos,\n sizeConfig,\n }),\n [imagesAndVideos.length],\n );\n\n if (!imagesAndVideos?.length) return null;\n const messageText = message?.text;\n const messageId = message?.id;\n const numOfColumns = thumbnailGrid.length;\n\n return (\n <View\n style={[\n styles.galleryContainer,\n {\n height,\n width,\n },\n galleryContainer,\n {\n flexDirection: invertedDirections ? 'column' : 'row',\n },\n ]}\n testID='gallery-container'\n >\n {thumbnailGrid.map((rows, colIndex) => {\n const numOfRows = rows.length;\n return (\n <View\n key={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n style={[\n {\n flexDirection: invertedDirections ? 'row' : 'column',\n },\n galleryItemColumn,\n ]}\n testID={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n >\n {rows.map(({ height, resizeMode, type, url, width }, rowIndex) => {\n const openImageViewer = () => {\n if (!legacyImageViewerSwipeBehaviour && message) {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\n setImages([message]);\n setImage({ messageId: message.id, url });\n setOverlay('gallery');\n } else if (legacyImageViewerSwipeBehaviour) {\n setImage({ messageId: message?.id, url });\n setOverlay('gallery');\n }\n };\n\n const defaultOnPress = () => {\n if (type === 'video' && !isVideoPackageAvailable()) {\n // This condition is kinda unreachable, since we render videos as file attachment if the video\n // library is not installed. But doesn't hurt to have extra safeguard, in case of some customizations.\n openUrlSafely(url);\n } else {\n openImageViewer();\n }\n };\n\n const borderRadius = getGalleryImageBorderRadius({\n alignment,\n colIndex,\n groupStyles,\n hasThreadReplies,\n height,\n invertedDirections,\n messageText,\n numOfColumns,\n numOfRows,\n rowIndex,\n sizeConfig,\n threadList,\n width,\n });\n\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={preventPress}\n key={`gallery-item-${messageId}/${colIndex}/${rowIndex}/${imagesAndVideos.length}`}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n style={[\n styles.imageContainer,\n {\n height,\n width,\n },\n imageContainer,\n ]}\n testID={`gallery-${\n invertedDirections ? 'row' : 'column'\n }-${colIndex}-item-${rowIndex}`}\n {...additionalTouchableProps}\n >\n {type === 'video' ? (\n <VideoThumbnail\n style={[\n borderRadius,\n image,\n {\n height: height - 1,\n width: width - 1,\n },\n ]}\n />\n ) : (\n <View style={styles.imageContainerStyle}>\n <MemoizedGalleryImage\n onError={(error) => {\n console.warn(error);\n setLoadingImage(false);\n setLoadingImageError(true);\n }}\n onLoadEnd={() => setLoadingImage(false)}\n onLoadStart={() => setLoadingImage(true)}\n resizeMode={resizeMode}\n style={[\n borderRadius,\n image,\n {\n height: height - 1,\n width: width - 1,\n },\n ]}\n uri={url}\n />\n {isLoadingImage && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n {isLoadingImageError && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingFailedIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n </View>\n )}\n {colIndex === numOfColumns - 1 &&\n rowIndex === numOfRows - 1 &&\n imagesAndVideos.length > 4 ? (\n <View\n style={[\n StyleSheet.absoluteFillObject,\n styles.moreImagesContainer,\n { backgroundColor: overlay },\n moreImagesContainer,\n ]}\n >\n <Text style={[styles.moreImagesText, moreImagesText]}>\n {`+${imagesAndVideos.length - 4}`}\n </Text>\n </View>\n ) : null}\n </TouchableOpacity>\n );\n })}\n </View>\n );\n })}\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: GalleryPropsWithContext<StreamChatGenerics>,\n nextProps: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n groupStyles: prevGroupStyles,\n hasThreadReplies: prevHasThreadReplies,\n images: prevImages,\n message: prevMessage,\n videos: prevVideos,\n } = prevProps;\n const {\n groupStyles: nextGroupStyles,\n hasThreadReplies: nextHasThreadReplies,\n images: nextImages,\n message: nextMessage,\n videos: nextVideos,\n } = nextProps;\n\n const messageEqual = prevMessage?.id === nextMessage?.id;\n if (!messageEqual) return false;\n\n const groupStylesEqual =\n prevGroupStyles.length === nextGroupStyles.length && prevGroupStyles[0] === nextGroupStyles[0];\n if (!groupStylesEqual) return false;\n\n const hasThreadRepliesEqual = prevHasThreadReplies === nextHasThreadReplies;\n if (!hasThreadRepliesEqual) return false;\n\n const imagesEqual =\n prevImages.length === nextImages.length &&\n prevImages.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextImages[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextImages[index].thumb_url),\n );\n if (!imagesEqual) return false;\n\n const videosEqual =\n prevVideos.length === nextVideos.length &&\n prevVideos.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextVideos[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextVideos[index].thumb_url),\n );\n if (!videosEqual) return false;\n\n return true;\n};\n\nconst MemoizedGallery = React.memo(GalleryWithContext, areEqual) as typeof GalleryWithContext;\n\nexport type GalleryProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<GalleryPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI component for card in attachments.\n */\nexport const Gallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryProps<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps: propAdditionalTouchableProps,\n alignment: propAlignment,\n groupStyles: propGroupStyles,\n hasThreadReplies,\n ImageLoadingFailedIndicator: PropImageLoadingFailedIndicator,\n ImageLoadingIndicator: PropImageLoadingIndicator,\n images: propImages,\n onLongPress: propOnLongPress,\n onPress: propOnPress,\n onPressIn: propOnPressIn,\n preventPress: propPreventPress,\n setImage: propSetImage,\n setOverlay: propSetOverlay,\n threadList: propThreadList,\n videos: propVideos,\n VideoThumbnail: PropVideoThumbnail,\n } = props;\n\n const { setImage: contextSetImage, setImages } = useImageGalleryContext<StreamChatGenerics>();\n const {\n alignment: contextAlignment,\n groupStyles: contextGroupStyles,\n images: contextImages,\n message,\n onLongPress: contextOnLongPress,\n onPress: contextOnPress,\n onPressIn: contextOnPressIn,\n preventPress: contextPreventPress,\n threadList: contextThreadList,\n videos: contextVideos,\n } = useMessageContext<StreamChatGenerics>();\n const {\n additionalTouchableProps: contextAdditionalTouchableProps,\n ImageLoadingFailedIndicator: ContextImageLoadingFailedIndicator,\n ImageLoadingIndicator: ContextImageLoadingIndicator,\n legacyImageViewerSwipeBehaviour,\n VideoThumbnail: ContextVideoThumnbnail,\n } = useMessagesContext<StreamChatGenerics>();\n const { setOverlay: contextSetOverlay } = useOverlayContext();\n\n const images = propImages || contextImages;\n const videos = propVideos || contextVideos;\n\n if (!images.length && !videos.length) return null;\n\n const additionalTouchableProps = propAdditionalTouchableProps || contextAdditionalTouchableProps;\n const alignment = propAlignment || contextAlignment;\n const groupStyles = propGroupStyles || contextGroupStyles;\n const onLongPress = propOnLongPress || contextOnLongPress;\n const onPressIn = propOnPressIn || contextOnPressIn;\n const onPress = propOnPress || contextOnPress;\n const preventPress =\n typeof propPreventPress === 'boolean' ? propPreventPress : contextPreventPress;\n const setImage = propSetImage || contextSetImage;\n const setOverlay = propSetOverlay || contextSetOverlay;\n const threadList = propThreadList || contextThreadList;\n const VideoThumbnail = PropVideoThumbnail || ContextVideoThumnbnail;\n const ImageLoadingFailedIndicator =\n PropImageLoadingFailedIndicator || ContextImageLoadingFailedIndicator;\n const ImageLoadingIndicator = PropImageLoadingIndicator || ContextImageLoadingIndicator;\n\n return (\n <MemoizedGallery\n {...{\n additionalTouchableProps,\n alignment,\n channelId: message?.cid,\n groupStyles,\n hasThreadReplies: hasThreadReplies || !!message?.reply_count,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n }}\n />\n );\n};\n\nGallery.displayName = 'Gallery{messageSimple{gallery}}';\n"]}
1
+ {"version":3,"sources":["Gallery.tsx"],"names":["MemoizedGalleryImage","React","memo","GalleryImage","prevProps","nextProps","uri","styles","StyleSheet","create","errorTextSize","fontSize","galleryContainer","borderTopLeftRadius","borderTopRightRadius","flexDirection","flexWrap","overflow","imageContainer","alignItems","display","justifyContent","padding","imageContainerStyle","flex","imageLoadingIndicatorStyle","position","moreImagesContainer","margin","moreImagesText","color","fontWeight","GalleryWithContext","props","additionalTouchableProps","alignment","groupStyles","hasThreadReplies","ImageLoadingFailedIndicator","ImageLoadingIndicator","images","legacyImageViewerSwipeBehaviour","message","onLongPress","onPress","onPressIn","preventPress","setImage","setImages","setOverlay","threadList","videos","VideoThumbnail","theme","messageSimple","gallery","galleryItemColumn","gridHeight","gridWidth","maxHeight","maxWidth","minHeight","minWidth","sizeConfig","imagesAndVideos","length","height","invertedDirections","thumbnailGrid","width","numOfColumns","map","rows","colIndex","numOfRows","thumbnail","rowIndex","borderRadius","messageText","text","undefined","GalleryThumbnail","isLoadingImage","isLoadingImageError","setLoadingImage","setLoadingImageError","overlay","colors","image","openImageViewer","messageId","id","url","defaultOnPress","type","event","emitter","defaultHandler","thumb_url","error","console","warn","resizeMode","absoluteFillObject","backgroundColor","areEqual","prevGroupStyles","prevHasThreadReplies","prevImages","prevMessage","prevVideos","nextGroupStyles","nextHasThreadReplies","nextImages","nextMessage","nextVideos","messageEqual","groupStylesEqual","hasThreadRepliesEqual","imagesEqual","every","index","image_url","videosEqual","MemoizedGallery","Gallery","propAdditionalTouchableProps","propAlignment","propGroupStyles","PropImageLoadingFailedIndicator","PropImageLoadingIndicator","propImages","propOnLongPress","propOnPress","propOnPressIn","propPreventPress","propSetImage","propSetOverlay","propThreadList","propVideos","PropVideoThumbnail","contextSetImage","contextAlignment","contextGroupStyles","contextImages","contextOnLongPress","contextOnPress","contextOnPressIn","contextPreventPress","contextThreadList","contextVideos","contextAdditionalTouchableProps","ContextImageLoadingFailedIndicator","ContextImageLoadingIndicator","ContextVideoThumnbnail","contextSetOverlay","channelId","cid","reply_count","displayName"],"mappings":"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","sourcesContent":["import React, { useMemo } from 'react';\nimport { StyleSheet, Text, TouchableOpacity, View } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { GalleryImage } from './GallaryImage';\nimport { useLoadingImage } from './hooks/useLoadingImage';\nimport { buildGallery } from './utils/buildGallery/buildGallery';\n\nimport type { Thumbnail } from './utils/buildGallery/types';\nimport { getGalleryImageBorderRadius } from './utils/getGalleryImageBorderRadius';\n\nimport { openUrlSafely } from './utils/openUrlSafely';\n\nimport type { MessageType } from '../../components/MessageList/hooks/useMessageList';\nimport {\n ImageGalleryContextValue,\n useImageGalleryContext,\n} from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n MessageContextValue,\n useMessageContext,\n} from '../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport {\n OverlayContextValue,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { isVideoPackageAvailable } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getUrlWithoutParams } from '../../utils/utils';\n\nconst MemoizedGalleryImage = React.memo(\n GalleryImage,\n (prevProps, nextProps) =>\n getUrlWithoutParams(prevProps.uri) === getUrlWithoutParams(nextProps.uri),\n) as typeof GalleryImage;\n\nconst styles = StyleSheet.create({\n errorTextSize: { fontSize: 10 },\n galleryContainer: {\n borderTopLeftRadius: 13,\n borderTopRightRadius: 13,\n flexDirection: 'row',\n flexWrap: 'wrap',\n overflow: 'hidden',\n },\n imageContainer: {\n alignItems: 'center',\n display: 'flex',\n flexDirection: 'row',\n justifyContent: 'center',\n padding: 1,\n },\n imageContainerStyle: { alignItems: 'center', flex: 1, justifyContent: 'center' },\n imageLoadingIndicatorStyle: {\n alignItems: 'center',\n justifyContent: 'center',\n position: 'absolute',\n },\n moreImagesContainer: {\n alignItems: 'center',\n justifyContent: 'center',\n margin: 1,\n },\n moreImagesText: { color: '#FFFFFF', fontSize: 26, fontWeight: '700' },\n});\n\nexport type GalleryPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ImageGalleryContextValue<StreamChatGenerics>, 'setImage' | 'setImages'> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n | 'alignment'\n | 'groupStyles'\n | 'images'\n | 'videos'\n | 'onLongPress'\n | 'onPress'\n | 'onPressIn'\n | 'preventPress'\n | 'threadList'\n > &\n Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'additionalTouchableProps'\n | 'legacyImageViewerSwipeBehaviour'\n | 'VideoThumbnail'\n | 'ImageLoadingIndicator'\n | 'ImageLoadingFailedIndicator'\n > &\n Pick<OverlayContextValue, 'setOverlay'> & {\n channelId: string | undefined;\n hasThreadReplies?: boolean;\n /**\n * `message` prop has been introduced here as part of `legacyImageViewerSwipeBehaviour` prop.\n * https://github.com/GetStream/stream-chat-react-native/commit/d5eac6193047916f140efe8e396a671675c9a63f\n * messageId and messageText may seem redundant now, but to avoid breaking change as part\n * of minor release, we are keeping those props.\n *\n * Also `message` type should ideally be imported from MessageContextValue and not be explicitely mentioned\n * here, but due to some circular dependencies within the SDK, it causes \"exccesive deep nesting\" issue with\n * typescript within Channel component. We should take it as a mini-project and resolve all these circular imports.\n *\n * TODO: Fix circular dependencies of imports\n */\n message?: MessageType<StreamChatGenerics>;\n };\n\nconst GalleryWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps,\n alignment,\n groupStyles,\n hasThreadReplies,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n } = props;\n\n const {\n theme: {\n messageSimple: {\n gallery: {\n galleryContainer,\n galleryItemColumn,\n gridHeight,\n gridWidth,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n },\n },\n },\n } = useTheme();\n\n const sizeConfig = {\n gridHeight,\n gridWidth,\n maxHeight,\n maxWidth,\n minHeight,\n minWidth,\n };\n\n const imagesAndVideos = [...(images || []), ...(videos || [])];\n const { height, invertedDirections, thumbnailGrid, width } = useMemo(\n () =>\n buildGallery({\n images: imagesAndVideos,\n sizeConfig,\n }),\n [imagesAndVideos.length],\n );\n\n if (!imagesAndVideos?.length) return null;\n const numOfColumns = thumbnailGrid.length;\n\n return (\n <View\n style={[\n styles.galleryContainer,\n {\n height,\n width,\n },\n galleryContainer,\n {\n flexDirection: invertedDirections ? 'column' : 'row',\n },\n ]}\n testID='gallery-container'\n >\n {thumbnailGrid.map((rows, colIndex) => {\n const numOfRows = rows.length;\n return (\n <View\n key={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n style={[\n {\n flexDirection: invertedDirections ? 'row' : 'column',\n },\n galleryItemColumn,\n ]}\n testID={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}`}\n >\n {rows.map((thumbnail, rowIndex) => {\n const borderRadius = getGalleryImageBorderRadius({\n alignment,\n colIndex,\n groupStyles,\n hasThreadReplies,\n height,\n invertedDirections,\n messageText: message?.text,\n numOfColumns,\n numOfRows,\n rowIndex,\n sizeConfig,\n threadList,\n width,\n });\n\n if (message === undefined) {\n return null;\n }\n\n return (\n <GalleryThumbnail\n additionalTouchableProps={additionalTouchableProps}\n borderRadius={borderRadius}\n colIndex={colIndex}\n ImageLoadingFailedIndicator={ImageLoadingFailedIndicator}\n ImageLoadingIndicator={ImageLoadingIndicator}\n imagesAndVideos={imagesAndVideos}\n invertedDirections={invertedDirections || false}\n key={rowIndex}\n legacyImageViewerSwipeBehaviour={legacyImageViewerSwipeBehaviour}\n message={message}\n numOfColumns={numOfColumns}\n numOfRows={numOfRows}\n onLongPress={onLongPress}\n onPress={onPress}\n onPressIn={onPressIn}\n preventPress={preventPress}\n rowIndex={rowIndex}\n setImage={setImage}\n setImages={setImages}\n setOverlay={setOverlay}\n thumbnail={thumbnail}\n VideoThumbnail={VideoThumbnail}\n />\n );\n })}\n </View>\n );\n })}\n </View>\n );\n};\n\ntype GalleryThumbnailProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n borderRadius: {\n borderBottomLeftRadius: number;\n borderBottomRightRadius: number;\n borderTopLeftRadius: number;\n borderTopRightRadius: number;\n };\n colIndex: number;\n imagesAndVideos: Attachment<StreamChatGenerics>[];\n invertedDirections: boolean;\n message: MessageType<StreamChatGenerics>;\n numOfColumns: number;\n numOfRows: number;\n rowIndex: number;\n thumbnail: Thumbnail;\n} & Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'additionalTouchableProps'\n | 'legacyImageViewerSwipeBehaviour'\n | 'VideoThumbnail'\n | 'ImageLoadingIndicator'\n | 'ImageLoadingFailedIndicator'\n> &\n Pick<ImageGalleryContextValue<StreamChatGenerics>, 'setImage' | 'setImages'> &\n Pick<\n MessageContextValue<StreamChatGenerics>,\n 'onLongPress' | 'onPress' | 'onPressIn' | 'preventPress'\n > &\n Pick<OverlayContextValue, 'setOverlay'>;\n\nconst GalleryThumbnail = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n additionalTouchableProps,\n borderRadius,\n colIndex,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\n imagesAndVideos,\n invertedDirections,\n legacyImageViewerSwipeBehaviour,\n message,\n numOfColumns,\n numOfRows,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n rowIndex,\n setImage,\n setImages,\n setOverlay,\n thumbnail,\n VideoThumbnail,\n}: GalleryThumbnailProps<StreamChatGenerics>) => {\n const { isLoadingImage, isLoadingImageError, setLoadingImage, setLoadingImageError } =\n useLoadingImage();\n\n const {\n theme: {\n colors: { overlay },\n messageSimple: {\n gallery: { image, imageContainer, moreImagesContainer, moreImagesText },\n },\n },\n } = useTheme();\n\n const openImageViewer = () => {\n if (!legacyImageViewerSwipeBehaviour && message) {\n // Added if-else to keep the logic readable, instead of DRY.\n // if - legacyImageViewerSwipeBehaviour is disabled\n // else - legacyImageViewerSwipeBehaviour is enabled\n setImages([message]);\n setImage({ messageId: message.id, url: thumbnail.url });\n setOverlay('gallery');\n } else if (legacyImageViewerSwipeBehaviour) {\n setImage({ messageId: message?.id, url: thumbnail.url });\n setOverlay('gallery');\n }\n };\n\n const defaultOnPress = () => {\n if (thumbnail.type === 'video' && !isVideoPackageAvailable()) {\n // This condition is kinda unreachable, since we render videos as file attachment if the video\n // library is not installed. But doesn't hurt to have extra safeguard, in case of some customizations.\n openUrlSafely(thumbnail.url);\n } else {\n openImageViewer();\n }\n };\n\n return (\n <TouchableOpacity\n activeOpacity={0.8}\n disabled={preventPress}\n key={`gallery-item-${message.id}/${colIndex}/${rowIndex}/${imagesAndVideos.length}`}\n onLongPress={(event) => {\n if (onLongPress) {\n onLongPress({\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPress={(event) => {\n if (onPress) {\n onPress({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n onPressIn={(event) => {\n if (onPressIn) {\n onPressIn({\n defaultHandler: defaultOnPress,\n emitter: 'gallery',\n event,\n });\n }\n }}\n style={[\n styles.imageContainer,\n {\n height: thumbnail.height,\n width: thumbnail.width,\n },\n imageContainer,\n ]}\n testID={`gallery-${invertedDirections ? 'row' : 'column'}-${colIndex}-item-${rowIndex}`}\n {...additionalTouchableProps}\n >\n {thumbnail.type === 'video' ? (\n <VideoThumbnail\n style={[\n borderRadius,\n image,\n {\n height: thumbnail.height - 1,\n width: thumbnail.width - 1,\n },\n ]}\n thumb_url={thumbnail.thumb_url}\n />\n ) : (\n <View style={styles.imageContainerStyle}>\n <MemoizedGalleryImage\n onError={(error) => {\n console.warn(error);\n setLoadingImage(false);\n setLoadingImageError(true);\n }}\n onLoadEnd={() => setLoadingImage(false)}\n onLoadStart={() => setLoadingImage(true)}\n resizeMode={thumbnail.resizeMode}\n style={[\n borderRadius,\n image,\n {\n height: thumbnail.height - 1,\n width: thumbnail.width - 1,\n },\n ]}\n uri={thumbnail.url}\n />\n {isLoadingImage && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n {isLoadingImageError && (\n <View style={{ position: 'absolute' }}>\n <ImageLoadingFailedIndicator style={styles.imageLoadingIndicatorStyle} />\n </View>\n )}\n </View>\n )}\n {colIndex === numOfColumns - 1 && rowIndex === numOfRows - 1 && imagesAndVideos.length > 4 ? (\n <View\n style={[\n StyleSheet.absoluteFillObject,\n styles.moreImagesContainer,\n { backgroundColor: overlay },\n moreImagesContainer,\n ]}\n >\n <Text style={[styles.moreImagesText, moreImagesText]}>\n {`+${imagesAndVideos.length - 4}`}\n </Text>\n </View>\n ) : null}\n </TouchableOpacity>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: GalleryPropsWithContext<StreamChatGenerics>,\n nextProps: GalleryPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n groupStyles: prevGroupStyles,\n hasThreadReplies: prevHasThreadReplies,\n images: prevImages,\n message: prevMessage,\n videos: prevVideos,\n } = prevProps;\n const {\n groupStyles: nextGroupStyles,\n hasThreadReplies: nextHasThreadReplies,\n images: nextImages,\n message: nextMessage,\n videos: nextVideos,\n } = nextProps;\n\n const messageEqual = prevMessage?.id === nextMessage?.id;\n if (!messageEqual) return false;\n\n const groupStylesEqual =\n prevGroupStyles.length === nextGroupStyles.length && prevGroupStyles[0] === nextGroupStyles[0];\n if (!groupStylesEqual) return false;\n\n const hasThreadRepliesEqual = prevHasThreadReplies === nextHasThreadReplies;\n if (!hasThreadRepliesEqual) return false;\n\n const imagesEqual =\n prevImages.length === nextImages.length &&\n prevImages.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextImages[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextImages[index].thumb_url),\n );\n if (!imagesEqual) return false;\n\n const videosEqual =\n prevVideos.length === nextVideos.length &&\n prevVideos.every(\n (image, index) =>\n getUrlWithoutParams(image.image_url) === getUrlWithoutParams(nextVideos[index].image_url) &&\n getUrlWithoutParams(image.thumb_url) === getUrlWithoutParams(nextVideos[index].thumb_url),\n );\n if (!videosEqual) return false;\n\n return true;\n};\n\nconst MemoizedGallery = React.memo(GalleryWithContext, areEqual) as typeof GalleryWithContext;\n\nexport type GalleryProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<GalleryPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI component for card in attachments.\n */\nexport const Gallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: GalleryProps<StreamChatGenerics>,\n) => {\n const {\n additionalTouchableProps: propAdditionalTouchableProps,\n alignment: propAlignment,\n groupStyles: propGroupStyles,\n hasThreadReplies,\n ImageLoadingFailedIndicator: PropImageLoadingFailedIndicator,\n ImageLoadingIndicator: PropImageLoadingIndicator,\n images: propImages,\n onLongPress: propOnLongPress,\n onPress: propOnPress,\n onPressIn: propOnPressIn,\n preventPress: propPreventPress,\n setImage: propSetImage,\n setOverlay: propSetOverlay,\n threadList: propThreadList,\n videos: propVideos,\n VideoThumbnail: PropVideoThumbnail,\n } = props;\n\n const { setImage: contextSetImage, setImages } = useImageGalleryContext<StreamChatGenerics>();\n const {\n alignment: contextAlignment,\n groupStyles: contextGroupStyles,\n images: contextImages,\n message,\n onLongPress: contextOnLongPress,\n onPress: contextOnPress,\n onPressIn: contextOnPressIn,\n preventPress: contextPreventPress,\n threadList: contextThreadList,\n videos: contextVideos,\n } = useMessageContext<StreamChatGenerics>();\n const {\n additionalTouchableProps: contextAdditionalTouchableProps,\n ImageLoadingFailedIndicator: ContextImageLoadingFailedIndicator,\n ImageLoadingIndicator: ContextImageLoadingIndicator,\n legacyImageViewerSwipeBehaviour,\n VideoThumbnail: ContextVideoThumnbnail,\n } = useMessagesContext<StreamChatGenerics>();\n const { setOverlay: contextSetOverlay } = useOverlayContext();\n\n const images = propImages || contextImages;\n const videos = propVideos || contextVideos;\n\n if (!images.length && !videos.length) return null;\n\n const additionalTouchableProps = propAdditionalTouchableProps || contextAdditionalTouchableProps;\n const alignment = propAlignment || contextAlignment;\n const groupStyles = propGroupStyles || contextGroupStyles;\n const onLongPress = propOnLongPress || contextOnLongPress;\n const onPressIn = propOnPressIn || contextOnPressIn;\n const onPress = propOnPress || contextOnPress;\n const preventPress =\n typeof propPreventPress === 'boolean' ? propPreventPress : contextPreventPress;\n const setImage = propSetImage || contextSetImage;\n const setOverlay = propSetOverlay || contextSetOverlay;\n const threadList = propThreadList || contextThreadList;\n const VideoThumbnail = PropVideoThumbnail || ContextVideoThumnbnail;\n const ImageLoadingFailedIndicator =\n PropImageLoadingFailedIndicator || ContextImageLoadingFailedIndicator;\n const ImageLoadingIndicator = PropImageLoadingIndicator || ContextImageLoadingIndicator;\n\n return (\n <MemoizedGallery\n {...{\n additionalTouchableProps,\n alignment,\n channelId: message?.cid,\n groupStyles,\n hasThreadReplies: hasThreadReplies || !!message?.reply_count,\n ImageLoadingFailedIndicator,\n ImageLoadingIndicator,\n images,\n legacyImageViewerSwipeBehaviour,\n message,\n onLongPress,\n onPress,\n onPressIn,\n preventPress,\n setImage,\n setImages,\n setOverlay,\n threadList,\n videos,\n VideoThumbnail,\n }}\n />\n );\n};\n\nGallery.displayName = 'Gallery{messageSimple{gallery}}';\n"]}
@@ -17,7 +17,7 @@ var _ThemeContext = require("../../contexts/themeContext/ThemeContext");
17
17
 
18
18
  var _icons = require("../../icons");
19
19
 
20
- var _excluded = ["style"];
20
+ var _excluded = ["style", "thumb_url"];
21
21
 
22
22
  var _this = this,
23
23
  _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/Attachment/VideoThumbnail.tsx";
@@ -49,13 +49,19 @@ var VideoThumbnail = function VideoThumbnail(props) {
49
49
  roundedView = _useTheme$theme$messa.roundedView;
50
50
 
51
51
  var style = props.style,
52
+ thumb_url = props.thumb_url,
52
53
  rest = (0, _objectWithoutProperties2["default"])(props, _excluded);
53
- return _react["default"].createElement(_reactNative.View, (0, _extends2["default"])({}, rest, {
54
+ return _react["default"].createElement(_reactNative.ImageBackground, (0, _extends2["default"])({
55
+ accessibilityLabel: "video-thumbnail",
56
+ source: {
57
+ uri: thumb_url
58
+ }
59
+ }, rest, {
54
60
  style: [styles.container, container, style],
55
61
  __self: _this,
56
62
  __source: {
57
63
  fileName: _jsxFileName,
58
- lineNumber: 39,
64
+ lineNumber: 41,
59
65
  columnNumber: 5
60
66
  }
61
67
  }), _react["default"].createElement(_reactNative.View, {
@@ -63,7 +69,7 @@ var VideoThumbnail = function VideoThumbnail(props) {
63
69
  __self: _this,
64
70
  __source: {
65
71
  fileName: _jsxFileName,
66
- lineNumber: 40,
72
+ lineNumber: 47,
67
73
  columnNumber: 7
68
74
  }
69
75
  }, _react["default"].createElement(_icons.Play, {
@@ -73,7 +79,7 @@ var VideoThumbnail = function VideoThumbnail(props) {
73
79
  __self: _this,
74
80
  __source: {
75
81
  fileName: _jsxFileName,
76
- lineNumber: 41,
82
+ lineNumber: 48,
77
83
  columnNumber: 9
78
84
  }
79
85
  })));
@@ -1 +1 @@
1
- {"version":3,"sources":["VideoThumbnail.tsx"],"names":["styles","StyleSheet","create","container","alignItems","backgroundColor","display","height","justifyContent","width","roundedView","borderRadius","VideoThumbnail","props","theme","messageSimple","videoThumbnail","style","rest"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;AAEA,IAAMA,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,SAAS,EAAE;AACTC,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,eAAe,EAAE,OAFR;AAGTC,IAAAA,OAAO,EAAE,MAHA;AAITC,IAAAA,MAAM,EAAE,MAJC;AAKTC,IAAAA,cAAc,EAAE,QALP;AAMTC,IAAAA,KAAK,EAAE;AANE,GADoB;AAS/BC,EAAAA,WAAW,EAAE;AACXN,IAAAA,UAAU,EAAE,QADD;AAEXC,IAAAA,eAAe,EAAE,MAFN;AAGXM,IAAAA,YAAY,EAAE,EAHH;AAIXL,IAAAA,OAAO,EAAE,MAJE;AAKXC,IAAAA,MAAM,EAAE,EALG;AAMXC,IAAAA,cAAc,EAAE,QANL;AAOXC,IAAAA,KAAK,EAAE;AAPI;AATkB,CAAlB,CAAf;;AAsBO,IAAMG,cAA6C,GAAG,SAAhDA,cAAgD,CAACC,KAAD,EAAW;AACtE,kBAMI,6BANJ;AAAA,wCACEC,KADF,CAEIC,aAFJ,CAGMC,cAHN;AAAA,MAGwBb,SAHxB,yBAGwBA,SAHxB;AAAA,MAGmCO,WAHnC,yBAGmCA,WAHnC;;AAOA,MAAQO,KAAR,GAA2BJ,KAA3B,CAAQI,KAAR;AAAA,MAAkBC,IAAlB,6CAA2BL,KAA3B;AACA,SACE,gCAAC,iBAAD,gCAAUK,IAAV;AAAgB,IAAA,KAAK,EAAE,CAAClB,MAAM,CAACG,SAAR,EAAmBA,SAAnB,EAA8Bc,KAA9B,CAAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MACE,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACjB,MAAM,CAACU,WAAR,EAAqBA,WAArB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,WAAD;AAAM,IAAA,MAAM,EAAE,EAAd;AAAkB,IAAA,QAAQ,EAAE,MAA5B;AAAoC,IAAA,KAAK,EAAE,EAA3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF,CADF,CADF;AAOD,CAhBM","sourcesContent":["import React from 'react';\nimport { StyleSheet, View, ViewProps } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Play } from '../../icons';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n backgroundColor: 'black',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n roundedView: {\n alignItems: 'center',\n backgroundColor: '#fff',\n borderRadius: 50,\n display: 'flex',\n height: 36,\n justifyContent: 'center',\n width: 36,\n },\n});\n\nexport type VideoThumbnailProps = ViewProps;\n\nexport const VideoThumbnail: React.FC<VideoThumbnailProps> = (props) => {\n const {\n theme: {\n messageSimple: {\n videoThumbnail: { container, roundedView },\n },\n },\n } = useTheme();\n const { style, ...rest } = props;\n return (\n <View {...rest} style={[styles.container, container, style]}>\n <View style={[styles.roundedView, roundedView]}>\n <Play height={24} pathFill={'#000'} width={24} />\n </View>\n </View>\n );\n};\n"]}
1
+ {"version":3,"sources":["VideoThumbnail.tsx"],"names":["styles","StyleSheet","create","container","alignItems","backgroundColor","display","height","justifyContent","width","roundedView","borderRadius","VideoThumbnail","props","theme","messageSimple","videoThumbnail","style","thumb_url","rest","uri"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AAEA;;AACA;;;;;;;AAEA,IAAMA,MAAM,GAAGC,wBAAWC,MAAX,CAAkB;AAC/BC,EAAAA,SAAS,EAAE;AACTC,IAAAA,UAAU,EAAE,QADH;AAETC,IAAAA,eAAe,EAAE,OAFR;AAGTC,IAAAA,OAAO,EAAE,MAHA;AAITC,IAAAA,MAAM,EAAE,MAJC;AAKTC,IAAAA,cAAc,EAAE,QALP;AAMTC,IAAAA,KAAK,EAAE;AANE,GADoB;AAS/BC,EAAAA,WAAW,EAAE;AACXN,IAAAA,UAAU,EAAE,QADD;AAEXC,IAAAA,eAAe,EAAE,MAFN;AAGXM,IAAAA,YAAY,EAAE,EAHH;AAIXL,IAAAA,OAAO,EAAE,MAJE;AAKXC,IAAAA,MAAM,EAAE,EALG;AAMXC,IAAAA,cAAc,EAAE,QANL;AAOXC,IAAAA,KAAK,EAAE;AAPI;AATkB,CAAlB,CAAf;;AAwBO,IAAMG,cAA6C,GAAG,SAAhDA,cAAgD,CAACC,KAAD,EAAW;AACtE,kBAMI,6BANJ;AAAA,wCACEC,KADF,CAEIC,aAFJ,CAGMC,cAHN;AAAA,MAGwBb,SAHxB,yBAGwBA,SAHxB;AAAA,MAGmCO,WAHnC,yBAGmCA,WAHnC;;AAOA,MAAQO,KAAR,GAAsCJ,KAAtC,CAAQI,KAAR;AAAA,MAAeC,SAAf,GAAsCL,KAAtC,CAAeK,SAAf;AAAA,MAA6BC,IAA7B,6CAAsCN,KAAtC;AACA,SACE,gCAAC,4BAAD;AACE,IAAA,kBAAkB,EAAC,iBADrB;AAEE,IAAA,MAAM,EAAE;AAAEO,MAAAA,GAAG,EAAEF;AAAP;AAFV,KAGMC,IAHN;AAIE,IAAA,KAAK,EAAE,CAACnB,MAAM,CAACG,SAAR,EAAmBA,SAAnB,EAA8Bc,KAA9B,CAJT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAME,gCAAC,iBAAD;AAAM,IAAA,KAAK,EAAE,CAACjB,MAAM,CAACU,WAAR,EAAqBA,WAArB,CAAb;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACE,gCAAC,WAAD;AAAM,IAAA,MAAM,EAAE,EAAd;AAAkB,IAAA,QAAQ,EAAE,MAA5B;AAAoC,IAAA,KAAK,EAAE,EAA3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IADF,CANF,CADF;AAYD,CArBM","sourcesContent":["import React from 'react';\nimport { ImageBackground, StyleSheet, View, ViewProps } from 'react-native';\n\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { Play } from '../../icons';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'center',\n backgroundColor: 'black',\n display: 'flex',\n height: '100%',\n justifyContent: 'center',\n width: '100%',\n },\n roundedView: {\n alignItems: 'center',\n backgroundColor: '#fff',\n borderRadius: 50,\n display: 'flex',\n height: 36,\n justifyContent: 'center',\n width: 36,\n },\n});\n\nexport type VideoThumbnailProps = ViewProps & {\n thumb_url?: string;\n};\n\nexport const VideoThumbnail: React.FC<VideoThumbnailProps> = (props) => {\n const {\n theme: {\n messageSimple: {\n videoThumbnail: { container, roundedView },\n },\n },\n } = useTheme();\n const { style, thumb_url, ...rest } = props;\n return (\n <ImageBackground\n accessibilityLabel='video-thumbnail'\n source={{ uri: thumb_url }}\n {...rest}\n style={[styles.container, container, style]}\n >\n <View style={[styles.roundedView, roundedView]}>\n <Play height={24} pathFill={'#000'} width={24} />\n </View>\n </ImageBackground>\n );\n};\n"]}
@@ -19,6 +19,7 @@ function buildThumbnail(_ref) {
19
19
  return {
20
20
  height: height,
21
21
  resizeMode: resizeMode ? resizeMode : image.original_height && image.original_width ? 'contain' : 'cover',
22
+ thumb_url: image.thumb_url,
22
23
  type: image.type,
23
24
  url: shouldResize ? (0, _getResizedImageUrl.getResizedImageUrl)({
24
25
  height: height,
@@ -1 +1 @@
1
- {"version":3,"sources":["buildThumbnail.ts"],"names":["buildThumbnail","height","image","resizeMode","width","originalImageHeight","original_height","originalImageWidth","original_width","shouldResize","imageUrl","type","url"],"mappings":";;;;;AAQA;;AACA;;AAEO,SAASA,cAAT,OAYO;AAAA,MATZC,MASY,QATZA,MASY;AAAA,MARZC,KAQY,QARZA,KAQY;AAAA,MAPZC,UAOY,QAPZA,UAOY;AAAA,MANZC,KAMY,QANZA,KAMY;AACZ,MAAyBC,mBAAzB,GAAqFH,KAArF,CAAQI,eAAR;AAAA,MAA8DC,kBAA9D,GAAqFL,KAArF,CAA8CM,cAA9C;AAGA,MAAMC,YAAY,GAChBJ,mBAAmB,IAAIE,kBAAvB,GACIF,mBAAmB,GAAGE,kBAAtB,GAA2CN,MAAM,GAAGG,KADxD,GAEI,IAHN;AAIA,MAAMM,QAAQ,GAAG,sDAAwBR,KAAxB,CAAjB;AAEA,SAAO;AACLD,IAAAA,MAAM,EAANA,MADK;AAELE,IAAAA,UAAU,EAAEA,UAAU,GAClBA,UADkB,GAEhBD,KAAK,CAACI,eAAN,IAAyBJ,KAAK,CAACM,cAA/B,GAAgD,SAAhD,GAA4D,OAJ7D;AAKLG,IAAAA,IAAI,EAAET,KAAK,CAACS,IALP;AAMLC,IAAAA,GAAG,EAAEH,YAAY,GACb,4CAAmB;AACjBR,MAAAA,MAAM,EAANA,MADiB;AAEjBW,MAAAA,GAAG,EAAEF,QAFY;AAGjBN,MAAAA,KAAK,EAALA;AAHiB,KAAnB,CADa,GAMbM,QAZC;AAaLN,IAAAA,KAAK,EAALA;AAbK,GAAP;AAeD","sourcesContent":["import type { ImageResizeMode } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { Thumbnail } from './types';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nimport { getResizedImageUrl } from '../../../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../../../utils/getUrlOfImageAttachment';\n\nexport function buildThumbnail<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n height,\n image,\n resizeMode,\n width,\n}: {\n height: number;\n image: Attachment<StreamChatGenerics>;\n width: number;\n resizeMode?: ImageResizeMode;\n}): Thumbnail {\n const { original_height: originalImageHeight, original_width: originalImageWidth } = image;\n\n // Only resize if the original image is larger than the thumbnail container size.\n const shouldResize =\n originalImageHeight && originalImageWidth\n ? originalImageHeight + originalImageWidth > height + width\n : true;\n const imageUrl = getUrlOfImageAttachment(image) as string;\n\n return {\n height,\n resizeMode: resizeMode\n ? resizeMode\n : ((image.original_height && image.original_width ? 'contain' : 'cover') as ImageResizeMode),\n type: image.type,\n url: shouldResize\n ? getResizedImageUrl({\n height,\n url: imageUrl,\n width,\n })\n : imageUrl,\n width,\n };\n}\n"]}
1
+ {"version":3,"sources":["buildThumbnail.ts"],"names":["buildThumbnail","height","image","resizeMode","width","originalImageHeight","original_height","originalImageWidth","original_width","shouldResize","imageUrl","thumb_url","type","url"],"mappings":";;;;;AAQA;;AACA;;AAEO,SAASA,cAAT,OAYO;AAAA,MATZC,MASY,QATZA,MASY;AAAA,MARZC,KAQY,QARZA,KAQY;AAAA,MAPZC,UAOY,QAPZA,UAOY;AAAA,MANZC,KAMY,QANZA,KAMY;AACZ,MAAyBC,mBAAzB,GAAqFH,KAArF,CAAQI,eAAR;AAAA,MAA8DC,kBAA9D,GAAqFL,KAArF,CAA8CM,cAA9C;AAGA,MAAMC,YAAY,GAChBJ,mBAAmB,IAAIE,kBAAvB,GACIF,mBAAmB,GAAGE,kBAAtB,GAA2CN,MAAM,GAAGG,KADxD,GAEI,IAHN;AAIA,MAAMM,QAAQ,GAAG,sDAAwBR,KAAxB,CAAjB;AAEA,SAAO;AACLD,IAAAA,MAAM,EAANA,MADK;AAELE,IAAAA,UAAU,EAAEA,UAAU,GAClBA,UADkB,GAEhBD,KAAK,CAACI,eAAN,IAAyBJ,KAAK,CAACM,cAA/B,GAAgD,SAAhD,GAA4D,OAJ7D;AAKLG,IAAAA,SAAS,EAAET,KAAK,CAACS,SALZ;AAMLC,IAAAA,IAAI,EAAEV,KAAK,CAACU,IANP;AAOLC,IAAAA,GAAG,EAAEJ,YAAY,GACb,4CAAmB;AACjBR,MAAAA,MAAM,EAANA,MADiB;AAEjBY,MAAAA,GAAG,EAAEH,QAFY;AAGjBN,MAAAA,KAAK,EAALA;AAHiB,KAAnB,CADa,GAMbM,QAbC;AAcLN,IAAAA,KAAK,EAALA;AAdK,GAAP;AAgBD","sourcesContent":["import type { ImageResizeMode } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { Thumbnail } from './types';\n\nimport type { DefaultStreamChatGenerics } from '../../../../types/types';\n\nimport { getResizedImageUrl } from '../../../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../../../utils/getUrlOfImageAttachment';\n\nexport function buildThumbnail<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n height,\n image,\n resizeMode,\n width,\n}: {\n height: number;\n image: Attachment<StreamChatGenerics>;\n width: number;\n resizeMode?: ImageResizeMode;\n}): Thumbnail {\n const { original_height: originalImageHeight, original_width: originalImageWidth } = image;\n\n // Only resize if the original image is larger than the thumbnail container size.\n const shouldResize =\n originalImageHeight && originalImageWidth\n ? originalImageHeight + originalImageWidth > height + width\n : true;\n const imageUrl = getUrlOfImageAttachment(image) as string;\n\n return {\n height,\n resizeMode: resizeMode\n ? resizeMode\n : ((image.original_height && image.original_width ? 'contain' : 'cover') as ImageResizeMode),\n thumb_url: image.thumb_url,\n type: image.type,\n url: shouldResize\n ? getResizedImageUrl({\n height,\n url: imageUrl,\n width,\n })\n : imageUrl,\n width,\n };\n}\n"]}
@@ -19,6 +19,8 @@ var _ChannelsContext = require("../../contexts/channelsContext/ChannelsContext")
19
19
 
20
20
  var _ChatContext = require("../../contexts/chatContext/ChatContext");
21
21
 
22
+ var _useTranslatedMessage = require("../../hooks/useTranslatedMessage");
23
+
22
24
  var _this = this,
23
25
  _jsxFileName = "/home/runner/work/stream-chat-react-native/stream-chat-react-native/package/src/components/ChannelPreview/ChannelPreview.tsx";
24
26
 
@@ -36,6 +38,8 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
36
38
  lastMessage = _useState2[0],
37
39
  setLastMessage = _useState2[1];
38
40
 
41
+ var translatedLastMessage = (0, _useTranslatedMessage.useTranslatedMessage)(lastMessage || {});
42
+
39
43
  var _useState3 = (0, _react.useState)(0),
40
44
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
41
45
  forceUpdate = _useState4[0],
@@ -46,7 +50,7 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
46
50
  unread = _useState6[0],
47
51
  setUnread = _useState6[1];
48
52
 
49
- var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, lastMessage);
53
+ var latestMessagePreview = (0, _useLatestMessagePreview.useLatestMessagePreview)(channel, forceUpdate, translatedLastMessage);
50
54
  var channelLastMessage = channel.lastMessage();
51
55
  var channelLastMessageString = "" + (channelLastMessage == null ? void 0 : channelLastMessage.id) + (channelLastMessage == null ? void 0 : channelLastMessage.updated_at);
52
56
  (0, _react.useEffect)(function () {
@@ -105,7 +109,7 @@ var ChannelPreviewWithContext = function ChannelPreviewWithContext(props) {
105
109
  __self: _this,
106
110
  __source: {
107
111
  fileName: _jsxFileName,
108
- lineNumber: 100,
112
+ lineNumber: 106,
109
113
  columnNumber: 10
110
114
  }
111
115
  });
@@ -125,7 +129,7 @@ var ChannelPreview = function ChannelPreview(props) {
125
129
  __self: _this,
126
130
  __source: {
127
131
  fileName: _jsxFileName,
128
- lineNumber: 116,
132
+ lineNumber: 122,
129
133
  columnNumber: 10
130
134
  }
131
135
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["ChannelPreview.tsx"],"names":["ChannelPreviewWithContext","props","channel","client","Preview","state","messages","length","lastMessage","setLastMessage","forceUpdate","setForceUpdate","countUnread","unread","setUnread","latestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","newUnreadCount","handleEvent","event","message","type","on","off","handleReadEvent","user","userID","prev","ChannelPreview"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, lastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n\n if (newUnreadCount !== unread) {\n setUnread(newUnreadCount);\n }\n }, [channelLastMessageString]);\n\n useEffect(() => {\n const handleEvent = (event: Event<StreamChatGenerics>) => {\n if (event.message) {\n setLastMessage(event.message);\n }\n\n if (event.type === 'message.new') {\n setUnread(channel.countUnread());\n }\n };\n\n channel.on('message.new', handleEvent);\n channel.on('message.updated', handleEvent);\n channel.on('message.deleted', handleEvent);\n\n return () => {\n channel.off('message.new', handleEvent);\n channel.off('message.updated', handleEvent);\n channel.off('message.deleted', handleEvent);\n };\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n channel.on('message.read', handleReadEvent);\n return () => channel.off('message.read', handleReadEvent);\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, Preview }} {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["ChannelPreview.tsx"],"names":["ChannelPreviewWithContext","props","channel","client","Preview","state","messages","length","lastMessage","setLastMessage","translatedLastMessage","forceUpdate","setForceUpdate","countUnread","unread","setUnread","latestMessagePreview","channelLastMessage","channelLastMessageString","id","updated_at","newUnreadCount","handleEvent","event","message","type","on","off","handleReadEvent","user","userID","prev","ChannelPreview"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, Event, MessageResponse } from 'stream-chat';\n\nimport { useLatestMessagePreview } from './hooks/useLatestMessagePreview';\n\nimport {\n ChannelsContextValue,\n useChannelsContext,\n} from '../../contexts/channelsContext/ChannelsContext';\nimport { ChatContextValue, useChatContext } from '../../contexts/chatContext/ChatContext';\n\nimport { useTranslatedMessage } from '../../hooks/useTranslatedMessage';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\n\nexport type ChannelPreviewPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<ChannelsContextValue<StreamChatGenerics>, 'Preview'> & {\n /**\n * The previewed channel\n */\n channel: Channel<StreamChatGenerics>;\n };\n\n/**\n * This component manages state for the ChannelPreviewMessenger UI component and receives\n * all props from the ChannelListMessenger component.\n */\nconst ChannelPreviewWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewPropsWithContext<StreamChatGenerics>,\n) => {\n const { channel, client, Preview } = props;\n\n const [lastMessage, setLastMessage] = useState<\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>\n | undefined\n >(channel.state.messages[channel.state.messages.length - 1]);\n\n const translatedLastMessage = useTranslatedMessage<StreamChatGenerics>(\n lastMessage || ({} as MessageResponse<StreamChatGenerics>),\n );\n\n const [forceUpdate, setForceUpdate] = useState(0);\n const [unread, setUnread] = useState(channel.countUnread());\n\n const latestMessagePreview = useLatestMessagePreview(channel, forceUpdate, translatedLastMessage);\n\n const channelLastMessage = channel.lastMessage();\n const channelLastMessageString = `${channelLastMessage?.id}${channelLastMessage?.updated_at}`;\n\n useEffect(() => {\n if (\n channelLastMessage &&\n (channelLastMessage.id !== lastMessage?.id ||\n channelLastMessage.updated_at !== lastMessage?.updated_at)\n ) {\n setLastMessage(channelLastMessage);\n }\n\n const newUnreadCount = channel.countUnread();\n\n if (newUnreadCount !== unread) {\n setUnread(newUnreadCount);\n }\n }, [channelLastMessageString]);\n\n useEffect(() => {\n const handleEvent = (event: Event<StreamChatGenerics>) => {\n if (event.message) {\n setLastMessage(event.message);\n }\n\n if (event.type === 'message.new') {\n setUnread(channel.countUnread());\n }\n };\n\n channel.on('message.new', handleEvent);\n channel.on('message.updated', handleEvent);\n channel.on('message.deleted', handleEvent);\n\n return () => {\n channel.off('message.new', handleEvent);\n channel.off('message.updated', handleEvent);\n channel.off('message.deleted', handleEvent);\n };\n }, []);\n\n useEffect(() => {\n const handleReadEvent = (event: Event<StreamChatGenerics>) => {\n if (event.user?.id === client.userID) {\n setUnread(0);\n } else if (event.user?.id) {\n setForceUpdate((prev) => prev + 1);\n }\n };\n\n channel.on('message.read', handleReadEvent);\n return () => channel.off('message.read', handleReadEvent);\n }, []);\n\n return <Preview channel={channel} latestMessagePreview={latestMessagePreview} unread={unread} />;\n};\n\nexport type ChannelPreviewProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<Omit<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>> &\n Pick<ChannelPreviewPropsWithContext<StreamChatGenerics>, 'channel'>;\n\nexport const ChannelPreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ChannelPreviewProps<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { Preview } = useChannelsContext<StreamChatGenerics>();\n\n return <ChannelPreviewWithContext {...{ client, Preview }} {...props} />;\n};\n"]}
@@ -190,7 +190,8 @@ var getLatestMessagePreview = function getLatestMessagePreview(params) {
190
190
  };
191
191
  }
192
192
 
193
- var message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;
193
+ var channelStateLastMessage = messages.length ? messages[messages.length - 1] : undefined;
194
+ var message = lastMessage !== undefined ? lastMessage : channelStateLastMessage;
194
195
  return {
195
196
  created_at: getLatestMessageDisplayDate(message, tDateTimeParser),
196
197
  messageObject: message,
@@ -1 +1 @@
1
- {"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getMessageSenderName","message","currentUserId","t","membersLength","user","id","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","MessageReadStatus","getLatestMessageReadStatus","readEvents","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat, UserResponse } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getMessageSenderName = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n currentUserId: string | undefined,\n t: (key: string) => string,\n membersLength: number,\n) => {\n if (message?.user?.id === currentUserId) {\n return t('You');\n }\n\n if (membersLength > 2) {\n return message?.user?.name || message?.user?.username || message?.user?.id || '';\n }\n\n return '';\n};\n\nconst getMentionUsers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n mentionedUser: UserResponse<StreamChatGenerics>[] | undefined,\n) => {\n if (Array.isArray(mentionedUser)) {\n const mentionUserString = mentionedUser.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '');\n return mentionUserString;\n }\n return '';\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client?.userID;\n const members = Object.keys(channel.state.members);\n\n const messageSender = getMessageSenderName(message, currentUserId, t, members.length);\n const messageSenderText = messageSender\n ? `${messageSender === t('You') ? '' : '@'}${messageSender}: `\n : '';\n const boldOwner = messageSenderText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = getMentionUsers(message.mentioned_users);\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: messageSenderText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n const message = lastMessage || messages.length ? messages[messages.length - 1] : undefined;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
1
+ {"version":3,"sources":["useLatestMessagePreview.ts"],"names":["getMessageSenderName","message","currentUserId","t","membersLength","user","id","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isSame","Date","format","MessageReadStatus","getLatestMessageReadStatus","readEvents","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","channelStateLastMessage","useLatestMessagePreview","forceUpdate","channelConfigExists","getConfig","channelLastMessageString","setReadEvents","latestMessagePreview","setLatestMessagePreview","readStatus","read_events"],"mappings":"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","sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { Channel, ChannelState, MessageResponse, StreamChat, UserResponse } from 'stream-chat';\n\nimport { useChatContext } from '../../../contexts/chatContext/ChatContext';\nimport {\n isDayOrMoment,\n TDateTimeParser,\n useTranslationContext,\n} from '../../../contexts/translationContext/TranslationContext';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype LatestMessage<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> =\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n\nexport type LatestMessagePreview<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n created_at: string | number | Date;\n messageObject: LatestMessage<StreamChatGenerics> | undefined;\n previews: {\n bold: boolean;\n text: string;\n }[];\n status: number;\n};\n\nconst getMessageSenderName = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n currentUserId: string | undefined,\n t: (key: string) => string,\n membersLength: number,\n) => {\n if (message?.user?.id === currentUserId) {\n return t('You');\n }\n\n if (membersLength > 2) {\n return message?.user?.name || message?.user?.username || message?.user?.id || '';\n }\n\n return '';\n};\n\nconst getMentionUsers = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n mentionedUser: UserResponse<StreamChatGenerics>[] | undefined,\n) => {\n if (Array.isArray(mentionedUser)) {\n const mentionUserString = mentionedUser.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '');\n return mentionUserString;\n }\n return '';\n};\n\nconst getLatestMessageDisplayText = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n t: (key: string) => string,\n) => {\n if (!message) return [{ bold: false, text: t('Nothing yet...') }];\n const isMessageTypeDeleted = message.type === 'deleted';\n if (isMessageTypeDeleted) return [{ bold: false, text: t('Message deleted') }];\n const currentUserId = client?.userID;\n const members = Object.keys(channel.state.members);\n\n const messageSender = getMessageSenderName(message, currentUserId, t, members.length);\n const messageSenderText = messageSender\n ? `${messageSender === t('You') ? '' : '@'}${messageSender}: `\n : '';\n const boldOwner = messageSenderText.includes('@');\n if (message.text) {\n // rough guess optimization to limit string preview to max 100 characters\n const shortenedText = message.text.substring(0, 100).replace(/\\n/g, ' ');\n const mentionedUsers = getMentionUsers(message.mentioned_users);\n const regEx = new RegExp(`^(${mentionedUsers})`);\n return [\n { bold: boldOwner, text: messageSenderText },\n ...shortenedText.split('').reduce(\n (acc, cur, index) => {\n if (cur === '@' && mentionedUsers && regEx.test(shortenedText.substring(index))) {\n acc.push({ bold: true, text: cur });\n } else if (mentionedUsers && regEx.test(acc[acc.length - 1].text)) {\n acc.push({ bold: false, text: cur });\n } else {\n acc[acc.length - 1].text += cur;\n }\n return acc;\n },\n [{ bold: false, text: '' }],\n ),\n ];\n }\n if (message.command) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: `/${message.command}` },\n ];\n }\n if (message.attachments?.length) {\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('🏙 Attachment...') },\n ];\n }\n return [\n { bold: boldOwner, text: messageSenderText },\n { bold: false, text: t('Empty message...') },\n ];\n};\n\nconst getLatestMessageDisplayDate = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n message: LatestMessage<StreamChatGenerics> | undefined,\n tDateTimeParser: TDateTimeParser,\n) => {\n const parserOutput = tDateTimeParser(message?.created_at);\n if (isDayOrMoment(parserOutput)) {\n if (parserOutput.isSame(new Date(), 'day')) {\n return parserOutput.format('LT');\n }\n return parserOutput.format('L');\n }\n return parserOutput;\n};\n\nexport enum MessageReadStatus {\n NOT_SENT_BY_CURRENT_USER = 0,\n UNREAD = 1,\n READ = 2,\n}\n\nconst getLatestMessageReadStatus = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n client: StreamChat<StreamChatGenerics>,\n message: LatestMessage<StreamChatGenerics> | undefined,\n readEvents: boolean,\n): MessageReadStatus => {\n const currentUserId = client.userID;\n if (!message || currentUserId !== message.user?.id || readEvents === false) {\n return MessageReadStatus.NOT_SENT_BY_CURRENT_USER;\n }\n\n const readList = channel.state.read;\n if (currentUserId) {\n delete readList[currentUserId];\n }\n\n const messageUpdatedAt = message.updated_at\n ? typeof message.updated_at === 'string'\n ? new Date(message.updated_at)\n : message.updated_at\n : undefined;\n\n return Object.values(readList).some(\n ({ last_read }) => messageUpdatedAt && messageUpdatedAt < last_read,\n )\n ? MessageReadStatus.READ\n : MessageReadStatus.UNREAD;\n};\n\nconst getLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(params: {\n channel: Channel<StreamChatGenerics>;\n client: StreamChat<StreamChatGenerics>;\n readEvents: boolean;\n t: (key: string) => string;\n tDateTimeParser: TDateTimeParser;\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>;\n}) => {\n const { channel, client, lastMessage, readEvents, t, tDateTimeParser } = params;\n\n const messages = channel.state.messages;\n\n if (!messages.length && !lastMessage) {\n return {\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: t('Nothing yet...'),\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n };\n }\n\n const channelStateLastMessage = messages.length ? messages[messages.length - 1] : undefined;\n\n const message = lastMessage !== undefined ? lastMessage : channelStateLastMessage;\n\n return {\n created_at: getLatestMessageDisplayDate(message, tDateTimeParser),\n messageObject: message,\n previews: getLatestMessageDisplayText(channel, client, message, t),\n status: getLatestMessageReadStatus(channel, client, message, readEvents),\n };\n};\n\n/**\n * Hook to set the display preview for latest message on channel.\n *\n * @param {*} channel Channel object\n *\n * @returns {object} latest message preview e.g.. { text: 'this was last message ...', created_at: '11/12/2020', messageObject: { originalMessageObject } }\n */\nexport const useLatestMessagePreview = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n channel: Channel<StreamChatGenerics>,\n forceUpdate: number,\n lastMessage?:\n | ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>\n | MessageResponse<StreamChatGenerics>,\n) => {\n const { client } = useChatContext<StreamChatGenerics>();\n const { t, tDateTimeParser } = useTranslationContext();\n\n const channelConfigExists = typeof channel?.getConfig === 'function';\n\n const messages = channel.state.messages;\n const message = messages.length ? messages[messages.length - 1] : undefined;\n\n const channelLastMessageString = `${lastMessage?.id || message?.id}${\n lastMessage?.updated_at || message?.updated_at\n }`;\n\n const [readEvents, setReadEvents] = useState(true);\n const [latestMessagePreview, setLatestMessagePreview] = useState<\n LatestMessagePreview<StreamChatGenerics>\n >({\n created_at: '',\n messageObject: undefined,\n previews: [\n {\n bold: false,\n text: '',\n },\n ],\n status: MessageReadStatus.NOT_SENT_BY_CURRENT_USER,\n });\n\n const readStatus = getLatestMessageReadStatus(\n channel,\n client,\n lastMessage || message,\n readEvents,\n );\n\n useEffect(() => {\n if (channelConfigExists) {\n const read_events = channel.getConfig()?.read_events;\n if (typeof read_events === 'boolean') {\n setReadEvents(read_events);\n }\n }\n }, [channelConfigExists]);\n\n useEffect(\n () =>\n setLatestMessagePreview(\n getLatestMessagePreview({\n channel,\n client,\n lastMessage,\n readEvents,\n t,\n tDateTimeParser,\n }),\n ),\n [channelLastMessageString, forceUpdate, readEvents, readStatus],\n );\n\n return latestMessagePreview;\n};\n"]}
@@ -51,6 +51,8 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
51
51
  (0, _init["default"])();
52
52
 
53
53
  var ChatWithContext = function ChatWithContext(props) {
54
+ var _client$user;
55
+
54
56
  var children = props.children,
55
57
  client = props.client,
56
58
  _props$closeConnectio = props.closeConnectionOnBackground,
@@ -112,15 +114,17 @@ var ChatWithContext = function ChatWithContext(props) {
112
114
  __self: _this,
113
115
  __source: {
114
116
  fileName: _jsxFileName,
115
- lineNumber: 180,
117
+ lineNumber: 181,
116
118
  columnNumber: 5
117
119
  }
118
120
  }, _react["default"].createElement(_TranslationContext.TranslationProvider, {
119
- value: translators,
121
+ value: (0, _extends2["default"])({}, translators, {
122
+ userLanguage: ((_client$user = client.user) == null ? void 0 : _client$user.language) || _TranslationContext.DEFAULT_USER_LANGUAGE
123
+ }),
120
124
  __self: _this,
121
125
  __source: {
122
126
  fileName: _jsxFileName,
123
- lineNumber: 181,
127
+ lineNumber: 182,
124
128
  columnNumber: 7
125
129
  }
126
130
  }, _react["default"].createElement(_ThemeContext.ThemeProvider, {
@@ -128,7 +132,7 @@ var ChatWithContext = function ChatWithContext(props) {
128
132
  __self: _this,
129
133
  __source: {
130
134
  fileName: _jsxFileName,
131
- lineNumber: 182,
135
+ lineNumber: 185,
132
136
  columnNumber: 9
133
137
  }
134
138
  }, children)));
@@ -144,7 +148,7 @@ var Chat = function Chat(props) {
144
148
  __self: _this,
145
149
  __source: {
146
150
  fileName: _jsxFileName,
147
- lineNumber: 216,
151
+ lineNumber: 219,
148
152
  columnNumber: 10
149
153
  }
150
154
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","i18nInstance","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","setActiveChannel","newChannel","appSettings","chatContext","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n TranslationContextValue,\n TranslationProvider,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n};\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { children, client, closeConnectionOnBackground = true, i18nInstance, style } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslationContextValue>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n useEffect(() => {\n if (client.setUserAgent) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n }\n }, []);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n isOnline,\n mutedUsers,\n setActiveChannel,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider value={translators}>\n <ThemeProvider style={style}>{children}</ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}
1
+ {"version":3,"sources":["Chat.tsx"],"names":["ChatWithContext","props","children","client","closeConnectionOnBackground","i18nInstance","style","channel","setChannel","t","key","tDateTimeParser","input","translators","setTranslators","loadingTranslators","connectionRecovering","isOnline","mutedUsers","setUserAgent","SDK","Platform","OS","version","recoverStateOnReconnect","setActiveChannel","newChannel","appSettings","chatContext","userLanguage","user","language","DEFAULT_USER_LANGUAGE","Chat"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren, useEffect, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport Dayjs from 'dayjs';\n\nimport type { Channel } from 'stream-chat';\n\nimport { useAppSettings } from './hooks/useAppSettings';\nimport { useCreateChatContext } from './hooks/useCreateChatContext';\nimport { useIsOnline } from './hooks/useIsOnline';\nimport { useMutedUsers } from './hooks/useMutedUsers';\n\nimport { ChatContextValue, ChatProvider } from '../../contexts/chatContext/ChatContext';\nimport { useOverlayContext } from '../../contexts/overlayContext/OverlayContext';\nimport { DeepPartial, ThemeProvider } from '../../contexts/themeContext/ThemeContext';\nimport type { Theme } from '../../contexts/themeContext/utils/theme';\nimport {\n DEFAULT_USER_LANGUAGE,\n TranslationProvider,\n TranslatorFunctions,\n} from '../../contexts/translationContext/TranslationContext';\nimport { useStreami18n } from '../../hooks/useStreami18n';\nimport init from '../../init';\n\nimport { SDK } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport type { Streami18n } from '../../utils/Streami18n';\nimport { version } from '../../version.json';\n\ninit();\n\nexport type ChatProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChatContextValue<StreamChatGenerics>, 'client'> & {\n /**\n * When false, ws connection won't be disconnection upon backgrounding the app.\n * To receive push notifications, its necessary that user doesn't have active\n * websocket connection. So by default, we disconnect websocket connection when\n * app goes to background, and reconnect when app comes to foreground.\n */\n closeConnectionOnBackground?: boolean;\n /**\n * Instance of Streami18n class should be provided to Chat component to enable internationalization.\n *\n * Stream provides following list of in-built translations:\n * 1. English (en)\n * 2. Dutch (nl)\n * 3. ...\n * 4. ...\n *\n * Simplest way to start using chat components in one of the in-built languages would be following:\n *\n * ```\n * const i18n = new Streami18n('nl');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * If you would like to override certain keys in in-built translation.\n * UI will be automatically updated in this case.\n *\n * ```\n * const i18n = new Streami18n('nl');\n *\n * i18n.registerTranslation('nl', {\n * 'Nothing yet...': 'Nog Niet ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} en {{ secondUser }} zijn aan het typen...',\n * });\n *\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n *\n * You can use the same function to add whole new language.\n *\n * ```\n * const i18n = new Streami18n('it');\n *\n * i18n.registerTranslation('it', {\n * 'Nothing yet...': 'Non ancora ...',\n * '{{ firstUser }} and {{ secondUser }} are typing...': '{{ firstUser }} a {{ secondUser }} stanno scrivendo...',\n * });\n *\n * // Make sure to call setLanguage to reflect new language in UI.\n * i18n.setLanguage('it');\n * <Chat client={chatClient} i18nInstance={i18n}>\n * ...\n * </Chat>\n * ```\n */\n i18nInstance?: Streami18n;\n /**\n * You can pass the theme object to customize the styles of Chat components. You can check the default theme in [theme.ts](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/contexts/themeContext/utils/theme.ts)\n *\n * Please check section about [themes in cookbook](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#theme) for details.\n *\n * ```\n * import type { DeepPartial, Theme } from 'stream-chat-react-native';\n *\n * const theme: DeepPartial<Theme> = {\n * messageSimple: {\n * file: {\n * container: {\n * backgroundColor: 'red',\n * },\n * icon: {\n * height: 16,\n * width: 16,\n * },\n * },\n * },\n * };\n *\n * <Chat style={theme}>\n * </Chat>\n * ```\n *\n * @overrideType object\n */\n style?: DeepPartial<Theme>;\n};\n\nconst ChatWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { children, client, closeConnectionOnBackground = true, i18nInstance, style } = props;\n\n const [channel, setChannel] = useState<Channel<StreamChatGenerics>>();\n const [translators, setTranslators] = useState<TranslatorFunctions>({\n t: (key: string) => key,\n tDateTimeParser: (input?: string | number | Date) => Dayjs(input),\n });\n\n /**\n * Setup translators\n */\n const loadingTranslators = useStreami18n({ i18nInstance, setTranslators });\n\n /**\n * Setup connection event listeners\n */\n const { connectionRecovering, isOnline } = useIsOnline<StreamChatGenerics>(\n client,\n closeConnectionOnBackground,\n );\n\n /**\n * Setup muted user listener\n */\n const mutedUsers = useMutedUsers<StreamChatGenerics>(client);\n\n useEffect(() => {\n if (client.setUserAgent) {\n client.setUserAgent(`${SDK}-${Platform.OS}-${version}`);\n // This is to disable recovery related logic in js client, since we handle it in this SDK\n client.recoverStateOnReconnect = false;\n }\n }, []);\n\n const setActiveChannel = (newChannel?: Channel<StreamChatGenerics>) => setChannel(newChannel);\n\n const appSettings = useAppSettings(client, isOnline);\n\n const chatContext = useCreateChatContext({\n appSettings,\n channel,\n client,\n connectionRecovering,\n isOnline,\n mutedUsers,\n setActiveChannel,\n });\n\n if (loadingTranslators) return null;\n\n return (\n <ChatProvider<StreamChatGenerics> value={chatContext}>\n <TranslationProvider\n value={{ ...translators, userLanguage: client.user?.language || DEFAULT_USER_LANGUAGE }}\n >\n <ThemeProvider style={style}>{children}</ThemeProvider>\n </TranslationProvider>\n </ChatProvider>\n );\n};\n\n/**\n * Chat - Wrapper component for Chat. The needs to be placed around any other chat components.\n * This Chat component provides the ChatContext to all other components.\n *\n * The ChatContext provides the following props:\n *\n * - channel - currently active channel\n * - client - client connection\n * - connectionRecovering - whether or not websocket is reconnecting\n * - isOnline - whether or not set user is active\n * - setActiveChannel - function to set the currently active channel\n *\n * The Chat Component takes the following generics in order:\n * - At (AttachmentType) - custom Attachment object extension\n * - Ct (ChannelType) - custom Channel object extension\n * - Co (CommandType) - custom Command string union extension\n * - Ev (EventType) - custom Event object extension\n * - Me (MessageType) - custom Message object extension\n * - Re (ReactionType) - custom Reaction object extension\n * - Us (UserType) - custom User object extension\n */\nexport const Chat = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: PropsWithChildren<ChatProps<StreamChatGenerics>>,\n) => {\n const { style } = useOverlayContext();\n\n return <ChatWithContext {...{ style }} {...props} />;\n};\n"]}