UNPKG

1.1 kBPlain TextView Raw
1import type {
2 EntityDefinition,
3 Comparer,
4 IdSelector,
5 EntityAdapter,
6} from './models'
7import { createInitialStateFactory } from './entity_state'
8import { createSelectorsFactory } from './state_selectors'
9import { createSortedStateAdapter } from './sorted_state_adapter'
10import { createUnsortedStateAdapter } from './unsorted_state_adapter'
11
12/**
13 *
14 * @param options
15 *
16 * @public
17 */
18export 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}