Rocket.Chat.ReactNative/app/sagas/init.js

52 lines
1.5 KiB
JavaScript

import { AsyncStorage } from 'react-native';
import { call, put, takeLatest } from 'redux-saga/effects';
import * as actions from '../actions';
import { selectServerRequest } from '../actions/server';
import { restoreToken, setUser } from '../actions/login';
import { setAllPreferences } from '../actions/sortPreferences';
import { APP } from '../actions/actionsTypes';
import RocketChat from '../lib/rocketchat';
import log from '../utils/log';
import I18n from '../i18n';
const restore = function* restore() {
try {
const token = yield call([AsyncStorage, 'getItem'], RocketChat.TOKEN_KEY);
if (token) {
yield put(restoreToken(token));
} else {
yield put(actions.appStart('outside'));
}
const currentServer = yield call([AsyncStorage, 'getItem'], 'currentServer');
if (currentServer) {
const user = yield call([AsyncStorage, 'getItem'], `${ RocketChat.TOKEN_KEY }-${ currentServer }`);
if (user) {
const userParsed = JSON.parse(user);
if (userParsed.language) {
I18n.locale = userParsed.language;
}
yield put(selectServerRequest(currentServer));
yield put(setUser(userParsed));
} else {
yield put(actions.appStart('outside'));
}
} else {
yield put(actions.appStart('outside'));
}
const sortPreferences = yield RocketChat.getSortPreferences();
yield put(setAllPreferences(sortPreferences));
yield put(actions.appReady({}));
} catch (e) {
log('restore', e);
}
};
const root = function* root() {
yield takeLatest(APP.INIT, restore);
};
export default root;