stream-chat-react-native-core 4.0.0-beta.3 → 4.0.0-beta.4
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/Attachment/Giphy.js +109 -145
- package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +9 -5
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js +144 -64
- package/lib/commonjs/components/Message/MessageSimple/utils/renderText.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/utils/renderText.test.js +240 -0
- package/lib/commonjs/components/Message/MessageSimple/utils/renderText.test.js.map +1 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js +7 -6
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/icons/index.js +0 -26
- package/lib/commonjs/icons/index.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/Giphy.js +109 -145
- package/lib/module/components/Attachment/Giphy.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageFooter.js +9 -5
- package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/utils/renderText.js +144 -64
- package/lib/module/components/Message/MessageSimple/utils/renderText.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/utils/renderText.test.js +240 -0
- package/lib/module/components/Message/MessageSimple/utils/renderText.test.js.map +1 -0
- package/lib/module/contexts/themeContext/utils/theme.js +7 -6
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/icons/index.js +0 -26
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Message/MessageSimple/utils/renderText.d.ts +15 -1
- package/lib/typescript/components/Message/MessageSimple/utils/renderText.test.d.ts +1 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +6 -5
- package/lib/typescript/icons/index.d.ts +0 -2
- package/package.json +1 -1
- package/src/components/Attachment/Giphy.tsx +64 -66
- package/src/components/Message/MessageSimple/MessageFooter.tsx +5 -5
- package/src/components/Message/MessageSimple/utils/renderText.test.tsx +70 -0
- package/src/components/Message/MessageSimple/utils/renderText.tsx +77 -47
- package/src/contexts/themeContext/utils/theme.ts +13 -11
- package/src/icons/index.ts +0 -2
- package/src/version.json +1 -1
- package/lib/commonjs/icons/Left.js +0 -38
- package/lib/commonjs/icons/Left.js.map +0 -1
- package/lib/commonjs/icons/Right.js +0 -38
- package/lib/commonjs/icons/Right.js.map +0 -1
- package/lib/module/icons/Left.js +0 -38
- package/lib/module/icons/Left.js.map +0 -1
- package/lib/module/icons/Right.js +0 -38
- package/lib/module/icons/Right.js.map +0 -1
- package/lib/typescript/icons/Left.d.ts +0 -3
- package/lib/typescript/icons/Right.d.ts +0 -3
- package/src/icons/Left.tsx +0 -12
- package/src/icons/Right.tsx +0 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["MessageFooter.tsx"],"names":["MessageFooterWithContext","props","alignment","deletedMessagesVisibilityType","formattedDate","isDeleted","lastGroupMessage","members","message","MessageStatus","otherAttachments","showMessageStatus","theme","grey","colors","messageSimple","content","deletedMetaText","eyeIcon","messageUser","metaContainer","metaText","t","undefined","color","textAlign","length","actions","Object","keys","user","name","areEqual","prevProps","nextProps","prevAlignment","prevFormattedDate","prevLastGroupMessage","prevMembers","prevMessage","prevOtherAttachments","prevShowMessageStatus","nextAlignment","nextFormattedDate","nextLastGroupMessage","nextMembers","nextMessage","nextOtherAttachments","nextShowMessageStatus","alignmentEqual","membersEqual","lastGroupMessageEqual","deletedMessagesVisibilityTypeEqual","isPrevMessageTypeDeleted","type","isNextMessageTypeDeleted","messageEqual","reply_count","status","text","pinned","otherAttachmentsEqual","showMessageStatusEqual","formattedDateEqual","MemoizedMessageFooter","React","memo","MessageFooter"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Text, View } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { MessageStatusProps } from './MessageStatus';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport {\n Alignment,\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Eye } from '../../../icons';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\ntype MessageFooterComponentProps = {\n formattedDate: string | Date;\n isDeleted?: boolean;\n};\n\ntype MessageFooterPropsWithContext<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Pick<\n MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n | 'alignment'\n | 'members'\n | 'message'\n | 'otherAttachments'\n | 'showMessageStatus'\n | 'lastGroupMessage'\n> &\n Pick<\n MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n 'deletedMessagesVisibilityType' | 'MessageStatus'\n > &\n MessageFooterComponentProps;\n\nconst MessageFooterWithContext = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n alignment,\n deletedMessagesVisibilityType,\n formattedDate,\n isDeleted,\n lastGroupMessage,\n members,\n message,\n MessageStatus,\n otherAttachments,\n showMessageStatus,\n } = props;\n\n const {\n theme: {\n colors: { grey },\n messageSimple: {\n content: { deletedMetaText, eyeIcon, messageUser, metaContainer, metaText },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n if (isDeleted) {\n return (\n <View style={metaContainer} testID='message-deleted'>\n {deletedMessagesVisibilityType === 'sender' && (\n <>\n <Eye pathFill={isDeleted ? undefined : grey} {...eyeIcon} />\n <Text\n style={[\n {\n color: grey,\n textAlign: alignment,\n },\n metaText,\n deletedMetaText,\n ]}\n testID='only-visible-to-you'\n >\n {t('Only visible to you')}\n </Text>\n </>\n )}\n <Text\n style={[\n {\n color: grey,\n textAlign: alignment,\n },\n metaText,\n ]}\n >\n {formattedDate}\n </Text>\n </View>\n );\n }\n\n if (lastGroupMessage === false) {\n return null;\n }\n\n return (\n <View style={metaContainer} testID='message-status-time'>\n {otherAttachments.length && otherAttachments[0].actions ? (\n <>\n <Eye {...eyeIcon} />\n <Text\n style={[\n {\n color: grey,\n textAlign: alignment,\n },\n metaText,\n deletedMetaText,\n ]}\n >\n {t('Only visible to you')}\n </Text>\n </>\n ) : null}\n {Object.keys(members).length > 2 && alignment === 'left' && message.user?.name ? (\n <Text style={[{ color: grey }, messageUser]}>{message.user.name}</Text>\n ) : null}\n {showMessageStatus && <MessageStatus />}\n <Text style={[{ color: grey, textAlign: alignment }, metaText]}>{formattedDate}</Text>\n </View>\n );\n};\n\nconst areEqual = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n prevProps: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n nextProps: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n alignment: prevAlignment,\n formattedDate: prevFormattedDate,\n lastGroupMessage: prevLastGroupMessage,\n members: prevMembers,\n message: prevMessage,\n otherAttachments: prevOtherAttachments,\n showMessageStatus: prevShowMessageStatus,\n } = prevProps;\n const {\n alignment: nextAlignment,\n formattedDate: nextFormattedDate,\n lastGroupMessage: nextLastGroupMessage,\n members: nextMembers,\n message: nextMessage,\n otherAttachments: nextOtherAttachments,\n showMessageStatus: nextShowMessageStatus,\n } = nextProps;\n\n const alignmentEqual = prevAlignment === nextAlignment;\n if (!alignmentEqual) return false;\n\n const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length;\n if (!membersEqual) return false;\n\n const lastGroupMessageEqual = prevLastGroupMessage === nextLastGroupMessage;\n if (!lastGroupMessageEqual) return false;\n\n const deletedMessagesVisibilityTypeEqual =\n prevProps.deletedMessagesVisibilityType === nextProps.deletedMessagesVisibilityType;\n if (!deletedMessagesVisibilityTypeEqual) return false;\n\n const isPrevMessageTypeDeleted = prevMessage.type === 'deleted';\n const isNextMessageTypeDeleted = nextMessage.type === 'deleted';\n\n const messageEqual =\n isPrevMessageTypeDeleted === isNextMessageTypeDeleted &&\n prevMessage.reply_count === nextMessage.reply_count &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned;\n if (!messageEqual) return false;\n\n const otherAttachmentsEqual =\n prevOtherAttachments.length === nextOtherAttachments.length &&\n prevOtherAttachments?.[0]?.actions?.length === nextOtherAttachments?.[0]?.actions?.length;\n if (!otherAttachmentsEqual) return false;\n\n const showMessageStatusEqual = prevShowMessageStatus === nextShowMessageStatus;\n if (!showMessageStatusEqual) return false;\n\n const formattedDateEqual = prevFormattedDate === nextFormattedDate;\n if (!formattedDateEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageFooter = React.memo(\n MessageFooterWithContext,\n areEqual,\n) as typeof MessageFooterWithContext;\n\nexport type MessageFooterProps<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends DefaultUserType = DefaultUserType,\n> = Partial<Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'members'>> &\n MessageFooterComponentProps & {\n alignment?: Alignment;\n lastGroupMessage?: boolean;\n message?: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n MessageStatus?: React.ComponentType<MessageStatusProps<At, Ch, Co, Ev, Me, Re, Us>>;\n otherAttachments?: Attachment<At>[];\n showMessageStatus?: boolean;\n };\n\nexport const MessageFooter = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends DefaultUserType = DefaultUserType,\n>(\n props: MessageFooterProps<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { alignment, lastGroupMessage, members, message, otherAttachments, showMessageStatus } =\n useMessageContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n const { deletedMessagesVisibilityType, MessageStatus } =\n useMessagesContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n return (\n <MemoizedMessageFooter\n {...{\n alignment,\n deletedMessagesVisibilityType,\n lastGroupMessage,\n members,\n message,\n MessageStatus,\n otherAttachments,\n showMessageStatus,\n }}\n {...props}\n />\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["MessageFooter.tsx"],"names":["MessageFooterWithContext","props","alignment","deletedMessagesVisibilityType","formattedDate","isDeleted","lastGroupMessage","members","message","MessageStatus","otherAttachments","showMessageStatus","theme","colors","grey","grey_dark","messageSimple","content","deletedMetaText","eyeIcon","messageUser","metaContainer","metaText","t","color","textAlign","length","actions","Object","keys","user","name","areEqual","prevProps","nextProps","prevAlignment","prevFormattedDate","prevLastGroupMessage","prevMembers","prevMessage","prevOtherAttachments","prevShowMessageStatus","nextAlignment","nextFormattedDate","nextLastGroupMessage","nextMembers","nextMessage","nextOtherAttachments","nextShowMessageStatus","alignmentEqual","membersEqual","lastGroupMessageEqual","deletedMessagesVisibilityTypeEqual","isPrevMessageTypeDeleted","type","isNextMessageTypeDeleted","messageEqual","reply_count","status","text","pinned","otherAttachmentsEqual","showMessageStatusEqual","formattedDateEqual","MemoizedMessageFooter","React","memo","MessageFooter"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Text, View } from 'react-native';\n\nimport type { Attachment } from 'stream-chat';\n\nimport type { MessageStatusProps } from './MessageStatus';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport {\n Alignment,\n MessageContextValue,\n useMessageContext,\n} from '../../../contexts/messageContext/MessageContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../../contexts/messagesContext/MessagesContext';\n\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport { useTranslationContext } from '../../../contexts/translationContext/TranslationContext';\nimport { Eye } from '../../../icons';\n\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../types/types';\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\n\ntype MessageFooterComponentProps = {\n formattedDate: string | Date;\n isDeleted?: boolean;\n};\n\ntype MessageFooterPropsWithContext<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Pick<\n MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n | 'alignment'\n | 'members'\n | 'message'\n | 'otherAttachments'\n | 'showMessageStatus'\n | 'lastGroupMessage'\n> &\n Pick<\n MessagesContextValue<At, Ch, Co, Ev, Me, Re, Us>,\n 'deletedMessagesVisibilityType' | 'MessageStatus'\n > &\n MessageFooterComponentProps;\n\nconst MessageFooterWithContext = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n props: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n alignment,\n deletedMessagesVisibilityType,\n formattedDate,\n isDeleted,\n lastGroupMessage,\n members,\n message,\n MessageStatus,\n otherAttachments,\n showMessageStatus,\n } = props;\n\n const {\n theme: {\n colors: { grey, grey_dark },\n messageSimple: {\n content: { deletedMetaText, eyeIcon, messageUser, metaContainer, metaText },\n },\n },\n } = useTheme();\n const { t } = useTranslationContext();\n\n if (isDeleted) {\n return (\n <View style={metaContainer} testID='message-deleted'>\n {deletedMessagesVisibilityType === 'sender' && (\n <>\n <Eye pathFill={grey_dark} {...eyeIcon} />\n <Text\n style={[\n {\n color: grey_dark,\n textAlign: alignment,\n },\n metaText,\n deletedMetaText,\n ]}\n testID='only-visible-to-you'\n >\n {t('Only visible to you')}\n </Text>\n </>\n )}\n <Text\n style={[\n {\n color: grey,\n textAlign: alignment,\n },\n metaText,\n ]}\n >\n {formattedDate}\n </Text>\n </View>\n );\n }\n\n if (lastGroupMessage === false) {\n return null;\n }\n\n return (\n <View style={metaContainer} testID='message-status-time'>\n {otherAttachments.length && otherAttachments[0].actions ? (\n <>\n <Eye pathFill={grey_dark} {...eyeIcon} />\n <Text\n style={[\n {\n color: grey_dark,\n textAlign: alignment,\n },\n metaText,\n deletedMetaText,\n ]}\n >\n {t('Only visible to you')}\n </Text>\n </>\n ) : null}\n {Object.keys(members).length > 2 && alignment === 'left' && message.user?.name ? (\n <Text style={[{ color: grey }, messageUser]}>{message.user.name}</Text>\n ) : null}\n {showMessageStatus && <MessageStatus />}\n <Text style={[{ color: grey, textAlign: alignment }, metaText]}>{formattedDate}</Text>\n </View>\n );\n};\n\nconst areEqual = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n prevProps: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n nextProps: MessageFooterPropsWithContext<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n alignment: prevAlignment,\n formattedDate: prevFormattedDate,\n lastGroupMessage: prevLastGroupMessage,\n members: prevMembers,\n message: prevMessage,\n otherAttachments: prevOtherAttachments,\n showMessageStatus: prevShowMessageStatus,\n } = prevProps;\n const {\n alignment: nextAlignment,\n formattedDate: nextFormattedDate,\n lastGroupMessage: nextLastGroupMessage,\n members: nextMembers,\n message: nextMessage,\n otherAttachments: nextOtherAttachments,\n showMessageStatus: nextShowMessageStatus,\n } = nextProps;\n\n const alignmentEqual = prevAlignment === nextAlignment;\n if (!alignmentEqual) return false;\n\n const membersEqual = Object.keys(prevMembers).length === Object.keys(nextMembers).length;\n if (!membersEqual) return false;\n\n const lastGroupMessageEqual = prevLastGroupMessage === nextLastGroupMessage;\n if (!lastGroupMessageEqual) return false;\n\n const deletedMessagesVisibilityTypeEqual =\n prevProps.deletedMessagesVisibilityType === nextProps.deletedMessagesVisibilityType;\n if (!deletedMessagesVisibilityTypeEqual) return false;\n\n const isPrevMessageTypeDeleted = prevMessage.type === 'deleted';\n const isNextMessageTypeDeleted = nextMessage.type === 'deleted';\n\n const messageEqual =\n isPrevMessageTypeDeleted === isNextMessageTypeDeleted &&\n prevMessage.reply_count === nextMessage.reply_count &&\n prevMessage.status === nextMessage.status &&\n prevMessage.type === nextMessage.type &&\n prevMessage.text === nextMessage.text &&\n prevMessage.pinned === nextMessage.pinned;\n if (!messageEqual) return false;\n\n const otherAttachmentsEqual =\n prevOtherAttachments.length === nextOtherAttachments.length &&\n prevOtherAttachments?.[0]?.actions?.length === nextOtherAttachments?.[0]?.actions?.length;\n if (!otherAttachmentsEqual) return false;\n\n const showMessageStatusEqual = prevShowMessageStatus === nextShowMessageStatus;\n if (!showMessageStatusEqual) return false;\n\n const formattedDateEqual = prevFormattedDate === nextFormattedDate;\n if (!formattedDateEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageFooter = React.memo(\n MessageFooterWithContext,\n areEqual,\n) as typeof MessageFooterWithContext;\n\nexport type MessageFooterProps<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends DefaultUserType = DefaultUserType,\n> = Partial<Pick<ChannelContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'members'>> &\n MessageFooterComponentProps & {\n alignment?: Alignment;\n lastGroupMessage?: boolean;\n message?: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n MessageStatus?: React.ComponentType<MessageStatusProps<At, Ch, Co, Ev, Me, Re, Us>>;\n otherAttachments?: Attachment<At>[];\n showMessageStatus?: boolean;\n };\n\nexport const MessageFooter = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends DefaultUserType = DefaultUserType,\n>(\n props: MessageFooterProps<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const { alignment, lastGroupMessage, members, message, otherAttachments, showMessageStatus } =\n useMessageContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n const { deletedMessagesVisibilityType, MessageStatus } =\n useMessagesContext<At, Ch, Co, Ev, Me, Re, Us>();\n\n return (\n <MemoizedMessageFooter\n {...{\n alignment,\n deletedMessagesVisibilityType,\n lastGroupMessage,\n members,\n message,\n MessageStatus,\n otherAttachments,\n showMessageStatus,\n }}\n {...props}\n />\n );\n};\n"]}
|
|
@@ -3,7 +3,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.renderText = void 0;
|
|
6
|
+
exports.renderText = exports.ListOutput = void 0;
|
|
7
7
|
|
|
8
8
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
9
9
|
|
|
@@ -125,7 +125,7 @@ var renderText = function renderText(params) {
|
|
|
125
125
|
});
|
|
126
126
|
};
|
|
127
127
|
|
|
128
|
-
var
|
|
128
|
+
var link = function link(node, output, _ref) {
|
|
129
129
|
var state = (0, _extends2["default"])({}, _ref);
|
|
130
130
|
|
|
131
131
|
var onPress = function onPress(event) {
|
|
@@ -158,7 +158,7 @@ var renderText = function renderText(params) {
|
|
|
158
158
|
__self: _this,
|
|
159
159
|
__source: {
|
|
160
160
|
fileName: _jsxFileName,
|
|
161
|
-
lineNumber:
|
|
161
|
+
lineNumber: 197,
|
|
162
162
|
columnNumber: 7
|
|
163
163
|
}
|
|
164
164
|
}, output(node.content, (0, _extends2["default"])({}, state, {
|
|
@@ -175,7 +175,7 @@ var renderText = function renderText(params) {
|
|
|
175
175
|
__self: _this,
|
|
176
176
|
__source: {
|
|
177
177
|
fileName: _jsxFileName,
|
|
178
|
-
lineNumber:
|
|
178
|
+
lineNumber: 210,
|
|
179
179
|
columnNumber: 5
|
|
180
180
|
}
|
|
181
181
|
}, output(node.content, state));
|
|
@@ -225,75 +225,33 @@ var renderText = function renderText(params) {
|
|
|
225
225
|
__self: _this,
|
|
226
226
|
__source: {
|
|
227
227
|
fileName: _jsxFileName,
|
|
228
|
-
lineNumber:
|
|
228
|
+
lineNumber: 248,
|
|
229
229
|
columnNumber: 7
|
|
230
230
|
}
|
|
231
231
|
}, Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state));
|
|
232
232
|
};
|
|
233
233
|
|
|
234
|
-
var
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
var isTopLevelText = ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;
|
|
248
|
-
return _react["default"].createElement(_reactNative.View, {
|
|
249
|
-
key: index,
|
|
250
|
-
style: styles.listRow,
|
|
251
|
-
__self: _this,
|
|
252
|
-
__source: {
|
|
253
|
-
fileName: _jsxFileName,
|
|
254
|
-
lineNumber: 275,
|
|
255
|
-
columnNumber: 11
|
|
256
|
-
}
|
|
257
|
-
}, _react["default"].createElement(_reactNative.Text, {
|
|
258
|
-
style: styles.listItemNumber,
|
|
259
|
-
__self: _this,
|
|
260
|
-
__source: {
|
|
261
|
-
fileName: _jsxFileName,
|
|
262
|
-
lineNumber: 276,
|
|
263
|
-
columnNumber: 13
|
|
264
|
-
}
|
|
265
|
-
}, node.ordered ? node.start + index + ". " : "\u2022"), _react["default"].createElement(_reactNative.Text, {
|
|
266
|
-
style: [styles.listItemText, isTopLevelText && {
|
|
267
|
-
marginBottom: 0
|
|
268
|
-
}],
|
|
269
|
-
__self: _this,
|
|
270
|
-
__source: {
|
|
271
|
-
fileName: _jsxFileName,
|
|
272
|
-
lineNumber: 279,
|
|
273
|
-
columnNumber: 13
|
|
274
|
-
}
|
|
275
|
-
}, content));
|
|
276
|
-
});
|
|
277
|
-
var isSublist = level === 'sub';
|
|
278
|
-
return _react["default"].createElement(_reactNative.View, {
|
|
279
|
-
key: state.key,
|
|
280
|
-
style: [isSublist ? styles.list : styles.sublist],
|
|
281
|
-
__self: _this,
|
|
282
|
-
__source: {
|
|
283
|
-
fileName: _jsxFileName,
|
|
284
|
-
lineNumber: 288,
|
|
285
|
-
columnNumber: 9
|
|
286
|
-
}
|
|
287
|
-
}, items);
|
|
288
|
-
};
|
|
234
|
+
var list = function list(node, output, state) {
|
|
235
|
+
return _react["default"].createElement(ListOutput, {
|
|
236
|
+
node: node,
|
|
237
|
+
output: output,
|
|
238
|
+
state: state,
|
|
239
|
+
styles: styles,
|
|
240
|
+
__self: _this,
|
|
241
|
+
__source: {
|
|
242
|
+
fileName: _jsxFileName,
|
|
243
|
+
lineNumber: 255,
|
|
244
|
+
columnNumber: 5
|
|
245
|
+
}
|
|
246
|
+
});
|
|
289
247
|
};
|
|
290
248
|
|
|
291
249
|
var customRules = (0, _extends2["default"])({
|
|
292
250
|
link: {
|
|
293
|
-
|
|
251
|
+
link: link
|
|
294
252
|
},
|
|
295
253
|
list: {
|
|
296
|
-
react:
|
|
254
|
+
react: list
|
|
297
255
|
},
|
|
298
256
|
paragraph: messageTextNumberOfLines ? {
|
|
299
257
|
react: paragraphText
|
|
@@ -304,7 +262,7 @@ var renderText = function renderText(params) {
|
|
|
304
262
|
}
|
|
305
263
|
},
|
|
306
264
|
sublist: {
|
|
307
|
-
react:
|
|
265
|
+
react: list
|
|
308
266
|
}
|
|
309
267
|
}, mentionedUsers ? {
|
|
310
268
|
mentions: {
|
|
@@ -322,11 +280,133 @@ var renderText = function renderText(params) {
|
|
|
322
280
|
__self: _this,
|
|
323
281
|
__source: {
|
|
324
282
|
fileName: _jsxFileName,
|
|
325
|
-
lineNumber:
|
|
283
|
+
lineNumber: 279,
|
|
326
284
|
columnNumber: 5
|
|
327
285
|
}
|
|
328
286
|
}, newText);
|
|
329
287
|
};
|
|
330
288
|
|
|
331
289
|
exports.renderText = renderText;
|
|
290
|
+
|
|
291
|
+
var ListOutput = function ListOutput(_ref4) {
|
|
292
|
+
var node = _ref4.node,
|
|
293
|
+
output = _ref4.output,
|
|
294
|
+
state = _ref4.state,
|
|
295
|
+
styles = _ref4.styles;
|
|
296
|
+
var isSublist = state.withinList;
|
|
297
|
+
var parentTypes = ['text', 'paragraph', 'strong'];
|
|
298
|
+
return _react["default"].createElement(_reactNative.View, {
|
|
299
|
+
key: state.key,
|
|
300
|
+
style: isSublist ? styles == null ? void 0 : styles.sublist : styles == null ? void 0 : styles.list,
|
|
301
|
+
__self: _this,
|
|
302
|
+
__source: {
|
|
303
|
+
fileName: _jsxFileName,
|
|
304
|
+
lineNumber: 314,
|
|
305
|
+
columnNumber: 5
|
|
306
|
+
}
|
|
307
|
+
}, node.items.map(function (item, index) {
|
|
308
|
+
var _item$;
|
|
309
|
+
|
|
310
|
+
var indexAfterStart = node.start + index;
|
|
311
|
+
|
|
312
|
+
if (item === null) {
|
|
313
|
+
return _react["default"].createElement(ListRow, {
|
|
314
|
+
key: index,
|
|
315
|
+
style: styles == null ? void 0 : styles.listRow,
|
|
316
|
+
testID: "list-item",
|
|
317
|
+
__self: _this,
|
|
318
|
+
__source: {
|
|
319
|
+
fileName: _jsxFileName,
|
|
320
|
+
lineNumber: 320,
|
|
321
|
+
columnNumber: 13
|
|
322
|
+
}
|
|
323
|
+
}, _react["default"].createElement(Bullet, {
|
|
324
|
+
index: node.ordered && indexAfterStart,
|
|
325
|
+
__self: _this,
|
|
326
|
+
__source: {
|
|
327
|
+
fileName: _jsxFileName,
|
|
328
|
+
lineNumber: 321,
|
|
329
|
+
columnNumber: 15
|
|
330
|
+
}
|
|
331
|
+
}));
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
isSublist = item.length > 1 && item[1].type === 'list';
|
|
335
|
+
var isSublistWithinText = parentTypes.includes(((_item$ = item[0]) != null ? _item$ : {}).type) && isSublist;
|
|
336
|
+
var style = isSublistWithinText ? {
|
|
337
|
+
marginBottom: 0
|
|
338
|
+
} : {};
|
|
339
|
+
return _react["default"].createElement(ListRow, {
|
|
340
|
+
key: index,
|
|
341
|
+
style: styles == null ? void 0 : styles.listRow,
|
|
342
|
+
testID: "list-item",
|
|
343
|
+
__self: _this,
|
|
344
|
+
__source: {
|
|
345
|
+
fileName: _jsxFileName,
|
|
346
|
+
lineNumber: 331,
|
|
347
|
+
columnNumber: 11
|
|
348
|
+
}
|
|
349
|
+
}, _react["default"].createElement(Bullet, {
|
|
350
|
+
index: node.ordered && indexAfterStart,
|
|
351
|
+
__self: _this,
|
|
352
|
+
__source: {
|
|
353
|
+
fileName: _jsxFileName,
|
|
354
|
+
lineNumber: 332,
|
|
355
|
+
columnNumber: 13
|
|
356
|
+
}
|
|
357
|
+
}), _react["default"].createElement(ListItem, {
|
|
358
|
+
key: 1,
|
|
359
|
+
style: [styles == null ? void 0 : styles.listItemText, style],
|
|
360
|
+
__self: _this,
|
|
361
|
+
__source: {
|
|
362
|
+
fileName: _jsxFileName,
|
|
363
|
+
lineNumber: 333,
|
|
364
|
+
columnNumber: 13
|
|
365
|
+
}
|
|
366
|
+
}, output(item, state)));
|
|
367
|
+
}));
|
|
368
|
+
};
|
|
369
|
+
|
|
370
|
+
exports.ListOutput = ListOutput;
|
|
371
|
+
|
|
372
|
+
var Bullet = function Bullet(_ref5) {
|
|
373
|
+
var index = _ref5.index,
|
|
374
|
+
style = _ref5.style;
|
|
375
|
+
return _react["default"].createElement(_reactNative.Text, {
|
|
376
|
+
key: 0,
|
|
377
|
+
style: [style, defaultMarkdownStyles.listItemNumber],
|
|
378
|
+
__self: _this,
|
|
379
|
+
__source: {
|
|
380
|
+
fileName: _jsxFileName,
|
|
381
|
+
lineNumber: 348,
|
|
382
|
+
columnNumber: 3
|
|
383
|
+
}
|
|
384
|
+
}, index ? index + ". " : "\u2022 ");
|
|
385
|
+
};
|
|
386
|
+
|
|
387
|
+
var ListRow = function ListRow(props) {
|
|
388
|
+
return _react["default"].createElement(_reactNative.Text, {
|
|
389
|
+
style: [props.style, defaultMarkdownStyles.listRow],
|
|
390
|
+
__self: _this,
|
|
391
|
+
__source: {
|
|
392
|
+
fileName: _jsxFileName,
|
|
393
|
+
lineNumber: 354,
|
|
394
|
+
columnNumber: 3
|
|
395
|
+
}
|
|
396
|
+
}, props.children);
|
|
397
|
+
};
|
|
398
|
+
|
|
399
|
+
var ListItem = function ListItem(_ref6) {
|
|
400
|
+
var children = _ref6.children,
|
|
401
|
+
style = _ref6.style;
|
|
402
|
+
return _react["default"].createElement(_reactNative.Text, {
|
|
403
|
+
style: style,
|
|
404
|
+
__self: _this,
|
|
405
|
+
__source: {
|
|
406
|
+
fileName: _jsxFileName,
|
|
407
|
+
lineNumber: 358,
|
|
408
|
+
columnNumber: 3
|
|
409
|
+
}
|
|
410
|
+
}, children);
|
|
411
|
+
};
|
|
332
412
|
//# sourceMappingURL=renderText.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","text","newText","trim","urls","urlInfo","displayLink","encoded","length","omission","markdown","scheme","replace","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","react","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","listLevels","sub","top","customListAtLevel","level","items","map","item","index","withinList","type","isTopLevelText","includes","ordered","start","isSublist","sublist","customRules","link","reflink","order","defaultRules","JSON","stringify","undefined"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { GestureResponderEvent, Linking, Text, View } from 'react-native';\n\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\n\nimport truncate from 'lodash/truncate';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n SingleASTNode,\n} from 'simple-markdown';\n\nimport { parseLinksFromText } from './parseLinks';\n\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = parseLinksFromText(newText);\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded, {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.scheme}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const react: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const listLevels = {\n sub: 'sub',\n top: 'top',\n };\n\n /**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n */\n const customListAtLevel =\n (level: keyof typeof listLevels): ReactNodeOutput =>\n (node, output, { ...state }) => {\n const items = node.items.map((item: Array<SingleASTNode>, index: number) => {\n const withinList = item.length > 1 && item[1].type === 'list';\n const content = output(item, { ...state, withinList });\n\n const isTopLevelText =\n ['text', 'paragraph', 'strong'].includes(item[0].type) && withinList === false;\n\n return (\n <View key={index} style={styles.listRow}>\n <Text style={styles.listItemNumber}>\n {node.ordered ? `${node.start + index}. ` : `\\u2022`}\n </Text>\n <Text style={[styles.listItemText, isTopLevelText && { marginBottom: 0 }]}>\n {content}\n </Text>\n </View>\n );\n });\n\n const isSublist = level === 'sub';\n return (\n <View key={state.key} style={[isSublist ? styles.list : styles.sublist]}>\n {items}\n </View>\n );\n };\n\n const customRules = {\n link: { react },\n list: { react: customListAtLevel('top') },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: customListAtLevel('sub') },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["renderText.tsx"],"names":["defaultMarkdownStyles","inlineCode","fontSize","padding","paddingHorizontal","list","marginBottom","marginTop","listItemNumber","fontWeight","listItemText","flex","listRow","flexDirection","mentions","paragraph","paragraphCenter","paragraphWithImage","parse","capture","state","content","renderText","params","colors","markdownRules","markdownStyles","message","messageOverlay","messageTextNumberOfLines","onLinkParams","onLink","onLongPressParam","onLongPress","onlyEmojis","onPressParam","onPress","preventPress","mentioned_users","text","newText","trim","urls","urlInfo","displayLink","encoded","length","omission","markdown","scheme","replace","raw","styles","autolink","color","accent_blue","backgroundColor","white_smoke","borderColor","grey_gainsboro","accent_red","black","url","Linking","canOpenURL","then","canOpenUrl","openURL","link","node","output","event","defaultHandler","target","emitter","key","withinLink","paragraphText","mentionedUsers","Array","isArray","reduce","acc","cur","userName","name","id","regEx","RegExp","match","source","exec","mentionsReact","customRules","react","reflink","sublist","order","defaultRules","JSON","stringify","undefined","ListOutput","isSublist","withinList","parentTypes","items","map","item","index","indexAfterStart","start","ordered","type","isSublistWithinText","includes","style","Bullet","ListRow","props","children","ListItem"],"mappings":"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","sourcesContent":["import React, { PropsWithChildren } from 'react';\nimport { GestureResponderEvent, Linking, Text, TextProps, View, ViewProps } from 'react-native';\n\n// @ts-expect-error\nimport Markdown from 'react-native-markdown-package';\n\nimport truncate from 'lodash/truncate';\nimport {\n DefaultRules,\n defaultRules,\n MatchFunction,\n ParseFunction,\n parseInline,\n ReactNodeOutput,\n ReactOutput,\n SingleASTNode,\n State,\n} from 'simple-markdown';\n\nimport { parseLinksFromText } from './parseLinks';\n\nimport type { MessageContextValue } from '../../../../contexts/messageContext/MessageContext';\nimport type { Colors, MarkdownStyle } from '../../../../contexts/themeContext/utils/theme';\nimport type {\n DefaultAttachmentType,\n DefaultChannelType,\n DefaultCommandType,\n DefaultEventType,\n DefaultMessageType,\n DefaultReactionType,\n DefaultUserType,\n UnknownType,\n} from '../../../../types/types';\nimport type { MessageType } from '../../../MessageList/hooks/useMessageList';\n\nconst defaultMarkdownStyles: MarkdownStyle = {\n inlineCode: {\n fontSize: 13,\n padding: 3,\n paddingHorizontal: 5,\n },\n list: {\n marginBottom: 8,\n marginTop: 8,\n },\n listItemNumber: {\n fontWeight: 'bold',\n },\n listItemText: {\n flex: 0,\n },\n listRow: {\n flexDirection: 'row',\n },\n mentions: {\n fontWeight: '700',\n },\n paragraph: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphCenter: {\n marginBottom: 8,\n marginTop: 8,\n },\n paragraphWithImage: {\n marginBottom: 8,\n marginTop: 8,\n },\n};\n\nconst parse: ParseFunction = (capture, parse, state) => ({\n content: parseInline(parse, capture[0], state),\n});\n\nexport type MarkdownRules = Partial<DefaultRules>;\n\nexport type RenderTextParams<\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n> = Partial<\n Pick<MessageContextValue<At, Ch, Co, Ev, Me, Re, Us>, 'onLongPress' | 'onPress' | 'preventPress'>\n> & {\n colors: typeof Colors;\n message: MessageType<At, Ch, Co, Ev, Me, Re, Us>;\n markdownRules?: MarkdownRules;\n markdownStyles?: MarkdownStyle;\n messageOverlay?: boolean;\n messageTextNumberOfLines?: number;\n onLink?: (url: string) => Promise<void>;\n onlyEmojis?: boolean;\n};\n\nexport const renderText = <\n At extends UnknownType = DefaultAttachmentType,\n Ch extends UnknownType = DefaultChannelType,\n Co extends string = DefaultCommandType,\n Ev extends UnknownType = DefaultEventType,\n Me extends UnknownType = DefaultMessageType,\n Re extends UnknownType = DefaultReactionType,\n Us extends UnknownType = DefaultUserType,\n>(\n params: RenderTextParams<At, Ch, Co, Ev, Me, Re, Us>,\n) => {\n const {\n colors,\n markdownRules,\n markdownStyles,\n message,\n messageOverlay,\n messageTextNumberOfLines,\n onLink: onLinkParams,\n onLongPress: onLongPressParam,\n onlyEmojis,\n onPress: onPressParam,\n preventPress,\n } = params;\n\n // take the @ mentions and turn them into markdown?\n // translate links\n const { mentioned_users, text } = message;\n\n if (!text) return null;\n\n let newText = text.trim();\n const urls = parseLinksFromText(newText);\n\n for (const urlInfo of urls) {\n const displayLink = truncate(urlInfo.encoded, {\n length: 200,\n omission: '...',\n });\n const markdown = `[${displayLink}](${urlInfo.scheme}${urlInfo.encoded})`;\n newText = newText.replace(urlInfo.raw, markdown);\n }\n\n newText = newText.replace(/[<&\"'>]/g, '\\\\$&');\n\n const styles: MarkdownStyle = {\n ...defaultMarkdownStyles,\n ...markdownStyles,\n autolink: {\n ...defaultMarkdownStyles.autolink,\n color: colors.accent_blue,\n ...markdownStyles?.autolink,\n },\n inlineCode: {\n ...defaultMarkdownStyles.inlineCode,\n backgroundColor: colors.white_smoke,\n borderColor: colors.grey_gainsboro,\n color: colors.accent_red,\n ...markdownStyles?.inlineCode,\n },\n mentions: {\n ...defaultMarkdownStyles.mentions,\n color: colors.accent_blue,\n ...markdownStyles?.mentions,\n },\n text: {\n ...defaultMarkdownStyles.text,\n color: colors.black,\n ...markdownStyles?.text,\n },\n };\n\n const onLink = (url: string) =>\n onLinkParams\n ? onLinkParams(url)\n : Linking.canOpenURL(url).then((canOpenUrl) => canOpenUrl && Linking.openURL(url));\n\n const link: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n defaultHandler: () => onLink(node.target),\n emitter: 'textLink',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textLink',\n event,\n });\n }\n };\n\n return (\n <Text\n key={state.key}\n onLongPress={onLongPress}\n onPress={onPress}\n style={styles.autolink}\n suppressHighlighting={true}\n >\n {output(node.content, { ...state, withinLink: true })}\n </Text>\n );\n };\n\n const paragraphText: ReactNodeOutput = (node, output, { ...state }) => (\n <Text key={state.key} numberOfLines={messageTextNumberOfLines} style={styles.paragraph}>\n {output(node.content, state)}\n </Text>\n );\n\n const mentionedUsers = Array.isArray(mentioned_users)\n ? mentioned_users.reduce((acc, cur) => {\n const userName = cur.name || cur.id || '';\n if (userName) {\n acc += `${acc.length ? '|' : ''}@${userName}`;\n }\n return acc;\n }, '')\n : '';\n\n const regEx = new RegExp(`^\\\\B(${mentionedUsers})`, 'g');\n const match: MatchFunction = (source) => regEx.exec(source);\n\n const mentionsReact: ReactNodeOutput = (node, output, { ...state }) => {\n const onPress = (event: GestureResponderEvent) => {\n if (!preventPress && onPressParam) {\n onPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n const onLongPress = (event: GestureResponderEvent) => {\n if (!preventPress && onLongPressParam) {\n onLongPressParam({\n emitter: 'textMention',\n event,\n });\n }\n };\n\n return (\n <Text key={state.key} onLongPress={onLongPress} onPress={onPress} style={styles.mentions}>\n {Array.isArray(node.content) ? node.content[0].content || '' : output(node.content, state)}\n </Text>\n );\n };\n\n const list: ReactNodeOutput = (node, output, state) => (\n <ListOutput node={node} output={output} state={state} styles={styles} />\n );\n\n const customRules = {\n link: { link },\n list: { react: list },\n // Truncate long text content in the message overlay\n paragraph: messageTextNumberOfLines ? { react: paragraphText } : {},\n // we have no react rendering support for reflinks\n reflink: { match: () => null },\n sublist: { react: list },\n ...(mentionedUsers\n ? {\n mentions: {\n match,\n order: defaultRules.text.order - 0.5,\n parse,\n react: mentionsReact,\n },\n }\n : {}),\n };\n\n return (\n <Markdown\n key={`${JSON.stringify(mentioned_users)}-${onlyEmojis}-${\n messageOverlay ? JSON.stringify(markdownStyles) : undefined\n }-${JSON.stringify(colors)}`}\n onLink={onLink}\n rules={{\n ...customRules,\n ...markdownRules,\n }}\n styles={styles}\n >\n {newText}\n </Markdown>\n );\n};\n\nexport interface ListOutputProps {\n node: SingleASTNode;\n output: ReactOutput;\n state: State;\n styles?: Partial<MarkdownStyle>;\n}\n\n/**\n * For lists and sublists, the default behavior of the markdown library we use is\n * to always renumber any list, so all ordered lists start from 1.\n *\n * This custom rule overrides this behavior both for top level lists and sublists,\n * in order to start the numbering from the number of the first list item provided.\n */\nexport const ListOutput = ({ node, output, state, styles }: ListOutputProps) => {\n let isSublist = state.withinList;\n const parentTypes = ['text', 'paragraph', 'strong'];\n\n return (\n <View key={state.key} style={isSublist ? styles?.sublist : styles?.list}>\n {node.items.map((item: SingleASTNode, index: number) => {\n const indexAfterStart = node.start + index;\n\n if (item === null) {\n return (\n <ListRow key={index} style={styles?.listRow} testID='list-item'>\n <Bullet index={node.ordered && indexAfterStart} />\n </ListRow>\n );\n }\n\n isSublist = item.length > 1 && item[1].type === 'list';\n const isSublistWithinText = parentTypes.includes((item[0] ?? {}).type) && isSublist;\n const style = isSublistWithinText ? { marginBottom: 0 } : {};\n\n return (\n <ListRow key={index} style={styles?.listRow} testID='list-item'>\n <Bullet index={node.ordered && indexAfterStart} />\n <ListItem key={1} style={[styles?.listItemText, style]}>\n {output(item, state)}\n </ListItem>\n </ListRow>\n );\n })}\n </View>\n );\n};\n\ninterface BulletProps extends TextProps {\n index?: number;\n}\n\nconst Bullet = ({ index, style }: BulletProps) => (\n <Text key={0} style={[style, defaultMarkdownStyles.listItemNumber]}>\n {index ? `${index}. ` : '\\u2022 '}\n </Text>\n);\n\nconst ListRow = (props: PropsWithChildren<ViewProps>) => (\n <Text style={[props.style, defaultMarkdownStyles.listRow]}>{props.children}</Text>\n);\n\nconst ListItem = ({ children, style }: PropsWithChildren<TextProps>) => (\n <Text style={style}>{children}</Text>\n);\n"]}
|