From 95359ce26237b5b3d884e6510f3fe9bf40d3d3e3 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 17:15:25 +0100 Subject: [PATCH 01/10] Move ConfirmWithPassword component to the common folder --- .../{data-management => common}/confirm-with-password.js | 0 components/settings/data-management/delete-data.js | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename components/settings/{data-management => common}/confirm-with-password.js (100%) diff --git a/components/settings/data-management/confirm-with-password.js b/components/settings/common/confirm-with-password.js similarity index 100% rename from components/settings/data-management/confirm-with-password.js rename to components/settings/common/confirm-with-password.js diff --git a/components/settings/data-management/delete-data.js b/components/settings/data-management/delete-data.js index dd09c4a..18fdb46 100644 --- a/components/settings/data-management/delete-data.js +++ b/components/settings/data-management/delete-data.js @@ -5,7 +5,7 @@ import { Alert, ToastAndroid } from 'react-native' import { clearDb, isDbEmpty } from '../../../db' import { hasEncryptionObservable } from '../../../local-storage' import SettingsButton from '../settings-button' -import ConfirmWithPassword from './confirm-with-password' +import ConfirmWithPassword from '../common/confirm-with-password' import alertError from '../alert-error' import settings from '../../../i18n/en/settings' From 5d29bcdc7b8fba1ba8ae81e2b1239c0c43095f55 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 17:32:03 +0100 Subject: [PATCH 02/10] Reuse ConfirmWithPassword component in ChangePassword component --- components/settings/password/update.js | 83 +++++++------------------- 1 file changed, 23 insertions(+), 60 deletions(-) diff --git a/components/settings/password/update.js b/components/settings/password/update.js index bac6d2b..3879df4 100644 --- a/components/settings/password/update.js +++ b/components/settings/password/update.js @@ -1,14 +1,9 @@ import React, { Component } from 'react' -import { View } from 'react-native' -import nodejs from 'nodejs-mobile-react-native' -import { shared as sharedLabels } from '../../../i18n/en/labels' import settings from '../../../i18n/en/settings' -import { requestHash } from '../../../db' import EnterNewPassword from './enter-new-password' -import PasswordField from './password-field' import SettingsButton from '../settings-button' import showBackUpReminder from './show-backup-reminder' -import checkCurrentPassword from './check-current-password' +import ConfirmWithPassword from '../common/confirm-with-password' export default class ChangePassword extends Component { @@ -19,35 +14,6 @@ export default class ChangePassword extends Component { enteringCurrentPassword: false, enteringNewPassword: false } - - nodejs.channel.addListener( - 'pre-change-pw-check', - this.openNewPasswordField, - this - ) - } - - componentWillUnmount() { - nodejs.channel.removeListener('pre-change-pw-check', this.openNewPasswordField) - } - - openNewPasswordField = async hash => { - const passwordCorrect = await checkCurrentPassword({ - hash, - onTryAgain: () => this.setState({ currentPassword: null }), - onCancel: () => this.setState({ - enteringCurrentPassword: false, - currentPassword: null - }) - }) - - if (passwordCorrect) { - this.setState({ - currentPassword: null, - enteringNewPassword: true, - enteringCurrentPassword: false - }) - } } startChangingPassword = () => { @@ -56,12 +22,20 @@ export default class ChangePassword extends Component { }) } - handleCurrentPasswordInput = (currentPassword) => { - this.setState({ currentPassword }) + startEnteringNewPassword = () => { + this.setState({ + currentPassword: null, + enteringNewPassword: true, + enteringCurrentPassword: false + }) } - checkCurrentPassword = () => { - requestHash('pre-change-pw-check', this.state.currentPassword) + cancelConfirmationWithPassword = () => { + this.setState({ + currentPassword: null, + enteringNewPassword: false, + enteringCurrentPassword: false + }) } render() { @@ -76,19 +50,10 @@ export default class ChangePassword extends Component { if (enteringCurrentPassword) { return ( - - - - {sharedLabels.unlock} - - + ) } @@ -97,14 +62,12 @@ export default class ChangePassword extends Component { } return ( - - - {labels.changePassword} - - + + {labels.changePassword} + ) } } \ No newline at end of file From 0a9570449b3862b2bc54c675a68afe2dd00d36bf Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 17:51:37 +0100 Subject: [PATCH 03/10] Reuse ConfirmWithPassword component in DeletePassword component --- components/settings/password/delete.js | 86 ++++++++------------------ 1 file changed, 26 insertions(+), 60 deletions(-) diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js index 6cef844..c80b397 100644 --- a/components/settings/password/delete.js +++ b/components/settings/password/delete.js @@ -1,80 +1,46 @@ import React, { Component } from 'react' -import { - View, - TouchableOpacity -} from 'react-native' -import nodejs from 'nodejs-mobile-react-native' -import AppText from '../../app-text' -import styles from '../../../styles' import labels from '../../../i18n/en/settings' -import { requestHash, changeEncryptionAndRestartApp } from '../../../db' -import PasswordField from './password-field' -import showBackUpReminder from './show-backup-reminder' -import checkCurrentPassword from './check-current-password' +import { changeEncryptionAndRestartApp } from '../../../db' +import ConfirmWithPassword from '../common/confirm-with-password' +import SettingsButton from '../settings-button' export default class DeletePassword extends Component { constructor() { super() this.state = { - enteringCurrentPassword: false, - currentPassword: null + enteringCurrentPassword: false } - - nodejs.channel.addListener( - 'pre-delete-pw-check', - this.removeEncryption, - this - ) } - componentWillUnmount() { - nodejs.channel.removeListener('pre-delete-pw-check', this.removeEncryption) + startConfirmWithPassword = () => { + this.setState({ enteringCurrentPassword: true }) } - removeEncryption = async hash => { - const passwordIsCorrect = await checkCurrentPassword({ - hash, - onTryAgain: () => this.setState({currentPassword: null}), - onCancel: () => this.setState({ - enteringCurrentPassword: false, - currentPassword: null - }) - }) + startDeletePassword = async () => { + await changeEncryptionAndRestartApp() + } - if (passwordIsCorrect) await changeEncryptionAndRestartApp() + cancelConfirmationWithPassword = () => { + this.setState({ enteringCurrentPassword: false }) } render() { + + const { enteringCurrentPassword } = this.state + + if (enteringCurrentPassword) { + return ( + + ) + } + return ( - - {this.state.enteringCurrentPassword && - this.setState({ currentPassword: val })} - value={this.state.currentPassword} - placeholder={labels.passwordSettings.enterCurrent} - /> - } - { - if (!this.state.enteringCurrentPassword) { - showBackUpReminder(() => { - this.setState({ enteringCurrentPassword: true }) - }, true) - } else { - requestHash('pre-delete-pw-check', this.state.currentPassword) - } - }} - disabled={ - this.state.enteringCurrentPassword && - !this.state.currentPassword - } - style={styles.settingsButton} - > - - {labels.passwordSettings.deletePassword} - - - + + {labels.passwordSettings.deletePassword} + ) } } \ No newline at end of file From 7b87424aebdea5dadec9633b390a899d248d0882 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 18:55:06 +0100 Subject: [PATCH 04/10] Bug fix for showing irrelevant buttons on the password management page --- components/settings/password/delete.js | 1 + components/settings/password/index.js | 44 +++++++++++++++++++++----- components/settings/password/update.js | 1 + 3 files changed, 38 insertions(+), 8 deletions(-) diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js index c80b397..016cae4 100644 --- a/components/settings/password/delete.js +++ b/components/settings/password/delete.js @@ -14,6 +14,7 @@ export default class DeletePassword extends Component { startConfirmWithPassword = () => { this.setState({ enteringCurrentPassword: true }) + this.props.onStartDeletingPassword() } startDeletePassword = async () => { diff --git a/components/settings/password/index.js b/components/settings/password/index.js index fca0966..ccc2452 100644 --- a/components/settings/password/index.js +++ b/components/settings/password/index.js @@ -15,29 +15,57 @@ export default class PasswordSetting extends Component { super(props) this.state = { showUpdateAndDelete: hasEncryptionObservable.value, - showCreate: !hasEncryptionObservable.value + showCreate: !hasEncryptionObservable.value, + isChangingPassword: false, + isDeletingPassword: false } } + onChangingPassword = () => { + this.setState({ isChangingPassword: true }) + } + + onDeletingPassword = () => { + this.setState({ isDeletingPassword: true }) + } + render() { + + const { + showUpdateAndDelete, + isChangingPassword, + isDeletingPassword, + showCreate + } = this.state + return ( - {this.state.showUpdateAndDelete ? + {showUpdateAndDelete ? {labels.passwordSettings.explainerEnabled} : {labels.passwordSettings.explainerDisabled} } - {this.state.showUpdateAndDelete && - - - - + { + showUpdateAndDelete && ( + + {(isChangingPassword + || !isChangingPassword && !isDeletingPassword) + && } + {(isDeletingPassword + || !isChangingPassword && !isDeletingPassword) + && } + + ) } - {this.state.showCreate && + {showCreate && } diff --git a/components/settings/password/update.js b/components/settings/password/update.js index 3879df4..81b2ba9 100644 --- a/components/settings/password/update.js +++ b/components/settings/password/update.js @@ -20,6 +20,7 @@ export default class ChangePassword extends Component { showBackUpReminder(() => { this.setState({ enteringCurrentPassword: true }) }) + this.props.onStartChangingPassword() } startEnteringNewPassword = () => { From 373dbea60cd69232bd86f756082385cdfb2b959c Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 19:13:39 +0100 Subject: [PATCH 05/10] Refactor npf settings component --- components/settings/nfp-settings/index.js | 18 ++++----- .../settings/nfp-settings/use-cervix.js | 39 +++++++------------ components/settings/settings-segment.js | 10 ++++- 3 files changed, 33 insertions(+), 34 deletions(-) diff --git a/components/settings/nfp-settings/index.js b/components/settings/nfp-settings/index.js index c4810bc..7d27698 100644 --- a/components/settings/nfp-settings/index.js +++ b/components/settings/nfp-settings/index.js @@ -6,6 +6,7 @@ import Hyperlink from 'react-native-hyperlink' import styles, { iconStyles } from '../../../styles' import labels from '../../../i18n/en/settings' import AppText from '../../app-text' +import SettingsSegment from '../settings-segment' import TempSlider from './temp-slider' import UseCervixSetting from './use-cervix' import Icon from 'react-native-vector-icons/Entypo' @@ -20,15 +21,14 @@ export default class Settings extends Component { render() { return ( - - - - {labels.tempScale.segmentTitle} - + + + + {labels.tempScale.segmentExplainer} - - + + {`${labels.preOvu.title} `} @@ -36,8 +36,8 @@ export default class Settings extends Component { {labels.preOvu.note} - + ) } -} +} \ No newline at end of file diff --git a/components/settings/nfp-settings/use-cervix.js b/components/settings/nfp-settings/use-cervix.js index ecfe5d3..2bb9ff9 100644 --- a/components/settings/nfp-settings/use-cervix.js +++ b/components/settings/nfp-settings/use-cervix.js @@ -1,7 +1,6 @@ import React, { Component } from 'react' import { View, - TouchableOpacity, Switch } from 'react-native' import AppText from '../../app-text' @@ -9,7 +8,6 @@ import { useCervixObservable, saveUseCervix } from '../../../local-storage' -import styles from '../../../styles/index' import labels from '../../../i18n/en/settings' export default class UseCervixSetting extends Component { @@ -20,29 +18,22 @@ export default class UseCervixSetting extends Component { render() { return ( - - - {labels.useCervix.title} - - - - {this.state.useCervix ? - {labels.useCervix.cervixModeOn} - : - {labels.useCervix.cervixModeOff} - } - - { - this.setState({ useCervix: bool }) - saveUseCervix(bool) - }} - /> + + + {this.state.useCervix ? + {labels.useCervix.cervixModeOn} + : + {labels.useCervix.cervixModeOff} + } - + { + this.setState({ useCervix: bool }) + saveUseCervix(bool) + }} + /> + ) } } diff --git a/components/settings/settings-segment.js b/components/settings/settings-segment.js index f29f7c5..208f1a6 100644 --- a/components/settings/settings-segment.js +++ b/components/settings/settings-segment.js @@ -9,15 +9,23 @@ const SettingsSegment = ({ children, ...props }) => { const style = [styles.settingsSegment, props.style] if (props.last) style.push(styles.settingsSegmentLast) return ( +<<<<<<< HEAD {props.title} +======= + + { + props.title + && {props.title} + } +>>>>>>> Refactor npf settings component {children} ) } SettingsSegment.propTypes = { - title: PropTypes.string.isRequired + title: PropTypes.string } export default SettingsSegment \ No newline at end of file From 0c081926b54c10e69060570c81d0076ff11e9038 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 22:16:55 +0100 Subject: [PATCH 06/10] Fixes warning due to incorrect import of labels --- lib/notifications.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/notifications.js b/lib/notifications.js index ded27c3..9836a37 100644 --- a/lib/notifications.js +++ b/lib/notifications.js @@ -2,7 +2,7 @@ import {tempReminderObservable, periodReminderObservable} from '../local-storage import Notification from 'react-native-push-notification' import { LocalDate } from 'js-joda' import Moment from 'moment' -import { settings as labels } from '../i18n/en/settings' +import labels from '../i18n/en/settings' import { getBleedingDaysSortedByDate } from '../db' import cycleModule from './cycle' import nothingChanged from '../db/db-unchanged' From 18c8432cc2297c41d9fe81231fc6ef798815b9ad Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 22:19:30 +0100 Subject: [PATCH 07/10] Minor refactoring of about page --- components/settings/about.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/components/settings/about.js b/components/settings/about.js index 6ee5451..4005afe 100644 --- a/components/settings/about.js +++ b/components/settings/about.js @@ -13,21 +13,21 @@ export default class AboutSection extends Component { - {`${labels.aboutSection.text} `} + {labels.aboutSection.text} {labels.philosophy.text} - {`${labels.credits.note}`} + {labels.credits.note} {links.website.url} - + {require('../../package.json').version} From 94940238a6a9dfd1e2a09b32a13880c7428a4ae1 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 22:20:10 +0100 Subject: [PATCH 08/10] Reuse of SettingsSegment component in the Reminders section --- components/settings/reminders/index.js | 11 ++- .../settings/reminders/period-reminder.js | 26 +++--- .../reminders/temp-reminder-picker.js | 87 +++++++++---------- 3 files changed, 62 insertions(+), 62 deletions(-) diff --git a/components/settings/reminders/index.js b/components/settings/reminders/index.js index ca234d1..e21a0dd 100644 --- a/components/settings/reminders/index.js +++ b/components/settings/reminders/index.js @@ -2,9 +2,12 @@ import React, { Component } from 'react' import { ScrollView, } from 'react-native' +import SettingsSegment from '../settings-segment' import TempReminderPicker from './temp-reminder-picker' import PeriodReminderPicker from './period-reminder' +import labels from '../../../i18n/en/settings' + export default class Settings extends Component { constructor(props) { super(props) @@ -14,8 +17,12 @@ export default class Settings extends Component { render() { return ( - - + + + + + + ) } diff --git a/components/settings/reminders/period-reminder.js b/components/settings/reminders/period-reminder.js index 3c07c10..f7e177c 100644 --- a/components/settings/reminders/period-reminder.js +++ b/components/settings/reminders/period-reminder.js @@ -8,7 +8,6 @@ import { periodReminderObservable, savePeriodReminder } from '../../../local-storage' -import styles from '../../../styles/index' import labels from '../../../i18n/en/settings' export default class PeriodReminderPicker extends Component { @@ -19,22 +18,17 @@ export default class PeriodReminderPicker extends Component { render() { return ( - - - {labels.periodReminder.title} - - - - {labels.periodReminder.reminderText} - - { - this.setState({ enabled: switchOn }) - savePeriodReminder({enabled: switchOn}) - }} - /> + + + {labels.periodReminder.reminderText} + { + this.setState({ enabled: switchOn }) + savePeriodReminder({enabled: switchOn}) + }} + /> ) } diff --git a/components/settings/reminders/temp-reminder-picker.js b/components/settings/reminders/temp-reminder-picker.js index 09dda42..a481d61 100644 --- a/components/settings/reminders/temp-reminder-picker.js +++ b/components/settings/reminders/temp-reminder-picker.js @@ -10,64 +10,63 @@ import { tempReminderObservable, saveTempReminder } from '../../../local-storage' -import styles from '../../../styles/index' import labels from '../../../i18n/en/settings' import padWithZeros from '../../helpers/pad-time-with-zeros' export default class TempReminderPicker extends Component { constructor(props) { super(props) - this.state = Object.assign({}, tempReminderObservable.value) + const { time, enabled } = tempReminderObservable.value + this.state = { + time, + enabled, + isTimePickerVisible: false + } } render() { return ( this.setState({ isTimePickerVisible: true })} > - - {labels.tempReminder.title} - - - - {this.state.time && this.state.enabled ? - {labels.tempReminder.timeSet(this.state.time)} - : - {labels.tempReminder.noTimeSet} - } - - { - this.setState({ enabled: switchOn }) - if (switchOn && !this.state.time) { - this.setState({ isTimePickerVisible: true }) - } - if (!switchOn) saveTempReminder({ enabled: false }) - }} - /> - { - const time = padWithZeros(jsDate) - this.setState({ - time, - isTimePickerVisible: false, - enabled: true - }) - saveTempReminder({ - time, - enabled: true - }) - }} - onCancel={() => { - this.setState({ isTimePickerVisible: false }) - if (!this.state.time) this.setState({enabled: false}) - }} - /> + + {this.state.time && this.state.enabled ? + {labels.tempReminder.timeSet(this.state.time)} + : + {labels.tempReminder.noTimeSet} + } + { + this.setState({ enabled: switchOn }) + if (switchOn && !this.state.time) { + this.setState({ isTimePickerVisible: true }) + } + if (!switchOn) saveTempReminder({ enabled: false }) + }} + /> + { + const time = padWithZeros(jsDate) + this.setState({ + time, + isTimePickerVisible: false, + enabled: true + }) + saveTempReminder({ + time, + enabled: true + }) + }} + onCancel={() => { + this.setState({ isTimePickerVisible: false }) + if (!this.state.time) this.setState({enabled: false}) + }} + /> ) } From bee05503725d063a2d902d5a0c32fbee0bfbd936 Mon Sep 17 00:00:00 2001 From: mashazyu Date: Mon, 7 Jan 2019 23:28:48 +0100 Subject: [PATCH 09/10] Move reusable components to separate folder, password view refactoring --- components/settings/about.js | 2 +- .../settings/{ => common}/alert-error.js | 2 +- .../settings/common/confirm-with-password.js | 6 +- .../{password => common}/password-field.js | 0 .../settings/{ => common}/settings-button.js | 4 +- .../settings/{ => common}/settings-segment.js | 4 +- .../settings/data-management/delete-data.js | 4 +- .../settings/data-management/export-dialog.js | 2 +- .../settings/data-management/import-dialog.js | 2 +- components/settings/data-management/index.js | 4 +- components/settings/nfp-settings/index.js | 2 +- .../settings/nfp-settings/temp-slider.js | 2 +- .../password/check-current-password.js | 23 -------- components/settings/password/create.js | 2 +- components/settings/password/delete.js | 2 +- .../settings/password/enter-new-password.js | 4 +- components/settings/password/index.js | 57 ++++++++----------- components/settings/password/update.js | 2 +- components/settings/reminders/index.js | 2 +- i18n/en/labels.js | 2 +- 20 files changed, 49 insertions(+), 79 deletions(-) rename components/settings/{ => common}/alert-error.js (65%) rename components/settings/{password => common}/password-field.js (100%) rename components/settings/{ => common}/settings-button.js (84%) rename components/settings/{ => common}/settings-segment.js (87%) delete mode 100644 components/settings/password/check-current-password.js diff --git a/components/settings/about.js b/components/settings/about.js index 4005afe..9ea0ea1 100644 --- a/components/settings/about.js +++ b/components/settings/about.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { ScrollView } from 'react-native' import Hyperlink from 'react-native-hyperlink' import AppText from '../app-text' -import SettingsSegment from './settings-segment' +import SettingsSegment from './common/settings-segment' import styles from '../../styles/index' import labels, { links } from '../../i18n/en/settings' import replace from '../helpers/replace-url-with-text' diff --git a/components/settings/alert-error.js b/components/settings/common/alert-error.js similarity index 65% rename from components/settings/alert-error.js rename to components/settings/common/alert-error.js index b4d447d..6d08d91 100644 --- a/components/settings/alert-error.js +++ b/components/settings/common/alert-error.js @@ -1,5 +1,5 @@ import { Alert } from 'react-native' -import { shared as sharedLabels } from '../../i18n/en/labels' +import { shared as sharedLabels } from '../../../i18n/en/labels' export default function alertError(msg) { Alert.alert(sharedLabels.errorTitle, msg) diff --git a/components/settings/common/confirm-with-password.js b/components/settings/common/confirm-with-password.js index fee296a..e7a48ee 100644 --- a/components/settings/common/confirm-with-password.js +++ b/components/settings/common/confirm-with-password.js @@ -4,8 +4,8 @@ import { View, Alert } from 'react-native' import nodejs from 'nodejs-mobile-react-native' import { requestHash, openDb } from '../../../db' -import PasswordField from '../password/password-field' -import SettingsButton from '../settings-button' +import PasswordField from './password-field' +import SettingsButton from '../common/settings-button' import settings from '../../../i18n/en/settings' import { shared } from '../../../i18n/en/labels' @@ -79,7 +79,7 @@ export default class ConfirmWithPassword extends Component { onPress={this.initPasswordCheck} disabled={!password} > - {settings.deleteSegment.title} + {shared.confirmToProceed} ) diff --git a/components/settings/password/password-field.js b/components/settings/common/password-field.js similarity index 100% rename from components/settings/password/password-field.js rename to components/settings/common/password-field.js diff --git a/components/settings/settings-button.js b/components/settings/common/settings-button.js similarity index 84% rename from components/settings/settings-button.js rename to components/settings/common/settings-button.js index bfa8983..97272bb 100644 --- a/components/settings/settings-button.js +++ b/components/settings/common/settings-button.js @@ -2,8 +2,8 @@ import React from 'react' import PropTypes from 'prop-types' import { TouchableOpacity } from 'react-native' -import AppText from '../app-text' -import styles from '../../styles' +import AppText from '../../app-text' +import styles from '../../../styles' const SettingsButton = ({ children, ...props }) => { return ( diff --git a/components/settings/settings-segment.js b/components/settings/common/settings-segment.js similarity index 87% rename from components/settings/settings-segment.js rename to components/settings/common/settings-segment.js index 208f1a6..e33fd13 100644 --- a/components/settings/settings-segment.js +++ b/components/settings/common/settings-segment.js @@ -2,8 +2,8 @@ import React from 'react' import PropTypes from 'prop-types' import { View } from 'react-native' -import AppText from '../app-text' -import styles from '../../styles' +import AppText from '../../app-text' +import styles from '../../../styles' const SettingsSegment = ({ children, ...props }) => { const style = [styles.settingsSegment, props.style] diff --git a/components/settings/data-management/delete-data.js b/components/settings/data-management/delete-data.js index 18fdb46..36af3ef 100644 --- a/components/settings/data-management/delete-data.js +++ b/components/settings/data-management/delete-data.js @@ -4,9 +4,9 @@ import { Alert, ToastAndroid } from 'react-native' import { clearDb, isDbEmpty } from '../../../db' import { hasEncryptionObservable } from '../../../local-storage' -import SettingsButton from '../settings-button' +import SettingsButton from '../common/settings-button' import ConfirmWithPassword from '../common/confirm-with-password' -import alertError from '../alert-error' +import alertError from '../common/alert-error' import settings from '../../../i18n/en/settings' import { shared as sharedLabels } from '../../../i18n/en/labels' diff --git a/components/settings/data-management/export-dialog.js b/components/settings/data-management/export-dialog.js index cfc5f5d..8200b68 100644 --- a/components/settings/data-management/export-dialog.js +++ b/components/settings/data-management/export-dialog.js @@ -2,7 +2,7 @@ import Share from 'react-native-share' import { getCycleDaysSortedByDate } from '../../../db' import getDataAsCsvDataUri from '../../../lib/import-export/export-to-csv' -import alertError from '../alert-error' +import alertError from '../common/alert-error' import settings from '../../../i18n/en/settings' import { EXPORT_FILE_NAME } from './constants' import RNFS from 'react-native-fs' diff --git a/components/settings/data-management/import-dialog.js b/components/settings/data-management/import-dialog.js index 2ff977e..e35204e 100644 --- a/components/settings/data-management/import-dialog.js +++ b/components/settings/data-management/import-dialog.js @@ -4,7 +4,7 @@ import rnfs from 'react-native-fs' import importCsv from '../../../lib/import-export/import-from-csv' import { shared as sharedLabels } from '../../../i18n/en/labels' import labels from '../../../i18n/en/settings' -import alertError from '../alert-error' +import alertError from '../common/alert-error' export default function openImportDialogAndImport() { Alert.alert( diff --git a/components/settings/data-management/index.js b/components/settings/data-management/index.js index 93887b8..1480aeb 100644 --- a/components/settings/data-management/index.js +++ b/components/settings/data-management/index.js @@ -1,8 +1,8 @@ import React from 'react' import { ScrollView } from 'react-native' import AppText from '../../app-text' -import SettingsSegment from '../settings-segment' -import SettingsButton from '../settings-button' +import SettingsSegment from '../common/settings-segment' +import SettingsButton from '../common/settings-button' import openImportDialogAndImport from './import-dialog' import openShareDialogAndExport from './export-dialog' import DeleteData from './delete-data' diff --git a/components/settings/nfp-settings/index.js b/components/settings/nfp-settings/index.js index 7d27698..98b27e0 100644 --- a/components/settings/nfp-settings/index.js +++ b/components/settings/nfp-settings/index.js @@ -6,7 +6,7 @@ import Hyperlink from 'react-native-hyperlink' import styles, { iconStyles } from '../../../styles' import labels from '../../../i18n/en/settings' import AppText from '../../app-text' -import SettingsSegment from '../settings-segment' +import SettingsSegment from '../common/settings-segment' import TempSlider from './temp-slider' import UseCervixSetting from './use-cervix' import Icon from 'react-native-vector-icons/Entypo' diff --git a/components/settings/nfp-settings/temp-slider.js b/components/settings/nfp-settings/temp-slider.js index 9dcdfb9..822a092 100644 --- a/components/settings/nfp-settings/temp-slider.js +++ b/components/settings/nfp-settings/temp-slider.js @@ -9,7 +9,7 @@ import { import { secondaryColor } from '../../../styles/index' import labels from '../../../i18n/en/settings' import config from '../../../config' -import alertError from '../alert-error' +import alertError from '../common/alert-error' export default class TempSlider extends Component { constructor(props) { diff --git a/components/settings/password/check-current-password.js b/components/settings/password/check-current-password.js deleted file mode 100644 index 92d78bf..0000000 --- a/components/settings/password/check-current-password.js +++ /dev/null @@ -1,23 +0,0 @@ -import { Alert } from 'react-native' -import { openDb } from '../../../db' -import { shared } from '../../../i18n/en/labels' - -export default async function checkPassword({hash, onCancel, onTryAgain }) { - try { - await openDb(hash) - return true - } catch (err) { - Alert.alert( - shared.incorrectPassword, - shared.incorrectPasswordMessage, - [{ - text: shared.cancel, - onPress: onCancel - }, { - text: shared.tryAgain, - onPress: onTryAgain - }] - ) - return false - } -} \ No newline at end of file diff --git a/components/settings/password/create.js b/components/settings/password/create.js index cdc9b69..44b08a0 100644 --- a/components/settings/password/create.js +++ b/components/settings/password/create.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { View } from 'react-native' import settings from '../../../i18n/en/settings' import EnterNewPassword from './enter-new-password' -import SettingsButton from '../settings-button' +import SettingsButton from '../common/settings-button' import showBackUpReminder from './show-backup-reminder' export default class CreatePassword extends Component { diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js index 016cae4..3792a04 100644 --- a/components/settings/password/delete.js +++ b/components/settings/password/delete.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import labels from '../../../i18n/en/settings' import { changeEncryptionAndRestartApp } from '../../../db' import ConfirmWithPassword from '../common/confirm-with-password' -import SettingsButton from '../settings-button' +import SettingsButton from '../common/settings-button' export default class DeletePassword extends Component { constructor() { diff --git a/components/settings/password/enter-new-password.js b/components/settings/password/enter-new-password.js index 084a6bc..2b0faa1 100644 --- a/components/settings/password/enter-new-password.js +++ b/components/settings/password/enter-new-password.js @@ -4,8 +4,8 @@ import nodejs from 'nodejs-mobile-react-native' import { requestHash, changeEncryptionAndRestartApp } from '../../../db' import AppText from '../../app-text' -import PasswordField from './password-field' -import SettingsButton from '../settings-button' +import PasswordField from '../common/password-field' +import SettingsButton from '../common/settings-button' import styles from '../../../styles' import settings from '../../../i18n/en/settings' diff --git a/components/settings/password/index.js b/components/settings/password/index.js index ccc2452..50e9f88 100644 --- a/components/settings/password/index.js +++ b/components/settings/password/index.js @@ -1,9 +1,9 @@ import React, { Component } from 'react' -import { View, ScrollView } from 'react-native' +import { ScrollView } from 'react-native' import CreatePassword from './create' import ChangePassword from './update' import DeletePassword from './delete' -import SettingsSegment from '../settings-segment' +import SettingsSegment from '../common/settings-segment' import AppText from '../../app-text' import { hasEncryptionObservable @@ -14,8 +14,7 @@ export default class PasswordSetting extends Component { constructor(props) { super(props) this.state = { - showUpdateAndDelete: hasEncryptionObservable.value, - showCreate: !hasEncryptionObservable.value, + isPasswordSet: hasEncryptionObservable.value, isChangingPassword: false, isDeletingPassword: false } @@ -32,43 +31,37 @@ export default class PasswordSetting extends Component { render() { const { - showUpdateAndDelete, + isPasswordSet, isChangingPassword, isDeletingPassword, - showCreate } = this.state + const { + title, + explainerEnabled, + explainerDisabled + } = labels.passwordSettings + return ( - + + + { isPasswordSet ? explainerEnabled : explainerDisabled } + - {showUpdateAndDelete ? - {labels.passwordSettings.explainerEnabled} - : - {labels.passwordSettings.explainerDisabled} - } + { !isPasswordSet && } - { - showUpdateAndDelete && ( - - {(isChangingPassword - || !isChangingPassword && !isDeletingPassword) - && } - {(isDeletingPassword - || !isChangingPassword && !isDeletingPassword) - && } - - ) - } - - {showCreate && - - } + { (isPasswordSet && !isDeletingPassword) && ( + + )} + { (isPasswordSet && !isChangingPassword) && ( + + )} ) diff --git a/components/settings/password/update.js b/components/settings/password/update.js index 81b2ba9..2dfc15f 100644 --- a/components/settings/password/update.js +++ b/components/settings/password/update.js @@ -1,7 +1,7 @@ import React, { Component } from 'react' import settings from '../../../i18n/en/settings' import EnterNewPassword from './enter-new-password' -import SettingsButton from '../settings-button' +import SettingsButton from '../common/settings-button' import showBackUpReminder from './show-backup-reminder' import ConfirmWithPassword from '../common/confirm-with-password' diff --git a/components/settings/reminders/index.js b/components/settings/reminders/index.js index e21a0dd..62ca7b8 100644 --- a/components/settings/reminders/index.js +++ b/components/settings/reminders/index.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { ScrollView, } from 'react-native' -import SettingsSegment from '../settings-segment' +import SettingsSegment from '../common/settings-segment' import TempReminderPicker from './temp-reminder-picker' import PeriodReminderPicker from './period-reminder' diff --git a/i18n/en/labels.js b/i18n/en/labels.js index 0f569aa..c4b952a 100644 --- a/i18n/en/labels.js +++ b/i18n/en/labels.js @@ -11,7 +11,7 @@ export const shared = { incorrectPasswordMessage: 'That password is incorrect.', tryAgain: 'Try again', ok: 'OK', - unlock: 'Unlock', + confirmToProceed: 'Confirm to proceed', date: 'Date', cycleDayWithLinebreak: 'Cycle\nday', loading: 'Loading ...', From 0feab0ed61ba953a80194f2432e1ddfc1e5e4716 Mon Sep 17 00:00:00 2001 From: Sofiya Tepikin Date: Wed, 9 Jan 2019 22:33:42 +0100 Subject: [PATCH 10/10] Renames common->shared component directory --- components/settings/about.js | 2 +- components/settings/data-management/delete-data.js | 6 +++--- components/settings/data-management/export-dialog.js | 2 +- components/settings/data-management/import-dialog.js | 2 +- components/settings/data-management/index.js | 6 +++--- components/settings/nfp-settings/index.js | 2 +- components/settings/nfp-settings/temp-slider.js | 2 +- components/settings/password/create.js | 2 +- components/settings/password/delete.js | 4 ++-- components/settings/password/enter-new-password.js | 4 ++-- components/settings/password/index.js | 2 +- components/settings/password/update.js | 4 ++-- components/settings/reminders/index.js | 2 +- components/settings/{common => shared}/alert-error.js | 0 .../settings/{common => shared}/confirm-with-password.js | 2 +- components/settings/{common => shared}/password-field.js | 0 components/settings/{common => shared}/settings-button.js | 0 components/settings/{common => shared}/settings-segment.js | 5 ----- 18 files changed, 21 insertions(+), 26 deletions(-) rename components/settings/{common => shared}/alert-error.js (100%) rename components/settings/{common => shared}/confirm-with-password.js (97%) rename components/settings/{common => shared}/password-field.js (100%) rename components/settings/{common => shared}/settings-button.js (100%) rename components/settings/{common => shared}/settings-segment.js (76%) diff --git a/components/settings/about.js b/components/settings/about.js index 9ea0ea1..9e33402 100644 --- a/components/settings/about.js +++ b/components/settings/about.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { ScrollView } from 'react-native' import Hyperlink from 'react-native-hyperlink' import AppText from '../app-text' -import SettingsSegment from './common/settings-segment' +import SettingsSegment from './shared/settings-segment' import styles from '../../styles/index' import labels, { links } from '../../i18n/en/settings' import replace from '../helpers/replace-url-with-text' diff --git a/components/settings/data-management/delete-data.js b/components/settings/data-management/delete-data.js index 36af3ef..581c881 100644 --- a/components/settings/data-management/delete-data.js +++ b/components/settings/data-management/delete-data.js @@ -4,9 +4,9 @@ import { Alert, ToastAndroid } from 'react-native' import { clearDb, isDbEmpty } from '../../../db' import { hasEncryptionObservable } from '../../../local-storage' -import SettingsButton from '../common/settings-button' -import ConfirmWithPassword from '../common/confirm-with-password' -import alertError from '../common/alert-error' +import SettingsButton from '../shared/settings-button' +import ConfirmWithPassword from '../shared/confirm-with-password' +import alertError from '../shared/alert-error' import settings from '../../../i18n/en/settings' import { shared as sharedLabels } from '../../../i18n/en/labels' diff --git a/components/settings/data-management/export-dialog.js b/components/settings/data-management/export-dialog.js index 8200b68..4b47c2c 100644 --- a/components/settings/data-management/export-dialog.js +++ b/components/settings/data-management/export-dialog.js @@ -2,7 +2,7 @@ import Share from 'react-native-share' import { getCycleDaysSortedByDate } from '../../../db' import getDataAsCsvDataUri from '../../../lib/import-export/export-to-csv' -import alertError from '../common/alert-error' +import alertError from '../shared/alert-error' import settings from '../../../i18n/en/settings' import { EXPORT_FILE_NAME } from './constants' import RNFS from 'react-native-fs' diff --git a/components/settings/data-management/import-dialog.js b/components/settings/data-management/import-dialog.js index e35204e..5971c4b 100644 --- a/components/settings/data-management/import-dialog.js +++ b/components/settings/data-management/import-dialog.js @@ -4,7 +4,7 @@ import rnfs from 'react-native-fs' import importCsv from '../../../lib/import-export/import-from-csv' import { shared as sharedLabels } from '../../../i18n/en/labels' import labels from '../../../i18n/en/settings' -import alertError from '../common/alert-error' +import alertError from '../shared/alert-error' export default function openImportDialogAndImport() { Alert.alert( diff --git a/components/settings/data-management/index.js b/components/settings/data-management/index.js index 1480aeb..43b4f48 100644 --- a/components/settings/data-management/index.js +++ b/components/settings/data-management/index.js @@ -1,8 +1,8 @@ import React from 'react' import { ScrollView } from 'react-native' import AppText from '../../app-text' -import SettingsSegment from '../common/settings-segment' -import SettingsButton from '../common/settings-button' +import SettingsSegment from '../shared/settings-segment' +import SettingsButton from '../shared/settings-button' import openImportDialogAndImport from './import-dialog' import openShareDialogAndExport from './export-dialog' import DeleteData from './delete-data' @@ -25,7 +25,7 @@ const DataManagement = () => { {labels.deleteSegment.explainer} diff --git a/components/settings/nfp-settings/index.js b/components/settings/nfp-settings/index.js index 98b27e0..a95c5de 100644 --- a/components/settings/nfp-settings/index.js +++ b/components/settings/nfp-settings/index.js @@ -6,7 +6,7 @@ import Hyperlink from 'react-native-hyperlink' import styles, { iconStyles } from '../../../styles' import labels from '../../../i18n/en/settings' import AppText from '../../app-text' -import SettingsSegment from '../common/settings-segment' +import SettingsSegment from '../shared/settings-segment' import TempSlider from './temp-slider' import UseCervixSetting from './use-cervix' import Icon from 'react-native-vector-icons/Entypo' diff --git a/components/settings/nfp-settings/temp-slider.js b/components/settings/nfp-settings/temp-slider.js index 822a092..ecccaf4 100644 --- a/components/settings/nfp-settings/temp-slider.js +++ b/components/settings/nfp-settings/temp-slider.js @@ -9,7 +9,7 @@ import { import { secondaryColor } from '../../../styles/index' import labels from '../../../i18n/en/settings' import config from '../../../config' -import alertError from '../common/alert-error' +import alertError from '../shared/alert-error' export default class TempSlider extends Component { constructor(props) { diff --git a/components/settings/password/create.js b/components/settings/password/create.js index 44b08a0..aaa021d 100644 --- a/components/settings/password/create.js +++ b/components/settings/password/create.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { View } from 'react-native' import settings from '../../../i18n/en/settings' import EnterNewPassword from './enter-new-password' -import SettingsButton from '../common/settings-button' +import SettingsButton from '../shared/settings-button' import showBackUpReminder from './show-backup-reminder' export default class CreatePassword extends Component { diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js index 3792a04..b6435a0 100644 --- a/components/settings/password/delete.js +++ b/components/settings/password/delete.js @@ -1,8 +1,8 @@ import React, { Component } from 'react' import labels from '../../../i18n/en/settings' import { changeEncryptionAndRestartApp } from '../../../db' -import ConfirmWithPassword from '../common/confirm-with-password' -import SettingsButton from '../common/settings-button' +import ConfirmWithPassword from '../shared/confirm-with-password' +import SettingsButton from '../shared/settings-button' export default class DeletePassword extends Component { constructor() { diff --git a/components/settings/password/enter-new-password.js b/components/settings/password/enter-new-password.js index 2b0faa1..cba3a11 100644 --- a/components/settings/password/enter-new-password.js +++ b/components/settings/password/enter-new-password.js @@ -4,8 +4,8 @@ import nodejs from 'nodejs-mobile-react-native' import { requestHash, changeEncryptionAndRestartApp } from '../../../db' import AppText from '../../app-text' -import PasswordField from '../common/password-field' -import SettingsButton from '../common/settings-button' +import PasswordField from '../shared/password-field' +import SettingsButton from '../shared/settings-button' import styles from '../../../styles' import settings from '../../../i18n/en/settings' diff --git a/components/settings/password/index.js b/components/settings/password/index.js index 50e9f88..d9caf4b 100644 --- a/components/settings/password/index.js +++ b/components/settings/password/index.js @@ -3,7 +3,7 @@ import { ScrollView } from 'react-native' import CreatePassword from './create' import ChangePassword from './update' import DeletePassword from './delete' -import SettingsSegment from '../common/settings-segment' +import SettingsSegment from '../shared/settings-segment' import AppText from '../../app-text' import { hasEncryptionObservable diff --git a/components/settings/password/update.js b/components/settings/password/update.js index 2dfc15f..e09433a 100644 --- a/components/settings/password/update.js +++ b/components/settings/password/update.js @@ -1,9 +1,9 @@ import React, { Component } from 'react' import settings from '../../../i18n/en/settings' import EnterNewPassword from './enter-new-password' -import SettingsButton from '../common/settings-button' +import SettingsButton from '../shared/settings-button' import showBackUpReminder from './show-backup-reminder' -import ConfirmWithPassword from '../common/confirm-with-password' +import ConfirmWithPassword from '../shared/confirm-with-password' export default class ChangePassword extends Component { diff --git a/components/settings/reminders/index.js b/components/settings/reminders/index.js index 62ca7b8..92fc461 100644 --- a/components/settings/reminders/index.js +++ b/components/settings/reminders/index.js @@ -2,7 +2,7 @@ import React, { Component } from 'react' import { ScrollView, } from 'react-native' -import SettingsSegment from '../common/settings-segment' +import SettingsSegment from '../shared/settings-segment' import TempReminderPicker from './temp-reminder-picker' import PeriodReminderPicker from './period-reminder' diff --git a/components/settings/common/alert-error.js b/components/settings/shared/alert-error.js similarity index 100% rename from components/settings/common/alert-error.js rename to components/settings/shared/alert-error.js diff --git a/components/settings/common/confirm-with-password.js b/components/settings/shared/confirm-with-password.js similarity index 97% rename from components/settings/common/confirm-with-password.js rename to components/settings/shared/confirm-with-password.js index e7a48ee..bacef7c 100644 --- a/components/settings/common/confirm-with-password.js +++ b/components/settings/shared/confirm-with-password.js @@ -5,7 +5,7 @@ import nodejs from 'nodejs-mobile-react-native' import { requestHash, openDb } from '../../../db' import PasswordField from './password-field' -import SettingsButton from '../common/settings-button' +import SettingsButton from '../shared/settings-button' import settings from '../../../i18n/en/settings' import { shared } from '../../../i18n/en/labels' diff --git a/components/settings/common/password-field.js b/components/settings/shared/password-field.js similarity index 100% rename from components/settings/common/password-field.js rename to components/settings/shared/password-field.js diff --git a/components/settings/common/settings-button.js b/components/settings/shared/settings-button.js similarity index 100% rename from components/settings/common/settings-button.js rename to components/settings/shared/settings-button.js diff --git a/components/settings/common/settings-segment.js b/components/settings/shared/settings-segment.js similarity index 76% rename from components/settings/common/settings-segment.js rename to components/settings/shared/settings-segment.js index e33fd13..8d73a77 100644 --- a/components/settings/common/settings-segment.js +++ b/components/settings/shared/settings-segment.js @@ -9,16 +9,11 @@ const SettingsSegment = ({ children, ...props }) => { const style = [styles.settingsSegment, props.style] if (props.last) style.push(styles.settingsSegmentLast) return ( -<<<<<<< HEAD - - {props.title} -======= { props.title && {props.title} } ->>>>>>> Refactor npf settings component {children} )