mattermost-mobile/app/components/post_body/system_message_helpers.js
Allen Lai 3e2fc1bc67
[MM-20804] Add "Unarchive Channel" option to the channel info screen (#3663)
* undelete

* fix build

* change let to const

* ran make i18n

* small refactor

* using canUndelete var

* added render message

* fix bug

* sync

* remove duplicate

* fix test

* add unit test for unarchive channel button render

* fix unit test for unarchive channel

* delete space

* change logic in undelete

* add server minimum for feature

* fix renderunarchive test with adding props variables

* snpashot wasnt matching. fixed by adding to base prop

* return early if false

* change position and color for unarchive button

* refactor handle delete undelete leave

* move serverversion call up

* undelete to unarchive

* remove unnecessary seperator

* hash

* Update app/screens/channel_info/index.js

Co-Authored-By: Elias Nahum <nahumhbl@gmail.com>

* delete canuseunarchive feature

* add test to render sys message

* remote 'w' in package.json

* add trailing comma

* update redux hash

* whitespace in test

Co-authored-by: Elias Nahum <nahumhbl@gmail.com>
2020-02-26 21:02:28 -03:00

174 lines
6.1 KiB
JavaScript

// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See LICENSE.txt for license information.
import React from 'react';
import {Posts} from 'mattermost-redux/constants';
import Markdown from 'app/components/markdown';
import {t} from 'app/utils/i18n';
const renderUsername = (value) => {
return (value[0] === '@') ? value : `@${value}`;
};
const renderMessage = (postBodyProps, styles, intl, localeHolder, values) => {
const {onPress} = postBodyProps;
const {messageStyle, textStyles} = styles;
return (
<Markdown
baseTextStyle={messageStyle}
onPostPress={onPress}
textStyles={textStyles}
value={intl.formatMessage(localeHolder, values)}
/>
);
};
const renderHeaderChangeMessage = (postBodyProps, styles, intl) => {
const {postProps} = postBodyProps;
let values;
if (!postProps.username) {
return null;
}
const username = renderUsername(postProps.username);
const oldHeader = postProps.old_header;
const newHeader = postProps.new_header;
let localeHolder;
if (postProps.new_header) {
if (postProps.old_header) {
localeHolder = {
id: t('mobile.system_message.update_channel_header_message_and_forget.updated_from'),
defaultMessage: '{username} updated the channel header from: {oldHeader} to: {newHeader}',
};
values = {username, oldHeader, newHeader};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
}
localeHolder = {
id: t('mobile.system_message.update_channel_header_message_and_forget.updated_to'),
defaultMessage: '{username} updated the channel header to: {newHeader}',
};
values = {username, oldHeader, newHeader};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
} else if (postProps.old_header) {
localeHolder = {
id: t('mobile.system_message.update_channel_header_message_and_forget.removed'),
defaultMessage: '{username} removed the channel header (was: {oldHeader})',
};
values = {username, oldHeader, newHeader};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
}
return null;
};
const renderPurposeChangeMessage = (postBodyProps, styles, intl) => {
const {postProps} = postBodyProps;
let values;
if (!postProps.username) {
return null;
}
const username = renderUsername(postProps.username);
const oldPurpose = postProps.old_purpose;
const newPurpose = postProps.new_purpose;
let localeHolder;
if (postProps.new_purpose) {
if (postProps.old_purpose) {
localeHolder = {
id: t('mobile.system_message.update_channel_purpose_message.updated_from'),
defaultMessage: '{username} updated the channel purpose from: {oldPurpose} to: {newPurpose}',
};
values = {username, oldPurpose, newPurpose};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
}
localeHolder = {
id: t('mobile.system_message.update_channel_purpose_message.updated_to'),
defaultMessage: '{username} updated the channel purpose to: {newPurpose}',
};
values = {username, oldPurpose, newPurpose};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
} else if (postProps.old_purpose) {
localeHolder = {
id: t('mobile.system_message.update_channel_purpose_message.removed'),
defaultMessage: '{username} removed the channel purpose (was: {oldPurpose})',
};
values = {username, oldPurpose, newPurpose};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
}
return null;
};
const renderDisplayNameChangeMessage = (postBodyProps, styles, intl) => {
const {postProps} = postBodyProps;
const oldDisplayName = postProps.old_displayname;
const newDisplayName = postProps.new_displayname;
if (!(postProps.username && postProps.old_displayname && postProps.new_displayname)) {
return null;
}
const username = renderUsername(postProps.username);
const localeHolder = {
id: t('mobile.system_message.update_channel_displayname_message_and_forget.updated_from'),
defaultMessage: '{username} updated the channel display name from: {oldDisplayName} to: {newDisplayName}',
};
const values = {username, oldDisplayName, newDisplayName};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
};
const renderArchivedMessage = (postBodyProps, styles, intl) => {
const {postProps} = postBodyProps;
const username = renderUsername(postProps.username);
const localeHolder = {
id: t('mobile.system_message.channel_archived_message'),
defaultMessage: '{username} archived the channel',
};
const values = {username};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
};
const renderUnarchivedMessage = (postBodyProps, styles, intl) => {
const {postProps} = postBodyProps;
const username = renderUsername(postProps.username);
const localeHolder = {
id: t('mobile.system_message.channel_unarchived_message'),
defaultMessage: '{username} unarchived the channel',
};
const values = {username};
return renderMessage(postBodyProps, styles, intl, localeHolder, values);
};
const systemMessageRenderers = {
[Posts.POST_TYPES.HEADER_CHANGE]: renderHeaderChangeMessage,
[Posts.POST_TYPES.DISPLAYNAME_CHANGE]: renderDisplayNameChangeMessage,
[Posts.POST_TYPES.PURPOSE_CHANGE]: renderPurposeChangeMessage,
[Posts.POST_TYPES.CHANNEL_DELETED]: renderArchivedMessage,
[Posts.POST_TYPES.CHANNEL_UNARCHIVED]: renderUnarchivedMessage,
};
export const renderSystemMessage = (postBodyProps, styles, intl) => {
const renderer = systemMessageRenderers[postBodyProps.postType];
if (!renderer) {
return null;
}
return renderer(postBodyProps, styles, intl);
};