mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-02 08:13:34 +03:00
49b86b466a
refs 6140a98351
This officially decouples the newsletter recipients from the post visibility allowing us to send emails to free members only.
72 lines
2.2 KiB
JavaScript
72 lines
2.2 KiB
JavaScript
import ModalComponent from 'ghost-admin/components/modal-base';
|
|
import {action} from '@ember/object';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency';
|
|
|
|
export default ModalComponent.extend({
|
|
session: service(),
|
|
store: service(),
|
|
|
|
errorMessage: null,
|
|
paidMemberCount: null,
|
|
freeMemberCount: null,
|
|
|
|
// Allowed actions
|
|
confirm: () => {},
|
|
|
|
countPaidMembers: action(function () {
|
|
// TODO: remove editor conditional once editors can query member counts
|
|
if (['free', 'paid'].includes(this.model.sendEmailWhenPublished) && !this.session.get('user.isEditor')) {
|
|
this.countPaidMembersTask.perform();
|
|
}
|
|
}),
|
|
|
|
countPaidMembersTask: task(function* () {
|
|
const result = yield this.store.query('member', {filter: 'subscribed:true', paid: true, limit: 1, page: 1});
|
|
this.set('paidMemberCount', result.meta.pagination.total);
|
|
const freeMemberCount = this.model.memberCount - result.meta.pagination.total;
|
|
this.set('freeMemberCount', freeMemberCount);
|
|
}),
|
|
|
|
confirmAndCheckErrorTask: task(function* () {
|
|
try {
|
|
yield this.confirm();
|
|
this.closeModal();
|
|
return true;
|
|
} catch (e) {
|
|
// switch to "failed" state if email fails
|
|
if (e && e.name === 'EmailFailedError') {
|
|
this.set('errorMessage', e.message);
|
|
return;
|
|
}
|
|
|
|
// close modal and continue with normal error handling if it was
|
|
// a non-email-related error
|
|
this.closeModal();
|
|
if (e) {
|
|
throw e;
|
|
}
|
|
}
|
|
}),
|
|
|
|
retryEmailTask: task(function* () {
|
|
try {
|
|
yield this.model.retryEmailSend();
|
|
this.closeModal();
|
|
return true;
|
|
} catch (e) {
|
|
// update "failed" state if email fails again
|
|
if (e && e.name === 'EmailFailedError') {
|
|
this.set('errorMessage', e.message);
|
|
return;
|
|
}
|
|
|
|
// TODO: test a non-email failure - maybe this needs to go through
|
|
// the notifications service
|
|
if (e) {
|
|
throw e;
|
|
}
|
|
}
|
|
})
|
|
});
|