mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
Properly show template add button and options based on OPTIONS response on both job_templates and workflow_job_templates endpoints.
This commit is contained in:
@@ -110,19 +110,34 @@ class TemplatesList extends Component {
|
|||||||
|
|
||||||
async loadTemplates() {
|
async loadTemplates() {
|
||||||
const { location } = this.props;
|
const { location } = this.props;
|
||||||
const { actions: cachedActions } = this.state;
|
const {
|
||||||
|
jtActions: cachedJTActions,
|
||||||
|
wfjtActions: cachedWFJTActions,
|
||||||
|
} = this.state;
|
||||||
const params = parseQueryString(QS_CONFIG, location.search);
|
const params = parseQueryString(QS_CONFIG, location.search);
|
||||||
|
|
||||||
let optionsPromise;
|
let jtOptionsPromise;
|
||||||
if (cachedActions) {
|
if (cachedJTActions) {
|
||||||
optionsPromise = Promise.resolve({ data: { actions: cachedActions } });
|
jtOptionsPromise = Promise.resolve({
|
||||||
|
data: { actions: cachedJTActions },
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
optionsPromise = UnifiedJobTemplatesAPI.readOptions();
|
jtOptionsPromise = JobTemplatesAPI.readOptions();
|
||||||
|
}
|
||||||
|
|
||||||
|
let wfjtOptionsPromise;
|
||||||
|
if (cachedWFJTActions) {
|
||||||
|
wfjtOptionsPromise = Promise.resolve({
|
||||||
|
data: { actions: cachedWFJTActions },
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
wfjtOptionsPromise = WorkflowJobTemplatesAPI.readOptions();
|
||||||
}
|
}
|
||||||
|
|
||||||
const promises = Promise.all([
|
const promises = Promise.all([
|
||||||
UnifiedJobTemplatesAPI.read(params),
|
UnifiedJobTemplatesAPI.read(params),
|
||||||
optionsPromise,
|
jtOptionsPromise,
|
||||||
|
wfjtOptionsPromise,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
this.setState({ contentError: null, hasContentLoading: true });
|
this.setState({ contentError: null, hasContentLoading: true });
|
||||||
@@ -133,12 +148,16 @@ class TemplatesList extends Component {
|
|||||||
data: { count, results },
|
data: { count, results },
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
data: { actions },
|
data: { actions: jtActions },
|
||||||
|
},
|
||||||
|
{
|
||||||
|
data: { actions: wfjtActions },
|
||||||
},
|
},
|
||||||
] = await promises;
|
] = await promises;
|
||||||
|
|
||||||
this.setState({
|
this.setState({
|
||||||
actions,
|
jtActions,
|
||||||
|
wfjtActions,
|
||||||
itemCount: count,
|
itemCount: count,
|
||||||
templates: results,
|
templates: results,
|
||||||
selected: [],
|
selected: [],
|
||||||
@@ -158,27 +177,31 @@ class TemplatesList extends Component {
|
|||||||
templates,
|
templates,
|
||||||
itemCount,
|
itemCount,
|
||||||
selected,
|
selected,
|
||||||
actions,
|
jtActions,
|
||||||
|
wfjtActions,
|
||||||
} = this.state;
|
} = this.state;
|
||||||
const { match, i18n } = this.props;
|
const { match, i18n } = this.props;
|
||||||
const canAdd =
|
const canAddJT =
|
||||||
actions && Object.prototype.hasOwnProperty.call(actions, 'POST');
|
jtActions && Object.prototype.hasOwnProperty.call(jtActions, 'POST');
|
||||||
|
const canAddWFJT =
|
||||||
|
wfjtActions && Object.prototype.hasOwnProperty.call(wfjtActions, 'POST');
|
||||||
|
const addButtonOptions = [];
|
||||||
|
if (canAddJT) {
|
||||||
|
addButtonOptions.push({
|
||||||
|
label: i18n._(t`Template`),
|
||||||
|
url: `${match.url}/job_template/add/`,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (canAddWFJT) {
|
||||||
|
addButtonOptions.push({
|
||||||
|
label: i18n._(t`Workflow Template`),
|
||||||
|
url: `${match.url}/workflow_job_template/add/`,
|
||||||
|
});
|
||||||
|
}
|
||||||
const isAllSelected =
|
const isAllSelected =
|
||||||
selected.length === templates.length && selected.length > 0;
|
selected.length === templates.length && selected.length > 0;
|
||||||
const addButton = (
|
const addButton = (
|
||||||
<AddDropDownButton
|
<AddDropDownButton key="add" dropdownItems={addButtonOptions} />
|
||||||
key="add"
|
|
||||||
dropdownItems={[
|
|
||||||
{
|
|
||||||
label: i18n._(t`Template`),
|
|
||||||
url: `${match.url}/template/add/`,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
label: i18n._(t`Workflow Template`),
|
|
||||||
url: `${match.url}/_workflow/add/`,
|
|
||||||
},
|
|
||||||
]}
|
|
||||||
/>
|
|
||||||
);
|
);
|
||||||
return (
|
return (
|
||||||
<PageSection>
|
<PageSection>
|
||||||
@@ -225,7 +248,7 @@ class TemplatesList extends Component {
|
|||||||
itemsToDelete={selected}
|
itemsToDelete={selected}
|
||||||
pluralizedItemName="Templates"
|
pluralizedItemName="Templates"
|
||||||
/>,
|
/>,
|
||||||
canAdd && addButton,
|
(canAddJT || canAddWFJT) && addButton,
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@@ -239,7 +262,7 @@ class TemplatesList extends Component {
|
|||||||
isSelected={selected.some(row => row.id === template.id)}
|
isSelected={selected.some(row => row.id === template.id)}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
emptyStateControls={canAdd && addButton}
|
emptyStateControls={(canAddJT || canAddWFJT) && addButton}
|
||||||
/>
|
/>
|
||||||
</Card>
|
</Card>
|
||||||
<AlertModal
|
<AlertModal
|
||||||
|
|||||||
Reference in New Issue
Block a user