mirror of https://github.com/rancher/ui.git
124 lines
3.2 KiB
JavaScript
124 lines
3.2 KiB
JavaScript
import Ember from 'ember';
|
|
import { tagsToArray } from 'ui/models/stack';
|
|
import { headersWithHost as containerHeaders } from 'ui/components/container-table/component';
|
|
|
|
export default Ember.Controller.extend({
|
|
projectController: Ember.inject.controller('authenticated.project'),
|
|
projects: Ember.inject.service(),
|
|
prefs: Ember.inject.service(),
|
|
intl: Ember.inject.service(),
|
|
|
|
tags: Ember.computed.alias('projectController.tags'),
|
|
sortBy: 'name',
|
|
|
|
expandedInstances: null,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
this.set('expandedInstances',[]);
|
|
},
|
|
|
|
actions: {
|
|
toggleExpand(instId) {
|
|
let list = this.get('expandedInstances');
|
|
if ( list.includes(instId) ) {
|
|
list.removeObject(instId);
|
|
} else {
|
|
list.addObject(instId);
|
|
}
|
|
},
|
|
},
|
|
|
|
containerHeaders: containerHeaders,
|
|
headers: [
|
|
{
|
|
name: 'expand',
|
|
sort: false,
|
|
searchField: null,
|
|
width: 30
|
|
},
|
|
{
|
|
name: 'state',
|
|
sort: ['stack.isDefault:desc','stack.displayName','stateSort','displayName'],
|
|
searchField: 'displayState',
|
|
translationKey: 'generic.state',
|
|
width: 120
|
|
},
|
|
{
|
|
name: 'name',
|
|
sort: ['stack.isDefault:desc','stack.displayName','displayName','id'],
|
|
searchField: 'displayName',
|
|
translationKey: 'generic.name',
|
|
},
|
|
{
|
|
name: 'endpoints',
|
|
sort: null,
|
|
searchField: 'endpointPorts',
|
|
translationKey: 'stacksPage.table.endpoints',
|
|
},
|
|
{
|
|
name: 'image',
|
|
sort: ['stack.isDefault:desc','stack.displayName','displayImage','displayName'],
|
|
searchField: 'displayImage',
|
|
translationKey: 'generic.image',
|
|
},
|
|
{
|
|
name: 'scale',
|
|
sort: 'scale:desc',
|
|
searchField: null,
|
|
translationKey: 'stacksPage.table.scale',
|
|
width: 100
|
|
},
|
|
{
|
|
name: 'instanceState',
|
|
sort: ['stack.isDefault:desc','stack.displayName', 'instanceCountSort:desc','displayName'],
|
|
searchField: null,
|
|
width: 140,
|
|
icon: 'icon icon-lg icon-container',
|
|
dtTranslationKey: 'stacksPage.table.instanceState',
|
|
translationKey: 'stacksPage.table.instanceStateWithIcon',
|
|
},
|
|
],
|
|
|
|
filteredStacks: function() {
|
|
var needTags = tagsToArray(this.get('tags'));
|
|
var out = this.get('model.stacks');
|
|
|
|
if ( !this.get('prefs.showSystemResources') ) {
|
|
out = out.filterBy('system', false);
|
|
}
|
|
|
|
if ( needTags.length ) {
|
|
out = out.filter((obj) => obj.hasTags(needTags));
|
|
}
|
|
|
|
out = out.filter((obj) => obj.get('type').toLowerCase() !== 'kubernetesstack');
|
|
|
|
return out;
|
|
|
|
}.property('model.stacks.@each.{grouping,system}','tags','prefs.showSystemResources'),
|
|
|
|
instances: function() {
|
|
let out = [];
|
|
this.get('filteredStacks').forEach((stack) => {
|
|
out.pushObjects(stack.get('services').filter((x) => x.get('isReal') && !x.get('isBalancer')));
|
|
});
|
|
|
|
return out;
|
|
}.property('filteredStacks.@each.services'),
|
|
|
|
simpleMode: function() {
|
|
let all = this.get('filteredStacks');
|
|
if ( all.get('length') > 1 ) {
|
|
return false;
|
|
}
|
|
|
|
let stack = all.objectAt(0);
|
|
if ( stack.get('isDefault') ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}.property('filteredStacks.@each.name'),
|
|
});
|