diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts index b776b1cdcc..4da3f457f9 100644 --- a/packages/backend/src/server/api/endpoints/admin/announcements/list.ts +++ b/packages/backend/src/server/api/endpoints/admin/announcements/list.ts @@ -66,7 +66,7 @@ export const paramDef = { limit: { type: 'integer', minimum: 1, maximum: 100, default: 10 }, sinceId: { type: 'string', format: 'misskey:id' }, untilId: { type: 'string', format: 'misskey:id' }, - userId: { type: 'string', format: 'misskey:id' }, + userId: { type: 'string', format: 'misskey:id', nullable: true }, }, required: [], } as const; diff --git a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts index e007769101..7efc7c0402 100644 --- a/packages/backend/src/server/api/endpoints/admin/announcements/update.ts +++ b/packages/backend/src/server/api/endpoints/admin/announcements/update.ts @@ -37,7 +37,7 @@ export const paramDef = { needConfirmationToRead: { type: 'boolean' }, isActive: { type: 'boolean' }, }, - required: ['id', 'title', 'text', 'imageUrl', 'icon', 'display', 'forExistingUsers', 'needConfirmationToRead', 'isActive'], + required: ['id'], } as const; // eslint-disable-next-line import/no-default-export diff --git a/packages/frontend/src/pages/user-info.vue b/packages/frontend/src/pages/user-info.vue index 2fba02486f..35cd116fad 100644 --- a/packages/frontend/src/pages/user-info.vue +++ b/packages/frontend/src/pages/user-info.vue @@ -138,9 +138,22 @@ SPDX-License-Identifier: AGPL-3.0-only
{{ i18n.ts.new }} -
- {{ announcement.title }} -
+ + +
@@ -219,6 +232,7 @@ import { definePageMetadata } from '@/scripts/page-metadata'; import { i18n } from '@/i18n'; import { iAmAdmin, iAmModerator, $i } from '@/account'; import MkRolePreview from '@/components/MkRolePreview.vue'; +import MkPagination, { Paging } from '@/components/MkPagination.vue'; const props = withDefaults(defineProps<{ userId: string; @@ -245,6 +259,13 @@ const filesPagination = { userId: props.userId, })), }; +const announcementsPagination = { + endpoint: 'admin/announcements/list' as const, + limit: 10, + params: computed(() => ({ + userId: props.userId, + })), +}; let expandedRoles = $ref([]); function createFetcher() { @@ -424,6 +445,13 @@ function createAnnouncement() { }, {}, 'closed'); } +function editAnnouncement(announcement) { + os.popup(defineAsyncComponent(() => import('@/components/MkUserAnnouncementEditDialog.vue')), { + user, + announcement, + }, {}, 'closed'); +} + watch(() => props.userId, () => { init = createFetcher(); }, { @@ -587,4 +615,11 @@ definePageMetadata(computed(() => ({ margin-left: 8px; align-self: center; } + +.announcementItem { + display: flex; + padding: 8px 12px; + border-radius: 6px; + cursor: pointer; +}