From 77eefc85c6b9fff5482bd804ce139c6ad41aecd7 Mon Sep 17 00:00:00 2001 From: Alexander Skvortsov Date: Wed, 29 Apr 2020 20:18:48 -0400 Subject: [PATCH] Add mail settings page --- js/src/admin/components/AdminNav.tsx | 15 ++- js/src/admin/components/MailPage.tsx | 194 +++++++++++++++++++++++++++ js/src/admin/routes.ts | 2 + 3 files changed, 205 insertions(+), 6 deletions(-) create mode 100644 js/src/admin/components/MailPage.tsx diff --git a/js/src/admin/components/AdminNav.tsx b/js/src/admin/components/AdminNav.tsx index 308e1005e..a6496844c 100644 --- a/js/src/admin/components/AdminNav.tsx +++ b/js/src/admin/components/AdminNav.tsx @@ -40,12 +40,15 @@ export default class AdminNav extends Component { }) ); - // items.add('mail', AdminLinkButton.component({ - // href: app.route('mail'), - // icon: 'fas fa-envelope', - // children: app.translator.trans('core.admin.nav.email_button'), - // description: app.translator.trans('core.admin.nav.email_text') - // })); + items.add( + 'mail', + AdminLinkButton.component({ + href: app.route('mail'), + icon: 'fas fa-envelope', + children: app.translator.trans('core.admin.nav.email_button'), + description: app.translator.trans('core.admin.nav.email_text'), + }) + ); // items.add('permissions', AdminLinkButton.component({ // href: app.route('permissions'), diff --git a/js/src/admin/components/MailPage.tsx b/js/src/admin/components/MailPage.tsx new file mode 100644 index 000000000..b35d291d7 --- /dev/null +++ b/js/src/admin/components/MailPage.tsx @@ -0,0 +1,194 @@ +import app from '../app'; + +import Page from './Page'; +import FieldSet from '../../common/components/FieldSet'; +import Button from '../../common/components/Button'; +import Alert from '../../common/components/Alert'; +import Select from '../../common/components/Select'; +import LoadingIndicator from '../../common/components/LoadingIndicator'; +import saveSettings from '../utils/saveSettings'; + +import Stream from 'mithril/stream'; + +export default class MailPage extends Page { + loading = true; + saving = false; + + driverFields = {}; + fields = []; + + values: { [key: string]: Stream } = {}; + + status = { sending: false, errors: {} }; + + successAlert: Alert; + + oninit(vnode) { + super.oninit(vnode); + + this.refresh(); + } + + refresh() { + this.loading = true; + this.fields = ['mail_driver', 'mail_from']; + this.values = {}; + + app.request({ + method: 'GET', + url: app.forum.attribute('apiUrl') + '/mail-settings', + }).then((response) => { + 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]) { + this.fields.push(field); + } + } + + const settings = app.data.settings; + this.fields.forEach((key) => (this.values[key] = m.prop(settings[key]))); + + this.loading = false; + m.redraw(); + }); + } + + view() { + if (this.loading || this.saving) { + return ( +
+
+ +
+
+ ); + } + + const fields = this.driverFields[this.values.mail_driver()]; + const fieldKeys = Object.keys(fields); + + return ( +
+
+
+

{app.translator.trans('core.admin.email.heading')}

+
{app.translator.trans('core.admin.email.text')}
+ + {FieldSet.component({ + label: app.translator.trans('core.admin.email.addresses_heading'), + className: 'MailPage-MailSettings', + children: [ +
+ +
, + ], + })} + + {FieldSet.component({ + label: app.translator.trans('core.admin.email.driver_heading'), + className: 'MailPage-MailSettings', + children: [ +
+