Compare commits

...

29 Commits

Author SHA1 Message Date
bl00dymarie 0f375530c8 Merge branch 'Chore/Release-v1.2311.14-versionCode25' into 'release'
Release: v1.2311.14

See merge request bloodyhealth/drip!629
2023-11-16 15:49:19 +00:00
bl00dymarie 5401789c46 Release: v1.2311.14 2023-11-14 13:08:11 +01:00
bl00dymarie f6944328fb Fix: Middle chart legend improved;
Row height halfed, elements aligned, fontsize partially decreased
2023-11-14 13:06:58 +01:00
bl00dymarie f730b617cb Remove no-unused-var error 2023-11-13 17:00:02 +01:00
Liv 668faf2534 Clean up backgroundColor variable 2023-11-13 17:00:02 +01:00
livi f304fee293 Highlight weekend dates in chart 2023-11-13 17:00:02 +01:00
bl00dymarie 54b08c15bb Merge branch '656-chore-write-changelog-and-release-notes-1' into 'release'
Add Changelog for Release v1.2311.10

See merge request bloodyhealth/drip!628
2023-11-13 11:50:52 +00:00
bl00dymarie 6d51826dd6 Add Changelog for Release v1.2311.10 2023-11-13 12:22:21 +01:00
tintenfisch 5ff680a591 Merge branch '653-bug-grid-labels-for-temperature-chart-cut-out' into 'release'
fix: changes to the temperature chart

See merge request bloodyhealth/drip!626
2023-11-10 16:50:25 +00:00
tintenfisch 2cda2c38e9 fix: changes to the temperature chart 2023-11-10 16:50:25 +00:00
tintenfisch b638a5bd08 Merge branch '372-ui-bug-import-pop-up' into 'release'
fix: change to data import dialog

See merge request bloodyhealth/drip!625
2023-11-10 12:25:46 +00:00
wunderfisch 32cec10a79 change to data import dialog. first have replace option, second delete. like this synchronous to text above. 2023-11-10 12:30:17 +01:00
bl00dymarie 2eca9ba097 Merge branch 'fix/Update-android-1.2310.31-versionNumber21' into 'release'
Fix: Update android to v1.2310.31 for testing

See merge request bloodyhealth/drip!619
2023-11-09 11:10:35 +00:00
bl00dymarie 573de7545e Merge branch 'chore/edit-merge-request-template-to-close-issues' into 'main'
Edit merge request template to close issues automatically

See merge request bloodyhealth/drip!578
2023-11-07 10:04:44 +00:00
bl00dymarie d81dbac60c Chore: Update versionName 1.2310.31, versionCode 21 and cl tool 2023-10-31 13:05:09 +01:00
bl00dymarie 40fb65ca88 Chore: Target Android 13 and Sdk33 2023-10-31 12:53:01 +01:00
bl00dymarie ed7a5a341b Updates jetifier; converts support libraries of all dependencies to AndroidX 2023-10-31 12:37:15 +01:00
tintenfisch ca3cf16ff7 Merge branch 'chore/templates-for-issue-feature-chore' into 'main'
3 templates for issues

See merge request bloodyhealth/drip!616
2023-10-27 15:40:56 +00:00
bl00dymarie fdbfef38f9 Chore: Add permission request for notifications;
- required on Android 13
2023-10-26 16:44:35 +02:00
bl00dymarie 5c13e91fb3 Chore: Update notifications for Android;
- Use new updated fork of react-native-push-notification without google
- Create channel for PushNotifications
- Adapt AndroidManifest.xml
2023-10-26 16:44:35 +02:00
bl00dymarie 2b235f4d10 Address Google Play 64-bit error;
release isn't compliant with Google Play 64-bit requirement error
2023-10-26 16:43:44 +02:00
bl00dymarie bcc7eaada9 Fix hint display on chart 2023-10-26 16:43:44 +02:00
bl00dymarie 714021465e lowercase symptom names as before 2023-10-26 16:43:44 +02:00
Sofiya Tepikin c3e4fd3f03 Revert json conversion 2023-10-26 16:43:44 +02:00
bl00dymarie e7f76bad33 implement feedback suggestions 2023-10-20 11:20:38 +02:00
wunderfisch 9537e377e0 first draft for possible templates to get certain information when writing issues. 2023-10-20 11:20:38 +02:00
Sofiya Tepikin f11eb3d1a1 Merge branch 'fix/outdated-snapshot' into 'main'
Fix outdated snapshot

