1
1
import type {
2
+ CaseReducerDefinition ,
2
3
CreatorCaseReducers ,
4
+ PayloadAction ,
3
5
ReducerCreator ,
4
6
ReducerCreatorEntry ,
5
7
} from '@reduxjs/toolkit'
6
8
import { reducerCreator } from '../createSlice'
7
9
import type { WithRequiredProp } from '../tsHelpers'
8
10
import type {
9
- Update ,
10
11
EntityAdapter ,
11
12
EntityId ,
12
13
EntityState ,
@@ -79,6 +80,20 @@ declare module '@reduxjs/toolkit' {
79
80
}
80
81
}
81
82
83
+ const makeWrappedReducerCreator =
84
+ < T , Id extends EntityId , State > (
85
+ selectEntityState : ( state : State ) => EntityState < T , Id > ,
86
+ ) =>
87
+ < Payload > (
88
+ reducer : (
89
+ state : EntityState < T , Id > ,
90
+ action : PayloadAction < Payload > ,
91
+ ) => void ,
92
+ ) : CaseReducerDefinition < State , PayloadAction < Payload > > =>
93
+ reducerCreator . create < Payload > ( ( state : State , action ) =>
94
+ reducer ( selectEntityState ( state ) , action ) ,
95
+ )
96
+
82
97
export function createEntityMethods <
83
98
T ,
84
99
Id extends EntityId ,
@@ -98,58 +113,26 @@ export function createEntityMethods<
98
113
99
114
const name = nameParam as 's'
100
115
const pluralName = pluralParam as 'p'
101
- const reducer = reducerCreator . create
116
+ const reducer = makeWrappedReducerCreator ( selectEntityState )
102
117
const reducers : EntityReducers < T , Id , State , 's' , 'p' > = {
103
- [ `addOne${ capitalize ( name ) } ` as const ] : reducer < T > ( ( state , action ) => {
104
- adapter . addOne ( selectEntityState ( state ) , action )
105
- } ) ,
106
- [ `addMany${ capitalize ( pluralName ) } ` as const ] : reducer <
107
- readonly T [ ] | Record < Id , T >
108
- > ( ( state , action ) => {
109
- adapter . addMany ( selectEntityState ( state ) , action )
110
- } ) ,
111
- [ `setOne${ capitalize ( name ) } ` as const ] : reducer < T > ( ( state , action ) => {
112
- adapter . setOne ( selectEntityState ( state ) , action )
113
- } ) ,
114
- [ `setMany${ capitalize ( pluralName ) } ` as const ] : reducer <
115
- readonly T [ ] | Record < Id , T >
116
- > ( ( state , action ) => {
117
- adapter . setMany ( selectEntityState ( state ) , action )
118
- } ) ,
119
- [ `setAll${ capitalize ( pluralName ) } ` as const ] : reducer <
120
- readonly T [ ] | Record < Id , T >
121
- > ( ( state , action ) => {
122
- adapter . setAll ( selectEntityState ( state ) , action )
123
- } ) ,
124
- [ `removeOne${ capitalize ( name ) } ` as const ] : reducer < Id > ( ( state , action ) => {
125
- adapter . removeOne ( selectEntityState ( state ) , action )
126
- } ) ,
127
- [ `removeMany${ capitalize ( pluralName ) } ` as const ] : reducer < readonly Id [ ] > (
128
- ( state , action ) => {
129
- adapter . removeMany ( selectEntityState ( state ) , action )
130
- } ,
118
+ [ `addOne${ capitalize ( name ) } ` as const ] : reducer ( adapter . addOne ) ,
119
+ [ `addMany${ capitalize ( pluralName ) } ` as const ] : reducer ( adapter . addMany ) ,
120
+ [ `setOne${ capitalize ( name ) } ` as const ] : reducer ( adapter . setOne ) ,
121
+ [ `setMany${ capitalize ( pluralName ) } ` as const ] : reducer ( adapter . setMany ) ,
122
+ [ `setAll${ capitalize ( pluralName ) } ` as const ] : reducer ( adapter . setAll ) ,
123
+ [ `removeOne${ capitalize ( name ) } ` as const ] : reducer ( adapter . removeOne ) ,
124
+ [ `removeMany${ capitalize ( pluralName ) } ` as const ] : reducer (
125
+ adapter . removeMany ,
126
+ ) ,
127
+ [ `removeAll${ capitalize ( pluralName ) } ` as const ] : reducer ( adapter . removeAll ) ,
128
+ [ `upsertOne${ capitalize ( name ) } ` as const ] : reducer ( adapter . upsertOne ) ,
129
+ [ `upsertMany${ capitalize ( pluralName ) } ` as const ] : reducer (
130
+ adapter . upsertMany ,
131
131
) ,
132
- [ `removeAll${ capitalize ( pluralName ) } ` as const ] : reducer ( ( state ) => {
133
- adapter . removeAll ( selectEntityState ( state ) )
134
- } ) ,
135
- [ `upsertOne${ capitalize ( name ) } ` as const ] : reducer < T > ( ( state , action ) => {
136
- adapter . upsertOne ( selectEntityState ( state ) , action )
137
- } ) ,
138
- [ `upsertMany${ capitalize ( pluralName ) } ` as const ] : reducer <
139
- readonly T [ ] | Record < Id , T >
140
- > ( ( state , action ) => {
141
- adapter . upsertMany ( selectEntityState ( state ) , action )
142
- } ) ,
143
- [ `updateOne${ capitalize ( name ) } ` as const ] : reducer < Update < T , Id > > (
144
- ( state , action ) => {
145
- adapter . updateOne ( selectEntityState ( state ) , action )
146
- } ,
132
+ [ `updateOne${ capitalize ( name ) } ` as const ] : reducer ( adapter . updateOne ) ,
133
+ [ `updateMany${ capitalize ( pluralName ) } ` as const ] : reducer (
134
+ adapter . updateMany ,
147
135
) ,
148
- [ `updateMany${ capitalize ( pluralName ) } ` as const ] : reducer <
149
- readonly Update < T , Id > [ ]
150
- > ( ( state , action ) => {
151
- adapter . updateMany ( selectEntityState ( state ) , action )
152
- } ) ,
153
136
}
154
137
return reducers as any
155
138
}
0 commit comments