У меня есть состояние редукса, использующее эпосы наблюдаемого редукса
Мне нужно решить, показывать ли сообщение после того, как пользователь удалит объект или несколько объектов.
Существует два способа удаления объекта:
- с помощью действия
deleteObject(id: string)
, которое вызывает deleteObjectFulfilled
действие - с помощью действия
deleteObjects(ids: Array<string>)
, которое вызывает N * deleteObject(id: string)
действия
Я хочу показать только одно сообщение с количеством удаленных сообщений после каждого успешного "удаления действия".
Мое окончательное решение этогоЭпос:
export const showDeleteInformationEpic = action$ =>
combineLatest(
action$.pipe(ofType(DELETE_OBJECT_FULFILLED)),
action$.pipe(
ofType(DELETE_OBJECTS),
switchMap(({ meta: { ids } }) =>
action$.pipe(
ofType(DELETE_OBJECT_FULFILLED),
skip(ids.length - 1),
map(() => ids.length),
startWith('BATCH_IN_PROGRESS'),
take(2),
),
),
startWith(1),
),
).pipe(
startWith([null, null]),
pairwise(),
map(([[, previousCount], [, currentCount]]) =>
(previousCount === 'BATCH_IN_PROGRESS')
? currentCount
: isNumber(currentCount) ? 1 : currentCount),
filter(isNumber),
map((count) => throwInfo('objectDeleted', { count })),
);
Можете ли вы найти лучшее решение этого вопроса?