From 9c0053cd70593bf6add0eab4dbb91a8479d56821 Mon Sep 17 00:00:00 2001 From: crupest Date: Fri, 16 Apr 2021 17:03:40 +0800 Subject: ... --- FrontEnd/src/app/locales/en/translation.json | 2 + FrontEnd/src/app/locales/zh/translation.json | 2 + .../src/app/views/home-v2/TimelineListView.tsx | 32 +++++++++++---- FrontEnd/src/app/views/home-v2/home-v2.sass | 11 +++++ FrontEnd/src/app/views/home-v2/index.tsx | 47 +++++++++++++++++++++- 5 files changed, 84 insertions(+), 10 deletions(-) diff --git a/FrontEnd/src/app/locales/en/translation.json b/FrontEnd/src/app/locales/en/translation.json index 6707105a..a878badd 100644 --- a/FrontEnd/src/app/locales/en/translation.json +++ b/FrontEnd/src/app/locales/en/translation.json @@ -28,6 +28,8 @@ "loadImageError": "Failed to load image.", "home": { "loadingHighlightTimelines": "Loading highlight timelines...", + "loadedHighlightTimelines": "Here are some highlight timelines💡", + "errorHighlightTimelines": "Failed to load highlight timelines, please try reloading!", "highlightTimeline": "Highlight Timelines", "relatedTimeline": "Timelines Related To You", "publicTimeline": "Public Timelines", diff --git a/FrontEnd/src/app/locales/zh/translation.json b/FrontEnd/src/app/locales/zh/translation.json index dbff0a28..3f956d3d 100644 --- a/FrontEnd/src/app/locales/zh/translation.json +++ b/FrontEnd/src/app/locales/zh/translation.json @@ -28,6 +28,8 @@ "loadImageError": "加载图片失败", "home": { "loadingHighlightTimelines": "正在加载高光时间线...", + "loadedHighlightTimelines": "康康以下这些高光时间线💡", + "errorHighlightTimelines": "加载高光时间线失败,刷新试试!", "highlightTimeline": "高光时间线", "relatedTimeline": "关于你的时间线", "publicTimeline": "公开时间线", diff --git a/FrontEnd/src/app/views/home-v2/TimelineListView.tsx b/FrontEnd/src/app/views/home-v2/TimelineListView.tsx index 1ba9f765..9c44a0c2 100644 --- a/FrontEnd/src/app/views/home-v2/TimelineListView.tsx +++ b/FrontEnd/src/app/views/home-v2/TimelineListView.tsx @@ -4,14 +4,23 @@ import { convertI18nText, I18nText } from "@/common"; import { HttpTimelineInfo } from "@/http/timeline"; import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; interface TimelineListItemProps { timeline: HttpTimelineInfo; } const TimelineListItem: React.FC = ({ timeline }) => { + const url = React.useMemo( + () => + timeline.name.startsWith("@") + ? `/users/${timeline.owner.username}` + : `/timelines/${timeline.name}`, + [timeline] + ); + return ( -
+
= ({ timeline }) => { fill="#007bff" /> -
{timeline.title}
+
+
{timeline.title}
+
+ {timeline.description} +
+
+ + +
); }; -const TimelineListLoading: React.FC = () => { +const TimelineListArrow: React.FC = () => { return (
@@ -73,11 +90,10 @@ const TimelineListView: React.FC = ({

{convertI18nText(headerText, t)}

- {timelines != null ? ( - timelines.map((t) => ) - ) : ( - - )} + {timelines != null + ? timelines.map((t) => ) + : null} +
); }; diff --git a/FrontEnd/src/app/views/home-v2/home-v2.sass b/FrontEnd/src/app/views/home-v2/home-v2.sass index a3218f08..56049994 100644 --- a/FrontEnd/src/app/views/home-v2/home-v2.sass +++ b/FrontEnd/src/app/views/home-v2/home-v2.sass @@ -2,6 +2,17 @@ display: flex align-items: center +.home-v2-timeline-list-item-timeline + transition: background 0.8s + animation: 0.8s home-v2-timeline-list-item-timeline-enter + &:hover + background: $gray-200 + +@keyframes home-v2-timeline-list-item-timeline-enter + from + transform: translate(-100%,0) + opacity: 0 + .home-v2-timeline-list-item-line width: 80px flex-shrink: 0 diff --git a/FrontEnd/src/app/views/home-v2/index.tsx b/FrontEnd/src/app/views/home-v2/index.tsx index 75c51540..cb3c1428 100644 --- a/FrontEnd/src/app/views/home-v2/index.tsx +++ b/FrontEnd/src/app/views/home-v2/index.tsx @@ -8,6 +8,14 @@ import SearchInput from "../common/SearchInput"; import TimelineListView from "./TimelineListView"; import TimelineCreateDialog from "../home/TimelineCreateDialog"; +import { HttpTimelineInfo } from "@/http/timeline"; +import { getHttpHighlightClient } from "@/http/highlight"; + +const highlightTimelineMessageMap = { + loading: "home.loadingHighlightTimelines", + done: "home.loadedHighlightTimelines", + error: "home.errorHighlightTimelines", +} as const; const HomeV2: React.FC = () => { const history = useHistory(); @@ -20,11 +28,43 @@ const HomeV2: React.FC = () => { const [dialog, setDialog] = React.useState<"create" | null>(null); + const [highlightTimelineState, setHighlightTimelineState] = React.useState< + "loading" | "done" | "error" + >("loading"); + const [highlightTimelines, setHighlightTimelines] = React.useState< + HttpTimelineInfo[] | undefined + >(); + + React.useEffect(() => { + if (highlightTimelineState === "loading") { + let subscribe = true; + void getHttpHighlightClient() + .list() + .then( + (data) => { + if (subscribe) { + setHighlightTimelineState("done"); + setHighlightTimelines(data); + } + }, + () => { + if (subscribe) { + setHighlightTimelineState("error"); + setHighlightTimelines(undefined); + } + } + ); + return () => { + subscribe = false; + }; + } + }, [highlightTimelineState]); + return ( <> - + { /> - + {dialog === "create" && ( setDialog(null)} /> -- cgit v1.2.3