From b0cf464004142dce602fa882c8d638605be7e479 Mon Sep 17 00:00:00 2001
From: crupest <crupest@outlook.com>
Date: Fri, 16 Apr 2021 18:01:38 +0800
Subject: ...

---
 FrontEnd/src/app/views/center/CenterBoards.tsx | 107 +++++++++++++++++++++++++
 1 file changed, 107 insertions(+)
 create mode 100644 FrontEnd/src/app/views/center/CenterBoards.tsx

(limited to 'FrontEnd/src/app/views/center/CenterBoards.tsx')

diff --git a/FrontEnd/src/app/views/center/CenterBoards.tsx b/FrontEnd/src/app/views/center/CenterBoards.tsx
new file mode 100644
index 00000000..f5200415
--- /dev/null
+++ b/FrontEnd/src/app/views/center/CenterBoards.tsx
@@ -0,0 +1,107 @@
+import React from "react";
+import { Row, Col } from "react-bootstrap";
+import { useTranslation } from "react-i18next";
+
+import { pushAlert } from "@/services/alert";
+import { useUserLoggedIn } from "@/services/user";
+
+import { getHttpTimelineClient } from "@/http/timeline";
+import { getHttpBookmarkClient } from "@/http/bookmark";
+import { getHttpHighlightClient } from "@/http/highlight";
+
+import TimelineBoard from "./TimelineBoard";
+
+const CenterBoards: React.FC = () => {
+  const { t } = useTranslation();
+
+  const user = useUserLoggedIn();
+
+  return (
+    <>
+      <Row className="justify-content-center">
+        <Col xs="12" md="6">
+          <Row>
+            <Col xs="12" className="my-2">
+              <TimelineBoard
+                title={t("home.bookmarkTimeline")}
+                load={() => getHttpBookmarkClient().list()}
+                editHandler={{
+                  onDelete: (timeline) => {
+                    return getHttpBookmarkClient()
+                      .delete(timeline)
+                      .catch((e) => {
+                        pushAlert({
+                          message: "home.message.deleteBookmarkFail",
+                          type: "danger",
+                        });
+                        throw e;
+                      });
+                  },
+                  onMove: (timeline, index, offset) => {
+                    return getHttpBookmarkClient()
+                      .move(
+                        { timeline, newPosition: index + offset + 1 } // +1 because backend contract: index starts at 1
+                      )
+                      .catch((e) => {
+                        pushAlert({
+                          message: "home.message.moveBookmarkFail",
+                          type: "danger",
+                        });
+                        throw e;
+                      });
+                  },
+                }}
+              />
+            </Col>
+            <Col xs="12" className="my-2">
+              <TimelineBoard
+                title={t("home.highlightTimeline")}
+                load={() => getHttpHighlightClient().list()}
+                editHandler={
+                  user.hasHighlightTimelineAdministrationPermission
+                    ? {
+                        onDelete: (timeline) => {
+                          return getHttpHighlightClient()
+                            .delete(timeline)
+                            .catch((e) => {
+                              pushAlert({
+                                message: "home.message.deleteHighlightFail",
+                                type: "danger",
+                              });
+                              throw e;
+                            });
+                        },
+                        onMove: (timeline, index, offset) => {
+                          return getHttpHighlightClient()
+                            .move(
+                              { timeline, newPosition: index + offset + 1 } // +1 because backend contract: index starts at 1
+                            )
+                            .catch((e) => {
+                              pushAlert({
+                                message: "home.message.moveHighlightFail",
+                                type: "danger",
+                              });
+                              throw e;
+                            });
+                        },
+                      }
+                    : undefined
+                }
+              />
+            </Col>
+          </Row>
+        </Col>
+        <Col xs="12" md="6" className="my-2">
+          <TimelineBoard
+            title={t("home.relatedTimeline")}
+            load={() =>
+              getHttpTimelineClient().listTimeline({ relate: user.username })
+            }
+          />
+        </Col>
+      </Row>
+    </>
+  );
+};
+
+export default CenterBoards;
-- 
cgit v1.2.3

