import { IDS } from './types';
import { AddEntitiesOptions } from './addEntities';
import { SetEntities } from './setEntities';
export declare enum StoreActions {
    Update = 0,
    AddEntities = 1,
    SetEntities = 2,
    UpdateEntities = 3,
    RemoveEntities = 4,
    UpsertEntities = 5
}
interface RunStoreActionSetEntities<Entity = any> {
    payload: {
        data: SetEntities<Entity>;
    };
}
interface RunStoreActionAddEntities<Entity = any> {
    payload: {
        data: Entity[] | Entity;
        params?: AddEntitiesOptions;
    };
}
interface RunStoreActionUpdateEntities<Entity = any> {
    payload: {
        data: Partial<Entity>;
        entityIds: IDS;
    };
}
interface RunStoreActionRemoveEntities<Entity = any> {
    payload: {
        entityIds: IDS;
    };
}
interface RunStoreActionUpsertEntities<Entity = any> {
    payload: {
        data: Partial<Entity>[] | Partial<Entity>;
        entityIds?: IDS;
    };
}
interface RunStoreActionUpdate<State = any> {
    payload: {
        data: Partial<State>;
    };
}
/**
 * @example
 *
 * runStoreAction('books', StoreActions.Update, {
 *   payload: {
 *    data: { filter: 'New filter' }
 *   }
 * });
 */
export declare function runStoreAction<State = any>(storeName: string, action: StoreActions.Update, params: RunStoreActionUpdate<State>): any;
/**
 * @example
 *
 * runStoreAction('books', StoreActions.RemoveEntities, {
 *   payload: {
 *    entityIds: 2
 *   }
 * });
 */
export declare function runStoreAction<Entity = any>(storeName: string, action: StoreActions.RemoveEntities, params: RunStoreActionRemoveEntities<Entity>): any;
/**
 * @example
 *
 * runStoreAction('books', StoreActions.UpdateEntities, {
 *   payload: {
 *    data: { title: 'New title' },
 *    entityIds: 2
 *   }
 * });
 */
export declare function runStoreAction<Entity = any>(storeName: string, action: StoreActions.UpdateEntities, params: RunStoreActionUpdateEntities<Entity>): any;
/**
 * @example
 *
 * runStoreAction('books', StoreActions.SetEntities, {
 *   payload: {
 *    data: [{ id: 1 }, { id: 2 }]
 *   }
 * });
 */
export declare function runStoreAction<Entity = any>(storeName: string, action: StoreActions.SetEntities, params: RunStoreActionSetEntities<Entity>): any;
/**
 * @example
 *
 * runStoreAction('books', StoreActions.AddEntities, {
 *   payload: {
 *    data: { id: 1 }
 *   }
 * });
 */
export declare function runStoreAction<Entity = any>(storeName: string, action: StoreActions.AddEntities, params: RunStoreActionAddEntities<Entity>): any;
/**
 * @example
 *
 * runStoreAction('books', StoreActions.UpsertEntities, {
 *   payload: {
 *    data: { title: 'New Title' },
 *    entityIds: [1, 2]
 *   }
 * });
 * runStoreAction('books', StoreActions.UpsertEntities, {
 *   payload: {
 *    data: [{ id: 2, title: 'New Title' }, { id: 3, title: 'Another title'}],
 *   }
 * });
 */
export declare function runStoreAction<Entity = any>(storeName: string, action: StoreActions.UpsertEntities, params: RunStoreActionUpsertEntities<Entity>): any;
export {};
