From cfab64283dffec83569a4a0bc2536358a49cf1dc Mon Sep 17 00:00:00 2001
From: Djorkaeff Alexandre <djorkaeff.unb@gmail.com>
Date: Tue, 3 Mar 2020 17:53:48 -0300
Subject: [PATCH] [FIX] LoginSignup blink services (#1809)

Co-authored-by: Diego Mello <diegolmello@gmail.com>
---
 app/actions/index.js           |  6 ------
 app/constants/types.js         |  1 -
 app/lib/methods/getSettings.js | 24 ++++++++++--------------
 app/lib/rocketchat.js          |  4 ++--
 app/reducers/reducers.js       |  5 -----
 app/sagas/selectServer.js      |  9 ++++++---
 6 files changed, 18 insertions(+), 31 deletions(-)

diff --git a/app/actions/index.js b/app/actions/index.js
index 5ea298812..7943fd9d0 100644
--- a/app/actions/index.js
+++ b/app/actions/index.js
@@ -40,12 +40,6 @@ export function addSettings(settings) {
 		payload: settings
 	};
 }
-export function setAllSettings(settings) {
-	return {
-		type: types.SET_ALL_SETTINGS,
-		payload: settings
-	};
-}
 
 export function login() {
 	return {
diff --git a/app/constants/types.js b/app/constants/types.js
index 8c5a6c8ee..0a7ec86c8 100644
--- a/app/constants/types.js
+++ b/app/constants/types.js
@@ -1,4 +1,3 @@
 export const SET_CURRENT_SERVER = 'SET_CURRENT_SERVER';
-export const SET_ALL_SETTINGS = 'SET_ALL_SETTINGS';
 export const SET_CUSTOM_EMOJIS = 'SET_CUSTOM_EMOJIS';
 export const ADD_SETTINGS = 'ADD_SETTINGS';
diff --git a/app/lib/methods/getSettings.js b/app/lib/methods/getSettings.js
index ab6c83304..e1d1de718 100644
--- a/app/lib/methods/getSettings.js
+++ b/app/lib/methods/getSettings.js
@@ -52,21 +52,17 @@ const serverInfoUpdate = async(serverInfo, iconSetting) => {
 	});
 };
 
-export function getSetting({ server, setting }) {
-	return new Promise(async(resolve, reject) => {
-		try {
-			const result = await fetch(`${ server }/api/v1/settings.public?query={"_id":{"$in":["${ setting }"]}}`).then(response => response.json());
+export async function getLoginSettings({ server }) {
+	try {
+		const settingsParams = JSON.stringify(['Accounts_ShowFormLogin', 'Accounts_RegistrationForm']);
+		const result = await fetch(`${ server }/api/v1/settings.public?query={"_id":{"$in":${ settingsParams }}}`).then(response => response.json());
 
-			if (result.success && result.settings.length) {
-				const [{ value }] = result.settings;
-				return resolve(value);
-			}
-		} catch (e) {
-			log(e);
+		if (result.success && result.settings.length) {
+			reduxStore.dispatch(actions.addSettings(this.parseSettings(this._prepareSettings(result.settings))));
 		}
-
-		return reject();
-	});
+	} catch (e) {
+		log(e);
+	}
 }
 
 export async function setSettings() {
@@ -81,7 +77,7 @@ export async function setSettings() {
 		valueAsArray: item.valueAsArray,
 		_updatedAt: item._updatedAt
 	}));
-	reduxStore.dispatch(actions.setAllSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length))));
+	reduxStore.dispatch(actions.addSettings(RocketChat.parseSettings(parsed.slice(0, parsed.length))));
 }
 
 export default async function() {
diff --git a/app/lib/rocketchat.js b/app/lib/rocketchat.js
index 81aacb895..c0c6b1b8c 100644
--- a/app/lib/rocketchat.js
+++ b/app/lib/rocketchat.js
@@ -24,7 +24,7 @@ import subscribeRooms from './methods/subscriptions/rooms';
 
 import protectedFunction from './methods/helpers/protectedFunction';
 import readMessages from './methods/readMessages';
-import getSettings, { getSetting, setSettings } from './methods/getSettings';
+import getSettings, { getLoginSettings, setSettings } from './methods/getSettings';
 
 import getRooms from './methods/getRooms';
 import getPermissions from './methods/getPermissions';
@@ -619,7 +619,7 @@ const RocketChat = {
 	cancelUpload,
 	isUploadActive,
 	getSettings,
-	getSetting,
+	getLoginSettings,
 	setSettings,
 	getPermissions,
 	getCustomEmojis,
diff --git a/app/reducers/reducers.js b/app/reducers/reducers.js
index 95291484f..e865ecd6a 100644
--- a/app/reducers/reducers.js
+++ b/app/reducers/reducers.js
@@ -2,11 +2,6 @@ import * as types from '../constants/types';
 import initialState from './initialState';
 
 export default function settings(state = initialState.settings, action) {
-	if (action.type === types.SET_ALL_SETTINGS) {
-		return {
-			...action.payload
-		};
-	}
 	if (action.type === types.ADD_SETTINGS) {
 		return {
 			...state,
diff --git a/app/sagas/selectServer.js b/app/sagas/selectServer.js
index 535aecd47..f439213d5 100644
--- a/app/sagas/selectServer.js
+++ b/app/sagas/selectServer.js
@@ -1,5 +1,5 @@
 import {
-	put, take, takeLatest, fork, cancel, race
+	put, take, takeLatest, fork, cancel, race, select
 } from 'redux-saga/effects';
 import { Alert } from 'react-native';
 import RNUserDefaults from 'rn-user-defaults';
@@ -133,9 +133,12 @@ const handleServerRequest = function* handleServerRequest({ server, certificate
 		const serverInfo = yield getServerInfo({ server });
 
 		if (serverInfo) {
-			const showFormLogin = yield RocketChat.getSetting({ server, setting: 'Accounts_ShowFormLogin' });
 			const loginServicesLength = yield RocketChat.getLoginServices(server);
-			if (loginServicesLength === 0 && showFormLogin) {
+			yield RocketChat.getLoginSettings({ server });
+
+			const showFormLogin = yield select(state => state.settings.Accounts_ShowFormLogin);
+
+			if (!loginServicesLength && showFormLogin) {
 				Navigation.navigate('LoginView');
 			} else {
 				Navigation.navigate('LoginSignupView');
-- 
GitLab