import { FC, ForwardRefExoticComponent, NamedExoticComponent, RefAttributes, Dispatch } from 'react'; import { Context } from 'use-context-selector'; import { LoosePartial, ActionCreatorWithPayload, PayloadActionCreator, Thunk } from '../types'; export type ComponentPropsType = Record> = T; export type ConnectedComponent

= ForwardRefExoticComponent> | FC

; }> | NamedExoticComponent

; }>; export type ConnectedComponentProps = MSTP & MDTP & OWNP; export type ConnectHookProps = { stateToProps: MSTP; dispatchToProps: MDTP; ownProps: OWNP; mergedProps: MergePropsReturnType; }; export type ConnectOptions = { mapStateToPropsOptions?: { context: Context; mapStateToProps: >(state: InferStateFromContext, ownProps: OWNP) => LoosePartial; }[]; mapDispatchToPropsOptions?: Array<{ context: Context>; mapDispatchToProps: LoosePartial | PayloadActionCreator | ((...args: unknown[]) => unknown)>> | ((dispatch: Dispatch, ownProps: OWNP) => LoosePartial unknown>>); }>; pure?: boolean; forwardRef?: boolean; mergeProps?: (stateToProps: MSTP, dispatchToProps: MDTP, ownProps: OWNP) => MergePropsReturnType; areOwnPropsEqual?: EqualityFunctionType; areMergedPropsEqual?: EqualityFunctionType; useHookDataFetchingOnce?: >(props: T) => Promise | void; useHookEffectAfterChange?: (props: ConnectHookProps) => ConnectOptionUseEffectAfterChangeReturn; }; export type ConnectOptionUseEffectAfterChangeReturn = [ value?: T, callback?: (previousValue: T | undefined, value: T) => any, condition?: (previousValue: T | undefined, value: T) => boolean, throttle?: number ]; export type EqualityFunctionType

= (prevPropsOrState: P, nextPropsOrState: P) => boolean; export type DispatchType = Thunk | ActionCreatorWithPayload | PayloadActionCreator; export type MergePropsReturnType = Partial & Partial & Partial; export type InferStateFromContext = C extends Context ? S : never;