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:
mabashian
2019-12-02 14:51:22 -05:00
parent 9bdd49bec5
commit bd7248d21c

View File

@@ -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