У меня есть сетка предметов, где каждый предмет можно удалить с помощью кнопки. Когда пользователь нажимает кнопку удаления, генерируется Subject<string>, содержащий идентификатор.

Я подписываюсь на это Observable, чтобы выдать актуальный запрос на удаление с идентификатором:

  this.onDeleting$
            .pipe(
                // map and flatten each delete request to a confirmation procedure
                concatMap(id => {
                    // bootstrap modal dialog
                    const bootstrapModal = this.dialogService.open(ConfirmDialogComponent, { backdrop: 'static' });

                    return (bootstrapModal.componentInstance.output$ as Observable<any>).pipe(
                        // map and flatten each confirmation procedure result to an actual action
                        concatMap((f: ConfirmDialogActions) => {
                            if (f === ConfirmDialogActions.ConfirmAction) {
                                // confired
                                return this.apiService.deleteItem(id).pipe(
                                    take(1),
                                    catchError(error => {
                                        this.httpErrorResponse$.next(error);
                                        return EMPTY;
                                    }),
                                    switchMap(() =>
                                        this.apiService.loadPage().pipe(take(1), takeUntil(this.onDestroy$))
                                    )
                                );
                            } else {
                                // dismissed
                                // without this line, no confirm dialog will pop up again after having dismissed one before
                                return this.apiService.loadPage().pipe(take(1), takeUntil(this.onDestroy$));
                            }
                        }),
                        take(1),
                        takeUntil(this.onDestroy$)
                    );
                }),
                takeUntil(this.onDestroy$)
            )
            .forEach(result => {
                this.httpErrorResponse$.next();
                this.model = sortCollection(result, this.sorting);
            });

Этот код на самом деле работает, но есть проблема при закрытии диалогового окна подтверждения при удалении строки кода, где страница перезагружается после закрытия. Конечно, эта строка кода не имеет смысла, но в противном случае диалог подтверждения больше не появится.

0
yBother