diff --git a/assets/src/scripts/monitoring-location/components/hydrograph/HydrographApp.vue b/assets/src/scripts/monitoring-location/components/hydrograph/HydrographApp.vue index 617b307a1e2d9322ebd38b3554bbb38124d82905..051a5a62cfb82c9abe2527b4a35530193451d450 100644 --- a/assets/src/scripts/monitoring-location/components/hydrograph/HydrographApp.vue +++ b/assets/src/scripts/monitoring-location/components/hydrograph/HydrographApp.vue @@ -3,7 +3,9 @@ <CursorSlider /> <GraphBrush /> <div class="ts-legend-controls-container"> - <HydrographLegend /> + <HydrographLegend + :graphType="'IV'" + /> <div class="graph-controls-container"> <GraphControls /> </div> diff --git a/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.test.js b/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.test.js index 7267a4730a919a33bde4e91a9b6978ab7c378971..c12d376ec1f576547a48f5c85e4c023c7797a8b3 100644 --- a/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.test.js +++ b/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.test.js @@ -20,6 +20,61 @@ describe('monitoring-location/components/hydrograph/legend module', () => { config.gwPeriodOfRecord = { '72019': {} }; + + const DV_TEST_STATE = { + dailyValueTimeSeriesData: { + dvTimeSeries: { + '12345': { + type: 'Feature', + id: '12345', + properties: { + phenomenonTimeStart: '2018-01-02', + phenomenonTimeEnd: '2018-01-10', + timeStep: ['2018-01-05', '2018-01-03', '2018-01-02', '2018-01-04', + '2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10'], + result: ['3.2', '4.0', '5.0', '6.1', + '7.3', '8.1', '6.2', '2.9', '3.4'], + approvals: [['Approved'], ['Approved'], ['Approved'], ['Approved'], + ['Approved'], ['Approved'], ['Approved'], ['Approved'], ['Working']], + nilReason: [null, 'AA', null, null, null, null, null, null, null], + qualifiers: [['ICE'], null, null, null, + ['ICE', 'EQUIP'], ['ICE', 'EQUIP'], ['ESTIMATED'], ['ESTIMATED'], null], + grades: [['60'], ['50'], ['50'], ['60'], ['50'], ['50'], ['50'], ['50'], ['50']] + } + }, + '12346': { + type: 'Feature', + id: '12346', + properties: { + phenomenonTimeStart: '2018-01-02', + phenomenonTimeEnd: '2018-01-10', + timeStep: ['2018-01-02', '2018-01-03', '2018-01-04', '2018-01-05', + '2018-01-06', '2018-01-07', '2018-01-08', '2018-01-09', '2018-01-10'], + result: ['5.2', '3.0', '6.0', '7.1', + '8.3', '9.1', '7.2', '3.9', '4.4'], + approvals: [['Approved'], ['Approved'], ['Approved'], ['Approved'], + ['Approved'], ['Approved'], ['Approved'], ['Approved'], ['Working']], + nilReason: [null, 'AA', null, null, null, null, null, null, null], + qualifiers: [null, null, null, ['ICE'], + ['ICE', 'EQUIP'], ['ICE', 'EQUIP'], ['ESTIMATED'], ['ESTIMATED'], null], + grades: [['50'], ['50'], ['50'], ['60'], ['50'], ['50'], ['50'], ['50'], ['50']] + } + } + } + }, + dailyValueTimeSeriesState: { + currentDVTimeSeriesId: { + min: '12345', + mean: null, + max: '12346' + } + }, + ui: { + windowWidth: 1024, + width: 800 + } + }; + const TEST_STATE = { hydrographData: { currentTimeRange: { @@ -56,6 +111,9 @@ describe('monitoring-location/components/hydrograph/legend module', () => { mapStateToPropsFactory: createStructuredSelector }] ] + }, + props: { + graphType: 'IV' } }); }); @@ -64,6 +122,25 @@ describe('monitoring-location/components/hydrograph/legend module', () => { expect(wrapper.findAll('.legend g')).toHaveLength(9); }); + it('Should have the correct number of legend markers when working for the DV graph', () => { + wrapper = mount(HydrographLegend, { + global: { + plugins: [ + [ReduxConnectVue, { + store: configureStore(DV_TEST_STATE), + mapDispatchToPropsFactory: (actionCreators) => (dispatch) => bindActionCreators(actionCreators, dispatch), + mapStateToPropsFactory: createStructuredSelector + }] + ] + }, + props: { + graphType: 'DV' + } + }); + + expect(wrapper.findAll('.legend g')).toHaveLength(1); + }); + it('If no markers are provided legend-svg will contain no groups', () => { wrapper = mount(HydrographLegend, { global: { @@ -74,6 +151,9 @@ describe('monitoring-location/components/hydrograph/legend module', () => { mapStateToPropsFactory: createStructuredSelector }] ] + }, + props: { + graphType: 'IV' } }); diff --git a/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.vue b/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.vue index 1f098da08a33c7917f58b80da87fe44731695d0b..c64cdce4089305eed2a0031fb0e96eb90544c29a 100644 --- a/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.vue +++ b/assets/src/scripts/monitoring-location/components/hydrograph/vue-components/legend.vue @@ -18,17 +18,31 @@ <script> import {useState} from 'redux-connect-vue'; -import {computed, ref, watchEffect} from 'vue'; +import {computed, ref, toRefs, watchEffect} from 'vue'; import {select} from 'd3-selection'; import {getMainLayout} from '../selectors/layout'; import {getLegendMarkerRows} from '../selectors/legend-data'; + +import {getMainLayout as getDVMainLayout} from '../../daily-value-hydrograph/selectors/layout'; +import {getLegendMarkers as getDVLegendMarkers} from '../../daily-value-hydrograph/selectors/legend-data'; + import {mediaQuery} from 'ui/utils'; import config from 'ui/config'; export default { name: 'HydrographLegend', - setup() { + props: { + graphType: { + type: String, + required: true, + validator: function(value) { + return ['DV', 'IV'].includes(value); + } + } + }, + setup(props) { + const trackedType = toRefs(props).graphType; const legend = ref(null); const RECTANGLE_MARKER_WIDTH = 20; @@ -37,10 +51,21 @@ export default { const MARKER_GROUP_X_OFFSET = 15; const VERTICAL_ROW_OFFSET = 18; - const state = useState({ - legendMarkerRows: getLegendMarkerRows, - layout: getMainLayout - }); + let state; + + if (trackedType.value === 'IV') { + state = useState({ + legendMarkerRows: getLegendMarkerRows, + layout: getMainLayout + }); + } + + if (trackedType.value === 'DV') { + state = useState({ + legendMarkerRows: getDVLegendMarkers, + layout: getDVMainLayout + }); + } const legendTransform = computed(() => { return `translate(${mediaQuery(config.USWDS_MEDIUM_SCREEN) ? state.layout.value.margin.left : 0}, 0)`;