@@ -38,21 +38,38 @@ const findLatestMills = (data) => {
3838
3939function mergeProcessSort ( oldData , newData , ageLimit ) {
4040
41- processForRuntime ( newData ) ;
41+ processForRuntime ( newData ) ;
4242
4343 var filtered = _ . filter ( newData , function hasId ( object ) {
4444 const hasId = ! _ . isEmpty ( object . _id ) ;
4545 const isFresh = ( ageLimit && object . mills >= ageLimit ) || ( ! ageLimit ) ;
4646 return isFresh && hasId ;
4747 } ) ;
4848
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+ }
5268
5369 return _ . sortBy ( merged , function ( item ) {
5470 return item . mills ;
5571 } ) ;
72+
5673}
5774
5875function init ( env , ctx ) {
@@ -78,13 +95,17 @@ function init(env, ctx) {
7895 }
7996 ddata . lastUpdated = opts . lastUpdated ;
8097
81- const convertIds = ( obj ) => {
98+ const normalizeTreatments = ( obj ) => {
8299 Object . keys ( obj ) . forEach ( key => {
83100 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 ) ;
86107 }
87- convertIds ( obj [ key ] ) ;
108+ normalizeTreatments ( obj [ key ] ) ;
88109 }
89110 } ) ;
90111 }
@@ -93,18 +114,17 @@ function init(env, ctx) {
93114
94115 // convert all IDs to strings, as these are not used after load
95116
96- convertIds ( ddata ) ;
117+ normalizeTreatments ( ddata ) ;
97118
98119 ddata . treatments = _ . uniq ( ddata . treatments , false , function ( item ) {
99120 return item . _id ;
100121 } ) ;
101122
102123 //sort treatments so the last is the most recent
103- /*
124+
104125 ddata . treatments = _ . sortBy ( ddata . treatments , function ( item ) {
105126 return item . mills ;
106127 } ) ;
107- */
108128
109129 fitTreatmentsToBGCurve ( ddata , env , ctx ) ;
110130 if ( err ) {
@@ -150,7 +170,7 @@ function init(env, ctx) {
150170function loadEntries ( ddata , ctx , callback ) {
151171
152172 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 ;
154174 const latestEntry = ddata . sgvs && ddata . sgvs . length > 0 ? findLatestMills ( ddata . sgvs ) : ddata . lastUpdated ;
155175
156176 var dateRange = {
@@ -289,7 +309,7 @@ function loadTreatments(ddata, ctx, callback) {
289309 // Load 2.5 days to cover last 48 hours including overlapping temp boluses or temp targets for first load
290310 // Subsequently load at least 15 minutes of data, but if latest entry is older than 15 minutes, load until that entry
291311
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 ;
293313 const latestEntry = ddata . treatments && ddata . treatments . length > 0 ? findLatestMills ( ddata . treatments ) : ddata . lastUpdated ;
294314 const loadTime = Math . min ( ddata . lastUpdated - loadPeriod , latestEntry ) ;
295315
0 commit comments