onFormSubmit()

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();
      }
    );
  }