From e4209e28b7bda936e23e246b96558fa69ba93599 Mon Sep 17 00:00:00 2001 From: Sofiya Tepikin <sofiya.tepikin@gmail.com> Date: Tue, 18 Jun 2019 00:10:54 +0200 Subject: [PATCH] Refactors App wrapper component --- components/app-wrapper.js | 86 ++++++++++++++++++++++++++--------- components/password-prompt.js | 72 ++++++++++++----------------- 2 files changed, 92 insertions(+), 66 deletions(-) diff --git a/components/app-wrapper.js b/components/app-wrapper.js index 4e8665b6..31419b9e 100644 --- a/components/app-wrapper.js +++ b/components/app-wrapper.js @@ -1,44 +1,86 @@ import React, { Component } from 'react' -import { View } from 'react-native' import nodejs from 'nodejs-mobile-react-native' + +import { getLicenseFlag, saveEncryptionFlag } from '../local-storage' +import { openDb } from '../db' + import App from './app' import PasswordPrompt from './password-prompt' import License from './license' -import { getLicenseFlag } from '../local-storage' +import AppLoadingView from './app-loading' export default class AppWrapper extends Component { constructor() { super() this.state = { - retrievingLicenseSetting: true + isCheckingLicenseAgreement: true, + shouldShowLicenseAgreement: false, + shouldShowPasswordPrompt: false, + shouldShowApp: false, } nodejs.start('main.js') this.checkLicenseAgreement() + this.checkDbPasswordSet() } async checkLicenseAgreement() { - const agreed = await getLicenseFlag() - this.setState({retrievingLicenseSetting: false}) - if (!agreed) this.setState({showLicense: true}) + const isLicenseFlagSet = await getLicenseFlag() + if (!isLicenseFlagSet) { + this.enableShowLicenseAgreement() + } else { + this.setState({ isCheckingLicenseAgreement: false }) + } + } + + async checkDbPasswordSet() { + const canConnectToDb = await openDb() + if (canConnectToDb) { + this.enableShowApp() + await saveEncryptionFlag(false) + return false + } + this.setState({ shouldShowPasswordPrompt: true }) + await saveEncryptionFlag(true) + } + + enableShowLicenseAgreement = () => { + this.setState({ + shouldShowLicenseAgreement: true, + isCheckingLicenseAgreement: false + }) + } + + disableShowLicenseAgreement = () => { + this.setState({ shouldShowLicenseAgreement: false }) + } + + enableShowApp = () => { + this.setState({ + shouldShowApp: true, + shouldShowPasswordPrompt: false + }) } render() { - const whiteScreen = <View style={{ flex: 1 }}></View> - const licenseScreen = <License setLicense={() => { - this.setState({showLicense: false}) - }}/> - const passwordPrompt = <PasswordPrompt showApp={() => { - this.setState({showApp: true}) - }}/> - - if (this.state.retrievingLicenseSetting) { - return whiteScreen - } else if (this.state.showLicense) { - return licenseScreen - } else if (!this.state.showApp) { - return passwordPrompt - } else { - return <App/> + const { + isCheckingLicenseAgreement, + shouldShowLicenseAgreement, + shouldShowPasswordPrompt, + shouldShowApp, + } = this.state + + if (isCheckingLicenseAgreement) { + return <AppLoadingView /> } + + if (shouldShowLicenseAgreement) { + return <License setLicense={this.disableShowLicenseAgreement}/> + } + + if (shouldShowPasswordPrompt) { + return <PasswordPrompt enableShowApp={this.enableShowApp} /> + } + + return shouldShowApp && <App /> } } \ No newline at end of file diff --git a/components/password-prompt.js b/components/password-prompt.js index 908bc684..356a699a 100644 --- a/components/password-prompt.js +++ b/components/password-prompt.js @@ -20,19 +20,6 @@ export default class PasswordPrompt extends Component { this.passHashToDb, this ) - - this.tryToOpenDb() - } - - async tryToOpenDb() { - const connected = await openDb() - if (!connected) { - this.setState({ showPasswordPrompt: true }) - await saveEncryptionFlag(true) - return - } - await saveEncryptionFlag(false) - this.props.showApp() } passHashToDb = async hash => { @@ -48,7 +35,7 @@ export default class PasswordPrompt extends Component { ) return } - this.props.showApp() + this.props.enableShowApp() } confirmDeletion = async () => { @@ -72,7 +59,7 @@ export default class PasswordPrompt extends Component { onPress: async () => { await deleteDbAndOpenNew() await saveEncryptionFlag(false) - this.props.showApp() + this.props.enableShowApp() } }] ) @@ -89,35 +76,32 @@ export default class PasswordPrompt extends Component { return ( <View flex={1}> <Header title={menuTitles.PasswordPrompt.toLowerCase()} /> - {this.state.showPasswordPrompt && - <View style={styles.passwordPromptPage}> - - <TextInput - onChangeText={val => this.setState({ password: val })} - style={styles.passwordPromptField} - secureTextEntry={true} - placeholder={labels.enterPassword} - /> - <TouchableOpacity - style={styles.passwordPromptButton} - onPress={() => { - requestHash('check-pw', this.state.password) - }} - disabled={!this.state.password} - > - <AppText style={styles.passwordPromptButtonText}> - {labels.title} - </AppText> - </TouchableOpacity> - <TouchableOpacity - onPress={this.confirmDeletion} - > - <AppText style={styles.passwordPromptForgotPasswordText}> - {labels.forgotPassword} - </AppText> - </TouchableOpacity> - </View> - } + <View style={styles.passwordPromptPage}> + <TextInput + onChangeText={val => this.setState({ password: val })} + style={styles.passwordPromptField} + secureTextEntry={true} + placeholder={labels.enterPassword} + /> + <TouchableOpacity + style={styles.passwordPromptButton} + onPress={() => { + requestHash('check-pw', this.state.password) + }} + disabled={!this.state.password} + > + <AppText style={styles.passwordPromptButtonText}> + {labels.title} + </AppText> + </TouchableOpacity> + <TouchableOpacity + onPress={this.confirmDeletion} + > + <AppText style={styles.passwordPromptForgotPasswordText}> + {labels.forgotPassword} + </AppText> + </TouchableOpacity> + </View> </View> ) } -- GitLab