onFormSubmit()

in client/src/pages/add-word/add-word.ts [65:104]


  onFormSubmit() {
    // Force validation of all fields
    for (const k of Object.keys(this.form.controls)) {
      this.form.controls[k].markAsDirty();
    }
    if (!this.form.valid) {
      return;
    }
    this.submittingForm = true;
    const loadingPopup = this.dialog.open(LoadingPopUpComponent, { panelClass: 'loading-popup' });
    const addedWord: AddedWord = this.form.value;
    if (!addedWord.word && this.i18n.currentLanguage.code == DEFAULT_LOCALE) {
      addedWord.word = addedWord.englishWord;
    }
    addedWord.language = this.i18n.currentLanguage.code;
    addedWord.nativeLanguage = this.endangeredLanguageService.currentLanguage.code;
    this.feedbackService.addWord(this.form.value).then(
      () => {
        logger.log('Added word submitted');
        this.location.back();
        const snackbarCssClass = this.prevPageCssClass ? `${this.prevPageCssClass}-snack-bar` : '';
        this.snackBar.open(this.i18n.getTranslation('wordSubmitted') || 'Submitted for review', '',
          { 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 adding word', err);
        const errorMessage = this.i18n.getTranslation('addWordError') || 'Unable to add word';
        this.dialog.open(ErrorPopUpComponent, { data: { message: errorMessage } });
      }
    ).finally(
      () => {
        this.submittingForm = false;
        loadingPopup.close();
      }
    );
  }