blob: 85b2ec042bb78519f02552ca8d00b7beeef03136 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var App = require('app');
App.SelectDefinitionsPopupBodyView = App.TableView.extend({
templateName: require('templates/main/alerts/add_definition_to_group_popup'),
controllerBinding: 'App.router.manageAlertGroupsController',
isPaginate: true,
filteredContent: [],
filteredContentObs: function () {
Em.run.once(this, this.filteredContentObsOnce);
}.observes('parentView.availableDefs.@each.filtered'),
filteredContentObsOnce: function () {
var filtered = this.get('parentView.availableDefs').filterProperty('filtered') || [];
this.set('filteredContent', filtered);
},
/**
* @type {boolean}
*/
showOnlySelectedDefs: false,
filterComponent: null,
filterService: null,
/**
* @type {boolean}
*/
isDisabled: Em.computed.not('parentView.isLoaded'),
didInsertElement: function () {
var initialDefs = this.get('initialDefs');
initialDefs.setEach('filtered', true);
this.set('parentView.availableDefs', initialDefs);
this.set('parentView.isLoaded', true);
this.filteredContentObsOnce();
},
/**
* Default filter isn't needed
*/
filter: Em.K,
/**
* filter definitions by componentName and serviceName
*/
filterDefs: function () {
var showOnlySelectedDefs = this.get('showOnlySelectedDefs');
var filterComponent = this.get('filterComponent');
var filterService = this.get('filterService');
this.get('parentView.availableDefs').forEach(function (defObj) {
var matchComponent = filterComponent ? (defObj.get('componentName') === filterComponent.get('componentName')) : true,
matchService = filterService ? (defObj.get('serviceName') === filterService.get('serviceName')) : true,
filtered = (matchComponent && matchService);
defObj.set('filtered', showOnlySelectedDefs ? (filtered && defObj.get('selected')) : filtered);
}, this);
this.set('startIndex', 1);
}.observes('parentView.availableDefs', 'filterService.serviceName', 'filterComponent.componentName', 'showOnlySelectedDefs'),
defSelectMessage: function () {
var defs = this.get('parentView.availableDefs');
return this.t('alerts.actions.manage_alert_groups_popup.selectDefsDialog.selectedDefsLink')
.format(defs.filterProperty('selected').get('length'), defs.get('length'));
}.property('parentView.availableDefs.@each.selected'),
/**
* apply component filter
* @param {object|null} event
*/
selectFilterComponent: function (event) {
if (event && event.context.get('componentName')) {
var currentFilter = this.get('filterComponent');
if (currentFilter) {
currentFilter.set('selected', false);
}
if (currentFilter && currentFilter.get('componentName') === event.context.get('componentName')) {
// selecting the same filter deselects it.
this.set('filterComponent', null);
} else {
this.set('filterComponent', event.context);
event.context.set('selected', true);
}
}
},
/**
* apply service filter
* @param {object|null} event
*/
selectFilterService: function (event) {
if (event && event.context.get('serviceName')) {
var currentFilter = this.get('filterService');
if (currentFilter) {
currentFilter.set('selected', false);
}
if (currentFilter && currentFilter.get('serviceName') === event.context.get('serviceName')) {
// selecting the same filter deselects it.
this.set('filterService', null);
} else {
this.set('filterService', event.context);
event.context.set('selected', true);
}
}
},
/**
* Determines if all alert definitions are selected
* @type {boolean}
*/
allDefsSelected: false,
/**
* Inverse selection for alert definitions
* @method toggleSelectAllDefs
*/
toggleSelectAllDefs: function () {
this.get('parentView.availableDefs').filterProperty('filtered').setEach('selected', this.get('allDefsSelected'));
}.observes('allDefsSelected'),
toggleShowSelectedDefs: function () {
if (this.get('filterComponent')) this.get('filterComponent').set('selected', false);
if (this.get('filterService')) this.get('filterService').set('selected', false);
this.set('filterComponent', null);
this.set('filterService', null);
this.toggleProperty('showOnlySelectedDefs');
}
});