NotificationsTab.js 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. "use strict";
  2. /**
  3. * Licensed Materials - Property of IBM
  4. * IBM Cognos Products: Cognos Analytics
  5. * Copyright IBM Corp. 2017, 2018
  6. * US Government Users Restricted Rights - Use, duplication or disclosure
  7. * restricted by GSA ADP Schedule Contract with IBM Corp.
  8. */
  9. define(['doT', 'underscore', 'bi/commons/ui/View', 'bi/admin/multitenancy/services/TenantsCustomizationService', 'bi/commons/ui/content/SingleSelectListControl', 'bi/admin/nls/StringResource', 'text!bi/admin/multitenancy/templates/TenantNotifications.html', 'text!bi/commons/ui/template/RadioButton.html', 'bi/commons/ui/properties/Input', 'bi/commons/ui/ButtonBar'], function (dot, _, View, TenantsCustomizationService, SingleSelectListControl, StringResource, TenantNotificationTemplate, RadioButton, Input, ButtonBar) {
  10. 'use strict'; //NOSONAR
  11. var NotificationsTab = View.extend({
  12. init: function init(options) {
  13. NotificationsTab.inherited('init', this, arguments);
  14. _.extend(this, options);
  15. this.listControl = this._getNewSingleSelectListControl(this.listSpec);
  16. this.selectorID = _.uniqueId();
  17. this.tenantsController = this._getNewTenantsCustomizationService({
  18. glassContext: this.glassContext
  19. });
  20. this.tenant = this.objectInfo;
  21. this._selectedObjectData = null;
  22. this.systemDefaultField = null;
  23. },
  24. _getNewSingleSelectListControl: function _getNewSingleSelectListControl(options) {
  25. return new SingleSelectListControl(options);
  26. },
  27. _getNewTenantsCustomizationService: function _getNewTenantsCustomizationService(options) {
  28. return new TenantsCustomizationService(options);
  29. },
  30. render: function render() {
  31. var templateOptions = {
  32. options: [{
  33. name: 'defaultSender',
  34. label: StringResource.get('defaultSenderEmail')
  35. }, {
  36. name: 'tenantSender',
  37. label: StringResource.get('tenantSenderEmail')
  38. }]
  39. };
  40. var $Html = $(dot.template(TenantNotificationTemplate)(templateOptions));
  41. for (var i = 0; i < templateOptions.options.length; i++) {
  42. $Html.find('.homeSelect.' + templateOptions.options[i].name).append(dot.template(RadioButton)({
  43. label: templateOptions.options[i].label,
  44. index: i,
  45. id: this.selectorID,
  46. controlOnLeft: true
  47. }));
  48. }
  49. this.$el.append($Html);
  50. this.$el.find('.homeSelect .roundButton').on('primaryaction', this._handleClickSelect.bind(this));
  51. this.systemDefaultField = this._getNewInput({
  52. $el: this.$el.find('.injectView.defaultSender'),
  53. id: 'systemDefault',
  54. name: 'systemDefault',
  55. ariaLabel: StringResource.get('defaultSenderEmail'),
  56. type: 'Input',
  57. readOnly: true,
  58. inputClass: 'bi-admin-input bi-notification-input',
  59. ellipses: false,
  60. indent: 4,
  61. editable: false
  62. });
  63. this.tenantSenderField = this._getNewInput({
  64. $el: this.$el.find('.injectView.tenantSender'),
  65. id: 'tenantSender',
  66. name: 'tenantSender',
  67. ariaLabel: StringResource.get('tenantSenderEmail'),
  68. placeHolderText: StringResource.get('tenantSenderPlaceholderText'),
  69. type: 'Input',
  70. inputClass: 'bi-admin-input bi-notification-input',
  71. ellipses: false,
  72. indent: 4,
  73. editable: false
  74. });
  75. this.buttonBar = this._getNewButtonBar({
  76. buttons: [{
  77. label: StringResource.get("apply"),
  78. onSelect: this._saveNotificationHandler.bind(this)
  79. }]
  80. });
  81. var tenantValue;
  82. var dfdSysNotificationSettings = this.tenantsController.getSystemNotificationSettings();
  83. var dfdTenantNotificationSettings = this.tenantsController.getTenantNotificationSettings(this.tenant.tenantID);
  84. return Promise.all([dfdSysNotificationSettings, dfdTenantNotificationSettings]).then(function (responses) {
  85. this.systemDefaultField.value = responses[0].data["NC.defaultSender"];
  86. tenantValue = responses[1].data && responses[1].data.defaultSender ? responses[1].data.defaultSender : "";
  87. this.tenantSenderField.value = tenantValue;
  88. return Promise.all([this.systemDefaultField.render(), this.tenantSenderField.render(), this.buttonBar.render()]);
  89. }.bind(this)).then(function (results) {
  90. this._initSelection(tenantValue);
  91. $('input.bi-notification-input').on('focus', this._handleClickSelect.bind(this));
  92. this.$el.find('.standardFooter').html(results[2]);
  93. }.bind(this));
  94. },
  95. _getNewInput: function _getNewInput(options) {
  96. return new Input(options);
  97. },
  98. _getNewButtonBar: function _getNewButtonBar(options) {
  99. return new ButtonBar(options);
  100. },
  101. _validateInput: function _validateInput(email) {
  102. return /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(email);
  103. },
  104. _saveNotificationHandler: function _saveNotificationHandler() {
  105. var checked = this.$el.find('.homeSelect.defaultSender .roundButton').hasClass('bi-admin-checked');
  106. var email = checked ? this.systemDefaultField.getValue() : this.tenantSenderField.getValue();
  107. if (this._validateInput(email)) {
  108. var senderFieldValue = checked ? '' : this.tenantSenderField.getValue();
  109. var successStrKey = checked ? 'systemNotificationToast' : 'tenantNotificationToast';
  110. var errorStrKey = checked ? 'systemNotificationErrorToast' : 'tenantNotificationErrorToast';
  111. return this.tenantsController.setTenantNotificationSettings(this.tenant.tenantID, senderFieldValue).then(function (response) {
  112. this.glassContext.appController.showToast(StringResource.get(successStrKey, {
  113. 'email': email
  114. }));
  115. }.bind(this)).catch(function (ajaxOptions, error) {
  116. this.glassContext.appController.showErrorMessage(StringResource.get(errorStrKey));
  117. }.bind(this));
  118. } else {
  119. this.glassContext.appController.showToast(StringResource.get('emailInvalidErrorMsg'), {
  120. type: 'warning'
  121. });
  122. }
  123. },
  124. _handleClickSelect: function _handleClickSelect(event) {
  125. this._select(event.currentTarget);
  126. event.stopPropagation();
  127. return false;
  128. },
  129. _select: function _select(rowNode) {
  130. var $rowNode = $(rowNode);
  131. this._uncheckCurrentSelection();
  132. $rowNode.attr('aria-checked', 'true');
  133. $rowNode.addClass('bi-admin-checked');
  134. if ($rowNode.parent().hasClass('defaultSender')) {
  135. this.$el.find('.homeSelect.defaultSender .roundButton').addClass('checked');
  136. this.$el.find('.homeSelect.defaultSender .roundButton circle.inner').css('opacity', '1');
  137. } else if ($rowNode.parent().hasClass('tenantSender') || rowNode.id.indexOf('tenantSender') > -1) {
  138. this.$el.find('.homeSelect.tenantSender .roundButton').addClass('checked');
  139. this.$el.find('.homeSelect.tenantSender .roundButton circle.inner').css('opacity', '1');
  140. }
  141. if (this._selectionChanged) {
  142. this._selectionChanged();
  143. }
  144. },
  145. _uncheckCurrentSelection: function _uncheckCurrentSelection() {
  146. var $currentFocusedRow = this.$el.find('.homeSelect .roundButton.bi-admin-checked');
  147. $currentFocusedRow.removeClass('bi-admin-checked');
  148. this.$el.find('.homeSelect .roundButton circle.inner').css('opacity', '0');
  149. $currentFocusedRow.attr('aria-checked', 'false');
  150. },
  151. _initSelection: function _initSelection(tenantSender) {
  152. var $selectedRadio;
  153. if (!tenantSender) {
  154. $selectedRadio = this.$el.find('.homeSelect.defaultSender .roundButton');
  155. } else {
  156. $selectedRadio = this.$el.find('.homeSelect.tenantSender .roundButton');
  157. }
  158. this._select($selectedRadio);
  159. },
  160. getCurrentSelection: function getCurrentSelection() {
  161. var currentSelection = {
  162. 'name': this._selectedObjectData.defaultName,
  163. 'value': this.currentValue
  164. };
  165. return currentSelection;
  166. }
  167. });
  168. NotificationsTab.NOT_SUPPORTED_TYPE = 'The object type is not supported: ';
  169. return NotificationsTab;
  170. });