diff --git a/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.js b/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.js
new file mode 100644
index 0000000000..7ff424689a
--- /dev/null
+++ b/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.js
@@ -0,0 +1,45 @@
+import React from 'react';
+import { func } from 'prop-types';
+import { Button, DropdownItem, Tooltip } from '@patternfly/react-core';
+
+import { t } from '@lingui/macro';
+import { useKebabifiedMenu } from 'contexts/Kebabified';
+
+function ToolbarSyncSourceButton({ onClick }) {
+ const { isKebabified } = useKebabifiedMenu();
+
+ if (isKebabified) {
+ return (
+
+ {t`Sync all`}
+
+ );
+ }
+
+ return (
+
+
+
+ );
+}
+
+ToolbarSyncSourceButton.propTypes = {
+ onClick: func,
+};
+ToolbarSyncSourceButton.defaultProps = {
+ onClick: null,
+};
+
+export default ToolbarSyncSourceButton;
diff --git a/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.test.js b/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.test.js
new file mode 100644
index 0000000000..c6b71dca50
--- /dev/null
+++ b/awx/ui/src/components/PaginatedTable/ToolbarSyncSourceButton.test.js
@@ -0,0 +1,16 @@
+import React from 'react';
+import { mountWithContexts } from '../../../testUtils/enzymeHelpers';
+import ToolbarSyncSourceButton from './ToolbarSyncSourceButton';
+
+describe('', () => {
+ test('should render button', () => {
+ const onClick = jest.fn();
+ const wrapper = mountWithContexts(
+
+ );
+ const button = wrapper.find('button');
+ expect(button).toHaveLength(1);
+ button.simulate('click');
+ expect(onClick).toHaveBeenCalled();
+ });
+});
diff --git a/awx/ui/src/components/PaginatedTable/index.js b/awx/ui/src/components/PaginatedTable/index.js
index 93a5529090..e30c1e1711 100644
--- a/awx/ui/src/components/PaginatedTable/index.js
+++ b/awx/ui/src/components/PaginatedTable/index.js
@@ -4,3 +4,4 @@ export { default as HeaderRow, HeaderCell } from './HeaderRow';
export { default as ActionItem } from './ActionItem';
export { default as ToolbarDeleteButton } from './ToolbarDeleteButton';
export { default as ToolbarAddButton } from './ToolbarAddButton';
+export { default as ToolbarSyncSourceButton } from './ToolbarSyncSourceButton';
diff --git a/awx/ui/src/screens/Inventory/InventorySources/InventorySourceList.js b/awx/ui/src/screens/Inventory/InventorySources/InventorySourceList.js
index 61bf3de2ca..8ae59c8b24 100644
--- a/awx/ui/src/screens/Inventory/InventorySources/InventorySourceList.js
+++ b/awx/ui/src/screens/Inventory/InventorySources/InventorySourceList.js
@@ -1,7 +1,6 @@
import React, { useCallback, useEffect } from 'react';
import { useParams, useLocation } from 'react-router-dom';
import { t, Plural } from '@lingui/macro';
-import { Button, Tooltip } from '@patternfly/react-core';
import useRequest, {
useDeleteItems,
@@ -14,6 +13,7 @@ import PaginatedTable, {
HeaderCell,
ToolbarAddButton,
ToolbarDeleteButton,
+ ToolbarSyncSourceButton,
} from 'components/PaginatedTable';
import useSelected from 'hooks/useSelected';
import DatalistToolbar from 'components/DataListToolbar';
@@ -185,22 +185,7 @@ function InventorySourceList() {
}
/>,
...(canSyncSources
- ? [
-
-
- ,
- ]
+ ? []
: []),
]}
/>