diff --git a/assets/src/scripts/components/hydrograph/index.js b/assets/src/scripts/components/hydrograph/index.js index ddf4f300f85ef33dfee74a9e791eabcaeeba894c..7c13552b63eb5af26dd0210c1a0244bf45951008 100644 --- a/assets/src/scripts/components/hydrograph/index.js +++ b/assets/src/scripts/components/hydrograph/index.js @@ -68,14 +68,14 @@ export const attachToNode = function (store, if (showOnlyGraph) { // Only fetch what is needed if (parameterCode && period) { - fetchDataPromise = store.dispatch(Actions.retrieveCustomTimePeriodTimeSeries(siteno, parameterCode, period)); + fetchDataPromise = store.dispatch(Actions.retrieveCustomTimePeriodTimeSeries(siteno, parameterCode, period, true)); } else if (parameterCode && startDT && endDT) { // Don't fetch until time zone is available fetchDataPromise = fetchTimeZonePromise.then(() => { store.dispatch(Actions.retrieveDataForDateRange(siteno, startDT, endDT, parameterCode)); }); } else { - fetchDataPromise = store.dispatch(Actions.retrieveTimeSeries(siteno, parameterCode ? [parameterCode] : null)); + fetchDataPromise = store.dispatch(Actions.retrieveTimeSeries(siteno, parameterCode ? [parameterCode] : null, true)); } } else { // Retrieve all parameter codes for 7 days and median statistics diff --git a/assets/src/scripts/store/index.js b/assets/src/scripts/store/index.js index 1a70c744ac5dd28b97745b1fadb9f3db62f88cef..37418e6c7f4370ab28187fa911585c4a9f55f330 100644 --- a/assets/src/scripts/store/index.js +++ b/assets/src/scripts/store/index.js @@ -61,7 +61,6 @@ const getCurrentVariableId = function(timeSeries, variables) { } }; - export const Actions = { retrieveLocationTimeZone(latitude, longitude) { return function(dispatch) { @@ -76,15 +75,22 @@ export const Actions = { ); }; }, - retrieveTimeSeries(siteno, params=null) { + retrieveTimeSeries(siteno, params=null, fetchTimeZone=false) { return function (dispatch, getState) { const currentState = getState(); const requestKey = getTsRequestKey('current', 'P7D')(currentState); dispatch(Actions.addTimeSeriesLoading([requestKey])); + let fetchTimeZonePromise; - return getTimeSeries({sites: [siteno], params}).then( + let fetchTimeSeriesPromise = getTimeSeries({sites: [siteno], params}).then( series => { const collection = normalize(series, requestKey); + if (fetchTimeZone) { + const location = collection.sourceInfo ? collection.sourceInfo[siteno].geoLocation.geogLocation : {}; + fetchTimeZonePromise = dispatch(Actions.retrieveLocationTimeZone(location.latitude || null, location.longitude || null)); + } else { + fetchTimeZonePromise = Promise.resolve(); + } // Get the start/end times of this request's range. const notes = collection.queryInfo[requestKey].notes; @@ -111,6 +117,8 @@ export const Actions = { dispatch(Actions.toggleTimeSeries('current', false)); } ); + + return Promise.all(fetchTimeSeriesPromise, fetchTimeZonePromise); }; }, retrieveCompareTimeSeries(site, period, startTime, endTime) { @@ -140,16 +148,23 @@ export const Actions = { }; }, - retrieveCustomTimePeriodTimeSeries(site, parameterCd, period) { + retrieveCustomTimePeriodTimeSeries(site, parameterCd, period, fetchTimeZone=false) { return function(dispatch, getState) { const state = getState(); const parmCd = parameterCd; const requestKey = getTsRequestKey('current', 'custom', parmCd)(state); + let fetchTimeZonePromise; dispatch(Actions.setCurrentDateRange('custom')); dispatch(Actions.addTimeSeriesLoading([requestKey])); - return getTimeSeries({sites: [site], params: [parmCd], period: period}).then( + let fetchTimeSeriesPromise = getTimeSeries({sites: [site], params: [parmCd], period: period}).then( series => { const collection = normalize(series, requestKey); + if (fetchTimeZone) { + const location = collection.sourceInfo ? collection.sourceInfo[site].geoLocation.geogLocation : {}; + fetchTimeZonePromise = dispatch(Actions.retrieveLocationTimeZone(location.latitude || null, location.longitude || null)); + } else { + fetchTimeZonePromise = Promise.resolve(); + } const variables = Object.values(collection.variables); const variableToDraw = find(variables, v => v.variableCode.value === parameterCd); dispatch(Actions.setCurrentVariable(variableToDraw.variableCode.variableID)); @@ -162,10 +177,11 @@ export const Actions = { dispatch(Actions.removeTimeSeriesLoading([requestKey])); } ); + return Promise.all(fetchTimeZonePromise, fetchTimeSeriesPromise); }; }, - retrieveCustomTimeSeries(site, startTime, endTime, parmCd) { + retrieveCustomTimeSeries(site, startTime, endTime, parmCd, fetchTimeZone=false) { return function(dispatch, getState) { const state = getState(); const thisParmCd = parmCd ? parmCd : getCurrentParmCd(state); @@ -174,7 +190,8 @@ export const Actions = { dispatch(Actions.setCustomDateRange(startTime, endTime)); dispatch(Actions.addTimeSeriesLoading([requestKey])); dispatch(Actions.toggleTimeSeries('median', false)); - return getTimeSeries({ + let fetchTimeZonePromise; + let fetchTimeSeriesPromise = getTimeSeries({ sites: [site], params: [thisParmCd], startDate: startTime, @@ -182,6 +199,12 @@ export const Actions = { }).then( series => { const collection = normalize(series, requestKey); + if (fetchTimeZone) { + const location = collection.sourceInfo ? collection.sourceInfo[site].geoLocation.geogLocation : {}; + fetchTimeZonePromise = dispatch(Actions.retrieveLocationTimeZone(location.latitude || null, location.longitude || null)); + } else { + fetchTimeZonePromise = Promise.resolve(); + } dispatch(Actions.addSeriesCollection(requestKey, collection)); dispatch(Actions.removeTimeSeriesLoading([requestKey])); }, @@ -191,6 +214,7 @@ export const Actions = { dispatch(Actions.removeTimeSeriesLoading([requestKey])); } ); + return Promise.all(fetchTimeZonePromise, fetchTimeSeriesPromise); }; }, retrieveExtendedTimeSeries(site, period, paramCd=null) { @@ -436,14 +460,14 @@ export const Actions = { return dispatch(Actions.retrieveCustomTimeSeries(siteno, startTime, endTime)); }; }, - retrieveDataForDateRange(siteno, startTimeStr, endTimeStr, parmCd) { + retrieveDataForDateRange(siteno, startTimeStr, endTimeStr, parmCd, fetchTimeZone=false) { return function(dispatch, getState) { const state = getState(); const locationIanaTimeZone = getIanaTimeZone(state); const startTime = new DateTime.fromISO(startTimeStr,{zone: locationIanaTimeZone}).toMillis(); const endTime = new DateTime.fromISO(endTimeStr, {zone: locationIanaTimeZone}).toMillis(); - dispatch(Actions.retrieveCustomTimeSeries(siteno, startTime, endTime, parmCd)); + dispatch(Actions.retrieveCustomTimeSeries(siteno, startTime, endTime, parmCd, fetchTimeZone)); }; }, setGageHeightFromStageIndex(index) {