stream-chat-react-native-core 5.27.0-beta.8 → 5.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/lib/commonjs/components/Attachment/Gallery.js +4 -4
  2. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  3. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +1 -1
  4. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  5. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +100 -37
  6. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  7. package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js +3 -1
  8. package/lib/commonjs/components/Chat/hooks/useSyncDatabase.js.map +1 -1
  9. package/lib/commonjs/components/ImageGallery/ImageGallery.js +39 -21
  10. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  11. package/lib/commonjs/components/MessageList/MessageList.js +22 -21
  12. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  13. package/lib/commonjs/i18n/es.json +17 -17
  14. package/lib/commonjs/i18n/fr.json +17 -17
  15. package/lib/commonjs/i18n/he.json +17 -17
  16. package/lib/commonjs/i18n/hi.json +17 -17
  17. package/lib/commonjs/i18n/it.json +17 -17
  18. package/lib/commonjs/i18n/ja.json +17 -17
  19. package/lib/commonjs/i18n/ko.json +17 -17
  20. package/lib/commonjs/i18n/nl.json +17 -17
  21. package/lib/commonjs/i18n/pt-BR.json +17 -17
  22. package/lib/commonjs/i18n/ru.json +17 -17
  23. package/lib/commonjs/i18n/tr.json +17 -17
  24. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js +21 -0
  25. package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js.map +1 -0
  26. package/lib/commonjs/store/mappers/mapChannelToStorable.js +63 -0
  27. package/lib/commonjs/store/mappers/mapChannelToStorable.js.map +1 -0
  28. package/lib/commonjs/utils/DBSyncManager.js +73 -68
  29. package/lib/commonjs/utils/DBSyncManager.js.map +1 -1
  30. package/lib/commonjs/version.json +1 -1
  31. package/lib/module/components/Attachment/Gallery.js +4 -4
  32. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  33. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +1 -1
  34. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  35. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +100 -37
  36. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  37. package/lib/module/components/Chat/hooks/useSyncDatabase.js +3 -1
  38. package/lib/module/components/Chat/hooks/useSyncDatabase.js.map +1 -1
  39. package/lib/module/components/ImageGallery/ImageGallery.js +39 -21
  40. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  41. package/lib/module/components/MessageList/MessageList.js +22 -21
  42. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  43. package/lib/module/i18n/es.json +17 -17
  44. package/lib/module/i18n/fr.json +17 -17
  45. package/lib/module/i18n/he.json +17 -17
  46. package/lib/module/i18n/hi.json +17 -17
  47. package/lib/module/i18n/it.json +17 -17
  48. package/lib/module/i18n/ja.json +17 -17
  49. package/lib/module/i18n/ko.json +17 -17
  50. package/lib/module/i18n/nl.json +17 -17
  51. package/lib/module/i18n/pt-BR.json +17 -17
  52. package/lib/module/i18n/ru.json +17 -17
  53. package/lib/module/i18n/tr.json +17 -17
  54. package/lib/module/store/apis/upsertChannelDataFromChannel.js +21 -0
  55. package/lib/module/store/apis/upsertChannelDataFromChannel.js.map +1 -0
  56. package/lib/module/store/mappers/mapChannelToStorable.js +63 -0
  57. package/lib/module/store/mappers/mapChannelToStorable.js.map +1 -0
  58. package/lib/module/utils/DBSyncManager.js +73 -68
  59. package/lib/module/utils/DBSyncManager.js.map +1 -1
  60. package/lib/module/version.json +1 -1
  61. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts +4 -2
  62. package/lib/typescript/i18n/es.json +17 -17
  63. package/lib/typescript/i18n/fr.json +17 -17
  64. package/lib/typescript/i18n/he.json +17 -17
  65. package/lib/typescript/i18n/hi.json +17 -17
  66. package/lib/typescript/i18n/it.json +17 -17
  67. package/lib/typescript/i18n/ja.json +17 -17
  68. package/lib/typescript/i18n/ko.json +17 -17
  69. package/lib/typescript/i18n/nl.json +17 -17
  70. package/lib/typescript/i18n/pt-BR.json +17 -17
  71. package/lib/typescript/i18n/ru.json +17 -17
  72. package/lib/typescript/i18n/tr.json +17 -17
  73. package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts +6 -0
  74. package/lib/typescript/store/mappers/mapChannelToStorable.d.ts +4 -0
  75. package/lib/typescript/utils/DBSyncManager.d.ts +1 -1
  76. package/package.json +1 -1
  77. package/src/components/Attachment/Gallery.tsx +5 -5
  78. package/src/components/AttachmentPicker/AttachmentPicker.tsx +1 -1
  79. package/src/components/Chat/hooks/handleEventToSyncDB.ts +132 -46
  80. package/src/components/Chat/hooks/useSyncDatabase.ts +1 -1
  81. package/src/components/ImageGallery/ImageGallery.tsx +25 -2
  82. package/src/components/MessageList/MessageList.tsx +4 -2
  83. package/src/i18n/es.json +17 -17
  84. package/src/i18n/fr.json +17 -17
  85. package/src/i18n/he.json +17 -17
  86. package/src/i18n/hi.json +17 -17
  87. package/src/i18n/it.json +17 -17
  88. package/src/i18n/ja.json +17 -17
  89. package/src/i18n/ko.json +17 -17
  90. package/src/i18n/nl.json +17 -17
  91. package/src/i18n/pt-BR.json +17 -17
  92. package/src/i18n/ru.json +17 -17
  93. package/src/i18n/tr.json +17 -17
  94. package/src/store/apis/upsertChannelDataFromChannel.ts +25 -0
  95. package/src/store/mappers/mapChannelToStorable.ts +68 -0
  96. package/src/utils/DBSyncManager.ts +7 -3
  97. package/src/version.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["_deleteChannel","require","_deleteMember","_deleteMessagesForChannel","_updateMessage","_upsertChannelData","_upsertChannels","_upsertMembers","_upsertMessages","_upsertReads","handleEventToSyncDB","event","flush","type","_event$user","user","id","cid","upsertReads","reads","last_read","received_at","unread_messages","message","parent_id","show_in_channel","upsertMessages","messages","updateMessage","reaction","channel","upsertChannelData","deleteChannel","deleteMessagesForChannel","_event$queriedChannel","_event$queriedChannel2","queriedChannels","channels","length","_event$queriedChannel3","_event$queriedChannel4","upsertChannels","isLatestMessagesSet","isLatestMessageSet","member","upsertMembers","members","deleteMember","exports"],"sources":["handleEventToSyncDB.ts"],"sourcesContent":["import type { Event } from 'stream-chat';\n\nimport { deleteChannel } from '../../../store/apis/deleteChannel';\nimport { deleteMember } from '../../../store/apis/deleteMember';\nimport { deleteMessagesForChannel } from '../../../store/apis/deleteMessagesForChannel';\nimport { updateMessage } from '../../../store/apis/updateMessage';\nimport { upsertChannelData } from '../../../store/apis/upsertChannelData';\nimport { upsertChannels } from '../../../store/apis/upsertChannels';\nimport { upsertMembers } from '../../../store/apis/upsertMembers';\nimport { upsertMessages } from '../../../store/apis/upsertMessages';\nimport { upsertReads } from '../../../store/apis/upsertReads';\n\nexport const handleEventToSyncDB = (event: Event, flush?: boolean) => {\n const { type } = event;\n\n if (type === 'message.read') {\n if (event.user?.id && event.cid) {\n return upsertReads({\n cid: event.cid,\n flush,\n reads: [\n {\n last_read: event.received_at as string,\n unread_messages: 0,\n user: event.user,\n },\n ],\n });\n }\n }\n\n if (type === 'message.new') {\n if (event.message && (!event.message.parent_id || event.message.show_in_channel)) {\n return upsertMessages({\n flush,\n messages: [event.message],\n });\n }\n }\n\n if (type === 'message.updated' || type === 'message.deleted') {\n if (event.message && !event.message.parent_id) {\n // Update only if it exists, otherwise event could be related\n // to a message which is not in database.\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (type === 'reaction.updated') {\n if (event.message && event.reaction) {\n // We update the entire message to make sure we also update\n // reaction_counts.\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (type === 'reaction.new' || type === 'reaction.deleted') {\n if (event.message && !event.message.parent_id) {\n // Here we are relying on the fact message.latest_reactions always includes\n // the new reaction. So we first delete all the existing reactions and populate\n // the reactions table with message.latest_reactions\n return updateMessage({\n flush,\n message: event.message,\n });\n }\n }\n\n if (\n type === 'channel.updated' ||\n type === 'channel.visible' ||\n type === 'notification.added_to_channel' ||\n type === 'notification.message_new'\n ) {\n if (event.channel) {\n return upsertChannelData({\n channel: event.channel,\n flush,\n });\n }\n }\n\n if (\n type === 'channel.hidden' ||\n type === 'channel.deleted' ||\n type === 'notification.removed_from_channel'\n ) {\n if (event.channel) {\n return deleteChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channel.truncated') {\n if (event.channel) {\n return deleteMessagesForChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channels.queried') {\n if (event.queriedChannels?.channels?.length) {\n return upsertChannels({\n channels: event.queriedChannels?.channels,\n flush,\n isLatestMessagesSet: event.queriedChannels?.isLatestMessageSet,\n });\n }\n }\n\n if (type === 'member.added' || type === 'member.updated') {\n if (event.member && event.cid) {\n return upsertMembers({\n cid: event.cid,\n flush,\n members: [event.member],\n });\n }\n }\n\n if (type === 'member.removed') {\n if (event.member && event.cid) {\n return deleteMember({\n cid: event.cid,\n flush,\n member: event.member,\n });\n }\n }\n\n return [];\n};\n"],"mappings":";;;;AAEA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,aAAA,GAAAD,OAAA;AACA,IAAAE,yBAAA,GAAAF,OAAA;AACA,IAAAG,cAAA,GAAAH,OAAA;AACA,IAAAI,kBAAA,GAAAJ,OAAA;AACA,IAAAK,eAAA,GAAAL,OAAA;AACA,IAAAM,cAAA,GAAAN,OAAA;AACA,IAAAO,eAAA,GAAAP,OAAA;AACA,IAAAQ,YAAA,GAAAR,OAAA;AAEO,IAAMS,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIC,KAAY,EAAEC,KAAe,EAAK;EACpE,IAAQC,IAAI,GAAKF,KAAK,CAAdE,IAAI;EAEZ,IAAIA,IAAI,KAAK,cAAc,EAAE;IAAA,IAAAC,WAAA;IAC3B,IAAI,CAAAA,WAAA,GAAAH,KAAK,CAACI,IAAI,aAAVD,WAAA,CAAYE,EAAE,IAAIL,KAAK,CAACM,GAAG,EAAE;MAC/B,OAAO,IAAAC,wBAAW,EAAC;QACjBD,GAAG,EAAEN,KAAK,CAACM,GAAG;QACdL,KAAK,EAALA,KAAK;QACLO,KAAK,EAAE,CACL;UACEC,SAAS,EAAET,KAAK,CAACU,WAAqB;UACtCC,eAAe,EAAE,CAAC;UAClBP,IAAI,EAAEJ,KAAK,CAACI;QACd,CAAC;MAEL,CAAC,CAAC;IACJ;EACF;EAEA,IAAIF,IAAI,KAAK,aAAa,EAAE;IAC1B,IAAIF,KAAK,CAACY,OAAO,KAAK,CAACZ,KAAK,CAACY,OAAO,CAACC,SAAS,IAAIb,KAAK,CAACY,OAAO,CAACE,eAAe,CAAC,EAAE;MAChF,OAAO,IAAAC,8BAAc,EAAC;QACpBd,KAAK,EAALA,KAAK;QACLe,QAAQ,EAAE,CAAChB,KAAK,CAACY,OAAO;MAC1B,CAAC,CAAC;IACJ;EACF;EAEA,IAAIV,IAAI,KAAK,iBAAiB,IAAIA,IAAI,KAAK,iBAAiB,EAAE;IAC5D,IAAIF,KAAK,CAACY,OAAO,IAAI,CAACZ,KAAK,CAACY,OAAO,CAACC,SAAS,EAAE;MAG7C,OAAO,IAAAI,4BAAa,EAAC;QACnBhB,KAAK,EAALA,KAAK;QACLW,OAAO,EAAEZ,KAAK,CAACY;MACjB,CAAC,CAAC;IACJ;EACF;EAEA,IAAIV,IAAI,KAAK,kBAAkB,EAAE;IAC/B,IAAIF,KAAK,CAACY,OAAO,IAAIZ,KAAK,CAACkB,QAAQ,EAAE;MAGnC,OAAO,IAAAD,4BAAa,EAAC;QACnBhB,KAAK,EAALA,KAAK;QACLW,OAAO,EAAEZ,KAAK,CAACY;MACjB,CAAC,CAAC;IACJ;EACF;EAEA,IAAIV,IAAI,KAAK,cAAc,IAAIA,IAAI,KAAK,kBAAkB,EAAE;IAC1D,IAAIF,KAAK,CAACY,OAAO,IAAI,CAACZ,KAAK,CAACY,OAAO,CAACC,SAAS,EAAE;MAI7C,OAAO,IAAAI,4BAAa,EAAC;QACnBhB,KAAK,EAALA,KAAK;QACLW,OAAO,EAAEZ,KAAK,CAACY;MACjB,CAAC,CAAC;IACJ;EACF;EAEA,IACEV,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,+BAA+B,IACxCA,IAAI,KAAK,0BAA0B,EACnC;IACA,IAAIF,KAAK,CAACmB,OAAO,EAAE;MACjB,OAAO,IAAAC,oCAAiB,EAAC;QACvBD,OAAO,EAAEnB,KAAK,CAACmB,OAAO;QACtBlB,KAAK,EAALA;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IACEC,IAAI,KAAK,gBAAgB,IACzBA,IAAI,KAAK,iBAAiB,IAC1BA,IAAI,KAAK,mCAAmC,EAC5C;IACA,IAAIF,KAAK,CAACmB,OAAO,EAAE;MACjB,OAAO,IAAAE,4BAAa,EAAC;QACnBf,GAAG,EAAEN,KAAK,CAACmB,OAAO,CAACb,GAAG;QACtBL,KAAK,EAALA;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IAAIC,IAAI,KAAK,mBAAmB,EAAE;IAChC,IAAIF,KAAK,CAACmB,OAAO,EAAE;MACjB,OAAO,IAAAG,kDAAwB,EAAC;QAC9BhB,GAAG,EAAEN,KAAK,CAACmB,OAAO,CAACb,GAAG;QACtBL,KAAK,EAALA;MACF,CAAC,CAAC;IACJ;EACF;EAEA,IAAIC,IAAI,KAAK,kBAAkB,EAAE;IAAA,IAAAqB,qBAAA,EAAAC,sBAAA;IAC/B,KAAAD,qBAAA,GAAIvB,KAAK,CAACyB,eAAe,cAAAD,sBAAA,GAArBD,qBAAA,CAAuBG,QAAQ,aAA/BF,sBAAA,CAAiCG,MAAM,EAAE;MAAA,IAAAC,sBAAA,EAAAC,sBAAA;MAC3C,OAAO,IAAAC,8BAAc,EAAC;QACpBJ,QAAQ,GAAAE,sBAAA,GAAE5B,KAAK,CAACyB,eAAe,qBAArBG,sBAAA,CAAuBF,QAAQ;QACzCzB,KAAK,EAALA,KAAK;QACL8B,mBAAmB,GAAAF,sBAAA,GAAE7B,KAAK,CAACyB,eAAe,qBAArBI,sBAAA,CAAuBG;MAC9C,CAAC,CAAC;IACJ;EACF;EAEA,IAAI9B,IAAI,KAAK,cAAc,IAAIA,IAAI,KAAK,gBAAgB,EAAE;IACxD,IAAIF,KAAK,CAACiC,MAAM,IAAIjC,KAAK,CAACM,GAAG,EAAE;MAC7B,OAAO,IAAA4B,4BAAa,EAAC;QACnB5B,GAAG,EAAEN,KAAK,CAACM,GAAG;QACdL,KAAK,EAALA,KAAK;QACLkC,OAAO,EAAE,CAACnC,KAAK,CAACiC,MAAM;MACxB,CAAC,CAAC;IACJ;EACF;EAEA,IAAI/B,IAAI,KAAK,gBAAgB,EAAE;IAC7B,IAAIF,KAAK,CAACiC,MAAM,IAAIjC,KAAK,CAACM,GAAG,EAAE;MAC7B,OAAO,IAAA8B,0BAAY,EAAC;QAClB9B,GAAG,EAAEN,KAAK,CAACM,GAAG;QACdL,KAAK,EAALA,KAAK;QACLgC,MAAM,EAAEjC,KAAK,CAACiC;MAChB,CAAC,CAAC;IACJ;EACF;EAEA,OAAO,EAAE;AACX,CAAC;AAACI,OAAA,CAAAtC,mBAAA,GAAAA,mBAAA"}
