@hedia/recommendation-screen 2.1.21 → 2.1.22-alpha.0

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 (47) hide show
  1. package/coverage/clover.xml +716 -0
  2. package/coverage/coverage-final.json +28 -0
  3. package/coverage/lcov-report/base.css +224 -0
  4. package/coverage/lcov-report/block-navigation.js +79 -0
  5. package/coverage/lcov-report/favicon.png +0 -0
  6. package/coverage/lcov-report/index.html +201 -0
  7. package/coverage/lcov-report/prettify.css +1 -0
  8. package/coverage/lcov-report/prettify.js +2 -0
  9. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  10. package/coverage/lcov-report/sorter.js +170 -0
  11. package/coverage/lcov-report/src/RecommendationScreen.tsx.html +2483 -0
  12. package/coverage/lcov-report/src/__tests__/index.html +111 -0
  13. package/coverage/lcov-report/src/__tests__/utils.tsx.html +533 -0
  14. package/coverage/lcov-report/src/components/Header.tsx.html +356 -0
  15. package/coverage/lcov-report/src/components/InfoBars.tsx.html +518 -0
  16. package/coverage/lcov-report/src/components/InvisibleNumberInput.tsx.html +566 -0
  17. package/coverage/lcov-report/src/components/LimitationMessage.tsx.html +209 -0
  18. package/coverage/lcov-report/src/components/LineSeparator.tsx.html +161 -0
  19. package/coverage/lcov-report/src/components/RecentInsulin.tsx.html +410 -0
  20. package/coverage/lcov-report/src/components/RecommendationModal.tsx.html +923 -0
  21. package/coverage/lcov-report/src/components/RecommendedCarbs.tsx.html +1061 -0
  22. package/coverage/lcov-report/src/components/RecommendedInsulin.tsx.html +779 -0
  23. package/coverage/lcov-report/src/components/Remeasure.tsx.html +551 -0
  24. package/coverage/lcov-report/src/components/TransferToLogbook.tsx.html +443 -0
  25. package/coverage/lcov-report/src/components/TwoOptionModal.tsx.html +665 -0
  26. package/coverage/lcov-report/src/components/activity/Activity.tsx.html +371 -0
  27. package/coverage/lcov-report/src/components/activity/ActivityIcon.tsx.html +281 -0
  28. package/coverage/lcov-report/src/components/activity/ActivityIntensity.tsx.html +281 -0
  29. package/coverage/lcov-report/src/components/activity/index.html +141 -0
  30. package/coverage/lcov-report/src/components/index.html +276 -0
  31. package/coverage/lcov-report/src/components/mood/Emotion.tsx.html +353 -0
  32. package/coverage/lcov-report/src/components/mood/MoodIcon.tsx.html +335 -0
  33. package/coverage/lcov-report/src/components/mood/index.html +126 -0
  34. package/coverage/lcov-report/src/index.html +111 -0
  35. package/coverage/lcov-report/src/locale/i18nUtils.ts.html +206 -0
  36. package/coverage/lcov-report/src/locale/index.html +111 -0
  37. package/coverage/lcov-report/src/utils/AttentionMessages.tsx.html +554 -0
  38. package/coverage/lcov-report/src/utils/Constants.ts.html +248 -0
  39. package/coverage/lcov-report/src/utils/RecommendationError.tsx.html +620 -0
  40. package/coverage/lcov-report/src/utils/RecommendationUtils.ts.html +764 -0
  41. package/coverage/lcov-report/src/utils/Translations.ts.html +131 -0
  42. package/coverage/lcov-report/src/utils/Utils.ts.html +545 -0
  43. package/coverage/lcov-report/src/utils/Validations.ts.html +1544 -0
  44. package/coverage/lcov-report/src/utils/index.html +201 -0
  45. package/coverage/lcov.info +1611 -0
  46. package/package.json +2 -2
  47. package/src/__tests__/utils.js +2 -2
