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}
/>