-
@@ -73,6 +85,7 @@
: trimmedMessage
"
:dismissable="newNoticeDismissable"
+ :title="trimmedTitle"
preview
/>
@@ -197,6 +210,7 @@
:level="notice.level"
:message="notice.message"
:dismissable="notice.dismissable"
+ :title="notice.title"
preview
/>
@@ -285,6 +299,7 @@ const newNoticeLevel = ref(levelOptions[0]);
const newNoticeDismissable = ref(false);
const newNoticeMessage = ref("");
const newNoticeScheduledDate = ref
();
+const newNoticeTitle = ref();
const newNoticeExpiresDate = ref();
function openNewNoticeModal() {
@@ -303,6 +318,7 @@ function startEditing(notice: ServerNoticeType, assignments: boolean = false) {
newNoticeLevel.value = levelOptions.find((x) => x.id === notice.level) ?? levelOptions[0];
newNoticeDismissable.value = notice.dismissable;
newNoticeMessage.value = notice.message;
+ newNoticeTitle.value = notice.title;
newNoticeScheduledDate.value = dayjs(notice.announce_at).format(DATE_TIME_FORMAT);
newNoticeExpiresDate.value = notice.expires
? dayjs(notice.expires).format(DATE_TIME_FORMAT)
@@ -338,6 +354,7 @@ async function deleteNotice(notice: ServerNoticeType) {
}
const trimmedMessage = computed(() => newNoticeMessage.value?.trim());
+const trimmedTitle = computed(() => newNoticeTitle.value?.trim());
const noticeSubmitError = computed(() => {
let error: undefined | string;
@@ -372,13 +389,14 @@ async function saveChanges() {
method: "PATCH",
body: {
message: newNoticeMessage.value,
+ title: trimmedTitle.value,
level: newNoticeLevel.value.id,
dismissable: newNoticeDismissable.value,
announce_at: newNoticeScheduledDate.value
? dayjs(newNoticeScheduledDate.value).toISOString()
: dayjs().toISOString(),
expires: newNoticeExpiresDate.value
- ? dayjs(newNoticeScheduledDate.value).toISOString()
+ ? dayjs(newNoticeExpiresDate.value).toISOString()
: undefined,
},
}).catch((err) => {
@@ -402,10 +420,15 @@ async function createNotice() {
method: "POST",
body: {
message: newNoticeMessage.value,
+ title: trimmedTitle.value,
level: newNoticeLevel.value.id,
dismissable: newNoticeDismissable.value,
- announce_at: newNoticeScheduledDate.value ?? dayjs().toISOString(),
- expires: newNoticeExpiresDate.value,
+ announce_at: newNoticeScheduledDate.value
+ ? dayjs(newNoticeScheduledDate.value).toISOString()
+ : dayjs().toISOString(),
+ expires: newNoticeExpiresDate.value
+ ? dayjs(newNoticeExpiresDate.value).toISOString()
+ : undefined,
},
}).catch((err) => {
app.$notify({
diff --git a/apps/frontend/src/pages/servers/manage/[id].vue b/apps/frontend/src/pages/servers/manage/[id].vue
index 8dfde57f0..7862a3045 100644
--- a/apps/frontend/src/pages/servers/manage/[id].vue
+++ b/apps/frontend/src/pages/servers/manage/[id].vue
@@ -10,6 +10,7 @@
:level="notice.level"
:message="notice.message"
:dismissable="notice.dismissable"
+ :title="notice.title"
class="w-full"
@dismiss="() => dismissNotice(notice.id)"
/>
diff --git a/packages/ui/src/components/base/ServerNotice.vue b/packages/ui/src/components/base/ServerNotice.vue
index cd06ab12b..2d107e3d9 100644
--- a/packages/ui/src/components/base/ServerNotice.vue
+++ b/packages/ui/src/components/base/ServerNotice.vue
@@ -1,7 +1,15 @@
- {{ formatMessage(heading) }}
+
+ {{ formatMessage(heading) }}
+
+
+
+ {{ title.substring(1) }}
+
+ - {{ title }}
+
@@ -36,12 +44,18 @@ const props = withDefaults(
message: string
dismissable: boolean
preview?: boolean
+ title?: string
}>(),
{
preview: false,
+ title: undefined,
},
)
+const hideDefaultTitle = computed(
+ () => props.title && props.title.length > 1 && props.title.startsWith('\\'),
+)
+
const messages = defineMessages({
info: {
id: 'servers.notice.heading.info',
@@ -71,3 +85,8 @@ const NOTICE_TYPE: Record = {
const heading = computed(() => NOTICE_HEADINGS[props.level] ?? messages.info)
+
diff --git a/packages/utils/types.ts b/packages/utils/types.ts
index bf440cdd2..a81668e18 100644
--- a/packages/utils/types.ts
+++ b/packages/utils/types.ts
@@ -256,6 +256,7 @@ export type Report = {
export type ServerNotice = {
id: number
message: string
+ title?: string
level: string
dismissable: boolean
announce_at: string