mirror of https://github.com/rancher/ui.git
110 lines
2.9 KiB
JavaScript
110 lines
2.9 KiB
JavaScript
import { isArray } from '@ember/array';
|
|
import { inject as service } from '@ember/service';
|
|
import Component from '@ember/component';
|
|
import layout from './template';
|
|
import { get, computed, observer } from '@ember/object';
|
|
|
|
export default Component.extend({
|
|
allWorkloads: service(),
|
|
|
|
layout,
|
|
selected: null, // Selected workload ID
|
|
selectClass: 'form-control',
|
|
withPods: false,
|
|
readOnly: false,
|
|
editing: true,
|
|
exclude: null, // ID or array of IDs to exclude from list
|
|
selectedNamespace: null,
|
|
// For use as a catalog question
|
|
field: null, // Read default from a schema resourceField
|
|
value: null, // namespace/workloadName string output
|
|
|
|
// For other abuses
|
|
obj: null,
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
if ( this.get('obj') ) {
|
|
this.set('selected', this.get('obj.id'));
|
|
}
|
|
|
|
let def = this.get('field.default');
|
|
|
|
if ( def && !this.get('selected') ) {
|
|
var exact, justWorkload;
|
|
|
|
this.get('allWorkloads.list').forEach((entry) => {
|
|
if ( def === entry.value ) {
|
|
exact = entry.id;
|
|
} else if ( def === entry.name ) {
|
|
justWorkload = entry.id;
|
|
}
|
|
});
|
|
|
|
this.set('selected', exact || justWorkload || null);
|
|
}
|
|
},
|
|
|
|
selectedChanged: observer('selected', function() {
|
|
let id = this.get('selected');
|
|
let str = null;
|
|
let workload = null;
|
|
|
|
if ( id ) {
|
|
workload = this.get('allWorkloads').byId(id);
|
|
if ( workload ) {
|
|
str = `${ workload.get('namespace.name') }/${ workload.get('name') }`;
|
|
}
|
|
}
|
|
|
|
this.set('value', str);
|
|
this.set('obj', workload);
|
|
}),
|
|
|
|
grouped: computed('allWorkloads.list.[]', 'exclude', 'selected', 'selectedNamespace.id', function() {
|
|
let list = this.get('allWorkloads.list');
|
|
|
|
let exclude = this.get('exclude');
|
|
|
|
if ( exclude ) {
|
|
if ( !isArray(exclude) ) {
|
|
exclude = [exclude];
|
|
}
|
|
|
|
list = list.filter((x) => !exclude.includes(x.id));
|
|
}
|
|
|
|
if (this.get('selectedNamespace')) {
|
|
list = list.filter((x) => x.stackName === this.get('selectedNamespace.id'));
|
|
}
|
|
|
|
let out = this.get('allWorkloads').group(list);
|
|
let selected = this.get('allWorkloads').byId(this.get('selected'));
|
|
|
|
if ( selected && !list.findBy('id', selected.get('id')) ) {
|
|
out['(Selected)'] = [{
|
|
id: selected.get('id'),
|
|
name: selected.get('displayName'),
|
|
kind: selected.get('type'),
|
|
obj: selected,
|
|
}];
|
|
}
|
|
|
|
return out;
|
|
}),
|
|
|
|
readableWorkload: computed('selected', function() {
|
|
const { selected, selectedNamespace } = this;
|
|
const workload = get(selectedNamespace, 'workloads').findBy('id', selected);
|
|
|
|
let out = 'N/A';
|
|
|
|
if (workload) {
|
|
out = get(workload, 'displayName');
|
|
}
|
|
|
|
return out;
|
|
}),
|
|
});
|