MM-13083 - Removing refresh button from some pages (#3010)

* MM-13083 - Removing refresh button from some pages

* Updating test

* Removing unused component

* Updating minor changes

* Updating failed actions import

* Updating post list error screen

* Updating connection issue error message

* Updating network connection messages

* Updating terms of service page

* Updating test

* Updating animations and FailedNetwork component

* Reverting some changes

* Updating channel post list

* Updating requestsed changes

* Updating code changes

* Removing error description
This commit is contained in:
Asaad Mahmood 2019-07-29 23:26:24 +05:00 committed by Elias Nahum
parent 90ac092443
commit 06f3511222
12 changed files with 214 additions and 197 deletions

View file

@ -15,7 +15,7 @@ exports[`ChannelLoader should match snapshot 1`] = `
]
}
>
<View
<AnimatedComponent
style={
Array [
Object {
@ -29,12 +29,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -42,8 +45,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -57,12 +60,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -70,8 +76,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -85,12 +91,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -98,8 +107,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -113,12 +122,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -126,8 +138,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -141,12 +153,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -154,8 +169,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -169,12 +184,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -182,8 +200,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -197,12 +215,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -210,8 +231,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -225,12 +246,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -238,8 +262,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -253,12 +277,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -266,8 +293,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -281,12 +308,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -294,8 +324,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -309,12 +339,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -322,8 +355,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -337,12 +370,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -350,8 +386,8 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
<View
</AnimatedComponent>
<AnimatedComponent
style={
Array [
Object {
@ -365,12 +401,15 @@ exports[`ChannelLoader should match snapshot 1`] = `
Object {
"backgroundColor": "#ffffff",
},
Object {
"opacity": 0.6,
},
]
}
>
<ImageContent
animate="fade"
color="rgba(61,60,64,0.2)"
color="rgba(61,60,64,0.15)"
firstLineWidth="80%"
hasRadius={true}
lineNumber={3}
@ -378,6 +417,6 @@ exports[`ChannelLoader should match snapshot 1`] = `
size={32}
textSize={14}
/>
</View>
</AnimatedComponent>
</View>
`;

View file

