Skip to content

Commit 30c5ae7

Browse files
committed
Allow passing selector creators with different memoize options
1 parent 2b6d65e commit 30c5ae7

File tree

4 files changed

+18
-7
lines changed

4 files changed

+18
-7
lines changed

packages/toolkit/src/entities/state_selectors.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@ import type { CreateSelectorFunction, Selector, createSelector } from 'reselect'
22
import { createDraftSafeSelector } from '../createDraftSafeSelector'
33
import type { EntityState, EntitySelectors, EntityId } from './models'
44

5+
type AnyFunction = (...args: any) => any
6+
type AnyCreateSelectorFunction = CreateSelectorFunction<
7+
<F extends AnyFunction>(f: F) => F,
8+
<F extends AnyFunction>(f: F) => F
9+
>
10+
511
export interface GetSelectorsOptions {
612
// TODO Review if this causes issues or if we can go back to using `CreateSelectorFunction`
7-
createSelector?: typeof createSelector
13+
createSelector?: AnyCreateSelectorFunction
814
}
915

1016
export function createSelectorsFactory<T, Id extends EntityId>() {
@@ -20,7 +26,9 @@ export function createSelectorsFactory<T, Id extends EntityId>() {
2026
selectState?: (state: V) => EntityState<T, Id>,
2127
options: GetSelectorsOptions = {}
2228
): EntitySelectors<T, any, Id> {
23-
const { createSelector = createDraftSafeSelector } = options
29+
let { createSelector } = options
30+
createSelector ??= createDraftSafeSelector
31+
2432
const selectIds = (state: EntityState<T, Id>) => state.ids
2533

2634
const selectEntities = (state: EntityState<T, Id>) => state.entities

packages/toolkit/src/entities/tests/sorted_state_adapter.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ import {
1111
import { createNextState } from '../..'
1212

1313
describe('Sorted State Adapter', () => {
14-
let adapter: EntityAdapter<string, BookModel>
15-
let state: EntityState<string, BookModel>
14+
let adapter: EntityAdapter<BookModel, string>
15+
let state: EntityState<BookModel, string>
1616

1717
beforeAll(() => {
1818
//eslint-disable-next-line
@@ -349,7 +349,7 @@ describe('Sorted State Adapter', () => {
349349
order: number
350350
ts: number
351351
}
352-
const sortedItemsAdapter = createEntityAdapter<string, OrderedEntity>({
352+
const sortedItemsAdapter = createEntityAdapter<OrderedEntity>({
353353
sortComparer: (a, b) => a.order - b.order,
354354
})
355355
const withInitialItems = sortedItemsAdapter.setAll(

packages/toolkit/src/entities/tests/state_adapter.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { createSlice } from '../../createSlice'
66
import type { BookModel } from './fixtures/book'
77

88
describe('createStateOperator', () => {
9-
let adapter: EntityAdapter<string, BookModel>
9+
let adapter: EntityAdapter<BookModel, string>
1010

1111
beforeEach(() => {
1212
adapter = createEntityAdapter({

packages/toolkit/src/entities/tests/state_selectors.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,10 @@ describe('Entity State Selectors', () => {
130130
})
131131
describe('custom createSelector instance', () => {
132132
it('should use the custom createSelector function if provided', () => {
133-
const memoizeSpy = vi.fn(weakMapMemoize)
133+
const memoizeSpy = vi.fn(
134+
// test that we're allowed to pass memoizers with different options, as long as they're optional
135+
<F extends (...args: any[]) => any>(fn: F, param?: boolean) => fn
136+
)
134137
const createCustomSelector = createDraftSafeSelectorCreator(memoizeSpy)
135138

136139
const adapter = createEntityAdapter({

0 commit comments

Comments
 (0)