[FIX] Inject Redux store to prevent/remove require cycles (#3691)

Co-authored-by: Diego Mello <diegolmello@gmail.com>
This commit is contained in:
Gleidson Daniel Silva 2022-02-09 18:16:20 -03:00 committed by GitHub
parent ab9d568528
commit 977cfd2863
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
22 changed files with 37 additions and 22 deletions

View File

@ -2,7 +2,7 @@ import React from 'react';
import { View } from 'react-native'; import { View } from 'react-native';
import { KeyboardRegistry } from 'react-native-ui-lib/keyboard'; import { KeyboardRegistry } from 'react-native-ui-lib/keyboard';
import store from '../../lib/createStore'; import { store } from '../../lib/auxStore';
import EmojiPicker from '../EmojiPicker'; import EmojiPicker from '../EmojiPicker';
import styles from './styles'; import styles from './styles';
import { themes } from '../../constants/colors'; import { themes } from '../../constants/colors';

View File

@ -1,5 +1,5 @@
import log from '../../../../utils/log'; import log from '../../../../utils/log';
import store from '../../../../lib/createStore'; import { store } from '../../../../lib/auxStore';
import RocketChat from '../../../../lib/rocketchat'; import RocketChat from '../../../../lib/rocketchat';
import { inquiryQueueAdd, inquiryQueueRemove, inquiryQueueUpdate, inquiryRequest } from '../../actions/inquiry'; import { inquiryQueueAdd, inquiryQueueRemove, inquiryQueueUpdate, inquiryRequest } from '../../actions/inquiry';

View File

@ -32,8 +32,10 @@ import debounce from './utils/debounce';
import { isFDroidBuild } from './constants/environment'; import { isFDroidBuild } from './constants/environment';
import { IThemePreference } from './definitions/ITheme'; import { IThemePreference } from './definitions/ITheme';
import { ICommand } from './definitions/ICommand'; import { ICommand } from './definitions/ICommand';
import { initStore } from './lib/auxStore';
RNScreens.enableScreens(); RNScreens.enableScreens();
initStore(store);
interface IDimensions { interface IDimensions {
width: number; width: number;

10
app/lib/auxStore.ts Normal file
View File

@ -0,0 +1,10 @@
import { Store } from 'redux';
import { IApplicationState } from '../definitions';
// https://redux.js.org/faq/code-structure#how-can-i-use-the-redux-store-in-non-component-files
export let store: Store<IApplicationState> = null as any;
export const initStore = (_store: Store): void => {
store = _store;
};

View File

@ -9,7 +9,7 @@ import database from '../database';
import protectedFunction from '../methods/helpers/protectedFunction'; import protectedFunction from '../methods/helpers/protectedFunction';
import Deferred from '../../utils/deferred'; import Deferred from '../../utils/deferred';
import log from '../../utils/log'; import log from '../../utils/log';
import store from '../createStore'; import { store } from '../auxStore';
import { import {
E2E_BANNER_TYPE, E2E_BANNER_TYPE,
E2E_MESSAGE_TYPE, E2E_MESSAGE_TYPE,

View File

@ -1,4 +1,4 @@
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import Navigation from '../Navigation'; import Navigation from '../Navigation';
import { events, logEvent } from '../../utils/log'; import { events, logEvent } from '../../utils/log';

View File

@ -1,5 +1,5 @@
import database from '../database'; import database from '../database';
import store from '../createStore'; import { store } from '../auxStore';
const restTypes = { const restTypes = {
channel: 'channels', channel: 'channels',

View File

@ -1,5 +1,5 @@
import { compareServerVersion } from '../utils'; import { compareServerVersion } from '../utils';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import database from '../database'; import database from '../database';
import log from '../../utils/log'; import log from '../../utils/log';
import { clearEnterpriseModules, setEnterpriseModules as setEnterpriseModulesAction } from '../../actions/enterpriseModules'; import { clearEnterpriseModules, setEnterpriseModules as setEnterpriseModulesAction } from '../../actions/enterpriseModules';

View File

@ -2,7 +2,7 @@ import orderBy from 'lodash/orderBy';
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import { compareServerVersion } from '../utils'; import { compareServerVersion } from '../utils';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import database from '../database'; import database from '../database';
import log from '../../utils/log'; import log from '../../utils/log';
import { setCustomEmojis as setCustomEmojisAction } from '../../actions/customEmojis'; import { setCustomEmojis as setCustomEmojisAction } from '../../actions/customEmojis';

View File

@ -5,7 +5,7 @@ import orderBy from 'lodash/orderBy';
import { compareServerVersion } from '../utils'; import { compareServerVersion } from '../utils';
import database from '../database'; import database from '../database';
import log from '../../utils/log'; import log from '../../utils/log';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import RocketChat from '../rocketchat'; import RocketChat from '../rocketchat';
import { setPermissions as setPermissionsAction } from '../../actions/permissions'; import { setPermissions as setPermissionsAction } from '../../actions/permissions';
import protectedFunction from './helpers/protectedFunction'; import protectedFunction from './helpers/protectedFunction';

View File

@ -2,7 +2,7 @@ import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import database from '../database'; import database from '../database';
import log from '../../utils/log'; import log from '../../utils/log';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import { removeRoles, setRoles as setRolesAction, updateRoles } from '../../actions/roles'; import { removeRoles, setRoles as setRolesAction, updateRoles } from '../../actions/roles';
import protectedFunction from './helpers/protectedFunction'; import protectedFunction from './helpers/protectedFunction';

View File

@ -3,7 +3,7 @@ import { Q } from '@nozbe/watermelondb';
import { addSettings, clearSettings } from '../../actions/settings'; import { addSettings, clearSettings } from '../../actions/settings';
import RocketChat from '../rocketchat'; import RocketChat from '../rocketchat';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import settings from '../../constants/settings'; import settings from '../../constants/settings';
import log from '../../utils/log'; import log from '../../utils/log';
import database from '../database'; import database from '../database';

View File

@ -2,7 +2,7 @@ import { InteractionManager } from 'react-native';
import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord'; import { sanitizedRaw } from '@nozbe/watermelondb/RawRecord';
import { compareServerVersion } from '../utils'; import { compareServerVersion } from '../utils';
import reduxStore from '../createStore'; import { store as reduxStore } from '../auxStore';
import { setActiveUsers } from '../../actions/activeUsers'; import { setActiveUsers } from '../../actions/activeUsers';
import { setUser } from '../../actions/login'; import { setUser } from '../../actions/login';
import database from '../database'; import database from '../database';

View File

@ -1,7 +1,7 @@
import EJSON from 'ejson'; import EJSON from 'ejson';
import { Encryption } from '../../encryption'; import { Encryption } from '../../encryption';
import reduxStore from '../../createStore'; import { store as reduxStore } from '../../auxStore';
import { compareServerVersion } from '../../utils'; import { compareServerVersion } from '../../utils';
import findSubscriptionsRooms from './findSubscriptionsRooms'; import findSubscriptionsRooms from './findSubscriptionsRooms';
import normalizeMessage from './normalizeMessage'; import normalizeMessage from './normalizeMessage';

View File

@ -7,7 +7,7 @@ import protectedFunction from '../helpers/protectedFunction';
import messagesStatus from '../../../constants/messagesStatus'; import messagesStatus from '../../../constants/messagesStatus';
import log from '../../../utils/log'; import log from '../../../utils/log';
import random from '../../../utils/random'; import random from '../../../utils/random';
import store from '../../createStore'; import { store } from '../../auxStore';
import { handlePayloadUserInteraction } from '../actions'; import { handlePayloadUserInteraction } from '../actions';
import buildMessage from '../helpers/buildMessage'; import buildMessage from '../helpers/buildMessage';
import RocketChat from '../../rocketchat'; import RocketChat from '../../rocketchat';

View File

@ -27,7 +27,7 @@ import { updatePermission } from '../actions/permissions';
import { TEAM_TYPE } from '../definitions/ITeam'; import { TEAM_TYPE } from '../definitions/ITeam';
import { updateSettings } from '../actions/settings'; import { updateSettings } from '../actions/settings';
import { compareServerVersion } from './utils'; import { compareServerVersion } from './utils';
import reduxStore from './createStore'; import { store as reduxStore } from './auxStore';
import database from './database'; import database from './database';
import subscribeRooms from './methods/subscriptions/rooms'; import subscribeRooms from './methods/subscriptions/rooms';
import { getUserPresence, subscribeUsersPresence } from './methods/getUsersPresence'; import { getUserPresence, subscribeUsersPresence } from './methods/getUsersPresence';

View File

@ -1,6 +1,6 @@
import EJSON from 'ejson'; import EJSON from 'ejson';
import store from '../../lib/createStore'; import { store } from '../../lib/auxStore';
import { deepLinkingOpen } from '../../actions/deepLinking'; import { deepLinkingOpen } from '../../actions/deepLinking';
import { isFDroidBuild } from '../../constants/environment'; import { isFDroidBuild } from '../../constants/environment';
import PushNotification from './push'; import PushNotification from './push';

View File

@ -2,7 +2,7 @@
// TODO BUMP LIB VERSION // TODO BUMP LIB VERSION
import NotificationsIOS, { NotificationAction, NotificationCategory, Notification } from 'react-native-notifications'; import NotificationsIOS, { NotificationAction, NotificationCategory, Notification } from 'react-native-notifications';
import reduxStore from '../../lib/createStore'; import { store as reduxStore } from '../../lib/auxStore';
import I18n from '../../i18n'; import I18n from '../../i18n';
import { INotification } from '../../definitions/INotification'; import { INotification } from '../../definitions/INotification';

View File

@ -16,14 +16,14 @@ export interface IShareUser {
} }
export interface IShare { export interface IShare {
user: IShareUser | {}; user: IShareUser;
server: IShareServer | {}; server: IShareServer;
settings: TShareSettings; settings: TShareSettings;
} }
export const initialState: IShare = { export const initialState: IShare = {
user: {}, user: {} as IShareUser,
server: {}, server: {} as IShareServer,
settings: {} settings: {}
}; };

View File

@ -9,6 +9,7 @@ import { defaultTheme, newThemeState, subscribeTheme, unsubscribeTheme } from '.
import UserPreferences from './lib/userPreferences'; import UserPreferences from './lib/userPreferences';
import Navigation from './lib/ShareNavigation'; import Navigation from './lib/ShareNavigation';
import store from './lib/createStore'; import store from './lib/createStore';
import { initStore } from './lib/auxStore';
import { supportSystemTheme } from './utils/deviceInfo'; import { supportSystemTheme } from './utils/deviceInfo';
import { defaultHeader, getActiveRouteName, navigationTheme, themedHeader } from './utils/navigation'; import { defaultHeader, getActiveRouteName, navigationTheme, themedHeader } from './utils/navigation';
import RocketChat, { THEME_PREFERENCES_KEY } from './lib/rocketchat'; import RocketChat, { THEME_PREFERENCES_KEY } from './lib/rocketchat';
@ -28,6 +29,8 @@ import { DimensionsContext } from './dimensions';
import debounce from './utils/debounce'; import debounce from './utils/debounce';
import { ShareInsideStackParamList, ShareOutsideStackParamList, ShareAppStackParamList } from './definitions/navigationTypes'; import { ShareInsideStackParamList, ShareOutsideStackParamList, ShareAppStackParamList } from './definitions/navigationTypes';
initStore(store);
interface IDimensions { interface IDimensions {
width: number; width: number;
height: number; height: number;

View File

@ -1,5 +1,5 @@
import RocketChat from '../lib/rocketchat'; import RocketChat from '../lib/rocketchat';
import reduxStore from '../lib/createStore'; import { store as reduxStore } from '../lib/auxStore';
import { ISubscription } from '../definitions/ISubscription'; import { ISubscription } from '../definitions/ISubscription';
const canPostReadOnly = async ({ rid }: { rid: string }) => { const canPostReadOnly = async ({ rid }: { rid: string }) => {

View File

@ -5,7 +5,7 @@ import AsyncStorage from '@react-native-community/async-storage';
import { sha256 } from 'js-sha256'; import { sha256 } from 'js-sha256';
import UserPreferences from '../lib/userPreferences'; import UserPreferences from '../lib/userPreferences';
import store from '../lib/createStore'; import { store } from '../lib/auxStore';
import database from '../lib/database'; import database from '../lib/database';
import { import {
ATTEMPTS_KEY, ATTEMPTS_KEY,