1
1
import PropTypes from 'prop-types' ;
2
2
import React , { PureComponent } from 'react' ;
3
+ import { withTranslation } from 'react-i18next' ;
3
4
import _ from 'lodash' ;
4
5
import bows from 'bows' ;
5
6
import cx from 'classnames' ;
6
7
import { SizeMe } from 'react-sizeme' ;
7
8
import { VictoryBar , VictoryContainer } from 'victory' ;
8
9
import { Collapse } from 'react-collapse' ;
9
10
10
- import { formatPercentage } from '../../../utils/format' ;
11
- import { MGDL_UNITS , MGDL_CLAMP_TOP , MMOLL_CLAMP_TOP } from '../../../utils/constants' ;
11
+ import { formatPercentage , formatDecimalNumber } from '../../../utils/format' ;
12
+ import {
13
+ MGDL_UNITS ,
14
+ MMOLL_UNITS ,
15
+ MGDL_CLAMP_TOP ,
16
+ MMOLL_CLAMP_TOP ,
17
+ ADA_STANDARD_BG_BOUNDS
18
+ } from '../../../utils/constants' ;
12
19
import { statFormats , statTypes , formatDatum } from '../../../utils/stat' ;
13
20
import styles from './Stat.css' ;
14
21
import colors from '../../../styles/colors.css' ;
@@ -117,6 +124,18 @@ class Stat extends PureComponent {
117
124
this . chartProps = this . getChartPropsByType ( nextProps ) ;
118
125
}
119
126
127
+ hasNonStandardTargets = ( ) => {
128
+ const {
129
+ bgUnits = MGDL_UNITS ,
130
+ bgBounds = ADA_STANDARD_BG_BOUNDS ,
131
+ } = this . props . bgPrefs || { } ;
132
+
133
+ return (
134
+ bgBounds . targetLowerBound !== ADA_STANDARD_BG_BOUNDS [ bgUnits ] . targetLowerBound ||
135
+ bgBounds . targetUpperBound !== ADA_STANDARD_BG_BOUNDS [ bgUnits ] . targetUpperBound
136
+ ) ;
137
+ } ;
138
+
120
139
renderChartTitle = ( ) => {
121
140
const isDatumHovered = this . state . hoveredDatumIndex >= 0 ;
122
141
@@ -206,6 +225,32 @@ class Stat extends PureComponent {
206
225
) ;
207
226
} ;
208
227
228
+ renderNonStandardTargetsWarning = ( ) => {
229
+ const isRendered = (
230
+ this . hasNonStandardTargets ( ) &&
231
+ this . props . id === 'timeInRange' &&
232
+ this . state . isOpened
233
+ ) ;
234
+
235
+ if ( ! isRendered ) return null ;
236
+
237
+ const { targetLowerBound, targetUpperBound } = this . props . bgPrefs ?. bgBounds || { } ;
238
+ const { bgUnits } = this . props . bgPrefs || { } ;
239
+
240
+ const bgPrecision = this . props . bgPrefs ?. bgUnits === MMOLL_UNITS ? 1 : 0 ;
241
+ const lowerTarget = formatDecimalNumber ( targetLowerBound , bgPrecision ) ;
242
+ const upperTarget = formatDecimalNumber ( targetUpperBound , bgPrecision ) ;
243
+
244
+ return (
245
+ < div className = { styles . statHeaderNonStandardWarning } >
246
+ { this . props . t (
247
+ `Using non-standard targets (${ lowerTarget } -${ upperTarget } ${ bgUnits } )` ,
248
+ { lowerTarget, upperTarget, bgUnits : this . props . bgPrefs ?. bgUnits }
249
+ ) }
250
+ </ div >
251
+ ) ;
252
+ } ;
253
+
209
254
renderStatUnits = ( ) => (
210
255
< div className = { styles . units } >
211
256
{ this . props . units }
@@ -218,12 +263,23 @@ class Stat extends PureComponent {
218
263
</ div >
219
264
) ;
220
265
221
- renderStatHeader = ( ) => (
222
- < div className = { styles . statHeader } >
223
- { this . renderChartTitle ( ) }
224
- { this . renderChartSummary ( ) }
225
- </ div >
226
- ) ;
266
+ renderStatHeader = ( ) => {
267
+ const hasNonStandardTargetStyles = this . hasNonStandardTargets ( ) && this . props . id === 'timeInRange' ;
268
+
269
+ const containerStyles = hasNonStandardTargetStyles
270
+ ? styles . statHeaderContainerNonStandardTargets
271
+ : styles . statHeaderContainer ;
272
+
273
+ return (
274
+ < div className = { containerStyles } >
275
+ < div className = { styles . statHeader } >
276
+ { this . renderChartTitle ( ) }
277
+ { this . renderChartSummary ( ) }
278
+ </ div >
279
+ { this . renderNonStandardTargetsWarning ( ) }
280
+ </ div >
281
+ ) ;
282
+ } ;
227
283
228
284
renderStatFooter = ( ) => (
229
285
< div className = { styles . statFooter } >
@@ -778,4 +834,8 @@ class Stat extends PureComponent {
778
834
} ;
779
835
}
780
836
781
- export default Stat ;
837
+ export {
838
+ Stat
839
+ } ;
840
+
841
+ export default withTranslation ( ) ( Stat ) ;
0 commit comments