UNPKG

736 BPlain TextView Raw
1import { current, isDraft } from 'immer'
2import { createSelector } from 'reselect'
3
4/**
5 * "Draft-Safe" version of `reselect`'s `createSelector`:
6 * If an `immer`-drafted object is passed into the resulting selector's first argument,
7 * the selector will act on the current draft value, instead of returning a cached value
8 * that might be possibly outdated if the draft has been modified since.
9 * @public
10 */
11export const createDraftSafeSelector: typeof createSelector = (
12 ...args: unknown[]
13) => {
14 const selector = (createSelector as any)(...args)
15 const wrappedSelector = (value: unknown, ...rest: unknown[]) =>
16 selector(isDraft(value) ? current(value) : value, ...rest)
17 return wrappedSelector as any
18}