update qs addParams/removeParams fns to take param object not string

This commit is contained in:
John Mitchell 2019-07-30 10:32:20 -04:00
parent bdfeb2cb9c
commit f0ff5b190a
4 changed files with 58 additions and 55 deletions

View File

@ -47,13 +47,15 @@ class ListHeader extends React.Component {
handleSearch(key, value) {
const { history, qsConfig } = this.props;
const { search } = history.location;
this.pushHistoryState(addParams(qsConfig, search, { [key]: value }));
const oldParams = parseQueryString(qsConfig, search);
this.pushHistoryState(addParams(qsConfig, oldParams, { [key]: value }));
}
handleRemove(key, value) {
const { history, qsConfig } = this.props;
const { search } = history.location;
this.pushHistoryState(removeParams(qsConfig, search, { [key]: value }));
const oldParams = parseQueryString(qsConfig, search);
this.pushHistoryState(removeParams(qsConfig, oldParams, { [key]: value }));
}
handleRemoveAll() {
@ -63,8 +65,9 @@ class ListHeader extends React.Component {
handleSort(key, order) {
const { history, qsConfig } = this.props;
const { search } = history.location;
const oldParams = parseQueryString(qsConfig, search);
this.pushHistoryState(
addParams(qsConfig, search, {
addParams(qsConfig, oldParams, {
order_by: order === 'ascending' ? key : `-${key}`,
page: null,
})

View File

@ -33,13 +33,15 @@ class PaginatedDataList extends React.Component {
handleSetPage(event, pageNumber) {
const { history, qsConfig } = this.props;
const { search } = history.location;
this.pushHistoryState(addParams(qsConfig, search, { page: pageNumber }));
const oldParams = parseQueryString(qsConfig, search);
this.pushHistoryState(addParams(qsConfig, oldParams, { page: pageNumber }));
}
handleSetPageSize(event, pageSize) {
const { history, qsConfig } = this.props;
const { search } = history.location;
this.pushHistoryState(addParams(qsConfig, search, { page_size: pageSize }));
const oldParams = parseQueryString(qsConfig, search);
this.pushHistoryState(addParams(qsConfig, oldParams, { page_size: pageSize }));
}
pushHistoryState(params) {

View File

@ -315,16 +315,16 @@ const getRemainingNewParams = (mergedParams, newParams) =>
/**
* Merges existing params of search string with new ones and returns the updated list of params
* @param {object} qs config object (used for getting defaults, current query params etc.)
* @param {string} url query string
* @param {object} object with params from existing search
* @param {object} object with new params to add
* @return {object} query param object
*/
export function addParams(config, searchString, newParams) {
export function addParams(config, oldParams, paramsToAdd) {
const namespacedOldParams = namespaceParams(
config.namespace,
parseQueryString(config, searchString)
oldParams
);
const namespacedNewParams = namespaceParams(config.namespace, newParams);
const namespacedParamsToAdd = namespaceParams(config.namespace, paramsToAdd);
const namespacedDefaultParams = namespaceParams(
config.namespace,
config.defaultParams
@ -336,7 +336,7 @@ export function addParams(config, searchString, newParams) {
);
const namespacedMergedParams = getMergedParams(
namespacedOldParamsNotDefaults,
namespacedNewParams
namespacedParamsToAdd
);
// return updated params.
@ -345,19 +345,18 @@ export function addParams(config, searchString, newParams) {
return denamespaceParams(config.namespace, {
...getDefaultParams(namespacedOldParams, namespacedDefaultParams),
...namespacedMergedParams,
...getRemainingNewParams(namespacedMergedParams, namespacedNewParams),
...getRemainingNewParams(namespacedMergedParams, namespacedParamsToAdd),
});
}
/**
* Removes params from the search string and returns the updated list of params
* @param {object} qs config object (used for getting defaults, current query params etc.)
* @param {string} url query string
* @param {object} object with params from existing search
* @param {object} object with new params to remove
* @return {object} query param object
*/
export function removeParams(config, searchString, paramsToRemove) {
const oldParams = parseQueryString(config, searchString);
export function removeParams(config, oldParams, paramsToRemove) {
const paramsEntries = [];
Object.entries(oldParams).forEach(([key, value]) => {
if (Array.isArray(value)) {

View File

@ -231,9 +231,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&page=3';
const oldParams = { baz: 'bar', page: 3, page_size: 15 };
const newParams = { bag: 'boom' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: 'bar',
bag: 'boom',
page: 3,
@ -247,9 +247,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'boom' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang', 'boom'],
page: 3,
page_size: 15,
@ -262,9 +262,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { page: 5 };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 5,
page_size: 15,
@ -277,9 +277,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'bust', pat: 'pal' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang', 'bust'],
pat: 'pal',
page: 3,
@ -293,9 +293,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.page=3';
const oldParams = { baz: 'bar', page: 3, page_size: 15 };
const newParams = { bag: 'boom' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: 'bar',
bag: 'boom',
page: 3,
@ -309,9 +309,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&foo.page=3';
const oldParams = { baz: 'bar', page: 1, page_size: 15 };
const newParams = { bag: 'boom' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: 'bar',
bag: 'boom',
page: 1,
@ -325,9 +325,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'boom' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang', 'boom'],
page: 3,
page_size: 15,
@ -340,9 +340,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { page: 5 };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 5,
page_size: 15,
@ -355,9 +355,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'bust', pat: 'pal' };
expect(addParams(config, query, newParams)).toEqual({
expect(addParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang', 'bust'],
pat: 'pal',
page: 3,
@ -373,9 +373,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&page=3&bag=boom';
const oldParams = { baz: 'bar', page: 3, bag: 'boom', page_size: 15 };
const newParams = { bag: 'boom' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: 'bar',
page: 3,
page_size: 15,
@ -388,9 +388,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: 'bang',
page: 3,
page_size: 15,
@ -403,9 +403,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&baz=bust&page=3';
const oldParams = { baz: ['bar', 'bang', 'bust'], page: 3, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bang', 'bust'],
page: 3,
page_size: 15,
@ -418,9 +418,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { page: 3 };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 1,
page_size: 15,
@ -433,9 +433,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?baz=bar&baz=bang&baz=bust&pat=pal&page=3';
const oldParams = { baz: ['bar', 'bang', 'bust'], pat: 'pal', page: 3, page_size: 15 };
const newParams = { baz: 'bust', pat: 'pal' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 3,
page_size: 15,
@ -448,9 +448,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.page=3';
const oldParams = { baz: 'bar', page: 3, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
page: 3,
page_size: 15,
});
@ -462,9 +462,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&foo.page=3';
const oldParams = { baz: 'bar', page: 1, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
page: 1,
page_size: 15,
});
@ -476,9 +476,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: 'bang',
page: 3,
page_size: 15,
@ -491,9 +491,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.baz=bust&item.page=3';
const oldParams = { baz: ['bar', 'bang', 'bust'], page: 3, page_size: 15 };
const newParams = { baz: 'bar' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bang', 'bust'],
page: 3,
page_size: 15,
@ -506,9 +506,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query = '?item.baz=bar&item.baz=bang&item.page=3';
const oldParams = { baz: ['bar', 'bang'], page: 3, page_size: 15 };
const newParams = { page: 3 };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 1,
page_size: 15,
@ -521,10 +521,9 @@ describe('qs (qs.js)', () => {
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
};
const query =
'?item.baz=bar&item.baz=bang&item.baz=bust&item.pat=pal&item.page=3';
const oldParams = { baz: ['bar', 'bang', 'bust'], pat: 'pal', page: 3, page_size: 15 };
const newParams = { baz: 'bust', pat: 'pal' };
expect(removeParams(config, query, newParams)).toEqual({
expect(removeParams(config, oldParams, newParams)).toEqual({
baz: ['bar', 'bang'],
page: 3,
page_size: 15,