don't strip out non-namespaced params when encoding url search params

This commit is contained in:
John Mitchell 2021-01-14 09:50:01 -05:00
parent 90edb3b551
commit 87a2039ded
5 changed files with 38 additions and 11 deletions

View File

@ -85,7 +85,12 @@ class ListHeader extends React.Component {
pushHistoryState(params) {
const { history, qsConfig } = this.props;
const { pathname } = history.location;
const encodedParams = encodeNonDefaultQueryString(qsConfig, params);
const nonNamespacedParams = parseQueryString({}, history.location.search);
const encodedParams = encodeNonDefaultQueryString(
qsConfig,
params,
nonNamespacedParams
);
history.push(encodedParams ? `${pathname}?${encodedParams}` : pathname);
}

View File

@ -60,8 +60,15 @@ function PaginatedDataList({
pushHistoryState(replaceParams(oldParams, { page_size: pageSize, page }));
};
const pushHistoryState = params => {
const encodedParams = encodeNonDefaultQueryString(qsConfig, params);
const pushHistoryState = (params) => {
const { history, qsConfig } = this.props;
const { pathname } = history.location;
const nonNamespacedParams = parseQueryString({}, history.location.search);
const encodedParams = encodeNonDefaultQueryString(
qsConfig,
params,
nonNamespacedParams
);
history.push(encodedParams ? `${pathname}?${encodedParams}` : pathname);
};

View File

@ -23,7 +23,12 @@ export default function HeaderRow({ qsConfig, children }) {
order_by: order === 'asc' ? key : `-${key}`,
page: null,
});
const encodedParams = encodeNonDefaultQueryString(qsConfig, newParams);
const nonNamespacedParams = parseQueryString({}, history.location.search);
const encodedParams = encodeNonDefaultQueryString(
qsConfig,
newParams,
nonNamespacedParams
);
history.push(
encodedParams
? `${location.pathname}?${encodedParams}`

View File

@ -40,8 +40,13 @@ function PaginatedTable({
const history = useHistory();
const pushHistoryState = params => {
const { pathname } = history.location;
const encodedParams = encodeNonDefaultQueryString(qsConfig, params);
const { pathname, search } = history.location;
const nonNamespacedParams = parseQueryString({}, search);
const encodedParams = encodeNonDefaultQueryString(
qsConfig,
params,
nonNamespacedParams
);
history.push(encodedParams ? `${pathname}?${encodedParams}` : pathname);
};

View File

@ -118,15 +118,20 @@ function encodeValue(key, value) {
* removing defaults. Used to put into url bar after ui route
* @param {object} qs config object for namespacing params, filtering defaults
* @param {object} query param object
* @param {object} any non-namespaced params to append
* @return {string} url query string
*/
export const encodeNonDefaultQueryString = (config, params) => {
export const encodeNonDefaultQueryString = (
config,
params,
nonNamespacedParams = {}
) => {
if (!params) return '';
const paramsWithoutDefaults = removeParams({}, params, config.defaultParams);
return encodeQueryString(
namespaceParams(config.namespace, paramsWithoutDefaults)
);
return encodeQueryString({
...namespaceParams(config.namespace, paramsWithoutDefaults),
...nonNamespacedParams,
});
};
/**