diff --git a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestOverview.tsx b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestOverview.tsx
index b0a8fbec67..265b35aa3f 100644
--- a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestOverview.tsx
+++ b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestOverview.tsx
@@ -111,7 +111,7 @@ export const ChangeRequestOverview: FC = () => {
changeRequest.environment,
);
- const hasSchedule = Boolean(changeRequest.schedule?.scheduledAt);
+ const hasSchedule = Boolean('schedule' in changeRequest && changeRequest.schedule?.scheduledAt);
const onApplyChanges = async () => {
try {
@@ -266,8 +266,7 @@ export const ChangeRequestOverview: FC = () => {
diff --git a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx
index 72582e23eb..d557f7b186 100644
--- a/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx
+++ b/frontend/src/component/changeRequest/ChangeRequestOverview/ChangeRequestTimeline/ChangeRequestTimeline.tsx
@@ -6,18 +6,25 @@ import TimelineSeparator from '@mui/lab/TimelineSeparator';
import TimelineDot from '@mui/lab/TimelineDot';
import TimelineConnector from '@mui/lab/TimelineConnector';
import TimelineContent from '@mui/lab/TimelineContent';
-import { ChangeRequestState } from '../../changeRequest.types';
+import {
+ ChangeRequestSchedule,
+ ChangeRequestState,
+} from '../../changeRequest.types';
import { ConditionallyRender } from '../../../common/ConditionallyRender/ConditionallyRender';
import { HtmlTooltip } from '../../../common/HtmlTooltip/HtmlTooltip';
import { Error as ErrorIcon } from '@mui/icons-material';
import { useLocationSettings } from 'hooks/useLocationSettings';
import { formatDateYMDHMS } from 'utils/formatDate';
-interface ISuggestChangeTimelineProps {
- state: ChangeRequestState;
- scheduledAt?: string;
- failureReason?: string;
-}
+type ISuggestChangeTimelineProps =
+ | {
+ state: Exclude;
+ schedule: undefined;
+ }
+ | {
+ state: 'Scheduled';
+ schedule: ChangeRequestSchedule;
+ };
const StyledPaper = styled(Paper)(({ theme }) => ({
marginTop: theme.spacing(2),
@@ -90,8 +97,7 @@ export const determineColor = (
export const ChangeRequestTimeline: FC = ({
state,
- scheduledAt,
- failureReason,
+ schedule,
}) => {
let data;
switch (state) {
@@ -106,28 +112,39 @@ export const ChangeRequestTimeline: FC = ({
}
const activeIndex = data.findIndex((item) => item === state);
- const { locationSettings } = useLocationSettings();
-
return (
{data.map((title, index) => {
- const subtitle =
- scheduledAt &&
- state === 'Scheduled' &&
- state === title
- ? formatDateYMDHMS(
- new Date(scheduledAt),
- locationSettings?.locale,
- )
- : undefined;
+ console.log('title and state ++', title, state);
+ if (schedule && title === 'Scheduled') {
+ console.log('Title for scheduled is', title, state);
+
+ return createTimelineScheduleItem(
+ schedule,
+ // color,
+ // title,
+ // index < data.length - 1,
+ // timelineDotProps,
+ );
+ }
+
+ // const subtitle =
+ // scheduledAt &&
+ // state === 'Scheduled' &&
+ // state === title
+ // ? formatDateYMDHMS(
+ // new Date(scheduledAt),
+ // locationSettings?.locale,
+ // )
+ // : undefined;
const color = determineColor(
state,
activeIndex,
title,
index,
- failureReason,
+ // failureReason,
);
let timelineDotProps = {};
@@ -142,8 +159,6 @@ export const ChangeRequestTimeline: FC = ({
return createTimelineItem(
color,
title,
- subtitle,
- failureReason,
index < data.length - 1,
timelineDotProps,
);
@@ -154,11 +169,96 @@ export const ChangeRequestTimeline: FC = ({
);
};
+const createTimelineScheduleItem = (
+ schedule: ChangeRequestSchedule,
+ // color: 'primary' | 'success' | 'grey' | 'error' | 'warning',
+ // title: string,
+ // subtitle: string | undefined,
+ // failureReason: string | undefined,
+ // shouldConnectToNextItem: boolean,
+ // timelineDotProps: { [key: string]: string | undefined } = {},
+) => {
+ const { locationSettings } = useLocationSettings();
+
+ const time = formatDateYMDHMS(
+ new Date(schedule.scheduledAt),
+ locationSettings?.locale,
+ );
+
+ const color = (() => {
+ switch (schedule.status) {
+ case 'suspended':
+ return 'grey';
+ case 'failed':
+ return 'error';
+ case 'pending':
+ default:
+ return 'warning';
+ }
+ })();
+
+ const title = `Schedule ${schedule.status}`;
+
+ const subtitle = (() => {
+ switch (schedule.status) {
+ case 'suspended':
+ return `was ${time}`;
+ case 'failed':
+ return `at ${time}`;
+ case 'pending':
+ default:
+ return `for ${time}`;
+ }
+ })();
+
+ const reason = (() => {
+ switch (schedule.status) {
+ case 'suspended':
+ return (
+
+
+
+ );
+ case 'failed':
+ return (
+
+
+
+ );
+ case 'pending':
+ default:
+ return <>>;
+ }
+ })();
+
+ return (
+
+
+
+
+
+
+ {title}
+
+ {`(${subtitle})`}
+ {reason}
+
+
+
+ );
+};
+
const createTimelineItem = (
color: 'primary' | 'success' | 'grey' | 'error' | 'warning',
title: string,
- subtitle: string | undefined,
- failureReason: string | undefined,
shouldConnectToNextItem: boolean,
timelineDotProps: { [key: string]: string | undefined } = {},
) => (
@@ -167,33 +267,6 @@ const createTimelineItem = (
{shouldConnectToNextItem && }
-
- {title}
-
- {`(for ${subtitle})`}
-
-
-
- }
- />
-
- }
- />
-
+ {title}
);