@@ -0,0 +1,545 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/utils/Utils.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/utils</a> Utils.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">100% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>22/22</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">100% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>12/12</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>9/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">100% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>22/22</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ </div>
58
+ <div class='status-line high'></div>
59
+ <pre><table class="coverage">
60
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
61
+ <a name='L2'></a><a href='#L2'>2</a>
62
+ <a name='L3'></a><a href='#L3'>3</a>
63
+ <a name='L4'></a><a href='#L4'>4</a>
64
+ <a name='L5'></a><a href='#L5'>5</a>
65
+ <a name='L6'></a><a href='#L6'>6</a>
66
+ <a name='L7'></a><a href='#L7'>7</a>
67
+ <a name='L8'></a><a href='#L8'>8</a>
68
+ <a name='L9'></a><a href='#L9'>9</a>
69
+ <a name='L10'></a><a href='#L10'>10</a>
70
+ <a name='L11'></a><a href='#L11'>11</a>
71
+ <a name='L12'></a><a href='#L12'>12</a>
72
+ <a name='L13'></a><a href='#L13'>13</a>
73
+ <a name='L14'></a><a href='#L14'>14</a>
74
+ <a name='L15'></a><a href='#L15'>15</a>
75
+ <a name='L16'></a><a href='#L16'>16</a>
76
+ <a name='L17'></a><a href='#L17'>17</a>
77
+ <a name='L18'></a><a href='#L18'>18</a>
78
+ <a name='L19'></a><a href='#L19'>19</a>
79
+ <a name='L20'></a><a href='#L20'>20</a>
80
+ <a name='L21'></a><a href='#L21'>21</a>
81
+ <a name='L22'></a><a href='#L22'>22</a>
82
+ <a name='L23'></a><a href='#L23'>23</a>
83
+ <a name='L24'></a><a href='#L24'>24</a>
84
+ <a name='L25'></a><a href='#L25'>25</a>
85
+ <a name='L26'></a><a href='#L26'>26</a>
86
+ <a name='L27'></a><a href='#L27'>27</a>
87
+ <a name='L28'></a><a href='#L28'>28</a>
88
+ <a name='L29'></a><a href='#L29'>29</a>
89
+ <a name='L30'></a><a href='#L30'>30</a>
90
+ <a name='L31'></a><a href='#L31'>31</a>
91
+ <a name='L32'></a><a href='#L32'>32</a>
92
+ <a name='L33'></a><a href='#L33'>33</a>
93
+ <a name='L34'></a><a href='#L34'>34</a>
94
+ <a name='L35'></a><a href='#L35'>35</a>
95
+ <a name='L36'></a><a href='#L36'>36</a>
96
+ <a name='L37'></a><a href='#L37'>37</a>
97
+ <a name='L38'></a><a href='#L38'>38</a>
98
+ <a name='L39'></a><a href='#L39'>39</a>
99
+ <a name='L40'></a><a href='#L40'>40</a>
100
+ <a name='L41'></a><a href='#L41'>41</a>
101
+ <a name='L42'></a><a href='#L42'>42</a>
102
+ <a name='L43'></a><a href='#L43'>43</a>
103
+ <a name='L44'></a><a href='#L44'>44</a>
104
+ <a name='L45'></a><a href='#L45'>45</a>
105
+ <a name='L46'></a><a href='#L46'>46</a>
106
+ <a name='L47'></a><a href='#L47'>47</a>
107
+ <a name='L48'></a><a href='#L48'>48</a>
108
+ <a name='L49'></a><a href='#L49'>49</a>
109
+ <a name='L50'></a><a href='#L50'>50</a>
110
+ <a name='L51'></a><a href='#L51'>51</a>
111
+ <a name='L52'></a><a href='#L52'>52</a>
112
+ <a name='L53'></a><a href='#L53'>53</a>
113
+ <a name='L54'></a><a href='#L54'>54</a>
114
+ <a name='L55'></a><a href='#L55'>55</a>
115
+ <a name='L56'></a><a href='#L56'>56</a>
116
+ <a name='L57'></a><a href='#L57'>57</a>
117
+ <a name='L58'></a><a href='#L58'>58</a>
118
+ <a name='L59'></a><a href='#L59'>59</a>
119
+ <a name='L60'></a><a href='#L60'>60</a>
120
+ <a name='L61'></a><a href='#L61'>61</a>
121
+ <a name='L62'></a><a href='#L62'>62</a>
122
+ <a name='L63'></a><a href='#L63'>63</a>
123
+ <a name='L64'></a><a href='#L64'>64</a>
124
+ <a name='L65'></a><a href='#L65'>65</a>
125
+ <a name='L66'></a><a href='#L66'>66</a>
126
+ <a name='L67'></a><a href='#L67'>67</a>
127
+ <a name='L68'></a><a href='#L68'>68</a>
128
+ <a name='L69'></a><a href='#L69'>69</a>
129
+ <a name='L70'></a><a href='#L70'>70</a>
130
+ <a name='L71'></a><a href='#L71'>71</a>
131
+ <a name='L72'></a><a href='#L72'>72</a>
132
+ <a name='L73'></a><a href='#L73'>73</a>
133
+ <a name='L74'></a><a href='#L74'>74</a>
134
+ <a name='L75'></a><a href='#L75'>75</a>
135
+ <a name='L76'></a><a href='#L76'>76</a>
136
+ <a name='L77'></a><a href='#L77'>77</a>
137
+ <a name='L78'></a><a href='#L78'>78</a>
138
+ <a name='L79'></a><a href='#L79'>79</a>
139
+ <a name='L80'></a><a href='#L80'>80</a>
140
+ <a name='L81'></a><a href='#L81'>81</a>
141
+ <a name='L82'></a><a href='#L82'>82</a>
142
+ <a name='L83'></a><a href='#L83'>83</a>
143
+ <a name='L84'></a><a href='#L84'>84</a>
144
+ <a name='L85'></a><a href='#L85'>85</a>
145
+ <a name='L86'></a><a href='#L86'>86</a>
146
+ <a name='L87'></a><a href='#L87'>87</a>
147
+ <a name='L88'></a><a href='#L88'>88</a>
148
+ <a name='L89'></a><a href='#L89'>89</a>
149
+ <a name='L90'></a><a href='#L90'>90</a>
150
+ <a name='L91'></a><a href='#L91'>91</a>
151
+ <a name='L92'></a><a href='#L92'>92</a>
152
+ <a name='L93'></a><a href='#L93'>93</a>
153
+ <a name='L94'></a><a href='#L94'>94</a>
154
+ <a name='L95'></a><a href='#L95'>95</a>
155
+ <a name='L96'></a><a href='#L96'>96</a>
156
+ <a name='L97'></a><a href='#L97'>97</a>
157
+ <a name='L98'></a><a href='#L98'>98</a>
158
+ <a name='L99'></a><a href='#L99'>99</a>
159
+ <a name='L100'></a><a href='#L100'>100</a>
160
+ <a name='L101'></a><a href='#L101'>101</a>
161
+ <a name='L102'></a><a href='#L102'>102</a>
162
+ <a name='L103'></a><a href='#L103'>103</a>
163
+ <a name='L104'></a><a href='#L104'>104</a>
164
+ <a name='L105'></a><a href='#L105'>105</a>
165
+ <a name='L106'></a><a href='#L106'>106</a>
166
+ <a name='L107'></a><a href='#L107'>107</a>
167
+ <a name='L108'></a><a href='#L108'>108</a>
168
+ <a name='L109'></a><a href='#L109'>109</a>
169
+ <a name='L110'></a><a href='#L110'>110</a>
170
+ <a name='L111'></a><a href='#L111'>111</a>
171
+ <a name='L112'></a><a href='#L112'>112</a>
172
+ <a name='L113'></a><a href='#L113'>113</a>
173
+ <a name='L114'></a><a href='#L114'>114</a>
174
+ <a name='L115'></a><a href='#L115'>115</a>
175
+ <a name='L116'></a><a href='#L116'>116</a>
176
+ <a name='L117'></a><a href='#L117'>117</a>
177
+ <a name='L118'></a><a href='#L118'>118</a>
178
+ <a name='L119'></a><a href='#L119'>119</a>
179
+ <a name='L120'></a><a href='#L120'>120</a>
180
+ <a name='L121'></a><a href='#L121'>121</a>
181
+ <a name='L122'></a><a href='#L122'>122</a>
182
+ <a name='L123'></a><a href='#L123'>123</a>
183
+ <a name='L124'></a><a href='#L124'>124</a>
184
+ <a name='L125'></a><a href='#L125'>125</a>
185
+ <a name='L126'></a><a href='#L126'>126</a>
186
+ <a name='L127'></a><a href='#L127'>127</a>
187
+ <a name='L128'></a><a href='#L128'>128</a>
188
+ <a name='L129'></a><a href='#L129'>129</a>
189
+ <a name='L130'></a><a href='#L130'>130</a>
190
+ <a name='L131'></a><a href='#L131'>131</a>
191
+ <a name='L132'></a><a href='#L132'>132</a>
192
+ <a name='L133'></a><a href='#L133'>133</a>
193
+ <a name='L134'></a><a href='#L134'>134</a>
194
+ <a name='L135'></a><a href='#L135'>135</a>
195
+ <a name='L136'></a><a href='#L136'>136</a>
196
+ <a name='L137'></a><a href='#L137'>137</a>
197
+ <a name='L138'></a><a href='#L138'>138</a>
198
+ <a name='L139'></a><a href='#L139'>139</a>
199
+ <a name='L140'></a><a href='#L140'>140</a>
200
+ <a name='L141'></a><a href='#L141'>141</a>
201
+ <a name='L142'></a><a href='#L142'>142</a>
202
+ <a name='L143'></a><a href='#L143'>143</a>
203
+ <a name='L144'></a><a href='#L144'>144</a>
204
+ <a name='L145'></a><a href='#L145'>145</a>
205
+ <a name='L146'></a><a href='#L146'>146</a>
206
+ <a name='L147'></a><a href='#L147'>147</a>
207
+ <a name='L148'></a><a href='#L148'>148</a>
208
+ <a name='L149'></a><a href='#L149'>149</a>
209
+ <a name='L150'></a><a href='#L150'>150</a>
210
+ <a name='L151'></a><a href='#L151'>151</a>
211
+ <a name='L152'></a><a href='#L152'>152</a>
212
+ <a name='L153'></a><a href='#L153'>153</a>
213
+ <a name='L154'></a><a href='#L154'>154</a>
214
+ <a name='L155'></a><a href='#L155'>155</a>
215
+ <a name='L156'></a><a href='#L156'>156</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-neutral">&nbsp;</span>
217
+ <span class="cline-any cline-neutral">&nbsp;</span>
218
+ <span class="cline-any cline-yes">9x</span>
219
+ <span class="cline-any cline-yes">9x</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-neutral">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-neutral">&nbsp;</span>
227
+ <span class="cline-any cline-neutral">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-neutral">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-yes">111x</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-yes">8x</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">73x</span>
242
+ <span class="cline-any cline-neutral">&nbsp;</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-yes">29x</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-neutral">&nbsp;</span>
247
+ <span class="cline-any cline-yes">1x</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-neutral">&nbsp;</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-neutral">&nbsp;</span>
264
+ <span class="cline-any cline-neutral">&nbsp;</span>
265
+ <span class="cline-any cline-yes">108x</span>
266
+ <span class="cline-any cline-yes">107x</span>
267
+ <span class="cline-any cline-neutral">&nbsp;</span>
268
+ <span class="cline-any cline-neutral">&nbsp;</span>
269
+ <span class="cline-any cline-neutral">&nbsp;</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-neutral">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span>
279
+ <span class="cline-any cline-neutral">&nbsp;</span>
280
+ <span class="cline-any cline-neutral">&nbsp;</span>
281
+ <span class="cline-any cline-yes">909x</span>
282
+ <span class="cline-any cline-yes">18x</span>
283
+ <span class="cline-any cline-neutral">&nbsp;</span>
284
+ <span class="cline-any cline-neutral">&nbsp;</span>
285
+ <span class="cline-any cline-yes">891x</span>
286
+ <span class="cline-any cline-neutral">&nbsp;</span>
287
+ <span class="cline-any cline-neutral">&nbsp;</span>
288
+ <span class="cline-any cline-neutral">&nbsp;</span>
289
+ <span class="cline-any cline-neutral">&nbsp;</span>
290
+ <span class="cline-any cline-neutral">&nbsp;</span>
291
+ <span class="cline-any cline-neutral">&nbsp;</span>
292
+ <span class="cline-any cline-neutral">&nbsp;</span>
293
+ <span class="cline-any cline-neutral">&nbsp;</span>
294
+ <span class="cline-any cline-neutral">&nbsp;</span>
295
+ <span class="cline-any cline-neutral">&nbsp;</span>
296
+ <span class="cline-any cline-neutral">&nbsp;</span>
297
+ <span class="cline-any cline-yes">8x</span>
298
+ <span class="cline-any cline-neutral">&nbsp;</span>
299
+ <span class="cline-any cline-neutral">&nbsp;</span>
300
+ <span class="cline-any cline-neutral">&nbsp;</span>
301
+ <span class="cline-any cline-neutral">&nbsp;</span>
302
+ <span class="cline-any cline-neutral">&nbsp;</span>
303
+ <span class="cline-any cline-neutral">&nbsp;</span>
304
+ <span class="cline-any cline-neutral">&nbsp;</span>
305
+ <span class="cline-any cline-neutral">&nbsp;</span>
306
+ <span class="cline-any cline-neutral">&nbsp;</span>
307
+ <span class="cline-any cline-neutral">&nbsp;</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span>
309
+ <span class="cline-any cline-neutral">&nbsp;</span>
310
+ <span class="cline-any cline-neutral">&nbsp;</span>
311
+ <span class="cline-any cline-yes">130x</span>
312
+ <span class="cline-any cline-neutral">&nbsp;</span>
313
+ <span class="cline-any cline-neutral">&nbsp;</span>
314
+ <span class="cline-any cline-neutral">&nbsp;</span>
315
+ <span class="cline-any cline-neutral">&nbsp;</span>
316
+ <span class="cline-any cline-neutral">&nbsp;</span>
317
+ <span class="cline-any cline-neutral">&nbsp;</span>
318
+ <span class="cline-any cline-neutral">&nbsp;</span>
319
+ <span class="cline-any cline-neutral">&nbsp;</span>
320
+ <span class="cline-any cline-neutral">&nbsp;</span>
321
+ <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">9x</span>
323
+ <span class="cline-any cline-neutral">&nbsp;</span>
324
+ <span class="cline-any cline-neutral">&nbsp;</span>
325
+ <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-neutral">&nbsp;</span>
327
+ <span class="cline-any cline-neutral">&nbsp;</span>
328
+ <span class="cline-any cline-neutral">&nbsp;</span>
329
+ <span class="cline-any cline-neutral">&nbsp;</span>
330
+ <span class="cline-any cline-neutral">&nbsp;</span>
331
+ <span class="cline-any cline-neutral">&nbsp;</span>
332
+ <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-neutral">&nbsp;</span>
334
+ <span class="cline-any cline-neutral">&nbsp;</span>
335
+ <span class="cline-any cline-neutral">&nbsp;</span>
336
+ <span class="cline-any cline-yes">129x</span>
337
+ <span class="cline-any cline-neutral">&nbsp;</span>
338
+ <span class="cline-any cline-neutral">&nbsp;</span>
339
+ <span class="cline-any cline-neutral">&nbsp;</span>
340
+ <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-neutral">&nbsp;</span>
342
+ <span class="cline-any cline-neutral">&nbsp;</span>
343
+ <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-neutral">&nbsp;</span>
345
+ <span class="cline-any cline-neutral">&nbsp;</span>
346
+ <span class="cline-any cline-neutral">&nbsp;</span>
347
+ <span class="cline-any cline-neutral">&nbsp;</span>
348
+ <span class="cline-any cline-neutral">&nbsp;</span>
349
+ <span class="cline-any cline-yes">9x</span>
350
+ <span class="cline-any cline-yes">273x</span>
351
+ <span class="cline-any cline-yes">273x</span>
352
+ <span class="cline-any cline-yes">273x</span>
353
+ <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-neutral">&nbsp;</span>
355
+ <span class="cline-any cline-neutral">&nbsp;</span>
356
+ <span class="cline-any cline-neutral">&nbsp;</span>
357
+ <span class="cline-any cline-neutral">&nbsp;</span>
358
+ <span class="cline-any cline-neutral">&nbsp;</span>
359
+ <span class="cline-any cline-neutral">&nbsp;</span>
360
+ <span class="cline-any cline-neutral">&nbsp;</span>
361
+ <span class="cline-any cline-neutral">&nbsp;</span>
362
+ <span class="cline-any cline-neutral">&nbsp;</span>
363
+ <span class="cline-any cline-neutral">&nbsp;</span>
364
+ <span class="cline-any cline-neutral">&nbsp;</span>
365
+ <span class="cline-any cline-neutral">&nbsp;</span>
366
+ <span class="cline-any cline-yes">200x</span>
367
+ <span class="cline-any cline-yes">200x</span>
368
+ <span class="cline-any cline-neutral">&nbsp;</span>
369
+ <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { BloodGlucoseUnit, BloodKetonesUnit, UserSettings } from "@hedia/types";
371
+ import { IInterval } from "../types/types";
372
+ import { MGDL_PER_MMOLL_BGL, MGDL_PER_MMOLL_BKL } from "./Constants";
373
+ const InjectionMethod = UserSettings.Enums.InjectionMethod;
374
+ const { PenHalf, PenWhole, Pump } = InjectionMethod;
375
+ &nbsp;
376
+ /** Helper functions used for displaying data to the user. */
377
+ export class Utils {
378
+ /**
379
+ * Get the inverse of the precision to an insulin amount should be rounded based on the user’s injection method.
380
+ *
381
+ * Steps:
382
+ * 1. Use a switch statement to return the appropriate number depending on the value of the method argument:
383
+ * - If PenWhole, return 1.
384
+ * - If PenHalf, return 2.
385
+ * - If Pump, return 10.
386
+ * - Otherwise throw an exception.
387
+ * @param method The method by which the user injects insulin.
388
+ * @returns The inverse of the precision to which an insulin amount should be rounded based on the user’s injection method.
389
+ */
390
+ public static getRounding(method: UserSettings.Enums.InjectionMethod): number {
391
+ switch (method) {
392
+ case PenWhole:
393
+ return 1;
394
+ &nbsp;
395
+ case PenHalf:
396
+ return 2;
397
+ &nbsp;
398
+ case Pump:
399
+ return 10;
400
+ &nbsp;
401
+ default:
402
+ throw Error(`Unsupported InjectionMethod: ${method}`);
403
+ }
404
+ }
405
+ &nbsp;
406
+ /**
407
+ * Round an insulin amount to the precision that is dictated by the user’s injection method.
408
+ *
409
+ * Steps:
410
+ * 1. Get the inverse rounding precision by calling getRounding() with injectMethod as argument.
411
+ * 2. Return the rounded insulin amount calculated by the following operations:
412
+ * - Multiply the insulin value prop by the inverse rounding precision.
413
+ * - Round to the nearest whole number.
414
+ * - Divide by the inverse rounding precision and return the result.
415
+ * @param value The amount of insulin to be rounded.
416
+ * @param injectMethod The method by which the user injects insulin.
417
+ * @returns The rounded insulin amount.
418
+ */
419
+ public static roundValue(value: number, injectMethod: UserSettings.Enums.InjectionMethod): number {
420
+ const rounding: number = Utils.getRounding(injectMethod);
421
+ return Math.round(value * rounding) / rounding;
422
+ }
423
+ &nbsp;
424
+ /**
425
+ * Determine whether a numerical value is in the given closed interval.
426
+ *
427
+ * Steps:
428
+ * 1. If value is null then return false. (Note that we only need to check explicitly for null comparing it
429
+ * to a number returns true while comparing undefined to a number returns false).
430
+ * 2. Evaluate whether value &gt;= the interval argument’s min property &amp;&amp; value &lt;= the interval argument’s max property and return the result.
431
+ * @param value The number that will be checked for membership of the interval.
432
+ * @param interval The interval to compare the value to.
433
+ * @returns Boolean value indicating whether the value is in the closed interval.
434
+ */
435
+ public static isInRange(value: number | null, interval: IInterval): boolean {
436
+ if (value === null) {
437
+ return false;
438
+ }
439
+ &nbsp;
440
+ return value &gt;= interval.min &amp;&amp; value &lt;= interval.max;
441
+ }
442
+ &nbsp;
443
+ /**
444
+ * Convert a blood glucose level value from mmol/L to mg/dL.
445
+ *
446
+ * Steps:
447
+ * 1. Return the result of rounding the product of multiplying value with MGDL_PER_MMOLL_BGL.
448
+ * @param value The blood glucose level value in mmol/L to be converted.
449
+ * @returns The blood glucose value in mg/dL that corresponds to the given value in mmol/L.
450
+ */
451
+ public static convertBGLToMGDL(value: number): number {
452
+ return Math.round(value * MGDL_PER_MMOLL_BGL);
453
+ }
454
+ &nbsp;
455
+ /**
456
+ * Depending on the blood glucose unit passed, returns the value as a string or returns a stringified call to the convertBGLToMGDL method.
457
+ *
458
+ * Steps:
459
+ * 1. Using a ternary operator on the unit argument return the passed value argument in case unit is a MMOL_L.
460
+ * Otherwise, return a call to the convertBGLToMGDL method with the value passed as an argument.
461
+ * @param value The blood glucose level value in mmol/L to be converted.
462
+ * @param unit The blood glucose measurement unit.
463
+ * @returns The blood glucose value that will be displayed to the user.
464
+ */
465
+ public static displayedBGLValue(value: number, unit: BloodGlucoseUnit): string {
466
+ return unit === BloodGlucoseUnit.MMOL_L ? value.toFixed(1) : `${Utils.convertBGLToMGDL(value)}`;
467
+ }
468
+ &nbsp;
469
+ /**
470
+ * Convert a blood ketones concentration from mmol/L to mg/dL.
471
+ * Steps:
472
+ * 1. Return the result of rounding the product of multiplying value with MGDL_PER_MMOLL_BKL.
473
+ * @param value The blood ketones concentration in mmol/L to be converted.
474
+ * @returns The blood ketones concentration in mg/dL that corresponds to the given value in mmol/L.
475
+ */
476
+ public static convertBKLToMGDL(value: number): number {
477
+ return Math.round(value * MGDL_PER_MMOLL_BKL);
478
+ }
479
+ &nbsp;
480
+ /**
481
+ * Depending on the blood ketone unit passed, returns the value as a string or returns a call to the convertBKLToMGDL method.
482
+ *
483
+ * Steps:
484
+ * 1. Using a ternary operator on the unit argument return the passed value argument in case unit is a MMOL_L.
485
+ * Otherwise, return a call to the convertBKLToMGDL method with the value passed as an argument.
486
+ * @param value The blood ketone level value in mmol/L to be converted.
487
+ * @param unit The blood ketone measurement unit.
488
+ * @returns The blood ketone value that will be displayed to the user.
489
+ */
490
+ public static displayedBKLValue(value: number, unit: BloodKetonesUnit): string {
491
+ return unit === BloodKetonesUnit.MMOL_L ? value.toFixed(1) : `${Utils.convertBKLToMGDL(value)}`;
492
+ }
493
+ &nbsp;
494
+ /**
495
+ * Format a measurement unit for displaying to the user. More concrete, it is used to display the litre symbol with uppercase "L".
496
+ *
497
+ * Steps:
498
+ * 1. Set unitWithoutLastLetter to be unit except for the last character.
499
+ * 2. Set lastLetterUppercase to be the last letter of unit converted to uppercase.
500
+ * 3. Return unitWithoutLastLetter concatenated with lastLetterUppercase.
501
+ * @param unit The measurement unit to format.
502
+ * @returns The measurement unit formatted for displaying to the user.
503
+ */
504
+ public static formatUnit = (unit: BloodGlucoseUnit | BloodKetonesUnit): string =&gt; {
505
+ const unitWithoutLastLetter = unit.substring(0, unit.length - 1);
506
+ const lastLetterUppercase = unit.substring(unit.length - 1, unit.length).toUpperCase();
507
+ return `${unitWithoutLastLetter}${lastLetterUppercase}`;
508
+ };
509
+ &nbsp;
510
+ /**
511
+ * Returns the key of key/value object when passing the key value as argument.
512
+ *
513
+ * Steps:
514
+ * 1. Save all the values of the keys object into the values constant
515
+ * 2. From the array of keys, return the one at the index of the first occurence of the value in the values constant
516
+ * @param keys The keys of the T object.
517
+ * @param value The value for the requested key.
518
+ * @returns The key of the passed value.
519
+ */
520
+ public static getKeyFromValue&lt;T&gt;(keys: T, value: T[keyof T]): keyof T {
521
+ const values = Object.values(keys);
522
+ return Object.keys(keys)[values.indexOf(value)] as keyof T;
523
+ }
524
+ }
525
+ &nbsp;</pre></td></tr></table></pre>
526
+
527
+ <div class='push'></div><!-- for sticky footer -->
528
+ </div><!-- /wrapper -->
529
+ <div class='footer quiet pad2 space-top1 center small'>
530
+ Code coverage generated by
531
+ <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
532
+ at Thu Sep 23 2021 09:47:17 GMT+0000 (Coordinated Universal Time)
533
+ </div>
534
+ </div>
535
+ <script src="../../prettify.js"></script>
536
+ <script>
537
+ window.onload = function () {
538
+ prettyPrint();
539
+ };
540
+ </script>
541
+ <script src="../../sorter.js"></script>
542
+ <script src="../../block-navigation.js"></script>
543
+ </body>
544
+ </html>
545
+