mirror of
https://github.com/mealie-recipes/mealie.git
synced 2026-04-10 23:15:34 -04:00
implement nav buttons
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
<template>
|
<template>
|
||||||
<BaseDialog
|
<BaseDialog
|
||||||
|
v-if="currentAnnouncement"
|
||||||
v-model="dialog"
|
v-model="dialog"
|
||||||
:title="$t('announcements.announcements')"
|
:title="$t('announcements.announcements')"
|
||||||
:icon="$globals.icons.bullhornVariant"
|
:icon="$globals.icons.bullhornVariant"
|
||||||
@@ -19,6 +20,24 @@
|
|||||||
<v-card-text>
|
<v-card-text>
|
||||||
<component :is="currentAnnouncement.component" />
|
<component :is="currentAnnouncement.component" />
|
||||||
</v-card-text>
|
</v-card-text>
|
||||||
|
<template #custom-card-action>
|
||||||
|
<div v-if="newAnnouncements.length">
|
||||||
|
<BaseButton
|
||||||
|
color="success"
|
||||||
|
:icon="$globals.icons.textBoxCheckOutline"
|
||||||
|
:text="$t('announcements.mark-all-as-read')"
|
||||||
|
class="mx-4"
|
||||||
|
@click="markAllAsRead"
|
||||||
|
/>
|
||||||
|
<BaseButton
|
||||||
|
color="info"
|
||||||
|
:icon="$globals.icons.arrowRightBold"
|
||||||
|
icon-right
|
||||||
|
:text="$t('general.next')"
|
||||||
|
@click="nextAnnouncement"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
</BaseDialog>
|
</BaseDialog>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -32,13 +51,18 @@ const auth = useMealieAuth();
|
|||||||
const api = useUserApi();
|
const api = useUserApi();
|
||||||
const { newAnnouncements, allAnnouncements } = useAnnouncements();
|
const { newAnnouncements, allAnnouncements } = useAnnouncements();
|
||||||
|
|
||||||
const currentAnnouncement = shallowRef(newAnnouncements.value.at(0) || allAnnouncements.at(-1)!);
|
const currentAnnouncement = shallowRef<Announcement | undefined>();
|
||||||
watch(
|
watch(
|
||||||
dialog,
|
dialog,
|
||||||
() => {
|
() => {
|
||||||
// Once the dialog is opened, mark the current announcement as read
|
// Once the dialog is opened, show the next announcement
|
||||||
if (dialog.value) {
|
if (dialog.value) {
|
||||||
setLastRead(currentAnnouncement.value.key);
|
nextAnnouncement();
|
||||||
|
|
||||||
|
// If there are no new announcements, this is never set, so show the newest one
|
||||||
|
if (!currentAnnouncement.value) {
|
||||||
|
currentAnnouncement.value = allAnnouncements.at(-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
@@ -54,21 +78,25 @@ async function setLastRead(key: string) {
|
|||||||
user.id,
|
user.id,
|
||||||
{
|
{
|
||||||
...user,
|
...user,
|
||||||
lastReadAnnouncement: key,
|
lastReadAnnouncement: null, // TODO: switch back to key
|
||||||
},
|
},
|
||||||
{ suppressAlert: true },
|
{ suppressAlert: true },
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
function markAllAsRead() {
|
function markAllAsRead() {
|
||||||
|
newAnnouncements.value = [];
|
||||||
|
|
||||||
const newestAnnouncement = allAnnouncements.at(-1)!;
|
const newestAnnouncement = allAnnouncements.at(-1)!;
|
||||||
setLastRead(newestAnnouncement.key);
|
setLastRead(newestAnnouncement.key);
|
||||||
}
|
}
|
||||||
|
|
||||||
function nextAnnouncement() {
|
function nextAnnouncement() {
|
||||||
newAnnouncements.value.shift();
|
|
||||||
const nextAnnouncement = newAnnouncements.value.at(0);
|
const nextAnnouncement = newAnnouncements.value.at(0);
|
||||||
|
newAnnouncements.value = newAnnouncements.value.slice(1);
|
||||||
|
|
||||||
if (!nextAnnouncement) {
|
if (!nextAnnouncement) {
|
||||||
|
markAllAsRead();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1476,6 +1476,7 @@
|
|||||||
},
|
},
|
||||||
"announcements": {
|
"announcements": {
|
||||||
"announcements": "Announcements",
|
"announcements": "Announcements",
|
||||||
|
"mark-all-as-read": "Mark All as Read",
|
||||||
"show-announcements-from-mealie": "Show announcements from Mealie",
|
"show-announcements-from-mealie": "Show announcements from Mealie",
|
||||||
"show-announcements-setting-description": "Whether or not you want to allow users to see announcements from Mealie. When enabled users can still opt-out from seeing them in their user settings"
|
"show-announcements-setting-description": "Whether or not you want to allow users to see announcements from Mealie. When enabled users can still opt-out from seeing them in their user settings"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ import {
|
|||||||
mdiTestTube,
|
mdiTestTube,
|
||||||
mdiText,
|
mdiText,
|
||||||
mdiTextBoxOutline,
|
mdiTextBoxOutline,
|
||||||
|
mdiTextBoxCheckOutline,
|
||||||
mdiTimelineText,
|
mdiTimelineText,
|
||||||
mdiTimerSand,
|
mdiTimerSand,
|
||||||
mdiTools,
|
mdiTools,
|
||||||
@@ -156,6 +157,7 @@ import {
|
|||||||
mdiWindowClose,
|
mdiWindowClose,
|
||||||
mdiWrench,
|
mdiWrench,
|
||||||
mdiHandWaveOutline,
|
mdiHandWaveOutline,
|
||||||
|
|
||||||
} from "@mdi/js";
|
} from "@mdi/js";
|
||||||
|
|
||||||
export const icons = {
|
export const icons = {
|
||||||
@@ -275,6 +277,7 @@ export const icons = {
|
|||||||
sortClockDescending: mdiSortClockDescending,
|
sortClockDescending: mdiSortClockDescending,
|
||||||
star: mdiStar,
|
star: mdiStar,
|
||||||
testTube: mdiTestTube,
|
testTube: mdiTestTube,
|
||||||
|
textBoxCheckOutline: mdiTextBoxCheckOutline,
|
||||||
timelineText: mdiTimelineText,
|
timelineText: mdiTimelineText,
|
||||||
tools: mdiTools,
|
tools: mdiTools,
|
||||||
potSteam: mdiPotSteamOutline,
|
potSteam: mdiPotSteamOutline,
|
||||||
|
|||||||
Reference in New Issue
Block a user