diff --git a/app/admin/address/route.js b/app/admin/address/route.js index f1fe6c8dcd..17a5b15a77 100644 --- a/app/admin/address/route.js +++ b/app/admin/address/route.js @@ -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 + } }); - } + }) });