v1.1.3
- Triggers (Admin > Wyzwalacze): event-driven rules that fire immediately on a ticket lifecycle event (created/updated/status/priority/assignee/team/ category changed, new reply), with AND-conditions and ordered actions (set status/priority/team/assignee, send e-mail). Ships its own dedicated, freely add/edit/delete-able e-mail templates, kept separate from the fixed system templates. - Ticket watching: operators can star/"Obserwuj" any ticket to follow it regardless of assignment/team. - Real-time notification bell (private per-user broadcast channel, 30s fallback poll) with an opt-in in-tab browser push notification. - Per-user notification preferences (/settings/notifications): scope (mine/unassigned/watched/all) and e-mail toggle per event category. - Admin > Integracje: new tab for LDAP/AD + BookStack config, split out of Konfiguracja. - Operator queue: Podkategoria/Zespół/Utworzono columns (off by default). - Obserwuj button moved next to the auto-refresh countdown; trigger condition builder shows subcategory/zgłaszający as name dropdowns instead of raw IDs; /settings/notifications got a back link, full-width push card, and a bordered table container; admin panel tab and operator queue view now persist across a plain page refresh. - Docs: README/ARCHITECTURE/wiki updated for all of the above. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -55,6 +55,34 @@ if (window.currentUserId) {
|
||||
.error((error) => console.error('operator.queue subscription error', error));
|
||||
}
|
||||
|
||||
/**
|
||||
* Every logged-in user's own private notification stream — refreshes the
|
||||
* bell instantly (see NotificationBell::onBellNotification()) and, when the
|
||||
* viewer has opted in via the toggle on the notification-preferences page,
|
||||
* also raises an in-tab browser Notification. Deliberately lightweight: no
|
||||
* service worker, no push subscription — this only fires while the tab
|
||||
* calling it is open, same limitation as the operator.queue block above.
|
||||
*/
|
||||
if (window.currentUserId) {
|
||||
window.Echo.private('App.Models.User.' + window.currentUserId)
|
||||
.listen('.NotificationCreated', (e) => {
|
||||
Livewire.dispatch('bell-notification-received', { notificationId: e.notificationId });
|
||||
|
||||
if (
|
||||
localStorage.getItem('browserNotificationsEnabled') === '1'
|
||||
&& typeof Notification !== 'undefined'
|
||||
&& Notification.permission === 'granted'
|
||||
) {
|
||||
const popup = new Notification(e.message, { tag: e.notificationId });
|
||||
popup.onclick = () => {
|
||||
window.focus();
|
||||
window.location.href = e.url;
|
||||
};
|
||||
}
|
||||
})
|
||||
.error((error) => console.error('user notification channel subscription error', error));
|
||||
}
|
||||
|
||||
/**
|
||||
* Subscribes to a single ticket's channel — called by the Blade view of
|
||||
* whichever TicketShow component (operator or client) is currently mounted,
|
||||
|
||||
Reference in New Issue
Block a user