Skip to content

Commit 079da76

Browse files
authored
Merge branch 'develop' into WEB-3841-pdf-bolus-limit
2 parents ecce2ff + d8fb7c2 commit 079da76

36 files changed

+1141
-360
lines changed

src/components/common/stat/Stat.css

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
background-color: var(--bkgrnd-white);
88
border-radius: 8px;
99
border: 1px solid var(--stat--border);
10+
overflow: hidden;
1011
}
1112

1213
.Stat tspan {
@@ -24,6 +25,22 @@
2425
overflow: hidden;
2526
}
2627

28+
.statHeaderContainerNonStandardTargets {
29+
background: #F0F5FF;
30+
margin-top: -0.25em;
31+
margin-bottom: 0.75em;
32+
padding-top: 0.25em;
33+
padding-bottom: 0.5em;
34+
}
35+
36+
.statHeaderNonStandardWarning {
37+
position: relative;
38+
top: -4px;
39+
margin: 0 0.625em;
40+
font-style: italic;
41+
font-size: 14px;
42+
}
43+
2744
.statMain {
2845
padding: 0 0.625em;
2946
overflow: hidden;

src/components/common/stat/Stat.js

Lines changed: 69 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
import PropTypes from 'prop-types';
22
import React, { PureComponent } from 'react';
3+
import { withTranslation } from 'react-i18next';
34
import _ from 'lodash';
45
import bows from 'bows';
56
import cx from 'classnames';
67
import { SizeMe } from 'react-sizeme';
78
import { VictoryBar, VictoryContainer } from 'victory';
89
import { Collapse } from 'react-collapse';
910

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';
1219
import { statFormats, statTypes, formatDatum } from '../../../utils/stat';
1320
import styles from './Stat.css';
1421
import colors from '../../../styles/colors.css';
@@ -117,6 +124,18 @@ class Stat extends PureComponent {
117124
this.chartProps = this.getChartPropsByType(nextProps);
118125
}
119126

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+
120139
renderChartTitle = () => {
121140
const isDatumHovered = this.state.hoveredDatumIndex >= 0;
122141

@@ -206,6 +225,32 @@ class Stat extends PureComponent {
206225
);
207226
};
208227

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+
209254
renderStatUnits = () => (
210255
<div className={styles.units}>
211256
{this.props.units}
@@ -218,12 +263,23 @@ class Stat extends PureComponent {
218263
</div>
219264
);
220265

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+
};
227283

228284
renderStatFooter = () => (
229285
<div className={styles.statFooter}>
@@ -778,4 +834,8 @@ class Stat extends PureComponent {
778834
};
779835
}
780836

781-
export default Stat;
837+
export {
838+
Stat
839+
};
840+
841+
export default withTranslation()(Stat);

src/components/trends/cbg/CBGDateTraceAnimated.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ export class CBGDateTraceAnimated extends PureComponent {
1616
static propTypes = {
1717
animationDuration: PropTypes.number.isRequired,
1818
bgBounds: PropTypes.shape({
19-
veryHighThreshold: PropTypes.number.isRequired,
19+
veryHighThreshold: PropTypes.number,
2020
targetUpperBound: PropTypes.number.isRequired,
2121
targetLowerBound: PropTypes.number.isRequired,
22-
veryLowThreshold: PropTypes.number.isRequired,
22+
veryLowThreshold: PropTypes.number,
2323
}).isRequired,
2424
bgUnits: PropTypes.string.isRequired,
2525
cbgRadius: PropTypes.number.isRequired,

src/components/trends/cbg/CBGDateTracesAnimationContainer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ const CBGDateTracesAnimationContainer = (props) => {
3030

3131
CBGDateTracesAnimationContainer.propTypes = {
3232
bgBounds: PropTypes.shape({
33-
veryHighThreshold: PropTypes.number.isRequired,
33+
veryHighThreshold: PropTypes.number,
3434
targetUpperBound: PropTypes.number.isRequired,
3535
targetLowerBound: PropTypes.number.isRequired,
36-
veryLowThreshold: PropTypes.number.isRequired,
36+
veryLowThreshold: PropTypes.number,
3737
}).isRequired,
3838
data: PropTypes.object,
3939
dates: PropTypes.arrayOf(PropTypes.string),

src/components/trends/cbg/CBGMedianAnimated.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ export class CBGMedianAnimated extends PureComponent {
1717

1818
static propTypes = {
1919
bgBounds: PropTypes.shape({
20-
veryHighThreshold: PropTypes.number.isRequired,
20+
veryHighThreshold: PropTypes.number,
2121
targetUpperBound: PropTypes.number.isRequired,
2222
targetLowerBound: PropTypes.number.isRequired,
23-
veryLowThreshold: PropTypes.number.isRequired,
23+
veryLowThreshold: PropTypes.number,
2424
}).isRequired,
2525
bgUnits: PropTypes.string.isRequired,
2626
datum: PropTypes.shape({

src/components/trends/cbg/CBGSliceAnimated.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ export class CBGSliceAnimated extends PureComponent {
1818

1919
static propTypes = {
2020
bgBounds: PropTypes.shape({
21-
veryHighThreshold: PropTypes.number.isRequired,
21+
veryHighThreshold: PropTypes.number,
2222
targetUpperBound: PropTypes.number.isRequired,
2323
targetLowerBound: PropTypes.number.isRequired,
24-
veryLowThreshold: PropTypes.number.isRequired,
24+
veryLowThreshold: PropTypes.number,
2525
}).isRequired,
2626
datum: PropTypes.shape({
2727
firstQuartile: PropTypes.number,

src/components/trends/cbg/CBGSlicesContainer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ import CBGSliceAnimated from './CBGSliceAnimated';
1010
export default class CBGSlicesContainer extends PureComponent {
1111
static propTypes = {
1212
bgBounds: PropTypes.shape({
13-
veryHighThreshold: PropTypes.number.isRequired,
13+
veryHighThreshold: PropTypes.number,
1414
targetUpperBound: PropTypes.number.isRequired,
1515
targetLowerBound: PropTypes.number.isRequired,
16-
veryLowThreshold: PropTypes.number.isRequired,
16+
veryLowThreshold: PropTypes.number,
1717
}).isRequired,
1818
bgUnits: PropTypes.string.isRequired,
1919
binSize: PropTypes.number.isRequired,

src/components/trends/common/TargetRangeLines.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ const TargetRangeLines = (props) => {
4848

4949
TargetRangeLines.propTypes = {
5050
bgBounds: PropTypes.shape({
51-
veryHighThreshold: PropTypes.number.isRequired,
51+
veryHighThreshold: PropTypes.number,
5252
targetUpperBound: PropTypes.number.isRequired,
5353
targetLowerBound: PropTypes.number.isRequired,
54-
veryLowThreshold: PropTypes.number.isRequired,
54+
veryLowThreshold: PropTypes.number,
5555
}),
5656
smbgOpts: PropTypes.shape({
5757
maxR: PropTypes.number.isRequired,

src/components/trends/common/TrendsContainer.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,10 @@ export class TrendsContainer extends PureComponent {
9999
}).isRequired,
100100
bgPrefs: PropTypes.shape({
101101
bgBounds: PropTypes.shape({
102-
veryHighThreshold: PropTypes.number.isRequired,
102+
veryHighThreshold: PropTypes.number,
103103
targetUpperBound: PropTypes.number.isRequired,
104104
targetLowerBound: PropTypes.number.isRequired,
105-
veryLowThreshold: PropTypes.number.isRequired,
105+
veryLowThreshold: PropTypes.number,
106106
}).isRequired,
107107
bgUnits: PropTypes.oneOf([MGDL_UNITS, MMOLL_UNITS]).isRequired,
108108
}).isRequired,
@@ -275,10 +275,12 @@ export class TrendsContainer extends PureComponent {
275275
const currentSmbgData = _.filter(allBg, { type: 'smbg' });
276276

277277
const { bgPrefs: { bgBounds, bgUnits }, yScaleClampTop, mostRecentDatetimeLocation } = props;
278+
278279
const upperBound = yScaleClampTop[bgUnits];
279280
const yScaleDomain = [bgDomain[0], upperBound];
280-
if (!bgDomain[0] || bgDomain[0] > bgBounds.veryLowThreshold) {
281-
yScaleDomain[0] = bgBounds.veryLowThreshold;
281+
const lowestThreshold = _.isNil(bgBounds.veryLowThreshold) ? bgBounds.targetLowerBound : bgBounds.veryLowThreshold;
282+
if (!bgDomain[0] || bgDomain[0] > lowestThreshold) {
283+
yScaleDomain[0] = lowestThreshold;
282284
}
283285
const yScale = scaleLinear().domain(yScaleDomain).clamp(true);
284286

src/components/trends/common/TrendsSVGContainer.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,10 +336,10 @@ TrendsSVGContainer.propTypes = {
336336
}).isRequired,
337337
bgPrefs: PropTypes.shape({
338338
bgBounds: PropTypes.shape({
339-
veryHighThreshold: PropTypes.number.isRequired,
339+
veryHighThreshold: PropTypes.number,
340340
targetUpperBound: PropTypes.number.isRequired,
341341
targetLowerBound: PropTypes.number.isRequired,
342-
veryLowThreshold: PropTypes.number.isRequired,
342+
veryLowThreshold: PropTypes.number,
343343
}).isRequired,
344344
bgUnits: PropTypes.oneOf([MGDL_UNITS, MMOLL_UNITS]).isRequired,
345345
}).isRequired,

0 commit comments

Comments
 (0)