Skip to content
Snippets Groups Projects
app-wrapper.js 2.25 KiB
Newer Older
import React, { Component } from 'react'
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'
Julia Friesel's avatar
Julia Friesel committed
import License from './license'
import AppLoadingView from './app-loading'
import store from "../store"
Sofiya Tepikin's avatar
Sofiya Tepikin committed
import { Provider } from 'react-redux'

export default class AppWrapper extends Component {
  constructor() {
    super()
Julia Friesel's avatar
Julia Friesel committed
    this.state = {
      isCheckingLicenseAgreement: true,
      shouldShowLicenseAgreement: false,
      shouldShowPasswordPrompt: false,
      shouldShowApp: false,
Julia Friesel's avatar
Julia Friesel committed
    }
    nodejs.start('main.js')
Julia Friesel's avatar
Julia Friesel committed
    this.checkLicenseAgreement()
    this.checkDbPasswordSet()
Julia Friesel's avatar
Julia Friesel committed

  async checkLicenseAgreement() {
    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
    })
Julia Friesel's avatar
Julia Friesel committed
  }

    const {
      isCheckingLicenseAgreement,
      shouldShowLicenseAgreement,
      shouldShowPasswordPrompt,
      shouldShowApp,
    } = this.state

Sofiya Tepikin's avatar
Sofiya Tepikin committed
    let initialView = null
Sofiya Tepikin's avatar
Sofiya Tepikin committed
    if (isCheckingLicenseAgreement) {
      initialView = <AppLoadingView />
    } else if (shouldShowLicenseAgreement) {
      initialView = <License setLicense={this.disableShowLicenseAgreement}/>
    } else if (shouldShowPasswordPrompt) {
      initialView = <PasswordPrompt enableShowApp={this.enableShowApp} />
    } else if (shouldShowApp) {
      initialView = <App />
Sofiya Tepikin's avatar
Sofiya Tepikin committed
    return <Provider store={store}>{initialView}</Provider>