blob: 0018117423ea7617a690b834c22973b8e6d6091a [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');
var lazyLoading = require('utils/lazy_loading');
App.ServiceConfigContainerView = Em.ContainerView.extend({
view: null,
lazyLoading: null,
didInsertElement: function () {
if (this.get('controller.isInstallWizard')) {
this.selectedServiceObserver();
}
},
pushView: function () {
if (this.get('controller.selectedService')) {
var self = this;
var controllerRoute = 'App.router.' + this.get('controller.name');
if (!this.get('view')) {
this.get('childViews').pushObject(App.ServiceConfigView.create({
templateName: require('templates/common/configs/service_config_wizard'),
controllerBinding: controllerRoute,
isNotEditableBinding: controllerRoute + '.isNotEditable',
filterBinding: controllerRoute + '.filter',
columnsBinding: controllerRoute + '.filterColumns',
selectedServiceBinding: controllerRoute + '.selectedService',
actionsStacked: function () {
return this.get('controller.isInstallWizard') && this.get('supportsConfigLayout');
}.property('controller.isInstallWizard', 'supportsConfigLayout'),
serviceConfigsByCategoryView: Em.ContainerView.create(),
willDestroyElement: function () {
$('.loading').append(Em.I18n.t('common.loading.eclipses'));
},
didInsertElement: function () {
$('.loading').empty();
this._super();
},
setActiveTab: function (event) {
if (event.context.get('isHiddenByFilter')) return false;
this.get('tabs').forEach(function (tab) {
tab.set('isActive', false);
});
var currentTab = event.context;
currentTab.set('isActive', true);
}
}));
}
else {
this.get('childViews').pushObject(this.get('view'));
}
var categoriesToPush = [];
this.get('controller.selectedService.configCategories').forEach(function (item) {
var categoryView = item.get('isCustomView') ? item.get('customView') : App.ServiceConfigsByCategoryView;
if (categoryView !== null) {
categoriesToPush.pushObject(categoryView.extend({
category: item,
controllerBinding: controllerRoute,
canEditBinding: 'parentView.canEdit',
serviceBinding: controllerRoute + '.selectedService',
serviceConfigsBinding: controllerRoute + '.selectedService.configs',
supportsHostOverridesBinding: 'parentView.supportsHostOverrides'
}));
}
});
this.set('lazyLoading', lazyLoading.run({
destination: self.get('childViews.lastObject.serviceConfigsByCategoryView.childViews'),
source: categoriesToPush,
initSize: 3,
chunkSize: 3,
delay: 200,
context: this
}));
}
},
selectedServiceObserver: function () {
if (this.get('childViews.length')) {
var view = this.get('childViews.firstObject');
if (view.get('serviceConfigsByCategoryView.childViews.length')) {
view.get('serviceConfigsByCategoryView.childViews').clear();
}
view.removeFromParent();
this.set('view', view);
}
//terminate lazy loading when switch service
if (this.get('lazyLoading')) lazyLoading.terminate(this.get('lazyLoading'));
this.pushViewAfterRecommendation();
}.observes('controller.selectedService'),
pushViewAfterRecommendation: function() {
if (this.get('controller.isRecommendedLoaded')) {
this.pushView();
} else {
Em.run.later(this.pushViewAfterRecommendation.bind(this), 300);
}
}
});