import * as React from 'react'; import { Link } from 'react-router-dom'; import Card from '@mui/material/Card'; import IconButton from '@mui/material/IconButton'; import CardActionArea from '@mui/material/CardActionArea'; import Chip from '@mui/material/Chip'; import MoreHorizIcon from '@mui/icons-material/MoreHoriz'; import { DateTime } from 'luxon'; import type { IFlow } from '@automatisch/types'; import FlowAppIcons from 'components/FlowAppIcons'; import FlowContextMenu from 'components/FlowContextMenu'; import useFormatMessage from 'hooks/useFormatMessage'; import * as URLS from 'config/urls'; import { Apps, CardContent, ContextMenu, Title, Typography } from './style'; type FlowRowProps = { flow: IFlow; }; function getFlowStatusTranslationKey(status: IFlow['status']): string { if (status === 'published') { return 'flow.published'; } else if (status === 'paused') { return 'flow.paused'; } return 'flow.draft'; } function getFlowStatusColor( status: IFlow['status'] ): | 'default' | 'primary' | 'secondary' | 'error' | 'info' | 'success' | 'warning' { if (status === 'published') { return 'success'; } else if (status === 'paused') { return 'error'; } return 'info'; } export default function FlowRow(props: FlowRowProps): React.ReactElement { const formatMessage = useFormatMessage(); const contextButtonRef = React.useRef(null); const [anchorEl, setAnchorEl] = React.useState( null ); const { flow } = props; const handleClose = () => { setAnchorEl(null); }; const onContextMenuClick = (event: React.MouseEvent) => { event.preventDefault(); event.stopPropagation(); event.nativeEvent.stopImmediatePropagation(); setAnchorEl(contextButtonRef.current); }; const createdAt = DateTime.fromMillis(parseInt(flow.createdAt, 10)); const updatedAt = DateTime.fromMillis(parseInt(flow.updatedAt, 10)); const isUpdated = updatedAt > createdAt; const relativeCreatedAt = createdAt.toRelative(); const relativeUpdatedAt = updatedAt.toRelative(); return ( <> <Typography variant="h6" noWrap> {flow?.name} </Typography> <Typography variant="caption"> {isUpdated && formatMessage('flow.updatedAt', { datetime: relativeUpdatedAt, })} {!isUpdated && formatMessage('flow.createdAt', { datetime: relativeCreatedAt, })} </Typography> {anchorEl && ( )} ); }