@@ -38,21 +38,38 @@ const findLatestMills = (data) => {
38
38
39
39
function mergeProcessSort ( oldData , newData , ageLimit ) {
40
40
41
- processForRuntime ( newData ) ;
41
+ processForRuntime ( newData ) ;
42
42
43
43
var filtered = _ . filter ( newData , function hasId ( object ) {
44
44
const hasId = ! _ . isEmpty ( object . _id ) ;
45
45
const isFresh = ( ageLimit && object . mills >= ageLimit ) || ( ! ageLimit ) ;
46
46
return isFresh && hasId ;
47
47
} ) ;
48
48
49
- const merged = _ . unionWith ( oldData , filtered , function ( a , b ) {
50
- return a . _id == b . _id ;
51
- } ) ;
49
+ // Merge old and new data, preferring the new objects
50
+
51
+ let merged = [ ] ;
52
+ if ( oldData && filtered ) {
53
+ merged = filtered ; // Start with the new / updated data
54
+ for ( let i = 0 ; i < oldData . length ; i ++ ) {
55
+ const oldElement = oldData [ i ] ;
56
+ let found = false ;
57
+ for ( let j = 0 ; j < filtered . length ; j ++ ) {
58
+ if ( oldElement . _id == filtered [ j ] . _id ) {
59
+ found = true ;
60
+ break ;
61
+ }
62
+ }
63
+ if ( ! found ) merged . push ( oldElement ) ; // Merge old object in, if it wasn't found in the new data
64
+ }
65
+ } else {
66
+ merged = filtered ;
67
+ }
52
68
53
69
return _ . sortBy ( merged , function ( item ) {
54
70
return item . mills ;
55
71
} ) ;
72
+
56
73
}
57
74
58
75
function init ( env , ctx ) {
@@ -78,13 +95,17 @@ function init(env, ctx) {
78
95
}
79
96
ddata . lastUpdated = opts . lastUpdated ;
80
97
81
- const convertIds = ( obj ) => {
98
+ const normalizeTreatments = ( obj ) => {
82
99
Object . keys ( obj ) . forEach ( key => {
83
100
if ( typeof obj [ key ] === 'object' && obj [ key ] ) {
84
- if ( obj [ key ] . hasOwnProperty ( '_id' ) ) {
85
- obj [ key ] . _id = obj [ key ] . _id . toString ( ) ;
101
+ const element = obj [ key ] ;
102
+ if ( element . hasOwnProperty ( '_id' ) ) {
103
+ element . _id = element . _id . toString ( ) ;
104
+ }
105
+ if ( element . hasOwnProperty ( 'amount' ) && ! element . hasOwnProperty ( 'absolute' ) ) {
106
+ element . absolute = Number ( element . amount ) ;
86
107
}
87
- convertIds ( obj [ key ] ) ;
108
+ normalizeTreatments ( obj [ key ] ) ;
88
109
}
89
110
} ) ;
90
111
}
@@ -93,18 +114,17 @@ function init(env, ctx) {
93
114
94
115
// convert all IDs to strings, as these are not used after load
95
116
96
- convertIds ( ddata ) ;
117
+ normalizeTreatments ( ddata ) ;
97
118
98
119
ddata . treatments = _ . uniq ( ddata . treatments , false , function ( item ) {
99
120
return item . _id ;
100
121
} ) ;
101
122
102
123
//sort treatments so the last is the most recent
103
- /*
124
+
104
125
ddata . treatments = _ . sortBy ( ddata . treatments , function ( item ) {
105
126
return item . mills ;
106
127
} ) ;
107
- */
108
128
109
129
fitTreatmentsToBGCurve ( ddata , env , ctx ) ;
110
130
if ( err ) {
@@ -150,7 +170,7 @@ function init(env, ctx) {
150
170
function loadEntries ( ddata , ctx , callback ) {
151
171
152
172
const withFrame = ddata . page && ddata . page . frame ;
153
- const loadPeriod = ddata . sgvs && ddata . sgvs . length > 0 && ! withFrame ? constants . FIFTEEN_MINUTES : constants . TWO_DAYS ;
173
+ const loadPeriod = ddata . sgvs && ddata . sgvs . length > 0 && ! withFrame ? constants . ONE_HOUR : constants . TWO_DAYS ;
154
174
const latestEntry = ddata . sgvs && ddata . sgvs . length > 0 ? findLatestMills ( ddata . sgvs ) : ddata . lastUpdated ;
155
175
156
176
var dateRange = {
@@ -289,7 +309,7 @@ function loadTreatments(ddata, ctx, callback) {
289
309
// Load 2.5 days to cover last 48 hours including overlapping temp boluses or temp targets for first load
290
310
// Subsequently load at least 15 minutes of data, but if latest entry is older than 15 minutes, load until that entry
291
311
292
- const loadPeriod = ddata . treatments && ddata . treatments . length > 0 && ! withFrame ? constants . FIFTEEN_MINUTES : longLoad ;
312
+ const loadPeriod = ddata . treatments && ddata . treatments . length > 0 && ! withFrame ? constants . SIX_HOURS : longLoad ;
293
313
const latestEntry = ddata . treatments && ddata . treatments . length > 0 ? findLatestMills ( ddata . treatments ) : ddata . lastUpdated ;
294
314
const loadTime = Math . min ( ddata . lastUpdated - loadPeriod , latestEntry ) ;
295
315
0 commit comments