import React from "react"; import clsx from "clsx"; import { Link } from "react-router-dom"; import { TimelinePostInfo } from "@/services/timeline"; import BlobImage from "../common/BlobImage"; import UserAvatar from "../common/user/UserAvatar"; import TimelineLine from "./TimelineLine"; import TimelinePostDeleteConfirmDialog from "./TimelinePostDeleteConfirmDialog"; export interface TimelineItemProps { post: TimelinePostInfo; current?: boolean; more?: { isOpen: boolean; toggle: () => void; onDelete: () => void; }; onClick?: () => void; className?: string; style?: React.CSSProperties; } const TimelineItem: React.FC = (props) => { const current = props.current === true; const { post, more } = props; const [deleteDialog, setDeleteDialog] = React.useState(false); return (
{more != null ? ( { more.toggle(); e.stopPropagation(); }} /> ) : null}
{post.author.nickname} {post.time.toLocaleTimeString()}
{(() => { const { content } = post; if (content.type === "text") { return content.text; } else { return ( ); } })()}
{more != null && more.isOpen ? (
{ setDeleteDialog(true); e.stopPropagation(); }} />
) : null}
{deleteDialog && more != null ? ( { setDeleteDialog(false); more.toggle(); }} onConfirm={more.onDelete} /> ) : null}
); }; export default TimelineItem;