From d7375aab1aa113cf9a7f65404a7a0e4fddf8a44b Mon Sep 17 00:00:00 2001 From: Kevin Ansfield Date: Mon, 14 Jan 2019 17:01:30 +0000 Subject: [PATCH] Fixed missing invite role name on team screen no issue - removed the rename of `role_id` to `role` in the invite serialiser to let Ember Data do it's thing with the `invite.role` relationship - added a guard to the team screen background reloading to ensure that role data is present in the store before loading invites so that Ember Data doesn't trigger unnecessary requests to find missing relationship data --- ghost/admin/app/controllers/team/index.js | 16 ++++++++++------ ghost/admin/app/models/invite.js | 2 +- ghost/admin/app/serializers/invite.js | 1 - 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/ghost/admin/app/controllers/team/index.js b/ghost/admin/app/controllers/team/index.js index 78eabc8f07..e0791844e1 100644 --- a/ghost/admin/app/controllers/team/index.js +++ b/ghost/admin/app/controllers/team/index.js @@ -60,10 +60,9 @@ export default Controller.extend({ backgroundUpdate: task(function* () { let users = this.fetchUsers.perform(); let invites = this.fetchInvites.perform(); - let roles = this.fetchRoles.perform(); try { - yield RSVP.all([users, invites, roles]); + yield RSVP.all([users, invites]); } catch (error) { this.send('error', error); } @@ -78,10 +77,15 @@ export default Controller.extend({ return; } - return yield this.store.query('invite', {limit: 'all'}); - }), + // ensure roles are loaded before invites. Invites do not have embedded + // role records which means Ember Data will try to fetch the roles + // automatically when invite.role is queried, loading roles first makes + // them available in memory and cuts down on network noise + let knownRoles = this.store.peekAll('role'); + if (knownRoles.length <= 1) { + yield this.store.query('role', {limit: 'all'}); + } - fetchRoles: task(function* () { - return yield this.store.findAll('role'); + return yield this.store.query('invite', {limit: 'all'}); }) }); diff --git a/ghost/admin/app/models/invite.js b/ghost/admin/app/models/invite.js index 5e71cbff15..b501ba79ba 100644 --- a/ghost/admin/app/models/invite.js +++ b/ghost/admin/app/models/invite.js @@ -1,4 +1,3 @@ -/* eslint camelcase: [2, {properties: "never"}] */ import Model from 'ember-data/model'; import attr from 'ember-data/attr'; import {belongsTo} from 'ember-data/relationships'; @@ -13,6 +12,7 @@ export default Model.extend({ updatedAtUTC: attr('moment-utc'), updatedBy: attr('number'), status: attr('string'), + role: belongsTo('role', {async: false}), ajax: service(), diff --git a/ghost/admin/app/serializers/invite.js b/ghost/admin/app/serializers/invite.js index 01f53fbf81..7eee8e40a4 100644 --- a/ghost/admin/app/serializers/invite.js +++ b/ghost/admin/app/serializers/invite.js @@ -2,7 +2,6 @@ import ApplicationSerializer from 'ghost-admin/serializers/application'; export default ApplicationSerializer.extend({ attrs: { - role: {key: 'role_id'}, createdAtUTC: {key: 'created_at'}, updatedAtUTC: {key: 'updated_at'} }