diff --git a/awx/ui_next/src/components/PaginatedDataList/ToolbarDeleteButton.jsx b/awx/ui_next/src/components/PaginatedDataList/ToolbarDeleteButton.jsx index 0f74b05fcf..8275d16cac 100644 --- a/awx/ui_next/src/components/PaginatedDataList/ToolbarDeleteButton.jsx +++ b/awx/ui_next/src/components/PaginatedDataList/ToolbarDeleteButton.jsx @@ -168,7 +168,10 @@ function ToolbarDeleteButton({ deleteMessages.push(warningMessage); } if (deleteMessage) { - if (itemsToDelete[0]?.type !== 'inventory') { + if ( + itemsToDelete[0]?.type !== 'inventory' && + (itemsToDelete.length > 1 || deleteDetails) + ) { deleteMessages.push(deleteMessage); } else if (deleteDetails || itemsToDelete.length > 1) { deleteMessages.push(deleteMessage); @@ -206,6 +209,10 @@ function ToolbarDeleteButton({ ); } + const shouldShowDeleteWarning = + warningMessage || + (itemsToDelete.length === 1 && deleteDetails) || + (itemsToDelete.length > 1 && deleteMessage); return ( <> @@ -270,7 +277,7 @@ function ToolbarDeleteButton({
))} - {(deleteDetails || deleteMessage || warningMessage) && ( + {shouldShowDeleteWarning && ( ', () => { }); expect( wrapper.find('DeleteButton').prop('deleteDetailsRequests') - ).toHaveLength(2); + ).toHaveLength(4); }); }); diff --git a/awx/ui_next/src/screens/ExecutionEnvironment/ExecutionEnvironmentList/ExecutionEnviromentList.test.jsx b/awx/ui_next/src/screens/ExecutionEnvironment/ExecutionEnvironmentList/ExecutionEnviromentList.test.jsx index 3a4fa01824..d18863e426 100644 --- a/awx/ui_next/src/screens/ExecutionEnvironment/ExecutionEnvironmentList/ExecutionEnviromentList.test.jsx +++ b/awx/ui_next/src/screens/ExecutionEnvironment/ExecutionEnvironmentList/ExecutionEnviromentList.test.jsx @@ -195,6 +195,6 @@ describe('', () => { }); expect( wrapper.find('ToolbarDeleteButton').prop('deleteDetailsRequests') - ).toHaveLength(2); + ).toHaveLength(4); }); }); diff --git a/awx/ui_next/src/screens/Inventory/InventorySources/InventorySourceList.jsx b/awx/ui_next/src/screens/Inventory/InventorySources/InventorySourceList.jsx index 35221d6b79..33be5b14b2 100644 --- a/awx/ui_next/src/screens/Inventory/InventorySources/InventorySourceList.jsx +++ b/awx/ui_next/src/screens/Inventory/InventorySources/InventorySourceList.jsx @@ -182,7 +182,7 @@ function InventorySourceList({ i18n }) { pluralizedItemName={i18n._(t`Inventory Sources`)} deleteDetailsRequests={deleteDetailsRequests} deleteMessage={i18n._( - '{numItemsToDelete, plural, one {This inventory source is currently being used workflow job template nodes. Are you sure you want to delete it?} other {Deleting these inventory sources could impact some workflow job template nodes that rely on them. Are you sure you want to delete anyway?}}', + '{numItemsToDelete, plural, one {This inventory source is currently being used by workflow job template nodes. Are you sure you want to delete it?} other {Deleting these inventory sources could impact workflow job template nodes that rely on them. Are you sure you want to delete anyway?}}', { numItemsToDelete: selected.length } )} />, diff --git a/awx/ui_next/src/screens/Organization/OrganizationDetail/OrganizationDetail.test.jsx b/awx/ui_next/src/screens/Organization/OrganizationDetail/OrganizationDetail.test.jsx index 62ea8d3f74..d91b38c85d 100644 --- a/awx/ui_next/src/screens/Organization/OrganizationDetail/OrganizationDetail.test.jsx +++ b/awx/ui_next/src/screens/Organization/OrganizationDetail/OrganizationDetail.test.jsx @@ -77,7 +77,7 @@ describe('', () => { expect( component.find('DeleteButton').prop('deleteDetailsRequests') - ).toHaveLength(4); + ).toHaveLength(7); }); test('should render the expected instance group', async () => { diff --git a/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.test.jsx b/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.test.jsx index 6e3d2003cc..02c6c65b0e 100644 --- a/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.test.jsx +++ b/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.test.jsx @@ -102,7 +102,7 @@ describe('', () => { ); expect( wrapper.find('ToolbarDeleteButton').prop('deleteDetailsRequests') - ).toHaveLength(4); + ).toHaveLength(7); }); test('Items are rendered after loading', async () => { diff --git a/awx/ui_next/src/util/getRelatedResourceDeleteDetails.js b/awx/ui_next/src/util/getRelatedResourceDeleteDetails.js index 76af4be6ee..f218050bd4 100644 --- a/awx/ui_next/src/util/getRelatedResourceDeleteDetails.js +++ b/awx/ui_next/src/util/getRelatedResourceDeleteDetails.js @@ -117,14 +117,26 @@ export const relatedResourceDeleteRequests = { request: async () => { try { const { data } = await InventoriesAPI.updateSources(inventoryId); - return WorkflowJobTemplateNodesAPI.read({ - unified_job_template: data[0].inventory_source, - }); + let total = 0; + await Promise.all( + data.map(async datum => { + const { + data: { count }, + } = await WorkflowJobTemplateNodesAPI.read({ + unified_job_template: datum.inventory_source, + }); + if (count > 0) { + total += count; + } + }) + ); + console.log(total, 'total'); + return { data: { count: total } }; } catch (err) { throw new Error(err); } }, - label: i18n._(t`Workflow Job Template Node`), + label: i18n._(t`Workflow Job Template Nodes`), }, ], @@ -231,26 +243,37 @@ export const relatedResourceDeleteRequests = { { request: async () => OrganizationsAPI.read({ - execution_environment: selected.id, + default_environment: selected.id, }), label: [i18n._(t`Organizations`)], }, { request: async () => { try { - const { data } = await WorkflowJobTemplateNodesAPI.read({ + const { + data: { results }, + } = await InventorySourcesAPI.read({ execution_environment: selected.id, }); - if ( - data.summary_fields.unified_job_template.unified_job_type === - 'inventory_update' - ) { - await InventorySourcesAPI.read(); - } - } catch {} + let total = 0; + await Promise.all( + results.map(async result => { + const { + data: { count }, + } = await WorkflowJobTemplateNodesAPI.read({ + unified_job_template: result.id, + }); + if (count > 0) { + total += count; + } + }) + ); + return { data: { count: total } }; + } catch (err) { + throw new Error(err); + } }, - - label: [i18n._(t`Organizations`)], + label: [i18n._(t`Workflow Job Template Nodes`)], }, ], };