From 3da3793282a2bb50f7f3e39fbe08efee7582743b Mon Sep 17 00:00:00 2001
From: crupest <crupest@outlook.com>
Date: Sat, 9 Jan 2021 01:07:35 +0800
Subject: ...

---
 .../views/timeline-common/TimelinePageTemplate.tsx | 62 ++++++++++++++++++----
 1 file changed, 51 insertions(+), 11 deletions(-)

(limited to 'FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx')

diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
index 7f5c8206..caced3b7 100644
--- a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
+++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
@@ -45,7 +45,7 @@ export default function TimelinePageTemplate<TManageItem>(
     null
   );
 
-  const timelineState = useTimelineInfo(name);
+  const [timelineState, setTimelineState] = useTimelineInfo(name);
   const postListState = usePostList(name);
 
   const onPost: TimelinePostSendCallback = React.useCallback(
@@ -121,24 +121,64 @@ export default function TimelinePageTemplate<TManageItem>(
           onBookmark:
             user != null
               ? () => {
-                  void getHttpBookmarkClient()
-                    .put(name, user.token)
-                    .then(() => {
-                      pushAlert({
-                        message: {
-                          type: "i18n",
-                          key: "timeline.addBookmarkSuccess",
+                  if (timeline.isBookmark) {
+                    setTimelineState({
+                      ...timelineState,
+                      timeline: {
+                        ...timeline,
+                        isBookmark: false,
+                      },
+                    });
+                    void getHttpBookmarkClient()
+                      .delete(name)
+                      .then(
+                        () => {
+                          void timelineService.syncTimeline(name);
                         },
-                        type: "success",
-                      });
+                        () => {
+                          pushAlert({
+                            message: {
+                              type: "i18n",
+                              key: "timeline.removeBookmarkFail",
+                            },
+                            type: "danger",
+                          });
+                          setTimelineState(timelineState);
+                        }
+                      );
+                  } else {
+                    setTimelineState({
+                      ...timelineState,
+                      timeline: {
+                        ...timeline,
+                        isBookmark: true,
+                      },
                     });
+                    void getHttpBookmarkClient()
+                      .put(name)
+                      .then(
+                        () => {
+                          void timelineService.syncTimeline(name);
+                        },
+                        () => {
+                          pushAlert({
+                            message: {
+                              type: "i18n",
+                              key: "timeline.addBookmarkFail",
+                            },
+                            type: "danger",
+                          });
+                          setTimelineState(timelineState);
+                        }
+                      );
+                  }
                 }
               : undefined,
           onHighlight:
             user != null && user.hasHighlightTimelineAdministrationPermission
               ? () => {
                   void getHttpHighlightClient()
-                    .put(name, user.token)
+                    .put(name)
                     .then(() => {
                       pushAlert({
                         message: {
-- 
cgit v1.2.3

