diff --git a/awx/ui_next/package-lock.json b/awx/ui_next/package-lock.json
index db64b4ef90..91d63d9b14 100644
--- a/awx/ui_next/package-lock.json
+++ b/awx/ui_next/package-lock.json
@@ -13354,6 +13354,17 @@
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.13.6"
+ },
+ "dependencies": {
+ "scheduler": {
+ "version": "0.13.6",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
+ "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
}
},
"react-codemirror2": {
@@ -13370,6 +13381,17 @@
"object-assign": "^4.1.1",
"prop-types": "^15.6.2",
"scheduler": "^0.13.6"
+ },
+ "dependencies": {
+ "scheduler": {
+ "version": "0.13.6",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
+ "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
+ "requires": {
+ "loose-envify": "^1.1.0",
+ "object-assign": "^4.1.1"
+ }
+ }
}
},
"react-fast-compare": {
@@ -14398,15 +14420,6 @@
"xmlchars": "^2.1.1"
}
},
- "scheduler": {
- "version": "0.13.6",
- "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.13.6.tgz",
- "integrity": "sha512-IWnObHt413ucAYKsD9J1QShUKkbKLQQHdxRyw73sw4FN26iWr3DY/H34xGPe4nmL1DwXyWmSWmMrA9TfQbE/XQ==",
- "requires": {
- "loose-envify": "^1.1.0",
- "object-assign": "^4.1.1"
- }
- },
"scheduler": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
diff --git a/awx/ui_next/src/components/DataListToolbar/DataListToolbar.test.jsx b/awx/ui_next/src/components/DataListToolbar/DataListToolbar.test.jsx
index 8beb597edb..266bcf6d78 100644
--- a/awx/ui_next/src/components/DataListToolbar/DataListToolbar.test.jsx
+++ b/awx/ui_next/src/components/DataListToolbar/DataListToolbar.test.jsx
@@ -5,6 +5,13 @@ import DataListToolbar from './DataListToolbar';
describe('', () => {
let toolbar;
+ const QS_CONFIG = {
+ namespace: 'organization',
+ dateFields: [ 'modified', 'created' ],
+ defaultParams: { page: 1, page_size: 5, order_by: 'name' },
+ integerFields: ['page', 'page_size'],
+ };
+
afterEach(() => {
if (toolbar) {
toolbar.unmount();
@@ -28,6 +35,7 @@ describe('', () => {
toolbar = mountWithContexts(
', () => {
toolbar = mountWithContexts(
', () => {
toolbar = mountWithContexts(
', () => {
toolbar = mountWithContexts(
', () => {
toolbar = mountWithContexts(
', () => {
toolbar = mountWithContexts(
qsConfig
- .integerFields
- .filter(field => field === key).length || qsConfig.dateFields
- .filter(field => field === key).length;
+ const isNonStringField = key =>
+ qsConfig.integerFields.filter(field => field === key).length ||
+ qsConfig.dateFields.filter(field => field === key).length;
// TODO: this will probably become more sophisticated, where date
// fields and string fields are passed to a formatter
- const actualSearchKey = isNonStringField(searchKey) ? searchKey : `${searchKey}__icontains`;
+ const actualSearchKey = isNonStringField(searchKey)
+ ? searchKey
+ : `${searchKey}__icontains`;
onSearch(actualSearchKey, searchValue);
diff --git a/awx/ui_next/src/components/Search/Search.test.jsx b/awx/ui_next/src/components/Search/Search.test.jsx
index e611d876c3..62e1cd0b9e 100644
--- a/awx/ui_next/src/components/Search/Search.test.jsx
+++ b/awx/ui_next/src/components/Search/Search.test.jsx
@@ -5,6 +5,13 @@ import Search from './Search';
describe('', () => {
let search;
+ const QS_CONFIG = {
+ namespace: 'organization',
+ dateFields: [ 'modified', 'created' ],
+ defaultParams: { page: 1, page_size: 5, order_by: 'name' },
+ integerFields: ['page', 'page_size'],
+ };
+
afterEach(() => {
if (search) {
search = null;
@@ -22,7 +29,7 @@ describe('', () => {
const onSearch = jest.fn();
search = mountWithContexts(
-
+
);
search.find(searchTextInput).instance().value = 'test-321';
@@ -39,7 +46,7 @@ describe('', () => {
];
const onSearch = jest.fn();
const wrapper = mountWithContexts(
-
+
).find('Search');
expect(wrapper.state('isSearchDropdownOpen')).toEqual(false);
wrapper.instance().handleDropdownToggle(true);
@@ -58,7 +65,7 @@ describe('', () => {
];
const onSearch = jest.fn();
const wrapper = mountWithContexts(
-
+
).find('Search');
expect(wrapper.state('searchKey')).toEqual('name');
wrapper
diff --git a/awx/ui_next/src/screens/Organization/OrganizationAccess/__snapshots__/OrganizationAccess.test.jsx.snap b/awx/ui_next/src/screens/Organization/OrganizationAccess/__snapshots__/OrganizationAccess.test.jsx.snap
index a2acb59e74..78cf3807ad 100644
--- a/awx/ui_next/src/screens/Organization/OrganizationAccess/__snapshots__/OrganizationAccess.test.jsx.snap
+++ b/awx/ui_next/src/screens/Organization/OrganizationAccess/__snapshots__/OrganizationAccess.test.jsx.snap
@@ -41,6 +41,10 @@ exports[` initially renders succesfully 1`] = `
items={Array []}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -91,6 +95,10 @@ exports[` initially renders succesfully 1`] = `
items={Array []}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -157,6 +165,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -221,6 +233,10 @@ exports[` initially renders succesfully 1`] = `
itemCount={0}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -278,6 +294,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -329,6 +349,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -353,6 +377,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
@@ -391,6 +419,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "first_name",
"page": 1,
diff --git a/awx/ui_next/src/screens/Organization/OrganizationNotifications/__snapshots__/OrganizationNotifications.test.jsx.snap b/awx/ui_next/src/screens/Organization/OrganizationNotifications/__snapshots__/OrganizationNotifications.test.jsx.snap
index e7d090a2ba..8116327545 100644
--- a/awx/ui_next/src/screens/Organization/OrganizationNotifications/__snapshots__/OrganizationNotifications.test.jsx.snap
+++ b/awx/ui_next/src/screens/Organization/OrganizationNotifications/__snapshots__/OrganizationNotifications.test.jsx.snap
@@ -67,6 +67,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -137,6 +141,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -222,6 +230,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -286,6 +298,10 @@ exports[` initially renders succesfully 1`] = `
itemCount={2}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -344,6 +360,10 @@ exports[` initially renders succesfully 1`] = `
}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -1713,6 +1733,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -1737,6 +1761,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
@@ -1775,6 +1803,10 @@ exports[` initially renders succesfully 1`] = `
onRemoveAll={[Function]}
qsConfig={
Object {
+ "dateFields": Array [
+ "modified",
+ "created",
+ ],
"defaultParams": Object {
"order_by": "name",
"page": 1,
diff --git a/awx/ui_next/src/screens/Organization/OrganizationTeams/OrganizationTeams.test.jsx b/awx/ui_next/src/screens/Organization/OrganizationTeams/OrganizationTeams.test.jsx
index 146ebfbc40..ee01d626a2 100644
--- a/awx/ui_next/src/screens/Organization/OrganizationTeams/OrganizationTeams.test.jsx
+++ b/awx/ui_next/src/screens/Organization/OrganizationTeams/OrganizationTeams.test.jsx
@@ -65,6 +65,7 @@ describe('', () => {
expect(list.prop('itemCount')).toEqual(listData.data.count);
expect(list.prop('qsConfig')).toEqual({
namespace: 'team',
+ dateFields: [ 'modified', 'created' ],
defaultParams: {
page: 1,
page_size: 5,
diff --git a/awx/ui_next/src/util/qs.js b/awx/ui_next/src/util/qs.js
index 31a6df4c48..8aaa00c29a 100644
--- a/awx/ui_next/src/util/qs.js
+++ b/awx/ui_next/src/util/qs.js
@@ -166,14 +166,20 @@ export function getQSConfig(
) {
if (!namespace) {
throw new Error('a QS namespace is required');
- } else if (Object.keys(defaultParams).filter(key => key !== 'page' || key !== 'page_size' || key !== 'order_by').length > 0) {
- throw new Error('Only page, page_size, and order_by allowed as default params for QS.')
+ } else if (
+ Object.keys(defaultParams).filter(
+ key => key !== 'page' && key !== 'page_size' && key !== 'order_by'
+ ).length > 0
+ ) {
+ throw new Error(
+ 'Only page, page_size, and order_by allowed as default params for QS.'
+ );
}
return {
namespace,
defaultParams,
integerFields,
- dateFields
+ dateFields,
};
}
diff --git a/awx/ui_next/src/util/qs.test.js b/awx/ui_next/src/util/qs.test.js
index 9a9bb76515..63c9f80b05 100644
--- a/awx/ui_next/src/util/qs.test.js
+++ b/awx/ui_next/src/util/qs.test.js
@@ -78,6 +78,7 @@ describe('qs (qs.js)', () => {
test('should get default QS config object', () => {
expect(getQSConfig('organization')).toEqual({
namespace: 'organization',
+ dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 5, order_by: 'name' },
integerFields: ['page', 'page_size'],
});
@@ -94,6 +95,7 @@ describe('qs (qs.js)', () => {
};
expect(getQSConfig('inventory', defaults)).toEqual({
namespace: 'inventory',
+ dateFields: [ 'modified', 'created' ],
defaultParams: { page: 1, page_size: 15 },
integerFields: ['page', 'page_size'],
});