Skip to content

Commit 6120350

Browse files
author
Chau Tran
committed
feat(slice): add reducers to actions map option
1 parent 75452f2 commit 6120350

File tree

5 files changed

+34
-7
lines changed

5 files changed

+34
-7
lines changed

packages/ngrx-slice/src/lib/create-slice-actions.spec.ts

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,4 +78,27 @@ describe(createSliceActions.name, () => {
7878
}
7979
});
8080
});
81+
82+
it('should return actions with correct name if actionsMap is provided', () => {
83+
const actions = createSliceActions(
84+
'feature',
85+
getter,
86+
{
87+
foo: (state) => state,
88+
bar: state => state
89+
},
90+
{ foo: '[Foo Action] The Foo', noop: '[Noop Action] The Noop' }
91+
);
92+
93+
expect(Object.keys(actions).length).toEqual(3);
94+
expect(actions.foo()).toEqual({
95+
type: '[Foo Action] The Foo',
96+
});
97+
expect(actions.noop()).toEqual({
98+
type: '[Noop Action] The Noop',
99+
});
100+
expect(actions.bar()).toEqual({
101+
type: 'feature/bar',
102+
});
103+
});
81104
});

packages/ngrx-slice/src/lib/create-slice-actions.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,19 +12,20 @@ export function createSliceActions<
1212
>(
1313
featureName: SliceName,
1414
sliceActionNameGetter: SliceActionNameGetter,
15-
reducers: CaseReducers
15+
reducers: CaseReducers,
16+
reducersToActions?: { [K in keyof CaseReducers | 'noop']?: string },
1617
): SliceActions<SliceState, CaseReducers> {
1718
const actions: Record<string, ActionCreator | Record<string, ActionCreator>> =
1819
{};
1920

2021
actions['noop'] = createAction(
21-
sliceActionNameGetter(featureName, 'noop effect'),
22+
reducersToActions?.['noop'] || sliceActionNameGetter(featureName, 'noop effect'),
2223
props<Record<string, unknown>>()
2324
);
2425

2526
for (const [reducerKey, reducerValue] of Object.entries(reducers)) {
2627
const typeOfReducer = typeof reducerValue;
27-
const sliceActionName = sliceActionNameGetter(featureName, reducerKey);
28+
const sliceActionName = reducersToActions?.[reducerKey] || sliceActionNameGetter(featureName, reducerKey);
2829

2930
if (typeOfReducer === 'function') {
3031
actions[reducerKey] = createAction(

packages/ngrx-slice/src/lib/create-slice.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { createNamespacedSlice, noopReducer } from './create-slice';
1+
import { createNamespacedSlice, createSlice, noopReducer } from './create-slice';
22
import type { PayloadAction } from './typings';
33
import { classify } from './utils';
44

@@ -37,7 +37,7 @@ const { CounterActions, CounterSelectors, CounterFeature } =
3737
},
3838
trigger: noopReducer<{ multiplier: number }>(),
3939
},
40-
},
40+
}
4141
});
4242

4343
const myInitialState: MyCounterState = {

packages/ngrx-slice/src/lib/create-slice.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export function createSlice<
3939
initialState,
4040
reducers,
4141
extraReducers,
42+
reducersToActions,
4243
sliceActionNameGetter = defaultSliceActionNameGetter,
4344
}: SliceOptions<SliceName, SliceState, CaseReducers>): Slice<
4445
SliceState,
@@ -55,7 +56,8 @@ export function createSlice<
5556
const actions = createSliceActions<SliceState, SliceName, CaseReducers>(
5657
name,
5758
sliceActionNameGetter,
58-
reducers
59+
reducers,
60+
reducersToActions,
5961
);
6062

6163
const reducer = createSliceReducer<SliceState, SliceName, CaseReducers>(

packages/ngrx-slice/src/lib/typings.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,11 +99,12 @@ export interface SliceCaseReducers<SliceState = any> {
9999
export interface SliceOptions<
100100
SliceName extends string,
101101
SliceState,
102-
CaseReducers extends SliceCaseReducers<SliceState>
102+
CaseReducers extends SliceCaseReducers<SliceState> = SliceCaseReducers<SliceState>
103103
> {
104104
name: SliceName;
105105
initialState: SliceState;
106106
reducers: CaseReducers;
107+
reducersToActions?: {[K in keyof CaseReducers | 'noop']?: string};
107108
extraReducers?: Array<ReducerTypes<SliceState, readonly ActionCreator[]>>;
108109
sliceActionNameGetter?: SliceActionNameGetter;
109110
}

0 commit comments

Comments
 (0)