При желании повторите действие с помощью Toast не работает - PullRequest
0 голосов
/ 03 декабря 2018

У меня есть приложение, в котором в случае сбоя действия (BiographyUpdate) я бы хотел дать пользователю возможность повторить действие с помощью тоста.Когда пользователь отклоняет тост, он должен повторить действие, если они принимают:

@Effect()
  public BiographyUpdate: Observable<any> = this._actions.pipe(
    ofType(AuthActionTypes.BIOGRAPHY_UPDATE),
    map((action: BiographyUpdate) => action.payload),
    switchMap(biography => this._profile.updateBiography(`${Environment.Endpoint}/users/update`, biography)
      .map(() => new BiographyUpdateSuccess())
      .catch(() => Observable.of(new BiographyUpdateFailure(biography)))
    )
  );

  @Effect({ dispatch: false })
  public BiographyUpdateFailure: Observable<any> = this._actions.pipe(
    ofType(AuthActionTypes.BIOGRAPHY_UPDATE_FAILURE),
    map((action: BiographyUpdateFailure) => action.payload),
    tap(payload => {
      const toast = this._toast.create({
        message: "Update failed.",
        ...ToastDefaults,
        duration: 3000,
        closeButtonText: 'Retry'
      });
      toast.onDidDismiss(() => new BiographyUpdate(payload));
      toast.present();
    })
  );

Поскольку действие вызывается с помощью обратного вызова пользовательского интерфейса, я подумал, что этот способ будет работать, но действие больше никогда не вызывается.Есть предложения?

1 Ответ

0 голосов
/ 04 декабря 2018

Разобрался, мне нужно было отправить действие.Вот мое обновленное действие при сбое:

Для ясности, я отправляю действие только в том случае, если пользователь закрывает тост, а не если оно автоматически отменяется.Это не задокументировано Ionic, но возможно.

@Effect({ dispatch: false })
  public BiographyUpdateFailure: Observable<any> = this._actions.pipe(
    ofType(AuthActionTypes.BIOGRAPHY_UPDATE_FAILURE),
    map((action: BiographyUpdateFailure) => action.payload),
    tap(payload => {
      const toast = this._toast.create({
        message: "Update failed.",
        ...ToastDefaults,
        duration: 3000,
        closeButtonText: 'Retry'
      });
      toast.onDidDismiss((data, role) => { 
          if (role === 'close') 
              return this._store.dispatch(new BiographyUpdate(payload)); 
      });
      toast.present();
    })
  );
...