UNPKG

@reduxjs/toolkit

Version:

The official, opinionated, batteries-included toolset for efficient Redux development

48 lines (42 loc) 1.43 kB
import type { EntityAdapter, EntityId, EntityAdapterOptions } from './models' import { createInitialStateFactory } from './entity_state' import { createSelectorsFactory } from './state_selectors' import { createSortedStateAdapter } from './sorted_state_adapter' import { createUnsortedStateAdapter } from './unsorted_state_adapter' import type { WithRequiredProp } from '../tsHelpers' export function createEntityAdapter<T, Id extends EntityId>( options: WithRequiredProp<EntityAdapterOptions<T, Id>, 'selectId'>, ): EntityAdapter<T, Id> export function createEntityAdapter<T extends { id: EntityId }>( options?: Omit<EntityAdapterOptions<T, T['id']>, 'selectId'>, ): EntityAdapter<T, T['id']> /** * * @param options * * @public */ export function createEntityAdapter<T>( options: EntityAdapterOptions<T, EntityId> = {}, ): EntityAdapter<T, EntityId> { const { selectId, sortComparer, }: Required<EntityAdapterOptions<T, EntityId>> = { sortComparer: false, selectId: (instance: any) => instance.id, ...options, } const stateAdapter = sortComparer ? createSortedStateAdapter(selectId, sortComparer) : createUnsortedStateAdapter(selectId) const stateFactory = createInitialStateFactory(stateAdapter) const selectorsFactory = createSelectorsFactory<T, EntityId>() return { selectId, sortComparer, ...stateFactory, ...selectorsFactory, ...stateAdapter, } }