Я пытаюсь обновить элемент, но только если диалог подтвержден. Я думаю, что это правильный способ управлять этим с помощью эффекта ngrx.
У меня есть действие, updateItem, которое получает идентификатор элемента:
export const updateItem = createAction('...', props<{ id: number }>());
В моем компоненте я отправляю действие с ID.
Мой эффект выглядит следующим образом:
...
updateItem$ = createEffect(() =>
ofType(ItemActions.updateItem),
exhaustMap(({id}) => // <-- here i have access to the item id
this.dialog.open<..., ..., boolean>(...).afterClosed()
),
map(result => result ? result : new ActionItems.DialogClose()),
switchMap(() => // <-- no access to id, since the result is now a boolean
// make a http request to update user with id
this.http.patch<...>(..., [...]).pipe(
map(...),
catchError(...)
);
)
);
...
Теперь у меня нет доступа к идентификатору, когда я выполняю http-вызов. Как показать диалог подтверждения, но сохранить идентификатор? Я думал о «withLatestFrom» -операторе, но я хочу, чтобы http-запрос выполнялся только при успешном диалоге.
Я также пытался создавать для различных действий, одно из которых отправляет диалог, а второе - updateItem, если диалог завершился успешно. Но даже тогда я пропускаю идентификатор, поскольку он преобразуется.
Я мог бы передать идентификатор в диалог и вернуть идентификатор в качестве близкого результата, но на самом деле я хочу, чтобы мой компонент отображался. Пример Ngrx / platform делает нечто подобное, но им не нужны данные (https://github.com/ngrx/platform/blob/master/projects/example-app/src/app/auth/effects/auth.effects.ts).
У кого-нибудь есть идеи о том, как я могу решить эту проблему?