1
+ {"version":3,"names":["_deleteChannel","require","_deleteMember","_deleteMessagesForChannel","_updateMessage","_upsertChannelData","_upsertChannelDataFromChannel","_upsertChannels","_upsertMembers","_upsertMessages","_upsertReads","_QuickSqliteClient","_createSelectQuery","handleEventToSyncDB","event","client","flush","type","queriesWithChannelGuard","createQueries","_event$channel","cid","channel","channels","QuickSqliteClient","executeSql","apply","createSelectQuery","length","channel_type","channel_id","undefined","initialized","disconnected","channelQuery","upsertChannelDataFromChannel","newQueries","concat","_toConsumableArray2","executeSqlBatch","console","warn","user","id","flushOverride","upsertReads","reads","last_read","received_at","unread_messages","message","parent_id","show_in_channel","upsertMessages","messages","updateMessage","reaction","upsertChannelData","deleteChannel","deleteMessagesForChannel","_event$queriedChannel","_event$queriedChannel2","queriedChannels","_event$queriedChannel3","_event$queriedChannel4","upsertChannels","isLatestMessagesSet","isLatestMessageSet","member","upsertMembers","members","deleteMember","exports"],"sources":["handleEventToSyncDB.ts"],"sourcesContent":["import { DefaultStreamChatGenerics } from 'src/types/types';\nimport type { Event, StreamChat } from 'stream-chat';\n\nimport { deleteChannel } from '../../../store/apis/deleteChannel';\nimport { deleteMember } from '../../../store/apis/deleteMember';\nimport { deleteMessagesForChannel } from '../../../store/apis/deleteMessagesForChannel';\nimport { updateMessage } from '../../../store/apis/updateMessage';\nimport { upsertChannelData } from '../../../store/apis/upsertChannelData';\nimport { upsertChannelDataFromChannel } from '../../../store/apis/upsertChannelDataFromChannel';\nimport { upsertChannels } from '../../../store/apis/upsertChannels';\nimport { upsertMembers } from '../../../store/apis/upsertMembers';\nimport { upsertMessages } from '../../../store/apis/upsertMessages';\nimport { upsertReads } from '../../../store/apis/upsertReads';\nimport { QuickSqliteClient } from '../../../store/QuickSqliteClient';\nimport { createSelectQuery } from '../../../store/sqlite-utils/createSelectQuery';\nimport { PreparedQueries } from '../../../store/types';\n\nexport const handleEventToSyncDB = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n event: Event,\n client: StreamChat<StreamChatGenerics>,\n flush?: boolean,\n) => {\n const { type } = event;\n\n // This function is used to guard the queries that require channel to be present in the db first\n // If channel is not present in the db, we first fetch the channel data from the channel object\n // and then add the queries with a channel create query first\n const queriesWithChannelGuard = (\n createQueries: (flushOverride?: boolean) => PreparedQueries[],\n ) => {\n const cid = event.cid || event.channel?.cid;\n\n if (!cid) return createQueries(flush);\n const channels = QuickSqliteClient.executeSql.apply(\n null,\n createSelectQuery('channels', ['cid'], {\n cid,\n }),\n );\n // a channel is not present in the db, we first fetch the channel data from the channel object.\n // this can happen for example when a message.new event is received for a channel that is not in the db due to a channel being hidden.\n if (channels.length === 0) {\n const channel =\n event.channel_type && event.channel_id\n ? client.channel(event.channel_type, event.channel_id)\n : undefined;\n if (channel && channel.initialized && !channel.disconnected) {\n const channelQuery = upsertChannelDataFromChannel({\n channel,\n flush,\n });\n if (channelQuery) {\n const newQueries = [...channelQuery, ...createQueries(false)];\n if (flush !== false) {\n QuickSqliteClient.executeSqlBatch(newQueries);\n }\n return newQueries;\n } else {\n console.warn(\n `Couldnt create channel queries on ${type} event for an initialized channel that is not in DB, skipping event`,\n { event },\n );\n return [];\n }\n } else {\n console.warn(\n `Received ${type} event for a non initialized channel that is not in DB, skipping event`,\n { event },\n );\n return [];\n }\n }\n return createQueries(flush);\n };\n\n if (type === 'message.read') {\n const cid = event.cid;\n const user = event.user;\n if (user?.id && cid) {\n return queriesWithChannelGuard((flushOverride) =>\n upsertReads({\n cid,\n flush: flushOverride,\n reads: [\n {\n last_read: event.received_at as string,\n unread_messages: 0,\n user,\n },\n ],\n }),\n );\n }\n }\n\n if (type === 'message.new') {\n const message = event.message;\n if (message && (!message.parent_id || message.show_in_channel)) {\n return queriesWithChannelGuard((flushOverride) =>\n upsertMessages({\n flush: flushOverride,\n messages: [message],\n }),\n );\n }\n }\n\n if (type === 'message.updated' || type === 'message.deleted') {\n const message = event.message;\n if (message && !message.parent_id) {\n // Update only if it exists, otherwise event could be related\n // to a message which is not in database.\n return queriesWithChannelGuard((flushOverride) =>\n updateMessage({\n flush: flushOverride,\n message,\n }),\n );\n }\n }\n\n if (type === 'reaction.updated') {\n const message = event.message;\n if (message && event.reaction) {\n // We update the entire message to make sure we also update\n // reaction_counts.\n return queriesWithChannelGuard((flushOverride) =>\n updateMessage({\n flush: flushOverride,\n message,\n }),\n );\n }\n }\n\n if (type === 'reaction.new' || type === 'reaction.deleted') {\n const message = event.message;\n if (message && !message.parent_id) {\n // Here we are relying on the fact message.latest_reactions always includes\n // the new reaction. So we first delete all the existing reactions and populate\n // the reactions table with message.latest_reactions\n return queriesWithChannelGuard((flushOverride) =>\n updateMessage({\n flush: flushOverride,\n message,\n }),\n );\n }\n }\n\n if (\n type === 'channel.updated' ||\n type === 'channel.visible' ||\n type === 'notification.added_to_channel' ||\n type === 'notification.message_new'\n ) {\n if (event.channel) {\n return upsertChannelData({\n channel: event.channel,\n flush,\n });\n }\n }\n\n if (\n type === 'channel.hidden' ||\n type === 'channel.deleted' ||\n type === 'notification.removed_from_channel'\n ) {\n if (event.channel) {\n return deleteChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channel.truncated') {\n if (event.channel) {\n return deleteMessagesForChannel({\n cid: event.channel.cid,\n flush,\n });\n }\n }\n\n if (type === 'channels.queried') {\n if (event.queriedChannels?.channels?.length) {\n return upsertChannels({\n channels: event.queriedChannels?.channels,\n flush,\n isLatestMessagesSet: event.queriedChannels?.isLatestMessageSet,\n });\n }\n }\n\n if (type === 'member.added' || type === 'member.updated') {\n const member = event.member;\n const cid = event.cid;\n if (member && cid) {\n return queriesWithChannelGuard((flushOverride) =>\n upsertMembers({\n cid,\n flush: flushOverride,\n members: [member],\n }),\n );\n }\n }\n\n if (type === 'member.removed') {\n const member = event.member;\n const cid = event.cid;\n if (member && cid) {\n return queriesWithChannelGuard((flushOverride) =>\n deleteMember({\n cid,\n flush: flushOverride,\n member,\n }),\n );\n }\n }\n\n return [];\n};\n"],"mappings":"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"}
@@ -11,7 +11,9 @@ var useSyncDatabase = function useSyncDatabase(_ref) {
11
11
  (0, _react.useEffect)(function () {
12
12
  var listener;
13
13
  if (enableOfflineSupport && initialisedDatabase) {
14
- listener = client == null ? void 0 : client.on(_handleEventToSyncDB.handleEventToSyncDB);
14
+ listener = client == null ? void 0 : client.on(function (event) {
15
+ return (0, _handleEventToSyncDB.handleEventToSyncDB)(event, client);
16
+ });
15
17
  }
16
18
  return function () {
17
19
  var _listener;
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_handleEventToSyncDB","useSyncDatabase","_ref","client","enableOfflineSupport","initialisedDatabase","useEffect","listener","on","handleEventToSyncDB","_listener","unsubscribe","exports"],"sources":["useSyncDatabase.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport type { StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from './handleEventToSyncDB';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype Params<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {\n client: StreamChat<StreamChatGenerics>;\n enableOfflineSupport: boolean;\n initialisedDatabase: boolean;\n};\nexport const useSyncDatabase = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n client,\n enableOfflineSupport,\n initialisedDatabase,\n}: Params<StreamChatGenerics>) => {\n useEffect(() => {\n let listener: ReturnType<StreamChat['on']> | undefined;\n\n if (enableOfflineSupport && initialisedDatabase) {\n listener = client?.on(handleEventToSyncDB);\n }\n\n return () => {\n listener?.unsubscribe();\n };\n }, [client, initialisedDatabase]);\n};\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,oBAAA,GAAAD,OAAA;AASO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAAC,IAAA,EAMM;EAAA,IAHhCC,MAAM,GAAAD,IAAA,CAANC,MAAM;IACNC,oBAAoB,GAAAF,IAAA,CAApBE,oBAAoB;IACpBC,mBAAmB,GAAAH,IAAA,CAAnBG,mBAAmB;EAEnB,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAIC,QAAkD;IAEtD,IAAIH,oBAAoB,IAAIC,mBAAmB,EAAE;MAC/CE,QAAQ,GAAGJ,MAAM,oBAANA,MAAM,CAAEK,EAAE,CAACC,wCAAmB,CAAC;IAC5C;IAEA,OAAO,YAAM;MAAA,IAAAC,SAAA;MACX,CAAAA,SAAA,GAAAH,QAAQ,qBAARG,SAAA,CAAUC,WAAW,CAAC,CAAC;IACzB,CAAC;EACH,CAAC,EAAE,CAACR,MAAM,EAAEE,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAACO,OAAA,CAAAX,eAAA,GAAAA,eAAA"}
1
+ {"version":3,"names":["_react","require","_handleEventToSyncDB","useSyncDatabase","_ref","client","enableOfflineSupport","initialisedDatabase","useEffect","listener","on","event","handleEventToSyncDB","_listener","unsubscribe","exports"],"sources":["useSyncDatabase.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport type { StreamChat } from 'stream-chat';\n\nimport { handleEventToSyncDB } from './handleEventToSyncDB';\n\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\ntype Params<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {\n client: StreamChat<StreamChatGenerics>;\n enableOfflineSupport: boolean;\n initialisedDatabase: boolean;\n};\nexport const useSyncDatabase = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n client,\n enableOfflineSupport,\n initialisedDatabase,\n}: Params<StreamChatGenerics>) => {\n useEffect(() => {\n let listener: ReturnType<StreamChat['on']> | undefined;\n\n if (enableOfflineSupport && initialisedDatabase) {\n listener = client?.on((event) => handleEventToSyncDB(event, client));\n }\n\n return () => {\n listener?.unsubscribe();\n };\n }, [client, initialisedDatabase]);\n};\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAIA,IAAAC,oBAAA,GAAAD,OAAA;AASO,IAAME,eAAe,GAAG,SAAlBA,eAAeA,CAAAC,IAAA,EAMM;EAAA,IAHhCC,MAAM,GAAAD,IAAA,CAANC,MAAM;IACNC,oBAAoB,GAAAF,IAAA,CAApBE,oBAAoB;IACpBC,mBAAmB,GAAAH,IAAA,CAAnBG,mBAAmB;EAEnB,IAAAC,gBAAS,EAAC,YAAM;IACd,IAAIC,QAAkD;IAEtD,IAAIH,oBAAoB,IAAIC,mBAAmB,EAAE;MAC/CE,QAAQ,GAAGJ,MAAM,oBAANA,MAAM,CAAEK,EAAE,CAAC,UAACC,KAAK;QAAA,OAAK,IAAAC,wCAAmB,EAACD,KAAK,EAAEN,MAAM,CAAC;MAAA,EAAC;IACtE;IAEA,OAAO,YAAM;MAAA,IAAAQ,SAAA;MACX,CAAAA,SAAA,GAAAJ,QAAQ,qBAARI,SAAA,CAAUC,WAAW,CAAC,CAAC;IACzB,CAAC;EACH,CAAC,EAAE,CAACT,MAAM,EAAEE,mBAAmB,CAAC,CAAC;AACnC,CAAC;AAACQ,OAAA,CAAAZ,eAAA,GAAAA,eAAA"}
@@ -48,6 +48,24 @@ var IsSwiping = function (IsSwiping) {
48
48
  return IsSwiping;
49
49
  }({});
50
50
  exports.IsSwiping = IsSwiping;
51
+ var normalizeSnapPoints = function normalizeSnapPoints(input) {
52
+ var snapPoints = input ? 'value' in input ? input.value : input : [];
53
+ return snapPoints.map(function (snapPoint) {
54
+ if (typeof snapPoint === 'number') {
55
+ return Math.max(0, snapPoint);
56
+ } else {
57
+ var numericValue = Number(snapPoint.replace('%', ''));
58
+ var isPercentage = snapPoint.includes('%');
59
+ if (isNaN(numericValue)) {
60
+ return 0;
61
+ } else if (isPercentage) {
62
+ return Math.max(0, numericValue) + "%";
63
+ } else {
64
+ return Math.max(0, numericValue);
65
+ }
66
+ }
67
+ });
68
+ };
51
69
  var ImageGallery = function ImageGallery(props) {
52
70
  var _StatusBar$currentHei, _imageGalleryAttachme;
53
71
  var _props$autoPlayVideo = props.autoPlayVideo,
@@ -329,7 +347,7 @@ var ImageGallery = function ImageGallery(props) {
329
347
  __self: _this,
330
348
  __source: {
331
349
  fileName: _jsxFileName,
332
- lineNumber: 540,
350
+ lineNumber: 563,
333
351
  columnNumber: 5
334
352
  }
335
353
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -337,7 +355,7 @@ var ImageGallery = function ImageGallery(props) {
337
355
  __self: _this,
338
356
  __source: {
339
357
  fileName: _jsxFileName,
340
- lineNumber: 545,
358
+ lineNumber: 568,
341
359
  columnNumber: 7
342
360
  }
343
361
  }), _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
@@ -349,7 +367,7 @@ var ImageGallery = function ImageGallery(props) {
349
367
  __self: _this,
350
368
  __source: {
351
369
  fileName: _jsxFileName,
352
- lineNumber: 546,
370
+ lineNumber: 569,
353
371
  columnNumber: 7
354
372
  }
355
373
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -357,7 +375,7 @@ var ImageGallery = function ImageGallery(props) {
357
375
  __self: _this,
358
376
  __source: {
359
377
  fileName: _jsxFileName,
360
- lineNumber: 553,
378
+ lineNumber: 576,
361
379
  columnNumber: 9
362
380
  }
363
381
  }, _react["default"].createElement(_reactNativeGestureHandler.TapGestureHandler, {
@@ -371,7 +389,7 @@ var ImageGallery = function ImageGallery(props) {
371
389
  __self: _this,
372
390
  __source: {
373
391
  fileName: _jsxFileName,
374
- lineNumber: 554,
392
+ lineNumber: 577,
375
393
  columnNumber: 11
376
394
  }
377
395
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -379,7 +397,7 @@ var ImageGallery = function ImageGallery(props) {
379
397
  __self: _this,
380
398
  __source: {
381
399
  fileName: _jsxFileName,
382
- lineNumber: 563,
400
+ lineNumber: 586,
383
401
  columnNumber: 13
384
402
  }
385
403
  }, _react["default"].createElement(_reactNativeGestureHandler.PinchGestureHandler, {
@@ -389,7 +407,7 @@ var ImageGallery = function ImageGallery(props) {
389
407
  __self: _this,
390
408
  __source: {
391
409
  fileName: _jsxFileName,
392
- lineNumber: 564,
410
+ lineNumber: 587,
393
411
  columnNumber: 15
394
412
  }
395
413
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -397,7 +415,7 @@ var ImageGallery = function ImageGallery(props) {
397
415
  __self: _this,
398
416
  __source: {
399
417
  fileName: _jsxFileName,
400
- lineNumber: 569,
418
+ lineNumber: 592,
401
419
  columnNumber: 17
402
420
  }
403
421
  }, _react["default"].createElement(_reactNativeGestureHandler.PanGestureHandler, {
@@ -410,7 +428,7 @@ var ImageGallery = function ImageGallery(props) {
410
428
  __self: _this,
411
429
  __source: {
412
430
  fileName: _jsxFileName,
413
- lineNumber: 570,
431
+ lineNumber: 593,
414
432
  columnNumber: 19
415
433
  }
416
434
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -418,7 +436,7 @@ var ImageGallery = function ImageGallery(props) {
418
436
  __self: _this,
419
437
  __source: {
420
438
  fileName: _jsxFileName,
421
- lineNumber: 578,
439
+ lineNumber: 601,
422
440
  columnNumber: 21
423
441
  }
424
442
  }, _react["default"].createElement(_reactNativeReanimated["default"].View, {
@@ -426,7 +444,7 @@ var ImageGallery = function ImageGallery(props) {
426
444
  __self: _this,
427
445
  __source: {
428
446
  fileName: _jsxFileName,
429
- lineNumber: 579,
447
+ lineNumber: 602,
430
448
  columnNumber: 23
431
449
  }
432
450
  }, imageGalleryAttachments.map(function (photo, i) {
@@ -459,7 +477,7 @@ var ImageGallery = function ImageGallery(props) {
459
477
  __self: _this,
460
478
  __source: {
461
479
  fileName: _jsxFileName,
462
- lineNumber: 582,
480
+ lineNumber: 605,
463
481
  columnNumber: 29
464
482
  }
465
483
  }) : _react["default"].createElement(_AnimatedGalleryImage.AnimatedGalleryImage, {
@@ -483,7 +501,7 @@ var ImageGallery = function ImageGallery(props) {
483
501
  __self: _this,
484
502
  __source: {
485
503
  fileName: _jsxFileName,
486
- lineNumber: 611,
504
+ lineNumber: 634,
487
505
  columnNumber: 29
488
506
  }
489
507
  });
@@ -495,7 +513,7 @@ var ImageGallery = function ImageGallery(props) {
495
513
  __self: _this,
496
514
  __source: {
497
515
  fileName: _jsxFileName,
498
- lineNumber: 644,
516
+ lineNumber: 667,
499
517
  columnNumber: 7
500
518
  }
501
519
  })), imageGalleryAttachments[selectedIndex] && _react["default"].createElement(_ImageGalleryFooter.ImageGalleryFooter, (0, _extends2["default"])({
@@ -515,7 +533,7 @@ var ImageGallery = function ImageGallery(props) {
515
533
  __self: _this,
516
534
  __source: {
517
535
  fileName: _jsxFileName,
518
- lineNumber: 652,
536
+ lineNumber: 675,
519
537
  columnNumber: 9
520
538
  }
521
539
  })), _react["default"].createElement(_ImageGalleryOverlay.ImageGalleryOverlay, {
@@ -525,14 +543,14 @@ var ImageGallery = function ImageGallery(props) {
525
543
  __self: _this,
526
544
  __source: {
527
545
  fileName: _jsxFileName,
528
- lineNumber: 669,
546
+ lineNumber: 692,
529
547
  columnNumber: 7
530
548
  }
531
549
  }), _react["default"].createElement(_bottomSheet.BottomSheetModalProvider, {
532
550
  __self: _this,
533
551
  __source: {
534
552
  fileName: _jsxFileName,
535
- lineNumber: 674,
553
+ lineNumber: 697,
536
554
  columnNumber: 7
537
555
  }
538
556
  }, _react["default"].createElement(_bottomSheet.BottomSheetModal, {
@@ -545,7 +563,7 @@ var ImageGallery = function ImageGallery(props) {
545
563
  __self: _this,
546
564
  __source: {
547
565
  fileName: _jsxFileName,
548
- lineNumber: 679,
566
+ lineNumber: 702,
549
567
  columnNumber: 13
550
568
  }
551
569
  }));
@@ -556,11 +574,11 @@ var ImageGallery = function ImageGallery(props) {
556
574
  return setCurrentBottomSheetIndex(index);
557
575
  },
558
576
  ref: bottomSheetModalRef,
559
- snapPoints: imageGalleryGridSnapPoints || snapPoints,
577
+ snapPoints: normalizeSnapPoints(imageGalleryGridSnapPoints || snapPoints),
560
578
  __self: _this,
561
579
  __source: {
562
580
  fileName: _jsxFileName,
563
- lineNumber: 675,
581
+ lineNumber: 698,
564
582
  columnNumber: 9
565
583
  }
566
584
  }, _react["default"].createElement(_ImageGrid.ImageGrid, (0, _extends2["default"])({
@@ -572,7 +590,7 @@ var ImageGallery = function ImageGallery(props) {
572
590
  __self: _this,
573
591
  __source: {
574
592
  fileName: _jsxFileName,
575
- lineNumber: 690,
593
+ lineNumber: 713,
576
594
  columnNumber: 11
577
595
  }
578
596
  })))));
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_bottomSheet","_AnimatedGalleryImage","_AnimatedGalleryVideo","_ImageGalleryFooter","_ImageGalleryHeader","_ImageGalleryOverlay","_ImageGrid","_ImageGridHandle","_useImageGalleryGestures","_ImageGalleryContext","_OverlayContext","_ThemeContext","_useViewport2","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_getGiphyMimeType","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isAndroid","Platform","OS","fullScreenHeight","Dimensions","height","MARGIN","HasPinched","exports","IsSwiping","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_props$autoPlayVideo","autoPlayVideo","_props$giphyVersion","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","_useState","useState","_useState2","_slicedToArray2","imageGalleryAttachments","setImageGalleryAttachments","_useTheme","useTheme","_useTheme$theme","theme","white_snow","colors","_useTheme$theme$image","imageGallery","backgroundColor","pager","slide","_useState3","_useState4","gridPhotos","setGridPhotos","_useOverlayContext","useOverlayContext","overlay","translucentStatusBar","_useImageGalleryConte","useImageGalleryContext","messages","selectedMessage","setSelectedMessage","_useViewport","useViewport","vh","vw","measuredScreenHeight","screenWidth","halfScreenWidth","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","snapPoints","React","useMemo","bottomSheetModalRef","useRef","_useState5","_useState6","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","useSharedValue","screenTranslateY","showScreen","value","withTiming","duration","easing","Easing","out","ease","useEffect","Keyboard","dismiss","_useState7","_useState8","currentImageHeight","setCurrentImageHeight","_useState9","_useState10","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","_cur$attachments","attachmentImages","attachments","filter","attachment","_attachment$giphy","_attachment$giphy$gip","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","getUrlOfImageAttachment","isVideoPackageAvailable","reverse","attachmentPhotos","map","a","_a$giphy","_a$giphy$giphyVersion","imageUrl","giphyURL","isInitiallyPaused","channelId","cid","created_at","id","messageId","mime_type","getGiphyMimeType","original_height","original_width","paused","progress","uri","getResizedImageUrl","width","user","user_id","concat","_toConsumableArray2","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","runOnJS","findIndex","photo","runOnUI","uriForCurrentImage","imageHeight","Math","floor","Image","getSize","_useImageGalleryGestu","useImageGalleryGestures","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","useDerivedValue","pagerStyle","useAnimatedStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","_bottomSheetModalRef$","current","close","openGridView","_bottomSheetModalRef$2","present","handleEnd","handlePlayPause","handleProgress","videoRef","handleLoad","prevImageGalleryAttachment","imageGalleryAttachment","_extends2","hasEnd","prevImageGalleryAttachments","pausedStatus","onPlayPause","status","undefined","createElement","View","accessibilityLabel","pointerEvents","style","StyleSheet","absoluteFillObject","__self","__source","fileName","lineNumber","columnNumber","TapGestureHandler","minPointers","numberOfTaps","onGestureEvent","ref","waitFor","maxDeltaX","maxDeltaY","maxDist","PinchGestureHandler","simultaneousHandlers","absoluteFill","PanGestureHandler","enabled","maxPointers","minDist","styles","animatedContainer","i","AnimatedGalleryVideo","attachmentId","previous","repeat","selected","shouldRender","abs","source","marginRight","AnimatedGalleryImage","ImageGalleryHeader","visible","header","ImageGalleryFooter","footer","ImageGalleryOverlay","BottomSheetModalProvider","BottomSheetModal","animatedIndex","enablePanDownToClose","handleComponent","ImageGridHandle","gridHandle","handleHeight","onChange","ImageGrid","grid","clamp","lowerBound","upperBound","min","max","create","alignItems","flexDirection","displayName"],"sources":["ImageGallery.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useViewport } from '../../hooks/useViewport';\nimport { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\n\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n | 'autoPlayVideo'\n >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n autoPlayVideo = false,\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [imageGalleryAttachments, setImageGalleryAttachments] = useState<\n Photo<StreamChatGenerics>[]\n >([]);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { messages, selectedMessage, setSelectedMessage } =\n useImageGalleryContext<StreamChatGenerics>();\n\n const { vh, vw } = useViewport();\n\n const measuredScreenHeight = vh(100);\n const screenWidth = vw(100);\n const halfScreenWidth = vw(50);\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = messages.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments\n ?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n )\n .reverse() || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n const isInitiallyPaused = !autoPlayVideo;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n duration: 0,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n paused: isInitiallyPaused,\n progress: 0,\n thumb_url: a.thumb_url,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...attachmentPhotos, ...acc] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n useEffect(() => {\n setImageGalleryAttachments(photos);\n }, []);\n\n /**\n * The URL for the images may differ because of dimensions passed as\n * part of the query.\n */\n const stripQueryFromUrl = (url: string) => url.split('?')[0];\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) =>\n photo.messageId === selectedMessage?.messageId &&\n stripQueryFromUrl(photo.uri) === stripQueryFromUrl(selectedMessage?.url || ''),\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [selectedMessage, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = imageGalleryAttachments[selectedIndex]?.uri;\n\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = imageGalleryAttachments[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(imageGalleryAttachments);\n }\n };\n\n const handleEnd = () => {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n handleProgress(imageGalleryAttachments[selectedIndex].id, 1, true);\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleLoad = (index: string, duration: number) => {\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n duration: imageGalleryAttachment.id === index ? duration : imageGalleryAttachment.duration,\n })),\n );\n };\n\n const handleProgress = (index: string, progress: number, hasEnd?: boolean) => {\n setImageGalleryAttachments((prevImageGalleryAttachments) =>\n prevImageGalleryAttachments.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n progress:\n imageGalleryAttachment.id === index\n ? hasEnd\n ? 1\n : progress\n : imageGalleryAttachment.progress,\n })),\n );\n };\n\n const handlePlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: imageGalleryAttachment.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: true,\n })),\n );\n }\n };\n\n const onPlayPause = (status?: boolean) => {\n if (status === undefined) {\n if (imageGalleryAttachments[selectedIndex].paused) {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, false);\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n }\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, status);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View style={[styles.animatedContainer, pagerStyle, pager]}>\n {imageGalleryAttachments.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n attachmentId={photo.id}\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={photo.paused || false}\n previous={selectedIndex > i}\n repeat={true}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={imageGalleryAttachments[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n\n {imageGalleryAttachments[selectedIndex] && (\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={imageGalleryAttachments[selectedIndex].duration || 0}\n onPlayPause={onPlayPause}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={imageGalleryAttachments[selectedIndex].paused || false}\n photo={imageGalleryAttachments[selectedIndex]}\n photoLength={imageGalleryAttachments.length}\n progress={imageGalleryAttachments[selectedIndex].progress || 0}\n selectedIndex={selectedIndex}\n videoRef={videoRef}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n )}\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={imageGalleryGridSnapPoints || snapPoints}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setSelectedMessage={setSelectedMessage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n duration?: number;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n paused?: boolean;\n progress?: number;\n thumb_url?: string;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"],"mappings":"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"}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_bottomSheet","_AnimatedGalleryImage","_AnimatedGalleryVideo","_ImageGalleryFooter","_ImageGalleryHeader","_ImageGalleryOverlay","_ImageGrid","_ImageGridHandle","_useImageGalleryGestures","_ImageGalleryContext","_OverlayContext","_ThemeContext","_useViewport2","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_getGiphyMimeType","_this","_jsxFileName","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","_typeof","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","isAndroid","Platform","OS","fullScreenHeight","Dimensions","height","MARGIN","HasPinched","exports","IsSwiping","normalizeSnapPoints","input","snapPoints","value","map","snapPoint","Math","max","numericValue","Number","replace","isPercentage","includes","isNaN","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_props$autoPlayVideo","autoPlayVideo","_props$giphyVersion","giphyVersion","imageGalleryCustomComponents","imageGalleryGridHandleHeight","imageGalleryGridSnapPoints","numberOfImageGalleryGridColumns","overlayOpacity","_useState","useState","_useState2","_slicedToArray2","imageGalleryAttachments","setImageGalleryAttachments","_useTheme","useTheme","_useTheme$theme","theme","white_snow","colors","_useTheme$theme$image","imageGallery","backgroundColor","pager","slide","_useState3","_useState4","gridPhotos","setGridPhotos","_useOverlayContext","useOverlayContext","overlay","translucentStatusBar","_useImageGalleryConte","useImageGalleryContext","messages","selectedMessage","setSelectedMessage","_useViewport","useViewport","vh","vw","measuredScreenHeight","screenWidth","halfScreenWidth","statusBarHeight","StatusBar","currentHeight","bottomBarHeight","androidScreenHeightAdjustment","screenHeight","halfScreenHeight","quarterScreenHeight","React","useMemo","bottomSheetModalRef","useRef","_useState5","_useState6","currentBottomSheetIndex","setCurrentBottomSheetIndex","animatedBottomSheetIndex","useSharedValue","screenTranslateY","showScreen","withTiming","duration","easing","Easing","out","ease","useEffect","Keyboard","dismiss","_useState7","_useState8","currentImageHeight","setCurrentImageHeight","_useState9","_useState10","selectedIndex","setSelectedIndex","index","headerFooterVisible","doubleTapRef","panRef","pinchRef","singleTapRef","translateX","translateY","offsetScale","scale","translationX","photos","reduce","acc","cur","_cur$attachments","attachmentImages","attachments","filter","attachment","_attachment$giphy","_attachment$giphy$gip","type","giphy","url","thumb_url","image_url","title_link","og_scrape_url","getUrlOfImageAttachment","isVideoPackageAvailable","reverse","attachmentPhotos","a","_a$giphy","_a$giphy$giphyVersion","imageUrl","giphyURL","isInitiallyPaused","channelId","cid","created_at","id","messageId","mime_type","getGiphyMimeType","original_height","original_width","paused","progress","uri","getResizedImageUrl","width","user","user_id","concat","_toConsumableArray2","photoLength","length","stripQueryFromUrl","split","updatePosition","newIndex","runOnJS","findIndex","photo","runOnUI","uriForCurrentImage","imageHeight","floor","Image","getSize","_useImageGalleryGestu","useImageGalleryGestures","onDoubleTap","onPan","onPinch","onSingleTap","headerFooterOpacity","useDerivedValue","pagerStyle","useAnimatedStyle","transform","scaleX","containerBackground","opacity","showScreenStyle","closeGridView","_bottomSheetModalRef$","current","close","openGridView","_bottomSheetModalRef$2","present","handleEnd","handlePlayPause","handleProgress","videoRef","handleLoad","prevImageGalleryAttachment","imageGalleryAttachment","_extends2","hasEnd","prevImageGalleryAttachments","pausedStatus","onPlayPause","status","undefined","createElement","View","accessibilityLabel","pointerEvents","style","StyleSheet","absoluteFillObject","__self","__source","fileName","lineNumber","columnNumber","TapGestureHandler","minPointers","numberOfTaps","onGestureEvent","ref","waitFor","maxDeltaX","maxDeltaY","maxDist","PinchGestureHandler","simultaneousHandlers","absoluteFill","PanGestureHandler","enabled","maxPointers","minDist","styles","animatedContainer","i","AnimatedGalleryVideo","attachmentId","previous","repeat","selected","shouldRender","abs","source","marginRight","AnimatedGalleryImage","ImageGalleryHeader","visible","header","ImageGalleryFooter","footer","ImageGalleryOverlay","BottomSheetModalProvider","BottomSheetModal","animatedIndex","enablePanDownToClose","handleComponent","ImageGridHandle","gridHandle","handleHeight","onChange","ImageGrid","grid","clamp","lowerBound","upperBound","min","create","alignItems","flexDirection","displayName"],"sources":["ImageGallery.tsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react';\nimport {\n Dimensions,\n Image,\n ImageStyle,\n Keyboard,\n Platform,\n StatusBar,\n StyleSheet,\n ViewStyle,\n} from 'react-native';\n\nimport {\n PanGestureHandler,\n PinchGestureHandler,\n TapGestureHandler,\n} from 'react-native-gesture-handler';\n\nimport Animated, {\n Easing,\n runOnJS,\n runOnUI,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withTiming,\n} from 'react-native-reanimated';\n\nimport { BottomSheetModal, BottomSheetModalProvider, BottomSheetProps } from '@gorhom/bottom-sheet';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { AnimatedGalleryImage } from './components/AnimatedGalleryImage';\nimport { AnimatedGalleryVideo } from './components/AnimatedGalleryVideo';\nimport {\n ImageGalleryFooter,\n ImageGalleryFooterCustomComponentProps,\n} from './components/ImageGalleryFooter';\nimport {\n ImageGalleryHeader,\n ImageGalleryHeaderCustomComponentProps,\n} from './components/ImageGalleryHeader';\nimport { ImageGalleryOverlay } from './components/ImageGalleryOverlay';\nimport { ImageGalleryGridImageComponents, ImageGrid } from './components/ImageGrid';\nimport {\n ImageGalleryGridHandleCustomComponentProps,\n ImageGridHandle,\n} from './components/ImageGridHandle';\n\nimport { useImageGalleryGestures } from './hooks/useImageGalleryGestures';\n\nimport { useImageGalleryContext } from '../../contexts/imageGalleryContext/ImageGalleryContext';\nimport {\n OverlayProviderProps,\n useOverlayContext,\n} from '../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { useViewport } from '../../hooks/useViewport';\nimport { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\n\nconst MARGIN = 32;\n\nexport enum HasPinched {\n FALSE = 0,\n TRUE,\n}\n\nexport enum IsSwiping {\n UNDETERMINED = 0,\n TRUE,\n FALSE,\n}\n\nexport type ImageGalleryCustomComponents<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Override props for following UI components, which are part of [image gallery](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#gallery-components).\n *\n * - [ImageGalleryFooter](#ImageGalleryFooter)\n *\n * - [ImageGrid](#ImageGrid)\n *\n * - [ImageGridHandle](#ImageGridHandle)\n *\n * - [ImageGalleryHeader](#ImageGalleryHeader)\n *\n * e.g.,\n *\n * ```js\n * {\n * footer: {\n * ShareIcon: CustomShareIconComponent\n * },\n * grid: {\n * avatarComponent: CustomAvatarComponent\n * },\n * gridHandle: {\n * centerComponent: CustomCenterComponent\n * },\n * header: {\n * CloseIcon: CustomCloseButtonComponent\n * },\n * }\n * ```\n * @overrideType object\n */\n imageGalleryCustomComponents?: {\n footer?: ImageGalleryFooterCustomComponentProps<StreamChatGenerics>;\n grid?: ImageGalleryGridImageComponents<StreamChatGenerics>;\n gridHandle?: ImageGalleryGridHandleCustomComponentProps;\n header?: ImageGalleryHeaderCustomComponentProps<StreamChatGenerics>;\n };\n};\n\ntype Props<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> =\n ImageGalleryCustomComponents<StreamChatGenerics> & {\n overlayOpacity: Animated.SharedValue<number>;\n } & Pick<\n OverlayProviderProps<StreamChatGenerics>,\n | 'giphyVersion'\n | 'imageGalleryGridSnapPoints'\n | 'imageGalleryGridHandleHeight'\n | 'numberOfImageGalleryGridColumns'\n | 'autoPlayVideo'\n >;\n\ntype SnapPoints = BottomSheetProps['snapPoints'];\n\nconst normalizeSnapPoints = (input: SnapPoints): SnapPoints => {\n const snapPoints = input ? ('value' in input ? input.value : input) : [];\n\n return snapPoints.map((snapPoint) => {\n if (typeof snapPoint === 'number') {\n return Math.max(0, snapPoint);\n } else {\n const numericValue = Number(snapPoint.replace('%', ''));\n const isPercentage = snapPoint.includes('%');\n\n if (isNaN(numericValue)) {\n return 0;\n } else if (isPercentage) {\n return `${Math.max(0, numericValue)}%`;\n } else {\n return Math.max(0, numericValue);\n }\n }\n });\n};\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\n autoPlayVideo = false,\n giphyVersion = 'fixed_height',\n imageGalleryCustomComponents,\n imageGalleryGridHandleHeight,\n imageGalleryGridSnapPoints,\n numberOfImageGalleryGridColumns,\n overlayOpacity,\n } = props;\n const [imageGalleryAttachments, setImageGalleryAttachments] = useState<\n Photo<StreamChatGenerics>[]\n >([]);\n const {\n theme: {\n colors: { white_snow },\n imageGallery: { backgroundColor, pager, slide },\n },\n } = useTheme();\n const [gridPhotos, setGridPhotos] = useState<Photo<StreamChatGenerics>[]>([]);\n const { overlay, translucentStatusBar } = useOverlayContext();\n const { messages, selectedMessage, setSelectedMessage } =\n useImageGalleryContext<StreamChatGenerics>();\n\n const { vh, vw } = useViewport();\n\n const measuredScreenHeight = vh(100);\n const screenWidth = vw(100);\n const halfScreenWidth = vw(50);\n\n /**\n * Height constants\n */\n const statusBarHeight = StatusBar.currentHeight ?? 0;\n const bottomBarHeight = fullScreenHeight - measuredScreenHeight - statusBarHeight;\n const androidScreenHeightAdjustment = translucentStatusBar\n ? bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? 0\n : statusBarHeight\n : bottomBarHeight === statusBarHeight || bottomBarHeight < 0\n ? -statusBarHeight\n : 0;\n const screenHeight = isAndroid\n ? Dimensions.get('window').height + androidScreenHeightAdjustment\n : vh(100);\n const halfScreenHeight = screenHeight / 2;\n const quarterScreenHeight = screenHeight / 4;\n const snapPoints = React.useMemo(\n () => [(screenHeight * 3) / 4, screenHeight - (imageGalleryGridHandleHeight ?? 40)],\n [],\n );\n\n /**\n * BottomSheetModal ref\n */\n const bottomSheetModalRef = useRef<BottomSheetModal>(null);\n\n /**\n * BottomSheetModal state\n */\n const [currentBottomSheetIndex, setCurrentBottomSheetIndex] = useState(0);\n const animatedBottomSheetIndex = useSharedValue(0);\n\n /**\n * Fade animation for screen, it is always rendered with pointerEvents\n * set to none for fast opening\n */\n const screenTranslateY = useSharedValue(screenHeight);\n const showScreen = () => {\n 'worklet';\n screenTranslateY.value = withTiming(0, {\n duration: 250,\n easing: Easing.out(Easing.ease),\n });\n };\n\n /**\n * Run the fade animation on visible change\n */\n useEffect(() => {\n Keyboard.dismiss();\n showScreen();\n }, []);\n\n /**\n * Image height from URL or default to full screen height\n */\n const [currentImageHeight, setCurrentImageHeight] = useState<number>(screenHeight);\n\n /**\n * JS and UI index values, the JS follows the UI but is needed\n * for rendering the virtualized image list\n */\n const [selectedIndex, setSelectedIndex] = useState(0);\n const index = useSharedValue(0);\n\n /**\n * Header visible value for animating in out\n */\n const headerFooterVisible = useSharedValue(1);\n\n /**\n * Gesture handler refs\n */\n const doubleTapRef = useRef<TapGestureHandler>(null);\n const panRef = useRef<PanGestureHandler>(null);\n const pinchRef = useRef<PinchGestureHandler>(null);\n const singleTapRef = useRef<TapGestureHandler>(null);\n\n /**\n * Shared values for movement\n */\n const translateX = useSharedValue(0);\n const translateY = useSharedValue(0);\n const offsetScale = useSharedValue(1);\n const scale = useSharedValue(1);\n const translationX = useSharedValue(0);\n\n /**\n * Photos array created from all currently available\n * photo attachments\n */\n\n const photos = messages.reduce((acc: Photo<StreamChatGenerics>[], cur) => {\n const attachmentImages =\n cur.attachments\n ?.filter(\n (attachment) =>\n (attachment.type === 'giphy' &&\n (attachment.giphy?.[giphyVersion]?.url ||\n attachment.thumb_url ||\n attachment.image_url)) ||\n (attachment.type === 'image' &&\n !attachment.title_link &&\n !attachment.og_scrape_url &&\n getUrlOfImageAttachment(attachment)) ||\n (isVideoPackageAvailable() && attachment.type === 'video'),\n )\n .reverse() || [];\n\n const attachmentPhotos = attachmentImages.map((a) => {\n const imageUrl = getUrlOfImageAttachment(a) as string;\n const giphyURL = a.giphy?.[giphyVersion]?.url || a.thumb_url || a.image_url;\n const isInitiallyPaused = !autoPlayVideo;\n\n return {\n channelId: cur.cid,\n created_at: cur.created_at,\n duration: 0,\n id: `photoId-${cur.id}-${imageUrl}`,\n messageId: cur.id,\n mime_type: a.type === 'giphy' ? getGiphyMimeType(giphyURL ?? '') : a.mime_type,\n original_height: a.original_height,\n original_width: a.original_width,\n paused: isInitiallyPaused,\n progress: 0,\n thumb_url: a.thumb_url,\n type: a.type,\n uri:\n a.type === 'giphy'\n ? giphyURL\n : getResizedImageUrl({\n height: screenHeight,\n url: imageUrl,\n width: screenWidth,\n }),\n user: cur.user,\n user_id: cur.user_id,\n };\n });\n\n return [...attachmentPhotos, ...acc] as Photo<StreamChatGenerics>[];\n }, []);\n\n /**\n * Photos length needs to be kept as a const here so if the length\n * changes it causes the pan gesture handler function to refresh. This\n * does not work if the calculation for the length of the array is left\n * inside the gesture handler as it will have an array as a dependency\n */\n const photoLength = photos.length;\n\n useEffect(() => {\n setImageGalleryAttachments(photos);\n }, []);\n\n /**\n * The URL for the images may differ because of dimensions passed as\n * part of the query.\n */\n const stripQueryFromUrl = (url: string) => url.split('?')[0];\n\n /**\n * Set selected photo when changed via pressing in the message list\n */\n useEffect(() => {\n const updatePosition = (newIndex: number) => {\n 'worklet';\n\n if (newIndex > -1) {\n index.value = newIndex;\n translationX.value = -(screenWidth + MARGIN) * newIndex;\n runOnJS(setSelectedIndex)(newIndex);\n }\n };\n\n const newIndex = photos.findIndex(\n (photo) =>\n photo.messageId === selectedMessage?.messageId &&\n stripQueryFromUrl(photo.uri) === stripQueryFromUrl(selectedMessage?.url || ''),\n );\n\n runOnUI(updatePosition)(newIndex);\n }, [selectedMessage, photoLength]);\n\n /**\n * Image heights are not provided and therefore need to be calculated.\n * We start by allowing the image to be the full height then reduce it\n * to the proper scaled height based on the width being restricted to the\n * screen width when the dimensions are received.\n */\n const uriForCurrentImage = imageGalleryAttachments[selectedIndex]?.uri;\n\n useEffect(() => {\n setCurrentImageHeight(screenHeight);\n const photo = imageGalleryAttachments[index.value];\n const height = photo?.original_height;\n const width = photo?.original_width;\n\n if (height && width) {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n } else if (photo?.uri) {\n if (photo.type === 'image') {\n Image.getSize(photo.uri, (width, height) => {\n const imageHeight = Math.floor(height * (screenWidth / width));\n setCurrentImageHeight(imageHeight > screenHeight ? screenHeight : imageHeight);\n });\n }\n }\n }, [uriForCurrentImage]);\n\n const { onDoubleTap, onPan, onPinch, onSingleTap } = useImageGalleryGestures({\n currentImageHeight,\n halfScreenHeight,\n halfScreenWidth,\n headerFooterVisible,\n offsetScale,\n overlayOpacity,\n photoLength,\n scale,\n screenHeight,\n screenWidth,\n selectedIndex,\n setSelectedIndex,\n translateX,\n translateY,\n translationX,\n });\n\n /**\n * If the header is visible we scale down the opacity of it as the\n * image is swiped downward\n */\n const headerFooterOpacity = useDerivedValue(\n () =>\n currentImageHeight * scale.value < screenHeight && translateY.value > 0\n ? 1 - translateY.value / quarterScreenHeight\n : currentImageHeight * scale.value > screenHeight &&\n translateY.value > (currentImageHeight / 2) * scale.value - halfScreenHeight\n ? 1 -\n (translateY.value - ((currentImageHeight / 2) * scale.value - halfScreenHeight)) /\n quarterScreenHeight\n : 1,\n [currentImageHeight],\n );\n\n /**\n * This transition and scaleX reverse lets use scroll left\n */\n const pagerStyle = useAnimatedStyle<ImageStyle>(\n () => ({\n transform: [\n { scaleX: -1 },\n {\n translateX: translationX.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Simple background color animation on Y movement\n */\n const containerBackground = useAnimatedStyle<ViewStyle>(\n () => ({\n backgroundColor: backgroundColor || white_snow,\n opacity: headerFooterOpacity.value,\n }),\n [headerFooterOpacity],\n );\n\n /**\n * Show screen style as component is always rendered we hide it\n * down and up and set opacity to 0 for good measure\n */\n const showScreenStyle = useAnimatedStyle<ViewStyle>(\n () => ({\n transform: [\n {\n translateY: screenTranslateY.value,\n },\n ],\n }),\n [],\n );\n\n /**\n * Functions toclose BottomSheetModal with image grid\n */\n const closeGridView = () => {\n if (bottomSheetModalRef.current?.close) {\n bottomSheetModalRef.current.close();\n setGridPhotos([]);\n }\n };\n\n /**\n * Function to open BottomSheetModal with image grid\n */\n const openGridView = () => {\n if (bottomSheetModalRef.current?.present) {\n bottomSheetModalRef.current.present();\n setGridPhotos(imageGalleryAttachments);\n }\n };\n\n const handleEnd = () => {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n handleProgress(imageGalleryAttachments[selectedIndex].id, 1, true);\n };\n\n const videoRef = useRef<VideoType>(null);\n\n const handleLoad = (index: string, duration: number) => {\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n duration: imageGalleryAttachment.id === index ? duration : imageGalleryAttachment.duration,\n })),\n );\n };\n\n const handleProgress = (index: string, progress: number, hasEnd?: boolean) => {\n setImageGalleryAttachments((prevImageGalleryAttachments) =>\n prevImageGalleryAttachments.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n progress:\n imageGalleryAttachment.id === index\n ? hasEnd\n ? 1\n : progress\n : imageGalleryAttachment.progress,\n })),\n );\n };\n\n const handlePlayPause = (index: string, pausedStatus?: boolean) => {\n if (pausedStatus === false) {\n // If the status is false we set the audio with the index as playing and the others as paused.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: imageGalleryAttachment.id === index ? false : true,\n })),\n );\n } else {\n // If the status is true we simply set all the audio's paused state as true.\n setImageGalleryAttachments((prevImageGalleryAttachment) =>\n prevImageGalleryAttachment.map((imageGalleryAttachment) => ({\n ...imageGalleryAttachment,\n paused: true,\n })),\n );\n }\n };\n\n const onPlayPause = (status?: boolean) => {\n if (status === undefined) {\n if (imageGalleryAttachments[selectedIndex].paused) {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, false);\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, true);\n }\n } else {\n handlePlayPause(imageGalleryAttachments[selectedIndex].id, status);\n }\n };\n\n return (\n <Animated.View\n accessibilityLabel='Image Gallery'\n pointerEvents={'auto'}\n style={[StyleSheet.absoluteFillObject, showScreenStyle]}\n >\n <Animated.View style={[StyleSheet.absoluteFillObject, containerBackground]} />\n <TapGestureHandler\n minPointers={1}\n numberOfTaps={1}\n onGestureEvent={onSingleTap}\n ref={singleTapRef}\n waitFor={[panRef, pinchRef, doubleTapRef]}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <TapGestureHandler\n maxDeltaX={8}\n maxDeltaY={8}\n maxDist={8}\n minPointers={1}\n numberOfTaps={2}\n onGestureEvent={onDoubleTap}\n ref={doubleTapRef}\n >\n <Animated.View style={StyleSheet.absoluteFillObject}>\n <PinchGestureHandler\n onGestureEvent={onPinch}\n ref={pinchRef}\n simultaneousHandlers={[panRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <PanGestureHandler\n enabled={overlay === 'gallery'}\n maxPointers={isAndroid ? undefined : 1}\n minDist={10}\n onGestureEvent={onPan}\n ref={panRef}\n simultaneousHandlers={[pinchRef]}\n >\n <Animated.View style={StyleSheet.absoluteFill}>\n <Animated.View style={[styles.animatedContainer, pagerStyle, pager]}>\n {imageGalleryAttachments.map((photo, i) =>\n photo.type === 'video' ? (\n <AnimatedGalleryVideo\n attachmentId={photo.id}\n handleEnd={handleEnd}\n handleLoad={handleLoad}\n handleProgress={handleProgress}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n paused={photo.paused || false}\n previous={selectedIndex > i}\n repeat={true}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n source={{ uri: photo.uri }}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n videoRef={videoRef}\n />\n ) : (\n <AnimatedGalleryImage\n accessibilityLabel={'Image Item'}\n index={i}\n key={`${photo.uri}-${i}`}\n offsetScale={offsetScale}\n photo={photo}\n previous={selectedIndex > i}\n scale={scale}\n screenHeight={screenHeight}\n selected={selectedIndex === i}\n shouldRender={Math.abs(selectedIndex - i) < 4}\n style={[\n {\n height: screenHeight * 8,\n marginRight: MARGIN,\n width: screenWidth * 8,\n },\n slide,\n ]}\n translateX={translateX}\n translateY={translateY}\n />\n ),\n )}\n </Animated.View>\n </Animated.View>\n </PanGestureHandler>\n </Animated.View>\n </PinchGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n </Animated.View>\n </TapGestureHandler>\n <ImageGalleryHeader<StreamChatGenerics>\n opacity={headerFooterOpacity}\n photo={imageGalleryAttachments[selectedIndex]}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.header}\n />\n\n {imageGalleryAttachments[selectedIndex] && (\n <ImageGalleryFooter<StreamChatGenerics>\n accessibilityLabel={'Image Gallery Footer'}\n duration={imageGalleryAttachments[selectedIndex].duration || 0}\n onPlayPause={onPlayPause}\n opacity={headerFooterOpacity}\n openGridView={openGridView}\n paused={imageGalleryAttachments[selectedIndex].paused || false}\n photo={imageGalleryAttachments[selectedIndex]}\n photoLength={imageGalleryAttachments.length}\n progress={imageGalleryAttachments[selectedIndex].progress || 0}\n selectedIndex={selectedIndex}\n videoRef={videoRef}\n visible={headerFooterVisible}\n {...imageGalleryCustomComponents?.footer}\n />\n )}\n\n <ImageGalleryOverlay\n animatedBottomSheetIndex={animatedBottomSheetIndex}\n closeGridView={closeGridView}\n currentBottomSheetIndex={currentBottomSheetIndex}\n />\n <BottomSheetModalProvider>\n <BottomSheetModal\n animatedIndex={animatedBottomSheetIndex}\n enablePanDownToClose={true}\n handleComponent={() => (\n <ImageGridHandle\n closeGridView={closeGridView}\n {...imageGalleryCustomComponents?.gridHandle}\n />\n )}\n handleHeight={imageGalleryGridHandleHeight ?? 40}\n index={0}\n onChange={(index: number) => setCurrentBottomSheetIndex(index)}\n ref={bottomSheetModalRef}\n snapPoints={normalizeSnapPoints(imageGalleryGridSnapPoints || snapPoints)}\n >\n <ImageGrid\n closeGridView={closeGridView}\n numberOfImageGalleryGridColumns={numberOfImageGalleryGridColumns}\n photos={gridPhotos}\n setSelectedMessage={setSelectedMessage}\n {...imageGalleryCustomComponents?.grid}\n />\n </BottomSheetModal>\n </BottomSheetModalProvider>\n </Animated.View>\n );\n};\n\n/**\n * Clamping worklet to clamp the scaling\n */\nexport const clamp = (value: number, lowerBound: number, upperBound: number) => {\n 'worklet';\n return Math.min(Math.max(lowerBound, value), upperBound);\n};\n\nconst styles = StyleSheet.create({\n animatedContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n },\n});\n\nexport type Photo<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n id: string;\n uri: string;\n channelId?: string;\n created_at?: string | Date;\n duration?: number;\n messageId?: string;\n mime_type?: string;\n original_height?: number;\n original_width?: number;\n paused?: boolean;\n progress?: number;\n thumb_url?: string;\n type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"],"mappings":"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"}