diff options
| author | crupest <crupest@outlook.com> | 2020-06-11 17:27:15 +0800 |
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-06-11 17:27:15 +0800 |
| commit | 93ce8560fa19c3a91de99643fdbbe4f895a47b84 (patch) | |
| tree | 66a9e6f1bbbbd5a0a25c13a0e51e7a7c1225871c /Timeline/ClientApp/src/timeline/Timeline.tsx | |
| parent | 6893a1c1e43b8fc17eaaba72db90494d946b5091 (diff) | |
| download | timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.tar.gz timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.tar.bz2 timeline-93ce8560fa19c3a91de99643fdbbe4f895a47b84.zip | |
feat(front): Service worker is coming!
Diffstat (limited to 'Timeline/ClientApp/src/timeline/Timeline.tsx')
| -rw-r--r-- | Timeline/ClientApp/src/timeline/Timeline.tsx | 99 |
1 files changed, 0 insertions, 99 deletions
diff --git a/Timeline/ClientApp/src/timeline/Timeline.tsx b/Timeline/ClientApp/src/timeline/Timeline.tsx deleted file mode 100644 index 1ec3795f..00000000 --- a/Timeline/ClientApp/src/timeline/Timeline.tsx +++ /dev/null @@ -1,99 +0,0 @@ -import React from 'react';
-import clsx from 'clsx';
-import { Container } from 'reactstrap';
-
-import { TimelinePostInfo } from '../data/timeline';
-import { useUser } from '../data/user';
-import { useAvatarVersion } from '../user/api';
-
-import TimelineItem from './TimelineItem';
-
-export interface TimelinePostInfoEx extends TimelinePostInfo {
- deletable: boolean;
-}
-
-export type TimelineDeleteCallback = (index: number, id: number) => void;
-
-export interface TimelineProps {
- className?: string;
- posts: TimelinePostInfoEx[];
- onDelete: TimelineDeleteCallback;
- onResize?: () => void;
-}
-
-const Timeline: React.FC<TimelineProps> = (props) => {
- const user = useUser();
- const avatarVersion = useAvatarVersion();
-
- const { posts, onDelete, onResize } = props;
-
- const [indexShowDeleteButton, setIndexShowDeleteButton] = React.useState<
- number
- >(-1);
-
- const onItemClick = React.useCallback(() => {
- setIndexShowDeleteButton(-1);
- }, []);
-
- const onToggleDelete = React.useMemo(() => {
- return posts.map((post, i) => {
- return post.deletable
- ? () => {
- setIndexShowDeleteButton((oldIndexShowDeleteButton) => {
- return oldIndexShowDeleteButton !== i ? i : -1;
- });
- }
- : undefined;
- });
- }, [posts]);
-
- const onItemDelete = React.useMemo(() => {
- return posts.map((post, i) => {
- return () => {
- onDelete(i, post.id);
- };
- });
- }, [posts, onDelete]);
-
- return (
- <Container
- fluid
- className={clsx('d-flex flex-column position-relative', props.className)}
- >
- <div className="timeline-enter-animation-mask" />
- {(() => {
- const length = posts.length;
- return posts.map((post, i) => {
- const av: number | undefined =
- user != null && user.username === post.author.username
- ? avatarVersion
- : undefined;
-
- const toggleMore = onToggleDelete[i];
-
- return (
- <TimelineItem
- post={post}
- key={post.id}
- current={length - 1 === i}
- more={
- toggleMore
- ? {
- isOpen: indexShowDeleteButton === i,
- toggle: toggleMore,
- onDelete: onItemDelete[i],
- }
- : undefined
- }
- onClick={onItemClick}
- avatarVersion={av}
- onResize={onResize}
- />
- );
- });
- })()}
- </Container>
- );
-};
-
-export default Timeline;
|
