diff --git a/ui/app/adapters/application.js b/ui/app/adapters/application.js index ee7dd063a..96837c027 100644 --- a/ui/app/adapters/application.js +++ b/ui/app/adapters/application.js @@ -1,5 +1,6 @@ import Ember from 'ember'; import RESTAdapter from 'ember-data/adapters/rest'; +import codesForError from '../utils/codes-for-error'; const { get, computed, inject } = Ember; @@ -21,8 +22,12 @@ export default RESTAdapter.extend({ findAll() { return this._super(...arguments).catch(error => { - if (error.code === '501' || (error.errors && error.errors.findBy('status', '501'))) { - // Feature is not implemented in this version of Nomad + const errorCodes = codesForError(error); + + const isNotAuthorized = errorCodes.includes('403'); + const isNotImplemented = errorCodes.includes('501'); + + if (isNotAuthorized || isNotImplemented) { return []; } diff --git a/ui/app/controllers/application.js b/ui/app/controllers/application.js index de9b23684..f577ec54e 100644 --- a/ui/app/controllers/application.js +++ b/ui/app/controllers/application.js @@ -1,4 +1,5 @@ import Ember from 'ember'; +import codesForError from '../utils/codes-for-error'; const { Controller, computed, inject, run, observer } = Ember; @@ -12,19 +13,7 @@ export default Controller.extend({ }), errorCodes: computed('error', function() { - const error = this.get('error'); - const codes = [error.code]; - - if (error.errors) { - error.errors.forEach(err => { - codes.push(err.status); - }); - } - - return codes - .compact() - .uniq() - .map(code => '' + code); + return codesForError(this.get('error')); }), is403: computed('errorCodes.[]', function() { diff --git a/ui/app/utils/codes-for-error.js b/ui/app/utils/codes-for-error.js new file mode 100644 index 000000000..199290fa6 --- /dev/null +++ b/ui/app/utils/codes-for-error.js @@ -0,0 +1,15 @@ +// Returns an array of error codes as strings for an Ember error object +export default function codesForError(error) { + const codes = [error.code]; + + if (error.errors) { + error.errors.forEach(err => { + codes.push(err.status); + }); + } + + return codes + .compact() + .uniq() + .map(code => '' + code); +}