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 8, 2017
1 parent b6ebe1c commit ec20d71
Showing 1 changed file with 28 additions and 20 deletions.
48 changes: 28 additions & 20 deletions app/admin/address/route.js
Original file line number Diff line number Diff line change
@@ -1,31 +1,39 @@
import AbstractEditRoute from 'hospitalrun/routes/abstract-edit-route';
import Ember from 'ember';
import AbstractEditRoute from 'hospitalrun/routes/abstract-edit-route';
import { task } from 'ember-concurrency';
import { translationMacro as t } from 'ember-i18n';
import UnauthorizedError from 'hospitalrun/utils/unauthorized-error';

const { computed } = Ember;

export default AbstractEditRoute.extend({
hideNewButton: true,
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: computed(function() {
return this.get('store').normalize('option', {
id: 'address_options',
value: {
address1Label: this.get('i18n').t('admin.address.addressLabel'),
address1Include: true
}
});
}
})
});

0 comments on commit ec20d71

Please sign in to comment.