Skip to content

Commit

Permalink
Refactor admin/address/route to use e-c
Browse files Browse the repository at this point in the history
This is the example I used in issue HospitalRun#969. It is illustrates how to use
ember-concurrency tasks in routes.
  • Loading branch information
sukima committed Mar 7, 2017
1 parent b6ebe1c commit d3269e3
Showing 1 changed file with 22 additions and 20 deletions.
42 changes: 22 additions & 20 deletions app/admin/address/route.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import AbstractEditRoute from 'hospitalrun/routes/abstract-edit-route';
import Ember from 'ember';
import { task } from 'ember-concurrency';
import { translationMacro as t } from 'ember-i18n';
import UnauthorizedError from 'hospitalrun/utils/unauthorized-error';

Expand All @@ -8,24 +8,26 @@ export default AbstractEditRoute.extend({
newTitle: t('admin.address.newTitle'),
editTitle: t('admin.address.editTitle'),
model() {
return new Ember.RSVP.Promise((resolve, reject) => {
this.get('store').find('option', 'address_options').then((addressOptions) => {
resolve(addressOptions);
}, (err) => {
if (err instanceof UnauthorizedError) {
reject(err);
} else {
let store = this.get('store');
let newConfig = store.push(store.normalize('option', {
id: 'address_options',
value: {
address1Label: this.get('i18n').t('admin.address.addressLabel'),
address1Include: true
}
}));
resolve(newConfig);
}
});
return this.get('fetchAddressOptions').perform();
},
fetchAddressOptions: task(function* () {
let store = this.get('store');
try {
return yield store.find('option', 'address_options');
} catch(err) {
if (err instanceof UnauthorizedError) {
throw err;
}
return store.push(this.get('defaultAddressOption'));
}
}).keepLatest().cancelOn('deactivate'),
defaultAddressOption: function() {
return this.get('store').normalize('option', {
id: 'address_options',
value: {
address1Label: this.get('i18n').t('admin.address.addressLabel'),
address1Include: true
}
});
}
}.property()
});

0 comments on commit d3269e3

Please sign in to comment.