mirror of
https://github.com/ansible/awx.git
synced 2026-01-17 12:41:19 -03:30
wire-in instance groups to JT form
This commit is contained in:
parent
93b794eaa7
commit
0254cf3567
@ -17,23 +17,30 @@ function JobTemplateAdd({ history, i18n }) {
|
||||
const [formSubmitError, setFormSubmitError] = useState(null);
|
||||
|
||||
async function handleSubmit(values) {
|
||||
const { newLabels, removedLabels } = values;
|
||||
delete values.newLabels;
|
||||
delete values.removedLabels;
|
||||
const {
|
||||
newLabels,
|
||||
removedLabels,
|
||||
addedInstanceGroups,
|
||||
removedInstanceGroups,
|
||||
...remainingValues
|
||||
} = values;
|
||||
|
||||
setFormSubmitError(null);
|
||||
try {
|
||||
const {
|
||||
data: { id, type },
|
||||
} = await JobTemplatesAPI.create(values);
|
||||
await Promise.all([submitLabels(id, newLabels, removedLabels)]);
|
||||
} = await JobTemplatesAPI.create(remainingValues);
|
||||
await Promise.all([
|
||||
submitLabels(id, newLabels, removedLabels),
|
||||
submitInstanceGroups(id, addedInstanceGroups, removedInstanceGroups),
|
||||
]);
|
||||
history.push(`/templates/${type}/${id}/details`);
|
||||
} catch (error) {
|
||||
setFormSubmitError(error);
|
||||
}
|
||||
}
|
||||
|
||||
async function submitLabels(id, newLabels = [], removedLabels = []) {
|
||||
function submitLabels(id, newLabels = [], removedLabels = []) {
|
||||
const disassociationPromises = removedLabels.map(label =>
|
||||
JobTemplatesAPI.disassociateLabel(id, label)
|
||||
);
|
||||
@ -44,12 +51,18 @@ function JobTemplateAdd({ history, i18n }) {
|
||||
.filter(label => label.organization)
|
||||
.map(label => JobTemplatesAPI.generateLabel(id, label));
|
||||
|
||||
const results = await Promise.all([
|
||||
return Promise.all([
|
||||
...disassociationPromises,
|
||||
...associationPromises,
|
||||
...creationPromises,
|
||||
]);
|
||||
return results;
|
||||
}
|
||||
|
||||
function submitInstanceGroups(templateId, addedGroups) {
|
||||
const associatePromises = addedGroups.map(group =>
|
||||
JobTemplatesAPI.associateInstanceGroup(templateId, group.id)
|
||||
);
|
||||
return Promise.all(associatePromises);
|
||||
}
|
||||
|
||||
function handleCancel() {
|
||||
|
||||
@ -102,18 +102,22 @@ class JobTemplateEdit extends Component {
|
||||
}
|
||||
|
||||
async handleSubmit(values) {
|
||||
const { template, history } = this.props;
|
||||
const {
|
||||
template: { id },
|
||||
history,
|
||||
} = this.props;
|
||||
const { newLabels, removedLabels } = values;
|
||||
delete values.newLabels;
|
||||
delete values.removedLabels;
|
||||
newLabels,
|
||||
removedLabels,
|
||||
addedInstanceGroups,
|
||||
removedInstanceGroups,
|
||||
...remainingValues
|
||||
} = values;
|
||||
|
||||
this.setState({ formSubmitError: null });
|
||||
try {
|
||||
await JobTemplatesAPI.update(id, values);
|
||||
await Promise.all([this.submitLabels(newLabels, removedLabels)]);
|
||||
await JobTemplatesAPI.update(template.id, remainingValues);
|
||||
await Promise.all([
|
||||
this.submitLabels(newLabels, removedLabels),
|
||||
this.submitInstanceGroups(addedInstanceGroups, removedInstanceGroups),
|
||||
]);
|
||||
history.push(this.detailsUrl);
|
||||
} catch (formSubmitError) {
|
||||
this.setState({ formSubmitError });
|
||||
@ -121,18 +125,16 @@ class JobTemplateEdit extends Component {
|
||||
}
|
||||
|
||||
async submitLabels(newLabels = [], removedLabels = []) {
|
||||
const {
|
||||
template: { id },
|
||||
} = this.props;
|
||||
const { template } = this.props;
|
||||
const disassociationPromises = removedLabels.map(label =>
|
||||
JobTemplatesAPI.disassociateLabel(id, label)
|
||||
JobTemplatesAPI.disassociateLabel(template.id, label)
|
||||
);
|
||||
const associationPromises = newLabels
|
||||
.filter(label => !label.organization)
|
||||
.map(label => JobTemplatesAPI.associateLabel(id, label));
|
||||
.map(label => JobTemplatesAPI.associateLabel(template.id, label));
|
||||
const creationPromises = newLabels
|
||||
.filter(label => label.organization)
|
||||
.map(label => JobTemplatesAPI.generateLabel(id, label));
|
||||
.map(label => JobTemplatesAPI.generateLabel(template.id, label));
|
||||
|
||||
const results = await Promise.all([
|
||||
...disassociationPromises,
|
||||
@ -142,6 +144,17 @@ class JobTemplateEdit extends Component {
|
||||
return results;
|
||||
}
|
||||
|
||||
async submitInstanceGroups(addedGroups, removedGroups) {
|
||||
const { template } = this.props;
|
||||
const associatePromises = addedGroups.map(group =>
|
||||
JobTemplatesAPI.associateInstanceGroup(template.id, group.id)
|
||||
);
|
||||
const disassociatePromises = removedGroups.map(group =>
|
||||
JobTemplatesAPI.disassociateInstanceGroup(template.id, group.id)
|
||||
);
|
||||
return Promise.all([...associatePromises, ...disassociatePromises]);
|
||||
}
|
||||
|
||||
handleCancel() {
|
||||
const { history } = this.props;
|
||||
history.push(this.detailsUrl);
|
||||
|
||||
@ -142,7 +142,8 @@ class JobTemplateForm extends Component {
|
||||
try {
|
||||
const { data } = await JobTemplatesAPI.readInstanceGroups(template.id);
|
||||
this.setState({
|
||||
relatedInstanceGroups: data.results,
|
||||
initialInstanceGroups: data.results,
|
||||
relatedInstanceGroups: [...data.results],
|
||||
});
|
||||
} catch (err) {
|
||||
this.setState({ contentError: err });
|
||||
@ -232,6 +233,26 @@ class JobTemplateForm extends Component {
|
||||
}
|
||||
|
||||
handleInstanceGroupsChange(relatedInstanceGroups) {
|
||||
const { setFieldValue } = this.props;
|
||||
const { initialInstanceGroups } = this.state;
|
||||
let added = [];
|
||||
const removed = [];
|
||||
if (initialInstanceGroups) {
|
||||
initialInstanceGroups.forEach(group => {
|
||||
if (!relatedInstanceGroups.find(g => g.id === group.id)) {
|
||||
removed.push(group);
|
||||
}
|
||||
});
|
||||
relatedInstanceGroups.forEach(group => {
|
||||
if (!initialInstanceGroups.find(g => g.id === group.id)) {
|
||||
added.push(group);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
added = relatedInstanceGroups;
|
||||
}
|
||||
setFieldValue('addedInstanceGroups', added);
|
||||
setFieldValue('removedInstanceGroups', removed);
|
||||
this.setState({ relatedInstanceGroups });
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user