summaryrefslogtreecommitdiffstats
path: root/webapp/components/post_view/post_message_view/post_message_view.jsx
diff options
context:
space:
mode:
Diffstat (limited to 'webapp/components/post_view/post_message_view/post_message_view.jsx')
-rw-r--r--webapp/components/post_view/post_message_view/post_message_view.jsx215
1 files changed, 0 insertions, 215 deletions
diff --git a/webapp/components/post_view/post_message_view/post_message_view.jsx b/webapp/components/post_view/post_message_view/post_message_view.jsx
deleted file mode 100644
index 348748450..000000000
--- a/webapp/components/post_view/post_message_view/post_message_view.jsx
+++ /dev/null
@@ -1,215 +0,0 @@
-// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
-// See License.txt for license information.
-
-import {Parser, ProcessNodeDefinitions} from 'html-to-react';
-import PropTypes from 'prop-types';
-import React from 'react';
-import {FormattedMessage} from 'react-intl';
-
-import AtMention from 'components/at_mention';
-import MarkdownImage from 'components/markdown_image';
-
-import store from 'stores/redux_store.jsx';
-
-import * as PostUtils from 'utils/post_utils.jsx';
-import * as TextFormatting from 'utils/text_formatting.jsx';
-import * as Utils from 'utils/utils.jsx';
-
-import {getChannelsNameMapInCurrentTeam} from 'mattermost-redux/selectors/entities/channels';
-import {Posts} from 'mattermost-redux/constants';
-
-import {renderSystemMessage} from './system_message_helpers.jsx';
-
-export default class PostMessageView extends React.PureComponent {
- static propTypes = {
-
- /*
- * The post to render the message for
- */
- post: PropTypes.object.isRequired,
-
- /*
- * Object using emoji names as keys with custom emojis as the values
- */
- emojis: PropTypes.object.isRequired,
-
- /*
- * The team the post was made in
- */
- team: PropTypes.object.isRequired,
-
- /*
- * Set to enable Markdown formatting
- */
- enableFormatting: PropTypes.bool,
-
- /*
- * An array of words that can be used to mention a user
- */
- mentionKeys: PropTypes.arrayOf(PropTypes.string),
-
- /*
- * The URL that the app is hosted on
- */
- siteUrl: PropTypes.string,
-
- /*
- * Options specific to text formatting
- */
- options: PropTypes.object,
-
- /*
- * Post identifiers for selenium tests
- */
- lastPostCount: PropTypes.number,
-
- /**
- * Set to render post body compactly
- */
- compactDisplay: PropTypes.bool,
-
- /**
- * Flags if the post_message_view is for the RHS (Reply).
- */
- isRHS: PropTypes.bool,
-
- /**
- * Flags if the post_message_view is for the RHS (Reply).
- */
- hasMention: PropTypes.bool
- };
-
- static defaultProps = {
- options: {},
- mentionKeys: [],
- isRHS: false,
- hasMention: false
- };
-
- renderDeletedPost() {
- return (
- <p>
- <FormattedMessage
- id='post_body.deleted'
- defaultMessage='(message deleted)'
- />
- </p>
- );
- }
-
- renderEditedIndicator() {
- if (!PostUtils.isEdited(this.props.post)) {
- return null;
- }
-
- return (
- <span className='post-edited-indicator'>
- <FormattedMessage
- id='post_message_view.edited'
- defaultMessage='(edited)'
- />
- </span>
- );
- }
-
- postMessageHtmlToComponent(html) {
- const parser = new Parser();
- const attrib = 'data-mention';
- const processNodeDefinitions = new ProcessNodeDefinitions(React);
-
- function isValidNode() {
- return true;
- }
-
- const processingInstructions = [
- {
- replaceChildren: true,
- shouldProcessNode: (node) => node.attribs && node.attribs[attrib],
- processNode: (node) => {
- const mentionName = node.attribs[attrib];
-
- return (
- <AtMention
- mentionName={mentionName}
- isRHS={this.props.isRHS}
- hasMention={this.props.hasMention}
- />
- );
- }
- },
- {
- shouldProcessNode: (node) => node.type === 'tag' && node.name === 'img',
- processNode: (node) => {
- const {
- class: className,
- ...attribs
- } = node.attribs;
-
- return (
- <MarkdownImage
- className={className}
- {...attribs}
- />
- );
- }
- },
- {
- shouldProcessNode: () => true,
- processNode: processNodeDefinitions.processDefaultNode
- }
- ];
-
- return parser.parseWithInstructions(html, isValidNode, processingInstructions);
- }
-
- render() {
- if (this.props.post.state === Posts.POST_DELETED) {
- return this.renderDeletedPost();
- }
-
- if (!this.props.enableFormatting) {
- return <span>{this.props.post.message}</span>;
- }
-
- const options = Object.assign({}, this.props.options, {
- emojis: this.props.emojis,
- siteURL: this.props.siteUrl,
- mentionKeys: this.props.mentionKeys,
- atMentions: true,
- channelNamesMap: getChannelsNameMapInCurrentTeam(store.getState()),
- team: this.props.team
- });
-
- const renderedSystemMessage = renderSystemMessage(this.props.post, options);
- if (renderedSystemMessage) {
- return <div>{renderedSystemMessage}</div>;
- }
-
- let postId = null;
- if (this.props.lastPostCount >= 0) {
- postId = Utils.createSafeId('lastPostMessageText' + this.props.lastPostCount);
- }
-
- let message = this.props.post.message;
- const isEphemeral = Utils.isPostEphemeral(this.props.post);
- if (this.props.compactDisplay && isEphemeral) {
- const visibleMessage = Utils.localizeMessage('post_info.message.visible.compact', ' (Only visible to you)');
- message = message.concat(visibleMessage);
- }
- const htmlFormattedText = TextFormatting.formatText(message, options);
- const postMessageComponent = this.postMessageHtmlToComponent(htmlFormattedText);
-
- return (
- <div>
- <span
- id={postId}
- className='post-message__text'
- onClick={Utils.handleFormattedTextClick}
- >
- {postMessageComponent}
- </span>
- {this.renderEditedIndicator()}
- </div>
- );
- }
-}