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 - ? [ - - - , - ] + ? [] : []), ]} />