81 lines
1.9 KiB
TypeScript
81 lines
1.9 KiB
TypeScript
import * as React from 'react';
|
|
import { DateTime } from 'luxon';
|
|
import Stack from '@mui/material/Stack';
|
|
import Box from '@mui/material/Box';
|
|
import Tooltip from '@mui/material/Tooltip';
|
|
import Typography from '@mui/material/Typography';
|
|
import type { IExecution } from 'types';
|
|
|
|
import useFormatMessage from 'hooks/useFormatMessage';
|
|
|
|
type ExecutionHeaderProps = {
|
|
execution: IExecution;
|
|
};
|
|
|
|
function ExecutionName(props: Pick<IExecution['flow'], 'name'>) {
|
|
return (
|
|
<Typography variant="h3" gutterBottom>
|
|
{props.name}
|
|
</Typography>
|
|
);
|
|
}
|
|
|
|
function ExecutionId(props: Pick<IExecution, 'id'>) {
|
|
const formatMessage = useFormatMessage();
|
|
|
|
const id = (
|
|
<Typography variant="body1" component="span">
|
|
{props.id}
|
|
</Typography>
|
|
);
|
|
|
|
return (
|
|
<Box sx={{ display: 'flex' }}>
|
|
<Typography variant="body2">
|
|
{formatMessage('execution.id', { id })}
|
|
</Typography>
|
|
</Box>
|
|
);
|
|
}
|
|
|
|
function ExecutionDate(props: Pick<IExecution, 'createdAt'>) {
|
|
const createdAt = DateTime.fromMillis(
|
|
parseInt(props.createdAt as string, 10)
|
|
);
|
|
const relativeCreatedAt = createdAt.toRelative();
|
|
|
|
return (
|
|
<Tooltip
|
|
title={createdAt.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)}
|
|
>
|
|
<Typography variant="body1" gutterBottom>
|
|
{relativeCreatedAt}
|
|
</Typography>
|
|
</Tooltip>
|
|
);
|
|
}
|
|
|
|
export default function ExecutionHeader(
|
|
props: ExecutionHeaderProps
|
|
): React.ReactElement {
|
|
const { execution } = props;
|
|
|
|
if (!execution) return <React.Fragment />;
|
|
|
|
return (
|
|
<Stack direction="column">
|
|
<Stack
|
|
direction={{ xs: 'column', sm: 'row' }}
|
|
justifyContent="space-between"
|
|
>
|
|
<ExecutionDate createdAt={execution.createdAt} />
|
|
<ExecutionId id={execution.id} />
|
|
</Stack>
|
|
|
|
<Stack direction="row">
|
|
<ExecutionName name={execution.flow.name} />
|
|
</Stack>
|
|
</Stack>
|
|
);
|
|
}
|