define(['jQuery', 'emby-checkbox', 'fnchecked'], function ($) { 'use strict'; function fillItems(elem, items, cssClass, idPrefix, currentList, isEnabledList) { var html = '
'; html += items.map(function (u) { var isChecked = isEnabledList ? currentList.indexOf(u.Id) != -1 : currentList.indexOf(u.Id) == -1; var checkedHtml = isChecked ? ' checked="checked"' : ''; return ''; }).join(''); html += '
'; elem.html(html).trigger('create'); } function reload(page) { var type = getParameterByName('type'); var promise1 = ApiClient.getUsers(); var promise2 = ApiClient.getNamedConfiguration(notificationsConfigurationKey); var promise3 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types')); var promise4 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Services')); Promise.all([promise1, promise2, promise3, promise4]).then(function (responses) { var users = responses[0]; var notificationOptions = responses[1]; var types = responses[2]; var services = responses[3]; var notificationConfig = notificationOptions.Options.filter(function (n) { return n.Type == type; })[0]; var typeInfo = types.filter(function (n) { return n.Type == type; })[0] || {}; if (typeInfo.IsBasedOnUserEvent) { $('.monitorUsers', page).show(); } else { $('.monitorUsers', page).hide(); } $('.notificationType', page).html(typeInfo.Name || 'Unknown Notification'); if (!notificationConfig) { notificationConfig = { DisabledMonitorUsers: [], SendToUsers: [], DisabledServices: [], SendToUserMode: 'Admins' }; } fillItems($('.monitorUsersList', page), users, 'chkMonitor', 'chkMonitor', notificationConfig.DisabledMonitorUsers); fillItems($('.sendToUsersList', page), users, 'chkSendTo', 'chkSendTo', notificationConfig.SendToUsers, true); fillItems($('.servicesList', page), services, 'chkService', 'chkService', notificationConfig.DisabledServices); $('#chkEnabled', page).checked(notificationConfig.Enabled || false); $('#selectUsers', page).val(notificationConfig.SendToUserMode).trigger('change'); }); } function save(page) { var type = getParameterByName('type'); var promise1 = ApiClient.getNamedConfiguration(notificationsConfigurationKey); var promise2 = ApiClient.getJSON(ApiClient.getUrl('Notifications/Types')); Promise.all([promise1, promise2]).then(function (responses) { var notificationOptions = responses[0]; var types = responses[1]; var notificationConfig = notificationOptions.Options.filter(function (n) { return n.Type == type; })[0]; if (!notificationConfig) { notificationConfig = { Type: type }; notificationOptions.Options.push(notificationConfig); } notificationConfig.Enabled = $('#chkEnabled', page).checked(); notificationConfig.SendToUserMode = $('#selectUsers', page).val(); notificationConfig.DisabledMonitorUsers = $('.chkMonitor', page).get().filter(function (c) { return !c.checked; }).map(function (c) { return c.getAttribute('data-itemid'); }); notificationConfig.SendToUsers = $('.chkSendTo', page).get().filter(function (c) { return c.checked; }).map(function (c) { return c.getAttribute('data-itemid'); }); notificationConfig.DisabledServices = $('.chkService', page).get().filter(function (c) { return !c.checked; }).map(function (c) { return c.getAttribute('data-itemid'); }); ApiClient.updateNamedConfiguration(notificationsConfigurationKey, notificationOptions).then(function (r) { Dashboard.processServerConfigurationUpdateResult(); Dashboard.navigate('notificationsettings.html'); }); }); } function onSubmit() { save($(this).parents('.page')); return false; } var notificationsConfigurationKey = 'notifications'; $(document).on('pageinit', '#notificationSettingPage', function () { var page = this; $('#selectUsers', page).on('change', function () { if ('Custom' == this.value) { $('.selectCustomUsers', page).show(); } else { $('.selectCustomUsers', page).hide(); } }); $('.notificationSettingForm').off('submit', onSubmit).on('submit', onSubmit); }).on('pageshow', '#notificationSettingPage', function () { reload(this); }); });