Moves request to generate preview down into the ScheduleDetail component

This commit is contained in:
mabashian
2020-03-04 17:09:30 -05:00
parent 1f2edd81ab
commit 01fe89e43c
3 changed files with 23 additions and 39 deletions

View File

@@ -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);

View File

@@ -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: {

View File

@@ -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}
/>
);
}} }}
/>, />,
]} ]}