import React, { FunctionComponent, useMemo } from 'react'; import { TaskProps } from '../types/taskProps'; import { useLocale } from 'hooks/useLocale'; import { formatDistance, formatDistanceToNow, parseISO } from 'date-fns'; import Typography from '@mui/material/Typography'; import globalize from 'lib/globalize'; const TaskLastRan: FunctionComponent = ({ task }: TaskProps) => { const { dateFnsLocale } = useLocale(); const [ lastRan, timeTaken ] = useMemo(() => { if (task.LastExecutionResult?.StartTimeUtc && task.LastExecutionResult?.EndTimeUtc) { const endTime = parseISO(task.LastExecutionResult.EndTimeUtc); const startTime = parseISO(task.LastExecutionResult.StartTimeUtc); return [ formatDistanceToNow(endTime, { locale: dateFnsLocale, addSuffix: true }), formatDistance(startTime, endTime, { locale: dateFnsLocale }) ]; } return []; }, [task, dateFnsLocale]); if (task.State == 'Idle') { if (task.LastExecutionResult?.StartTimeUtc && task.LastExecutionResult?.EndTimeUtc) { const lastResultStatus = task.LastExecutionResult.Status; return ( {globalize.translate('LabelScheduledTaskLastRan', lastRan, timeTaken)} {lastResultStatus == 'Failed' && {` (${globalize.translate('LabelFailed')})`}} {lastResultStatus == 'Cancelled' && {` (${globalize.translate('LabelCancelled')})`}} {lastResultStatus == 'Aborted' && {` (${globalize.translate('LabelAbortedByServerShutdown')})`}} ); } } else { return ( {globalize.translate('LabelStopping')} ); } }; export default TaskLastRan;