mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-02 08:13:34 +03:00
c10f8d014a
no issue - allows for easier development because modal stays open when refreshing as UI state is stored in the URL
91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
import Controller from '@ember/controller';
|
|
import {action} from '@ember/object';
|
|
import {inject as service} from '@ember/service';
|
|
import {task} from 'ember-concurrency-decorators';
|
|
import {tracked} from '@glimmer/tracking';
|
|
|
|
export default class MembersEmailController extends Controller {
|
|
@service config;
|
|
@service session;
|
|
@service settings;
|
|
|
|
queryParams = ['emailRecipientsOpen', 'showEmailDesignSettings']
|
|
|
|
// from/supportAddress are set here so that they can be reset to saved values on save
|
|
// to avoid it looking like they've been saved when they have a separate update process
|
|
@tracked fromAddress = '';
|
|
@tracked supportAddress = '';
|
|
|
|
@tracked showEmailDesignSettings = false;
|
|
@tracked emailRecipientsOpen = false;
|
|
@tracked showLeaveSettingsModal = false;
|
|
|
|
@action
|
|
setEmailAddress(property, email) {
|
|
this[property] = email;
|
|
}
|
|
|
|
@action
|
|
toggleEmailDesignSettings() {
|
|
this.showEmailDesignSettings = !this.showEmailDesignSettings;
|
|
}
|
|
|
|
@action
|
|
toggleEmailRecipientsOpen() {
|
|
this.emailRecipientsOpen = !this.emailRecipientsOpen;
|
|
}
|
|
|
|
leaveRoute(transition) {
|
|
if (this.settings.get('hasDirtyAttributes')) {
|
|
transition.abort();
|
|
this.leaveSettingsTransition = transition;
|
|
this.showLeaveSettingsModal = true;
|
|
}
|
|
this.showEmailDesignSettings = false;
|
|
}
|
|
|
|
@action
|
|
async confirmLeave() {
|
|
this.settings.rollbackAttributes();
|
|
this.showLeaveSettingsModal = false;
|
|
this.leaveSettingsTransition.retry();
|
|
}
|
|
|
|
@action
|
|
cancelLeave() {
|
|
this.showLeaveSettingsModal = false;
|
|
this.leaveSettingsTransition = null;
|
|
}
|
|
|
|
get blogDomain() {
|
|
let blogDomain = this.config.blogDomain || '';
|
|
const domainExp = blogDomain.replace('https://', '').replace('http://', '').match(new RegExp('^([^/:?#]+)(?:[/:?#]|$)', 'i'));
|
|
const domain = (domainExp && domainExp[1]) || '';
|
|
if (domain.startsWith('www.')) {
|
|
return domain.replace(/^(www)\.(?=[^/]*\..{2,5})/, '');
|
|
}
|
|
return domain;
|
|
}
|
|
|
|
parseEmailAddress(address) {
|
|
const emailAddress = address || 'noreply';
|
|
// Adds default domain as site domain
|
|
if (emailAddress.indexOf('@') < 0 && this.blogDomain) {
|
|
return `${emailAddress}@${this.blogDomain}`;
|
|
}
|
|
return emailAddress;
|
|
}
|
|
|
|
resetEmailAddresses() {
|
|
this.fromAddress = this.parseEmailAddress(this.settings.get('membersFromAddress'));
|
|
this.supportAddress = this.parseEmailAddress(this.settings.get('membersSupportAddress'));
|
|
}
|
|
|
|
@task({drop: true})
|
|
*saveSettings() {
|
|
const response = yield this.settings.save();
|
|
this.resetEmailAddresses();
|
|
return response;
|
|
}
|
|
}
|