import { ActionCall } from '../action'; import { OnSnapshotDisposer, OnSnapshotListener } from '../snapshot/onSnapshot'; import { SnapshotOutOf } from '../snapshot/SnapshotOf'; export declare const reduxActionType = "applyAction"; /** * A redux action for mobx-keystone. */ export interface ReduxAction { readonly type: typeof reduxActionType; readonly payload: ActionCall; } /** * Transforms an action call into a redux action. * * @param actionCall Action call. * @returns A redux action. */ export declare function actionCallToReduxAction(actionCall: ActionCall): ReduxAction; /** * A redux store for mobx-keystone. */ export interface ReduxStore { getState(): SnapshotOutOf; dispatch(action: ReduxAction): ReduxAction; subscribe(listener: OnSnapshotListener): OnSnapshotDisposer; } /** * A redux runner for mobx-keystone. */ export type ReduxRunner = (next: ReduxStore["dispatch"]) => (action: ReduxAction) => ReduxAction; /** * A redux middleware for mobx-keystone. */ export type ReduxMiddleware = (store: ReduxStore) => ReduxRunner; /** * Generates a redux compatible store out of a mobx-keystone object. * * @template T Object type. * @param target Root object. * @param middlewares Optional list of redux middlewares. * @returns A redux compatible store. */ export declare function asReduxStore(target: T, ...middlewares: ReduxMiddleware[]): ReduxStore;