stream-chat-react-native-core 5.13.0 → 5.13.1-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.
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +4 -4
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/ImageGallery.js +8 -8
- package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +8 -8
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/commonjs/i18n/en.json +1 -0
- package/lib/commonjs/i18n/fr.json +1 -0
- package/lib/commonjs/i18n/he.json +1 -0
- package/lib/commonjs/i18n/hi.json +1 -0
- package/lib/commonjs/i18n/it.json +1 -0
- package/lib/commonjs/i18n/ja.json +1 -0
- package/lib/commonjs/i18n/ko.json +1 -0
- package/lib/commonjs/i18n/nl.json +1 -0
- package/lib/commonjs/i18n/ru.json +1 -0
- package/lib/commonjs/i18n/tr.json +1 -0
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +4 -4
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/module/components/ImageGallery/ImageGallery.js +8 -8
- package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +8 -8
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +1 -1
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/module/i18n/en.json +1 -0
- package/lib/module/i18n/fr.json +1 -0
- package/lib/module/i18n/he.json +1 -0
- package/lib/module/i18n/hi.json +1 -0
- package/lib/module/i18n/it.json +1 -0
- package/lib/module/i18n/ja.json +1 -0
- package/lib/module/i18n/ko.json +1 -0
- package/lib/module/i18n/nl.json +1 -0
- package/lib/module/i18n/ru.json +1 -0
- package/lib/module/i18n/tr.json +1 -0
- package/lib/module/version.json +1 -1
- package/lib/typescript/i18n/en.json +1 -0
- package/lib/typescript/i18n/fr.json +1 -0
- package/lib/typescript/i18n/he.json +1 -0
- package/lib/typescript/i18n/hi.json +1 -0
- package/lib/typescript/i18n/it.json +1 -0
- package/lib/typescript/i18n/ja.json +1 -0
- package/lib/typescript/i18n/ko.json +1 -0
- package/lib/typescript/i18n/nl.json +1 -0
- package/lib/typescript/i18n/ru.json +1 -0
- package/lib/typescript/i18n/tr.json +1 -0
- package/lib/typescript/test-utils/BetterSqlite.d.ts +2 -2
- package/lib/typescript/utils/Streami18n.d.ts +1 -0
- package/package.json +1 -1
- package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +1 -1
- package/src/i18n/en.json +1 -0
- package/src/i18n/fr.json +1 -0
- package/src/i18n/he.json +1 -0
- package/src/i18n/hi.json +1 -0
- package/src/i18n/it.json +1 -0
- package/src/i18n/ja.json +1 -0
- package/src/i18n/ko.json +1 -0
- package/src/i18n/nl.json +1 -0
- package/src/i18n/ru.json +1 -0
- package/src/i18n/tr.json +1 -0
- package/src/version.json +1 -1
|
@@ -111,13 +111,13 @@ var getLatestMessageDisplayDate = function getLatestMessageDisplayDate(message,
|
|
|
111
111
|
}
|
|
112
112
|
return parserOutput;
|
|
113
113
|
};
|
|
114
|
-
var MessageReadStatus
|
|
115
|
-
exports.MessageReadStatus = MessageReadStatus;
|
|
116
|
-
(function (MessageReadStatus) {
|
|
114
|
+
var MessageReadStatus = function (MessageReadStatus) {
|
|
117
115
|
MessageReadStatus[MessageReadStatus["NOT_SENT_BY_CURRENT_USER"] = 0] = "NOT_SENT_BY_CURRENT_USER";
|
|
118
116
|
MessageReadStatus[MessageReadStatus["UNREAD"] = 1] = "UNREAD";
|
|
119
117
|
MessageReadStatus[MessageReadStatus["READ"] = 2] = "READ";
|
|
120
|
-
|
|
118
|
+
return MessageReadStatus;
|
|
119
|
+
}({});
|
|
120
|
+
exports.MessageReadStatus = MessageReadStatus;
|
|
121
121
|
var getLatestMessageReadStatus = function getLatestMessageReadStatus(channel, client, message, readEvents) {
|
|
122
122
|
var _message$user5;
|
|
123
123
|
var currentUserId = client.userID;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","require","_ChatContext","_TranslationContext","getMessageSenderName","message","currentUserId","t","membersLength","_message$user","user","id","_message$user2","_message$user3","_message$user4","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","_message$attachments","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","concat","_toConsumableArray2","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isDayOrMoment","isSame","Date","format","MessageReadStatus","exports","getLatestMessageReadStatus","readEvents","_message$user5","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","_ref","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","channelStateLastMessage","useLatestMessagePreview","forceUpdate","_useChatContext","useChatContext","_useTranslationContex","useTranslationContext","channelConfigExists","getConfig","channelLastMessageString","_useState","useState","_useState2","_slicedToArray2","setReadEvents","_useState3","_useState4","latestMessagePreview","setLatestMessagePreview","readStatus","useEffect","_channel$getConfig","read_events"],"sources":["useLatestMessagePreview.ts"],"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"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","require","_ChatContext","_TranslationContext","getMessageSenderName","message","currentUserId","t","membersLength","_message$user","user","id","_message$user2","_message$user3","_message$user4","name","username","getMentionUsers","mentionedUser","Array","isArray","mentionUserString","reduce","acc","cur","userName","length","getLatestMessageDisplayText","channel","client","_message$attachments","bold","text","isMessageTypeDeleted","type","userID","members","Object","keys","state","messageSender","messageSenderText","boldOwner","includes","shortenedText","substring","replace","mentionedUsers","mentioned_users","regEx","RegExp","concat","_toConsumableArray2","split","index","test","push","command","attachments","getLatestMessageDisplayDate","tDateTimeParser","parserOutput","created_at","isDayOrMoment","isSame","Date","format","MessageReadStatus","exports","getLatestMessageReadStatus","readEvents","_message$user5","NOT_SENT_BY_CURRENT_USER","readList","read","messageUpdatedAt","updated_at","undefined","values","some","_ref","last_read","READ","UNREAD","getLatestMessagePreview","params","lastMessage","messages","messageObject","previews","status","channelStateLastMessage","useLatestMessagePreview","forceUpdate","_useChatContext","useChatContext","_useTranslationContex","useTranslationContext","channelConfigExists","getConfig","channelLastMessageString","_useState","useState","_useState2","_slicedToArray2","setReadEvents","_useState3","_useState4","latestMessagePreview","setLatestMessagePreview","readStatus","useEffect","_channel$getConfig","read_events"],"sources":["useLatestMessagePreview.ts"],"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"],"mappings":"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"}
|
|
@@ -38,19 +38,19 @@ var measuredScreenHeight = (0, _utils.vh)(100);
|
|
|
38
38
|
var screenWidth = (0, _utils.vw)(100);
|
|
39
39
|
var halfScreenWidth = (0, _utils.vw)(50);
|
|
40
40
|
var MARGIN = 32;
|
|
41
|
-
var HasPinched
|
|
42
|
-
exports.HasPinched = HasPinched;
|
|
43
|
-
(function (HasPinched) {
|
|
41
|
+
var HasPinched = function (HasPinched) {
|
|
44
42
|
HasPinched[HasPinched["FALSE"] = 0] = "FALSE";
|
|
45
43
|
HasPinched[HasPinched["TRUE"] = 1] = "TRUE";
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
exports.
|
|
49
|
-
|
|
44
|
+
return HasPinched;
|
|
45
|
+
}({});
|
|
46
|
+
exports.HasPinched = HasPinched;
|
|
47
|
+
var IsSwiping = function (IsSwiping) {
|
|
50
48
|
IsSwiping[IsSwiping["UNDETERMINED"] = 0] = "UNDETERMINED";
|
|
51
49
|
IsSwiping[IsSwiping["TRUE"] = 1] = "TRUE";
|
|
52
50
|
IsSwiping[IsSwiping["FALSE"] = 2] = "FALSE";
|
|
53
|
-
|
|
51
|
+
return IsSwiping;
|
|
52
|
+
}({});
|
|
53
|
+
exports.IsSwiping = IsSwiping;
|
|
54
54
|
var ImageGallery = function ImageGallery(props) {
|
|
55
55
|
var _StatusBar$currentHei, _imageGalleryAttachme;
|
|
56
56
|
var _props$giphyVersion = props.giphyVersion,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeGestureHandler","_reactNativeReanimated","_bottomSheet","_AnimatedGalleryImage","_AnimatedGalleryVideo","_ImageGalleryFooter","_ImageGalleryHeader","_ImageGalleryOverlay","_ImageGrid","_ImageGridHandle","_useImageGalleryGestures","_ImageGalleryContext","_OverlayContext","_ThemeContext","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_utils","_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","measuredScreenHeight","vh","screenWidth","vw","halfScreenWidth","MARGIN","HasPinched","exports","IsSwiping","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_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","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","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 { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\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 >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\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 /**\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\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: true,\n progress: 0,\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\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\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.length > 0 && (\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 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 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","_native","_getResizedImageUrl","_getUrlOfImageAttachment","_utils","_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","measuredScreenHeight","vh","screenWidth","vw","halfScreenWidth","MARGIN","HasPinched","exports","IsSwiping","ImageGallery","props","_StatusBar$currentHei","_imageGalleryAttachme","_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","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","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 { isVideoPackageAvailable, VideoType } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { getUrlOfImageAttachment } from '../../utils/getUrlOfImageAttachment';\nimport { vh, vw } from '../../utils/utils';\nimport { getGiphyMimeType } from '../Attachment/utils/getGiphyMimeType';\n\nconst isAndroid = Platform.OS === 'android';\nconst fullScreenHeight = Dimensions.get('screen').height;\nconst measuredScreenHeight = vh(100);\nconst screenWidth = vw(100);\nconst halfScreenWidth = vw(50);\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 >;\n\nexport const ImageGallery = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: Props<StreamChatGenerics>,\n) => {\n const {\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 /**\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\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: true,\n progress: 0,\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\n style={[\n styles.animatedContainer,\n pagerStyle,\n pager,\n {\n transform: [\n { scaleX: -1 }, // Also only here for opening, wrong direction when not included\n {\n translateX: translationX.value, // Only here for opening, wrong index when this is not included\n },\n ],\n },\n ]}\n >\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.length > 0 && (\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 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 type?: string;\n user?: UserResponse<StreamChatGenerics> | null;\n user_id?: string;\n};\n\nImageGallery.displayName = 'ImageGallery{imageGallery}';\n"],"mappings":"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"}
|
|
@@ -6,19 +6,19 @@ var _reactNative = require("react-native");
|
|
|
6
6
|
var _reactNativeReanimated = require("react-native-reanimated");
|
|
7
7
|
var _OverlayContext = require("../../../contexts/overlayContext/OverlayContext");
|
|
8
8
|
var _native = require("../../../native");
|
|
9
|
-
var HasPinched
|
|
10
|
-
exports.HasPinched = HasPinched;
|
|
11
|
-
(function (HasPinched) {
|
|
9
|
+
var HasPinched = function (HasPinched) {
|
|
12
10
|
HasPinched[HasPinched["FALSE"] = 0] = "FALSE";
|
|
13
11
|
HasPinched[HasPinched["TRUE"] = 1] = "TRUE";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
exports.
|
|
17
|
-
|
|
12
|
+
return HasPinched;
|
|
13
|
+
}({});
|
|
14
|
+
exports.HasPinched = HasPinched;
|
|
15
|
+
var IsSwiping = function (IsSwiping) {
|
|
18
16
|
IsSwiping[IsSwiping["UNDETERMINED"] = 0] = "UNDETERMINED";
|
|
19
17
|
IsSwiping[IsSwiping["TRUE"] = 1] = "TRUE";
|
|
20
18
|
IsSwiping[IsSwiping["FALSE"] = 2] = "FALSE";
|
|
21
|
-
|
|
19
|
+
return IsSwiping;
|
|
20
|
+
}({});
|
|
21
|
+
exports.IsSwiping = IsSwiping;
|
|
22
22
|
var MARGIN = 32;
|
|
23
23
|
var useImageGalleryGestures = function useImageGalleryGestures(_ref) {
|
|
24
24
|
var currentImageHeight = _ref.currentImageHeight,
|