@hedia/recommendation-screen 1.8.2 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/.github/workflows/ci.yml +0 -0
  2. package/.github/workflows/publish.yml +48 -0
  3. package/.github/workflows/version-check.yml +45 -0
  4. package/.linguirc +0 -0
  5. package/.npmpackagejsonlintrc.json +0 -0
  6. package/.prettierignore +0 -0
  7. package/.prettierrc +0 -0
  8. package/App.d.ts +4 -5
  9. package/App.jsx +23 -34
  10. package/App.tsx +36 -41
  11. package/Changelog.md +0 -0
  12. package/README.md +0 -0
  13. package/android/app/BUCK +0 -0
  14. package/android/app/build.gradle +0 -0
  15. package/android/app/build_defs.bzl +0 -0
  16. package/android/app/debug.keystore +0 -0
  17. package/android/app/proguard-rules.pro +0 -0
  18. package/android/app/src/debug/AndroidManifest.xml +0 -0
  19. package/android/app/src/debug/java/com/hediarecommendationscreen/ReactNativeFlipper.java +0 -0
  20. package/android/app/src/main/AndroidManifest.xml +0 -0
  21. package/android/app/src/main/assets/fonts/AntDesign.ttf +0 -0
  22. package/android/app/src/main/assets/fonts/Entypo.ttf +0 -0
  23. package/android/app/src/main/assets/fonts/EvilIcons.ttf +0 -0
  24. package/android/app/src/main/assets/fonts/Feather.ttf +0 -0
  25. package/android/app/src/main/assets/fonts/FontAwesome.ttf +0 -0
  26. package/android/app/src/main/assets/fonts/FontAwesome5_Brands.ttf +0 -0
  27. package/android/app/src/main/assets/fonts/FontAwesome5_Regular.ttf +0 -0
  28. package/android/app/src/main/assets/fonts/FontAwesome5_Solid.ttf +0 -0
  29. package/android/app/src/main/assets/fonts/Foundation.ttf +0 -0
  30. package/android/app/src/main/assets/fonts/Ionicons.ttf +0 -0
  31. package/android/app/src/main/assets/fonts/MaterialCommunityIcons.ttf +0 -0
  32. package/android/app/src/main/assets/fonts/MaterialIcons.ttf +0 -0
  33. package/android/app/src/main/assets/fonts/Octicons.ttf +0 -0
  34. package/android/app/src/main/assets/fonts/Roboto-Black.ttf +0 -0
  35. package/android/app/src/main/assets/fonts/Roboto-BlackItalic.ttf +0 -0
  36. package/android/app/src/main/assets/fonts/Roboto-Bold.ttf +0 -0
  37. package/android/app/src/main/assets/fonts/Roboto-BoldItalic.ttf +0 -0
  38. package/android/app/src/main/assets/fonts/Roboto-Italic.ttf +0 -0
  39. package/android/app/src/main/assets/fonts/Roboto-Light.ttf +0 -0
  40. package/android/app/src/main/assets/fonts/Roboto-LightItalic.ttf +0 -0
  41. package/android/app/src/main/assets/fonts/Roboto-Medium.ttf +0 -0
  42. package/android/app/src/main/assets/fonts/Roboto-MediumItalic.ttf +0 -0
  43. package/android/app/src/main/assets/fonts/Roboto-Regular.ttf +0 -0
  44. package/android/app/src/main/assets/fonts/Roboto-Thin.ttf +0 -0
  45. package/android/app/src/main/assets/fonts/Roboto-ThinItalic.ttf +0 -0
  46. package/android/app/src/main/assets/fonts/SimpleLineIcons.ttf +0 -0
  47. package/android/app/src/main/assets/fonts/Zocial.ttf +0 -0
  48. package/android/app/src/main/java/com/hediarecommendationscreen/MainActivity.java +0 -0
  49. package/android/app/src/main/java/com/hediarecommendationscreen/MainApplication.java +0 -0
  50. package/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
  51. package/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
  52. package/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
  53. package/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
  54. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
  55. package/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
  56. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
  57. package/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  58. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
  59. package/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  60. package/android/app/src/main/res/values/color.xml +0 -0
  61. package/android/app/src/main/res/values/strings.xml +0 -0
  62. package/android/app/src/main/res/values/styles.xml +0 -0
  63. package/android/build.gradle +0 -0
  64. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  65. package/android/gradle/wrapper/gradle-wrapper.properties +0 -0
  66. package/android/gradle.properties +0 -0
  67. package/android/gradlew.bat +0 -0
  68. package/android/settings.gradle +0 -0
  69. package/app.json +0 -0
  70. package/assets/fonts/Roboto/LICENSE.txt +0 -0
  71. package/assets/fonts/Roboto/Roboto-Black.ttf +0 -0
  72. package/assets/fonts/Roboto/Roboto-BlackItalic.ttf +0 -0
  73. package/assets/fonts/Roboto/Roboto-Bold.ttf +0 -0
  74. package/assets/fonts/Roboto/Roboto-BoldItalic.ttf +0 -0
  75. package/assets/fonts/Roboto/Roboto-Italic.ttf +0 -0
  76. package/assets/fonts/Roboto/Roboto-Light.ttf +0 -0
  77. package/assets/fonts/Roboto/Roboto-LightItalic.ttf +0 -0
  78. package/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
  79. package/assets/fonts/Roboto/Roboto-MediumItalic.ttf +0 -0
  80. package/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
  81. package/assets/fonts/Roboto/Roboto-Thin.ttf +0 -0
  82. package/assets/fonts/Roboto/Roboto-ThinItalic.ttf +0 -0
  83. package/babel.config.js +0 -0
  84. package/ignore-git.sh +1 -1
  85. package/ignore-publish.sh +2 -1
  86. package/index.d.ts +2 -2
  87. package/index.js +2 -3
  88. package/index.ts +2 -2
  89. package/ios/HediaRecommendationScreen/AppDelegate.h +0 -0
  90. package/ios/HediaRecommendationScreen/AppDelegate.m +0 -0
  91. package/ios/HediaRecommendationScreen/Base.lproj/LaunchScreen.xib +0 -0
  92. package/ios/HediaRecommendationScreen/Images.xcassets/AppIcon.appiconset/Contents.json +0 -0
  93. package/ios/HediaRecommendationScreen/Images.xcassets/Contents.json +0 -0
  94. package/ios/HediaRecommendationScreen/Info.plist +0 -0
  95. package/ios/HediaRecommendationScreen/main.m +0 -0
  96. package/ios/HediaRecommendationScreen-tvOS/Info.plist +0 -0
  97. package/ios/HediaRecommendationScreen-tvOSTests/Info.plist +0 -0
  98. package/ios/HediaRecommendationScreen.xcodeproj/project.pbxproj +0 -0
  99. package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen-tvOS.xcscheme +0 -0
  100. package/ios/HediaRecommendationScreen.xcodeproj/xcshareddata/xcschemes/HediaRecommendationScreen.xcscheme +0 -0
  101. package/ios/HediaRecommendationScreen.xcworkspace/contents.xcworkspacedata +0 -0
  102. package/ios/HediaRecommendationScreen.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +0 -0
  103. package/ios/HediaRecommendationScreenTests/HediaRecommendationScreenTests.m +0 -0
  104. package/ios/HediaRecommendationScreenTests/Info.plist +0 -0
  105. package/ios/Podfile +0 -0
  106. package/ios/Podfile.lock +0 -0
  107. package/jest.config.js +0 -0
  108. package/jest.mock.js +0 -0
  109. package/metro.config.js +0 -0
  110. package/package.json +8 -10
  111. package/react-native.config.js +0 -0
  112. package/src/RecommendationScreen.d.ts +18 -20
  113. package/src/RecommendationScreen.jsx +26 -15
  114. package/src/RecommendationScreen.tsx +60 -37
  115. package/src/__tests__/RecommendationScreen.test.d.ts +0 -0
  116. package/src/__tests__/RecommendationScreen.test.jsx +163 -138
  117. package/src/__tests__/RecommendationScreen.test.tsx +256 -159
  118. package/src/__tests__/RecommendationUtils.test.d.ts +0 -0
  119. package/src/__tests__/RecommendationUtils.test.js +30 -39
  120. package/src/__tests__/RecommendationUtils.test.ts +38 -43
  121. package/src/__tests__/Translate.test.d.ts +0 -0
  122. package/src/__tests__/Translate.test.jsx +13 -12
  123. package/src/__tests__/Translate.test.tsx +15 -14
  124. package/src/__tests__/Utils.test.d.ts +0 -0
  125. package/src/__tests__/Utils.test.js +22 -20
  126. package/src/__tests__/Utils.test.ts +32 -21
  127. package/src/__tests__/Validations.test.d.ts +0 -0
  128. package/src/__tests__/Validations.test.js +59 -33
  129. package/src/__tests__/Validations.test.ts +83 -41
  130. package/src/__tests__/components/Activity.test.d.ts +0 -0
  131. package/src/__tests__/components/Activity.test.jsx +39 -18
  132. package/src/__tests__/components/Activity.test.tsx +99 -45
  133. package/src/__tests__/components/Emotion.test.d.ts +0 -0
  134. package/src/__tests__/components/Emotion.test.jsx +34 -25
  135. package/src/__tests__/components/Emotion.test.tsx +41 -24
  136. package/src/__tests__/components/Header.test.d.ts +0 -0
  137. package/src/__tests__/components/Header.test.jsx +10 -9
  138. package/src/__tests__/components/Header.test.tsx +12 -11
  139. package/src/__tests__/components/InfoBars.test.d.ts +0 -0
  140. package/src/__tests__/components/InfoBars.test.jsx +1 -0
  141. package/src/__tests__/components/InfoBars.test.tsx +7 -6
  142. package/src/__tests__/components/InvisibleNumberInput.test.d.ts +0 -0
  143. package/src/__tests__/components/InvisibleNumberInput.test.jsx +40 -24
  144. package/src/__tests__/components/InvisibleNumberInput.test.tsx +41 -17
  145. package/src/__tests__/components/LimitationMessage.test.d.ts +0 -0
  146. package/src/__tests__/components/LimitationMessage.test.jsx +11 -30
  147. package/src/__tests__/components/LimitationMessage.test.tsx +15 -13
  148. package/src/__tests__/components/MoodIcon.test.d.ts +0 -0
  149. package/src/__tests__/components/MoodIcon.test.jsx +12 -8
  150. package/src/__tests__/components/MoodIcon.test.tsx +13 -5
  151. package/src/__tests__/components/RecommendationModal.test.d.ts +0 -0
  152. package/src/__tests__/components/RecommendationModal.test.jsx +22 -21
  153. package/src/__tests__/components/RecommendationModal.test.tsx +29 -27
  154. package/src/__tests__/components/RecommendedCarbs.test.d.ts +0 -0
  155. package/src/__tests__/components/RecommendedCarbs.test.jsx +7 -10
  156. package/src/__tests__/components/RecommendedCarbs.test.tsx +9 -10
  157. package/src/__tests__/components/RecommendedInsulin.test.d.ts +0 -0
  158. package/src/__tests__/components/RecommendedInsulin.test.jsx +57 -41
  159. package/src/__tests__/components/RecommendedInsulin.test.tsx +57 -31
  160. package/src/__tests__/components/Remeasure.test.d.ts +0 -0
  161. package/src/__tests__/components/Remeasure.test.jsx +7 -3
  162. package/src/__tests__/components/Remeasure.test.tsx +11 -3
  163. package/src/__tests__/components/TransferToLogbook.test.d.ts +0 -0
  164. package/src/__tests__/components/TransferToLogbook.test.jsx +2 -2
  165. package/src/__tests__/components/TransferToLogbook.test.tsx +2 -2
  166. package/src/__tests__/components/TwoOptionModal.test.d.ts +0 -0
  167. package/src/__tests__/components/TwoOptionModal.test.jsx +5 -4
  168. package/src/__tests__/components/TwoOptionModal.test.tsx +6 -4
  169. package/src/__tests__/utils.d.ts +7 -2
  170. package/src/__tests__/utils.jsx +59 -15
  171. package/src/__tests__/utils.tsx +63 -16
  172. package/src/assets/activity/Cyclist.png +0 -0
  173. package/src/assets/activity/Other.png +0 -0
  174. package/src/assets/activity/Runner.png +0 -0
  175. package/src/assets/activity/Swimmer.png +0 -0
  176. package/src/assets/activity/Walk.png +0 -0
  177. package/src/assets/mood/happy.png +0 -0
  178. package/src/assets/mood/happy_active.png +0 -0
  179. package/src/assets/mood/neutral.png +0 -0
  180. package/src/assets/mood/neutral_active.png +0 -0
  181. package/src/assets/mood/sad.png +0 -0
  182. package/src/assets/mood/sad_active.png +0 -0
  183. package/src/assets/mood/semi_happy.png +0 -0
  184. package/src/assets/mood/semi_happy_active.png +0 -0
  185. package/src/assets/mood/semi_sad.png +0 -0
  186. package/src/assets/mood/semi_sad_active.png +0 -0
  187. package/src/components/Header.d.ts +0 -0
  188. package/src/components/Header.jsx +2 -1
  189. package/src/components/Header.tsx +2 -1
  190. package/src/components/Icon.js +0 -0
  191. package/src/components/InfoBars.d.ts +1 -1
  192. package/src/components/InfoBars.jsx +0 -0
  193. package/src/components/InfoBars.tsx +1 -1
  194. package/src/components/InvisibleNumberInput.d.ts +2 -1
  195. package/src/components/InvisibleNumberInput.jsx +7 -2
  196. package/src/components/InvisibleNumberInput.tsx +10 -3
  197. package/src/components/LimitationMessage.d.ts +1 -1
  198. package/src/components/LimitationMessage.jsx +3 -2
  199. package/src/components/LimitationMessage.tsx +3 -1
  200. package/src/components/LineSeparator.d.ts +0 -0
  201. package/src/components/LineSeparator.jsx +0 -0
  202. package/src/components/LineSeparator.tsx +0 -0
  203. package/src/components/RecentInsulin.d.ts +0 -0
  204. package/src/components/RecentInsulin.jsx +3 -2
  205. package/src/components/RecentInsulin.tsx +3 -0
  206. package/src/components/RecommendationModal.d.ts +4 -4
  207. package/src/components/RecommendationModal.jsx +10 -9
  208. package/src/components/RecommendationModal.tsx +19 -8
  209. package/src/components/RecommendedCarbs.d.ts +4 -3
  210. package/src/components/RecommendedCarbs.jsx +12 -9
  211. package/src/components/RecommendedCarbs.tsx +31 -16
  212. package/src/components/RecommendedInsulin.d.ts +7 -7
  213. package/src/components/RecommendedInsulin.jsx +11 -7
  214. package/src/components/RecommendedInsulin.tsx +24 -12
  215. package/src/components/Remeasure.d.ts +2 -2
  216. package/src/components/Remeasure.jsx +7 -2
  217. package/src/components/Remeasure.tsx +10 -4
  218. package/src/components/TransferToLogbook.d.ts +0 -0
  219. package/src/components/TransferToLogbook.jsx +2 -1
  220. package/src/components/TransferToLogbook.tsx +2 -0
  221. package/src/components/TwoOptionModal.d.ts +5 -3
  222. package/src/components/TwoOptionModal.jsx +44 -13
  223. package/src/components/TwoOptionModal.tsx +50 -14
  224. package/src/components/activity/Activity.d.ts +2 -3
  225. package/src/components/activity/Activity.jsx +5 -2
  226. package/src/components/activity/Activity.tsx +7 -5
  227. package/src/components/activity/ActivityIcon.d.ts +1 -1
  228. package/src/components/activity/ActivityIcon.jsx +9 -8
  229. package/src/components/activity/ActivityIcon.tsx +12 -10
  230. package/src/components/activity/ActivityIntensity.d.ts +1 -1
  231. package/src/components/activity/ActivityIntensity.jsx +2 -8
  232. package/src/components/activity/ActivityIntensity.tsx +3 -12
  233. package/src/components/mood/Emotion.d.ts +5 -4
  234. package/src/components/mood/Emotion.jsx +4 -3
  235. package/src/components/mood/Emotion.tsx +9 -7
  236. package/src/components/mood/MoodIcon.d.ts +2 -2
  237. package/src/components/mood/MoodIcon.jsx +3 -2
  238. package/src/components/mood/MoodIcon.tsx +4 -2
  239. package/src/locale/CleanLanguage.ts +0 -0
  240. package/src/locale/da/messages.js +1 -1
  241. package/src/locale/da/messages.po +115 -107
  242. package/src/locale/de/messages.js +1 -1
  243. package/src/locale/de/messages.po +115 -107
  244. package/src/locale/en/messages.js +1 -1
  245. package/src/locale/en/messages.po +118 -110
  246. package/src/locale/es/messages.js +1 -1
  247. package/src/locale/es/messages.po +112 -104
  248. package/src/locale/fr/messages.js +1 -1
  249. package/src/locale/fr/messages.po +111 -103
  250. package/src/locale/i18nUtils.d.ts +3 -4
  251. package/src/locale/i18nUtils.js +13 -12
  252. package/src/locale/i18nUtils.ts +14 -14
  253. package/src/locale/it/messages.js +1 -1
  254. package/src/locale/it/messages.po +113 -105
  255. package/src/types/enum.d.ts +52 -44
  256. package/src/types/enum.js +67 -56
  257. package/src/types/enum.ts +58 -34
  258. package/src/types/types.d.ts +9 -23
  259. package/src/types/types.js +0 -0
  260. package/src/types/types.ts +9 -25
  261. package/src/utils/AttentionMessages.d.ts +1 -4
  262. package/src/utils/AttentionMessages.jsx +8 -30
  263. package/src/utils/AttentionMessages.tsx +11 -16
  264. package/src/utils/Constants.d.ts +0 -0
  265. package/src/utils/Constants.js +0 -0
  266. package/src/utils/Constants.ts +0 -0
  267. package/src/utils/RecommendationError.d.ts +2 -0
  268. package/src/utils/RecommendationError.jsx +45 -40
  269. package/src/utils/RecommendationError.tsx +17 -4
  270. package/src/utils/RecommendationUtils.d.ts +7 -8
  271. package/src/utils/RecommendationUtils.js +15 -7
  272. package/src/utils/RecommendationUtils.ts +24 -14
  273. package/src/utils/Translations.d.ts +2 -0
  274. package/src/utils/Translations.js +10 -0
  275. package/src/utils/Translations.ts +9 -0
  276. package/src/utils/Utils.d.ts +4 -5
  277. package/src/utils/Utils.js +6 -5
  278. package/src/utils/Utils.ts +10 -8
  279. package/src/utils/Validations.d.ts +10 -9
  280. package/src/utils/Validations.js +61 -65
  281. package/src/utils/Validations.ts +76 -81
  282. package/tsconfig.json +2 -2
  283. package/tslint.json +0 -0
