From 2709c96e90bf2910caaa447660ab331197c811f9 Mon Sep 17 00:00:00 2001 From: Shekar Siri Date: Wed, 17 Aug 2022 18:39:10 +0200 Subject: [PATCH] feat(ui) - url search - handle source --- .../SessionSearchQueryParamHandler.tsx | 17 +++++++++++++---- frontend/app/duck/search.js | 6 +++++- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/frontend/app/components/shared/SessionSearchQueryParamHandler/SessionSearchQueryParamHandler.tsx b/frontend/app/components/shared/SessionSearchQueryParamHandler/SessionSearchQueryParamHandler.tsx index d8d67a14d..bfca8c763 100644 --- a/frontend/app/components/shared/SessionSearchQueryParamHandler/SessionSearchQueryParamHandler.tsx +++ b/frontend/app/components/shared/SessionSearchQueryParamHandler/SessionSearchQueryParamHandler.tsx @@ -51,7 +51,11 @@ const SessionSearchQueryParamHandler = React.memo((props: Props) => { filters.forEach((filter: any) => { if (filter.value.length > 0) { const _key = setQueryParamKeyFromFilterkey(filter.key); - query[_key] = `${filter.operator}|${filter.value.join('|')}`; + let str = `${filter.operator}|${filter.value.join('|')}`; + if (filter.hasSource) { + str = `${str}^${filter.sourceOperator}|${filter.source.join('|')}`; + } + query[_key] = str; } }); return query; @@ -60,11 +64,15 @@ const SessionSearchQueryParamHandler = React.memo((props: Props) => { const addFilter = ([key, value]: [string, string]): void => { if (value !== '') { const filterKey = getFilterKeyTypeByKey(key); - const valueArr = value.split('|'); + const tmp = value.split('^'); + const valueArr = tmp[0].split('|'); const operator = valueArr.shift(); + const sourceArr = tmp[1] ? tmp[1].split('|') : []; + const sourceOperator = sourceArr.shift(); + const source = sourceArr; // TODO validate operator if (filterKey) { - props.addFilterByKeyAndValue(filterKey, valueArr, operator); + props.addFilterByKeyAndValue(filterKey, valueArr, operator, sourceOperator, source); } } }; @@ -78,7 +86,8 @@ const SessionSearchQueryParamHandler = React.memo((props: Props) => { const generateUrlQuery = () => { const query: any = createUrlQuery(appliedFilter.filters); - history.replace({ search: new URLSearchParams(query).toString() }); + const queryString = new URLSearchParams(query).toString(); + history.replace({ search: queryString }); }; useEffect(applyFilterFromQuery, []); diff --git a/frontend/app/duck/search.js b/frontend/app/duck/search.js index 3abeb408c..ff1795b74 100644 --- a/frontend/app/duck/search.js +++ b/frontend/app/duck/search.js @@ -315,13 +315,17 @@ export const addFilter = (filter) => (dispatch, getState) => { }; export const addFilterByKeyAndValue = - (key, value, operator = undefined) => + (key, value, operator = undefined, sourceOperator = undefined, source = undefined) => (dispatch, getState) => { let defaultFilter = filtersMap[key]; defaultFilter.value = value; if (operator) { defaultFilter.operator = operator; } + if (defaultFilter.hasSource && source && sourceOperator) { + defaultFilter.sourceOperator = sourceOperator; + defaultFilter.source = source; + } dispatch(addFilter(defaultFilter)); };