2018-06-20 13:20:31 +09:30
|
|
|
import Page from './Page';
|
|
|
|
import FieldSet from '../../common/components/FieldSet';
|
|
|
|
import Button from '../../common/components/Button';
|
|
|
|
import Alert from '../../common/components/Alert';
|
2019-03-15 17:54:14 +01:00
|
|
|
import Select from '../../common/components/Select';
|
2019-03-19 09:56:20 +01:00
|
|
|
import LoadingIndicator from '../../common/components/LoadingIndicator';
|
2018-06-20 13:20:31 +09:30
|
|
|
import saveSettings from '../utils/saveSettings';
|
2016-04-16 12:04:54 -04:00
|
|
|
|
2016-04-23 09:19:02 -04:00
|
|
|
export default class MailPage extends Page {
|
2016-04-16 12:04:54 -04:00
|
|
|
init() {
|
|
|
|
super.init();
|
|
|
|
|
2019-03-19 09:56:20 +01:00
|
|
|
this.loading = true;
|
|
|
|
this.saving = false;
|
|
|
|
|
|
|
|
this.driverFields = {};
|
|
|
|
this.fields = ['mail_driver', 'mail_from'];
|
2016-04-16 12:04:54 -04:00
|
|
|
this.values = {};
|
|
|
|
|
2016-05-26 19:04:24 +09:30
|
|
|
const settings = app.data.settings;
|
2016-04-16 12:04:54 -04:00
|
|
|
this.fields.forEach(key => this.values[key] = m.prop(settings[key]));
|
2019-03-19 09:56:20 +01:00
|
|
|
|
|
|
|
app.request({
|
|
|
|
method: 'GET',
|
|
|
|
url: app.forum.attribute('apiUrl') + '/mail-drivers'
|
|
|
|
}).then(response => {
|
|
|
|
this.driverFields = response['data'].reduce(
|
|
|
|
(hash, driver) => ({...hash, [driver['id']]: driver['attributes']['fields']}),
|
|
|
|
{}
|
|
|
|
);
|
|
|
|
|
|
|
|
Object.keys(this.driverFields).flatMap(key => this.driverFields[key]).forEach(
|
|
|
|
key => {
|
|
|
|
this.fields.push(key);
|
|
|
|
this.values[key] = m.prop(settings[key]);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
this.loading = false;
|
|
|
|
m.redraw();
|
|
|
|
});
|
2016-04-16 12:04:54 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
view() {
|
2019-03-19 09:56:20 +01:00
|
|
|
if (this.loading) {
|
|
|
|
return (
|
|
|
|
<div className="MailPage">
|
|
|
|
<div className="container">
|
|
|
|
<LoadingIndicator />
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
2016-04-16 12:04:54 -04:00
|
|
|
return (
|
2016-04-23 09:19:02 -04:00
|
|
|
<div className="MailPage">
|
2016-04-16 12:04:54 -04:00
|
|
|
<div className="container">
|
|
|
|
<form onsubmit={this.onsubmit.bind(this)}>
|
2016-05-15 20:46:58 +09:00
|
|
|
<h2>{app.translator.trans('core.admin.email.heading')}</h2>
|
2016-05-15 20:28:05 +09:00
|
|
|
<div className="helpText">
|
|
|
|
{app.translator.trans('core.admin.email.text')}
|
|
|
|
</div>
|
|
|
|
|
2016-04-16 12:04:54 -04:00
|
|
|
{FieldSet.component({
|
2019-03-15 17:54:14 +01:00
|
|
|
label: app.translator.trans('core.admin.email.addresses_heading'),
|
2016-04-23 09:19:02 -04:00
|
|
|
className: 'MailPage-MailSettings',
|
2016-04-16 12:04:54 -04:00
|
|
|
children: [
|
2016-04-23 09:19:02 -04:00
|
|
|
<div className="MailPage-MailSettings-input">
|
2019-03-15 17:54:14 +01:00
|
|
|
<label>{app.translator.trans('core.admin.email.from_label')}</label>
|
|
|
|
<input className="FormControl" value={this.values.mail_from() || ''} oninput={m.withAttr('value', this.values.mail_from)} />
|
2016-05-15 20:28:05 +09:00
|
|
|
</div>
|
|
|
|
]
|
|
|
|
})}
|
|
|
|
|
|
|
|
{FieldSet.component({
|
2019-03-15 17:54:14 +01:00
|
|
|
label: app.translator.trans('core.admin.email.driver_heading'),
|
2016-05-15 20:28:05 +09:00
|
|
|
className: 'MailPage-MailSettings',
|
|
|
|
children: [
|
|
|
|
<div className="MailPage-MailSettings-input">
|
2019-03-15 17:54:14 +01:00
|
|
|
<label>{app.translator.trans('core.admin.email.driver_label')}</label>
|
|
|
|
<Select value={this.values.mail_driver()} options={Object.keys(this.driverFields).reduce((memo, val) => ({...memo, [val]: val}), {})} onchange={this.values.mail_driver} />
|
2016-05-15 20:28:05 +09:00
|
|
|
</div>
|
|
|
|
]
|
|
|
|
})}
|
|
|
|
|
2019-03-19 09:56:20 +01:00
|
|
|
{Object.keys(this.driverFields[this.values.mail_driver()]).length > 0 && FieldSet.component({
|
|
|
|
label: app.translator.trans(`core.admin.email.${this.values.mail_driver()}_heading`),
|
2016-05-15 20:28:05 +09:00
|
|
|
className: 'MailPage-MailSettings',
|
|
|
|
children: [
|
|
|
|
<div className="MailPage-MailSettings-input">
|
2019-03-19 09:56:20 +01:00
|
|
|
{this.driverFields[this.values.mail_driver()].flatMap(field => [
|
|
|
|
<label>{app.translator.trans(`core.admin.email.${field}_label`)}</label>,
|
2019-03-20 22:02:06 +01:00
|
|
|
<input className="FormControl" value={this.values[field]() || ''} oninput={m.withAttr('value', this.values[field])} />
|
2019-03-19 09:56:20 +01:00
|
|
|
])}
|
2016-04-16 12:04:54 -04:00
|
|
|
</div>
|
|
|
|
]
|
|
|
|
})}
|
|
|
|
|
|
|
|
{Button.component({
|
|
|
|
type: 'submit',
|
|
|
|
className: 'Button Button--primary',
|
2016-05-15 12:08:11 +09:00
|
|
|
children: app.translator.trans('core.admin.email.submit_button'),
|
2019-03-19 09:56:20 +01:00
|
|
|
loading: this.saving,
|
2016-04-16 12:04:54 -04:00
|
|
|
disabled: !this.changed()
|
|
|
|
})}
|
|
|
|
</form>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
|
|
|
changed() {
|
2016-05-26 19:04:24 +09:30
|
|
|
return this.fields.some(key => this.values[key]() !== app.data.settings[key]);
|
2016-04-16 12:04:54 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
onsubmit(e) {
|
|
|
|
e.preventDefault();
|
|
|
|
|
2019-03-19 09:56:20 +01:00
|
|
|
if (this.saving) return;
|
2016-04-16 12:04:54 -04:00
|
|
|
|
2019-03-19 09:56:20 +01:00
|
|
|
this.saving = true;
|
2016-04-16 12:04:54 -04:00
|
|
|
app.alerts.dismiss(this.successAlert);
|
|
|
|
|
|
|
|
const settings = {};
|
|
|
|
|
|
|
|
this.fields.forEach(key => settings[key] = this.values[key]());
|
|
|
|
|
|
|
|
saveSettings(settings)
|
|
|
|
.then(() => {
|
|
|
|
app.alerts.show(this.successAlert = new Alert({type: 'success', children: app.translator.trans('core.admin.basics.saved_message')}));
|
|
|
|
})
|
|
|
|
.catch(() => {})
|
|
|
|
.then(() => {
|
2019-03-19 09:56:20 +01:00
|
|
|
this.saving = false;
|
2016-04-16 12:04:54 -04:00
|
|
|
m.redraw();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|