ui/app/models/nodetemplate.js

94 lines
2.3 KiB
JavaScript

import Resource from 'ember-api-store/models/resource';
import { get, set, computed } from '@ember/object';
import { inject as service } from '@ember/service';
import { ucFirst } from 'shared/utils/util';
import { getDisplayLocation, getDisplaySize } from 'shared/mixins/node-driver';
export default Resource.extend({
intl: service(),
modalService: service('modal'),
type: 'nodeTemplate',
canClone: true,
config: computed('driver', function() {
const driver = get(this, 'driver');
return get(this, `${ driver }Config`);
}),
displayProvider: computed('driver', 'intl.locale', function() {
const intl = get(this, 'intl');
const driver = get(this, 'driver');
const key = `nodeDriver.displayName.${ driver }`;
if ( intl.exists(key) ) {
return intl.t(key);
} else {
return ucFirst(driver);
}
}),
displaySize: computed('config', function() {
const driver = get(this, 'driver');
return this._displayVar(getDisplaySize(driver));
}).volatile(),
displayLocation: computed(function() {
const driver = get(this, 'driver');
return this._displayVar(getDisplayLocation(driver));
}).volatile(),
actions: {
edit() {
let driver = get(this, 'driver');
get(this, 'modalService').toggleModal('modal-edit-node-template', {
driver,
config: get(this, `${ driver }Config`),
nodeTemplate: this,
});
},
clone() {
const clone = this.cloneForNew();
const driver = get(this, 'driver');
get(this, 'modalService').toggleModal('modal-edit-node-template', {
driver,
config: get(this, `${ driver }Config`),
nodeTemplate: clone,
});
}
},
_displayVar(keyOrFn) {
const intl = get(this, 'intl');
if ( keyOrFn ) {
if ( typeof (keyOrFn) === 'function' ) {
return keyOrFn.call(this);
} else {
return get(this, keyOrFn);
}
} else {
return intl.t('generic.unknown');
}
},
clearConfigsExcept(keep) {
const keys = this.allKeys().filter((x) => x.endsWith('Config'));
for ( let key, i = 0 ; i < keys.length ; i++ ) {
key = keys[i];
if ( key !== keep && get(this, key) ) {
set(this, key, null);
}
}
},
});