@@ -1,15 +1,7 @@
1
- import { IRecommendationParams } from "@hedia/recommendation-calculator";
2
- import {
3
- ActivityIntensity,
4
- IActivityInterval,
5
- IActivityParams,
6
- IActivitySettings,
7
- IRecentBolus,
8
- } from "@hedia/recommendation-calculator/src/RecommendationCalculator";
9
- import { BloodGlucoseUnit, BloodKetonesUnit } from "@hedia/types";
1
+ import { Activity, BloodGlucoseUnit, BloodKetonesUnit, Languages, UserSettings } from "@hedia/types";
10
2
  import moment from "moment";
11
3
  import { IRecommendationProps } from "../RecommendationScreen";
12
- import { ActivityEnum, ActivityInterval, InjectionMethod, Language } from "../types/enum";
4
+ import { ActivitySettings, IActivityParams, IRecentBolus, IRecommendationParams, logbookEntry } from "../types/types";
13
5
  import {
14
6
  ACTIVITY_BUFFER_MINUTES,
15
7
  ACTIVITY_DURATION_MINUTES_LIMITS,
@@ -44,11 +36,16 @@ import {
44
36
  InsulinSensitivityError,
45
37
  InsulinToCarbsRatioError,
46
38
  LanguageError,
39
+ LatestLogbook6HoursBGLError,
40
+ RecentBolusError,
47
41
  TargetBGLError,
48
42
  UserReminderError,
49
43
  } from "./RecommendationError";
50
44
  import { Utils } from "./Utils";
51
45
 
46
+ const { hard } = Activity.Enums.ActivityIntensity;
47
+ const { fromFortysix } = Activity.Enums.ActivityReductionIntervals;
48
+
52
49
  export function validateParams(props: IRecommendationProps): void {
53
50
  checkCalculatorParams(props.calculatorParams);
54
51
  checkBGLUnit(props.bloodGlucoseUnit);
@@ -59,49 +56,52 @@ export function validateParams(props: IRecommendationProps): void {
59
56
  checkInjectionMethod(props.injectionMethod);
60
57
  checkUserReminder(props.userReminder);
61
58
  checkLanguage(props.language);
59
+ checkLatestLogbook6Hours(props.latestLogbookFrom6Hours);
62
60
  if (props?.calculatorParams?.activity && props?.activityDisplayProps) {
63
61
  checkActivityType(props.activityDisplayProps.activityType);
64
62
  }
65
63
  }
66
64
 
67
- export function checkLanguage(language: Language): void {
68
- if (!Object.values(Language).includes(language)) {
65
+ export function checkLanguage(language: Languages): void {
66
+ if (!Object.values(Languages).includes(language)) {
69
67
  throw LanguageError();
70
68
  }
71
69
  }
70
+ export function checkLatestLogbook6Hours(logbook: logbookEntry | null): void {
71
+ if (logbook === undefined) {
72
+ throw LatestLogbook6HoursBGLError();
73
+ }
74
+ if (logbook !== null) {
75
+ if (!Utils.isInRange(logbook.blood_glucose_millimolar, CURRENT_BGL_MMOL_LIMITS)) {
76
+ throw LatestLogbook6HoursBGLError();
77
+ }
78
+ }
79
+ }
72
80
 
73
- export function checkInjectionMethod(injectionMethod: InjectionMethod): void {
74
- switch (injectionMethod) {
75
- case InjectionMethod.PenHalf:
76
- case InjectionMethod.PenWhole:
77
- case InjectionMethod.Pump:
78
- break;
79
- default:
80
- throw InjectionMethodError();
81
+ export function checkInjectionMethod(injectionMethod: UserSettings.Enums.InjectionMethod): void {
82
+ const check = Object.values(UserSettings.Enums.InjectionMethod).some(
83
+ (method): boolean => method === injectionMethod,
84
+ );
85
+ if (!check) {
86
+ throw InjectionMethodError();
81
87
  }
82
88
  }
83
89
 
84
90
  export function checkBGLUnit(unit: BloodGlucoseUnit): void {
85
- switch (unit) {
86
- case BloodGlucoseUnit.MG_DL:
87
- case BloodGlucoseUnit.MMOL_L:
88
- break;
89
- default:
90
- throw BloodGlucoseUnitError();
91
+ const check = Object.values(BloodGlucoseUnit).some((enumUnit): boolean => enumUnit === unit);
92
+ if (!check) {
93
+ throw BloodGlucoseUnitError();
91
94
  }
92
95
  }
93
96
  export function checkBKLUnit(unit: BloodKetonesUnit): void {
94
- switch (unit) {
95
- case BloodKetonesUnit.MG_DL:
96
- case BloodKetonesUnit.MMOL_L:
97
- break;
98
- default:
99
- throw BloodKetoneUnitError();
97
+ const check = Object.values(BloodKetonesUnit).some((enumUnit): boolean => enumUnit === unit);
98
+ if (!check) {
99
+ throw BloodKetoneUnitError();
100
100
  }
101
101
  }
102
102
 
103
103
  export function checkUserReminder(userReminder: number): void {
104
- if (!Utils.isInClosedInterval(userReminder, REMINDER_HOURS_LIMITS)) {
104
+ if (!Utils.isInRange(userReminder, REMINDER_HOURS_LIMITS)) {
105
105
  throw UserReminderError();
106
106
  }
107
107
  }
@@ -113,11 +113,12 @@ function checkCalculatorParams(calculatorParams: IRecommendationParams): void {
113
113
  checkTargetBGL(calculatorParams.targetBGL);
114
114
  checkInsulinToCarbRatio(calculatorParams.carbohydrateRatio);
115
115
  checkInsulinSensitivity(calculatorParams.insulinSensitivity);
116
+ checkRecentBolus(calculatorParams.recentBoluses);
116
117
  checkRecentBolusesInsulinDose(calculatorParams.recentBoluses);
117
118
  checkRecentBolusesSecondsPassed(calculatorParams.recentBoluses);
118
119
  }
119
120
 
120
- export function checkActivity(activity: IActivityParams): void {
121
+ export function checkActivity(activity: IActivityParams | null): void {
121
122
  if (activity) {
122
123
  checkActivityDate(activity);
123
124
  checkActivityDuration(activity.activityDuration);
@@ -127,53 +128,47 @@ export function checkActivity(activity: IActivityParams): void {
127
128
  }
128
129
  }
129
130
 
130
- export function checkRecentBolusesInsulinDose(recentBoluses: Array<IRecentBolus>): void {
131
- if (recentBoluses !== null) {
132
- recentBoluses.forEach((bolus: IRecentBolus): void => {
133
- if (!Utils.isInClosedInterval(bolus.insulinDose, INSULIN_DOSE_LIMITS)) {
134
- throw BolusInsulinDoseError();
135
- }
136
- });
131
+ export function checkRecentBolus(recentBoluses: Array<IRecentBolus>): void {
132
+ if (recentBoluses === null || recentBoluses === undefined) {
133
+ throw RecentBolusError();
137
134
  }
138
135
  }
139
136
 
137
+ export function checkRecentBolusesInsulinDose(recentBoluses: Array<IRecentBolus>): void {
138
+ recentBoluses.forEach((bolus: IRecentBolus): void => {
139
+ if (!Utils.isInRange(bolus.insulinDose, INSULIN_DOSE_LIMITS)) {
140
+ throw BolusInsulinDoseError();
141
+ }
142
+ });
143
+ }
144
+
140
145
  export function checkRecentBolusesSecondsPassed(recentBoluses: Array<IRecentBolus>): void {
141
- if (recentBoluses !== null) {
142
- recentBoluses.forEach((bolus: IRecentBolus): void => {
143
- if (!Utils.isInClosedInterval(bolus.secondsPassed, BOLUS_SECONDS_PASSED_LIMITS)) {
144
- throw BolusInsulinSecondsPassedError();
145
- }
146
- });
147
- }
146
+ recentBoluses.forEach((bolus: IRecentBolus): void => {
147
+ if (!Utils.isInRange(bolus.secondsPassed, BOLUS_SECONDS_PASSED_LIMITS)) {
148
+ throw BolusInsulinSecondsPassedError();
149
+ }
150
+ });
148
151
  }
149
152
 
150
153
  export function checkActivityDuration(activityDuration: number): void {
151
- if (!Utils.isInClosedInterval(activityDuration, ACTIVITY_DURATION_MINUTES_LIMITS)) {
154
+ if (!Utils.isInRange(activityDuration, ACTIVITY_DURATION_MINUTES_LIMITS)) {
152
155
  throw ActivityDurationError();
153
156
  }
154
157
  }
155
158
 
156
- export function checkActivityIntensity(activityIntensity: ActivityIntensity): void {
157
- switch (activityIntensity) {
158
- case ActivityIntensity.Hard:
159
- case ActivityIntensity.Moderate:
160
- case ActivityIntensity.Light:
161
- break;
162
- default:
163
- throw ActivityIntensityError();
159
+ export function checkActivityIntensity(activityIntensity: Activity.Enums.ActivityIntensity): void {
160
+ const check = Object.values(Activity.Enums.ActivityIntensity).some(
161
+ (method): boolean => method === activityIntensity,
162
+ );
163
+ if (!check) {
164
+ throw ActivityIntensityError();
164
165
  }
165
166
  }
166
167
 
167
- export function checkActivityType(activityType: ActivityEnum): void {
168
- switch (activityType) {
169
- case ActivityEnum.Cycling:
170
- case ActivityEnum.Other:
171
- case ActivityEnum.Run:
172
- case ActivityEnum.Swim:
173
- case ActivityEnum.Walk:
174
- break;
175
- default:
176
- throw ActivityTypeError();
168
+ export function checkActivityType(activityType: Activity.Enums.ActivityEnum | null): void {
169
+ const check = Object.values(Activity.Enums.ActivityEnum).some((method): boolean => method === activityType);
170
+ if (!check) {
171
+ throw ActivityTypeError();
177
172
  }
178
173
  }
179
174
 
@@ -186,13 +181,13 @@ export function checkActivityDate(activity: IActivityParams): void {
186
181
  }
187
182
  }
188
183
 
189
- type intensityType = Omit<IActivitySettings, "target">;
190
- export function checkActivitySettings(activitySettings: IActivitySettings): void {
191
- for (const intensity of Object.keys(activitySettings) as Array<keyof intensityType>) {
192
- for (const interval of Object.keys(activitySettings[intensity]) as Array<keyof IActivityInterval>) {
193
- const value: number = activitySettings[intensity][interval];
194
- const isInInterval: boolean = Utils.isInClosedInterval(value, ACTIVITY_SETTINGS_INTERVAL_LIMITS);
195
- if (intensity === ActivityIntensity.Hard.toLowerCase() && interval === ActivityInterval.fromFortysix) {
184
+ export function checkActivitySettings(activitySettings: ActivitySettings): void {
185
+ for (const intensity of Object.keys(activitySettings) as Array<Activity.Enums.ActivityIntensity>) {
186
+ const reductionIntervals = activitySettings[intensity];
187
+ for (const interval of Object.keys(reductionIntervals) as Array<keyof typeof reductionIntervals>) {
188
+ const value = activitySettings[intensity][interval];
189
+ const isInInterval: boolean = Utils.isInRange(value, ACTIVITY_SETTINGS_INTERVAL_LIMITS);
190
+ if (intensity === hard && interval === fromFortysix) {
196
191
  if (!isInInterval && value !== null) {
197
192
  throw ActivitySettingsError();
198
193
  }
@@ -204,47 +199,47 @@ export function checkActivitySettings(activitySettings: IActivitySettings): void
204
199
  }
205
200
 
206
201
  export function checkActivityTargetBGL(activitySettingsTargetBGL: number): void {
207
- if (!Utils.isInClosedInterval(activitySettingsTargetBGL, ACTIVITY_TARGET_BGL_MMOL_LIMITS)) {
202
+ if (!Utils.isInRange(activitySettingsTargetBGL, ACTIVITY_TARGET_BGL_MMOL_LIMITS)) {
208
203
  throw ActivityTargetBGLError();
209
204
  }
210
205
  }
211
206
 
212
207
  export function checkCurrentBGL(currentBGL: number): void {
213
208
  if (currentBGL !== null) {
214
- if (!Utils.isInClosedInterval(currentBGL, CURRENT_BGL_MMOL_LIMITS)) {
209
+ if (!Utils.isInRange(currentBGL, CURRENT_BGL_MMOL_LIMITS)) {
215
210
  throw CurrentBGLError();
216
211
  }
217
212
  }
218
213
  }
219
214
 
220
215
  export function checkTargetBGL(targetBGL: number): void {
221
- if (!Utils.isInClosedInterval(targetBGL, TARGET_BGL_MMOL_LIMITS)) {
216
+ if (!Utils.isInRange(targetBGL, TARGET_BGL_MMOL_LIMITS)) {
222
217
  throw TargetBGLError();
223
218
  }
224
219
  }
225
220
 
226
221
  export function checkBloodKetoneLevel(currentBKL: number): void {
227
222
  if (currentBKL !== null) {
228
- if (!Utils.isInClosedInterval(currentBKL, CURRENT_BKL_MMOL_LIMITS)) {
223
+ if (!Utils.isInRange(currentBKL, CURRENT_BKL_MMOL_LIMITS)) {
229
224
  throw CurrentBKLError();
230
225
  }
231
226
  }
232
227
  }
233
228
 
234
229
  export function checkInsulinSensitivity(insulinSensitivity: number): void {
235
- if (!Utils.isInClosedInterval(insulinSensitivity, INSULIN_SENSITIVITY_MMOL_LIMITS)) {
230
+ if (!Utils.isInRange(insulinSensitivity, INSULIN_SENSITIVITY_MMOL_LIMITS)) {
236
231
  throw InsulinSensitivityError();
237
232
  }
238
233
  }
239
234
 
240
235
  export function checkInsulinToCarbRatio(insulinToCarbRatio: number): void {
241
- if (!Utils.isInClosedInterval(insulinToCarbRatio, INSULIN_TO_CARBS_RATIO_LIMITS)) {
236
+ if (!Utils.isInRange(insulinToCarbRatio, INSULIN_TO_CARBS_RATIO_LIMITS)) {
242
237
  throw InsulinToCarbsRatioError();
243
238
  }
244
239
  }
245
240
 
246
241
  export function checkCarbohydrates(carbohydrates: number): void {
247
- if (!Utils.isInClosedInterval(carbohydrates, CARBOHYDRATES_LIMTS)) {
242
+ if (!Utils.isInRange(carbohydrates, CARBOHYDRATES_LIMTS)) {
248
243
  throw CarbohydrateLimitError();
249
244
  }
250
245
  }
package/tsconfig.json CHANGED
@@ -29,9 +29,9 @@
29
29
  /* Strict Type-Checking Options */
30
30
  //"strict": true, /* Enable all strict type-checking options. */
31
31
  // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
32
- // "strictNullChecks": true, /* Enable strict null checks. */
32
+ "strictNullChecks": true, /* Enable strict null checks. */
33
33
  // "strictFunctionTypes": true, /* Enable strict checking of function types. */
34
- // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
34
+ "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
35
35
  // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
36
36
  // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
37
37
 
package/tslint.json CHANGED
File without changes