diff --git a/awx/ui_next/src/api/index.js b/awx/ui_next/src/api/index.js
index 204985b31d..5e7b221c77 100644
--- a/awx/ui_next/src/api/index.js
+++ b/awx/ui_next/src/api/index.js
@@ -1,5 +1,6 @@
import Config from './models/Config';
import InstanceGroups from './models/InstanceGroups';
+import Inventories from './models/Inventories';
import JobTemplates from './models/JobTemplates';
import Jobs from './models/Jobs';
import Me from './models/Me';
@@ -13,6 +14,7 @@ import WorkflowJobTemplates from './models/WorkflowJobTemplates';
const ConfigAPI = new Config();
const InstanceGroupsAPI = new InstanceGroups();
+const InventoriesAPI = new Inventories();
const JobTemplatesAPI = new JobTemplates();
const JobsAPI = new Jobs();
const MeAPI = new Me();
@@ -27,6 +29,7 @@ const WorkflowJobTemplatesAPI = new WorkflowJobTemplates();
export {
ConfigAPI,
InstanceGroupsAPI,
+ InventoriesAPI,
JobTemplatesAPI,
JobsAPI,
MeAPI,
diff --git a/awx/ui_next/src/api/models/Inventories.js b/awx/ui_next/src/api/models/Inventories.js
new file mode 100644
index 0000000000..9c9f86754a
--- /dev/null
+++ b/awx/ui_next/src/api/models/Inventories.js
@@ -0,0 +1,10 @@
+import Base from '../Base';
+
+class Inventories extends Base {
+ constructor(http) {
+ super(http);
+ this.baseUrl = '/api/v2/inventories/';
+ }
+}
+
+export default Inventories;
diff --git a/awx/ui_next/src/app.scss b/awx/ui_next/src/app.scss
index 22a874d349..4f0b81df21 100644
--- a/awx/ui_next/src/app.scss
+++ b/awx/ui_next/src/app.scss
@@ -155,11 +155,6 @@
// and bem style, as well as moved into component-based scss files
//
-.awx-lookup .pf-c-form-control {
- --pf-c-form-control--Height: 90px;
- overflow-y: auto;
-}
-
.at-c-listCardBody {
--pf-c-card__footer--PaddingX: 0;
--pf-c-card__footer--PaddingY: 0;
diff --git a/awx/ui_next/src/components/Lookup/Lookup.jsx b/awx/ui_next/src/components/Lookup/Lookup.jsx
index 92c72a8856..b9a417cb55 100644
--- a/awx/ui_next/src/components/Lookup/Lookup.jsx
+++ b/awx/ui_next/src/components/Lookup/Lookup.jsx
@@ -5,11 +5,12 @@ import { SearchIcon } from '@patternfly/react-icons';
import {
Button,
ButtonVariant,
- InputGroup,
+ InputGroup as PFInputGroup,
Modal,
} from '@patternfly/react-core';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
+import styled from 'styled-components';
import PaginatedDataList from '../PaginatedDataList';
import DataListToolbar from '../DataListToolbar';
@@ -18,6 +19,13 @@ import SelectedList from '../SelectedList';
import { ChipGroup, Chip } from '../Chip';
import { getQSConfig, parseNamespacedQueryString } from '../../util/qs';
+const InputGroup = styled(PFInputGroup)`
+ ${props => props.multiple && (`
+ --pf-c-form-control--Height: 90px;
+ overflow-y: auto;
+ `)}
+`;
+
class Lookup extends React.Component {
constructor(props) {
super(props);
@@ -145,7 +153,7 @@ class Lookup extends React.Component {
return (
-
+
+ }
+ fieldId="inventories-lookup"
+ >
+
+
+ );
+ }
+}
+
+InventoriesLookup.propTypes = {
+ value: PropTypes.arrayOf(PropTypes.object).isRequired,
+ tooltip: PropTypes.string,
+ onChange: PropTypes.func.isRequired,
+};
+
+InventoriesLookup.defaultProps = {
+ tooltip: '',
+};
+
+export default withI18n()(InventoriesLookup);
diff --git a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx
index 1ff5179a25..e823024044 100644
--- a/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx
+++ b/awx/ui_next/src/screens/Template/shared/JobTemplateForm.jsx
@@ -10,6 +10,7 @@ import AnsibleSelect from '@components/AnsibleSelect';
import FormActionGroup from '@components/FormActionGroup';
import FormField from '@components/FormField';
import FormRow from '@components/FormRow';
+import Lookup from '@components/Lookup';
import { required } from '@util/validators';
import styled from 'styled-components';
import { JobTemplate } from '@types';
@@ -105,7 +106,37 @@ class JobTemplateForm extends Component {
)}
/>
- (
+
+ {console.log(value)}}
+ getItems={() => ({
+ data: {
+ results: [{id: 1, name: 'foo'}],
+ count: 1
+ }
+ })}
+ columns={[
+ { name: i18n._(t`Name`), key: 'name', isSortable: true},
+ ]}
+ sortedColumnsKey="name"
+ />
+
+ )}
+ />
+ {/*
+ /> */}
{
test('should add an "es"', () => {
expect(pluralize('class')).toEqual('classes');
});
+
+ test('should handle word ending in y', () => {
+ expect(pluralize('inventory')).toEqual('inventories');
+ });
});
describe('getArticle', () => {