From 3f936cd5e70aad315d8f669fd42ce7bfffc9a647 Mon Sep 17 00:00:00 2001 From: Jake McDermott Date: Wed, 9 Sep 2020 11:16:09 -0400 Subject: [PATCH] Add mgmt job schedules --- .../src/api/models/SystemJobTemplates.js | 10 +++- .../screens/ManagementJob/ManagementJob.jsx | 57 ++++++++++++------- .../ManagementJobSchedules.jsx | 10 ---- .../ManagementJobSchedules/index.js | 1 - 4 files changed, 44 insertions(+), 34 deletions(-) delete mode 100644 awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/ManagementJobSchedules.jsx delete mode 100644 awx/ui_next/src/screens/ManagementJob/ManagementJobSchedules/index.js 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';