diff --git a/lib/selectors/account-selectors.js b/lib/selectors/account-selectors.js --- a/lib/selectors/account-selectors.js +++ b/lib/selectors/account-selectors.js @@ -8,45 +8,50 @@ sessionIDSelector, deviceTokensSelector, } from './keyserver-selectors.js'; -import { currentCalendarQuery } from './nav-selectors.js'; import type { LogInExtraInfo, DeviceTokenUpdateRequest, } from '../types/account-types.js'; -import type { CalendarQuery } from '../types/entry-types.js'; +import type { CalendarFilter } from '../types/filter-types.js'; import type { KeyserverInfos } from '../types/keyserver-types.js'; -import type { AppState } from '../types/redux-types.js'; +import type { BaseNavInfo } from '../types/nav-types.js'; +import type { AppState, BaseAppState } from '../types/redux-types.js'; import type { PreRequestUserState, PreRequestUserKeyserverSessionInfo, } from '../types/session-types.js'; import type { CurrentUserInfo } from '../types/user-types.js'; -const logInExtraInfoSelector: ( - state: AppState, -) => (calendarActive: boolean) => LogInExtraInfo = createSelector( - deviceTokensSelector, - currentCalendarQuery, - ( - deviceTokens: { +[keyserverID: string]: ?string }, - calendarQuery: (calendarActive: boolean) => CalendarQuery, - ) => { - const deviceTokenUpdateRequest: { [string]: DeviceTokenUpdateRequest } = {}; +const logInExtraInfoSelector: (state: AppState) => LogInExtraInfo = + createSelector( + (state: BaseAppState<>) => state.navInfo, + (state: BaseAppState<>) => state.calendarFilters, + deviceTokensSelector, + ( + navInfo: BaseNavInfo, + calendarFilters: $ReadOnlyArray, + deviceTokens: { +[keyserverID: string]: ?string }, + ) => { + const deviceTokenUpdateRequest: { [string]: DeviceTokenUpdateRequest } = + {}; - for (const keyserverID in deviceTokens) { - if (deviceTokens[keyserverID]) { - deviceTokenUpdateRequest[keyserverID] = { - deviceToken: deviceTokens[keyserverID], - }; + for (const keyserverID in deviceTokens) { + if (deviceTokens[keyserverID]) { + deviceTokenUpdateRequest[keyserverID] = { + deviceToken: deviceTokens[keyserverID], + }; + } } - } - // Return a function since we depend on the time of evaluation - return (calendarActive: boolean): LogInExtraInfo => ({ - calendarQuery: calendarQuery(calendarActive), - deviceTokenUpdateRequest, - }); - }, -); + return { + calendarQuery: { + startDate: navInfo.startDate, + endDate: navInfo.endDate, + filters: calendarFilters, + }, + deviceTokenUpdateRequest, + }; + }, + ); const basePreRequestUserStateForSingleKeyserverSelector: ( keyserverID: string, diff --git a/native/account/log-in-panel.react.js b/native/account/log-in-panel.react.js --- a/native/account/log-in-panel.react.js +++ b/native/account/log-in-panel.react.js @@ -40,7 +40,6 @@ import { PanelButton, Panel } from './panel-components.react.js'; import PasswordInput from './password-input.react.js'; import SWMansionIcon from '../components/swmansion-icon.react.js'; -import { NavContext } from '../navigation/navigation-context.js'; import { useSelector } from '../redux/redux-utils.js'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js'; import type { KeyPressEvent } from '../types/react-native.js'; @@ -373,13 +372,7 @@ olmSessionInitializationDataLoadingStatus, ); - const navContext = React.useContext(NavContext); - const logInExtraInfo = useSelector(state => - nativeLogInExtraInfoSelector({ - redux: state, - navContext, - }), - ); + const logInExtraInfo = useSelector(nativeLogInExtraInfoSelector); const dispatchActionPromise = useDispatchActionPromise(); const callLogIn = useLogIn(); diff --git a/native/account/register-panel.react.js b/native/account/register-panel.react.js --- a/native/account/register-panel.react.js +++ b/native/account/register-panel.react.js @@ -43,7 +43,6 @@ import { setNativeCredentials } from './native-credentials.js'; import { PanelButton, Panel } from './panel-components.react.js'; import SWMansionIcon from '../components/swmansion-icon.react.js'; -import { NavContext } from '../navigation/navigation-context.js'; import { useSelector } from '../redux/redux-utils.js'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js'; import type { KeyPressEvent } from '../types/react-native.js'; @@ -477,13 +476,7 @@ olmSessionInitializationDataLoadingStatus, ); - const navContext = React.useContext(NavContext); - const logInExtraInfo = useSelector(state => - nativeLogInExtraInfoSelector({ - redux: state, - navContext, - }), - ); + const logInExtraInfo = useSelector(nativeLogInExtraInfoSelector); const dispatch = useDispatch(); const dispatchActionPromise = useDispatchActionPromise(); diff --git a/native/account/registration/registration-server-call.js b/native/account/registration/registration-server-call.js --- a/native/account/registration/registration-server-call.js +++ b/native/account/registration/registration-server-call.js @@ -21,7 +21,6 @@ useNativeSetUserAvatar, useUploadSelectedMedia, } from '../../avatars/avatar-hooks.js'; -import { NavContext } from '../../navigation/navigation-context.js'; import { useSelector } from '../../redux/redux-utils.js'; import { nativeLogInExtraInfoSelector } from '../../selectors/account-selectors.js'; import { AppOutOfDateAlertDetails } from '../../utils/alert-messages.js'; @@ -56,13 +55,7 @@ // STEP 1: ACCOUNT REGISTRATION - const navContext = React.useContext(NavContext); - const logInExtraInfo = useSelector(state => - nativeLogInExtraInfoSelector({ - redux: state, - navContext, - }), - ); + const logInExtraInfo = useSelector(nativeLogInExtraInfoSelector); const dispatchActionPromise = useDispatchActionPromise(); const callRegister = useServerCall(register); diff --git a/native/account/resolve-invalidated-cookie.js b/native/account/resolve-invalidated-cookie.js --- a/native/account/resolve-invalidated-cookie.js +++ b/native/account/resolve-invalidated-cookie.js @@ -8,7 +8,6 @@ import type { CallKeyserverEndpoint } from 'lib/utils/keyserver-call.js'; import { fetchNativeKeychainCredentials } from './native-credentials.js'; -import { getGlobalNavContext } from '../navigation/icky-global.js'; import { store } from '../redux/redux-setup.js'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js'; @@ -26,10 +25,7 @@ if (!keychainCredentials) { return; } - let extraInfo = await nativeLogInExtraInfoSelector({ - redux: store.getState(), - navContext: getGlobalNavContext(), - })(); + let extraInfo = await nativeLogInExtraInfoSelector(store.getState())(); if (getInitialNotificationsEncryptedMessage) { const initialNotificationsEncryptedMessage = diff --git a/native/account/siwe-hooks.js b/native/account/siwe-hooks.js --- a/native/account/siwe-hooks.js +++ b/native/account/siwe-hooks.js @@ -14,7 +14,6 @@ } from 'lib/utils/action-utils.js'; import type { CallServerEndpointOptions } from 'lib/utils/call-server-endpoint.js'; -import { NavContext } from '../navigation/navigation-context.js'; import { useSelector } from '../redux/redux-utils.js'; import { nativeLogInExtraInfoSelector } from '../selectors/account-selectors.js'; import { nativeNotificationsSessionCreator } from '../utils/crypto-utils.js'; @@ -49,13 +48,7 @@ [siweAuthCall], ); - const navContext = React.useContext(NavContext); - const logInExtraInfo = useSelector(state => - nativeLogInExtraInfoSelector({ - redux: state, - navContext, - }), - ); + const logInExtraInfo = useSelector(nativeLogInExtraInfoSelector); const getInitialNotificationsEncryptedMessage = useInitialNotificationsEncryptedMessage(nativeNotificationsSessionCreator); diff --git a/native/selectors/account-selectors.js b/native/selectors/account-selectors.js --- a/native/selectors/account-selectors.js +++ b/native/selectors/account-selectors.js @@ -11,20 +11,14 @@ import { values } from 'lib/utils/objects.js'; import { commCoreModule } from '../native-modules.js'; -import { calendarActiveSelector } from '../navigation/nav-selectors.js'; import type { AppState } from '../redux/state-types.js'; import type { ConnectivityInfo } from '../types/connectivity.js'; -import type { NavPlusRedux } from '../types/selector-types.js'; const nativeLogInExtraInfoSelector: ( - input: NavPlusRedux, + state: AppState, ) => () => Promise = createSelector( - (input: NavPlusRedux) => logInExtraInfoSelector(input.redux), - (input: NavPlusRedux) => calendarActiveSelector(input.navContext), - ( - logInExtraInfoFunc: (calendarActive: boolean) => LogInExtraInfo, - calendarActive: boolean, - ) => { + logInExtraInfoSelector, + (logInExtraInfo: LogInExtraInfo) => { const loginExtraFuncWithIdentityKey = async () => { await commCoreModule.initializeCryptoAccount(); const { blobPayload, signature } = @@ -34,7 +28,7 @@ signature, }; return { - ...logInExtraInfoFunc(calendarActive), + ...logInExtraInfo, signedIdentityKeysBlob, }; }; diff --git a/web/account/siwe-login-form.react.js b/web/account/siwe-login-form.react.js --- a/web/account/siwe-login-form.react.js +++ b/web/account/siwe-login-form.react.js @@ -16,6 +16,7 @@ import ConnectedWalletInfo from 'lib/components/connected-wallet-info.react.js'; import SWMansionIcon from 'lib/components/SWMansionIcon.react.js'; import stores from 'lib/facts/stores.js'; +import { logInExtraInfoSelector } from 'lib/selectors/account-selectors.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; import type { LogInStartingPayload, @@ -41,7 +42,6 @@ import OrBreak from '../components/or-break.react.js'; import LoadingIndicator from '../loading-indicator.react.js'; import { useSelector } from '../redux/redux-utils.js'; -import { webLogInExtraInfoSelector } from '../selectors/account-selectors.js'; type SIWELogInError = 'account_does_not_exist'; @@ -64,7 +64,7 @@ ); const siweAuthLoadingStatus = useSelector(siweAuthLoadingStatusSelector); const siweAuthCall = useServerCall(siweAuth); - const logInExtraInfo = useSelector(webLogInExtraInfoSelector); + const logInExtraInfo = useSelector(logInExtraInfoSelector); const [siweNonce, setSIWENonce] = React.useState(null); @@ -120,12 +120,11 @@ const attemptSIWEAuth = React.useCallback( (message: string, signature: string) => { - const extraInfo = logInExtraInfo(); return dispatchActionPromise( siweAuthActionTypes, - callSIWEAuthEndpoint(message, signature, extraInfo), + callSIWEAuthEndpoint(message, signature, logInExtraInfo), undefined, - ({ calendarQuery: extraInfo.calendarQuery }: LogInStartingPayload), + ({ calendarQuery: logInExtraInfo.calendarQuery }: LogInStartingPayload), ); }, [callSIWEAuthEndpoint, dispatchActionPromise, logInExtraInfo], diff --git a/web/account/traditional-login-form.react.js b/web/account/traditional-login-form.react.js --- a/web/account/traditional-login-form.react.js +++ b/web/account/traditional-login-form.react.js @@ -5,6 +5,7 @@ import { useLogIn, logInActionTypes } from 'lib/actions/user-actions.js'; import { useModalContext } from 'lib/components/modal-provider.react.js'; +import { logInExtraInfoSelector } from 'lib/selectors/account-selectors.js'; import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; import { oldValidUsernameRegex, @@ -25,12 +26,11 @@ import LoadingIndicator from '../loading-indicator.react.js'; import Input from '../modals/input.react.js'; import { useSelector } from '../redux/redux-utils.js'; -import { webLogInExtraInfoSelector } from '../selectors/account-selectors.js'; const loadingStatusSelector = createLoadingStatusSelector(logInActionTypes); function TraditionalLoginForm(): React.Node { const inputDisabled = useSelector(loadingStatusSelector) === 'loading'; - const loginExtraInfo = useSelector(webLogInExtraInfoSelector); + const loginExtraInfo = useSelector(logInExtraInfoSelector); const callLogIn = useLogIn(); const dispatchActionPromise = useDispatchActionPromise(); const modalContext = useModalContext(); @@ -118,13 +118,11 @@ usernameInputRef.current?.focus(); return; } - - const extraInfo = loginExtraInfo(); void dispatchActionPromise( logInActionTypes, - logInAction(extraInfo), + logInAction(loginExtraInfo), undefined, - ({ calendarQuery: extraInfo.calendarQuery }: LogInStartingPayload), + ({ calendarQuery: loginExtraInfo.calendarQuery }: LogInStartingPayload), ); }, [dispatchActionPromise, logInAction, loginExtraInfo, username, password], diff --git a/web/selectors/account-selectors.js b/web/selectors/account-selectors.js deleted file mode 100644 --- a/web/selectors/account-selectors.js +++ /dev/null @@ -1,22 +0,0 @@ -// @flow - -import { createSelector } from 'reselect'; - -import { logInExtraInfoSelector } from 'lib/selectors/account-selectors.js'; -import type { LogInExtraInfo } from 'lib/types/account-types.js'; - -import type { AppState } from '../redux/redux-setup.js'; - -const webLogInExtraInfoSelector: (state: AppState) => () => LogInExtraInfo = - createSelector( - logInExtraInfoSelector, - (state: AppState) => state.navInfo.tab === 'calendar', - ( - logInExtraInfoFunc: (calendarActive: boolean) => LogInExtraInfo, - calendarActive: boolean, - ) => - () => - logInExtraInfoFunc(calendarActive), - ); - -export { webLogInExtraInfoSelector };