See merge request bloodyhealth/drip!593
2023-01-19 09:31:57 +00:00
Sofiya Tepikin 5f83464649 Fix outdated snapshot 2023-01-19 10:23:48 +01:00
Lisa Hillebrand 1907a78dbf Edit merge request template to close issues automatically 2022-11-06 16:20:03 +01:00
28 changed files with 2504 additions and 3144 deletions
+26
View File
@@ -0,0 +1,26 @@
## oh no a bug 🐛
### Description what has happened
Short overview how the bug manifests.
### which OS + version is your device
[ ] Android _number_
[ ] iOS _number_
### which drip version number are you using
_On your phone go to ➞ menu on the top right ➞ about, scroll to the very bottom and find the version number_
### how did it happen
_what triggered the bug/behavior, always/sometimes, is it reproducible(how)?_
### describe how it looks or add screenshot
feel free to attach a file 📎
### any idea to solve it
💡
+22
View File
@@ -0,0 +1,22 @@
## This has to be done 🪠
### Description what has to be done
Short overview
### is it urgent? ⏳
[ ] Yes
[ ] No
[ ] something in between
_Explain the urgency if possible, e.g. is it a security vulnerability for potentially everyone?_
### which OS
[ ] Android
[ ] iOS
### what shall be the ideal outcome 🎆
_You can e.g. specify here the version number for a library update_
@@ -0,0 +1,19 @@
## Yeah a feature idea 🧩
### what should this feature do or solve? 🪄
Please give a short overview so as many people as possible would be able to understand.
### what is particularly important to the people who would use this feature?
Do you have certain user groups in mind?
### Any idea where it shall be placed in the app?
### is it connected with or dependent on some other feature?
### any idea how it shall look (sketch?)
feel free to attach a file 📎
### what could be difficulties (with other components) 🪆
+1 -1
View File
@@ -1,6 +1,6 @@
## Why this change? ## Why this change?
Closes ticket # Closes #
## Description ## Description
+70 -2
View File
@@ -2,12 +2,80 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## v1.2311.14
### Changes
- Make the app compatible with Android 13
- Update Android's targetSdkVersion to 33
- Update buildToolsVersion to 33.0.2
- Update Android Gradle plugin to 7.0.3
- Update Gradle to 7.3.3
- Update kotlinVersion to 1.3.40
- Chart: Improved readability
- Finer temperature lines and dots
- Enlarge screen space for temperature chart
- A very light grey background color for weekend days on the whole chart screen
- Reminders:
- Use new fork of react-native-push-notification: <https://github.com/github:bl00dymarie/react-native-push-notification> without google services
- Adding channels after breaking changes in react-native-push-notification
- Homescreen: date displayed in new format
- Minor changes in "about" section
- Updated dependencies:
- moment ^2.29.4,
- prop-types ^15.8.1,
- react v17.0.2,
- react-native v0.67.4,
- react-native-calendars ^1.1287.0,
- react-native-document-picker ^8.1.1,
- react-native-fs ^2.20.0,
- react-native-modal-datetime-picker v14.0.0,
- react-native-share ^7.9.0,
- react-native-vector-icons ^9.2.0,
- realm ^10.16.0,
- sympto v3.0.1
### Adds
- Stats: Show period details, including cycle start, cycle length and amount of days with bleeding
- Stats: Explainer text for standard deviation
- Settings: Privacy Policy
- App asks for permissions for notifications right at the start, which allows you to set reminders (this is a new requirement for Android 13)
- Buttons can now be displayed as row
- Added dependencies:
- @js-joda/core ^5.3.0,
- @react-native-async-storage/async-storage ^1.17.9,
- @react-native-community/art ^1.2.0,
- @react-native-community/datetimepicker ^6.3.1,
- @react-native-community/push-notification-ios ^1.11.0,
- i18next ^22.0.2,
- react-i18next ^12.0.0,
- jshashes ^1.0.8,
- react-native-permissions ^3.10.0,
- react-native-push-notification: github:bl00dymarie/react-native-push-notification,
- react-native-simple-toast ^1.1.3,
- react-native-size-matters ^0.4.0,
### Fixed
- Password: Disable setting empty passwords
- After updating the password the app will do a full restart
- Chart: Grid for symptoms
- Chart: Horizontal lines in temperature chart
## Unreleased
- Partially implemented translations with react-i18next
## v1.2102.28 ## v1.2102.28
### Changes ### Changes
- Temperature range is now between 35 - 39°C and its default values are now set to 35.5 - 37.5°C - Temperature range is now between 35 - 39°C and its default values are now set to 35.5 - 37.5°C
### Fixed ### Fixed
- Blocks invalid input of temperature value - Blocks invalid input of temperature value
- Error message for incorrect password on login screen - Error message for incorrect password on login screen
- Phase text on home screen for last fertile day - Phase text on home screen for last fertile day
@@ -61,7 +129,7 @@ All notable changes to this project will be documented in this file.
### Adds ### Adds
- Allows chart not to show temperature part, when temperature is not tracked and corresponding refactoring - Allows chart not to show temperature part, when temperature is not tracked and corresponding refactoring
- Detox support for e2e testing and addition of the e2e tests - Detox support for e2e testing and addition of the e2e tests
- Introduces Redux global state (date and navigation are stored locally now) - Introduces Redux global state (date and navigation are stored locally now)
- Introduces clear.sh script to the project automising clearing project caches and packages reinstallation - Introduces clear.sh script to the project automising clearing project caches and packages reinstallation
@@ -80,7 +148,7 @@ All notable changes to this project will be documented in this file.
- Fixed adding notes to the future dates - Fixed adding notes to the future dates
- Fixed app exiting with error when hitting back button on device - Fixed app exiting with error when hitting back button on device
- Fixed Sex symptom showing on y axis of chart even though the contraception method was deleted - Fixed Sex symptom showing on y axis of chart even though the contraception method was deleted
- Fixed of the clear.sh file name in package.json - Fixed of the clear.sh file name in package.json
- Fixed of navigation from chart to the cycle day overview - Fixed of navigation from chart to the cycle day overview
- Bug fix for maximum value of mucus not showing on chart - Bug fix for maximum value of mucus not showing on chart
+8 -7
View File
@@ -134,10 +134,10 @@ android {
applicationId "com.drip" applicationId "com.drip"
minSdkVersion rootProject.ext.minSdkVersion minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 8 versionCode 25
versionName "1.2102.28" versionName "1.2311.14"
ndk { ndk {
abiFilters "armeabi-v7a", "x86", "arm64-v8a" abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
} }
testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type testBuildType System.getProperty('testBuildType', 'debug') // This will later be used to control the test apk build type
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner' testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
@@ -198,7 +198,7 @@ android {
// For each separate APK per architecture, set a unique version code as described here: // For each separate APK per architecture, set a unique version code as described here:
// https://developer.android.com/studio/build/configure-apk-splits.html // https://developer.android.com/studio/build/configure-apk-splits.html
// Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc. // Example: versionCode 1 will generate 1001 for armeabi-v7a, 1002 for x86, etc.
def versionCodes = ["armeabi-v7a": 1, "x86": 2] def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
def abi = output.getFilter(OutputFile.ABI) def abi = output.getFilter(OutputFile.ABI)
if (abi != null) { // null for the universal-debug, universal-release variants if (abi != null) { // null for the universal-debug, universal-release variants
output.versionCodeOverride = output.versionCodeOverride =
@@ -211,11 +211,12 @@ android {
dependencies { dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"]) implementation fileTree(dir: "libs", include: ["*.jar"])
//noinspection GradleDynamicVersion //noinspection GradleDynamicVersion
implementation 'androidx.appcompat:appcompat:1.0.0' implementation "androidx.appcompat:appcompat:1.0.0"
implementation 'androidx.annotation:annotation:1.1.0' implementation "androidx.annotation:annotation:1.1.0"
implementation "androidx.work:work-runtime-ktx:2.7.1"
implementation "com.facebook.react:react-native:+" // From node_modules implementation "com.facebook.react:react-native:+" // From node_modules
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0" implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"
debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") { debugImplementation("com.facebook.flipper:flipper:${FLIPPER_VERSION}") {
exclude group:'com.facebook.fbjni' exclude group:'com.facebook.fbjni'
} }
+57 -50
View File
@@ -5,74 +5,81 @@
> >
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />
<uses-permission android:name="android.permission.USE_EXACT_ALARM" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission tools:node="remove" android:name="android.permission.READ_PHONE_STATE" /> <uses-permission tools:node="remove" android:name="android.permission.READ_PHONE_STATE" />
<uses-permission tools:node="remove" android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission tools:node="remove" android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission tools:node="remove" android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission tools:node="remove" android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<permission <permission
android:name="${applicationId}.permission.C2D_MESSAGE" android:name="${applicationId}.permission.C2D_MESSAGE"
android:protectionLevel="signature" /> android:protectionLevel="signature" />
<uses-permission android:name="${applicationId}.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application <application
android:name=".MainApplication" android:name=".MainApplication"
android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:roundIcon="@mipmap/ic_launcher_round"
android:allowBackup="false"
android:theme="@style/AppTheme">
<activity
android:name=".MainActivity"
android:label="@string/app_name" android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:icon="@mipmap/ic_launcher"
android:launchMode="singleTask" android:roundIcon="@mipmap/ic_launcher_round"
android:windowSoftInputMode="adjustPan" android:allowBackup="false"
android:screenOrientation="sensorPortrait"> android:theme="@style/AppTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <meta-data
<category android:name="android.intent.category.LAUNCHER" /> android:name="com.dieam.reactnativepushnotification.notification_foreground"
</intent-filter> android:value="false" />
</activity> <meta-data
<provider android:name="com.dieam.reactnativepushnotification.notification_color"
android:resource="@color/purple" />
<meta-data
android:name="com.dieam.reactnativepushnotification.default_notification_channel_id"
android:value="..." />
<receiver
android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions"
android:exported="false"
tools:ignore="MissingClass" />
<receiver
android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher"
android:exported="false" />
<receiver
android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver"
android:exported="false" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
<activity
android:name=".MainActivity"
android:exported="true"
android:label="@string/app_name"
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
android:launchMode="singleTask"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="sensorPortrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
android:name="androidx.core.content.FileProvider" android:name="androidx.core.content.FileProvider"
android:authorities="com.drip.provider" android:authorities="com.drip.provider"
android:grantUriPermissions="true" android:grantUriPermissions="true"
android:exported="false"> android:exported="false" >
<meta-data <meta-data
tools:replace="android:resource" tools:replace="android:resource"
android:name="android.support.FILE_PROVIDER_PATHS" android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/filepaths" /> android:resource="@xml/filepaths" />
</provider> </provider>
<meta-data android:name="com.dieam.reactnativepushnotification.notification_foreground"
android:value="false"/>
<!-- Change the resource name to your App's accent color - or any other color you want -->
<meta-data android:name="com.dieam.reactnativepushnotification.notification_color"
android:resource="@android:color/white"/> <!-- or @android:color/{name} to use a standard color -->
<receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationActions" />
<receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationPublisher" />
<receiver android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationBootEventReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
<action android:name="com.htc.intent.action.QUICKBOOT_POWERON"/>
</intent-filter>
</receiver>
<service
android:name="com.dieam.reactnativepushnotification.modules.RNPushNotificationListenerService"
android:exported="false" >
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
</application> </application>
</manifest> </manifest>
@@ -14,4 +14,5 @@
<color name="grey">#A5A5A5</color> <color name="grey">#A5A5A5</color>
<color name="orange">#F38337</color> <color name="orange">#F38337</color>
<color name="purple">#3A2671</color> <color name="purple">#3A2671</color>
<color name="turquoiseDark">#69CBC1</color>
</resources> </resources>
+8 -11
View File
@@ -5,13 +5,13 @@ buildscript {
google() google()
mavenCentral() mavenCentral()
} }
ext.kotlinVersion = "1.3.10" ext.kotlinVersion = '1.3.40'
dependencies { dependencies {
classpath("com.android.tools.build:gradle:4.2.2") classpath('com.android.tools.build:gradle:7.0.3')
// NOTE: Do not place your application dependencies here; they belong // NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files // in the individual module build.gradle files
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion" classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
} }
} }
@@ -46,12 +46,9 @@ allprojects {
} }
ext { ext {
googlePlayServicesVersion = "+" // default: "+" buildToolsVersion = "33.0.2"
firebaseMessagingVersion = "21.1.0" // default: "+" minSdkVersion = 21
compileSdkVersion = 33
buildToolsVersion = "30.0.2" targetSdkVersion = 33
minSdkVersion = 23 ndkVersion = "21.4.7075529"
compileSdkVersion = 30
targetSdkVersion = 30
ndkVersion = "21.4.7075529"
} }
+3 -2
View File
@@ -1,5 +1,6 @@
#Wed Oct 11 14:45:21 CEST 2023
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
+12 -3
View File
@@ -4,15 +4,19 @@ import { StyleSheet, View } from 'react-native'
import AppText from '../common/app-text' import AppText from '../common/app-text'
import { Typography } from '../../styles' import { Sizes, Typography } from '../../styles'
import { CHART_YAXIS_WIDTH } from '../../config' import { CHART_YAXIS_WIDTH } from '../../config'
import { shared as labels } from '../../i18n/en/labels' import { shared as labels } from '../../i18n/en/labels'
const ChartLegend = ({ height }) => { const ChartLegend = ({ height }) => {
return ( return (
<View style={[styles.container, { height }]}> <View style={[styles.container, { height }]}>
<AppText style={styles.textBold}>#</AppText> <View style={[styles.singleLabelContainer, { height: height / 2 }]}>
<AppText style={styles.text}>{labels.date}</AppText> <AppText style={styles.textBold}>#</AppText>
</View>
<View style={[styles.singleLabelContainer, { height: height / 2 }]}>
<AppText style={styles.text}>{labels.date}</AppText>
</View>
</View> </View>
) )
} }
@@ -27,8 +31,13 @@ const styles = StyleSheet.create({
justifyContent: 'flex-end', justifyContent: 'flex-end',
width: CHART_YAXIS_WIDTH, width: CHART_YAXIS_WIDTH,
}, },
singleLabelContainer: {
justifyContent: 'space-around',
alignItems: 'center',
},
text: { text: {
...Typography.label, ...Typography.label,
fontSize: Sizes.footnote,
}, },
textBold: { textBold: {
...Typography.labelBold, ...Typography.labelBold,
+1 -1
View File
@@ -29,7 +29,7 @@ const getSymptomsFromCycleDays = (cycleDays) =>
SYMPTOMS.filter((symptom) => cycleDays.some((cycleDay) => cycleDay[symptom])) SYMPTOMS.filter((symptom) => cycleDays.some((cycleDay) => cycleDay[symptom]))
const CycleChart = ({ navigate, setDate }) => { const CycleChart = ({ navigate, setDate }) => {
const [shouldShowHint, setShouldShowHint] = useState(true) const [shouldShowHint, setShouldShowHint] = useState(false)
useEffect(() => { useEffect(() => {
let isMounted = true let isMounted = true
+20 -7
View File
@@ -19,11 +19,20 @@ const CycleDayLabel = ({ height, date }) => {
return ( return (
<View style={[styles.container, { height }]}> <View style={[styles.container, { height }]}>
<AppText style={styles.textBold}>{cycleDayLabel}</AppText> <View style={{ ...styles.labelRow, height: height / 2 }}>
<View style={styles.dateLabel}> <AppText style={styles.textBold}>{cycleDayLabel}</AppText>
<AppText style={styles.text}> </View>
{isFirstDayOfMonth ? momentDate.format('MMM') : dayOfMonth}
</AppText> <View style={{ ...styles.labelRow, height: height / 2 }}>
{isFirstDayOfMonth && (
<AppText style={styles.textFootnote}>
{momentDate.format('MMM')}
</AppText>
)}
{!isFirstDayOfMonth && (
<AppText style={styles.textSmall}>{dayOfMonth}</AppText>
)}
{!isFirstDayOfMonth && ( {!isFirstDayOfMonth && (
<AppText style={styles.textLight}> <AppText style={styles.textLight}>
{getOrdinalSuffix(dayOfMonth)} {getOrdinalSuffix(dayOfMonth)}
@@ -45,17 +54,21 @@ const styles = StyleSheet.create({
justifyContent: 'flex-end', justifyContent: 'flex-end',
left: 4, left: 4,
}, },
text: { textSmall: {
...Typography.label, ...Typography.label,
fontSize: Sizes.small, fontSize: Sizes.small,
}, },
textFootnote: {
...Typography.label,
fontSize: Sizes.footnote,
},
textBold: { textBold: {
...Typography.labelBold, ...Typography.labelBold,
}, },
textLight: { textLight: {
...Typography.labelLight, ...Typography.labelLight,
}, },
dateLabel: { labelRow: {
flexDirection: 'row', flexDirection: 'row',
justifyContent: 'space-around', justifyContent: 'space-around',
alignItems: 'center', alignItems: 'center',
+5
View File
@@ -1,6 +1,7 @@
import React from 'react' import React from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { TouchableOpacity } from 'react-native' import { TouchableOpacity } from 'react-native'
import moment from 'moment'
import { getCycleDay } from '../../db' import { getCycleDay } from '../../db'
@@ -26,6 +27,8 @@ const DayColumn = ({
symptomRowSymptoms, symptomRowSymptoms,
xAxisHeight, xAxisHeight,
}) => { }) => {
const momentDate = moment(dateString)
const isWeekend = momentDate.day() == 0 || momentDate.day() == 6
const cycleDayData = getCycleDay(dateString) const cycleDayData = getCycleDay(dateString)
let data = {} let data = {}
@@ -73,6 +76,7 @@ const DayColumn = ({
isVerticalLine={fhmAndLtl.drawFhmLine} isVerticalLine={fhmAndLtl.drawFhmLine}
data={data && data.temperature} data={data && data.temperature}
columnHeight={columnHeight} columnHeight={columnHeight}
isWeekend={isWeekend}
/> />
)} )}
@@ -92,6 +96,7 @@ const DayColumn = ({
isSymptomDataComplete={ isSymptomDataComplete={
hasSymptomData && isSymptomDataComplete(symptom, dateString) hasSymptomData && isSymptomDataComplete(symptom, dateString)
} }
isWeekend={isWeekend}
height={symptomHeight} height={symptomHeight}
/> />
) )
+7 -6
View File
@@ -7,7 +7,8 @@ import { Colors } from '../../styles'
import { import {
CHART_COLUMN_WIDTH, CHART_COLUMN_WIDTH,
CHART_COLUMN_MIDDLE, CHART_COLUMN_MIDDLE,
CHART_DOT_RADIUS, CHART_DOT_RADIUS_SYMPTOM,
CHART_DOT_RADIUS_TEMPERATURE,
CHART_STROKE_WIDTH, CHART_STROKE_WIDTH,
} from '../../config' } from '../../config'
@@ -35,9 +36,9 @@ const DotAndLine = ({
} }
const dot = new Path() const dot = new Path()
.moveTo(CHART_COLUMN_MIDDLE, y - CHART_DOT_RADIUS) .moveTo(CHART_COLUMN_MIDDLE, y - CHART_DOT_RADIUS_TEMPERATURE)
.arc(0, CHART_DOT_RADIUS * 2, CHART_DOT_RADIUS) .arc(0, CHART_DOT_RADIUS_TEMPERATURE * 2, CHART_DOT_RADIUS_TEMPERATURE)
.arc(0, CHART_DOT_RADIUS * -2, CHART_DOT_RADIUS) .arc(0, CHART_DOT_RADIUS_TEMPERATURE * -2, CHART_DOT_RADIUS_TEMPERATURE)
const dotColor = exclude ? Colors.turquoise : Colors.turquoiseDark const dotColor = exclude ? Colors.turquoise : Colors.turquoiseDark
const lineColorLeft = excludeLeftLine const lineColorLeft = excludeLeftLine
? Colors.turquoise ? Colors.turquoise
@@ -58,13 +59,13 @@ const DotAndLine = ({
d={lineRight} d={lineRight}
stroke={lineColorRight} stroke={lineColorRight}
strokeWidth={CHART_STROKE_WIDTH} strokeWidth={CHART_STROKE_WIDTH}
key={y + CHART_DOT_RADIUS} key={y + CHART_DOT_RADIUS_SYMPTOM}
/> />
<Shape <Shape
d={dot} d={dot}
stroke={dotColor} stroke={dotColor}
strokeWidth={CHART_STROKE_WIDTH} strokeWidth={CHART_STROKE_WIDTH}
fill="white" fill={Colors.turquoiseDark}
key="dot" key="dot"
/> />
</React.Fragment> </React.Fragment>
+24 -7
View File
@@ -5,7 +5,7 @@ import { StyleSheet, View } from 'react-native'
import { Colors, Containers } from '../../styles' import { Colors, Containers } from '../../styles'
import { import {
CHART_COLUMN_WIDTH, CHART_COLUMN_WIDTH,
CHART_DOT_RADIUS, CHART_DOT_RADIUS_SYMPTOM,
CHART_GRID_LINE_HORIZONTAL_WIDTH, CHART_GRID_LINE_HORIZONTAL_WIDTH,
} from '../../config' } from '../../config'
@@ -15,14 +15,31 @@ const SymptomCell = ({
symptom, symptom,
symptomValue, symptomValue,
isSymptomDataComplete, isSymptomDataComplete,
isWeekend,
}) => { }) => {
const shouldDrawDot = symptomValue !== false const shouldDrawDot = symptomValue !== false
// Determine the background color based on isWeekend prop
const backgroundColor = isWeekend ? Colors.greyVeryLight : 'white'
const styleCell = const styleCell =
index !== 0 index !== 0
? [styles.cell, { height, width: CHART_COLUMN_WIDTH }] ? [
: [styles.cell, { height, width: CHART_COLUMN_WIDTH }, styles.topBorder] styles.cell,
{
height,
width: CHART_COLUMN_WIDTH,
backgroundColor: backgroundColor,
},
]
: [
styles.cell,
{
height,
width: CHART_COLUMN_WIDTH,
backgroundColor: backgroundColor,
},
styles.topBorder,
]
let styleDot let styleDot
if (shouldDrawDot) { if (shouldDrawDot) {
const styleSymptom = Colors.iconColors[symptom] const styleSymptom = Colors.iconColors[symptom]
const symptomColor = styleSymptom.shades[symptomValue] const symptomColor = styleSymptom.shades[symptomValue]
@@ -47,11 +64,11 @@ SymptomCell.propTypes = {
symptom: PropTypes.string, symptom: PropTypes.string,
symptomValue: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]), symptomValue: PropTypes.oneOfType([PropTypes.bool, PropTypes.number]),
isSymptomDataComplete: PropTypes.bool, isSymptomDataComplete: PropTypes.bool,
isWeekend: PropTypes.bool,
} }
const styles = StyleSheet.create({ const styles = StyleSheet.create({
cell: { cell: {
backgroundColor: 'white',
borderBottomColor: Colors.grey, borderBottomColor: Colors.grey,
borderBottomWidth: CHART_GRID_LINE_HORIZONTAL_WIDTH, borderBottomWidth: CHART_GRID_LINE_HORIZONTAL_WIDTH,
borderLeftColor: Colors.grey, borderLeftColor: Colors.grey,
@@ -63,8 +80,8 @@ const styles = StyleSheet.create({
borderTopWidth: CHART_GRID_LINE_HORIZONTAL_WIDTH, borderTopWidth: CHART_GRID_LINE_HORIZONTAL_WIDTH,
}, },
dot: { dot: {
width: CHART_DOT_RADIUS * 2, width: CHART_DOT_RADIUS_SYMPTOM * 2,
height: CHART_DOT_RADIUS * 2, height: CHART_DOT_RADIUS_SYMPTOM * 2,
borderRadius: 50, borderRadius: 50,
}, },
}) })
+5 -8
View File
@@ -1,6 +1,6 @@
import React from 'react' import React from 'react'
import PropTypes from 'prop-types' import PropTypes from 'prop-types'
import { StyleSheet } from 'react-native' import { Colors } from '../../styles'
import { Surface, Path } from '@react-native-community/art' import { Surface, Path } from '@react-native-community/art'
@@ -14,14 +14,16 @@ const TemperatureColumn = ({
isVerticalLine, isVerticalLine,
data, data,
columnHeight, columnHeight,
isWeekend,
}) => { }) => {
const x = CHART_STROKE_WIDTH / 2 const x = CHART_STROKE_WIDTH / 2
const backgroundColor = isWeekend ? Colors.greyVeryLight : 'white'
return ( return (
<Surface <Surface
width={CHART_COLUMN_WIDTH} width={CHART_COLUMN_WIDTH}
height={columnHeight} height={columnHeight}
style={styles.container} style={{ backgroundColor: backgroundColor }}
> >
<ChartLine path={new Path().lineTo(0, columnHeight)} /> <ChartLine path={new Path().lineTo(0, columnHeight)} />
@@ -63,12 +65,7 @@ TemperatureColumn.propTypes = {
isVerticalLine: PropTypes.bool, isVerticalLine: PropTypes.bool,
data: PropTypes.object, data: PropTypes.object,
columnHeight: PropTypes.number, columnHeight: PropTypes.number,
isWeekend: PropTypes.bool,
} }
const styles = StyleSheet.create({
container: {
backgroundColor: 'white',
},
})
export default TemperatureColumn export default TemperatureColumn
+5 -2
View File
@@ -8,13 +8,15 @@ import { Sizes } from '../../styles'
import { CHART_TICK_WIDTH } from '../../config' import { CHART_TICK_WIDTH } from '../../config'
const Tick = ({ yPosition, height, isBold, shouldShowLabel, label }) => { const Tick = ({ yPosition, height, isBold, shouldShowLabel, label }) => {
const top = yPosition - height / 2 const top = yPosition - height / 2 - 4
const containerStyle = [styles.container, { flexBasis: height, height, top }] const containerStyle = [styles.container, { flexBasis: height, height, top }]
const textStyle = isBold ? styles.textBold : styles.textNormal const textStyle = isBold ? styles.textBold : styles.textNormal
if (!shouldShowLabel) return null
return ( return (
<View style={containerStyle}> <View style={containerStyle}>
<AppText style={textStyle}>{shouldShowLabel && label}</AppText> <AppText style={textStyle}>{label}</AppText>
</View> </View>
) )
} }
@@ -36,6 +38,7 @@ const styles = StyleSheet.create({
position: 'absolute', position: 'absolute',
right: 0, right: 0,
width: CHART_TICK_WIDTH, width: CHART_TICK_WIDTH,
minHeight: Sizes.base + 2,
}, },
textBold: { textBold: {
fontSize: Sizes.base, fontSize: Sizes.base,
@@ -65,14 +65,14 @@ export default function ImportData({ resetIsDeletingData, setIsLoading }) {
style: 'cancel', style: 'cancel',
onPress: () => {}, onPress: () => {},
}, },
{
text: t('dialog.replace'),
onPress: () => startImport(false),
},
{ {
text: t('dialog.delete'), text: t('dialog.delete'),
onPress: () => startImport(true), onPress: () => startImport(true),
}, },
{
text: t('dialog.replace'),
onPress: () => startImport(false),
},
]) ])
} }
+4 -3
View File
@@ -15,12 +15,13 @@ export const SYMPTOMS = [
export const CHART_COLUMN_WIDTH = 32 export const CHART_COLUMN_WIDTH = 32
export const CHART_COLUMN_MIDDLE = CHART_COLUMN_WIDTH / 2 export const CHART_COLUMN_MIDDLE = CHART_COLUMN_WIDTH / 2
export const CHART_DOT_RADIUS = scale(6) export const CHART_DOT_RADIUS_SYMPTOM = scale(6)
export const CHART_DOT_RADIUS_TEMPERATURE = scale(4)
export const CHART_GRID_LINE_HORIZONTAL_WIDTH = export const CHART_GRID_LINE_HORIZONTAL_WIDTH =
PixelRatio.roundToNearestPixel(0.3) PixelRatio.roundToNearestPixel(0.3)
export const CHART_ICON_SIZE = scale(20) export const CHART_ICON_SIZE = scale(20)
export const CHART_STROKE_WIDTH = scale(3) export const CHART_STROKE_WIDTH = scale(1.5)
export const CHART_SYMPTOM_HEIGHT_RATIO = scale(0.08) export const CHART_SYMPTOM_HEIGHT_RATIO = scale(0.06)
export const CHART_XAXIS_HEIGHT_RATIO = scale(0.1) export const CHART_XAXIS_HEIGHT_RATIO = scale(0.1)
export const CHART_YAXIS_WIDTH = scale(32) export const CHART_YAXIS_WIDTH = scale(32)
export const CHART_TICK_WIDTH = scale(44) export const CHART_TICK_WIDTH = scale(44)
+9 -9
View File
@@ -9,15 +9,15 @@
}, },
"cycleDay": { "cycleDay": {
"symptomBox": { "symptomBox": {
"bleeding": "Bleeding", "bleeding": "bleeding",
"temperature": "Temperature", "temperature": "temperature",
"mucus": "Cervical Mucus", "mucus": "cervical mucus",
"cervix": "Cervix", "cervix": "cervix",
"note": "Note", "note": "note",
"desire": "Desire", "desire": "desire",
"sex": "Sex", "sex": "sex",
"pain": "Pain", "pain": "pain",
"mood": "Mood" "mood": "mood"
} }
}, },
"labels": { "labels": {
+4 -9
View File
@@ -3,8 +3,6 @@ import { getCycleLengthStats } from './cycle-length'
const LocalDate = joda.LocalDate const LocalDate = joda.LocalDate
const DAYS = joda.ChronoUnit.DAYS const DAYS = joda.ChronoUnit.DAYS
const toJSON = (realmObj) => JSON.parse(JSON.stringify(realmObj))
export default function config(opts) { export default function config(opts) {
let bleedingDaysSortedByDate let bleedingDaysSortedByDate
let cycleStartsSortedByDate let cycleStartsSortedByDate
@@ -16,13 +14,10 @@ export default function config(opts) {
if (!opts) { if (!opts) {
// we only want to require (and run) the db module // we only want to require (and run) the db module
// when not running the tests // when not running the tests
bleedingDaysSortedByDate = toJSON( bleedingDaysSortedByDate = require('../db').getBleedingDaysSortedByDate()
require('../db').getBleedingDaysSortedByDate() cycleStartsSortedByDate = require('../db').getCycleStartsSortedByDate()
) cycleDaysSortedByDate = require('../db').getCycleDaysSortedByDate()
cycleStartsSortedByDate = toJSON(
require('../db').getCycleStartsSortedByDate()
)
cycleDaysSortedByDate = toJSON(require('../db').getCycleDaysSortedByDate())
maxBreakInBleeding = 1 maxBreakInBleeding = 1
maxCycleLength = 99 maxCycleLength = 99
minCyclesForPrediction = 3 minCyclesForPrediction = 3
+21 -7
View File
@@ -1,8 +1,10 @@
import { Platform } from 'react-native'
import { import {
tempReminderObservable, tempReminderObservable,
periodReminderObservable, periodReminderObservable,
} from '../local-storage' } from '../local-storage'
import Notification from 'react-native-push-notification' import * as PN from 'react-native-push-notification'
import { requestNotifications } from 'react-native-permissions'
import Moment from 'moment' import Moment from 'moment'
import { LocalDate } from '@js-joda/core' import { LocalDate } from '@js-joda/core'
@@ -12,7 +14,16 @@ import cycleModule from './cycle'
import nothingChanged from '../db/db-unchanged' import nothingChanged from '../db/db-unchanged'
export default function setupNotifications(navigate, setDate) { export default function setupNotifications(navigate, setDate) {
Notification.configure({ requestNotifications()
const PushNotification = Platform.OS === 'ios' ? PN : PN.default
PushNotification.createChannel({
channelId: 'drip-channel-id', // (required)
channelName: 'drip reminder', // (required)
playSound: false, // (optional) default: true
})
PushNotification.configure({
onNotification: (notification) => { onNotification: (notification) => {
// https://github.com/zo0r/react-native-push-notification/issues/966#issuecomment-479069106 // https://github.com/zo0r/react-native-push-notification/issues/966#issuecomment-479069106
if (notification.data?.id === '1' || notification.id === '1') { if (notification.data?.id === '1' || notification.id === '1') {
@@ -26,7 +37,7 @@ export default function setupNotifications(navigate, setDate) {
}) })
tempReminderObservable((reminder) => { tempReminderObservable((reminder) => {
Notification.cancelLocalNotifications({ id: '1' }) PushNotification.cancelLocalNotification({ id: '1' })
if (reminder.enabled) { if (reminder.enabled) {
const [hours, minutes] = reminder.time.split(':') const [hours, minutes] = reminder.time.split(':')
let target = new Moment() let target = new Moment()
@@ -38,31 +49,33 @@ export default function setupNotifications(navigate, setDate) {
target = target.add(1, 'd') target = target.add(1, 'd')
} }
Notification.localNotificationSchedule({ PushNotification.localNotificationSchedule({
id: '1', id: '1',
userInfo: { id: '1' }, userInfo: { id: '1' },
message: labels.tempReminder.notification, message: labels.tempReminder.notification,
date: target.toDate(), date: target.toDate(),
vibrate: false, vibrate: false,
repeatType: 'day', repeatType: 'day',
channelId: 'drip-channel-id',
}) })
} }
}, false) }, false)
periodReminderObservable((reminder) => { periodReminderObservable((reminder) => {
Notification.cancelLocalNotifications({ id: '2' }) PushNotification.cancelLocalNotification({ id: '2' })
if (reminder.enabled) setupPeriodReminder() if (reminder.enabled) setupPeriodReminder()
}, false) }, false)
getBleedingDaysSortedByDate().addListener((_, changes) => { getBleedingDaysSortedByDate().addListener((_, changes) => {
// the listener fires on setup, so we check if there were actually any changes // the listener fires on setup, so we check if there were actually any changes
if (nothingChanged(changes)) return if (nothingChanged(changes)) return
Notification.cancelLocalNotifications({ id: '2' }) PushNotification.cancelLocalNotification({ id: '2' })
if (periodReminderObservable.value.enabled) setupPeriodReminder() if (periodReminderObservable.value.enabled) setupPeriodReminder()
}) })
} }
function setupPeriodReminder() { function setupPeriodReminder() {
const PushNotification = Platform.OS === 'ios' ? PN : PN.default
const bleedingPrediction = cycleModule().getPredictedMenses() const bleedingPrediction = cycleModule().getPredictedMenses()
if (bleedingPrediction.length > 0) { if (bleedingPrediction.length > 0) {
const predictedBleedingStart = Moment( const predictedBleedingStart = Moment(
@@ -80,12 +93,13 @@ function setupPeriodReminder() {
// period is likely to start in 3 to 3 + (length of prediction - 1) days // period is likely to start in 3 to 3 + (length of prediction - 1) days
const daysToEndOfPrediction = bleedingPrediction[0].length + 2 const daysToEndOfPrediction = bleedingPrediction[0].length + 2
Notification.localNotificationSchedule({ PushNotification.localNotificationSchedule({
id: '2', id: '2',
userInfo: { id: '2' }, userInfo: { id: '2' },
message: labels.periodReminder.notification(daysToEndOfPrediction), message: labels.periodReminder.notification(daysToEndOfPrediction),
date: reminderDate.toDate(), date: reminderDate.toDate(),
vibrate: false, vibrate: false,
channelId: 'drip-channel-id',
}) })
} }
} }
+5 -5
View File
@@ -1,6 +1,6 @@
{ {
"name": "drip.", "name": "drip.",
"version": "1.2208.11", "version": "1.2311.14",
"contributors": [ "contributors": [
"Julia Friesel <julia.friesel@gmail.com>", "Julia Friesel <julia.friesel@gmail.com>",
"Marie Kochsiek", "Marie Kochsiek",
@@ -34,7 +34,7 @@
"@react-native-async-storage/async-storage": "^1.17.9", "@react-native-async-storage/async-storage": "^1.17.9",
"@react-native-community/art": "^1.2.0", "@react-native-community/art": "^1.2.0",
"@react-native-community/datetimepicker": "^6.3.1", "@react-native-community/datetimepicker": "^6.3.1",
"@react-native-community/push-notification-ios": "^1.8.0", "@react-native-community/push-notification-ios": "^1.11.0",
"csvtojson": "^2.0.8", "csvtojson": "^2.0.8",
"i18next": "^22.0.2", "i18next": "^22.0.2",
"jshashes": "^1.0.8", "jshashes": "^1.0.8",
@@ -49,7 +49,8 @@
"react-native-document-picker": "^8.1.1", "react-native-document-picker": "^8.1.1",
"react-native-fs": "^2.20.0", "react-native-fs": "^2.20.0",
"react-native-modal-datetime-picker": "14.0.0", "react-native-modal-datetime-picker": "14.0.0",
"react-native-push-notification": "3.2.1", "react-native-permissions": "^3.10.0",
"react-native-push-notification": "github:bl00dymarie/react-native-push-notification",
"react-native-share": "^7.9.0", "react-native-share": "^7.9.0",
"react-native-simple-toast": "^1.1.3", "react-native-simple-toast": "^1.1.3",
"react-native-size-matters": "^0.4.0", "react-native-size-matters": "^0.4.0",
@@ -64,13 +65,12 @@
"@babel/runtime": "^7.12.5", "@babel/runtime": "^7.12.5",
"@testing-library/jest-native": "^4.0.12", "@testing-library/jest-native": "^4.0.12",
"@testing-library/react-native": "^11.1.0", "@testing-library/react-native": "^11.1.0",
"basic-changelog": "gitlab:bloodyhealth/basic-changelog",
"eslint": "^7.32.0", "eslint": "^7.32.0",
"eslint-plugin-react": "^7.31.10", "eslint-plugin-react": "^7.31.10",
"husky": "^8.0.0", "husky": "^8.0.0",
"jest": "^29.1.2", "jest": "^29.1.2",
"jest-watch-typeahead": "^2.2.0", "jest-watch-typeahead": "^2.2.0",
"jetifier": "^1.6.6", "jetifier": "^2.0.0",
"metro-react-native-babel-preset": "^0.66.2", "metro-react-native-babel-preset": "^0.66.2",
"prettier": "2.4.0", "prettier": "2.4.0",
"pretty-quick": "^3.1.1", "pretty-quick": "^3.1.1",
+18 -10
View File
@@ -1,7 +1,14 @@
const redColor = '#c3000d' const redColor = '#c3000d'
export const shadesOfRed = ['#e7999e', '#db666d', '#cf323d', '#c3000d'] // light to dark export const shadesOfRed = ['#e7999e', '#db666d', '#cf323d', '#c3000d'] // light to dark
const violetColor = '#6a7b98' const violetColor = '#6a7b98'
const shadesOfViolet = ['#e3e7ed', '#c8cfdc', '#acb8cb', '#91a0ba', '#7689a9', violetColor] // light to dark const shadesOfViolet = [
'#e3e7ed',
'#c8cfdc',
'#acb8cb',
'#91a0ba',
'#7689a9',
violetColor,
] // light to dark
const yellowColor = '#dbb40c' const yellowColor = '#dbb40c'
const shadesOfYellow = ['#f0e19d', '#e9d26d', '#e2c33c', yellowColor] // light to dark const shadesOfYellow = ['#f0e19d', '#e9d26d', '#e2c33c', yellowColor] // light to dark
const magentaColor = '#6f2565' const magentaColor = '#6f2565'
@@ -16,6 +23,7 @@ export default {
greyDark: '#555', greyDark: '#555',
grey: '#888', grey: '#888',
greyLight: '#CCC', greyLight: '#CCC',
greyVeryLight: '#F4F4F4',
orange: '#F38337', orange: '#F38337',
purple: '#3A2671', purple: '#3A2671',
purpleLight: '#938EB2', purpleLight: '#938EB2',
@@ -23,37 +31,37 @@ export default {
turquoise: '#CFECEA', turquoise: '#CFECEA',
turquoiseLight: '#E9F2ED', turquoiseLight: '#E9F2ED',
iconColors: { iconColors: {
'bleeding': { bleeding: {
color: redColor, color: redColor,
shades: shadesOfRed, shades: shadesOfRed,
}, },
'mucus': { mucus: {
color: violetColor, color: violetColor,
shades: shadesOfViolet, shades: shadesOfViolet,
}, },
'cervix': { cervix: {
color: yellowColor, color: yellowColor,
shades: shadesOfYellow, shades: shadesOfYellow,
}, },
'sex': { sex: {
color: magentaColor, color: magentaColor,
shades: shadesOfMagenta, shades: shadesOfMagenta,
}, },
'desire': { desire: {
color: pinkColor, color: pinkColor,
shades: shadesOfPink, shades: shadesOfPink,
}, },
'pain': { pain: {
color: lightGreenColor, color: lightGreenColor,
shades: [lightGreenColor], shades: [lightGreenColor],
}, },
'mood': { mood: {
color: orangeColor, color: orangeColor,
shades: [orangeColor], shades: [orangeColor],
}, },
'note': { note: {
color: mintColor, color: mintColor,
shades: [mintColor], shades: [mintColor],
}, },
}, },
} }
+1 -1
View File
@@ -63,7 +63,7 @@ exports[`License screen should match the snapshot 1`] = `
] ]
} }
> >
Copyright (C) 2022 Heart of Code e.V. Copyright (C) 2023 Heart of Code e.V.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details: This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details:
</Text> </Text>
-6
View File
@@ -50,14 +50,8 @@ module.exports = () => {
} }
const pkgJSON = JSON.parse(fs.readFileSync('./package.json')) const pkgJSON = JSON.parse(fs.readFileSync('./package.json'))
const pkgLockJSON = JSON.parse(fs.readFileSync('./package-lock.json'))
pkgJSON.version = nextVersion pkgJSON.version = nextVersion
pkgLockJSON.version = nextVersion
fs.writeFileSync('./package.json', JSON.stringify(pkgJSON, null, 2)) fs.writeFileSync('./package.json', JSON.stringify(pkgJSON, null, 2))
fs.writeFileSync(
'./package-lock.json',
JSON.stringify(pkgLockJSON, null, 2)
)
await ReactNativeVersion.version( await ReactNativeVersion.version(
{ {
+2144 -2983
View File
File diff suppressed because it is too large Load Diff