1 | import { current, isDraft } from 'immer'
|
2 | import { 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 | */
|
11 | export 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 | }
|