32 lines
1.1 KiB
TypeScript
32 lines
1.1 KiB
TypeScript
import type { StoreEnhancer } from 'redux'
|
|
import type { AutoBatchOptions } from './autoBatchEnhancer'
|
|
import { autoBatchEnhancer } from './autoBatchEnhancer'
|
|
import { Tuple } from './utils'
|
|
import type { Middlewares } from './configureStore'
|
|
import type { ExtractDispatchExtensions } from './tsHelpers'
|
|
|
|
type GetDefaultEnhancersOptions = {
|
|
autoBatch?: boolean | AutoBatchOptions
|
|
}
|
|
|
|
export type GetDefaultEnhancers<M extends Middlewares<any>> = (
|
|
options?: GetDefaultEnhancersOptions,
|
|
) => Tuple<[StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>]>
|
|
|
|
export const buildGetDefaultEnhancers = <M extends Middlewares<any>>(
|
|
middlewareEnhancer: StoreEnhancer<{ dispatch: ExtractDispatchExtensions<M> }>,
|
|
): GetDefaultEnhancers<M> =>
|
|
function getDefaultEnhancers(options) {
|
|
const { autoBatch = true } = options ?? {}
|
|
|
|
let enhancerArray = new Tuple<StoreEnhancer[]>(middlewareEnhancer)
|
|
if (autoBatch) {
|
|
enhancerArray.push(
|
|
autoBatchEnhancer(
|
|
typeof autoBatch === 'object' ? autoBatch : undefined,
|
|
),
|
|
)
|
|
}
|
|
return enhancerArray as any
|
|
}
|