@bennerinformatics/ember-fw-gc
Version:
A set of components, controllers, routes, and helpers used in all Group-Control managed FW App System applications
53 lines (48 loc) • 2.35 kB
JavaScript
import FWAdapter from '@bennerinformatics/ember-fw/adapters/fw';
import {inject} from '@ember/service';
import EmberError from '@ember/error';
import {isNone, isEmpty} from '@ember/utils';
/**
* Extension of the [base FW adapter](https://linformatics.bitbucket.io/docs/addons/client-api/ember-fw/classes/FwAdapter.html) for models that need to be fetched from a
* non-dependency app. The reason for the difference is that if it is a non-dependency app, you need to handle the possibility that that app is not currently installed on
* your current system, and use the model accordingly. This also means that you will need to define specifically the `appId` for the app this is the model of. This is used much
* less commonly than the FwAppAdapter, so it will have varied use cases (ie using Tally models in Substitutions or EmployeeDb models in Message Center). Again, your file will need to
* be named identically as the model you are copying, then you set up that adapter like this:
*
* ```js
* import OptionalAppAdapter from '@bennerinformatics/ember-fw-gc/adapters/fw-optional-app';
*
* export default OptionalAppAdapter.extend({
* appId: 'empdb'
* });
* ```
*
* Provided you have the model file setup right, it should now pull the data from the optional app instead of your base app.
*
* @class OptionalAppAdapter
* @extends FWAdapter
* @module Miscellaneous
*/
export default FWAdapter.extend({
/**
* ID of the app containing this model
* @type {string}
* @prop appId
*/
appMeta: inject(),
host: '',
// Override the base ajax function to add the app meta before any network requests are called
ajax(url, type, options) {
if (isNone(this.get('appId'))) {
throw new EmberError('Please define your appId within your model adapter!');
}
// this._super is undefined within the promise, so set parent to the super function and bind the current context
let parent = this._super.bind(this);
return this.get('appMeta').findMeta(this.get('appId')).then((meta) => {
if (isEmpty(meta)) {
throw new EmberError(`App ${this.get('appId')} not found!`);
}
return parent(`${meta.get('apiUrl')}${url}`, type, options);
});
}
});