mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 17:43:47 +00:00
Refactor TicketNotificationBell to improve toast notifications for new tickets and replies. Update localization files to include new notification strings for user replies and enhance existing messages.
This commit is contained in:
@@ -35,22 +35,37 @@ export default function TicketNotificationBell({ isAdmin = false }: TicketNotifi
|
|||||||
|
|
||||||
// Show toast for WebSocket notification
|
// Show toast for WebSocket notification
|
||||||
const showWSNotificationToast = useCallback((message: WSMessage) => {
|
const showWSNotificationToast = useCallback((message: WSMessage) => {
|
||||||
const icon = message.type === 'ticket.new' ? (
|
const isNewTicket = message.type === 'ticket.new'
|
||||||
|
const isAdminReply = message.type === 'ticket.admin_reply'
|
||||||
|
const isUserReply = message.type === 'ticket.user_reply'
|
||||||
|
|
||||||
|
const icon = isNewTicket ? (
|
||||||
<span className="text-lg">🎫</span>
|
<span className="text-lg">🎫</span>
|
||||||
) : message.type === 'ticket.admin_reply' ? (
|
) : isAdminReply ? (
|
||||||
<span className="text-lg">💬</span>
|
<span className="text-lg">💬</span>
|
||||||
) : (
|
) : (
|
||||||
<span className="text-lg">📨</span>
|
<span className="text-lg">📨</span>
|
||||||
)
|
)
|
||||||
|
|
||||||
const toastMessage = message.message ||
|
const ticketTitle = message.title || ''
|
||||||
(message.type === 'ticket.new'
|
|
||||||
? t('notifications.newTicket', 'New ticket: {{title}}', { title: message.title })
|
let toastTitle: string
|
||||||
: t('notifications.newReply', 'New reply in ticket'))
|
let toastMessage: string
|
||||||
|
|
||||||
|
if (isNewTicket) {
|
||||||
|
toastTitle = t('notifications.newTicketTitle', 'New Ticket')
|
||||||
|
toastMessage = message.message || t('notifications.newTicket', 'New ticket: {{title}}', { title: ticketTitle })
|
||||||
|
} else if (isUserReply) {
|
||||||
|
toastTitle = t('notifications.newUserReplyTitle', 'User Reply')
|
||||||
|
toastMessage = message.message || t('notifications.newUserReply', 'User replied in ticket: {{title}}', { title: ticketTitle })
|
||||||
|
} else {
|
||||||
|
toastTitle = t('notifications.newReplyTitle', 'New Reply')
|
||||||
|
toastMessage = message.message || t('notifications.newReply', 'New reply in ticket: {{title}}', { title: ticketTitle })
|
||||||
|
}
|
||||||
|
|
||||||
showToast({
|
showToast({
|
||||||
type: 'info',
|
type: 'info',
|
||||||
title: message.type === 'ticket.new' ? t('notifications.newTicketTitle', 'New Ticket') : t('notifications.newReplyTitle', 'New Reply'),
|
title: toastTitle,
|
||||||
message: toastMessage,
|
message: toastMessage,
|
||||||
icon,
|
icon,
|
||||||
onClick: () => {
|
onClick: () => {
|
||||||
@@ -189,7 +204,7 @@ export default function TicketNotificationBell({ isAdmin = false }: TicketNotifi
|
|||||||
|
|
||||||
{/* Dropdown */}
|
{/* Dropdown */}
|
||||||
{isOpen && (
|
{isOpen && (
|
||||||
<div className="absolute right-0 mt-2 w-80 sm:w-96 bg-dark-900/95 backdrop-blur-xl border border-dark-700/50 rounded-2xl shadow-2xl shadow-black/30 overflow-hidden z-50 animate-scale-in">
|
<div className="fixed sm:absolute top-16 sm:top-auto right-4 sm:right-0 left-4 sm:left-auto mt-0 sm:mt-2 w-auto sm:w-96 bg-dark-900/95 backdrop-blur-xl border border-dark-700/50 rounded-2xl shadow-2xl shadow-black/30 overflow-hidden z-50 animate-scale-in">
|
||||||
{/* Header */}
|
{/* Header */}
|
||||||
<div className="flex items-center justify-between px-4 py-3 border-b border-dark-700/50 bg-dark-800/30">
|
<div className="flex items-center justify-between px-4 py-3 border-b border-dark-700/50 bg-dark-800/30">
|
||||||
<h3 className="text-sm font-semibold text-dark-100">
|
<h3 className="text-sm font-semibold text-dark-100">
|
||||||
|
|||||||
@@ -47,7 +47,11 @@
|
|||||||
"newNotification": "New notification",
|
"newNotification": "New notification",
|
||||||
"clickToView": "Click to view",
|
"clickToView": "Click to view",
|
||||||
"newTicket": "New ticket: {{title}}",
|
"newTicket": "New ticket: {{title}}",
|
||||||
"newReply": "New reply in ticket"
|
"newReply": "New reply in ticket: {{title}}",
|
||||||
|
"newTicketTitle": "New Ticket",
|
||||||
|
"newReplyTitle": "New Reply",
|
||||||
|
"newUserReply": "User replied in ticket: {{title}}",
|
||||||
|
"newUserReplyTitle": "User Reply"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"login": "Login",
|
"login": "Login",
|
||||||
|
|||||||
@@ -33,6 +33,24 @@
|
|||||||
"info": "اطلاعات",
|
"info": "اطلاعات",
|
||||||
"wheel": "چرخ شانس"
|
"wheel": "چرخ شانس"
|
||||||
},
|
},
|
||||||
|
"notifications": {
|
||||||
|
"ticketNotifications": "اعلانهای تیکت",
|
||||||
|
"markAllRead": "خواندن همه",
|
||||||
|
"noNotifications": "اعلانی وجود ندارد",
|
||||||
|
"justNow": "همین الان",
|
||||||
|
"minutesAgo": "{{count}} دقیقه پیش",
|
||||||
|
"hoursAgo": "{{count}} ساعت پیش",
|
||||||
|
"daysAgo": "{{count}} روز پیش",
|
||||||
|
"viewAll": "مشاهده همه تیکتها",
|
||||||
|
"newNotification": "اعلان جدید",
|
||||||
|
"clickToView": "برای مشاهده کلیک کنید",
|
||||||
|
"newTicket": "تیکت جدید: {{title}}",
|
||||||
|
"newReply": "پاسخ جدید در تیکت: {{title}}",
|
||||||
|
"newTicketTitle": "تیکت جدید",
|
||||||
|
"newReplyTitle": "پاسخ جدید",
|
||||||
|
"newUserReply": "کاربر در تیکت پاسخ داد: {{title}}",
|
||||||
|
"newUserReplyTitle": "پاسخ کاربر"
|
||||||
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"login": "ورود",
|
"login": "ورود",
|
||||||
"register": "ثبت نام",
|
"register": "ثبت نام",
|
||||||
|
|||||||
@@ -47,7 +47,11 @@
|
|||||||
"newNotification": "Новое уведомление",
|
"newNotification": "Новое уведомление",
|
||||||
"clickToView": "Нажмите для просмотра",
|
"clickToView": "Нажмите для просмотра",
|
||||||
"newTicket": "Новый тикет: {{title}}",
|
"newTicket": "Новый тикет: {{title}}",
|
||||||
"newReply": "Новый ответ в тикете"
|
"newReply": "Новый ответ в тикете: {{title}}",
|
||||||
|
"newTicketTitle": "Новый тикет",
|
||||||
|
"newReplyTitle": "Новый ответ",
|
||||||
|
"newUserReply": "Ответ пользователя в тикете: {{title}}",
|
||||||
|
"newUserReplyTitle": "Ответ пользователя"
|
||||||
},
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"login": "Вход",
|
"login": "Вход",
|
||||||
|
|||||||
@@ -33,6 +33,24 @@
|
|||||||
"info": "信息",
|
"info": "信息",
|
||||||
"wheel": "幸运转盘"
|
"wheel": "幸运转盘"
|
||||||
},
|
},
|
||||||
|
"notifications": {
|
||||||
|
"ticketNotifications": "工单通知",
|
||||||
|
"markAllRead": "全部标记已读",
|
||||||
|
"noNotifications": "暂无通知",
|
||||||
|
"justNow": "刚刚",
|
||||||
|
"minutesAgo": "{{count}}分钟前",
|
||||||
|
"hoursAgo": "{{count}}小时前",
|
||||||
|
"daysAgo": "{{count}}天前",
|
||||||
|
"viewAll": "查看所有工单",
|
||||||
|
"newNotification": "新通知",
|
||||||
|
"clickToView": "点击查看",
|
||||||
|
"newTicket": "新工单:{{title}}",
|
||||||
|
"newReply": "工单新回复:{{title}}",
|
||||||
|
"newTicketTitle": "新工单",
|
||||||
|
"newReplyTitle": "新回复",
|
||||||
|
"newUserReply": "用户回复了工单:{{title}}",
|
||||||
|
"newUserReplyTitle": "用户回复"
|
||||||
|
},
|
||||||
"auth": {
|
"auth": {
|
||||||
"login": "登录",
|
"login": "登录",
|
||||||
"register": "注册",
|
"register": "注册",
|
||||||
|
|||||||
Reference in New Issue
Block a user