import { DataStore } from '../DataStore'; import { IServiceContainer } from '@aesop-fables/containr'; export interface MutationContext { storage: DataStore; container: IServiceContainer; data: T; } export interface IMutation { execute(context: MutationContext): Promise; } export declare enum MutationStatus { Idle = 0, Executing = 1, Complete = 2 } export type Mutation = (data: Data) => Promise; export interface MutatorState { action: Mutation; status: MutationStatus; error?: Error; } export interface WrapMutationParams { container: IServiceContainer; storage: DataStore; mutator: IMutation; onStatusChanged: (status: MutationStatus) => void; onError: (err: Error) => void; } export declare function asMutation(params: WrapMutationParams): Mutation; export declare function asMutator(mutation: IMutation | Mutation): IMutation; export declare function useMutation(mutation: IMutation | Mutation): MutatorState;