diff --git a/packages/frontend/src/account.ts b/packages/frontend/src/account.ts index c3f3337c9d..a202a9aae9 100644 --- a/packages/frontend/src/account.ts +++ b/packages/frontend/src/account.ts @@ -108,8 +108,8 @@ function fetchAccount(token: string, id?: string, forceShowDialog?: boolean): Pr }) .then(res => new Promise }>((done2, fail2) => { if (res.status >= 500 && res.status < 600) { - // サーバーエラー(5xx)の場合をrejectとする - // (認証エラーなど4xxはresolve) + // サーバーエラー(5xx)の場合をrejectとする + // (認証エラーなど4xxはresolve) return fail2(res); } res.json().then(done2, fail2); diff --git a/packages/frontend/src/boot/main-boot.ts b/packages/frontend/src/boot/main-boot.ts index 7459ea0fa5..944881aba5 100644 --- a/packages/frontend/src/boot/main-boot.ts +++ b/packages/frontend/src/boot/main-boot.ts @@ -83,6 +83,14 @@ export async function mainBoot() { } }); + for (const announcement of $i.announcements.filter(x => x.display === 'dialog')) { + popup(defineAsyncComponent(() => import('@/components/MkAnnouncementDialog.vue')), { + announcement, + }, {}, 'closed'); + } + + // TODO: announcementCreatedイベント監視 + if ($i.isDeleted) { alert({ type: 'warning', diff --git a/packages/frontend/src/components/MkAnnouncementDialog.vue b/packages/frontend/src/components/MkAnnouncementDialog.vue new file mode 100644 index 0000000000..5c4a6adffb --- /dev/null +++ b/packages/frontend/src/components/MkAnnouncementDialog.vue @@ -0,0 +1,58 @@ + + + + + + + diff --git a/packages/misskey-js/src/entities.ts b/packages/misskey-js/src/entities.ts index b9771d1964..b4e98f8c64 100644 --- a/packages/misskey-js/src/entities.ts +++ b/packages/misskey-js/src/entities.ts @@ -104,6 +104,7 @@ export type MeDetailed = UserDetailed & { noCrawle: boolean; receiveAnnouncementEmail: boolean; usePasswordLessLogin: boolean; + announcements: Announcement[]; [other: string]: any; }; @@ -413,6 +414,9 @@ export type Announcement = { text: string; title: string; imageUrl: string | null; + display: 'normal' | 'banner' | 'dialog'; + needConfirmationToRead: boolean; + forYou: boolean; isRead?: boolean; };