aboutsummaryrefslogtreecommitdiff
path: root/FrontEnd/src/app/http/highlight.ts
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-01-03 19:38:05 +0800
committerGitHub <noreply@github.com>2021-01-03 19:38:05 +0800
commitd6f5cc98880b4664baf223d7147feb466e3cce5d (patch)
treeccc1167e69d7e8fcc58760e2d7de3a534150cff3 /FrontEnd/src/app/http/highlight.ts
parentd25b74fa167944a7701997e34810a2ffc3c39edd (diff)
parent1b7a9096b1fd7c26a9336950a4a4b4253bcb5926 (diff)
downloadtimeline-d6f5cc98880b4664baf223d7147feb466e3cce5d.tar.gz
timeline-d6f5cc98880b4664baf223d7147feb466e3cce5d.tar.bz2
timeline-d6f5cc98880b4664baf223d7147feb466e3cce5d.zip
Merge pull request #197 from crupest/front-dev
Front: Highlight and bookmark timeline and new home page.
Diffstat (limited to 'FrontEnd/src/app/http/highlight.ts')
-rw-r--r--FrontEnd/src/app/http/highlight.ts70
1 files changed, 70 insertions, 0 deletions
diff --git a/FrontEnd/src/app/http/highlight.ts b/FrontEnd/src/app/http/highlight.ts
new file mode 100644
index 00000000..1f226c19
--- /dev/null
+++ b/FrontEnd/src/app/http/highlight.ts
@@ -0,0 +1,70 @@
+import axios from "axios";
+
+import {
+ apiBaseUrl,
+ convertToNetworkError,
+ extractResponseData,
+} from "./common";
+
+import {
+ HttpTimelineInfo,
+ processRawTimelineInfo,
+ RawHttpTimelineInfo,
+} from "./timeline";
+
+export interface HttpHighlightMoveRequest {
+ timeline: string;
+ newPosition: number;
+}
+
+export interface IHttpHighlightClient {
+ list(): Promise<HttpTimelineInfo[]>;
+ put(timeline: string, token: string): Promise<void>;
+ delete(timeline: string, token: string): Promise<void>;
+ move(req: HttpHighlightMoveRequest, token: string): Promise<void>;
+}
+
+export class HttpHighlightClient implements IHttpHighlightClient {
+ list(): Promise<HttpTimelineInfo[]> {
+ return axios
+ .get<RawHttpTimelineInfo[]>(`${apiBaseUrl}/highlights`)
+ .then(extractResponseData)
+ .then((list) => list.map(processRawTimelineInfo))
+ .catch(convertToNetworkError);
+ }
+
+ put(timeline: string, token: string): Promise<void> {
+ return axios
+ .put(`${apiBaseUrl}/highlights/${timeline}?token=${token}`)
+ .catch(convertToNetworkError)
+ .then();
+ }
+
+ delete(timeline: string, token: string): Promise<void> {
+ return axios
+ .delete(`${apiBaseUrl}/highlights/${timeline}?token=${token}`)
+ .catch(convertToNetworkError)
+ .then();
+ }
+
+ move(req: HttpHighlightMoveRequest, token: string): Promise<void> {
+ return axios
+ .post(`${apiBaseUrl}/highlightop/move?token=${token}`, req)
+ .catch(convertToNetworkError)
+ .then();
+ }
+}
+
+let client: IHttpHighlightClient = new HttpHighlightClient();
+
+export function getHttpHighlightClient(): IHttpHighlightClient {
+ return client;
+}
+
+export function setHttpHighlightClient(
+ newClient: IHttpHighlightClient
+): IHttpHighlightClient {
+ const old = client;
+ client = newClient;
+ return old;
+}