|
1 | 1 | import { createEntityAdapter, createSlice } from "../..";
|
2 |
| -import type { PayloadAction, SliceCaseReducers } from "../.."; |
3 |
| -import type { DraftableIdSelector, IdSelector } from "../models"; |
| 2 | +import type { PayloadAction, Slice, SliceCaseReducers } from "../.."; |
| 3 | +import type { DraftableIdSelector, EntityAdapter, EntityState, IdSelector } from "../models"; |
| 4 | +import type { BookModel } from "./fixtures/book"; |
| 5 | + |
| 6 | +describe('Entity Slice Enhancer', () => { |
| 7 | + let slice: Slice<EntityState<BookModel>>; |
| 8 | + |
| 9 | + beforeEach(() => { |
| 10 | + const indieSlice = entitySliceEnhancer({ |
| 11 | + name: 'book', |
| 12 | + selectDraftableId: (book: BookModel) => book.id |
| 13 | + }) |
| 14 | + slice = indieSlice |
| 15 | + }) |
| 16 | +}) |
4 | 17 |
|
5 | 18 | interface EntitySliceArgs<T> {
|
6 | 19 | name: string
|
7 |
| - modelReducer: SliceCaseReducers<T> |
8 |
| - selectId: IdSelector<T> // unusable |
9 |
| - selectDraftableId: DraftableIdSelector<T> |
| 20 | + selectId?: IdSelector<T> // unusable |
| 21 | + selectDraftableId?: DraftableIdSelector<T> |
| 22 | + modelReducer?: SliceCaseReducers<T> |
10 | 23 | }
|
11 | 24 |
|
12 |
| -// currently this never runs, it only serves to illustrate that the containing calls are type valid |
13 | 25 | function entitySliceEnhancer<T>({
|
14 | 26 | name,
|
15 |
| - modelReducer, |
16 |
| - selectId: undraftableSelectId, |
17 |
| - selectDraftableId |
| 27 | + selectId: unusableSelectId, |
| 28 | + selectDraftableId, |
| 29 | + modelReducer |
18 | 30 | }: EntitySliceArgs<T>) {
|
19 | 31 | const modelAdapter = createEntityAdapter<T>({
|
20 |
| - selectId: selectDraftableId // undraftableSelectId would give an interesting error |
| 32 | + selectId: selectDraftableId // unusableSelectId would give an interesting error |
21 | 33 | });
|
22 | 34 |
|
23 | 35 | return createSlice({
|
|
0 commit comments