[FIX] Clear settings on server change (#1967)

This commit is contained in:
Diego Mello 2020-04-01 16:24:42 -03:00 committed by GitHub
parent 3d80f95923
commit 9f830c7f0a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 42 additions and 39 deletions

View File

@ -63,3 +63,4 @@ export const INVITE_LINKS = createRequestTypes('INVITE_LINKS', [
'CLEAR',
...defaultTypes
]);
export const SETTINGS = createRequestTypes('SETTINGS', ['CLEAR', 'ADD']);

View File

@ -34,13 +34,6 @@ export function setCurrentServer(server) {
};
}
export function addSettings(settings) {
return {
type: types.ADD_SETTINGS,
payload: settings
};
}
export function login() {
return {
type: 'LOGIN'

14
app/actions/settings.js Normal file
View File

@ -0,0 +1,14 @@
import { SETTINGS } from './actionsTypes';
export function addSettings(settings) {
return {
type: SETTINGS.ADD,
payload: settings
};
}
export function clearSettings() {
return {
type: SETTINGS.CLEAR
};
}

View File

@ -1,3 +1,4 @@
export const SET_CURRENT_SERVER = 'SET_CURRENT_SERVER';
export const SET_CUSTOM_EMOJIS = 'SET_CUSTOM_EMOJIS';
export const ADD_SETTINGS = 'ADD_SETTINGS';
export const CLEAR_SETTINGS = 'CLEAR_SETTINGS';

View File

@ -2,9 +2,9 @@ import { InteractionManager } from 'react-native';
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import { Q } from '@nozbe/watermelondb';
import { addSettings, clearSettings } from '../../actions/settings';
import RocketChat from '../rocketchat';
import reduxStore from '../createStore';
import * as actions from '../../actions';
import settings from '../../constants/settings';
import log from '../../utils/log';
import database from '../database';
@ -58,7 +58,8 @@ export async function getLoginSettings({ server }) {
const result = await fetch(`${ server }/api/v1/settings.public?query={"_id":{"$in":${ settingsParams }}}`).then(response => response.json());
if (result.success && result.settings.length) {
reduxStore.dispatch(actions.addSettings(this.parseSettings(this._prepareSettings(result.settings))));
reduxStore.dispatch(clearSettings());
reduxStore.dispatch(addSettings(this.parseSettings(this._prepareSettings(result.settings))));
}
} catch (e) {
log(e);
@ -77,7 +78,7 @@ export async function setSettings() {
valueAsArray: item.valueAsArray,
_updatedAt: item._updatedAt
}));
reduxStore.dispatch(actions.addSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length))));
reduxStore.dispatch(addSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length))));
}
export default async function() {
@ -94,7 +95,7 @@ export default async function() {
const filteredSettings = this._prepareSettings(data);
const filteredSettingsIds = filteredSettings.map(s => s._id);
reduxStore.dispatch(actions.addSettings(this.parseSettings(filteredSettings)));
reduxStore.dispatch(addSettings(this.parseSettings(filteredSettings)));
InteractionManager.runAfterInteractions(async() => {
// filter server info
const serverInfo = filteredSettings.filter(i1 => serverInfoKeys.includes(i1._id));

View File

@ -1,5 +1,5 @@
import { combineReducers } from 'redux';
import settings from './reducers';
import settings from './settings';
import login from './login';
import meteor from './connect';
import room from './room';

View File

@ -1,5 +0,0 @@
export default {
server: null,
login: {},
settings: {}
};

View File

@ -1,12 +0,0 @@
import * as types from '../constants/types';
import initialState from './initialState';
export default function settings(state = initialState.settings, action) {
if (action.type === types.ADD_SETTINGS) {
return {
...state,
...action.payload
};
}
return state;
}

View File

@ -1,10 +0,0 @@
import { combineReducers } from 'redux';
import * as reducers from './reducers';
import * as login from './login';
import * as connect from './connect';
const rootReducer = combineReducers({
...reducers, ...login, ...connect
});
export default rootReducer;

17
app/reducers/settings.js Normal file
View File

@ -0,0 +1,17 @@
import { SETTINGS } from '../actions/actionsTypes';
const initialState = {};
export default (state = initialState, action) => {
switch (action.type) {
case SETTINGS.ADD:
return {
...state,
...action.payload
};
case SETTINGS.CLEAR:
return initialState;
default:
return state;
}
};

View File

@ -13,6 +13,7 @@ import {
serverFailure, selectServerRequest, selectServerSuccess, selectServerFailure
} from '../actions/server';
import { setUser } from '../actions/login';
import { clearSettings } from '../actions/settings';
import RocketChat from '../lib/rocketchat';
import database from '../lib/database';
import log, { logServerVersion } from '../utils/log';
@ -94,6 +95,8 @@ const handleSelectServer = function* handleSelectServer({ server, version, fetch
const basicAuth = yield RNUserDefaults.get(`${ BASIC_AUTH_KEY }-${ server }`);
setBasicAuth(basicAuth);
yield put(clearSettings());
if (user) {
yield RocketChat.connect({ server, user, logoutOnError: true });
yield put(setUser(user));