Итак, у меня есть простой процесс отмены регистрации клиентов в политике.
Мое действие по отмене регистрации должно:
на основе выбранных клиентов из списка, извлекать все данные клиентов на основе их идентификаторов
после извлекая данные из пункта 1, покажите диалоговое окно подтверждения со всеми этими данными
; в диалоговом окне вы можете добавить / удалить некоторые из ранее выбранных клиентов
после подтверждения диалога отправьте измененный список клиентов для отмены регистрации
мое действие начинается с:
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
);
Может быть, это слишком сложно? Но с точки зрения бизнеса это одно действие.