/**
* @namespace flexygo.ui.wc
*/
var flexygo;
(function (flexygo) {
var ui;
(function (ui) {
var wc;
(function (wc) {
/**
* Library for the FlxNotificationElement web component.
*
* @class FlxNotificationElement
* @constructor
* @return {FlxNotificationElement}
*/
class FlxNotificationElement extends HTMLElement {
constructor() {
super();
}
/**
* Fires when element is attached to DOM
* @method connectedCallback
*/
connectedCallback() {
this.init();
}
/**
* Fires when element is detached to DOM
* @method disconnectedCallback
*/
disconnectedCallback() {
//Remove event handler
flexygo.events.off(this, 'push', 'notify', function (e) {
if (e.masterIdentity == 'updateBadgeNotice' && typeof e.sender['pendingNotices'] != 'undefined') {
this.updateBadge(e.sender.pendingNotices, true);
}
});
}
/**
* Monitor the list of observed attribute for changes.
* @property observedAttributes
*/
static get observedAttributes() {
return [];
}
/**
* Fires when the attribute value of the element is changed.
* @method attributeChangedCallback
*/
attributeChangedCallback(attrName, oldVal, newVal) {
}
/**
* Initialize Web Control
* @method init
*/
init() {
this.refresh();
flexygo.events.on(this, 'push', 'notify', function (e) {
if (e.masterIdentity == 'updateBadgeNotice' && typeof e.sender['pendingNotices'] != 'undefined') {
this.updateBadge(e.sender.pendingNotices, true);
}
});
}
/**
* Refreses Web Control
* @method refresh
*/
refresh() {
let ctx = $(this);
let notySpan = $('<span class="notify-dropdown"> <i class="flx-icon icon-bell-2 "></i> <b id="notifyBadge" class="badge bounceIn animated"></b> </span>');
ctx.append(notySpan);
if (flexygo.utils.isSizeMobile()) {
notySpan.on('click', () => {
flexygo.nav.openPageName('syspage-notify', 'sysNotices', '', null, 'current', false, null);
});
}
else {
let tooltip = '<flx-tooltip container="body" mode="popover" placement="bottom"><div class="notifypopover"><flx-list objectname="sysNotices" objectwhere="" templateId="sysNotiFyListPopup"></flx-list></div></flx-tooltip>';
ctx.prepend(tooltip);
}
this.refreshBadge();
}
/**
* Navigates to notify node specification
* @method goToNotice
*/
goToNotice(elm, noticeId) {
let params = {
NoticeId: noticeId
};
flexygo.ajax.post('~/api/Notify', 'GetNotice', params, (response) => {
if (response) {
let lfnav = new flexygo.ui.wc.FlxNavElement();
var itemClick = new Function(lfnav.getTreeNavigate(flexygo.utils.lowerKeys(response)));
itemClick.call(elm);
}
});
}
/**
* Checks and refresh Notify Badge
* @method refreshBadge
*/
refreshBadge() {
if ($('#notifyBadge')) {
flexygo.ajax.post('~/api/Notify', 'GetBadgeValue', null, (response) => {
this.updateBadge(response, false);
});
}
}
/**
* Refereshes Notify Badge
* @method updateBadge
* @param {number} pendingNotices - Number of pending notices
* @param {boolean} sound - Reproduces sound or not.
*/
updateBadge(pendingNotices, sound) {
var currentNotices = $('#notifyBadge').html();
if (!currentNotices || currentNotices == '') {
currentNotices = '0';
}
if (pendingNotices > parseInt(currentNotices)) {
var snd = new Audio(flexygo.utils.resolveUrl('~/js/plugins/lobibox-master/sounds/sound1.ogg'));
if (!flexygo.utils.testMode) {
snd.play();
}
}
if (pendingNotices == 0) {
$('#notifyBadge').html('');
}
else {
$('#notifyBadge').html(pendingNotices.toString());
}
}
/**
* Marks a notification has been read
* @method markAsRead
*/
markAsRead(elm, noticeId) {
let ni = noticeId;
let params = {
NoticeId: noticeId
};
flexygo.ajax.post('~/api/Notify', 'SetNoticeIsRead', params, (response) => {
if (response) {
if (ni) {
$(elm).closest('.active').removeClass('active');
}
else {
$(elm).closest('.notifypopover').find('.active').removeClass('active');
}
}
this.refreshBadge();
});
}
}
wc.FlxNotificationElement = FlxNotificationElement;
})(wc = ui.wc || (ui.wc = {}));
})(ui = flexygo.ui || (flexygo.ui = {}));
})(flexygo || (flexygo = {}));
window.customElements.define('flx-notification', flexygo.ui.wc.FlxNotificationElement);
//# sourceMappingURL=flx-notification.js.map