mirror of
https://github.com/ansible/awx.git
synced 2026-05-07 17:37:37 -02:30
Moves request to generate preview down into the ScheduleDetail component
This commit is contained in:
@@ -2,7 +2,6 @@ import React, { useCallback, useEffect } from 'react';
|
|||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { rrulestr } from 'rrule';
|
import { rrulestr } from 'rrule';
|
||||||
import styled from 'styled-components';
|
import styled from 'styled-components';
|
||||||
import { shape } from 'prop-types';
|
|
||||||
import { withI18n } from '@lingui/react';
|
import { withI18n } from '@lingui/react';
|
||||||
import { t } from '@lingui/macro';
|
import { t } from '@lingui/macro';
|
||||||
import { Schedule } from '@types';
|
import { Schedule } from '@types';
|
||||||
@@ -21,7 +20,7 @@ const PromptTitle = styled(Title)`
|
|||||||
--pf-c-title--m-md--FontWeight: 700;
|
--pf-c-title--m-md--FontWeight: 700;
|
||||||
`;
|
`;
|
||||||
|
|
||||||
function ScheduleDetail({ preview, schedule, i18n }) {
|
function ScheduleDetail({ schedule, i18n }) {
|
||||||
const {
|
const {
|
||||||
id,
|
id,
|
||||||
created,
|
created,
|
||||||
@@ -44,21 +43,26 @@ function ScheduleDetail({ preview, schedule, i18n }) {
|
|||||||
} = schedule;
|
} = schedule;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
result: credentials,
|
result: [credentials, preview],
|
||||||
isLoading,
|
isLoading,
|
||||||
error,
|
error,
|
||||||
request: fetchCredentials,
|
request: fetchCredentialsAndPreview,
|
||||||
} = useRequest(
|
} = useRequest(
|
||||||
useCallback(async () => {
|
useCallback(async () => {
|
||||||
const { data } = await SchedulesAPI.readCredentials(id);
|
const [{ data }, { data: schedulePreview }] = await Promise.all([
|
||||||
return data.results;
|
SchedulesAPI.readCredentials(id),
|
||||||
}, [id]),
|
SchedulesAPI.createPreview({
|
||||||
|
rrule,
|
||||||
|
}),
|
||||||
|
]);
|
||||||
|
return [data.results, schedulePreview];
|
||||||
|
}, [id, rrule]),
|
||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
fetchCredentials();
|
fetchCredentialsAndPreview();
|
||||||
}, [fetchCredentials]);
|
}, [fetchCredentialsAndPreview]);
|
||||||
|
|
||||||
const rule = rrulestr(rrule);
|
const rule = rrulestr(rrule);
|
||||||
const repeatFrequency =
|
const repeatFrequency =
|
||||||
@@ -192,12 +196,7 @@ function ScheduleDetail({ preview, schedule, i18n }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ScheduleDetail.propTypes = {
|
ScheduleDetail.propTypes = {
|
||||||
preview: shape(),
|
|
||||||
schedule: Schedule.isRequired,
|
schedule: Schedule.isRequired,
|
||||||
};
|
};
|
||||||
|
|
||||||
ScheduleDetail.defaultProps = {
|
|
||||||
preview: { local: [], utc: [] },
|
|
||||||
};
|
|
||||||
|
|
||||||
export default withI18n()(ScheduleDetail);
|
export default withI18n()(ScheduleDetail);
|
||||||
|
|||||||
@@ -52,10 +52,12 @@ const schedule = {
|
|||||||
next_run: '2020-03-16T04:00:00Z',
|
next_run: '2020-03-16T04:00:00Z',
|
||||||
};
|
};
|
||||||
|
|
||||||
const preview = {
|
SchedulesAPI.createPreview.mockResolvedValue({
|
||||||
local: [],
|
data: {
|
||||||
utc: [],
|
local: [],
|
||||||
};
|
utc: [],
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
describe('<ScheduleDetail />', () => {
|
describe('<ScheduleDetail />', () => {
|
||||||
let wrapper;
|
let wrapper;
|
||||||
@@ -76,9 +78,7 @@ describe('<ScheduleDetail />', () => {
|
|||||||
wrapper = mountWithContexts(
|
wrapper = mountWithContexts(
|
||||||
<Route
|
<Route
|
||||||
path="/templates/job_template/:id/schedules/:scheduleId"
|
path="/templates/job_template/:id/schedules/:scheduleId"
|
||||||
component={() => (
|
component={() => <ScheduleDetail schedule={schedule} />}
|
||||||
<ScheduleDetail schedule={schedule} preview={preview} />
|
|
||||||
)}
|
|
||||||
/>,
|
/>,
|
||||||
{
|
{
|
||||||
context: {
|
context: {
|
||||||
@@ -159,9 +159,7 @@ describe('<ScheduleDetail />', () => {
|
|||||||
wrapper = mountWithContexts(
|
wrapper = mountWithContexts(
|
||||||
<Route
|
<Route
|
||||||
path="/templates/job_template/:id/schedules/:scheduleId"
|
path="/templates/job_template/:id/schedules/:scheduleId"
|
||||||
component={() => (
|
component={() => <ScheduleDetail schedule={scheduleWithPrompts} />}
|
||||||
<ScheduleDetail schedule={scheduleWithPrompts} preview={preview} />
|
|
||||||
)}
|
|
||||||
/>,
|
/>,
|
||||||
{
|
{
|
||||||
context: {
|
context: {
|
||||||
@@ -243,9 +241,7 @@ describe('<ScheduleDetail />', () => {
|
|||||||
wrapper = mountWithContexts(
|
wrapper = mountWithContexts(
|
||||||
<Route
|
<Route
|
||||||
path="/templates/job_template/:id/schedules/:scheduleId"
|
path="/templates/job_template/:id/schedules/:scheduleId"
|
||||||
component={() => (
|
component={() => <ScheduleDetail schedule={schedule} />}
|
||||||
<ScheduleDetail schedule={schedule} preview={preview} />
|
|
||||||
)}
|
|
||||||
/>,
|
/>,
|
||||||
{
|
{
|
||||||
context: {
|
context: {
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import { SchedulesAPI } from '@api';
|
|||||||
|
|
||||||
function JobTemplateSchedule({ i18n, setBreadcrumb, jobTemplate }) {
|
function JobTemplateSchedule({ i18n, setBreadcrumb, jobTemplate }) {
|
||||||
const [jobTemplateSchedule, setJobTemplateSchedule] = useState(null);
|
const [jobTemplateSchedule, setJobTemplateSchedule] = useState(null);
|
||||||
const [schedulePreview, setSchedulePreview] = useState(null);
|
|
||||||
const [contentLoading, setContentLoading] = useState(true);
|
const [contentLoading, setContentLoading] = useState(true);
|
||||||
const [contentError, setContentError] = useState(null);
|
const [contentError, setContentError] = useState(null);
|
||||||
const { id: jobTemplateId, scheduleId } = useParams();
|
const { id: jobTemplateId, scheduleId } = useParams();
|
||||||
@@ -32,12 +31,7 @@ function JobTemplateSchedule({ i18n, setBreadcrumb, jobTemplate }) {
|
|||||||
const loadData = async () => {
|
const loadData = async () => {
|
||||||
try {
|
try {
|
||||||
const { data } = await SchedulesAPI.readDetail(scheduleId);
|
const { data } = await SchedulesAPI.readDetail(scheduleId);
|
||||||
const { data: preview } = await SchedulesAPI.createPreview({
|
|
||||||
rrule: data.rrule,
|
|
||||||
});
|
|
||||||
|
|
||||||
setJobTemplateSchedule(data);
|
setJobTemplateSchedule(data);
|
||||||
setSchedulePreview(preview);
|
|
||||||
setBreadcrumb(jobTemplate, data);
|
setBreadcrumb(jobTemplate, data);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setContentError(err);
|
setContentError(err);
|
||||||
@@ -122,12 +116,7 @@ function JobTemplateSchedule({ i18n, setBreadcrumb, jobTemplate }) {
|
|||||||
key="details"
|
key="details"
|
||||||
path="/templates/job_template/:id/schedules/:scheduleId/details"
|
path="/templates/job_template/:id/schedules/:scheduleId/details"
|
||||||
render={() => {
|
render={() => {
|
||||||
return (
|
return <ScheduleDetail schedule={jobTemplateSchedule} />;
|
||||||
<ScheduleDetail
|
|
||||||
schedule={jobTemplateSchedule}
|
|
||||||
preview={schedulePreview}
|
|
||||||
/>
|
|
||||||
);
|
|
||||||
}}
|
}}
|
||||||
/>,
|
/>,
|
||||||
]}
|
]}
|
||||||
|
|||||||
Reference in New Issue
Block a user