@ -4,6 +4,8 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {
Animated,
Easing,
View,
Dimensions,
} from 'react-native';
@ -14,6 +16,8 @@ import EventEmitter from 'mattermost-redux/utils/event_emitter';
import CustomPropTypes from 'app/constants/custom_prop_types';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
const {View: AnimatedView} = Animated;
function calculateMaxRows(height) {
return Math.round(height / 100);
}
@ -38,6 +42,7 @@ export default class ChannelLoader extends PureComponent {
const maxRows = calculateMaxRows(height);
this.state = {
barsOpacity: new Animated.Value(0.6),
switch: false,
maxRows,
};
@ -65,7 +70,38 @@ export default class ChannelLoader extends PureComponent {
EventEmitter.off('switch_channel', this.handleChannelSwitch);
}
componentDidUpdate() {
startLoadingAnimation = () => {
Animated.loop(
Animated.sequence([
Animated.timing(this.state.barsOpacity, {
toValue: 1,
duration: 750,
easing: Easing.quad,
useNativeDriver: true,
}),
Animated.timing(this.state.barsOpacity, {
toValue: 0.6,
duration: 750,
easing: Easing.quad,
useNativeDriver: true,
}),
]),
).start();
};
stopLoadingAnimation = () => {
Animated.timing(
this.state.barsOpacity
).stop();
}
componentDidUpdate(prevProps) {
if (prevProps.channelIsLoading === false && this.props.channelIsLoading === true) {
this.startLoadingAnimation();
} else if (prevProps.channelIsLoading === true && this.props.channelIsLoading === false) {
this.stopLoadingAnimation();
}
if (this.state.switch) {
const {
handleSelectChannel,
@ -83,9 +119,9 @@ export default class ChannelLoader extends PureComponent {
buildSections({key, style, bg, color}) {
return (
<View
<AnimatedView
key={key}
style={[style.section, {backgroundColor: bg}]}
style={[style.section, {backgroundColor: bg}, {opacity: this.state.barsOpacity}]}
>
<ImageContent
size={32}
@ -95,9 +131,9 @@ export default class ChannelLoader extends PureComponent {
firstLineWidth='80%'
hasRadius={true}
textSize={14}
color={changeOpacity(color, 0.2)}
color={changeOpacity(color, 0.15)}
/>
</View>
</AnimatedView>
);
}

View file

@ -3,7 +3,7 @@
import React, {PureComponent} from 'react';
import PropTypes from 'prop-types';
import {TouchableOpacity, View} from 'react-native';
import {View} from 'react-native';
import FormattedText from 'app/components/formatted_text';
import {changeOpacity, makeStyleSheetFromTheme} from 'app/utils/theme';
@ -13,27 +13,30 @@ import Cloud from './cloud';
export default class FailedNetworkAction extends PureComponent {
static propTypes = {
onRetry: PropTypes.func,
action: PropTypes.func,
actionId: PropTypes.string,
actionDefaultMessage: PropTypes.string,
errorId: PropTypes.string,
errorDefaultMessage: PropTypes.string,
theme: PropTypes.object.isRequired,
errorTitle: PropTypes.object,
errorDescription: PropTypes.object,
};
static defaultProps = {
errorTitle: {
id: t('mobile.failed_network_action.title'),
defaultMessage: 'No internet connection',
},
errorDescription: {
id: t('mobile.failed_network_action.description'),
defaultMessage: 'There seems to be a problem with your internet connection. Make sure you have an active connection and try again.',
},
actionId: t('mobile.failed_network_action.retry'),
actionDefaultMessage: 'try again',
errorId: t('mobile.failed_network_action.shortDescription'),
errorDefaultMessage: 'Messages will load when you have an internet connection or {refresh}.',
};
render() {
const {theme, onRetry} = this.props;
const {action, actionId, actionDefaultMessage, errorId, errorDefaultMessage, theme} = this.props;
const style = getStyleFromTheme(theme);
const errorTitle = {
id: t('mobile.failed_network_action.title'),
defaultMessage: 'No internet connection',
};
return (
<View style={style.container}>
<Cloud
@ -42,27 +45,25 @@ export default class FailedNetworkAction extends PureComponent {
width={76}
/>
<FormattedText
id={this.props.errorTitle.id}
defaultMessage={this.props.errorTitle.defaultMessage}
id={errorTitle.id}
defaultMessage={errorTitle.defaultMessage}
style={style.title}
/>
<FormattedText
id={this.props.errorDescription.id}
defaultMessage={this.props.errorDescription.message}
id={errorId}
defaultMessage={errorDefaultMessage}
style={style.description}
values={{
refresh: (
<FormattedText
id={actionId}
defaultMessage={actionDefaultMessage}
style={style.link}
onPress={action}
/>
),
}}
/>
{onRetry &&
<TouchableOpacity
onPress={onRetry}
style={style.retryContainer}
>
<FormattedText
id='mobile.failed_network_action.retry'
defaultMessage='Try Again'
style={style.retry}
/>
</TouchableOpacity>
}
</View>
);
}
@ -75,25 +76,23 @@ const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
flex: 1,
justifyContent: 'center',
paddingHorizontal: 15,
paddingBottom: 100,
},
title: {
color: changeOpacity(theme.centerChannelColor, 0.8),
fontSize: 20,
fontWeight: '600',
marginBottom: 15,
marginTop: 10,
},
description: {
color: changeOpacity(theme.centerChannelColor, 0.4),
fontSize: 17,
lineHeight: 25,
textAlign: 'center',
},
retryContainer: {
marginTop: 30,
},
retry: {
color: changeOpacity(theme.centerChannelColor, 0.7),
fontSize: 16,
fontWeight: '600',
link: {
color: theme.linkColor,
},
};
});

View file

@ -257,12 +257,21 @@ export default class ChannelBase extends PureComponent {
if (!currentChannelId) {
if (channelsRequestFailed) {
const PostListRetry = require('app/components/post_list_retry').default;
const FailedNetworkAction = require('app/components/failed_network_action').default;
return (
<PostListRetry
retry={this.retryLoadChannels}
theme={theme}
/>
<SafeAreaView>
<View style={style.flex}>
<EmptyToolbar
theme={theme}
isLandscape={isLandscape}
/>
<FailedNetworkAction
onRetry={this.retryLoadChannels}
theme={theme}
/>
</View>
</SafeAreaView>
);
}

View file

@ -15,7 +15,6 @@ import EventEmitter from 'mattermost-redux/utils/event_emitter';
import AnnouncementBanner from 'app/components/announcement_banner';
import PostList from 'app/components/post_list';
import PostListRetry from 'app/components/post_list_retry';
import RetryBarIndicator from 'app/components/retry_bar_indicator';
import {ViewTypes} from 'app/constants';
import tracker from 'app/utils/time_tracker';
@ -188,9 +187,11 @@ export default class ChannelPostList extends PureComponent {
let component;
if (visiblePostIds.length === 0 && channelRefreshingFailed) {
const FailedNetworkAction = require('app/components/failed_network_action').default;
component = (
<PostListRetry
retry={this.loadPostsRetry}
<FailedNetworkAction
onRetry={this.loadPostsRetry}
theme={theme}
/>
);

View file

@ -11,18 +11,10 @@ exports[`ErrorTeamsList should match snapshot 1`] = `
>
<Connect(StatusBar) />
<FailedNetworkAction
errorDescription={
Object {
"defaultMessage": "Make sure you have an active connection and try again.",
"id": "mobile.failed_network_action.shortDescription",
}
}
errorTitle={
Object {
"defaultMessage": "Team Not Found",
"id": "error.team_not_found.title",
}
}
actionDefaultMessage="try again"
actionId="mobile.failed_network_action.retry"
errorDefaultMessage="Messages will load when you have an internet connection or {refresh}."
errorId="mobile.failed_network_action.shortDescription"
onRetry={[Function]}
theme={
Object {

View file

@ -13,17 +13,6 @@ import FailedNetworkAction from 'app/components/failed_network_action';
import Loading from 'app/components/loading';
import StatusBar from 'app/components/status_bar';
import {makeStyleSheetFromTheme, setNavigatorStyles} from 'app/utils/theme';
import {t} from 'app/utils/i18n';
const errorTitle = {
id: t('error.team_not_found.title'),
defaultMessage: 'Team Not Found',
};
const errorDescription = {
id: t('mobile.failed_network_action.shortDescription'),
defaultMessage: 'Make sure you have an active connection and try again.',
};
export default class ErrorTeamsList extends PureComponent {
static propTypes = {
@ -86,27 +75,25 @@ export default class ErrorTeamsList extends PureComponent {
render() {
const {theme} = this.props;
const styles = getStyleSheet(theme);
const style = getStyleFromTheme(theme);
if (this.state.loading) {
return <Loading/>;
}
return (
<View style={styles.container}>
<View style={style.container}>
<StatusBar/>
<FailedNetworkAction
onRetry={this.getUserInfo}
theme={theme}
errorTitle={errorTitle}
errorDescription={errorDescription}
/>
</View>
);
}
}
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
return {
container: {
backgroundColor: theme.centerChannelBg,

View file

@ -2,18 +2,10 @@
exports[`SelectTeam should match snapshot for fail of teams 1`] = `
<FailedNetworkAction
errorDescription={
Object {
"defaultMessage": "Make sure you have an active connection and try again.",
"id": "mobile.failed_network_action.shortDescription",
}
}
errorTitle={
Object {
"defaultMessage": "Team Not Found",
"id": "error.team_not_found.title",
}
}
actionDefaultMessage="try again"
actionId="mobile.failed_network_action.retry"
errorDefaultMessage="Messages will load when you have an internet connection or {refresh}."
errorId="mobile.failed_network_action.shortDescription"
onRetry={[Function]}
theme={
Object {

View file

@ -15,7 +15,6 @@ import {Navigation} from 'react-native-navigation';
import {RequestStatus} from 'mattermost-redux/constants';
import EventEmitter from 'mattermost-redux/utils/event_emitter';
import FailedNetworkAction from 'app/components/failed_network_action';
import FormattedText from 'app/components/formatted_text';
import Loading from 'app/components/loading';
import StatusBar from 'app/components/status_bar';
@ -28,16 +27,6 @@ import TeamIcon from 'app/components/team_icon';
const TEAMS_PER_PAGE = 50;
const errorTitle = {
id: t('error.team_not_found.title'),
defaultMessage: 'Team Not Found',
};
const errorDescription = {
id: t('mobile.failed_network_action.shortDescription'),
defaultMessage: 'Make sure you have an active connection and try again.',
};
export default class SelectTeam extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
@ -172,16 +161,16 @@ export default class SelectTeam extends PureComponent {
renderItem = ({item}) => {
const {currentUrl, theme} = this.props;
const styles = getStyleSheet(theme);
const style = getStyleFromTheme(theme);
if (item.id === 'mobile.select_team.no_teams') {
return (
<View style={styles.teamWrapper}>
<View style={styles.teamContainer}>
<View style={style.teamWrapper}>
<View style={style.teamContainer}>
<FormattedText
id={item.id}
defaultMessage={item.defaultMessage}
style={styles.noTeam}
style={style.noTeam}
/>
</View>
</View>
@ -189,29 +178,29 @@ export default class SelectTeam extends PureComponent {
}
return (
<View style={styles.teamWrapper}>
<View style={style.teamWrapper}>
<TouchableOpacity
onPress={preventDoubleTap(() => this.onSelectTeam(item))}
>
<View style={styles.teamContainer}>
<View style={style.teamContainer}>
<TeamIcon
teamId={item.id}
styleContainer={styles.teamIconContainer}
styleText={styles.teamIconText}
styleImage={styles.imageContainer}
styleContainer={style.teamIconContainer}
styleText={style.teamIconText}
styleImage={style.imageContainer}
/>
<View style={styles.teamNameContainer}>
<View style={style.teamNameContainer}>
<Text
numberOfLines={1}
ellipsizeMode='tail'
style={styles.teamName}
style={style.teamName}
>
{item.display_name}
</Text>
<Text
numberOfLines={1}
ellipsizeMode='tail'
style={styles.teamUrl}
style={style.teamUrl}
>
{`${currentUrl}/${item.name}`}
</Text>
@ -225,32 +214,32 @@ export default class SelectTeam extends PureComponent {
render() {
const {theme} = this.props;
const {teams} = this.state;
const styles = getStyleSheet(theme);
const style = getStyleFromTheme(theme);
if (this.state.joining) {
return <Loading/>;
}
if (this.props.teamsRequest.status === RequestStatus.FAILURE) {
const FailedNetworkAction = require('app/components/failed_network_action').default;
return (
<FailedNetworkAction
onRetry={this.getTeams}
theme={theme}
errorTitle={errorTitle}
errorDescription={errorDescription}
/>
);
}
if (this.props.currentUserIsGuest) {
return (
<View style={styles.container}>
<View style={style.container}>
<StatusBar/>
<View style={styles.headingContainer}>
<View style={style.headingContainer}>
<FormattedText
id='mobile.select_team.guest_cant_join_team'
defaultMessage='Your guest account has no teams or channels assigned. Please contact an administrator.'
style={styles.heading}
style={style.heading}
/>
</View>
</View>
@ -258,17 +247,17 @@ export default class SelectTeam extends PureComponent {
}
return (
<View style={styles.container}>
<View style={style.container}>
<StatusBar/>
<View style={styles.headingContainer}>
<View style={styles.headingWrapper}>
<View style={style.headingContainer}>
<View style={style.headingWrapper}>
<FormattedText
id='mobile.select_team.join_open'
defaultMessage='Open teams you can join'
style={styles.heading}
style={style.heading}
/>
</View>
<View style={styles.line}/>
<View style={style.line}/>
</View>
<CustomList
data={teams}
@ -287,7 +276,7 @@ export default class SelectTeam extends PureComponent {
}
}
const getStyleSheet = makeStyleSheetFromTheme((theme) => {
const getStyleFromTheme = makeStyleSheetFromTheme((theme) => {
return {
container: {
backgroundColor: theme.centerChannelBg,

View file

@ -289,18 +289,10 @@ exports[`TermsOfService should match snapshot for fail of get terms 1`] = `
>
<Connect(StatusBar) />
<FailedNetworkAction
errorDescription={
Object {
"defaultMessage": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
"id": "mobile.terms_of_service.get_terms_error_description",
}
}
errorTitle={
Object {
"defaultMessage": "Unable to load terms of service.",
"id": "mobile.terms_of_service.get_terms_error_title",
}
}
actionDefaultMessage="try again"
actionId="mobile.failed_network_action.retry"
errorDefaultMessage="Messages will load when you have an internet connection or {refresh}."
errorId="mobile.failed_network_action.shortDescription"
onRetry={[Function]}
theme={
Object {

View file

@ -16,20 +16,9 @@ import Loading from 'app/components/loading';
import Markdown from 'app/components/markdown';
import StatusBar from 'app/components/status_bar';
import {t} from 'app/utils/i18n';
import {getMarkdownTextStyles, getMarkdownBlockStyles} from 'app/utils/markdown';
import {makeStyleSheetFromTheme, setNavigatorStyles} from 'app/utils/theme';
const errorTitle = {
id: t('mobile.terms_of_service.get_terms_error_title'),
defaultMessage: 'Unable to load terms of service.',
};
const errorDescription = {
id: t('mobile.terms_of_service.get_terms_error_description'),
defaultMessage: 'Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.',
};
export default class TermsOfService extends PureComponent {
static propTypes = {
actions: PropTypes.shape({
@ -252,8 +241,6 @@ export default class TermsOfService extends PureComponent {
<FailedNetworkAction
onRetry={this.getTerms}
theme={theme}
errorTitle={errorTitle}
errorDescription={errorDescription}
/>
</View>
);
@ -292,9 +279,6 @@ const getStyleSheet = makeStyleSheetFromTheme((theme) => {
backgroundColor: theme.centerChannelBg,
flex: 1,
},
linkText: {
color: theme.linkColor,
},
scrollView: {
flex: 1,
backgroundColor: theme.centerChannelBg,

View file

@ -76,7 +76,6 @@
"create_post.write": "Write to {channelDisplayName}",
"edit_post.editPost": "Edit the post...",
"edit_post.save": "Save",
"error.team_not_found.title": "Team Not Found",
"file_attachment.download": "Download",
"file_upload.fileAbove": "File above {max}MB cannot be uploaded: {filename}",
"get_post_link_modal.title": "Copy Permalink",
@ -247,9 +246,8 @@
"mobile.extension.max_file_size": "File attachments shared in Mattermost must be less than {size}.",
"mobile.extension.permission": "Mattermost needs access to the device storage to share files.",
"mobile.extension.title": "Share in Mattermost",
"mobile.failed_network_action.description": "There seems to be a problem with your internet connection. Make sure you have an active connection and try again.",
"mobile.failed_network_action.retry": "Try Again",
"mobile.failed_network_action.shortDescription": "Make sure you have an active connection and try again.",
"mobile.failed_network_action.retry": "try again",
"mobile.failed_network_action.shortDescription": "Messages will load when you have an internet connection or {refresh}.",
"mobile.failed_network_action.title": "No internet connection",
"mobile.file_upload.browse": "Browse Files",
"mobile.file_upload.camera_photo": "Take Photo",
@ -441,8 +439,7 @@
"mobile.terms_of_service.alert_cancel": "Cancel",
"mobile.terms_of_service.alert_ok": "OK",
"mobile.terms_of_service.alert_retry": "Try Again",
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an active internet connection and try again. If this issue persists, contact your System Administrator.",
"mobile.terms_of_service.get_terms_error_title": "Unable to load terms of service.",
"mobile.terms_of_service.get_terms_error_description": "Make sure you have an internet connection or {refresh}. If this issue persists, contact your System Administrator.",
"mobile.terms_of_service.terms_rejected": "You must agree to the terms of service before accessing {siteName}. Please contact your System Administrator for more details.",
"mobile.timezone_settings.automatically": "Set automatically",
"mobile.timezone_settings.manual": "Change timezone",