"use strict"; /** * Licensed Materials - Property of IBM * IBM Cognos Products: Cognos Analytics * Copyright IBM Corp. 2015, 2018 * US Government Users Restricted Rights - Use, duplication or disclosure * restricted by GSA ADP Schedule Contract with IBM Corp. */ define(['underscore', 'doT', 'bi/admin/common/ui/MagicWand', 'bi/commons/ui/AccessibleView', 'bi/admin/common/ui/listview/ListView', 'bi/admin/nls/StringResource', 'text!bi/admin/multitenancy/templates/TenantsListTemplate.html', 'bi/admin/common/utils/AJAXUtils', 'bi/commons/utils/BidiUtil', 'bi/commons/utils/ContentFormatter', 'bi/admin/multitenancy/services/TenantsListAdapter', 'bi/commons/ui/dialogs/ConfirmationDialog', 'bi/admin/multitenancy/services/TenantsCustomizationService', 'bi/admin/multitenancy/TenantsActionHandler'], function (_, dot, MagicWand, View, ListView, StringResource, TenantsListTemplate, AJAXUtils, BidiUtil, ContentFormatter, TenantsListAdapter, ConfirmationDialog, TenantsCustomizationService, TenantsActionHandler) { 'use strict'; //NOSONAR: meant to be strict var TenantsListView = View.extend({ showBreadcrumbs: true, defaultTypes: ['tenant'], _breadCrumbs: null, listAdaptor: null, init: function init(options) { TenantsListView.inherited('init', this, arguments); _.extend(this, options); this.listAdaptor = this._getNewTenantsListAdapter({ glassContext: this.glassContext, objectInfo: {}, removeSelf: false, showContextMenu: true }); this.tenantsController = this._getNewTenantsCustomizationService({ glassContext: this.glassContext }); this.includeToolbar = options.includeToolbar ? options.includeToolbar : false; this.filterPushed = false; this.filterStringValue = { 'tenant': true }; }, _getNewTenantsListAdapter: function _getNewTenantsListAdapter(spec) { return new TenantsListAdapter(spec); }, _getNewTenantsCustomizationService: function _getNewTenantsCustomizationService(spec) { return new TenantsCustomizationService(spec); }, _renderTemplate: function _renderTemplate() { var paneInfo = { 'strings': { 'title': StringResource.get('addTenantsTitle'), 'type': StringResource.get('type'), 'addTenant': StringResource.get('addTenantTitle') } }; var sHtml = dot.template(TenantsListTemplate)(paneInfo); this.$el.html(sHtml); BidiUtil.initElementForBidi(this.$el.find(".bi-admin-input.bi-admin-input-search")[0]); }, _renderSearch: function _renderSearch() { return MagicWand.searchInput(this.$el).then(function (widgets) { if (widgets.length === 1) { this._searchInput = widgets[0]; this._searchInput.options.hint = StringResource.get('filterTips'); this._searchInput.on('changed', function (e) { var trimmed = e.text.trim(); if (trimmed.length > 0 || e.text === '') { this.listView.setPaging(false); this.listView.filter(trimmed, 'defaultName'); } }.bind(this)); } }.bind(this)); }, _getNewTenantsActionHandler: function _getNewTenantsActionHandler() { return new TenantsActionHandler(); }, _getNewListView: function _getNewListView(options) { return new ListView(options); }, _renderListView: function _renderListView() { var elList = this.$el.find('.bi-admin-tenant-list'); elList.empty(); this.listView = this._getNewListView({ el: elList, dataAdaptor: this.listAdaptor, glassContext: this.glassContext, accessibleLabel: this.title, activeInputForm: null, multiSelect: false }); this.listView.singleSelectCallback = this._rowClickHandler.bind(this); this.listView.contextMenuCallback = function (e) { var args = { "position": e.position, "menuId": "com.ibm.bi.admin.tenantMenu", "activeObject": { handler: this._getNewTenantsActionHandler(), data: e.selectedObject[0], parentView: this } }; this.glassContext.appController.showContextMenu(args); }.bind(this); if (this.listAdaptor.contextMenuHandler) { this.listView.contextMenuCallback = this.listAdaptor.contextMenuHandler.bind(this.listAdaptor, this); } return this.listView.render(); }, render: function render() { this._renderTemplate(); return this._renderSearch().then(this._renderListView.bind(this)).then(this._bindEvents.bind(this)); }, getSelectedObjects: function getSelectedObjects() { return this.listView.getSelectedObjects(); }, _bindEvents: function _bindEvents() { if (this.showAddButton) { this.$el.find('#button_add').on('primaryaction', function () { this.trigger('addItem'); }.bind(this)); } $(this.slideout.$el).on('com.ibm.cognos.bi.admin.updatetenantlist', function () { this.listView.reload(); }.bind(this)); var $label = $(''); $label.text(this._filterString(this.filterStringValue)); ContentFormatter.middleShortenString($label); }, _addTenant: function _addTenant() {}, setFocus: function setFocus() { this.$el.find('.bi-admin-filterbar-leading input').focus(); }, _filterString: function _filterString(filterString) { return filterString; }, _filter: function _filter(filterStr) { if (this._searchInput) { this._searchInput.options.value = ''; } var $label = this.$el.find('.bi-admin-filter-icon'); if ($label) { $label[0].title = ''; } var labelString = this._filterString(filterStr); $label.text(labelString); ContentFormatter.middleShortenString($label[0]); this.listAdaptor._filterType = filterStr || ''; this.listAdaptor._filterString = ''; this.listView.reload(false); }, reloadList: function reloadList() { return this.listView.reload(false); }, _rowClickHandler: function _rowClickHandler(oData) { if (this.listAdaptor.rowClickHandler) { this.listAdaptor.rowClickHandler(this, oData); } }, doSetProperties: function doSetProperties(tenant, tabModule) { tenant.type = 'tenant'; var tenantPropertySlideout = this.glassContext.appController.showSlideOut({ 'parent': this.slideout, 'width': "600px", 'onHide': function () { if (tenantPropertySlideout && tenantPropertySlideout.contentView && tenantPropertySlideout.contentView.onHide) { tenantPropertySlideout.contentView.onHide().then(function () { //remove propertiesPageView tenantPropertySlideout.hide(); }.bind(this)); } }.bind(this), 'content': { 'module': 'bi/admin/common/PropertiesPageView', 'parentView': this, 'objectInfo': tenant, 'type': tenant.type, 'glassContext': this._glassContext, 'selectedTabModule': tabModule, 'tenantsController': this.tenantsController } }); }, doDelete: function doDelete(tenant, shouldDeleteTenantProfile) { var dialogMsg = !shouldDeleteTenantProfile ? StringResource.get('multitenancyDeleteConfirmation') : StringResource.get('multitenancyDeleteProfileConfirmation'); var oDialog = new ConfirmationDialog('confirmDelete', StringResource.get('confirmDelete'), dialogMsg); oDialog.setDialogOptions({ 'width': '500px' }); oDialog.confirm(function () { if (this.slideout.child) { this.slideout.child.hide(); } this.tenantsController.deleteTenant(tenant.tenantID, shouldDeleteTenantProfile).then(function () { var sText; if (!shouldDeleteTenantProfile) { sText = StringResource.get('multitenancyDeleteMsg', { 'tenantName': tenant.defaultName }); } else { sText = StringResource.get('multitenancyDeleteTenantProfileMsg', { 'tenantName': tenant.defaultName }); } this.glassContext.appController.showToast(sText, { 'type': 'success' }); this.slideout.$el.trigger('com.ibm.cognos.bi.admin.updatetenantlist'); }.bind(this), function (ajaxObj, err) { if (!shouldDeleteTenantProfile) { this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error')); } else { this.glassContext.appController.showToast(err.responseJSON.error, { 'type': 'warning' }); } }.bind(this)); }.bind(this)); oDialog.renderContent($('
')); }, doKillTenantSessions: function doKillTenantSessions(tenant) { var oDialog = new ConfirmationDialog('multitenantKillSessions', StringResource.get('multitenantKillSessions'), StringResource.get('multitenantKillSessionsConfirm', { "tenantName": tenant.defaultName })); oDialog.confirm(function () { if (this.slideout.child) { this.slideout.child.hide(); } this.tenantsController.killTenantSessions(tenant.tenantID).then(function (data) { var sText = StringResource.get('multitenantKillSessionsSuccess', { 'sessionNumber': data.count ? data.count : 0, 'tenantName': tenant.defaultName }); this.glassContext.appController.showToast(sText, { 'type': 'success' }); }.bind(this), function (ajaxObj, err) { this.glassContext.appController.showErrorMessage(AJAXUtils.buildErrorMessage(err.responseJSON.errors), StringResource.get('error')); }.bind(this)); }.bind(this)); oDialog.renderContent($('
')); }, doDisableTenant: function doDisableTenant(tenant) { this.tenantsController.disableTenant(tenant.tenantID, !tenant.disabled).then(function (data) { var message = tenant.disabled ? StringResource.get('enableTenant', { 'tenantName': tenant.defaultName }) : StringResource.get('disableTenant', { 'tenantName': tenant.defaultName }); this.glassContext.appController.showToast(message); this.slideout.$el.trigger('com.ibm.cognos.bi.admin.updatetenantlist'); }.bind(this)); }, refresh: function refresh() { this.listView.reload(); } }); return TenantsListView; });