72 lines
1.7 KiB
JavaScript
72 lines
1.7 KiB
JavaScript
import Model from '@ember-data/model';
|
|
import { belongsTo } from '@ember-data/model';
|
|
import { computed } from '@ember/object';
|
|
|
|
export default class BaseModel extends Model {
|
|
|
|
// =relationships
|
|
|
|
/**
|
|
* Scope of this resource, if any.
|
|
* @type {ScopeModel}
|
|
*/
|
|
@belongsTo('scope', {async: false, inverse: false}) scope;
|
|
|
|
// =attributes
|
|
|
|
/**
|
|
* Names are optional on models in our API. Thus we need to fallback on ID
|
|
* for display purposes.
|
|
* @type {string}
|
|
*/
|
|
@computed('name', 'id')
|
|
get displayName() {
|
|
return this.name || this.id;
|
|
}
|
|
|
|
/**
|
|
* @type {boolean}
|
|
*/
|
|
@computed('hasDirtyAttributes', 'isSaving')
|
|
get canSave() {
|
|
return this.hasDirtyAttributes && !this.isSaving;
|
|
}
|
|
|
|
/**
|
|
* @type {boolean}
|
|
*/
|
|
@computed('canSave')
|
|
get cannotSave() {
|
|
return !this.canSave;
|
|
}
|
|
|
|
// =methods
|
|
|
|
/**
|
|
* If this model instance has a related scope, the scope's ID will be passed
|
|
* via `adapterOptions.scope_id` automatically. End users may optionally
|
|
* pass a custom scope ID to override.
|
|
*
|
|
* @example
|
|
* model.save(); // passes the model's current scope ID
|
|
* model.save({adapterOptions: {scope_id: 'global'}}); // override scope ID
|
|
*
|
|
* End users may specify a _custom method_ via `adapterOptions.method`.
|
|
* Custom methods are appended to the record's URL by the adapter.
|
|
*
|
|
* @example
|
|
* // Results in a URL: `/v1/model-name/id:my-custom-method`
|
|
* model.save({adapterOptions: {method: 'my-custom-method'}});
|
|
*
|
|
* @return {Promise}
|
|
*/
|
|
save(options={adapterOptions: {}}) {
|
|
const scopeID = this.belongsTo('scope').id();
|
|
if (scopeID && !options.adapterOptions.scope_id) {
|
|
options.adapterOptions.scope_id = scopeID;
|
|
}
|
|
return super.save(options);
|
|
}
|
|
|
|
}
|