сложный angular эффект ngrx с диалоговым окном подтверждения в середине цепочки - PullRequest
1 голос
/ 24 января 2020

Итак, у меня есть простой процесс отмены регистрации клиентов в политике.

Мое действие по отмене регистрации должно:

  1. на основе выбранных клиентов из списка, извлекать все данные клиентов на основе их идентификаторов

  2. после извлекая данные из пункта 1, покажите диалоговое окно подтверждения со всеми этими данными

  3. ; в диалоговом окне вы можете добавить / удалить некоторые из ранее выбранных клиентов

  4. после подтверждения диалога отправьте измененный список клиентов для отмены регистрации

мое действие начинается с:

export class DeregisterClients implements Action {
  readonly type = ActionTypes.DEREGISTER_CLIENTS;

  constructor(public policyNumber: string, public ids: number[]) {
  }
}

Итак, вопрос в том, как должен выглядеть эффект? Ниже только псевдокод и оператор отображения, используемые везде, так как я не знаю, какие операторы следует использовать

  @Effect({dispatch: false})
  deregister$ = this.actions$.pipe(
    ofType<DeregisterClients>(DEREGISTER_CLIENTS),
    // 1 fetch all data
    map(event => {
      return event.ids.map((id) => {
        return this.api.fetchClient(event.policyNumber, id);
      });
    }),
    // 2 collect all data from point 1 and show this data in dialog
    map((insureds) => {
      return this.dialogService.open(DeregisterDialog, data: {policyNumber: 'TODO', clients}}) //here i lost policy number :(
        .afterClosed();
    }),
    // 3 check result after dialog closed
    map((result: DeregisterDialogResult) => {
      if (!result.success) {
        return [];
      }
      return result.clients.map(client => this.api.deregister("TODO", client));//here i lost policy number :(
    }),
    //4 concurrently deregister them
    //todo
  );

Может быть, это слишком сложно? Но с точки зрения бизнеса это одно действие.

1 Ответ

0 голосов
/ 25 января 2020

Это вопрос предпочтений.

Вы можете создать один эффект или разбить цепочку эффектов на несколько меньших эффектов, реагирующих друг на друга. Например, эффект отправляет действие «Шаг 1 завершен», второй эффект прослушивает это действие и реагирует на него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...