diff --git a/awx/ui_next/src/screens/Credential/CredentialList/CredentialList.jsx b/awx/ui_next/src/screens/Credential/CredentialList/CredentialList.jsx index cec7e309fe..cf3ab374dc 100644 --- a/awx/ui_next/src/screens/Credential/CredentialList/CredentialList.jsx +++ b/awx/ui_next/src/screens/Credential/CredentialList/CredentialList.jsx @@ -12,12 +12,8 @@ import PaginatedDataList, { ToolbarDeleteButton, } from '@components/PaginatedDataList'; import useRequest from '@util/useRequest'; -import { - getQSConfig, - parseQueryString, - replaceParams, - encodeNonDefaultQueryString, -} from '@util/qs'; +import updateUrlAfterDelete from '@util/updateUrlAfterDelete'; +import { getQSConfig, parseQueryString } from '@util/qs'; import { CredentialListItem } from '.'; const QS_CONFIG = getQSConfig('credential', { @@ -80,21 +76,18 @@ function CredentialList({ i18n }) { const handleDelete = async () => { await deleteCredentials(); - adjustPagination(); - setSelected([]); - }; - - const adjustPagination = () => { - const params = parseQueryString(QS_CONFIG, location.search); - if (params.page > 1 && selected.length === credentials.length) { - const newParams = encodeNonDefaultQueryString( - QS_CONFIG, - replaceParams(params, { page: params.page - 1 }) - ); - history.push(`${location.pathname}?${newParams}`); + const url = updateUrlAfterDelete( + QS_CONFIG, + location, + credentials, + selected + ); + if (url) { + history.push(url); } else { fetchCredentials(); } + setSelected([]); }; const handleSelectAll = isSelected => { diff --git a/awx/ui_next/src/screens/Inventory/InventoryList/InventoryList.jsx b/awx/ui_next/src/screens/Inventory/InventoryList/InventoryList.jsx index f175b8d2dc..6ac8aef809 100644 --- a/awx/ui_next/src/screens/Inventory/InventoryList/InventoryList.jsx +++ b/awx/ui_next/src/screens/Inventory/InventoryList/InventoryList.jsx @@ -17,8 +17,6 @@ import { getQSConfig, parseQueryString } from '@util/qs'; import AddDropDownButton from '@components/AddDropDownButton'; import InventoryListItem from './InventoryListItem'; -// The type value in const QS_CONFIG below does not have a space between job_inventory and -// workflow_job_inventory so the params sent to the API match what the api expects. const QS_CONFIG = getQSConfig('inventory', { page: 1, page_size: 20, diff --git a/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.jsx b/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.jsx index 02b176ffda..9d92d20101 100644 --- a/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.jsx +++ b/awx/ui_next/src/screens/Organization/OrganizationList/OrganizationList.jsx @@ -13,13 +13,8 @@ import PaginatedDataList, { ToolbarAddButton, ToolbarDeleteButton, } from '@components/PaginatedDataList'; -import { - getQSConfig, - parseQueryString, - replaceParams, - encodeNonDefaultQueryString, -} from '@util/qs'; - +import { getQSConfig, parseQueryString } from '@util/qs'; +import updateUrlAfterDelete from '@util/updateUrlAfterDelete'; import OrganizationListItem from './OrganizationListItem'; const QS_CONFIG = getQSConfig('organization', { @@ -87,21 +82,18 @@ function OrganizationsList({ i18n }) { const handleOrgDelete = async () => { await deleteOrganizations(); - await adjustPagination(); - setSelected([]); - }; - - const adjustPagination = () => { - const params = parseQueryString(QS_CONFIG, location.search); - if (params.page > 1 && selected.length === organizations.length) { - const newParams = encodeNonDefaultQueryString( - QS_CONFIG, - replaceParams(params, { page: params.page - 1 }) - ); - history.push(`${location.pathname}?${newParams}`); + const url = updateUrlAfterDelete( + QS_CONFIG, + location, + organizations, + selected + ); + if (url) { + history.push(url); } else { fetchOrganizations(); } + setSelected([]); }; const hasContentLoading = isDeleteLoading || isOrgsLoading; diff --git a/awx/ui_next/src/util/updateUrlAfterDelete.js b/awx/ui_next/src/util/updateUrlAfterDelete.js new file mode 100644 index 0000000000..d7678083f8 --- /dev/null +++ b/awx/ui_next/src/util/updateUrlAfterDelete.js @@ -0,0 +1,22 @@ +import { + parseQueryString, + replaceParams, + encodeNonDefaultQueryString, +} from './qs'; + +export default function updateUrlAfterDelete( + qsConfig, + location, + items, + selectedItems +) { + const params = parseQueryString(qsConfig, location.search); + if (params.page > 1 && selectedItems.length === items.length) { + const newParams = encodeNonDefaultQueryString( + qsConfig, + replaceParams(params, { page: params.page - 1 }) + ); + return `${location.pathname}?${newParams}`; + } + return false; +}