11import type {
2+ CaseReducerDefinition ,
23 CreatorCaseReducers ,
4+ PayloadAction ,
35 ReducerCreator ,
46 ReducerCreatorEntry ,
57} from '@reduxjs/toolkit'
68import { reducerCreator } from '../createSlice'
79import type { WithRequiredProp } from '../tsHelpers'
810import type {
9- Update ,
1011 EntityAdapter ,
1112 EntityId ,
1213 EntityState ,
@@ -79,6 +80,20 @@ declare module '@reduxjs/toolkit' {
7980 }
8081}
8182
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+
8297export function createEntityMethods <
8398 T ,
8499 Id extends EntityId ,
@@ -98,58 +113,26 @@ export function createEntityMethods<
98113
99114 const name = nameParam as 's'
100115 const pluralName = pluralParam as 'p'
101- const reducer = reducerCreator . create
116+ const reducer = makeWrappedReducerCreator ( selectEntityState )
102117 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 ,
131131 ) ,
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 ,
147135 ) ,
148- [ `updateMany${ capitalize ( pluralName ) } ` as const ] : reducer <
149- readonly Update < T , Id > [ ]
150- > ( ( state , action ) => {
151- adapter . updateMany ( selectEntityState ( state ) , action )
152- } ) ,
153136 }
154137 return reducers as any
155138}
0 commit comments