diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.jsx index a4abf420c59b..b4394f4e1d7d 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/InventorySourcesList.jsx @@ -76,7 +76,6 @@ function InventorySourcesList({ name: i18n._(t`Source`), key: 'source', options: [ - [``, i18n._(t`Manual`)], [`file`, i18n._(t`File, Directory or Script`)], [`scm`, i18n._(t`Sourced from a Project`)], [`ec2`, i18n._(t`Amazon EC2`)], diff --git a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.jsx b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.jsx index 4ba28da12f1d..2d10e552d187 100644 --- a/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.jsx +++ b/awx/ui_next/src/screens/Template/WorkflowJobTemplateVisualizer/Modals/NodeModals/NodeTypeStep/ProjectsList.jsx @@ -71,7 +71,6 @@ function ProjectsList({ history, i18n, nodeResource, onUpdateNodeResource }) { name: i18n._(t`Type`), key: 'type', options: [ - [``, i18n._(t`Manual`)], [`git`, i18n._(t`Git`)], [`hg`, i18n._(t`Mercurial`)], [`svn`, i18n._(t`Subversion`)], diff --git a/awx/ui_next/src/util/qs.js b/awx/ui_next/src/util/qs.js index 8cdc9cc56d4b..c2d25024a9db 100644 --- a/awx/ui_next/src/util/qs.js +++ b/awx/ui_next/src/util/qs.js @@ -159,7 +159,7 @@ export function removeParams(config, oldParams, paramsToRemove) { }; Object.keys(oldParams).forEach(key => { const value = removeParam(oldParams[key], paramsToRemove[key]); - if (value) { + if (value !== null) { updated[key] = value; } }); @@ -205,7 +205,7 @@ export function mergeParams(oldParams, newParams) { } function mergeParam(oldVal, newVal) { - if (!newVal) { + if (!newVal && newVal !== '') { return oldVal; } if (!oldVal) { diff --git a/awx/ui_next/src/util/qs.test.js b/awx/ui_next/src/util/qs.test.js index ca52e53cc1f2..1f711e30f679 100644 --- a/awx/ui_next/src/util/qs.test.js +++ b/awx/ui_next/src/util/qs.test.js @@ -310,6 +310,21 @@ describe('qs (qs.js)', () => { page_size: 15, }); }); + + test('should parse empty string values', () => { + const config = { + namespace: 'bee', + defaultParams: { page: 1, page_size: 15 }, + integerFields: ['page', 'page_size'], + }; + const query = '?bee.baz=bar&bee.or__source='; + expect(parseQueryString(config, query)).toEqual({ + baz: 'bar', + page: 1, + page_size: 15, + or__source: '', + }); + }); }); describe('removeParams', () => { @@ -532,6 +547,21 @@ describe('qs (qs.js)', () => { page_size: 15, }); }); + + test('should retain empty string', () => { + const config = { + namespace: null, + defaultParams: { page: 1, page_size: 15 }, + integerFields: ['page', 'page_size'], + }; + const oldParams = { baz: '', page: 3, bag: 'boom', page_size: 15 }; + const toRemove = { bag: 'boom' }; + expect(removeParams(config, oldParams, toRemove)).toEqual({ + baz: '', + page: 3, + page_size: 15, + }); + }); }); describe('_stringToObject', () => {