import { Component, OnInit, ViewChild } from '@angular/core'
+import { Router } from '@angular/router'
import { Notifier, ServerService } from '@app/core'
-import { I18n } from '@ngx-translate/i18n-polyfill'
-import { FormValidatorService } from '@app/shared/forms/form-validators/form-validator.service'
+import {
+ BODY_VALIDATOR,
+ FROM_EMAIL_VALIDATOR,
+ FROM_NAME_VALIDATOR,
+ SUBJECT_VALIDATOR
+} from '@app/shared/form-validators/instance-validators'
+import { FormReactive, FormValidatorService } from '@app/shared/shared-forms'
+import { InstanceService } from '@app/shared/shared-instance'
import { NgbModal } from '@ng-bootstrap/ng-bootstrap'
import { NgbModalRef } from '@ng-bootstrap/ng-bootstrap/modal/modal-ref'
-import { FormReactive, InstanceValidatorsService } from '@app/shared'
-import { InstanceService } from '@app/shared/instance/instance.service'
-import { ServerConfig } from '@shared/models'
+import { HTMLServerConfig, HttpStatusCode } from '@shared/models'
+
+type Prefill = {
+ subject?: string
+ body?: string
+}
@Component({
selector: 'my-contact-admin-modal',
error: string
private openedModal: NgbModalRef
- private serverConfig: ServerConfig
+ private serverConfig: HTMLServerConfig
constructor (
protected formValidatorService: FormValidatorService,
+ private router: Router,
private modalService: NgbModal,
- private instanceValidatorsService: InstanceValidatorsService,
private instanceService: InstanceService,
private serverService: ServerService,
- private notifier: Notifier,
- private i18n: I18n
+ private notifier: Notifier
) {
super()
}
}
ngOnInit () {
- this.serverConfig = this.serverService.getTmpConfig()
- this.serverService.getConfig()
- .subscribe(config => this.serverConfig = config)
+ this.serverConfig = this.serverService.getHTMLConfig()
this.buildForm({
- fromName: this.instanceValidatorsService.FROM_NAME,
- fromEmail: this.instanceValidatorsService.FROM_EMAIL,
- subject: this.instanceValidatorsService.SUBJECT,
- body: this.instanceValidatorsService.BODY
+ fromName: FROM_NAME_VALIDATOR,
+ fromEmail: FROM_EMAIL_VALIDATOR,
+ subject: SUBJECT_VALIDATOR,
+ body: BODY_VALIDATOR
})
}
- show () {
- this.openedModal = this.modalService.open(this.modal, { keyboard: false })
+ isContactFormEnabled () {
+ return this.serverConfig.email.enabled && this.serverConfig.contactForm.enabled
+ }
+
+ show (prefill: Prefill = {}) {
+ this.openedModal = this.modalService.open(this.modal, { centered: true, keyboard: false })
+
+ this.openedModal.shown.subscribe(() => this.prefillForm(prefill))
+ this.openedModal.result.finally(() => this.router.navigateByUrl('/about/instance'))
}
hide () {
}
sendForm () {
- const fromName = this.form.value['fromName']
+ const fromName = this.form.value[ 'fromName' ]
const fromEmail = this.form.value[ 'fromEmail' ]
const subject = this.form.value[ 'subject' ]
const body = this.form.value[ 'body' ]
this.instanceService.contactAdministrator(fromEmail, fromName, subject, body)
.subscribe(
() => {
- this.notifier.success(this.i18n('Your message has been sent.'))
+ this.notifier.success($localize`Your message has been sent.`)
this.hide()
},
err => {
- this.error = err.status === 403
- ? this.i18n('You already sent this form recently')
+ this.error = err.status === HttpStatusCode.FORBIDDEN_403
+ ? $localize`You already sent this form recently`
: err.message
}
)
}
+
+ private prefillForm (prefill: Prefill) {
+ if (prefill.subject) {
+ this.form.get('subject').setValue(prefill.subject)
+ }
+
+ if (prefill.body) {
+ this.form.get('body').setValue(prefill.body)
+ }
+ }
}