diff options
author | crupest <crupest@outlook.com> | 2021-02-13 15:31:49 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-02-13 15:31:49 +0800 |
commit | 790fc48e013ecd424d73e45072607927a3a43a70 (patch) | |
tree | c39fd481a36a624a9cd444777f1a91b79b9c884d /FrontEnd/src/app/views/timeline-common/TimelineItem.tsx | |
parent | 8d4db22c80a5992915abdf6d2b7d8047b93265ff (diff) | |
download | timeline-790fc48e013ecd424d73e45072607927a3a43a70.tar.gz timeline-790fc48e013ecd424d73e45072607927a3a43a70.tar.bz2 timeline-790fc48e013ecd424d73e45072607927a3a43a70.zip |
...
Diffstat (limited to 'FrontEnd/src/app/views/timeline-common/TimelineItem.tsx')
-rw-r--r-- | FrontEnd/src/app/views/timeline-common/TimelineItem.tsx | 108 |
1 files changed, 0 insertions, 108 deletions
diff --git a/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx b/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx deleted file mode 100644 index a5b6d04a..00000000 --- a/FrontEnd/src/app/views/timeline-common/TimelineItem.tsx +++ /dev/null @@ -1,108 +0,0 @@ -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<TimelineItemProps> = (props) => { - const current = props.current === true; - - const { post, more } = props; - - const [deleteDialog, setDeleteDialog] = React.useState<boolean>(false); - - return ( - <div - className={clsx("timeline-item", current && "current", props.className)} - onClick={props.onClick} - style={props.style} - > - <TimelineLine center="node" current={current} /> - <div className="timeline-item-card"> - {more != null ? ( - <i - className="bi-chevron-down text-info icon-button float-right" - onClick={(e) => { - more.toggle(); - e.stopPropagation(); - }} - /> - ) : null} - <div className="timeline-item-header"> - <span className="mr-2"> - <span> - <Link to={"/users/" + props.post.author.username}> - <UserAvatar - username={post.author.username} - className="timeline-avatar mr-1" - /> - </Link> - <small className="text-dark mr-2">{post.author.nickname}</small> - <small className="text-secondary white-space-no-wrap"> - {post.time.toLocaleTimeString()} - </small> - </span> - </span> - </div> - <div className="timeline-content"> - {(() => { - const { content } = post; - if (content.type === "text") { - return content.text; - } else { - return ( - <BlobImage - blob={content.data} - className="timeline-content-image" - /> - ); - } - })()} - </div> - {more != null && more.isOpen ? ( - <div - className="position-absolute position-lt w-100 h-100 mask d-flex justify-content-center align-items-center" - onClick={more.toggle} - > - <i - className="bi-trash text-danger icon-button large" - onClick={(e) => { - setDeleteDialog(true); - e.stopPropagation(); - }} - /> - </div> - ) : null} - </div> - {deleteDialog && more != null ? ( - <TimelinePostDeleteConfirmDialog - onClose={() => { - setDeleteDialog(false); - more.toggle(); - }} - onConfirm={more.onDelete} - /> - ) : null} - </div> - ); -}; - -export default TimelineItem; |