2026-03-11 23:33:10 +00:00
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { router, usePage } from '@inertiajs/vue3';
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
import {
|
|
|
|
|
AlertTriangle,
|
|
|
|
|
Bell,
|
|
|
|
|
FileUp,
|
|
|
|
|
Mail,
|
|
|
|
|
RefreshCw,
|
|
|
|
|
Send,
|
|
|
|
|
} from 'lucide-vue-next';
|
2026-03-12 18:25:32 +00:00
|
|
|
import { computed } from 'vue';
|
2026-03-11 23:33:10 +00:00
|
|
|
import { Button } from '@/components/ui/button';
|
|
|
|
|
import {
|
|
|
|
|
DropdownMenu,
|
|
|
|
|
DropdownMenuContent,
|
|
|
|
|
DropdownMenuItem,
|
|
|
|
|
DropdownMenuLabel,
|
|
|
|
|
DropdownMenuSeparator,
|
|
|
|
|
DropdownMenuTrigger,
|
|
|
|
|
} from '@/components/ui/dropdown-menu';
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
import type { NotificationType } from '@/types/notification';
|
2026-03-11 23:33:10 +00:00
|
|
|
|
|
|
|
|
type NotificationItem = {
|
|
|
|
|
id: string;
|
|
|
|
|
type: string;
|
|
|
|
|
data: {
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
notification_type?: NotificationType;
|
2026-03-12 18:25:32 +00:00
|
|
|
declaration_id?: number;
|
|
|
|
|
declaration_title?: string;
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
sender_name?: string;
|
2026-03-11 23:33:10 +00:00
|
|
|
url?: string;
|
|
|
|
|
};
|
|
|
|
|
read_at: string | null;
|
|
|
|
|
created_at: string;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
type UserNotifications = {
|
|
|
|
|
unread_count: number;
|
|
|
|
|
readUrl: string | null;
|
|
|
|
|
readAllUrl: string | null;
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
notificationsUrl: string | null;
|
2026-03-11 23:33:10 +00:00
|
|
|
items: NotificationItem[] | undefined;
|
|
|
|
|
};
|
|
|
|
|
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
const iconMap: Record<NotificationType, typeof Send> = {
|
|
|
|
|
nudge: Send,
|
|
|
|
|
declaration_overdue: AlertTriangle,
|
|
|
|
|
document_uploaded: FileUp,
|
|
|
|
|
bulk_notification: Mail,
|
|
|
|
|
status_changed: RefreshCw,
|
|
|
|
|
};
|
|
|
|
|
|
2026-03-11 23:33:10 +00:00
|
|
|
const page = usePage();
|
|
|
|
|
|
|
|
|
|
const userNotifications = computed<UserNotifications>(() => {
|
2026-03-12 18:25:32 +00:00
|
|
|
return (page.props as Record<string, unknown>)
|
|
|
|
|
.userNotifications as UserNotifications;
|
2026-03-11 23:33:10 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
const unreadCount = computed(() => userNotifications.value?.unread_count ?? 0);
|
|
|
|
|
const items = computed(() => userNotifications.value?.items ?? []);
|
|
|
|
|
const isLoading = computed(() => userNotifications.value?.items === undefined);
|
|
|
|
|
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
function getIcon(notificationType?: NotificationType) {
|
|
|
|
|
if (!notificationType) return Bell;
|
|
|
|
|
return iconMap[notificationType] ?? Bell;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function getDescription(notification: NotificationItem): string {
|
|
|
|
|
const type = notification.data?.notification_type;
|
|
|
|
|
const title = notification.data?.declaration_title ?? 'Déclaration';
|
|
|
|
|
const sender = notification.data?.sender_name;
|
|
|
|
|
|
|
|
|
|
switch (type) {
|
|
|
|
|
case 'nudge':
|
|
|
|
|
return sender
|
|
|
|
|
? `Relance de ${sender} sur ${title}`
|
|
|
|
|
: `Relance sur ${title}`;
|
|
|
|
|
case 'declaration_overdue':
|
|
|
|
|
return `Déclaration en retard : ${title}`;
|
|
|
|
|
case 'document_uploaded':
|
|
|
|
|
return `Document téléversé pour ${title}`;
|
|
|
|
|
case 'status_changed':
|
|
|
|
|
return `Statut modifié : ${title}`;
|
|
|
|
|
case 'bulk_notification':
|
|
|
|
|
return `Notification groupée : ${title}`;
|
|
|
|
|
default:
|
|
|
|
|
return title;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-11 23:33:10 +00:00
|
|
|
function markAsRead(notification: NotificationItem) {
|
|
|
|
|
const readUrl = userNotifications.value?.readUrl;
|
|
|
|
|
if (!readUrl) return;
|
|
|
|
|
|
|
|
|
|
const url = readUrl.replace('__ID__', notification.id);
|
|
|
|
|
router.post(url, {}, { preserveScroll: true });
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function navigateToNotification(notification: NotificationItem) {
|
|
|
|
|
const targetUrl = notification.data?.url;
|
|
|
|
|
|
|
|
|
|
if (!notification.read_at) {
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
const readUrl = userNotifications.value?.readUrl;
|
|
|
|
|
if (readUrl) {
|
|
|
|
|
const url = readUrl.replace('__ID__', notification.id);
|
|
|
|
|
router.post(url, {}, {
|
|
|
|
|
preserveScroll: true,
|
|
|
|
|
onSuccess: () => {
|
|
|
|
|
if (targetUrl) {
|
|
|
|
|
router.visit(targetUrl);
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
2026-03-11 23:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
if (targetUrl) {
|
|
|
|
|
router.visit(targetUrl);
|
|
|
|
|
}
|
2026-03-11 23:33:10 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
function markAllAsRead() {
|
|
|
|
|
const readAllUrl = userNotifications.value?.readAllUrl;
|
|
|
|
|
if (!readAllUrl) return;
|
|
|
|
|
|
|
|
|
|
router.post(readAllUrl, {}, { preserveScroll: true });
|
|
|
|
|
}
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
|
|
|
|
|
function navigateToAll() {
|
|
|
|
|
const url = userNotifications.value?.notificationsUrl;
|
|
|
|
|
if (url) {
|
|
|
|
|
router.visit(url);
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-11 23:33:10 +00:00
|
|
|
</script>
|
|
|
|
|
|
|
|
|
|
<template>
|
|
|
|
|
<DropdownMenu>
|
|
|
|
|
<DropdownMenuTrigger as-child>
|
|
|
|
|
<Button variant="ghost" size="icon" class="relative">
|
|
|
|
|
<Bell class="size-4" />
|
|
|
|
|
<span
|
|
|
|
|
v-if="unreadCount > 0"
|
2026-03-12 18:25:32 +00:00
|
|
|
class="absolute -top-0.5 -right-0.5 flex size-4 items-center justify-center rounded-full bg-destructive text-[10px] font-bold text-destructive-foreground"
|
2026-03-11 23:33:10 +00:00
|
|
|
>
|
|
|
|
|
{{ unreadCount > 9 ? '9+' : unreadCount }}
|
|
|
|
|
</span>
|
|
|
|
|
</Button>
|
|
|
|
|
</DropdownMenuTrigger>
|
|
|
|
|
<DropdownMenuContent align="end" class="w-80">
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
<div class="flex items-center justify-between px-2 py-1.5">
|
|
|
|
|
<DropdownMenuLabel class="p-0">
|
|
|
|
|
Notifications
|
|
|
|
|
</DropdownMenuLabel>
|
|
|
|
|
<button
|
|
|
|
|
v-if="unreadCount > 0"
|
|
|
|
|
class="text-xs text-muted-foreground hover:text-foreground"
|
|
|
|
|
@click.stop="markAllAsRead"
|
|
|
|
|
>
|
|
|
|
|
Tout marquer comme lu
|
|
|
|
|
</button>
|
|
|
|
|
</div>
|
2026-03-11 23:33:10 +00:00
|
|
|
<DropdownMenuSeparator />
|
|
|
|
|
|
2026-03-12 18:25:32 +00:00
|
|
|
<div
|
|
|
|
|
v-if="isLoading"
|
|
|
|
|
class="px-2 py-4 text-center text-sm text-muted-foreground"
|
|
|
|
|
>
|
2026-03-11 23:33:10 +00:00
|
|
|
Chargement...
|
|
|
|
|
</div>
|
|
|
|
|
|
2026-03-12 18:25:32 +00:00
|
|
|
<div
|
|
|
|
|
v-else-if="!items.length"
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
class="flex flex-col items-center gap-2 px-2 py-6 text-center text-sm text-muted-foreground"
|
2026-03-12 18:25:32 +00:00
|
|
|
>
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
<Bell class="size-8 text-muted-foreground/50" />
|
|
|
|
|
Aucune notification
|
2026-03-11 23:33:10 +00:00
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<template v-else>
|
|
|
|
|
<DropdownMenuItem
|
|
|
|
|
v-for="notification in items"
|
|
|
|
|
:key="notification.id"
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
class="flex cursor-pointer items-start gap-3 p-3"
|
|
|
|
|
:class="{
|
|
|
|
|
'bg-muted/50': !notification.read_at,
|
|
|
|
|
'opacity-60': notification.read_at,
|
|
|
|
|
}"
|
2026-03-11 23:33:10 +00:00
|
|
|
@click="navigateToNotification(notification)"
|
|
|
|
|
>
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
<component
|
|
|
|
|
:is="getIcon(notification.data?.notification_type)"
|
|
|
|
|
class="mt-0.5 size-4 shrink-0 text-muted-foreground"
|
|
|
|
|
/>
|
|
|
|
|
<div class="flex-1 space-y-1">
|
|
|
|
|
<p class="text-xs leading-snug">
|
|
|
|
|
{{ getDescription(notification) }}
|
|
|
|
|
</p>
|
|
|
|
|
<p class="text-xs text-muted-foreground">
|
2026-03-11 23:33:10 +00:00
|
|
|
{{ notification.created_at }}
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
</p>
|
2026-03-11 23:33:10 +00:00
|
|
|
</div>
|
|
|
|
|
<span
|
|
|
|
|
v-if="!notification.read_at"
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
class="mt-1 size-2 shrink-0 rounded-full bg-primary"
|
2026-03-11 23:33:10 +00:00
|
|
|
/>
|
|
|
|
|
</DropdownMenuItem>
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
|
2026-03-11 23:33:10 +00:00
|
|
|
</template>
|
|
|
|
|
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
<DropdownMenuSeparator v-if="!isLoading" />
|
2026-03-11 23:33:10 +00:00
|
|
|
<DropdownMenuItem
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
v-if="!isLoading"
|
2026-03-11 23:33:10 +00:00
|
|
|
class="justify-center text-xs text-muted-foreground"
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
@click="navigateToAll"
|
2026-03-11 23:33:10 +00:00
|
|
|
>
|
feat: add notification center with bell dropdown, full page, and workspace scoping (Story 3.3)
Enhance NotificationDropdown with type-specific icons, French description builder,
click-to-navigate with mark-as-read, and "Voir toutes les notifications" link.
Add full notifications page at /notifications with pagination (25/page), individual
mark-as-read, and empty state. Includes code review fixes: workspace-scoped unread
count and dropdown items, race condition fix (mark-as-read before navigate),
efficient markAllAsRead via direct update, deleted declaration URL handling,
and per-workspace cache keys. 7 new feature tests.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 11:26:40 +01:00
|
|
|
Voir toutes les notifications
|
2026-03-11 23:33:10 +00:00
|
|
|
</DropdownMenuItem>
|
|
|
|
|
</DropdownMenuContent>
|
|
|
|
|
</DropdownMenu>
|
|
|
|
|
</template>
|