1 | import type {
|
2 | EntityDefinition,
|
3 | Comparer,
|
4 | IdSelector,
|
5 | EntityAdapter,
|
6 | } from './models'
|
7 | import { createInitialStateFactory } from './entity_state'
|
8 | import { createSelectorsFactory } from './state_selectors'
|
9 | import { createSortedStateAdapter } from './sorted_state_adapter'
|
10 | import { createUnsortedStateAdapter } from './unsorted_state_adapter'
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 | export function createEntityAdapter<T>(
|
19 | options: {
|
20 | selectId?: IdSelector<T>
|
21 | sortComparer?: false | Comparer<T>
|
22 | } = {}
|
23 | ): EntityAdapter<T> {
|
24 | const { selectId, sortComparer }: EntityDefinition<T> = {
|
25 | sortComparer: false,
|
26 | selectId: (instance: any) => instance.id,
|
27 | ...options,
|
28 | }
|
29 |
|
30 | const stateFactory = createInitialStateFactory<T>()
|
31 | const selectorsFactory = createSelectorsFactory<T>()
|
32 | const stateAdapter = sortComparer
|
33 | ? createSortedStateAdapter(selectId, sortComparer)
|
34 | : createUnsortedStateAdapter(selectId)
|
35 |
|
36 | return {
|
37 | selectId,
|
38 | sortComparer,
|
39 | ...stateFactory,
|
40 | ...selectorsFactory,
|
41 | ...stateAdapter,
|
42 | }
|
43 | }
|