From 52886e7631e4ca139d8bae63e44a5e29c79f2ea0 Mon Sep 17 00:00:00 2001 From: Elias Nahum Date: Tue, 15 Sep 2020 10:03:40 -0300 Subject: [PATCH] MM-28602 Fix announcement banner crash if it includes a hashtag (#4808) * MM-28602 Fix announcement banner with hashtag crash * Fix expanded announcement banner layout * Fix announcement banner animation --- .../announcement_banner.test.js.snap | 61 ++++++++++++++++++- .../announcement_banner.js | 23 +++++-- app/components/remove_markdown.js | 5 ++ .../expanded_announcement_banner.js | 27 ++++---- .../expanded_announcement_banner/index.js | 5 +- 5 files changed, 101 insertions(+), 20 deletions(-) diff --git a/app/components/announcement_banner/__snapshots__/announcement_banner.test.js.snap b/app/components/announcement_banner/__snapshots__/announcement_banner.test.js.snap index 17249b6f4..2453aeafa 100644 --- a/app/components/announcement_banner/__snapshots__/announcement_banner.test.js.snap +++ b/app/components/announcement_banner/__snapshots__/announcement_banner.test.js.snap @@ -61,4 +61,63 @@ exports[`AnnouncementBanner should match snapshot 1`] = ` `; -exports[`AnnouncementBanner should match snapshot 2`] = `null`; +exports[`AnnouncementBanner should match snapshot 2`] = ` + + + + + + + + +`; diff --git a/app/components/announcement_banner/announcement_banner.js b/app/components/announcement_banner/announcement_banner.js index b46bcf422..cf25581a1 100644 --- a/app/components/announcement_banner/announcement_banner.js +++ b/app/components/announcement_banner/announcement_banner.js @@ -5,6 +5,7 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import { Animated, + InteractionManager, StyleSheet, Text, TouchableOpacity, @@ -67,15 +68,25 @@ export default class AnnouncementBanner extends PureComponent { toggleBanner = (show = true) => { const value = show ? 38 : 0; - Animated.timing(this.state.bannerHeight, { - toValue: value, - duration: 350, - useNativeDriver: false, - }).start(); + if (show && !this.state.visible) { + this.setState({visible: show}); + } + + InteractionManager.runAfterInteractions(() => { + Animated.timing(this.state.bannerHeight, { + toValue: value, + duration: 350, + useNativeDriver: false, + }).start(() => { + if (this.state.visible !== show) { + this.setState({visible: show}); + } + }); + }); }; render() { - if (!this.props.bannerEnabled) { + if (!this.state.visible) { return null; } diff --git a/app/components/remove_markdown.js b/app/components/remove_markdown.js index eb4d2562d..d55eea91f 100644 --- a/app/components/remove_markdown.js +++ b/app/components/remove_markdown.js @@ -33,9 +33,11 @@ export default class RemoveMarkdown extends React.PureComponent { del: Renderer.forwardChildren, code: Renderer.forwardChildren, link: Renderer.forwardChildren, + image: this.renderNull, atMention: Renderer.forwardChildren, channelLink: Renderer.forwardChildren, emoji: this.renderNull, + hashtag: Renderer.forwardChildren, paragraph: Renderer.forwardChildren, heading: Renderer.forwardChildren, @@ -55,6 +57,9 @@ export default class RemoveMarkdown extends React.PureComponent { table: this.renderNull, table_row: this.renderNull, table_cell: this.renderNull, + + mention_highlight: Renderer.forwardChildren, + editedIndicator: Renderer.forwardChildren, }, }); }; diff --git a/app/screens/expanded_announcement_banner/expanded_announcement_banner.js b/app/screens/expanded_announcement_banner/expanded_announcement_banner.js index 54ea66cfc..5bedc9ad1 100644 --- a/app/screens/expanded_announcement_banner/expanded_announcement_banner.js +++ b/app/screens/expanded_announcement_banner/expanded_announcement_banner.js @@ -6,12 +6,12 @@ import React from 'react'; import {ScrollView, View} from 'react-native'; import Button from 'react-native-button'; -import FormattedText from 'app/components/formatted_text'; -import Markdown from 'app/components/markdown'; -import SafeAreaView from 'app/components/safe_area_view'; -import {getMarkdownTextStyles, getMarkdownBlockStyles} from 'app/utils/markdown'; -import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme'; -import {popTopScreen} from 'app/actions/navigation'; +import {popTopScreen} from '@actions/navigation'; +import FormattedText from '@components/formatted_text'; +import Markdown from '@components/markdown'; +import SafeAreaView from '@components/safe_area_view'; +import {getMarkdownTextStyles, getMarkdownBlockStyles} from '@utils/markdown'; +import {changeOpacity, makeStyleSheetFromTheme} from '@utils/theme'; export default class ExpandedAnnouncementBanner extends React.PureComponent { static propTypes = { @@ -20,6 +20,7 @@ export default class ExpandedAnnouncementBanner extends React.PureComponent { }).isRequired, allowDismissal: PropTypes.bool.isRequired, bannerText: PropTypes.string.isRequired, + isLandscape: PropTypes.bool, theme: PropTypes.object.isRequired, } @@ -38,10 +39,11 @@ export default class ExpandedAnnouncementBanner extends React.PureComponent { }; render() { - const style = getStyleSheet(this.props.theme); + const {allowDismissal, isLandscape, theme} = this.props; + const style = getStyleSheet(theme); let dismissButton = null; - if (this.props.allowDismissal) { + if (allowDismissal) { dismissButton = (