From c017afb39249b5732fd160b56fdd9a7e488a419b Mon Sep 17 00:00:00 2001 From: Stan Chan Date: Fri, 7 Jul 2017 15:21:48 -0700 Subject: [PATCH] RN-66 Clear cache store (#727) * RN-66 Clear cache store * Review feedback --- app/actions/views/root.js | 5 +++++ app/mattermost.js | 6 +++--- app/screens/settings/index.js | 4 +++- app/screens/settings/settings.js | 29 ++++++++++++++++++++++++++++- assets/base/i18n/en.json | 3 +++ 5 files changed, 42 insertions(+), 5 deletions(-) diff --git a/app/actions/views/root.js b/app/actions/views/root.js index a2f50c066..5da2dcb69 100644 --- a/app/actions/views/root.js +++ b/app/actions/views/root.js @@ -10,6 +10,7 @@ import { } from 'app/actions/views/channel'; import {handleTeamChange, selectFirstAvailableTeam} from 'app/actions/views/select_team'; +import {General} from 'mattermost-redux/constants'; import {getClientConfig, getLicenseConfig, setServerVersion} from 'mattermost-redux/actions/general'; import {markChannelAsRead, viewChannel} from 'mattermost-redux/actions/channels'; @@ -71,6 +72,10 @@ export function setStatusBarHeight(height = 20) { }; } +export function purgeOfflineStore() { + return {type: General.OFFLINE_STORE_PURGE}; +} + export default { loadConfigAndLicense, queueNotification, diff --git a/app/mattermost.js b/app/mattermost.js index baeb9c497..3ad0cd5e4 100644 --- a/app/mattermost.js +++ b/app/mattermost.js @@ -18,16 +18,16 @@ import {setJSExceptionHandler} from 'react-native-exception-handler'; import StatusBarSizeIOS from 'react-native-status-bar-size'; import semver from 'semver'; +import {General} from 'mattermost-redux/constants'; import {setAppState, setDeviceToken, setServerVersion} from 'mattermost-redux/actions/general'; import {markChannelAsRead} from 'mattermost-redux/actions/channels'; import {logError} from 'mattermost-redux/actions/errors'; import {logout} from 'mattermost-redux/actions/users'; import {close as closeWebSocket} from 'mattermost-redux/actions/websocket'; import {Client4} from 'mattermost-redux/client'; -import {General} from 'mattermost-redux/constants'; import EventEmitter from 'mattermost-redux/utils/event_emitter'; -import {goToNotification, loadConfigAndLicense, queueNotification, setStatusBarHeight} from 'app/actions/views/root'; +import {goToNotification, loadConfigAndLicense, queueNotification, setStatusBarHeight, purgeOfflineStore} from 'app/actions/views/root'; import {setChannelDisplayName} from 'app/actions/views/channel'; import {NavigationTypes, ViewTypes} from 'app/constants'; import {getTranslations} from 'app/i18n'; @@ -80,7 +80,7 @@ export default class Mattermost { text: intl.formatMessage({id: 'mobile.error_handler.button', defaultMessage: 'Relaunch'}), onPress: () => { // purge the store - store.dispatch({type: General.OFFLINE_STORE_PURGE}); + store.dispatch(purgeOfflineStore()); } }], {cancelable: false} diff --git a/app/screens/settings/index.js b/app/screens/settings/index.js index 42012db94..c392e394a 100644 --- a/app/screens/settings/index.js +++ b/app/screens/settings/index.js @@ -9,6 +9,7 @@ import {logout} from 'mattermost-redux/actions/users'; import {getCurrentUrl} from 'mattermost-redux/selectors/entities/general'; import {getJoinableTeams} from 'mattermost-redux/selectors/entities/teams'; +import {purgeOfflineStore} from 'app/actions/views/root'; import {getTheme} from 'app/selectors/preferences'; import {removeProtocol} from 'app/utils/url'; @@ -33,7 +34,8 @@ function mapDispatchToProps(dispatch) { return { actions: bindActionCreators({ clearErrors, - logout + logout, + purgeOfflineStore }, dispatch) }; } diff --git a/app/screens/settings/settings.js b/app/screens/settings/settings.js index 607649d4f..3bcd0d361 100644 --- a/app/screens/settings/settings.js +++ b/app/screens/settings/settings.js @@ -5,6 +5,7 @@ import React, {PureComponent} from 'react'; import PropTypes from 'prop-types'; import {injectIntl, intlShape} from 'react-intl'; import { + Alert, InteractionManager, Linking, Platform, @@ -24,7 +25,8 @@ class Settings extends PureComponent { static propTypes = { actions: PropTypes.shape({ clearErrors: PropTypes.func.isRequired, - logout: PropTypes.func.isRequired + logout: PropTypes.func.isRequired, + purgeOfflineStore: PropTypes.func.isRequired }).isRequired, config: PropTypes.object.isRequired, currentTeamId: PropTypes.string.isRequired, @@ -153,6 +155,22 @@ class Settings extends PureComponent { Linking.openURL(config.HelpLink.toLowerCase()); }; + clearOfflineCache = () => { + const {actions, intl} = this.props; + + Alert.alert( + intl.formatMessage({id: 'mobile.settings.clear', defaultMessage: 'Clear Offline Store'}), + intl.formatMessage({id: 'mobile.settings.clear_message', defaultMessage: '\nThis will clear all offline data and restart the app. You will be automatically logged back in once the app restarts.\n'}), + [{ + text: intl.formatMessage({id: 'mobile.settings.clear_button', defaultMessage: 'Clear'}), + onPress: () => actions.purgeOfflineStore() + }, { + text: intl.formatMessage({id: 'channel_modal.cancel', defaultMessage: 'Cancel'}), + onPress: () => true + }] + ); + } + render() { const {config, joinableTeams, theme} = this.props; const style = getStyleSheet(theme); @@ -203,6 +221,15 @@ class Settings extends PureComponent { separator={true} theme={theme} /> + this.handlePress(this.clearOfflineCache)} + separator={true} + theme={theme} + />