source: node_modules/@reduxjs/toolkit/src/createDraftSafeSelector.ts@ a762898

Last change on this file since a762898 was a762898, checked in by istevanoska <ilinastevanoska@…>, 5 months ago

Added visualizations

  • Property mode set to 100644
File size: 1.1 KB
Line 
1import { current, isDraft } from './immerImports'
2import { createSelectorCreator, weakMapMemoize } from './reselectImports'
3
4export const createDraftSafeSelectorCreator: typeof createSelectorCreator = (
5 ...args: unknown[]
6) => {
7 const createSelector = (createSelectorCreator as any)(...args)
8 const createDraftSafeSelector = Object.assign(
9 (...args: unknown[]) => {
10 const selector = createSelector(...args)
11 const wrappedSelector = (value: unknown, ...rest: unknown[]) =>
12 selector(isDraft(value) ? current(value) : value, ...rest)
13 Object.assign(wrappedSelector, selector)
14 return wrappedSelector as any
15 },
16 { withTypes: () => createDraftSafeSelector },
17 )
18 return createDraftSafeSelector
19}
20
21/**
22 * "Draft-Safe" version of `reselect`'s `createSelector`:
23 * If an `immer`-drafted object is passed into the resulting selector's first argument,
24 * the selector will act on the current draft value, instead of returning a cached value
25 * that might be possibly outdated if the draft has been modified since.
26 * @public
27 */
28export const createDraftSafeSelector =
29 /* @__PURE__ */
30 createDraftSafeSelectorCreator(weakMapMemoize)
Note: See TracBrowser for help on using the repository browser.