mirror of https://github.com/rancher/ui.git
147 lines
3.8 KiB
JavaScript
147 lines
3.8 KiB
JavaScript
import { next } from '@ember/runloop';
|
|
import { alias } from '@ember/object/computed';
|
|
import { inject as service } from '@ember/service';
|
|
import Mixin from '@ember/object/mixin';
|
|
import NewOrEdit from 'shared/mixins/new-or-edit';
|
|
import ManageLabels from 'shared/mixins/manage-labels';
|
|
import { addAction } from 'ui/utils/add-view-action';
|
|
import { get, set, computed } from '@ember/object';
|
|
import { ucFirst } from 'shared/utils/util';
|
|
|
|
// Map of driverName -> [string | function]
|
|
// If string, the given field is retrieved
|
|
// If function, the function is executed with the template as "this"
|
|
// Custom UIs should call registerDisplay{Size|Location} to register new entries.
|
|
const DISPLAY_LOCATIONS = {
|
|
aliyunecs: function() {
|
|
return get(this, 'config.region') + get(this, 'config.zone');
|
|
},
|
|
amazonec2: function() {
|
|
return get(this, 'config.region') + get(this, 'config.zone');
|
|
},
|
|
digitalocean: 'config.region',
|
|
exoscale: null,
|
|
packet: 'config.facilityCode',
|
|
rackspace: 'config.region',
|
|
vmwarevsphere: null,
|
|
}
|
|
|
|
const DISPLAY_SIZES = {
|
|
aliyunecs: 'config.instanceType',
|
|
amazonec2: 'config.instanceType',
|
|
digitalocean: 'config.size',
|
|
exoscale: 'config.instanceProfile',
|
|
packet: 'config.plan',
|
|
rackspace: 'config.flavorId',
|
|
|
|
vmwarevsphere: function() {
|
|
return get(this,'config.memorySize') +' GiB, '+ get(this, 'config.cpuCount') + ' Core';
|
|
},
|
|
}
|
|
|
|
|
|
export function getDisplayLocation(driver) {
|
|
return DISPLAY_LOCATIONS[driver];
|
|
}
|
|
|
|
export function getDisplaySize(driver) {
|
|
return DISPLAY_SIZES[driver];
|
|
}
|
|
|
|
export function registerDisplayLocation(driver, keyOrFn) {
|
|
DISPLAY_LOCATIONS[driver] = keyOrFn;
|
|
}
|
|
|
|
export function registerDisplaySize(driver, keyOrFn) {
|
|
DISPLAY_SIZES[driver] = keyOrFn;
|
|
}
|
|
|
|
export default Mixin.create(NewOrEdit, ManageLabels, {
|
|
intl: service(),
|
|
scope: service(),
|
|
settings: service(),
|
|
router: service(),
|
|
globalStore: service(),
|
|
|
|
driverName: null,
|
|
showEngineUrl: true, // On some drivers this isn't configurable
|
|
|
|
model: null,
|
|
labelResource: alias('model'),
|
|
|
|
actions: {
|
|
addLabel: addAction('addLabel', '.key'),
|
|
|
|
setLabels(labels) {
|
|
let out = {};
|
|
labels.forEach((row) => {
|
|
out[row.key] = row.value;
|
|
});
|
|
|
|
set(this, 'labelResource.labels', out);
|
|
},
|
|
|
|
cancel() {
|
|
this.sendAction('close');
|
|
}
|
|
},
|
|
|
|
init() {
|
|
this._super(...arguments);
|
|
|
|
if ( !get(this, 'editing') && typeof get(this, 'bootstrap') === 'function') {
|
|
this.bootstrap();
|
|
}
|
|
|
|
set(this,'model.namespaceId', 'fixme'); // @TODO-2.0
|
|
},
|
|
|
|
bootstrap() {
|
|
// Populate the appropriate *Config field with defaults for your driver
|
|
},
|
|
|
|
driverOptionsTitle: computed('driverName','intl.locale', function() {
|
|
const intl = get(this, 'intl');
|
|
const driver = get(this, 'driverName');
|
|
const key = `nodeDriver.displayName.${driver}`;
|
|
let name = ucFirst(driver);
|
|
if ( intl.exists(key) ) {
|
|
name = intl.t(key);
|
|
}
|
|
|
|
return intl.t('nodeDriver.driverOptions', {driver: name});
|
|
}),
|
|
|
|
templateOptionsTitle: computed('settings.appName','intl.locale', function() {
|
|
const intl = get(this, 'intl');
|
|
const appName = get(this, 'settings.appName');
|
|
return intl.t('nodeDriver.templateOptions', {appName});
|
|
}),
|
|
|
|
didInsertElement() {
|
|
this._super();
|
|
|
|
next(() => {
|
|
try {
|
|
const input = this.$('INPUT')[0];
|
|
if ( input ) {
|
|
input.focus();
|
|
}
|
|
}
|
|
catch(e) {}
|
|
});
|
|
},
|
|
|
|
willSave() {
|
|
get(this,'model').clearConfigsExcept(get(this,'driverName')+'Config');
|
|
return this._super(...arguments);
|
|
},
|
|
|
|
doneSaving() {
|
|
// This triggers nodetemplates to recompute the display size/location
|
|
get(this, 'model').notifyPropertyChange('config');
|
|
this.sendAction('saved');
|
|
this.sendAction('close');
|
|
},
|
|
});
|