aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-01-12 22:09:34 +0800
committercrupest <crupest@outlook.com>2021-01-12 22:09:34 +0800
commit36515dde9ddaec074b68492a6e220bc4ed3d70af (patch)
tree8f15d61805411cd6a61e4f880d9d8dfe01def6dd
parent2bb2377601c44ab406fade8e7bfdc888900abe7f (diff)
downloadtimeline-36515dde9ddaec074b68492a6e220bc4ed3d70af.tar.gz
timeline-36515dde9ddaec074b68492a6e220bc4ed3d70af.tar.bz2
timeline-36515dde9ddaec074b68492a6e220bc4ed3d70af.zip
...
-rw-r--r--FrontEnd/src/app/services/timeline.ts50
-rw-r--r--FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx54
2 files changed, 50 insertions, 54 deletions
diff --git a/FrontEnd/src/app/services/timeline.ts b/FrontEnd/src/app/services/timeline.ts
index 4e2530cc..46671ea1 100644
--- a/FrontEnd/src/app/services/timeline.ts
+++ b/FrontEnd/src/app/services/timeline.ts
@@ -26,6 +26,8 @@ export type { TimelineVisibility } from "@/http/timeline";
import { dataStorage } from "./common";
import { userInfoService, AuthUser } from "./user";
import { DataAndStatus, DataHub2 } from "./DataHub2";
+import { getHttpBookmarkClient } from "@/http/bookmark";
+import { getHttpHighlightClient } from "@/http/highlight";
export type TimelineInfo = HttpTimelineInfo;
export type TimelineChangePropertyRequest = HttpTimelinePatchRequest;
@@ -347,24 +349,20 @@ export class TimelineService {
createPost(
timelineName: string,
request: TimelineCreatePostRequest
- ): Observable<unknown> {
- return from(
- getHttpTimelineClient()
- .postPost(timelineName, request)
- .then(() => {
- void this.syncPosts(timelineName);
- })
- );
+ ): Promise<void> {
+ return getHttpTimelineClient()
+ .postPost(timelineName, request)
+ .then(() => {
+ void this.syncPosts(timelineName);
+ });
}
- deletePost(timelineName: string, postId: number): Observable<unknown> {
- return from(
- getHttpTimelineClient()
- .deletePost(timelineName, postId)
- .then(() => {
- void this.syncPosts(timelineName);
- })
- );
+ deletePost(timelineName: string, postId: number): Promise<void> {
+ return getHttpTimelineClient()
+ .deletePost(timelineName, postId)
+ .then(() => {
+ void this.syncPosts(timelineName);
+ });
}
isMemberOf(username: string, timeline: TimelineInfo): boolean {
@@ -433,6 +431,26 @@ export class TimelineService {
user.username === post.author.username)
);
}
+
+ setHighlight(timelineName: string, highlight: boolean): Promise<void> {
+ const client = getHttpHighlightClient();
+ const promise = highlight
+ ? client.put(timelineName)
+ : client.delete(timelineName);
+ return promise.then(() => {
+ void timelineService.syncTimeline(timelineName);
+ });
+ }
+
+ setBookmark(timelineName: string, bookmark: boolean): Promise<void> {
+ const client = getHttpBookmarkClient();
+ const promise = bookmark
+ ? client.put(timelineName)
+ : client.delete(timelineName);
+ return promise.then(() => {
+ void timelineService.syncTimeline(timelineName);
+ });
+ }
}
export const timelineService = new TimelineService();
diff --git a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
index 8422077a..5c87756c 100644
--- a/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
+++ b/FrontEnd/src/app/views/timeline-common/TimelinePageTemplate.tsx
@@ -5,8 +5,6 @@ import { UiLogicError } from "@/common";
import { pushAlert } from "@/services/alert";
import { useUser } from "@/services/user";
import { timelineService, usePosts, useTimeline } from "@/services/timeline";
-import { getHttpBookmarkClient } from "@/http/bookmark";
-import { getHttpHighlightClient } from "@/http/highlight";
import { TimelineMemberDialog } from "./TimelineMember";
import TimelinePropertyChangeDialog from "./TimelinePropertyChangeDialog";
@@ -66,13 +64,11 @@ export default function TimelinePageTemplate<TManageItem>(
...post,
onDelete: service.hasModifyPostPermission(user, timeline, post)
? () => {
- service.deletePost(name, post.id).subscribe({
- error: () => {
- pushAlert({
- type: "danger",
- message: t("timeline.deletePostFailed"),
- });
- },
+ service.deletePost(name, post.id).catch(() => {
+ pushAlert({
+ type: "danger",
+ message: t("timeline.deletePostFailed"),
+ });
});
}
: undefined,
@@ -82,9 +78,7 @@ export default function TimelinePageTemplate<TManageItem>(
const operations: TimelinePageTemplateData<TManageItem>["operations"] = {
onPost: service.hasPostPermission(user, timeline)
- ? (req) => {
- return service.createPost(name, req).toPromise().then();
- }
+ ? (req) => service.createPost(name, req)
: undefined,
onManage: service.hasManagePermission(user, timeline)
? (item) => {
@@ -99,53 +93,37 @@ export default function TimelinePageTemplate<TManageItem>(
onBookmark:
user != null
? () => {
- const { isBookmark } = timeline;
- const client = getHttpBookmarkClient();
- const promise = isBookmark
- ? client.delete(name)
- : client.put(name);
- promise.then(
- () => {
- void timelineService.syncTimeline(name);
- },
- () => {
+ service
+ .setBookmark(timeline.name, !timeline.isBookmark)
+ .catch(() => {
pushAlert({
message: {
type: "i18n",
- key: isBookmark
+ key: timeline.isBookmark
? "timeline.removeBookmarkFail"
: "timeline.addBookmarkFail",
},
type: "danger",
});
- }
- );
+ });
}
: undefined,
onHighlight:
user != null && user.hasHighlightTimelineAdministrationPermission
? () => {
- const { isHighlight } = timeline;
- const client = getHttpHighlightClient();
- const promise = isHighlight
- ? client.delete(name)
- : client.put(name);
- promise.then(
- () => {
- void timelineService.syncTimeline(name);
- },
- () => {
+ service
+ .setHighlight(timeline.name, !timeline.isHighlight)
+ .catch(() => {
pushAlert({
message: {
type: "i18n",
- key: isHighlight
+ key: timeline.isHighlight
? "timeline.removeHighlightFail"
: "timeline.addHighlightFail",
},
type: "danger",
});
- }
- );
+ });
}
: undefined,
};