467ee93b21
closes https://github.com/TryGhost/Ghost/issues/7420, requires https://github.com/TryGhost/Ghost/pull/7422 - adds a new `Invite` model with associated serializer and test setup - updates team screen to use invites rather than existing users with the "invited" property - updates signup process to work with new invite model - updates setup process to create invites instead of users - swaps usage of `gh-select-native` for `one-way-select` in the invite modal so that attributes can be set on the `select` element - updates resend invite process to account for server returning a new model - rewrites the invite management tests and fixes mirage mocks for invite endpoints - sorts invites by email address to avoid jumping invites when re-sending
51 lines
1.4 KiB
JavaScript
51 lines
1.4 KiB
JavaScript
import Model from 'ember-data/model';
|
|
import attr from 'ember-data/attr';
|
|
import {hasMany} from 'ember-data/relationships';
|
|
import computed from 'ember-computed';
|
|
import injectService from 'ember-service/inject';
|
|
|
|
export default Model.extend({
|
|
token: attr('string'),
|
|
email: attr('string'),
|
|
expires: attr('number'),
|
|
createdAtUTC: attr('moment-utc'),
|
|
createdBy: attr('number'),
|
|
updatedAtUTC: attr('moment-utc'),
|
|
updatedBy: attr('number'),
|
|
status: attr('string'),
|
|
roles: hasMany('role', {
|
|
embedded: 'always',
|
|
async: false
|
|
}),
|
|
|
|
ajax: injectService(),
|
|
ghostPaths: injectService(),
|
|
|
|
role: computed('roles', {
|
|
get() {
|
|
return this.get('roles.firstObject');
|
|
},
|
|
set(key, value) {
|
|
// Only one role per user, so remove any old data.
|
|
this.get('roles').clear();
|
|
this.get('roles').pushObject(value);
|
|
|
|
return value;
|
|
}
|
|
}),
|
|
|
|
resend() {
|
|
let fullInviteData = this.toJSON();
|
|
let inviteData = {
|
|
email: fullInviteData.email,
|
|
roles: fullInviteData.roles
|
|
};
|
|
let inviteUrl = this.get('ghostPaths.url').api('invites');
|
|
|
|
return this.get('ajax').post(inviteUrl, {
|
|
data: JSON.stringify({invites: [inviteData]}),
|
|
contentType: 'application/json'
|
|
});
|
|
}
|
|
});
|