From ced4be7bc71f8722f09feb7f3eb2ad9ffc8af942 Mon Sep 17 00:00:00 2001 From: ammarahm-ed Date: Sat, 24 Jul 2021 11:03:50 +0500 Subject: [PATCH] launch login dialog after session expired from AppLoader --- apps/mobile/AppRootEvents.js | 58 ++++++++++--------- apps/mobile/src/components/AppLoader/index.js | 24 +++++--- .../src/components/LoginDialog/index.js | 45 ++++++-------- apps/mobile/src/views/Editor/index.js | 5 -- 4 files changed, 65 insertions(+), 67 deletions(-) diff --git a/apps/mobile/AppRootEvents.js b/apps/mobile/AppRootEvents.js index 19bb6c132..b61b20846 100644 --- a/apps/mobile/AppRootEvents.js +++ b/apps/mobile/AppRootEvents.js @@ -1,10 +1,10 @@ import NetInfo from '@react-native-community/netinfo'; -import { EV, EVENTS } from 'notes-core/common'; -import React, { useEffect } from 'react'; -import { Appearance, AppState, Linking, Platform } from 'react-native'; +import {EV, EVENTS} from 'notes-core/common'; +import React, {useEffect} from 'react'; +import {Appearance, AppState, Linking, Platform} from 'react-native'; import RNExitApp from 'react-native-exit-app'; import * as RNIap from 'react-native-iap'; -import { enabled } from 'react-native-privacy-snapshot'; +import {enabled} from 'react-native-privacy-snapshot'; import SplashScreen from 'react-native-splash-screen'; import { clearAllStores, @@ -29,9 +29,9 @@ import Navigation from './src/services/Navigation'; import PremiumService from './src/services/PremiumService'; import SettingsService from './src/services/SettingsService'; import Sync from './src/services/Sync'; -import { APP_VERSION, doInBackground, editing } from './src/utils'; -import { updateStatusBarColor } from './src/utils/Colors'; -import { db } from './src/utils/DB'; +import {APP_VERSION, doInBackground, editing} from './src/utils'; +import {updateStatusBarColor} from './src/utils/Colors'; +import {db} from './src/utils/DB'; import { eClearEditor, eCloseProgressDialog, @@ -39,10 +39,14 @@ import { eOpenProgressDialog, refreshNotesPage } from './src/utils/Events'; -import { MMKV } from './src/utils/mmkv'; +import {MMKV} from './src/utils/mmkv'; import Storage from './src/utils/storage'; -import { sleep } from './src/utils/TimeUtils'; -import { getNote, getWebviewInit, updateNoteInEditor } from './src/views/Editor/Functions'; +import {sleep} from './src/utils/TimeUtils'; +import { + getNote, + getWebviewInit, + updateNoteInEditor +} from './src/views/Editor/Functions'; let prevTransactionId = null; let subsriptionSuccessListener; @@ -55,7 +59,7 @@ async function storeAppState() { editing: editing.currentlyEditing, note: getNote(), movedAway: editing.movedAway, - timestamp: Date.now(), + timestamp: Date.now() }); await MMKV.setItem('appState', state); } @@ -128,7 +132,7 @@ export const AppRootEvents = React.memo( EV.subscribe(EVENTS.noteRemoved, onNoteRemoved); eSubscribeEvent('userLoggedIn', setCurrentUser); removeInternetStateListener = NetInfo.addEventListener( - onInternetStateChanged, + onInternetStateChanged ); return () => { eUnSubscribeEvent('userLoggedIn', setCurrentUser); @@ -140,7 +144,7 @@ export const AppRootEvents = React.memo( EV.unsubscribe(EVENTS.noteRemoved, onNoteRemoved); EV.unsubscribe( EVENTS.userCheckStatus, - PremiumService.onUserStatusCheck, + PremiumService.onUserStatusCheck ); EV.unsubscribe(EVENTS.userSubscriptionUpdated, onAccountStatusChange); @@ -162,7 +166,7 @@ export const AppRootEvents = React.memo( Navigation.routeNames.Notes, Navigation.routeNames.NotesPage, Navigation.routeNames.Trash, - Navigation.routeNames.Notebook, + Navigation.routeNames.Notebook ]); eSendEvent(eClearEditor); } catch (e) {} @@ -230,7 +234,7 @@ export const AppRootEvents = React.memo( eSendEvent(eOpenProgressDialog, { title: 'Email confirmed!', paragraph: message, - noProgress: true, + noProgress: true }); if (user?.isEmailConfirmed) { @@ -245,10 +249,10 @@ export const AppRootEvents = React.memo( }) .then(async () => { subsriptionSuccessListener = RNIap.purchaseUpdatedListener( - onSuccessfulSubscription, + onSuccessfulSubscription ); subsriptionErrorListener = RNIap.purchaseErrorListener( - onSubscriptionError, + onSubscriptionError ); }); }; @@ -264,7 +268,7 @@ export const AppRootEvents = React.memo( }, icon: 'check', actionText: 'Continue', - noProgress: true, + noProgress: true }); } await PremiumService.setPremiumStatus(); @@ -290,7 +294,7 @@ export const AppRootEvents = React.memo( ToastEvent.show({ heading: 'Sync failed', message: e.message, - context: 'global', + context: 'global' }); } } finally { @@ -316,7 +320,7 @@ export const AppRootEvents = React.memo( }, icon: 'logout', actionText: 'Login', - noProgress: true, + noProgress: true }); }; @@ -352,7 +356,7 @@ export const AppRootEvents = React.memo( }); if (res !== true) throw new Error(res); - if (!user.isEmailConfirmed) { + if (!user?.isEmailConfirmed) { setEmailVerifyMessage(); return; } @@ -362,7 +366,7 @@ export const AppRootEvents = React.memo( } } catch (e) { let user = await db.user.getUser(); - if (user && !user.isEmailConfirmed) { + if (user && !user?.isEmailConfirmed) { setEmailVerifyMessage(); } else if (!user) { setLoginMessage(); @@ -388,7 +392,7 @@ export const AppRootEvents = React.memo( heading: 'Failed to subscribe', type: 'error', message: error.message, - context: 'local', + context: 'local' }); }; @@ -413,7 +417,7 @@ export const AppRootEvents = React.memo( } let result = await BiometricService.validateUser( - 'Unlock to access your notes', + 'Unlock to access your notes' ); if (result) { showingDialog = false; @@ -435,10 +439,10 @@ export const AppRootEvents = React.memo( await MMKV.removeItem('appState'); } let user = await db.user.getUser(); - if (user && !user.isEmailConfirmed) { + if (user && !user?.isEmailConfirmed) { try { let user = await db.user.fetchUser(); - if (user.isEmailConfirmed) { + if (user?.isEmailConfirmed) { onEmailVerified(); } } catch (e) {} @@ -463,5 +467,5 @@ export const AppRootEvents = React.memo( return <>; }, - () => true, + () => true ); diff --git a/apps/mobile/src/components/AppLoader/index.js b/apps/mobile/src/components/AppLoader/index.js index dbddcf60a..2c117e4cd 100644 --- a/apps/mobile/src/components/AppLoader/index.js +++ b/apps/mobile/src/components/AppLoader/index.js @@ -6,21 +6,22 @@ import {useTracked} from '../../provider'; import { useFavoriteStore, useNoteStore, - useUserStore, + useUserStore } from '../../provider/stores'; import BiometricService from '../../services/BiometricService'; import {DDS} from '../../services/DeviceDetection'; import { eSendEvent, eSubscribeEvent, - eUnSubscribeEvent, + eUnSubscribeEvent } from '../../services/EventManager'; import {editing} from '../../utils'; import {db} from '../../utils/DB'; -import {eOpenRateDialog} from '../../utils/Events'; +import {eOpenLoginDialog, eOpenRateDialog} from '../../utils/Events'; import {MMKV} from '../../utils/mmkv'; import {tabBarRef} from '../../utils/Refs'; import {SIZE} from '../../utils/SizeUtils'; +import {sleep} from '../../utils/TimeUtils'; import {Button} from '../Button'; import Input from '../Input'; import Seperator from '../Seperator'; @@ -76,13 +77,18 @@ const AppLoader = ({onLoad}) => { Animated.timing(opacityV, { toValue: 0, duration: 100, - easing: Easing.out(Easing.ease), + easing: Easing.out(Easing.ease) }).start(); setLoading(false); await db.notes.init(); setNotes(); setFavorites(); _setLoading(false); + await sleep(1000); + if ((await MMKV.getItem('loginSessionHasExpired')) === 'expired') { + eSendEvent(eOpenLoginDialog, 4); + return; + } let askForRating = await MMKV.getItem('askForRating'); if (askForRating !== 'never' || askForRating !== 'completed') { askForRating = JSON.parse(askForRating); @@ -112,7 +118,7 @@ const AppLoader = ({onLoad}) => { const onUnlockBiometrics = async () => { let verified = await BiometricService.validateUser( 'Unlock to access your notes', - '', + '' ); if (verified) { didVerifyUser = true; @@ -141,7 +147,7 @@ const AppLoader = ({onLoad}) => { height: '100%', position: 'absolute', zIndex: 999, - borderRadius: 10, + borderRadius: 10 }}> { justifyContent: 'center', alignItems: 'center', borderRadius: 10, - opacity: opacityV, + opacity: opacityV }}> {verifyUser ? ( { flex: 1, justifyContent: 'center', width: '100%', - paddingHorizontal: 12, + paddingHorizontal: 12 }}> Verify your identity {user ? ( @@ -209,7 +215,7 @@ const AppLoader = ({onLoad}) => { style={{ height: 10, flexDirection: 'row', - width: 100, + width: 100 }}> diff --git a/apps/mobile/src/components/LoginDialog/index.js b/apps/mobile/src/components/LoginDialog/index.js index 2fa8c02d2..bcc0a491f 100644 --- a/apps/mobile/src/components/LoginDialog/index.js +++ b/apps/mobile/src/components/LoginDialog/index.js @@ -1,4 +1,4 @@ -import React, { useEffect, useRef, useState } from 'react'; +import React, {useEffect, useRef, useState} from 'react'; import { ActivityIndicator, ScrollView, @@ -7,39 +7,39 @@ import { View } from 'react-native'; import Icon from 'react-native-vector-icons/MaterialCommunityIcons'; -import { Button } from '../../components/Button'; +import {Button} from '../../components/Button'; import Seperator from '../../components/Seperator'; -import { useTracked } from '../../provider/index'; -import { useUserStore } from '../../provider/stores'; +import {useTracked} from '../../provider/index'; +import {useUserStore} from '../../provider/stores'; import BiometricService from '../../services/BiometricService'; -import { DDS } from '../../services/DeviceDetection'; +import {DDS} from '../../services/DeviceDetection'; import { eSendEvent, eSubscribeEvent, eUnSubscribeEvent, ToastEvent } from '../../services/EventManager'; -import { clearMessage, setEmailVerifyMessage } from '../../services/Message'; +import {clearMessage, setEmailVerifyMessage} from '../../services/Message'; import PremiumService from '../../services/PremiumService'; -import { hexToRGBA } from '../../utils/ColorUtils'; -import { db } from '../../utils/DB'; +import {hexToRGBA} from '../../utils/ColorUtils'; +import {db} from '../../utils/DB'; import { eOpenLoginDialog, eOpenProgressDialog, eOpenRecoveryKeyDialog } from '../../utils/Events'; -import { openLinkInBrowser } from '../../utils/functions'; -import { MMKV } from '../../utils/mmkv'; -import { SIZE } from '../../utils/SizeUtils'; +import {openLinkInBrowser} from '../../utils/functions'; +import {MMKV} from '../../utils/mmkv'; +import {SIZE} from '../../utils/SizeUtils'; import Storage from '../../utils/storage'; -import { sleep } from '../../utils/TimeUtils'; +import {sleep} from '../../utils/TimeUtils'; import ActionSheetWrapper from '../ActionSheetComponent/ActionSheetWrapper'; import BaseDialog from '../Dialog/base-dialog'; import DialogButtons from '../Dialog/dialog-buttons'; import DialogContainer from '../Dialog/dialog-container'; import DialogHeader from '../Dialog/dialog-header'; import Input from '../Input'; -import { Header } from '../SimpleList/header'; +import {Header} from '../SimpleList/header'; import Heading from '../Typography/Heading'; import Paragraph from '../Typography/Paragraph'; @@ -57,6 +57,7 @@ let confirmPassword; let oldPassword; function getEmail() { + if (!email) return null; return email.replace(/(.{2})(.*)(?=@)/, function (gp1, gp2, gp3) { for (let i = 0; i < gp3.length; i++) { gp2 += '*'; @@ -64,7 +65,6 @@ function getEmail() { return gp2; }); } -let offsetY = 0; const LoginDialog = () => { const [state, dispatch] = useTracked(); const colors = state.colors; @@ -84,7 +84,6 @@ const LoginDialog = () => { const actionSheetRef = useRef(); const _email = useRef(); const _pass = useRef(); - const _username = useRef(); const _oPass = useRef(); const _passConfirm = useRef(); @@ -177,11 +176,6 @@ const LoginDialog = () => { const current = MODE_DATA[mode]; useEffect(() => { - MMKV.getItem('loginSessionHasExpired').then(r => { - if (r === 'expired') { - open(MODES.sessionExpired); - } - }); eSubscribeEvent(eOpenLoginDialog, open); return () => { eUnSubscribeEvent(eOpenLoginDialog, open); @@ -473,15 +467,14 @@ const LoginDialog = () => { onMomentumScrollEnd={() => { actionSheetRef.current.handleChildScrollEnd(); }} + bounces={false} + overScrollMode="never" + scrollToOverflowEnabled="false" style={{ - maxHeight: DDS.isTab ? '90%' : '100%', - width: DDS.isTab ? 500 : '100%', minHeight: !DDS.isTab ? '90%' : null, - height: MODES.sessionExpired === mode ? '100%' : null, borderRadius: DDS.isTab ? 5 : 0, backgroundColor: colors.bg, - zIndex: 10, - paddingBottom: DDS.isTab ? 20 : 0 + zIndex: 10 }}>
{ justifyContent: 'space-between', backgroundColor: colors.bg, alignSelf: 'center', - paddingVertical:20 + paddingVertical: 20 }}> { - setTimeout(async () => { - if ((await MMKV.getItem('loginSessionHasExpired')) === 'expired') - eSendEvent(eOpenLoginDialog, 4); - }, 1000); - if (premiumUser) { tiny.call(EditorWebView,tiny.setMarkdown,true) }