renames folder with labels, splits up the setting labels from rest
This commit is contained in:
+1
-1
@@ -9,7 +9,7 @@ import symptomViews from './cycle-day/symptoms'
|
|||||||
import Chart from './chart/chart'
|
import Chart from './chart/chart'
|
||||||
import Settings from './settings'
|
import Settings from './settings'
|
||||||
import Stats from './stats'
|
import Stats from './stats'
|
||||||
import {headerTitles, menuTitles} from '../copy/en/labels'
|
import {headerTitles, menuTitles} from '../i18n/en/labels'
|
||||||
import setupNotifications from '../lib/notifications'
|
import setupNotifications from '../lib/notifications'
|
||||||
|
|
||||||
// design wants everyhting lowercased, but we don't
|
// design wants everyhting lowercased, but we don't
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import styles from './styles'
|
|||||||
import { scaleObservable } from '../../local-storage'
|
import { scaleObservable } from '../../local-storage'
|
||||||
import config from '../../config'
|
import config from '../../config'
|
||||||
import AppText from '../app-text'
|
import AppText from '../app-text'
|
||||||
import { shared as labels } from '../../copy/en/labels'
|
import { shared as labels } from '../../i18n/en/labels'
|
||||||
import DripIcon from '../../assets/drip-icons'
|
import DripIcon from '../../assets/drip-icons'
|
||||||
import CycleDayIcon from '../../assets/home-circle'
|
import CycleDayIcon from '../../assets/home-circle'
|
||||||
import nothingChanged from '../../db/db-unchanged'
|
import nothingChanged from '../../db/db-unchanged'
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import Header from '../header'
|
|||||||
import { getCycleDay } from '../../db'
|
import { getCycleDay } from '../../db'
|
||||||
import cycleModule from '../../lib/cycle'
|
import cycleModule from '../../lib/cycle'
|
||||||
import styles from '../../styles'
|
import styles from '../../styles'
|
||||||
import * as labels from '../../copy/en/cycle-day'
|
import * as labels from '../../i18n/en/cycle-day'
|
||||||
import AppText from '../app-text'
|
import AppText from '../app-text'
|
||||||
import DripIcon from '../../assets/drip-icons'
|
import DripIcon from '../../assets/drip-icons'
|
||||||
|
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'
|
import Icon from 'react-native-vector-icons/MaterialCommunityIcons'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import styles, {iconStyles} from '../../../styles'
|
import styles, {iconStyles} from '../../../styles'
|
||||||
import {sharedDialogs as labels} from '../../../copy/en/cycle-day'
|
import {sharedDialogs as labels} from '../../../i18n/en/cycle-day'
|
||||||
|
|
||||||
export default class ActionButtonFooter extends Component {
|
export default class ActionButtonFooter extends Component {
|
||||||
render() {
|
render() {
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { bleeding as labels } from '../../../copy/en/cycle-day'
|
import { bleeding as labels } from '../../../i18n/en/cycle-day'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectTabGroup from '../select-tab-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { cervix as labels } from '../../../copy/en/cycle-day'
|
import { cervix as labels } from '../../../i18n/en/cycle-day'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectTabGroup from '../select-tab-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { intensity, desire } from '../../../copy/en/cycle-day'
|
import { intensity, desire } from '../../../i18n/en/cycle-day'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectTabGroup from '../select-tab-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { mucus as labels } from '../../../copy/en/cycle-day'
|
import { mucus as labels } from '../../../i18n/en/cycle-day'
|
||||||
import computeSensiplanValue from '../../../lib/sensiplan-mucus'
|
import computeSensiplanValue from '../../../lib/sensiplan-mucus'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectTabGroup from '../select-tab-group'
|
import SelectTabGroup from '../select-tab-group'
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import styles from '../../../styles'
|
|||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
import { noteExplainer } from '../../../copy/en/cycle-day'
|
import { noteExplainer } from '../../../i18n/en/cycle-day'
|
||||||
|
|
||||||
export default class Note extends Component {
|
export default class Note extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
View
|
View
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { pain as labels } from '../../../copy/en/cycle-day'
|
import { pain as labels } from '../../../i18n/en/cycle-day'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectBoxGroup from '../select-box-group'
|
import SelectBoxGroup from '../select-box-group'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { saveSymptom } from '../../../db'
|
import { saveSymptom } from '../../../db'
|
||||||
import { sex as sexLabels, contraceptives as cLabels } from '../../../copy/en/cycle-day'
|
import { sex as sexLabels, contraceptives as cLabels } from '../../../i18n/en/cycle-day'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import SelectBoxGroup from '../select-box-group'
|
import SelectBoxGroup from '../select-box-group'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
@@ -13,9 +13,9 @@ import padWithZeros from '../../helpers/pad-time-with-zeros'
|
|||||||
import { getPreviousTemperature, saveSymptom } from '../../../db'
|
import { getPreviousTemperature, saveSymptom } from '../../../db'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { LocalTime, ChronoUnit } from 'js-joda'
|
import { LocalTime, ChronoUnit } from 'js-joda'
|
||||||
import { temperature as labels } from '../../../copy/en/cycle-day'
|
import { temperature as labels } from '../../../i18n/en/cycle-day'
|
||||||
import { scaleObservable } from '../../../local-storage'
|
import { scaleObservable } from '../../../local-storage'
|
||||||
import { shared } from '../../../copy/en/labels'
|
import { shared } from '../../../i18n/en/labels'
|
||||||
import ActionButtonFooter from './action-button-footer'
|
import ActionButtonFooter from './action-button-footer'
|
||||||
import config from '../../../config'
|
import config from '../../../config'
|
||||||
import SymptomSection from './symptom-section'
|
import SymptomSection from './symptom-section'
|
||||||
|
|||||||
+1
-1
@@ -4,7 +4,7 @@ import { LocalDate, ChronoUnit } from 'js-joda'
|
|||||||
import Icon from 'react-native-vector-icons/Entypo'
|
import Icon from 'react-native-vector-icons/Entypo'
|
||||||
import { Surface } from 'react-native/Libraries/ART/ReactNativeART'
|
import { Surface } from 'react-native/Libraries/ART/ReactNativeART'
|
||||||
import { secondaryColor, cycleDayColor, periodColor } from '../styles'
|
import { secondaryColor, cycleDayColor, periodColor } from '../styles'
|
||||||
import { home as labels, bleedingPrediction as predictLabels, shared } from '../copy/en/labels'
|
import { home as labels, bleedingPrediction as predictLabels, shared } from '../i18n/en/labels'
|
||||||
import CycleDayIcon from '../assets/home-circle'
|
import CycleDayIcon from '../assets/home-circle'
|
||||||
import Drop from '../assets/home-drop'
|
import Drop from '../assets/home-drop'
|
||||||
import cycleModule from '../lib/cycle'
|
import cycleModule from '../lib/cycle'
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import nodejs from 'nodejs-mobile-react-native'
|
|||||||
import { saveEncryptionFlag } from '../local-storage'
|
import { saveEncryptionFlag } from '../local-storage'
|
||||||
import AppText from './app-text'
|
import AppText from './app-text'
|
||||||
import styles from '../styles'
|
import styles from '../styles'
|
||||||
import { passwordPrompt as labels, shared } from '../copy/en/labels'
|
import { passwordPrompt as labels, shared } from '../i18n/en/labels'
|
||||||
import { requestHash, deleteDbAndOpenNew, openDb } from '../db'
|
import { requestHash, deleteDbAndOpenNew, openDb } from '../db'
|
||||||
|
|
||||||
export default class PasswordPrompt extends Component {
|
export default class PasswordPrompt extends Component {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { Alert } from 'react-native'
|
import { Alert } from 'react-native'
|
||||||
import { shared as sharedLabels } from '../../copy/en/labels'
|
import { shared as sharedLabels } from '../../i18n/en/labels'
|
||||||
|
|
||||||
export default function alertError(msg) {
|
export default function alertError(msg) {
|
||||||
Alert.alert(sharedLabels.errorTitle, msg)
|
Alert.alert(sharedLabels.errorTitle, msg)
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import Share from 'react-native-share'
|
import Share from 'react-native-share'
|
||||||
import getDataAsCsvDataUri from '../../lib/import-export/export-to-csv'
|
import getDataAsCsvDataUri from '../../lib/import-export/export-to-csv'
|
||||||
import alertError from './alert-error'
|
import alertError from './alert-error'
|
||||||
import { settings as labels } from '../../copy/en/labels'
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
|
|
||||||
export default async function openShareDialogAndExport() {
|
export default async function openShareDialogAndExport() {
|
||||||
let data
|
let data
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ import { Alert } from 'react-native'
|
|||||||
import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker'
|
import { DocumentPicker, DocumentPickerUtil } from 'react-native-document-picker'
|
||||||
import rnfs from 'react-native-fs'
|
import rnfs from 'react-native-fs'
|
||||||
import importCsv from '../../lib/import-export/import-from-csv'
|
import importCsv from '../../lib/import-export/import-from-csv'
|
||||||
import { settings as labels, shared as sharedLabels } from '../../copy/en/labels'
|
import { shared as sharedLabels } from '../../i18n/en/labels'
|
||||||
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
import alertError from './alert-error'
|
import alertError from './alert-error'
|
||||||
|
|
||||||
export default function openImportDialogAndImport() {
|
export default function openImportDialogAndImport() {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import {
|
|||||||
ScrollView,
|
ScrollView,
|
||||||
} from 'react-native'
|
} from 'react-native'
|
||||||
import styles from '../../styles/index'
|
import styles from '../../styles/index'
|
||||||
import { settings as labels } from '../../copy/en/labels'
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
import AppText from '../app-text'
|
import AppText from '../app-text'
|
||||||
import TempReminderPicker from './temp-reminder-picker'
|
import TempReminderPicker from './temp-reminder-picker'
|
||||||
import PeriodReminderPicker from './period-reminder'
|
import PeriodReminderPicker from './period-reminder'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import { Alert } from 'react-native'
|
import { Alert } from 'react-native'
|
||||||
import { openDb } from '../../../db'
|
import { openDb } from '../../../db'
|
||||||
import { shared } from '../../../copy/en/labels'
|
import { shared } from '../../../i18n/en/labels'
|
||||||
|
|
||||||
export default async function checkPassword({hash, onCancel, onTryAgain }) {
|
export default async function checkPassword({hash, onCancel, onTryAgain }) {
|
||||||
const connected = await openDb(hash)
|
const connected = await openDb(hash)
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
import nodejs from 'nodejs-mobile-react-native'
|
import nodejs from 'nodejs-mobile-react-native'
|
||||||
import AppText from '../../app-text'
|
import AppText from '../../app-text'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { settings as labels } from '../../../copy/en/settings'
|
import { settings as labels } from '../../../i18n/en/settings'
|
||||||
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
||||||
import PasswordField from './password-field'
|
import PasswordField from './password-field'
|
||||||
import showBackUpReminder from './show-backup-reminder'
|
import showBackUpReminder from './show-backup-reminder'
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import {
|
|||||||
import nodejs from 'nodejs-mobile-react-native'
|
import nodejs from 'nodejs-mobile-react-native'
|
||||||
import AppText from '../../app-text'
|
import AppText from '../../app-text'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { settings as labels } from '../../../copy/en/settings'
|
import { settings as labels } from '../../../i18n/en/settings'
|
||||||
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
||||||
import PasswordField from './password-field'
|
import PasswordField from './password-field'
|
||||||
import showBackUpReminder from './show-backup-reminder'
|
import showBackUpReminder from './show-backup-reminder'
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ import {
|
|||||||
hasEncryptionObservable
|
hasEncryptionObservable
|
||||||
} from '../../../local-storage'
|
} from '../../../local-storage'
|
||||||
import styles from '../../../styles/index'
|
import styles from '../../../styles/index'
|
||||||
import { settings as labels } from '../../../copy/en/labels'
|
import { settings as labels } from '../../../i18n/en/settings'
|
||||||
|
|
||||||
export default class PasswordSetting extends Component {
|
export default class PasswordSetting extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import { Alert } from 'react-native'
|
import { Alert } from 'react-native'
|
||||||
import { settings as labels, shared } from '../../../copy/en/labels'
|
import { shared } from '../../../i18n/en/labels'
|
||||||
|
import { settings as labels } from '../../../i18n/en/settings'
|
||||||
|
|
||||||
export default function showBackUpReminder(okHandler, isDelete) {
|
export default function showBackUpReminder(okHandler, isDelete) {
|
||||||
let title, message
|
let title, message
|
||||||
|
|||||||
@@ -6,7 +6,8 @@ import {
|
|||||||
import nodejs from 'nodejs-mobile-react-native'
|
import nodejs from 'nodejs-mobile-react-native'
|
||||||
import AppText from '../../app-text'
|
import AppText from '../../app-text'
|
||||||
import styles from '../../../styles'
|
import styles from '../../../styles'
|
||||||
import { settings as labels, shared } from '../../../copy/en/labels'
|
import { shared } from '../../../i18n/en/labels'
|
||||||
|
import { settings as labels } from '../../../i18n/en/settings'
|
||||||
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
import { requestHash, changeEncryptionAndRestartApp } from '../../../db'
|
||||||
import PasswordField from './password-field'
|
import PasswordField from './password-field'
|
||||||
import showBackUpReminder from './show-backup-reminder'
|
import showBackUpReminder from './show-backup-reminder'
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ import {
|
|||||||
savePeriodReminder
|
savePeriodReminder
|
||||||
} from '../../local-storage'
|
} from '../../local-storage'
|
||||||
import styles from '../../styles/index'
|
import styles from '../../styles/index'
|
||||||
import { settings as labels } from '../../copy/en/labels'
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
|
|
||||||
export default class PeriodReminderPicker extends Component {
|
export default class PeriodReminderPicker extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
saveTempReminder
|
saveTempReminder
|
||||||
} from '../../local-storage'
|
} from '../../local-storage'
|
||||||
import styles from '../../styles/index'
|
import styles from '../../styles/index'
|
||||||
import { settings as labels } from '../../copy/en/labels'
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
import padWithZeros from '../helpers/pad-time-with-zeros'
|
import padWithZeros from '../helpers/pad-time-with-zeros'
|
||||||
|
|
||||||
export default class TempReminderPicker extends Component {
|
export default class TempReminderPicker extends Component {
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import {
|
|||||||
saveTempScale,
|
saveTempScale,
|
||||||
} from '../../local-storage'
|
} from '../../local-storage'
|
||||||
import { secondaryColor } from '../../styles/index'
|
import { secondaryColor } from '../../styles/index'
|
||||||
import { settings as labels } from '../../copy/en/labels'
|
import { settings as labels } from '../../i18n/en/settings'
|
||||||
import config from '../../config'
|
import config from '../../config'
|
||||||
import alertError from './alert-error'
|
import alertError from './alert-error'
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -7,7 +7,7 @@ import {
|
|||||||
import styles from '../styles/index'
|
import styles from '../styles/index'
|
||||||
import cycleModule from '../lib/cycle'
|
import cycleModule from '../lib/cycle'
|
||||||
import {getCycleLengthStats as getCycleInfo} from '../lib/cycle-length'
|
import {getCycleLengthStats as getCycleInfo} from '../lib/cycle-length'
|
||||||
import {stats as labels} from '../copy/en/labels'
|
import {stats as labels} from '../i18n/en/labels'
|
||||||
import AppText from './app-text'
|
import AppText from './app-text'
|
||||||
import { getCycleStartsSortedByDate } from '../db'
|
import { getCycleStartsSortedByDate } from '../db'
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,96 @@
|
|||||||
|
export const bleeding = ['spotting', 'light', 'medium', 'heavy']
|
||||||
|
export const mucusNFP = ['t', 'Ø', 'f', 'S', 'S+']
|
||||||
|
export const intensity = ['low', 'medium', 'high']
|
||||||
|
|
||||||
|
export const cervix = {
|
||||||
|
opening: {
|
||||||
|
categories: ['closed', 'medium', 'open'],
|
||||||
|
explainer: 'Is your cervix open or closed?'
|
||||||
|
},
|
||||||
|
firmness: {
|
||||||
|
categories: ['hard', 'soft'],
|
||||||
|
explainer: "When it's hard it might feel like the tip of your nose"
|
||||||
|
},
|
||||||
|
position: {
|
||||||
|
categories: ['low', 'medium', 'high'],
|
||||||
|
explainer: 'How high up in the vagina is the cervix?'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const mucus = {
|
||||||
|
feeling: {
|
||||||
|
categories: ['dry', 'nothing', 'wet', 'slippery'],
|
||||||
|
explainer: 'What does your vaginal entrance feel like?'
|
||||||
|
},
|
||||||
|
texture: {
|
||||||
|
categories: ['nothing', 'creamy', 'egg white'],
|
||||||
|
explainer: "Looking at and touching your cervical mucus, which describes it best?"
|
||||||
|
},
|
||||||
|
excludeExplainer: "You can exclude this value if you don't want to use it for fertility detection"
|
||||||
|
}
|
||||||
|
|
||||||
|
export const desire = {
|
||||||
|
header: 'Intensity',
|
||||||
|
explainer: 'How would you rate your sexual desire?'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const sex = {
|
||||||
|
categories:{
|
||||||
|
solo: 'Solo',
|
||||||
|
partner: 'Partner',
|
||||||
|
},
|
||||||
|
explainer: 'Were you sexually active today?',
|
||||||
|
}
|
||||||
|
|
||||||
|
export const contraceptives = {
|
||||||
|
categories:{
|
||||||
|
condom: 'Condom',
|
||||||
|
pill: 'Pill',
|
||||||
|
iud: 'IUD',
|
||||||
|
patch: 'Patch',
|
||||||
|
ring: 'Ring',
|
||||||
|
implant: 'Implant',
|
||||||
|
diaphragm: 'Diaphragm',
|
||||||
|
none: 'None',
|
||||||
|
other: 'Other',
|
||||||
|
},
|
||||||
|
explainer: 'Did you use contraceptives?'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const pain = {
|
||||||
|
categories: {
|
||||||
|
cramps: 'Cramps',
|
||||||
|
ovulationPain: 'Ovulation pain',
|
||||||
|
headache: 'Headache',
|
||||||
|
backache: 'Backache',
|
||||||
|
nausea: 'Nausea',
|
||||||
|
tenderBreasts: 'Tender breasts',
|
||||||
|
migraine: 'Migraine',
|
||||||
|
other: 'Other'
|
||||||
|
},
|
||||||
|
explainer: 'How did your body feel today?'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const temperature = {
|
||||||
|
outOfRangeWarning: 'This temperature value is out of the current range for the temperature chart. You can change the range in the settings.',
|
||||||
|
outOfAbsoluteRangeWarning: 'This temperature value is too high or low to be shown on the temperature chart.',
|
||||||
|
saveAnyway: 'Save anyway',
|
||||||
|
temperature: {
|
||||||
|
explainer: 'Take your temperature right after waking up, before getting out of bed'
|
||||||
|
},
|
||||||
|
note: {
|
||||||
|
explainer: 'Is there anything that could have influenced this value, such as bad sleep or alcohol consumption?'
|
||||||
|
},
|
||||||
|
excludeExplainer: "You can exclude this value if you don't want to use it for fertility detection"
|
||||||
|
}
|
||||||
|
|
||||||
|
export const noteExplainer = "Anything you want to add for the day?"
|
||||||
|
|
||||||
|
export const sharedDialogs = {
|
||||||
|
cancel: 'Cancel',
|
||||||
|
areYouSureTitle: 'Are you sure?',
|
||||||
|
areYouSureToUnset: 'Are you sure you want to unset all entered data?',
|
||||||
|
reallyUnsetData: 'Yes, I am sure',
|
||||||
|
save: 'Save',
|
||||||
|
unset: 'Unset'
|
||||||
|
}
|
||||||
@@ -0,0 +1,110 @@
|
|||||||
|
export const shared = {
|
||||||
|
cancel: 'Cancel',
|
||||||
|
save: 'Save',
|
||||||
|
errorTitle: 'Error',
|
||||||
|
successTitle: 'Success',
|
||||||
|
warning: 'Warning',
|
||||||
|
incorrectPassword: 'Password incorrect',
|
||||||
|
incorrectPasswordMessage: 'That password is incorrect.',
|
||||||
|
tryAgain: 'Try again',
|
||||||
|
ok: 'OK',
|
||||||
|
unlock: 'Unlock',
|
||||||
|
date: 'Date',
|
||||||
|
cycleDayWithLinebreak: 'Cycle\nday',
|
||||||
|
loading: 'Loading ...',
|
||||||
|
more: 'more',
|
||||||
|
less: 'less'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const headerTitles = {
|
||||||
|
Home: 'Home',
|
||||||
|
Calendar: 'Calendar',
|
||||||
|
Chart: 'Chart',
|
||||||
|
Stats: 'Statistics',
|
||||||
|
Settings: 'Settings',
|
||||||
|
BleedingEditView: 'Bleeding',
|
||||||
|
TemperatureEditView: 'Temperature',
|
||||||
|
MucusEditView: 'Mucus',
|
||||||
|
CervixEditView: 'Cervix',
|
||||||
|
NoteEditView: 'Note',
|
||||||
|
DesireEditView: 'Desire',
|
||||||
|
SexEditView: 'Sex',
|
||||||
|
PainEditView: 'Pain'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const menuTitles = {
|
||||||
|
Home: 'Home',
|
||||||
|
Calendar: 'Calendar',
|
||||||
|
Chart: 'Chart',
|
||||||
|
Stats: 'Stats',
|
||||||
|
Settings: 'Settings',
|
||||||
|
}
|
||||||
|
|
||||||
|
export const stats = {
|
||||||
|
cycleLengthTitle: 'Cycle length',
|
||||||
|
cycleLengthExplainer: 'Basic statistics about the length of your cycles.',
|
||||||
|
emptyStats: 'At least one completed cycle is needed to present you with stats here.',
|
||||||
|
//oneCycleStats: (number) => `You have documented one cycle of ${number} days.`,
|
||||||
|
oneCycleStats: 'You have documented one cycle of',
|
||||||
|
daysLabel: 'days',
|
||||||
|
//getBasisOfStats: (numberOfCycles) => `Stats are based on ${numberOfCycles} completed cycles.`,
|
||||||
|
basisOfStatsBeginning: 'Stats are based on',
|
||||||
|
basisOfStatsEnd: 'completed cycles.',
|
||||||
|
averageLabel: 'Average cycle length',
|
||||||
|
minLabel: 'Shortest cycle',
|
||||||
|
maxLabel: 'Longest cycle',
|
||||||
|
stdLabel: 'Standard deviation'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const bleedingPrediction = {
|
||||||
|
noPrediction: 'There is not enough period data to predict the next one.',
|
||||||
|
predictionInFuture: (startDays, endDays) => `Your next period is likely to start in ${startDays} to ${endDays} days.`,
|
||||||
|
predictionStartedXDaysLeft: (numberOfDays) => `Your period is likely to start today or during the next ${numberOfDays} days.`,
|
||||||
|
predictionStarted1DayLeft: 'Your period is likely to start today or tomorrow.',
|
||||||
|
predictionStartedNoDaysLeft: 'Your period is likely to start today.',
|
||||||
|
predictionInPast: (startDate, endDate) => `Based on your documented data, your period was likely to start between ${startDate} and ${endDate}.`
|
||||||
|
}
|
||||||
|
|
||||||
|
export const passwordPrompt = {
|
||||||
|
title: 'Unlock app',
|
||||||
|
enterPassword: 'Enter password here',
|
||||||
|
deleteDatabaseExplainer: "If you've forgotten your password, unfortunately, there is nothing we can do to recover your data, because it is encrypted with the password only you know. You can, however, delete all your encrypted data and start fresh. Once all data has been erased, you can set a new password in the settings, if you like.",
|
||||||
|
forgotPassword: 'Forgot your password?',
|
||||||
|
deleteDatabaseTitle: 'Forgot your password?',
|
||||||
|
deleteData: 'Yes, delete all my data',
|
||||||
|
areYouSureTitle: 'Are you sure?',
|
||||||
|
areYouSure: 'Are you absolutely sure you want to permanently delete all your data?',
|
||||||
|
reallyDeleteData: 'Yes, I am sure'
|
||||||
|
}
|
||||||
|
|
||||||
|
export const home = {
|
||||||
|
editToday: 'add data for today',
|
||||||
|
cycleDayNotEnoughInfo: "We don't have enough information to know what your current cycle day is.",
|
||||||
|
unknown: '?',
|
||||||
|
cycleDayKnown: d => `Your last period started ${getDaysDescriptor(d)}.`,
|
||||||
|
trackPeriod: 'track your period',
|
||||||
|
checkFertility: 'check your fertility',
|
||||||
|
phase: n => `${['1st', '2nd', '3rd'][n - 1]} cycle phase`
|
||||||
|
}
|
||||||
|
|
||||||
|
const getDaysDescriptor = cycleDayNumber => {
|
||||||
|
if (cycleDayNumber === 1) return 'today'
|
||||||
|
if (cycleDayNumber === 2) return 'yesterday'
|
||||||
|
return `${cycleDayNumber - 1} days ago`
|
||||||
|
}
|
||||||
|
|
||||||
|
export const fertilityStatus = {
|
||||||
|
fertile: 'fertile',
|
||||||
|
infertile: 'infertile',
|
||||||
|
fertileUntilEvening: 'Fertile phase ends in the evening',
|
||||||
|
unknown: 'We cannot show any cycle information because no period data has been added.',
|
||||||
|
preOvuText: "With NFP rules, you may assume 5 days of infertility at the beginning of your cycle, provided you don't observe any fertile mucus or cervix values.",
|
||||||
|
periOvuText: "We have not been able to detect both a temperature shift and mucus or cervix shift.",
|
||||||
|
postOvuText: tempRule => {
|
||||||
|
return (
|
||||||
|
'We have detected a temperature shift (' + ['regular', '1st exception', '2nd exception'][tempRule] +
|
||||||
|
' temperature rule), as well as a mucus shift according to NFP rules. You may assume infertility, but always remember to ' +
|
||||||
|
'double-check for yourself. Make sure the data makes sense to you.'
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,63 @@
|
|||||||
|
export const settings = {
|
||||||
|
export: {
|
||||||
|
errors: {
|
||||||
|
noData: 'There is no data to export',
|
||||||
|
couldNotConvert: 'Could not convert data to CSV',
|
||||||
|
problemSharing: 'There was a problem sharing the data export file'
|
||||||
|
},
|
||||||
|
title: 'My Drip data export',
|
||||||
|
subject: 'My Drip data export',
|
||||||
|
button: 'Export data',
|
||||||
|
segmentExplainer: 'Export data in CSV format for backup or so you can use it elsewhere'
|
||||||
|
},
|
||||||
|
import: {
|
||||||
|
button: 'Import data',
|
||||||
|
title: 'Keep existing data?',
|
||||||
|
message: `There are two options for the import:
|
||||||
|
1. Keep existing cycle days and replace only the ones in the import file.
|
||||||
|
2. Delete all existing cycle days and import cycle days from file.`,
|
||||||
|
replaceOption: 'Import and replace',
|
||||||
|
deleteOption: 'Import and delete existing',
|
||||||
|
errors: {
|
||||||
|
couldNotOpenFile: 'Could not open file',
|
||||||
|
postFix: 'No data was imported or changed'
|
||||||
|
},
|
||||||
|
success: {
|
||||||
|
message: 'Data successfully imported'
|
||||||
|
},
|
||||||
|
segmentExplainer: 'Import data in CSV format'
|
||||||
|
},
|
||||||
|
tempScale: {
|
||||||
|
segmentTitle: 'Temperature scale',
|
||||||
|
segmentExplainer: 'Change the minimum and maximum value for the temperature chart',
|
||||||
|
min: 'Min',
|
||||||
|
max: 'Max',
|
||||||
|
loadError: 'Could not load saved temperature scale settings',
|
||||||
|
saveError: 'Could not save temperature scale settings'
|
||||||
|
},
|
||||||
|
tempReminder: {
|
||||||
|
title: 'Temperature reminder',
|
||||||
|
noTimeSet: 'Set a time for a daily reminder to take your temperature',
|
||||||
|
timeSet: time => `Daily reminder set for ${time}`,
|
||||||
|
notification: 'Record your morning temperature'
|
||||||
|
},
|
||||||
|
periodReminder: {
|
||||||
|
title: 'Next period reminder',
|
||||||
|
reminderText: 'Get a notification 3 days before your next period is likely to start.',
|
||||||
|
notification: daysToEndOfPrediction => `Your next period is likely to start in 3 to ${daysToEndOfPrediction} days.`
|
||||||
|
},
|
||||||
|
passwordSettings: {
|
||||||
|
title: 'App password',
|
||||||
|
explainerDisabled: "Encrypt the app's database with a password. You need to enter the password every time the app is started.",
|
||||||
|
explainerEnabled: "Password protection and database encryption is currently enabled",
|
||||||
|
setPassword: 'Set password',
|
||||||
|
changePassword: 'Change password',
|
||||||
|
deletePassword: 'Delete password',
|
||||||
|
enterCurrent: "Please enter your current password",
|
||||||
|
enterNew: "Please enter a new password",
|
||||||
|
backupReminderTitle: 'Read this before making changes to your password',
|
||||||
|
backupReminder: 'Just to be safe, please backup your data using the export function before making changes to your password.\n\nLonger passwords are better! Consider using a passphrase.\n\nPlease also make sure you do not lose your password. There is no way to recover your data if you do.\n\nMaking any changes to your password setting will keep your data as it was before and restart the app.',
|
||||||
|
deleteBackupReminderTitle: 'Read this before deleting your password',
|
||||||
|
deleteBackupReminder: 'Deleting your password means your data will no longer be encrypted.\n\nJust to be safe, please backup your data using the export function before deleting your password.\n\nMaking any changes to your password setting will keep your data as it was before and restart the app.',
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@ import {tempReminderObservable, periodReminderObservable} from '../local-storage
|
|||||||
import Notification from 'react-native-push-notification'
|
import Notification from 'react-native-push-notification'
|
||||||
import { LocalDate } from 'js-joda'
|
import { LocalDate } from 'js-joda'
|
||||||
import Moment from 'moment'
|
import Moment from 'moment'
|
||||||
import { settings as labels } from '../copy/en/labels'
|
import { settings as labels } from '../i18n/en/settings'
|
||||||
import { getBleedingDaysSortedByDate } from '../db'
|
import { getBleedingDaysSortedByDate } from '../db'
|
||||||
import cycleModule from './cycle'
|
import cycleModule from './cycle'
|
||||||
import nothingChanged from '../db/db-unchanged'
|
import nothingChanged from '../db/db-unchanged'
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import getFertilityStatus from './sympto'
|
import getFertilityStatus from './sympto'
|
||||||
import cycleModule from './cycle'
|
import cycleModule from './cycle'
|
||||||
import { fertilityStatus } from '../copy/en/labels'
|
import { fertilityStatus } from '../i18n/en/labels'
|
||||||
|
|
||||||
export function getFertilityStatusForDay(dateString) {
|
export function getFertilityStatusForDay(dateString) {
|
||||||
const status = getCycleStatusForDay(dateString)
|
const status = getCycleStatusForDay(dateString)
|
||||||
|
|||||||
Reference in New Issue
Block a user