diff --git a/js/src/admin/components/MailPage.js b/js/src/admin/components/MailPage.js index 6a7b41e62..fb3350dbf 100644 --- a/js/src/admin/components/MailPage.js +++ b/js/src/admin/components/MailPage.js @@ -10,24 +10,28 @@ export default class MailPage extends Page { init() { super.init(); - this.loading = true; this.saving = false; + this.refresh(); + } + + refresh() { + this.loading = true; this.driverFields = {}; this.fields = ['mail_driver', 'mail_from']; this.values = {}; + this.status = {sending: false, errors: {}}; const settings = app.data.settings; this.fields.forEach(key => this.values[key] = m.prop(settings[key])); app.request({ method: 'GET', - url: app.forum.attribute('apiUrl') + '/mail-drivers' + url: app.forum.attribute('apiUrl') + '/mail-settings' }).then(response => { - this.driverFields = response['data'].reduce( - (hash, driver) => ({...hash, [driver['id']]: driver['attributes']['fields']}), - {} - ); + this.driverFields = response['data']['attributes']['fields']; + this.status.sending = response['data']['attributes']['sending']; + this.status.errors = response['data']['attributes']['errors']; for (const driver in this.driverFields) { for (const field in this.driverFields[driver]) { @@ -42,7 +46,7 @@ export default class MailPage extends Page { } view() { - if (this.loading) { + if (this.loading || this.saving) { return (
@@ -52,6 +56,9 @@ export default class MailPage extends Page { ); } + const fields = this.driverFields[this.values.mail_driver()]; + const fieldKeys = Object.keys(fields); + return (
@@ -66,8 +73,10 @@ export default class MailPage extends Page { className: 'MailPage-MailSettings', children: [
- - +
] })} @@ -77,20 +86,30 @@ export default class MailPage extends Page { className: 'MailPage-MailSettings', children: [
- - ({...memo, [val]: val}), {})} onchange={this.values.mail_driver} /> +
] })} - {Object.keys(this.driverFields[this.values.mail_driver()]).length > 0 && FieldSet.component({ + {this.status.sending || Alert.component({ + children: app.translator.trans('core.admin.email.not_sending_message'), + dismissible: false, + })} + + {fieldKeys.length > 0 && FieldSet.component({ label: app.translator.trans(`core.admin.email.${this.values.mail_driver()}_heading`), className: 'MailPage-MailSettings', children: [
- {Object.keys(this.driverFields[this.values.mail_driver()]).map(field => [ - , - this.renderField(field), + {fieldKeys.map(field => [ + , + this.status.errors[field] &&

{this.status.errors[field]}

, ])}
] @@ -100,7 +119,6 @@ export default class MailPage extends Page { type: 'submit', className: 'Button Button--primary', children: app.translator.trans('core.admin.email.submit_button'), - loading: this.saving, disabled: !this.changed() })} @@ -115,7 +133,7 @@ export default class MailPage extends Page { const prop = this.values[name]; if (typeof field === 'string') { - return ; + return ; } else { return