1
- import type { Selector } from 'reselect'
1
+ import type { CreateSelectorFunction , Selector } from 'reselect'
2
2
import { createDraftSafeSelector } from '../createDraftSafeSelector'
3
3
import type {
4
4
EntityState ,
@@ -7,19 +7,29 @@ import type {
7
7
EntityId ,
8
8
} from './models'
9
9
10
+ export type AnyCreateSelectorFunction = CreateSelectorFunction <
11
+ ( ...args : unknown [ ] ) => unknown ,
12
+ < F extends ( ...args : any [ ] ) => any > ( func : F ) => F
13
+ >
14
+
10
15
export function createSelectorsFactory < T > ( ) {
11
- function getSelectors ( ) : EntitySelectors < T , EntityState < T > >
16
+ function getSelectors (
17
+ selectState ?: undefined ,
18
+ createSelector ?: AnyCreateSelectorFunction
19
+ ) : EntitySelectors < T , EntityState < T > >
12
20
function getSelectors < V > (
13
- selectState : ( state : V ) => EntityState < T >
21
+ selectState : ( state : V ) => EntityState < T > ,
22
+ createSelector ?: AnyCreateSelectorFunction
14
23
) : EntitySelectors < T , V >
15
24
function getSelectors < V > (
16
- selectState ?: ( state : V ) => EntityState < T >
25
+ selectState ?: ( state : V ) => EntityState < T > ,
26
+ createSelector : AnyCreateSelectorFunction = createDraftSafeSelector
17
27
) : EntitySelectors < T , any > {
18
28
const selectIds = ( state : EntityState < T > ) => state . ids
19
29
20
30
const selectEntities = ( state : EntityState < T > ) => state . entities
21
31
22
- const selectAll = createDraftSafeSelector (
32
+ const selectAll = createSelector (
23
33
selectIds ,
24
34
selectEntities ,
25
35
( ids , entities ) : T [ ] => ids . map ( ( id ) => entities [ id ] ! )
@@ -29,33 +39,29 @@ export function createSelectorsFactory<T>() {
29
39
30
40
const selectById = ( entities : Dictionary < T > , id : EntityId ) => entities [ id ]
31
41
32
- const selectTotal = createDraftSafeSelector ( selectIds , ( ids ) => ids . length )
42
+ const selectTotal = createSelector ( selectIds , ( ids ) => ids . length )
33
43
34
44
if ( ! selectState ) {
35
45
return {
36
46
selectIds,
37
47
selectEntities,
38
48
selectAll,
39
49
selectTotal,
40
- selectById : createDraftSafeSelector (
41
- selectEntities ,
42
- selectId ,
43
- selectById
44
- ) ,
50
+ selectById : createSelector ( selectEntities , selectId , selectById ) ,
45
51
}
46
52
}
47
53
48
- const selectGlobalizedEntities = createDraftSafeSelector (
54
+ const selectGlobalizedEntities = createSelector (
49
55
selectState as Selector < V , EntityState < T > > ,
50
56
selectEntities
51
57
)
52
58
53
59
return {
54
- selectIds : createDraftSafeSelector ( selectState , selectIds ) ,
60
+ selectIds : createSelector ( selectState , selectIds ) ,
55
61
selectEntities : selectGlobalizedEntities ,
56
- selectAll : createDraftSafeSelector ( selectState , selectAll ) ,
57
- selectTotal : createDraftSafeSelector ( selectState , selectTotal ) ,
58
- selectById : createDraftSafeSelector (
62
+ selectAll : createSelector ( selectState , selectAll ) ,
63
+ selectTotal : createSelector ( selectState , selectTotal ) ,
64
+ selectById : createSelector (
59
65
selectGlobalizedEntities ,
60
66
selectId ,
61
67
selectById
0 commit comments