mirror of
https://github.com/ansible/awx.git
synced 2026-02-19 12:10:06 -03:30
create InstanceGroupsLookup for org add/edit forms
This commit is contained in:
@@ -3,7 +3,6 @@ import { mount } from 'enzyme';
|
|||||||
import { MemoryRouter } from 'react-router-dom';
|
import { MemoryRouter } from 'react-router-dom';
|
||||||
import { I18nProvider } from '@lingui/react';
|
import { I18nProvider } from '@lingui/react';
|
||||||
import { ConfigContext } from '../../../../../src/context';
|
import { ConfigContext } from '../../../../../src/context';
|
||||||
import APIClient from '../../../../../src/api';
|
|
||||||
import OrganizationEdit from '../../../../../src/pages/Organizations/screens/Organization/OrganizationEdit';
|
import OrganizationEdit from '../../../../../src/pages/Organizations/screens/Organization/OrganizationEdit';
|
||||||
|
|
||||||
describe('<OrganizationEdit />', () => {
|
describe('<OrganizationEdit />', () => {
|
||||||
|
|||||||
74
src/pages/Organizations/components/InstanceGroupsLookup.jsx
Normal file
74
src/pages/Organizations/components/InstanceGroupsLookup.jsx
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
import React, { Fragment } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { I18n, i18nMark } from '@lingui/react';
|
||||||
|
import { FormGroup, Tooltip } from '@patternfly/react-core';
|
||||||
|
import { QuestionCircleIcon } from '@patternfly/react-icons';
|
||||||
|
import { t } from '@lingui/macro';
|
||||||
|
|
||||||
|
import Lookup from '../../../components/Lookup';
|
||||||
|
|
||||||
|
const INSTANCE_GROUPS_LOOKUP_COLUMNS = [
|
||||||
|
{ name: i18nMark('Name'), key: 'name', isSortable: true },
|
||||||
|
{ name: i18nMark('Modified'), key: 'modified', isSortable: false, isNumeric: true },
|
||||||
|
{ name: i18nMark('Created'), key: 'created', isSortable: false, isNumeric: true }
|
||||||
|
];
|
||||||
|
|
||||||
|
class InstanceGroupsLookup extends React.Component {
|
||||||
|
constructor (props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.getInstanceGroups = this.getInstanceGroups.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getInstanceGroups (params) {
|
||||||
|
const { api } = this.props;
|
||||||
|
const data = await api.getInstanceGroups(params);
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
render () {
|
||||||
|
const { value, onChange } = this.props;
|
||||||
|
|
||||||
|
return (
|
||||||
|
<I18n>
|
||||||
|
{({ i18n }) => (
|
||||||
|
<FormGroup
|
||||||
|
label={(
|
||||||
|
<Fragment>
|
||||||
|
{i18n._(t`Instance Groups`)}
|
||||||
|
{' '}
|
||||||
|
<Tooltip
|
||||||
|
position="right"
|
||||||
|
content={i18n._(t`Select the Instance Groups for this Organization to run on.`)}
|
||||||
|
>
|
||||||
|
<QuestionCircleIcon />
|
||||||
|
</Tooltip>
|
||||||
|
</Fragment>
|
||||||
|
)}
|
||||||
|
fieldId="add-org-form-instance-groups"
|
||||||
|
>
|
||||||
|
<Lookup
|
||||||
|
lookupHeader={i18n._(t`Instance Groups`)}
|
||||||
|
name="instanceGroups"
|
||||||
|
value={value}
|
||||||
|
onLookupSave={onChange}
|
||||||
|
getItems={this.getInstanceGroups}
|
||||||
|
columns={INSTANCE_GROUPS_LOOKUP_COLUMNS}
|
||||||
|
sortedColumnKey="name"
|
||||||
|
/>
|
||||||
|
</FormGroup>
|
||||||
|
)}
|
||||||
|
</I18n>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
InstanceGroupsLookup.propTypes = {
|
||||||
|
api: PropTypes.shape({
|
||||||
|
getInstanceGroups: PropTypes.func,
|
||||||
|
}).isRequired,
|
||||||
|
value: PropTypes.arrayOf(PropTypes.object).isRequired,
|
||||||
|
onChange: PropTypes.func.isRequired,
|
||||||
|
};
|
||||||
|
|
||||||
|
export default InstanceGroupsLookup;
|
||||||
@@ -11,15 +11,14 @@ import {
|
|||||||
} from '@patternfly/react-core';
|
} from '@patternfly/react-core';
|
||||||
|
|
||||||
import { ConfigContext } from '../../../../context';
|
import { ConfigContext } from '../../../../context';
|
||||||
import Lookup from '../../../../components/Lookup';
|
|
||||||
import FormActionGroup from '../../../../components/FormActionGroup';
|
import FormActionGroup from '../../../../components/FormActionGroup';
|
||||||
import AnsibleSelect from '../../../../components/AnsibleSelect';
|
import AnsibleSelect from '../../../../components/AnsibleSelect';
|
||||||
|
import InstanceGroupsLookup from '../../components/InstanceGroupsLookup';
|
||||||
|
|
||||||
class OrganizationEdit extends Component {
|
class OrganizationEdit extends Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
this.getInstanceGroups = this.getInstanceGroups.bind(this);
|
|
||||||
this.getRelatedInstanceGroups = this.getRelatedInstanceGroups.bind(this);
|
this.getRelatedInstanceGroups = this.getRelatedInstanceGroups.bind(this);
|
||||||
this.checkValidity = this.checkValidity.bind(this);
|
this.checkValidity = this.checkValidity.bind(this);
|
||||||
this.onFieldChange = this.onFieldChange.bind(this);
|
this.onFieldChange = this.onFieldChange.bind(this);
|
||||||
@@ -130,12 +129,6 @@ class OrganizationEdit extends Component {
|
|||||||
history.push(`/organizations/${id}`);
|
history.push(`/organizations/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getInstanceGroups (params) {
|
|
||||||
const { api } = this.props;
|
|
||||||
const data = await api.getInstanceGroups(params);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
async getRelatedInstanceGroups () {
|
async getRelatedInstanceGroups () {
|
||||||
const {
|
const {
|
||||||
api,
|
api,
|
||||||
@@ -179,6 +172,7 @@ class OrganizationEdit extends Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
|
const { api } = this.props;
|
||||||
const {
|
const {
|
||||||
form: {
|
form: {
|
||||||
name,
|
name,
|
||||||
@@ -190,12 +184,6 @@ class OrganizationEdit extends Component {
|
|||||||
error
|
error
|
||||||
} = this.state;
|
} = this.state;
|
||||||
|
|
||||||
const instanceGroupsLookupColumns = [
|
|
||||||
{ name: i18nMark('Name'), key: 'name', isSortable: true },
|
|
||||||
{ name: i18nMark('Modified'), key: 'modified', isSortable: false, isNumeric: true },
|
|
||||||
{ name: i18nMark('Created'), key: 'created', isSortable: false, isNumeric: true }
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<CardBody>
|
<CardBody>
|
||||||
<I18n>
|
<I18n>
|
||||||
@@ -249,20 +237,11 @@ class OrganizationEdit extends Component {
|
|||||||
)}
|
)}
|
||||||
</ConfigContext.Consumer>
|
</ConfigContext.Consumer>
|
||||||
</div>
|
</div>
|
||||||
<FormGroup
|
<InstanceGroupsLookup
|
||||||
fieldId="edit-org-form-instance-groups"
|
api={api}
|
||||||
label={i18n._(t`Instance Groups`)}
|
value={instanceGroups.value}
|
||||||
>
|
onChange={this.onLookupSave}
|
||||||
<Lookup
|
/>
|
||||||
columns={instanceGroupsLookupColumns}
|
|
||||||
getItems={this.getInstanceGroups}
|
|
||||||
lookupHeader={i18n._(t`Instance Groups`)}
|
|
||||||
name="instanceGroups"
|
|
||||||
onLookupSave={this.onLookupSave}
|
|
||||||
sortedColumnKey="name"
|
|
||||||
value={instanceGroups.value}
|
|
||||||
/>
|
|
||||||
</FormGroup>
|
|
||||||
<FormActionGroup
|
<FormActionGroup
|
||||||
onCancel={this.onCancel}
|
onCancel={this.onCancel}
|
||||||
onSubmit={this.onSubmit}
|
onSubmit={this.onSubmit}
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { withRouter } from 'react-router-dom';
|
import { withRouter } from 'react-router-dom';
|
||||||
import { I18n, i18nMark } from '@lingui/react';
|
import { I18n } from '@lingui/react';
|
||||||
import { t } from '@lingui/macro';
|
import { t } from '@lingui/macro';
|
||||||
import {
|
import {
|
||||||
PageSection,
|
PageSection,
|
||||||
@@ -18,15 +18,14 @@ import {
|
|||||||
import { QuestionCircleIcon, TimesIcon } from '@patternfly/react-icons';
|
import { QuestionCircleIcon, TimesIcon } from '@patternfly/react-icons';
|
||||||
|
|
||||||
import { ConfigContext } from '../../../context';
|
import { ConfigContext } from '../../../context';
|
||||||
import Lookup from '../../../components/Lookup';
|
|
||||||
import AnsibleSelect from '../../../components/AnsibleSelect';
|
import AnsibleSelect from '../../../components/AnsibleSelect';
|
||||||
import FormActionGroup from '../../../components/FormActionGroup';
|
import FormActionGroup from '../../../components/FormActionGroup';
|
||||||
|
import InstanceGroupsLookup from '../components/InstanceGroupsLookup';
|
||||||
|
|
||||||
class OrganizationAdd extends React.Component {
|
class OrganizationAdd extends React.Component {
|
||||||
constructor (props) {
|
constructor (props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
this.getInstanceGroups = this.getInstanceGroups.bind(this);
|
|
||||||
this.onFieldChange = this.onFieldChange.bind(this);
|
this.onFieldChange = this.onFieldChange.bind(this);
|
||||||
this.onLookupSave = this.onLookupSave.bind(this);
|
this.onLookupSave = this.onLookupSave.bind(this);
|
||||||
this.onSubmit = this.onSubmit.bind(this);
|
this.onSubmit = this.onSubmit.bind(this);
|
||||||
@@ -88,13 +87,8 @@ class OrganizationAdd extends React.Component {
|
|||||||
history.push(`/organizations/${id}`);
|
history.push(`/organizations/${id}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
async getInstanceGroups (params) {
|
|
||||||
const { api } = this.props;
|
|
||||||
const data = await api.getInstanceGroups(params);
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
|
|
||||||
render () {
|
render () {
|
||||||
|
const { api } = this.props;
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
description,
|
description,
|
||||||
@@ -104,11 +98,6 @@ class OrganizationAdd extends React.Component {
|
|||||||
error
|
error
|
||||||
} = this.state;
|
} = this.state;
|
||||||
const enabled = name.length > 0; // TODO: add better form validation
|
const enabled = name.length > 0; // TODO: add better form validation
|
||||||
const instanceGroupsLookupColumns = [
|
|
||||||
{ name: i18nMark('Name'), key: 'name', isSortable: true },
|
|
||||||
{ name: i18nMark('Modified'), key: 'modified', isSortable: false, isNumeric: true },
|
|
||||||
{ name: i18nMark('Created'), key: 'created', isSortable: false, isNumeric: true }
|
|
||||||
];
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<PageSection>
|
<PageSection>
|
||||||
@@ -153,31 +142,11 @@ class OrganizationAdd extends React.Component {
|
|||||||
onChange={this.onFieldChange}
|
onChange={this.onFieldChange}
|
||||||
/>
|
/>
|
||||||
</FormGroup>
|
</FormGroup>
|
||||||
<FormGroup
|
<InstanceGroupsLookup
|
||||||
label={(
|
api={api}
|
||||||
<Fragment>
|
value={instanceGroups}
|
||||||
{i18n._(t`Instance Groups`)}
|
onChange={this.onLookupSave}
|
||||||
{' '}
|
/>
|
||||||
<Tooltip
|
|
||||||
position="right"
|
|
||||||
content={i18n._(t`Select the Instance Groups for this Organization to run on.`)}
|
|
||||||
>
|
|
||||||
<QuestionCircleIcon />
|
|
||||||
</Tooltip>
|
|
||||||
</Fragment>
|
|
||||||
)}
|
|
||||||
fieldId="add-org-form-instance-groups"
|
|
||||||
>
|
|
||||||
<Lookup
|
|
||||||
lookupHeader={i18n._(t`Instance Groups`)}
|
|
||||||
name="instanceGroups"
|
|
||||||
value={instanceGroups}
|
|
||||||
onLookupSave={this.onLookupSave}
|
|
||||||
getItems={this.getInstanceGroups}
|
|
||||||
columns={instanceGroupsLookupColumns}
|
|
||||||
sortedColumnKey="name"
|
|
||||||
/>
|
|
||||||
</FormGroup>
|
|
||||||
<ConfigContext.Consumer>
|
<ConfigContext.Consumer>
|
||||||
{({ custom_virtualenvs }) => (
|
{({ custom_virtualenvs }) => (
|
||||||
custom_virtualenvs && custom_virtualenvs.length > 1 && (
|
custom_virtualenvs && custom_virtualenvs.length > 1 && (
|
||||||
|
|||||||
Reference in New Issue
Block a user