define([], function () { function notifications() { var self = this; self.getNotificationsSummaryPromise = null; self.total = 0; self.getNotificationsSummary = function () { var apiClient = window.ApiClient; if (!apiClient) { return; } self.getNotificationsSummaryPromise = self.getNotificationsSummaryPromise || apiClient.getNotificationSummary(Dashboard.getCurrentUserId()); return self.getNotificationsSummaryPromise; }; self.updateNotificationCount = function () { if (!Dashboard.getCurrentUserId()) { return; } if (!window.ApiClient) { return; } var promise = self.getNotificationsSummary(); if (!promise) { return; } promise.then(function (summary) { var btnNotificationsInner = document.querySelector('.btnNotificationsInner'); if (btnNotificationsInner) { btnNotificationsInner.classList.remove('levelNormal'); btnNotificationsInner.classList.remove('levelWarning'); btnNotificationsInner.classList.remove('levelError'); btnNotificationsInner.innerHTML = summary.UnreadCount; if (summary.UnreadCount) { btnNotificationsInner.classList.add('level' + summary.MaxUnreadNotificationLevel); } } }); }; self.markNotificationsRead = function (ids, callback) { ApiClient.markNotificationsRead(Dashboard.getCurrentUserId(), ids, true).then(function () { self.getNotificationsSummaryPromise = null; self.updateNotificationCount(); if (callback) { callback(); } }); }; self.showNotificationsList = function (startIndex, limit, elem) { refreshNotifications(startIndex, limit, elem, true); }; } function refreshNotifications(startIndex, limit, elem, showPaging) { var apiClient = window.ApiClient; if (apiClient) { return apiClient.getNotifications(Dashboard.getCurrentUserId(), { StartIndex: startIndex, Limit: limit }).then(function (result) { listUnreadNotifications(result.Notifications, result.TotalRecordCount, startIndex, limit, elem, showPaging); }); } } function listUnreadNotifications(list, totalRecordCount, startIndex, limit, elem, showPaging) { if (!totalRecordCount) { elem.html('

' + Globalize.translate('LabelNoUnreadNotifications') + '

'); return; } Notifications.total = totalRecordCount; var html = ''; if (totalRecordCount > limit && showPaging === true) { var query = { StartIndex: startIndex, Limit: limit }; html += LibraryBrowser.getQueryPagingHtml({ startIndex: query.StartIndex, limit: query.Limit, totalRecordCount: totalRecordCount, showLimit: false, updatePageSizeSetting: false }); } require(['humanedate', 'paper-fab', 'paper-item-body', 'paper-icon-item'], function () { for (var i = 0, length = list.length; i < length; i++) { var notification = list[i]; html += getNotificationHtml(notification); } elem.html(html).trigger('create'); }); } function getNotificationHtml(notification) { var itemHtml = ''; if (notification.Url) { itemHtml += ''; } itemHtml += ''; if (notification.Level == "Error") { itemHtml += ''; } else { itemHtml += ''; } itemHtml += ''; itemHtml += '
'; itemHtml += notification.Name; itemHtml += '
'; itemHtml += '
'; itemHtml += humane_date(notification.Date); itemHtml += '
'; if (notification.Description) { itemHtml += '
'; itemHtml += notification.Description; itemHtml += '
'; } itemHtml += '
'; itemHtml += '
'; if (notification.Url) { itemHtml += '
'; } return itemHtml; } window.Notifications = new notifications(); var needsRefresh = true; function onWebSocketMessage(e, msg) { if (msg.MessageType === "NotificationUpdated" || msg.MessageType === "NotificationAdded" || msg.MessageType === "NotificationsMarkedRead") { Notifications.getNotificationsSummaryPromise = null; Notifications.updateNotificationCount(); } } function initializeApiClient(apiClient) { Events.off(apiClient, "websocketmessage", onWebSocketMessage); Events.on(apiClient, "websocketmessage", onWebSocketMessage); } if (window.ApiClient) { initializeApiClient(window.ApiClient); } Events.on(ConnectionManager, 'apiclientcreated', function (e, apiClient) { initializeApiClient(apiClient); }); Events.on(ConnectionManager, 'localusersignedin', function () { needsRefresh = true; }); Events.on(ConnectionManager, 'localusersignedout', function () { needsRefresh = true; }); pageClassOn('pageshow', "type-interior", function () { if (needsRefresh) { Notifications.updateNotificationCount(); } }); });