import type { FC } from 'react'; import { Badge as MuiBadge } from 'component/common/Badge/Badge'; import AccessTime from '@mui/icons-material/AccessTime'; import Check from '@mui/icons-material/Check'; import CircleOutlined from '@mui/icons-material/CircleOutlined'; import Close from '@mui/icons-material/Close'; import ErrorIcon from '@mui/icons-material/Error'; import PauseCircle from '@mui/icons-material/PauseCircle'; import { HtmlTooltip } from 'component/common/HtmlTooltip/HtmlTooltip'; import { useLocationSettings } from 'hooks/useLocationSettings'; import type { ScheduledChangeRequest, UnscheduledChangeRequest, } from '../changeRequest.types'; import { styled } from '@mui/material'; const Badge = styled(MuiBadge)({ whiteSpace: 'nowrap', }); export interface IChangeRequestStatusBadgeProps { changeRequest: | Pick | Pick | undefined; } const ReviewRequiredBadge: FC = () => ( }> Review required ); const DraftBadge: FC = () => Draft; export const ChangeRequestStatusBadge: FC = ({ changeRequest, }) => { const { locationSettings } = useLocationSettings(); if (!changeRequest) { return null; } const { state } = changeRequest; switch (state) { case 'Draft': return ; case 'In review': return ; case 'Approved': return ( }> Approved ); case 'Applied': return ( }> Applied ); case 'Cancelled': return ( }> Cancelled ); case 'Rejected': return ( }> Rejected ); case 'Scheduled': { const { schedule } = changeRequest; const scheduledAt = new Date(schedule.scheduledAt).toLocaleString( locationSettings.locale, ); const { color, icon, tooltipTitle } = (() => { switch (schedule.status) { case 'failed': return { color: 'error' as const, icon: , tooltipTitle: `Failed on ${scheduledAt} because of ${ schedule.reason ?? schedule.failureReason }`, }; case 'suspended': return { color: 'disabled' as const, icon: , tooltipTitle: `Suspended because: ${schedule.reason}`, }; default: return { color: 'warning' as const, icon: , tooltipTitle: `Scheduled for ${scheduledAt}`, }; } })(); return ( Scheduled ); } default: return ; } };