diff --git a/components/app.js b/components/app.js
index ce0eaf2..39318f3 100644
--- a/components/app.js
+++ b/components/app.js
@@ -7,7 +7,8 @@ import Calendar from './calendar'
import CycleDay from './cycle-day/cycle-day-overview'
import symptomViews from './cycle-day/symptoms'
import Chart from './chart/chart'
-import Settings from './settings'
+import SettingsMenu from './settings/settings-menu'
+import settingsViews from './settings'
import Stats from './stats'
import {headerTitles, menuTitles} from '../i18n/en/labels'
import setupNotifications from '../lib/notifications'
@@ -24,6 +25,7 @@ const menuTitlesLowerCase = Object.keys(menuTitles).reduce((acc, curr) => {
}, {})
const isSymptomView = name => Object.keys(symptomViews).includes(name)
+const isSettingsView = name => Object.keys(settingsViews).includes(name)
const isMenuItem = name => Object.keys(menuTitles).includes(name)
export default class App extends Component {
@@ -58,6 +60,8 @@ export default class App extends Component {
this.navigate(
this.originForSymptomView, { date: this.state.currentProps.date }
)
+ } else if (isSettingsView(this.state.currentPage)) {
+ this.navigate('SettingsMenu')
} else if(this.state.currentPage === 'CycleDay') {
this.navigate(this.menuOrigin)
} else {
@@ -68,7 +72,7 @@ export default class App extends Component {
render() {
const page = {
- Home, Calendar, CycleDay, Chart, Settings, Stats, ...symptomViews
+ Home, Calendar, CycleDay, Chart, SettingsMenu, ...settingsViews, Stats, ...symptomViews
}[this.state.currentPage]
return (
diff --git a/components/menu.js b/components/menu.js
index 4e80cbb..7a692e0 100644
--- a/components/menu.js
+++ b/components/menu.js
@@ -38,7 +38,7 @@ export default class Menu extends Component {
{ title: t.Calendar, icon: 'calendar-range', onPress: () => this.goTo('Calendar') },
{ title: t.Chart, icon: 'chart-line', onPress: () => this.goTo('Chart') },
{ title: t.Stats, icon: 'chart-pie', onPress: () => this.goTo('Stats') },
- { title: t.Settings, icon: 'settings', onPress: () => this.goTo('Settings') },
+ { title: t.Settings, icon: 'settings', onPress: () => this.goTo('SettingsMenu') },
].map(this.makeMenuItem)}
)
diff --git a/components/settings/about.js b/components/settings/about.js
index 85a7721..96d0b96 100644
--- a/components/settings/about.js
+++ b/components/settings/about.js
@@ -1,17 +1,17 @@
import React, { Component } from 'react'
-import {
- View
-} from 'react-native'
+import { View, ScrollView } from 'react-native'
import AppText from '../app-text'
import styles from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
+import labels from '../../i18n/en/settings'
export default class AboutSection extends Component {
render() {
return (
-
- {`${labels.aboutSection.title} `}
- {`${labels.aboutSection.segmentExplainer} `}
-
+
+
+ {`${labels.aboutSection.title} `}
+ {`${labels.aboutSection.segmentExplainer} `}
+
+
)
}
}
diff --git a/components/settings/export-dialog.js b/components/settings/import-export/export-dialog.js
similarity index 80%
rename from components/settings/export-dialog.js
rename to components/settings/import-export/export-dialog.js
index 97db9d3..58301cf 100644
--- a/components/settings/export-dialog.js
+++ b/components/settings/import-export/export-dialog.js
@@ -1,9 +1,9 @@
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 { settings } from '../../i18n/en/settings'
+import { getCycleDaysSortedByDate } from '../../../db'
+import getDataAsCsvDataUri from '../../../lib/import-export/export-to-csv'
+import alertError from '../alert-error'
+import settings from '../../../i18n/en/settings'
import RNFS from 'react-native-fs'
export default async function exportData() {
diff --git a/components/settings/import-dialog.js b/components/settings/import-export/import-dialog.js
similarity index 86%
rename from components/settings/import-dialog.js
rename to components/settings/import-export/import-dialog.js
index 5701b08..2ff977e 100644
--- a/components/settings/import-dialog.js
+++ b/components/settings/import-export/import-dialog.js
@@ -1,10 +1,10 @@
import { Alert } from 'react-native'
import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker'
import rnfs from 'react-native-fs'
-import importCsv from '../../lib/import-export/import-from-csv'
-import { shared as sharedLabels } from '../../i18n/en/labels'
-import { settings as labels } from '../../i18n/en/settings'
-import alertError from './alert-error'
+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'
export default function openImportDialogAndImport() {
Alert.alert(
diff --git a/components/settings/import-export/index.js b/components/settings/import-export/index.js
new file mode 100644
index 0000000..430f29b
--- /dev/null
+++ b/components/settings/import-export/index.js
@@ -0,0 +1,50 @@
+import React, { Component } from 'react'
+import {
+ View, ScrollView,
+ TouchableOpacity,
+} from 'react-native'
+import styles from '../../../styles/index'
+import labels from '../../../i18n/en/settings'
+import AppText from '../../app-text'
+import openImportDialogAndImport from './import-dialog'
+import openShareDialogAndExport from './export-dialog'
+
+export default class Settings extends Component {
+ constructor(props) {
+ super(props)
+ this.state = {}
+ }
+
+ render() {
+ return (
+
+
+
+ {labels.export.button}
+
+ {labels.export.segmentExplainer}
+
+
+ {labels.export.button}
+
+
+
+
+
+ {labels.import.button}
+
+ {labels.import.segmentExplainer}
+
+
+ {labels.import.button}
+
+
+
+
+ )
+ }
+}
diff --git a/components/settings/index.js b/components/settings/index.js
index 8091867..a1eaa03 100644
--- a/components/settings/index.js
+++ b/components/settings/index.js
@@ -1,69 +1,9 @@
-import React, { Component } from 'react'
-import {
- View,
- TouchableOpacity,
- ScrollView,
-} from 'react-native'
-import styles from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
-import AppText from '../app-text'
-import TempReminderPicker from './temp-reminder-picker'
-import PeriodReminderPicker from './period-reminder'
-import TempSlider from './temp-slider'
-import AboutSection from './about'
-import openImportDialogAndImport from './import-dialog'
-import openShareDialogAndExport from './export-dialog'
-import PasswordSetting from './password'
-import UseCervixSetting from './use-cervix'
+import Reminders from './reminders'
+import NfpSettings from './nfp-settings'
+import ImportExport from './import-export'
+import Password from './password'
+import About from './about'
-export default class Settings extends Component {
- constructor(props) {
- super(props)
- this.state = {}
- }
-
- render() {
- return (
-
-
-
-
-
- {labels.tempScale.segmentTitle}
-
- {labels.tempScale.segmentExplainer}
-
-
-
-
-
-
- {labels.export.button}
-
- {labels.export.segmentExplainer}
-
-
- {labels.export.button}
-
-
-
-
-
- {labels.import.button}
-
- {labels.import.segmentExplainer}
-
-
- {labels.import.button}
-
-
-
-
-
- )
- }
+export default {
+ Reminders, NfpSettings, ImportExport, Password, About
}
diff --git a/components/settings/nfp-settings/index.js b/components/settings/nfp-settings/index.js
new file mode 100644
index 0000000..bac516c
--- /dev/null
+++ b/components/settings/nfp-settings/index.js
@@ -0,0 +1,31 @@
+import React, { Component } from 'react'
+import {
+ ScrollView, View
+} from 'react-native'
+import styles from '../../../styles'
+import labels from '../../../i18n/en/settings'
+import AppText from '../../app-text'
+import TempSlider from './temp-slider'
+import UseCervixSetting from './use-cervix'
+
+export default class Settings extends Component {
+ constructor(props) {
+ super(props)
+ this.state = {}
+ }
+
+ render() {
+ return (
+
+
+
+
+ {labels.tempScale.segmentTitle}
+
+ {labels.tempScale.segmentExplainer}
+
+
+
+ )
+ }
+}
diff --git a/components/settings/temp-slider.js b/components/settings/nfp-settings/temp-slider.js
similarity index 86%
rename from components/settings/temp-slider.js
rename to components/settings/nfp-settings/temp-slider.js
index 7052299..9dcdfb9 100644
--- a/components/settings/temp-slider.js
+++ b/components/settings/nfp-settings/temp-slider.js
@@ -1,15 +1,15 @@
import React, { Component } from 'react'
import { View } from 'react-native'
import Slider from '@ptomasroos/react-native-multi-slider'
-import AppText from '../app-text'
+import AppText from '../../app-text'
import {
scaleObservable,
saveTempScale,
-} from '../../local-storage'
-import { secondaryColor } from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
-import config from '../../config'
-import alertError from './alert-error'
+} from '../../../local-storage'
+import { secondaryColor } from '../../../styles/index'
+import labels from '../../../i18n/en/settings'
+import config from '../../../config'
+import alertError from '../alert-error'
export default class TempSlider extends Component {
constructor(props) {
diff --git a/components/settings/use-cervix.js b/components/settings/nfp-settings/use-cervix.js
similarity index 87%
rename from components/settings/use-cervix.js
rename to components/settings/nfp-settings/use-cervix.js
index 668a0e8..ecfe5d3 100644
--- a/components/settings/use-cervix.js
+++ b/components/settings/nfp-settings/use-cervix.js
@@ -4,13 +4,13 @@ import {
TouchableOpacity,
Switch
} from 'react-native'
-import AppText from '../app-text'
+import AppText from '../../app-text'
import {
useCervixObservable,
saveUseCervix
-} from '../../local-storage'
-import styles from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
+} from '../../../local-storage'
+import styles from '../../../styles/index'
+import labels from '../../../i18n/en/settings'
export default class UseCervixSetting extends Component {
constructor() {
diff --git a/components/settings/password/create.js b/components/settings/password/create.js
index 011bbd7..bda688f 100644
--- a/components/settings/password/create.js
+++ b/components/settings/password/create.js
@@ -1,6 +1,6 @@
import React, { Component } from 'react'
import { View } from 'react-native'
-import { settings } from '../../../i18n/en/settings'
+import settings from '../../../i18n/en/settings'
import EnterNewPassword from './enter-new-password'
import SettingsButton from './settings-button'
import showBackUpReminder from './show-backup-reminder'
diff --git a/components/settings/password/delete.js b/components/settings/password/delete.js
index d75f2de..6cef844 100644
--- a/components/settings/password/delete.js
+++ b/components/settings/password/delete.js
@@ -6,7 +6,7 @@ import {
import nodejs from 'nodejs-mobile-react-native'
import AppText from '../../app-text'
import styles from '../../../styles'
-import { settings as labels } from '../../../i18n/en/settings'
+import labels from '../../../i18n/en/settings'
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
import PasswordField from './password-field'
import showBackUpReminder from './show-backup-reminder'
diff --git a/components/settings/password/enter-new-password.js b/components/settings/password/enter-new-password.js
index a63556b..ed09ead 100644
--- a/components/settings/password/enter-new-password.js
+++ b/components/settings/password/enter-new-password.js
@@ -8,7 +8,7 @@ import PasswordField from './password-field'
import SettingsButton from './settings-button'
import styles from '../../../styles'
-import { settings } from '../../../i18n/en/settings'
+import settings from '../../../i18n/en/settings'
const LISTENER_TYPE = 'create-or-change-pw'
diff --git a/components/settings/password/index.js b/components/settings/password/index.js
index 47e4848..f5741e3 100644
--- a/components/settings/password/index.js
+++ b/components/settings/password/index.js
@@ -1,5 +1,5 @@
import React, { Component } from 'react'
-import { View } from 'react-native'
+import { View, ScrollView } from 'react-native'
import CreatePassword from './create'
import ChangePassword from './update'
import DeletePassword from './delete'
@@ -8,7 +8,7 @@ import {
hasEncryptionObservable
} from '../../../local-storage'
import styles from '../../../styles/index'
-import { settings as labels } from '../../../i18n/en/settings'
+import labels from '../../../i18n/en/settings'
export default class PasswordSetting extends Component {
constructor(props) {
@@ -21,30 +21,32 @@ export default class PasswordSetting extends Component {
render() {
return (
-
+
+
-
- {labels.passwordSettings.title}
-
+
+ {labels.passwordSettings.title}
+
- {this.state.showUpdateAndDelete ?
- {labels.passwordSettings.explainerEnabled}
- :
- {labels.passwordSettings.explainerDisabled}
- }
+ {this.state.showUpdateAndDelete ?
+ {labels.passwordSettings.explainerEnabled}
+ :
+ {labels.passwordSettings.explainerDisabled}
+ }
- {this.state.showUpdateAndDelete &&
+ {this.state.showUpdateAndDelete &&
- }
+ }
- {this.state.showCreate &&
+ {this.state.showCreate &&
- }
+ }
-
+
+
)
}
}
\ No newline at end of file
diff --git a/components/settings/password/show-backup-reminder.js b/components/settings/password/show-backup-reminder.js
index 708b81c..f61e5a4 100644
--- a/components/settings/password/show-backup-reminder.js
+++ b/components/settings/password/show-backup-reminder.js
@@ -1,6 +1,6 @@
import { Alert } from 'react-native'
import { shared } from '../../../i18n/en/labels'
-import { settings as labels } from '../../../i18n/en/settings'
+import labels from '../../../i18n/en/settings'
export default function showBackUpReminder(okHandler, isDelete) {
let title, message
diff --git a/components/settings/password/update.js b/components/settings/password/update.js
index 33cddbd..a246c0e 100644
--- a/components/settings/password/update.js
+++ b/components/settings/password/update.js
@@ -2,7 +2,7 @@ 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 settings from '../../../i18n/en/settings'
import { requestHash } from '../../../db'
import EnterNewPassword from './enter-new-password'
import PasswordField from './password-field'
diff --git a/components/settings/reminders/index.js b/components/settings/reminders/index.js
new file mode 100644
index 0000000..ca234d1
--- /dev/null
+++ b/components/settings/reminders/index.js
@@ -0,0 +1,22 @@
+import React, { Component } from 'react'
+import {
+ ScrollView,
+} from 'react-native'
+import TempReminderPicker from './temp-reminder-picker'
+import PeriodReminderPicker from './period-reminder'
+
+export default class Settings extends Component {
+ constructor(props) {
+ super(props)
+ this.state = {}
+ }
+
+ render() {
+ return (
+
+
+
+
+ )
+ }
+}
diff --git a/components/settings/period-reminder.js b/components/settings/reminders/period-reminder.js
similarity index 85%
rename from components/settings/period-reminder.js
rename to components/settings/reminders/period-reminder.js
index 1bc41cb..3c07c10 100644
--- a/components/settings/period-reminder.js
+++ b/components/settings/reminders/period-reminder.js
@@ -3,13 +3,13 @@ import {
View,
Switch
} from 'react-native'
-import AppText from '../app-text'
+import AppText from '../../app-text'
import {
periodReminderObservable,
savePeriodReminder
-} from '../../local-storage'
-import styles from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
+} from '../../../local-storage'
+import styles from '../../../styles/index'
+import labels from '../../../i18n/en/settings'
export default class PeriodReminderPicker extends Component {
constructor(props) {
diff --git a/components/settings/temp-reminder-picker.js b/components/settings/reminders/temp-reminder-picker.js
similarity index 90%
rename from components/settings/temp-reminder-picker.js
rename to components/settings/reminders/temp-reminder-picker.js
index 48a7611..09dda42 100644
--- a/components/settings/temp-reminder-picker.js
+++ b/components/settings/reminders/temp-reminder-picker.js
@@ -5,14 +5,14 @@ import {
Switch
} from 'react-native'
import DateTimePicker from 'react-native-modal-datetime-picker-nevo'
-import AppText from '../app-text'
+import AppText from '../../app-text'
import {
tempReminderObservable,
saveTempReminder
-} from '../../local-storage'
-import styles from '../../styles/index'
-import { settings as labels } from '../../i18n/en/settings'
-import padWithZeros from '../helpers/pad-time-with-zeros'
+} 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) {
diff --git a/components/settings/settings-menu.js b/components/settings/settings-menu.js
new file mode 100644
index 0000000..4152c11
--- /dev/null
+++ b/components/settings/settings-menu.js
@@ -0,0 +1,40 @@
+import React from 'react'
+import {
+ TouchableOpacity,
+ ScrollView,
+} from 'react-native'
+import styles from '../../styles/index'
+import settingsLabels from '../../i18n/en/settings'
+import AppText from '../app-text'
+
+console.log(settingsLabels.menuTitles)
+const labels = settingsLabels.menuTitles
+console.log(settingsLabels.menuTitles)
+
+const menu = [
+ {title: labels.reminders, component: 'Reminders'},
+ {title: labels.nfpSettings, component: 'NfpSettings'},
+ {title: labels.importExport, component: 'ImportExport'},
+ {title: labels.password, component: 'Password'},
+ {title: labels.about, component: 'About'}
+]
+
+export default function SettingsMenu(props) {
+ return (
+
+ { menu.map(menuItem)}
+
+ )
+
+ function menuItem(item) {
+ return (
+ props.navigate(item.component)}
+ >
+ {item.title}
+
+ )
+ }
+}
\ No newline at end of file
diff --git a/i18n/en/labels.js b/i18n/en/labels.js
index 059e2c0..743f4c1 100644
--- a/i18n/en/labels.js
+++ b/i18n/en/labels.js
@@ -1,3 +1,6 @@
+import labels from './settings'
+const settingsTitles = labels.menuTitles
+
export const shared = {
cancel: 'Cancel',
save: 'Save',
@@ -21,7 +24,12 @@ export const headerTitles = {
Calendar: 'Calendar',
Chart: 'Chart',
Stats: 'Statistics',
- Settings: 'Settings',
+ SettingsMenu: 'Settings',
+ Reminders: settingsTitles.reminders,
+ NfpSettings: settingsTitles.nfpSettings,
+ ImportExport: settingsTitles.importExport,
+ Password: settingsTitles.password,
+ About: settingsTitles.about,
BleedingEditView: 'Bleeding',
TemperatureEditView: 'Temperature',
MucusEditView: 'Mucus',
diff --git a/i18n/en/settings.js b/i18n/en/settings.js
index cc30955..d230cf0 100644
--- a/i18n/en/settings.js
+++ b/i18n/en/settings.js
@@ -1,4 +1,11 @@
-export const settings = {
+export default {
+ menuTitles: {
+ reminders: 'Reminders',
+ importExport: 'Import and Export',
+ nfpSettings: 'NFP settings',
+ password: 'Password',
+ about: 'About'
+ },
export: {
errors: {
noData: 'There is no data to export',