Spaces:
Paused
Paused
import { formatDate } from '@/utils/date'; | |
import { CalendarOutlined } from '@ant-design/icons'; | |
import { Card, Typography } from 'antd'; | |
import { useNavigate } from 'umi'; | |
import OperateDropdown from '@/components/operate-dropdown'; | |
import { useDeleteFlow } from '@/hooks/flow-hooks'; | |
import { IFlow } from '@/interfaces/database/flow'; | |
import { useCallback } from 'react'; | |
import GraphAvatar from '../graph-avatar'; | |
import styles from './index.less'; | |
interface IProps { | |
item: IFlow; | |
} | |
const FlowCard = ({ item }: IProps) => { | |
const navigate = useNavigate(); | |
const { deleteFlow } = useDeleteFlow(); | |
const removeFlow = useCallback(() => { | |
return deleteFlow([item.id]); | |
}, [deleteFlow, item]); | |
const handleCardClick = () => { | |
navigate(`/flow/${item.id}`); | |
}; | |
return ( | |
<Card className={styles.card} onClick={handleCardClick}> | |
<div className={styles.container}> | |
<div className={styles.content}> | |
<GraphAvatar avatar={item.avatar}></GraphAvatar> | |
<OperateDropdown deleteItem={removeFlow}></OperateDropdown> | |
</div> | |
<div className={styles.titleWrapper}> | |
<Typography.Title | |
className={styles.title} | |
ellipsis={{ tooltip: item.title }} | |
> | |
{item.title} | |
</Typography.Title> | |
<p>{item.description}</p> | |
</div> | |
<div className={styles.footer}> | |
<div className={styles.bottom}> | |
<div className={styles.bottomLeft}> | |
<CalendarOutlined className={styles.leftIcon} /> | |
<span className={styles.rightText}> | |
{formatDate(item.update_time)} | |
</span> | |
</div> | |
</div> | |
</div> | |
</div> | |
</Card> | |
); | |
}; | |
export default FlowCard; | |