From bd7248d21cde2320f38428fe458f41b025c61b90 Mon Sep 17 00:00:00 2001 From: mabashian Date: Mon, 2 Dec 2019 14:51:22 -0500 Subject: [PATCH] Properly show template add button and options based on OPTIONS response on both job_templates and workflow_job_templates endpoints. --- .../Template/TemplateList/TemplateList.jsx | 75 ++++++++++++------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/awx/ui_next/src/screens/Template/TemplateList/TemplateList.jsx b/awx/ui_next/src/screens/Template/TemplateList/TemplateList.jsx index 7ec890283e..6e305aca2b 100644 --- a/awx/ui_next/src/screens/Template/TemplateList/TemplateList.jsx +++ b/awx/ui_next/src/screens/Template/TemplateList/TemplateList.jsx @@ -110,19 +110,34 @@ class TemplatesList extends Component { async loadTemplates() { const { location } = this.props; - const { actions: cachedActions } = this.state; + const { + jtActions: cachedJTActions, + wfjtActions: cachedWFJTActions, + } = this.state; const params = parseQueryString(QS_CONFIG, location.search); - let optionsPromise; - if (cachedActions) { - optionsPromise = Promise.resolve({ data: { actions: cachedActions } }); + let jtOptionsPromise; + if (cachedJTActions) { + jtOptionsPromise = Promise.resolve({ + data: { actions: cachedJTActions }, + }); } 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([ UnifiedJobTemplatesAPI.read(params), - optionsPromise, + jtOptionsPromise, + wfjtOptionsPromise, ]); this.setState({ contentError: null, hasContentLoading: true }); @@ -133,12 +148,16 @@ class TemplatesList extends Component { data: { count, results }, }, { - data: { actions }, + data: { actions: jtActions }, + }, + { + data: { actions: wfjtActions }, }, ] = await promises; this.setState({ - actions, + jtActions, + wfjtActions, itemCount: count, templates: results, selected: [], @@ -158,27 +177,31 @@ class TemplatesList extends Component { templates, itemCount, selected, - actions, + jtActions, + wfjtActions, } = this.state; const { match, i18n } = this.props; - const canAdd = - actions && Object.prototype.hasOwnProperty.call(actions, 'POST'); + const canAddJT = + 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 = selected.length === templates.length && selected.length > 0; const addButton = ( - + ); return ( @@ -225,7 +248,7 @@ class TemplatesList extends Component { itemsToDelete={selected} pluralizedItemName="Templates" />, - canAdd && addButton, + (canAddJT || canAddWFJT) && addButton, ]} /> )} @@ -239,7 +262,7 @@ class TemplatesList extends Component { isSelected={selected.some(row => row.id === template.id)} /> )} - emptyStateControls={canAdd && addButton} + emptyStateControls={(canAddJT || canAddWFJT) && addButton} />