From 48e01eac84db2a96e0322bc96eb6c5db472d0230 Mon Sep 17 00:00:00 2001 From: CD Cabrera Date: Fri, 18 Sep 2020 15:23:50 -0400 Subject: [PATCH] perf(graphCardSelectors): expand query filters for graph (#433) * graphCardSelectors, apply a state query filter * inventoryListSelectors, remove related query ToDo * openshfitView, rhelView, graphQuery rename for consistency --- src/components/openshiftView/openshiftView.js | 10 +++++-- src/components/rhelView/rhelView.js | 10 +++++-- .../graphCardSelectors.test.js.snap | 29 +++++++++++++++++++ src/redux/selectors/graphCardSelectors.js | 26 ++++++++++++++--- src/redux/selectors/inventoryListSelectors.js | 3 -- 5 files changed, 65 insertions(+), 13 deletions(-) diff --git a/src/components/openshiftView/openshiftView.js b/src/components/openshiftView/openshiftView.js index 44f9b8b58..e2f523211 100644 --- a/src/components/openshiftView/openshiftView.js +++ b/src/components/openshiftView/openshiftView.js @@ -122,7 +122,11 @@ class OpenshiftView extends React.Component { viewId } = this.props; const isC3 = location?.parsedSearch?.c3 === ''; - const { graphQuery, inventoryQuery: initialInventoryQuery, toolbarQuery } = apiQueries.parseRhsmQuery(query); + const { + graphQuery: initialGraphQuery, + inventoryQuery: initialInventoryQuery, + toolbarQuery + } = apiQueries.parseRhsmQuery(query); return ( @@ -142,7 +146,7 @@ class OpenshiftView extends React.Component { @@ -66,7 +70,7 @@ class RhelView extends React.Component { ({ ...state.graph?.reportCapacity?.[props.productId], ...{ viewId: props.viewId, - productId: props.productId, - query: props.query + productId: props.productId } }); +/** + * Return a combined query object. + * + * @param {object} state + * @param {object} props + * @returns {object} + */ +const queryFilter = (state, props = {}) => { + const { graphQuery: query } = apiQueries.parseRhsmQuery({ + ...props.query, + ...state.view?.query?.[props.productId], + ...state.view?.query?.[props.viewId] + }); + + return query; +}; + /** * Create selector, transform combined state, props into a consumable graph/charting object. * * @type {{pending: boolean, fulfilled: boolean, graphData: object, error: boolean, status: (*|number)}} */ -const selector = createSelector([statePropsFilter], response => { - const { viewId = null, productId = null, query = {}, metaId, metaQuery = {}, ...responseData } = response || {}; +const selector = createSelector([statePropsFilter, queryFilter], (response, query = {}) => { + const { viewId = null, productId = null, metaId, metaQuery = {}, ...responseData } = response || {}; const updatedResponseData = { error: responseData.error || false, fulfilled: false, pending: responseData.pending || responseData.cancelled || false, graphData: {}, + query, status: responseData.status }; diff --git a/src/redux/selectors/inventoryListSelectors.js b/src/redux/selectors/inventoryListSelectors.js index 935bc072d..80a0fbede 100644 --- a/src/redux/selectors/inventoryListSelectors.js +++ b/src/redux/selectors/inventoryListSelectors.js @@ -38,9 +38,6 @@ const statePropsFilter = (state, props = {}) => ({ } }); -/** - * ToDo: Apply "queryFilter" functionality across selectors for consistency - */ /** * Return a combined query object. *