diff --git a/core/client/app/mixins/pagination-route.js b/core/client/app/mixins/pagination.js similarity index 78% rename from core/client/app/mixins/pagination-route.js rename to core/client/app/mixins/pagination.js index 327a05a75c..3479277c78 100644 --- a/core/client/app/mixins/pagination-route.js +++ b/core/client/app/mixins/pagination.js @@ -3,6 +3,7 @@ import getRequestErrorMessage from 'ghost/utils/ajax'; const { Mixin, + computed, inject: {service} } = Ember; @@ -16,7 +17,20 @@ export default Mixin.create({ paginationModel: null, paginationSettings: null, - paginationMeta: null, + + // add a hook so that routes/controllers can do something with the meta data + paginationMeta: computed({ + get() { + return this._paginationMeta; + }, + set(key, value) { + if (this.didReceivePaginationMeta) { + this.didReceivePaginationMeta(value); + } + this._paginationMeta = value; + return value; + } + }), init() { let paginationSettings = this.get('paginationSettings'); @@ -51,11 +65,15 @@ export default Mixin.create({ paginationSettings.page = 1; + this.set('isLoading', true); + return this.get('store').query(modelName, paginationSettings).then((results) => { this.set('paginationMeta', results.meta); return results; - }, (response) => { + }).catch((response) => { this.reportLoadError(response); + }).finally(() => { + this.set('isLoading', false); }); }, @@ -79,12 +97,13 @@ export default Mixin.create({ this.set('isLoading', true); this.set('paginationSettings.page', nextPage); - store.query(modelName, paginationSettings).then((results) => { - this.set('isLoading', false); + return store.query(modelName, paginationSettings).then((results) => { this.set('paginationMeta', results.meta); return results; - }, (response) => { + }).catch((response) => { this.reportLoadError(response); + }).finally(() => { + this.set('isLoading', false); }); } }, diff --git a/core/client/app/routes/posts.js b/core/client/app/routes/posts.js index 019b915350..5edfb161a2 100644 --- a/core/client/app/routes/posts.js +++ b/core/client/app/routes/posts.js @@ -1,9 +1,9 @@ import Ember from 'ember'; import AuthenticatedRoute from 'ghost/routes/authenticated'; import ShortcutsRoute from 'ghost/mixins/shortcuts-route'; -import PaginationRouteMixin from 'ghost/mixins/pagination-route'; +import PaginationMixin from 'ghost/mixins/pagination'; -export default AuthenticatedRoute.extend(ShortcutsRoute, PaginationRouteMixin, { +export default AuthenticatedRoute.extend(ShortcutsRoute, PaginationMixin, { titleToken: 'Content', paginationModel: 'post', diff --git a/core/client/app/routes/settings/tags.js b/core/client/app/routes/settings/tags.js index a4b19f55bd..58fdaec991 100644 --- a/core/client/app/routes/settings/tags.js +++ b/core/client/app/routes/settings/tags.js @@ -3,9 +3,9 @@ import Ember from 'ember'; import AuthenticatedRoute from 'ghost/routes/authenticated'; import CurrentUserSettings from 'ghost/mixins/current-user-settings'; import ShortcutsRoute from 'ghost/mixins/shortcuts-route'; -import PaginationRoute from 'ghost/mixins/pagination-route'; +import PaginationMixin from 'ghost/mixins/pagination'; -export default AuthenticatedRoute.extend(CurrentUserSettings, PaginationRoute, ShortcutsRoute, { +export default AuthenticatedRoute.extend(CurrentUserSettings, PaginationMixin, ShortcutsRoute, { titleToken: 'Settings - Tags', paginationModel: 'tag', diff --git a/core/client/app/routes/team/index.js b/core/client/app/routes/team/index.js index d527b27e8f..f96514b8ba 100644 --- a/core/client/app/routes/team/index.js +++ b/core/client/app/routes/team/index.js @@ -1,9 +1,9 @@ import AuthenticatedRoute from 'ghost/routes/authenticated'; import CurrentUserSettings from 'ghost/mixins/current-user-settings'; -import PaginationRouteMixin from 'ghost/mixins/pagination-route'; +import PaginationMixin from 'ghost/mixins/pagination'; import styleBody from 'ghost/mixins/style-body'; -export default AuthenticatedRoute.extend(styleBody, CurrentUserSettings, PaginationRouteMixin, { +export default AuthenticatedRoute.extend(styleBody, CurrentUserSettings, PaginationMixin, { titleToken: 'Team', classNames: ['view-team'],