Skip to content

Commit b54761b

Browse files
authored
feat(customer-store-credit): create injection tokens with factory (#3245)
1 parent c457f77 commit b54761b

File tree

5 files changed

+55
-60
lines changed

5 files changed

+55
-60
lines changed

libs/customer-store-credit/driver/src/interfaces/store-credit-service.interface.ts

+8-5
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
1-
import { InjectionToken } from '@angular/core';
21
import { Observable } from 'rxjs';
32

3+
import { createSingleInjectionToken } from '@daffodil/core';
44
import { DaffCustomerStoreCredit } from '@daffodil/customer-store-credit';
55

6-
/**
7-
* An injection token for the customer store credit driver.
8-
*/
9-
export const DaffCustomerStoreCreditDriver = new InjectionToken<DaffCustomerStoreCreditDriverInterface>('DaffCustomerStoreCreditDriver');
6+
export const {
7+
/**
8+
* An injection token for the customer store credit driver.
9+
*/
10+
token: DaffCustomerStoreCreditDriver,
11+
provider: daffProvideCustomerStoreCreditDriver,
12+
} = createSingleInjectionToken<DaffCustomerStoreCreditDriverInterface>('DaffCustomerStoreCreditDriver');
1013

1114
/**
1215
* The customer store credit driver is responsible for loading customers.
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
import { InjectionToken } from '@angular/core';
2-
1+
import { createSingleInjectionToken } from '@daffodil/core';
32
import { daffTransformErrorToStateError } from '@daffodil/core/state';
43

5-
/**
6-
* Transforms `DaffError`s into `DaffStateError`s before they are serialized into state.
7-
* Can be used to further refine Daffodil errors into more specific app errors.
8-
*/
9-
export const DAFF_CUSTOMER_STORE_CREDIT_ERROR_MATCHER = new InjectionToken<typeof daffTransformErrorToStateError>(
4+
export const {
5+
/**
6+
* Transforms `DaffError`s into `DaffStateError`s before they are serialized into state.
7+
* Can be used to further refine Daffodil errors into more specific app errors.
8+
*/
9+
token: DAFF_CUSTOMER_STORE_CREDIT_ERROR_MATCHER,
10+
provider: daffProvideCustomerStoreCreditErrorMatcher,
11+
} = createSingleInjectionToken<typeof daffTransformErrorToStateError>(
1012
'DAFF_CUSTOMER_STORE_CREDIT_ERROR_MATCHER',
1113
{ factory: () => daffTransformErrorToStateError },
1214
);
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
export { DAFF_CUSTOMER_STORE_CREDIT_ERROR_MATCHER } from './error-matcher.token';
1+
export * from './error-matcher.token';
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,31 @@
1-
import {
2-
InjectionToken,
3-
Provider,
4-
} from '@angular/core';
51
import { ActionReducer } from '@ngrx/store';
62

3+
import { createMultiInjectionToken } from '@daffodil/core';
4+
75
import { DaffCustomerStoreCreditReducersState } from '../reducers.interface';
86

9-
/**
10-
* A token to hold the injectable extra reducers.
11-
*
12-
* Prefer using {@link daffCustomerStoreCreditProvideExtraReducers}.
13-
*/
14-
export const DAFF_CUSTOMER_STORE_CREDIT_EXTRA_REDUCERS = new InjectionToken<ActionReducer<DaffCustomerStoreCreditReducersState>[]>(
7+
export const {
8+
/**
9+
* A token to hold the injectable extra reducers.
10+
*
11+
* Prefer using {@link daffCustomerStoreCreditProvideExtraReducers}.
12+
*/
13+
token: DAFF_CUSTOMER_STORE_CREDIT_EXTRA_REDUCERS,
14+
15+
/**
16+
* Provides additional reducers that run after the standard Daffodil customer reducers.
17+
*
18+
* ```ts
19+
* providers: [
20+
* ...daffCustomerStoreCreditProvideExtraReducers(
21+
* myReducer1,
22+
* myReducer2
23+
* )
24+
* ]
25+
* ```
26+
*/
27+
provider: daffCustomerStoreCreditProvideExtraReducers,
28+
} = createMultiInjectionToken<ActionReducer<DaffCustomerStoreCreditReducersState>>(
1529
'DAFF_CUSTOMER_STORE_CREDIT_EXTRA_REDUCERS',
16-
{
17-
factory: () => [],
18-
providedIn: 'any',
19-
},
30+
{ providedIn: 'any' },
2031
);
21-
22-
/**
23-
* Provides additional reducers that run after the standard Daffodil customer reducers.
24-
*
25-
* ```ts
26-
* providers: [
27-
* ...daffCustomerStoreCreditProvideExtraReducers(
28-
* myReducer1,
29-
* myReducer2
30-
* )
31-
* ]
32-
* ```
33-
*/
34-
export function daffCustomerStoreCreditProvideExtraReducers(
35-
...reducers: ActionReducer<DaffCustomerStoreCreditReducersState>[]
36-
): Provider[] {
37-
return reducers.map(reducer => ({
38-
provide: DAFF_CUSTOMER_STORE_CREDIT_EXTRA_REDUCERS,
39-
useValue: reducer,
40-
multi: true,
41-
}));
42-
}

libs/customer-store-credit/state/src/reducers/token/reducers.token.ts

+12-11
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
1-
import {
2-
inject,
3-
InjectionToken,
4-
} from '@angular/core';
1+
import { inject } from '@angular/core';
52
import {
63
ActionReducer,
74
combineReducers,
85
} from '@ngrx/store';
96

7+
import { createSingleInjectionToken } from '@daffodil/core';
108
import { daffComposeReducers } from '@daffodil/core/state';
119
// these unused imports are a workaround
1210
import { DaffCustomerStoreCredit } from '@daffodil/customer-store-credit';
@@ -15,13 +13,16 @@ import { DAFF_CUSTOMER_STORE_CREDIT_EXTRA_REDUCERS } from './extra.token';
1513
import { DaffCustomerStoreCreditReducersState } from '../reducers.interface';
1614
import { daffCustomerStoreCreditReducer } from '../store-credit/public_api';
1715

18-
/**
19-
* An internal token to hold the Daffodil customer reducers.
20-
* Includes the extra and standard reducers.
21-
*
22-
* @docs-private
23-
*/
24-
export const DAFF_CUSTOMER_STORE_CREDIT_REDUCERS = new InjectionToken<ActionReducer<DaffCustomerStoreCreditReducersState>>(
16+
export const {
17+
/**
18+
* An internal token to hold the Daffodil customer reducers.
19+
* Includes the extra and standard reducers.
20+
*
21+
* @docs-private
22+
*/
23+
token: DAFF_CUSTOMER_STORE_CREDIT_REDUCERS,
24+
provider: daffProvideCustomerStoreCreditReducers,
25+
} = createSingleInjectionToken<ActionReducer<DaffCustomerStoreCreditReducersState>>(
2526
'DAFF_CUSTOMER_STORE_CREDIT_REDUCERS',
2627
{
2728
providedIn: 'any',

0 commit comments

Comments
 (0)