in client/src/pages/feedback/feedback.ts [61:103]
onFormSubmit() {
// Force validation of all fields
for (const k of Object.keys(this.feedbackForm.controls)) {
this.feedbackForm.controls[k].markAsDirty();
}
// Force types checkboxes to validate
const typesControl = this.feedbackForm.controls.types;
typesControl.updateValueAndValidity();
if (!this.feedbackForm.valid) {
return;
}
this.submittingForm = true;
const loadingPopup = this.dialog.open(LoadingPopUpComponent, { panelClass: 'loading-popup' });
const feedback: Feedback = this.feedbackForm.value;
if (!feedback.word && this.i18n.currentLanguage.code == DEFAULT_LOCALE) {
feedback.word = feedback.englishWord;
}
feedback.language = this.i18n.currentLanguage.code;
feedback.nativeLanguage = this.endangeredLanguageService.currentLanguage.code;
this.feedbackService.sendFeedback(feedback).then(
() => {
logger.log('Feedback submitted');
this.location.back();
const snackbarCssClass = this.prevPageCssClass ? `${this.prevPageCssClass}-snack-bar` : '';
this.snackBar.open(this.i18n.getTranslation('feedbackSubmitted') || 'Feedback submitted', '',
{ duration: environment.components.snackBar.duration, panelClass: snackbarCssClass });
// HACK: fix snackbar not closing on some iOS devices
setTimeout(() => {
(document.getElementsByTagName('snack-bar-container')[0].parentNode as Element).remove();
}, environment.components.snackBar.duration + 500);
},
err => {
logger.warn('Failed submitting feedback', err);
const errorMessage = this.i18n.getTranslation('submitFeedbackError') || 'Unable to save feedback';
this.dialog.open(ErrorPopUpComponent, { data: { message: errorMessage } });
}
).finally(
() => {
this.submittingForm = false;
loadingPopup.close();
}
);
}