diff --git a/awx/ui_next/src/api/models/SystemJobTemplates.js b/awx/ui_next/src/api/models/SystemJobTemplates.js
index 54712b9abe..7520a3a3d3 100644
--- a/awx/ui_next/src/api/models/SystemJobTemplates.js
+++ b/awx/ui_next/src/api/models/SystemJobTemplates.js
@@ -1,13 +1,19 @@
import Base from '../Base';
+import NotificationsMixin from '../mixins/Notifications.mixin';
+import SchedulesMixin from '../mixins/Schedules.mixin';
-class SystemJobTemplates extends Base {
+const Mixins = SchedulesMixin(NotificationsMixin(Base));
+
+class SystemJobTemplates extends Mixins {
constructor(http) {
super(http);
this.baseUrl = '/api/v2/system_job_templates/';
}
readDetail(id) {
- return this.http.get(`${this.baseUrl}${id}/`).then(({ data }) => data);
+ const path = `${this.baseUrl}${id}/`;
+
+ return this.http.get(path).then(({ data }) => data);
}
}
diff --git a/awx/ui_next/src/screens/ManagementJob/ManagementJob.jsx b/awx/ui_next/src/screens/ManagementJob/ManagementJob.jsx
index a875f95141..be0bedb8d6 100644
--- a/awx/ui_next/src/screens/ManagementJob/ManagementJob.jsx
+++ b/awx/ui_next/src/screens/ManagementJob/ManagementJob.jsx
@@ -6,34 +6,35 @@ import {
Switch,
useLocation,
useParams,
+ useRouteMatch,
} from 'react-router-dom';
import { withI18n } from '@lingui/react';
import { t } from '@lingui/macro';
import { CaretLeftIcon } from '@patternfly/react-icons';
import { Card, PageSection } from '@patternfly/react-core';
-import { useRouteMatch } from 'react-router-dom';
import { SystemJobTemplatesAPI } from '../../api';
-
import ContentError from '../../components/ContentError';
import ContentLoading from '../../components/ContentLoading';
import RoutedTabs from '../../components/RoutedTabs';
+import { Schedules } from '../../components/Schedule';
import { useConfig } from '../../contexts/Config';
import useRequest from '../../util/useRequest';
import ManagementJobDetails from './ManagementJobDetails';
import ManagementJobEdit from './ManagementJobEdit';
import ManagementJobNotifications from './ManagementJobNotifications';
-import ManagementJobSchedules from './ManagementJobSchedules';
function ManagementJob({ i18n, setBreadcrumb }) {
- const segment = '/management_jobs';
+ const basePath = '/management_jobs';
const match = useRouteMatch();
const { id } = useParams();
const { pathname } = useLocation();
const { me, isNotificationAdmin } = useConfig();
+ const canReadNotifications = isNotificationAdmin || me?.is_system_auditor;
+
const { isLoading, error, request, result } = useRequest(
useCallback(async () => SystemJobTemplatesAPI.readDetail(id), [id])
);
@@ -48,10 +49,17 @@ function ManagementJob({ i18n, setBreadcrumb }) {
setBreadcrumb(result);
}, [result, setBreadcrumb]);
+ const createSchedule = data =>
+ SystemJobTemplatesAPI.createSchedule(result.id, data);
+ const loadSchedules = params =>
+ SystemJobTemplatesAPI.readSchedules(result.id, params);
+ const loadScheduleOptions = () =>
+ SystemJobTemplatesAPI.readScheduleOptions(result.id);
+
const tabsArray = [
{
id: 99,
- link: segment,
+ link: basePath,
name: (
<>
@@ -61,7 +69,7 @@ function ManagementJob({ i18n, setBreadcrumb }) {
},
{
id: 0,
- link: `${segment}/${id}/details`,
+ link: `${basePath}/${id}/details`,
name: i18n._(t`Details`),
},
{
@@ -71,7 +79,7 @@ function ManagementJob({ i18n, setBreadcrumb }) {
},
];
- if (me?.is_system_auditor || isNotificationAdmin) {
+ if (canReadNotifications) {
tabsArray.push({
id: 2,
name: i18n._(t`Notifications`),
@@ -79,12 +87,15 @@ function ManagementJob({ i18n, setBreadcrumb }) {
});
}
+ let Tabs = ;
+ if (pathname.includes('edit') || pathname.includes('schedules/')) {
+ Tabs = null;
+ }
+
const LoadingScreen = (
- {pathname.endsWith('edit') ? null : (
-
- )}
+ {Tabs}
@@ -98,7 +109,7 @@ function ManagementJob({ i18n, setBreadcrumb }) {
{i18n._(t`Management job not found.`)}
{''}
- {i18n._(t`View all management jobs`)}
+ {i18n._(t`View all management jobs`)}
)}
@@ -117,26 +128,30 @@ function ManagementJob({ i18n, setBreadcrumb }) {
return (
- {pathname.endsWith('edit') ? null : (
-
- )}
+ {Tabs}
-
+
-
+
-
+
-
-
+
+
diff --git a/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/ManagementJobSchedules.jsx b/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/ManagementJobSchedules.jsx
deleted file mode 100644
index e3f48f9c57..0000000000
--- a/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/ManagementJobSchedules.jsx
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from 'react';
-
-import { CardBody } from '../../../components/Card';
-import { Schedules } from '../../../components/Schedule';
-
-function ManagementJobSchedules({ managementJob }) {
- return Management Job Schedules;
-}
-
-export default ManagementJobSchedules;
diff --git a/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/index.js b/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/index.js
deleted file mode 100644
index 983527b91a..0000000000
--- a/awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/index.js
+++ /dev/null
@@ -1 +0,0 @@
-export { default } from './ManagementJobSchedules';