Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 34 additions & 22 deletions app/views/LanguageView/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { FlatList } from 'react-native';
import { connect } from 'react-redux';
import { SafeAreaView, NavigationActions } from 'react-navigation';
import { SafeAreaView } from 'react-navigation';

import RocketChat from '../../lib/rocketchat';
import I18n from '../../i18n';
Expand All @@ -18,7 +18,9 @@ import Separator from '../../containers/Separator';
import { themes } from '../../constants/colors';
import { withTheme } from '../../theme';
import { themedHeader } from '../../utils/navigation';
import { appStart as appStartAction } from '../../actions';
import { getUserSelector } from '../../selectors/login';
import database from '../../lib/database';

const LANGUAGES = [
{
Expand Down Expand Up @@ -58,23 +60,23 @@ class LanguageView extends React.Component {
})

static propTypes = {
userLanguage: PropTypes.string,
navigation: PropTypes.object,
user: PropTypes.object,
setUser: PropTypes.func,
appStart: PropTypes.func,
theme: PropTypes.string
}

constructor(props) {
super(props);
this.state = {
language: props.userLanguage ? props.userLanguage : 'en',
language: props.user ? props.user.language : 'en',
saving: false
};
}

shouldComponentUpdate(nextProps, nextState) {
const { language, saving } = this.state;
const { userLanguage, theme } = this.props;
const { user, theme } = this.props;
if (nextProps.theme !== theme) {
return true;
}
Expand All @@ -84,15 +86,15 @@ class LanguageView extends React.Component {
if (nextState.saving !== saving) {
return true;
}
if (nextProps.userLanguage !== userLanguage) {
if (nextProps.user.language !== user.language) {
return true;
}
return false;
}

formIsChanged = (language) => {
const { userLanguage } = this.props;
return (userLanguage !== language);
const { user } = this.props;
return (user.language !== language);
}

submit = async(language) => {
Expand All @@ -102,31 +104,40 @@ class LanguageView extends React.Component {

this.setState({ saving: true });

const { userLanguage, setUser, navigation } = this.props;
const { user, setUser, appStart } = this.props;

const params = {};

// language
if (userLanguage !== language) {
if (user.language !== language) {
params.language = language;
}

try {
await RocketChat.saveUserPreferences(params);
setUser({ language: params.language });

this.setState({ saving: false });
setTimeout(() => {
navigation.reset([NavigationActions.navigate({ routeName: 'SettingsView' })], 0);
navigation.navigate('RoomsListView');
}, 300);
const serversDB = database.servers;
const usersCollection = serversDB.collections.get('users');
await serversDB.action(async() => {
try {
const userRecord = await usersCollection.find(user.id);
await userRecord.update((record) => {
record.language = params.language;
});
} catch (e) {
// do nothing
}
});

await appStart('loading');
await appStart('inside');
} catch (e) {
this.setState({ saving: false });
setTimeout(() => {
showErrorAlert(I18n.t('There_was_an_error_while_action', { action: I18n.t('saving_preferences') }));
log(e);
}, 300);
showErrorAlert(I18n.t('There_was_an_error_while_action', { action: I18n.t('saving_preferences') }));
log(e);
}

this.setState({ saving: false });
}

renderSeparator = () => {
Expand Down Expand Up @@ -186,11 +197,12 @@ class LanguageView extends React.Component {
}

const mapStateToProps = state => ({
userLanguage: getUserSelector(state).language
user: getUserSelector(state)
});

const mapDispatchToProps = dispatch => ({
setUser: params => dispatch(setUserAction(params))
setUser: params => dispatch(setUserAction(params)),
appStart: params => dispatch(appStartAction(params))
});

export default connect(mapStateToProps, mapDispatchToProps)(withTheme(LanguageView));