import { PayloadAction } from "@reduxjs/toolkit";
import { Entity } from "../../interfaces/models/Entity";
import { EntityListSortByOptions, SortDirection, SortType } from "../../interfaces/EntityListSortByOptions";
import { LocationFilters } from "../../interfaces/entity-filters/LocationFilters";
import { TimeFrame } from "../../interfaces/TimeFrame";
import { MetadataFilters } from "../../interfaces/entity-filters/MetadataFilters";
import { TitleFilters } from "../../interfaces/entity-filters/TitleFilters";
import { ContentFilters } from "../../interfaces/entity-filters/ContentFilters";
import { AttachmentsFilters } from "../../interfaces/entity-filters/AttachmentsFilters";
import { KeywordsFilters } from "../../interfaces/entity-filters/KeywordsFilters";
export interface EntityListState {
    entities: Entity[];
    page: number;
    loading: boolean;
    hasMore: boolean;
    error: string | null;
    lastFetched: number | null;
    sourceId: string | null;
    limit: number;
    sortBy: EntityListSortByOptions;
    sortDir: SortDirection | null;
    sortType: SortType;
    timeFrame: TimeFrame | null;
    userId: string | null;
    followedOnly: boolean;
    keywordsFilters: KeywordsFilters | null;
    titleFilters: TitleFilters | null;
    contentFilters: ContentFilters | null;
    attachmentsFilters: AttachmentsFilters | null;
    locationFilters: LocationFilters | null;
    metadataFilters: MetadataFilters | null;
}
export interface EntityListsState {
    lists: {
        [listId: string]: EntityListState;
    };
}
export interface EntityListFilters {
    sortBy?: EntityListSortByOptions;
    sortDir?: SortDirection | null;
    sortType?: SortType;
    timeFrame?: TimeFrame | null;
    userId?: string | null;
    followedOnly?: boolean;
    keywordsFilters?: KeywordsFilters | null;
    titleFilters?: TitleFilters | null;
    contentFilters?: ContentFilters | null;
    attachmentsFilters?: AttachmentsFilters | null;
    locationFilters?: LocationFilters | null;
    metadataFilters?: MetadataFilters | null;
}
export interface EntityListConfig {
    sourceId?: string | null;
    limit?: number;
}
export interface EntityListFetchOptions {
    resetUnspecified?: boolean;
    immediate?: boolean;
    clearImmediately?: boolean;
}
export interface FilterUpdatePayload {
    listId: string;
    filters: Partial<EntityListFilters>;
    config?: EntityListConfig;
    options?: EntityListFetchOptions;
}
export interface InitializeListPayload {
    listId: string;
}
export interface KeywordsUpdatePayload {
    listId: string;
    type: "add" | "remove" | "reset" | "replace";
    key: "includes" | "doesNotInclude" | "both";
    value?: string | string[];
}
export interface EntityAddPayload {
    listId: string;
    entity: Entity;
    insertPosition?: "first" | "last";
}
export interface EntityRemovePayload {
    listId: string;
    entityId: string;
}
export interface EntitiesSetPayload {
    listId: string;
    entities: Entity[];
    append?: boolean;
}
export declare const entityListsSlice: import("@reduxjs/toolkit").Slice<EntityListsState, {
    initializeList: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<InitializeListPayload>) => void;
    updateFiltersAndSort: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<FilterUpdatePayload>) => void;
    setEntityListLoading: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<{
        listId: string;
        loading: boolean;
    }>) => void;
    setEntityListEntities: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<EntitiesSetPayload>) => void;
    incrementPage: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<string>) => void;
    setEntityListHasMore: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<{
        listId: string;
        hasMore: boolean;
    }>) => void;
    setEntityListError: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<{
        listId: string;
        error: string | null;
    }>) => void;
    addEntity: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<EntityAddPayload>) => void;
    removeEntity: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<EntityRemovePayload>) => void;
    updateKeywordsFilters: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<KeywordsUpdatePayload>) => void;
    cleanupList: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<string>) => void;
    cleanupOldLists: (state: import("@reduxjs/toolkit").WritableDraft<EntityListsState>, action: PayloadAction<number>) => void;
}, "entityLists", "entityLists", import("@reduxjs/toolkit").SliceSelectors<EntityListsState>>;
export declare const initializeList: import("@reduxjs/toolkit").ActionCreatorWithPayload<InitializeListPayload, "entityLists/initializeList">, updateFiltersAndSort: import("@reduxjs/toolkit").ActionCreatorWithPayload<FilterUpdatePayload, "entityLists/updateFiltersAndSort">, setEntityListLoading: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
    listId: string;
    loading: boolean;
}, "entityLists/setEntityListLoading">, setEntityListEntities: import("@reduxjs/toolkit").ActionCreatorWithPayload<EntitiesSetPayload, "entityLists/setEntityListEntities">, incrementPage: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "entityLists/incrementPage">, setEntityListHasMore: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
    listId: string;
    hasMore: boolean;
}, "entityLists/setEntityListHasMore">, setEntityListError: import("@reduxjs/toolkit").ActionCreatorWithPayload<{
    listId: string;
    error: string | null;
}, "entityLists/setEntityListError">, addEntity: import("@reduxjs/toolkit").ActionCreatorWithPayload<EntityAddPayload, "entityLists/addEntity">, removeEntity: import("@reduxjs/toolkit").ActionCreatorWithPayload<EntityRemovePayload, "entityLists/removeEntity">, updateKeywordsFilters: import("@reduxjs/toolkit").ActionCreatorWithPayload<KeywordsUpdatePayload, "entityLists/updateKeywordsFilters">, cleanupList: import("@reduxjs/toolkit").ActionCreatorWithPayload<string, "entityLists/cleanupList">, cleanupOldLists: import("@reduxjs/toolkit").ActionCreatorWithPayload<number, "entityLists/cleanupOldLists">;
export declare const selectEntityList: ((state: any, listId: string) => EntityListState | undefined) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
    memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => EntityListState | undefined;
    dependencies: [(state: {
        entityLists: EntityListsState;
    }) => EntityListsState, (_: any, listId: string) => string];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
export declare const selectEntityListEntities: ((state: any, listId: string) => Entity[]) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListState | undefined) => Entity[];
    memoizedResultFunc: ((resultFuncArgs_0: EntityListState | undefined) => Entity[]) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => Entity[];
    dependencies: [((state: any, listId: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    } & {
        resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
        memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
            clearCache: () => void;
            resultsCount: () => number;
            resetResultsCount: () => void;
        };
        lastResult: () => EntityListState | undefined;
        dependencies: [(state: {
            entityLists: EntityListsState;
        }) => EntityListsState, (_: any, listId: string) => string];
        recomputations: () => number;
        resetRecomputations: () => void;
        dependencyRecomputations: () => number;
        resetDependencyRecomputations: () => void;
    } & {
        memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
        argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    }];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
export declare const selectEntityListLoading: ((state: any, listId: string) => boolean) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListState | undefined) => boolean;
    memoizedResultFunc: ((resultFuncArgs_0: EntityListState | undefined) => boolean) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => boolean;
    dependencies: [((state: any, listId: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    } & {
        resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
        memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
            clearCache: () => void;
            resultsCount: () => number;
            resetResultsCount: () => void;
        };
        lastResult: () => EntityListState | undefined;
        dependencies: [(state: {
            entityLists: EntityListsState;
        }) => EntityListsState, (_: any, listId: string) => string];
        recomputations: () => number;
        resetRecomputations: () => void;
        dependencyRecomputations: () => number;
        resetDependencyRecomputations: () => void;
    } & {
        memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
        argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    }];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
export declare const selectEntityListHasMore: ((state: any, listId: string) => boolean) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListState | undefined) => boolean;
    memoizedResultFunc: ((resultFuncArgs_0: EntityListState | undefined) => boolean) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => boolean;
    dependencies: [((state: any, listId: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    } & {
        resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
        memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
            clearCache: () => void;
            resultsCount: () => number;
            resetResultsCount: () => void;
        };
        lastResult: () => EntityListState | undefined;
        dependencies: [(state: {
            entityLists: EntityListsState;
        }) => EntityListsState, (_: any, listId: string) => string];
        recomputations: () => number;
        resetRecomputations: () => void;
        dependencyRecomputations: () => number;
        resetDependencyRecomputations: () => void;
    } & {
        memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
        argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    }];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
export declare const selectEntityListFilters: ((state: any, listId: string) => {
    sortBy: EntityListSortByOptions;
    sortDir: SortDirection | null;
    sortType: SortType;
    timeFrame: TimeFrame | null;
    userId: string | null;
    followedOnly: boolean;
    keywordsFilters: KeywordsFilters | null;
    titleFilters: TitleFilters | null;
    contentFilters: ContentFilters | null;
    attachmentsFilters: AttachmentsFilters | null;
    locationFilters: LocationFilters | null;
    metadataFilters: MetadataFilters | null;
} | null) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListState | undefined) => {
        sortBy: EntityListSortByOptions;
        sortDir: SortDirection | null;
        sortType: SortType;
        timeFrame: TimeFrame | null;
        userId: string | null;
        followedOnly: boolean;
        keywordsFilters: KeywordsFilters | null;
        titleFilters: TitleFilters | null;
        contentFilters: ContentFilters | null;
        attachmentsFilters: AttachmentsFilters | null;
        locationFilters: LocationFilters | null;
        metadataFilters: MetadataFilters | null;
    } | null;
    memoizedResultFunc: ((resultFuncArgs_0: EntityListState | undefined) => {
        sortBy: EntityListSortByOptions;
        sortDir: SortDirection | null;
        sortType: SortType;
        timeFrame: TimeFrame | null;
        userId: string | null;
        followedOnly: boolean;
        keywordsFilters: KeywordsFilters | null;
        titleFilters: TitleFilters | null;
        contentFilters: ContentFilters | null;
        attachmentsFilters: AttachmentsFilters | null;
        locationFilters: LocationFilters | null;
        metadataFilters: MetadataFilters | null;
    } | null) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => {
        sortBy: EntityListSortByOptions;
        sortDir: SortDirection | null;
        sortType: SortType;
        timeFrame: TimeFrame | null;
        userId: string | null;
        followedOnly: boolean;
        keywordsFilters: KeywordsFilters | null;
        titleFilters: TitleFilters | null;
        contentFilters: ContentFilters | null;
        attachmentsFilters: AttachmentsFilters | null;
        locationFilters: LocationFilters | null;
        metadataFilters: MetadataFilters | null;
    } | null;
    dependencies: [((state: any, listId: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    } & {
        resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
        memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
            clearCache: () => void;
            resultsCount: () => number;
            resetResultsCount: () => void;
        };
        lastResult: () => EntityListState | undefined;
        dependencies: [(state: {
            entityLists: EntityListsState;
        }) => EntityListsState, (_: any, listId: string) => string];
        recomputations: () => number;
        resetRecomputations: () => void;
        dependencyRecomputations: () => number;
        resetDependencyRecomputations: () => void;
    } & {
        memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
        argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    }];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
export declare const selectEntityListConfig: ((state: any, listId: string) => {
    sourceId: string | null;
    limit: number;
} | null) & {
    clearCache: () => void;
    resultsCount: () => number;
    resetResultsCount: () => void;
} & {
    resultFunc: (resultFuncArgs_0: EntityListState | undefined) => {
        sourceId: string | null;
        limit: number;
    } | null;
    memoizedResultFunc: ((resultFuncArgs_0: EntityListState | undefined) => {
        sourceId: string | null;
        limit: number;
    } | null) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    };
    lastResult: () => {
        sourceId: string | null;
        limit: number;
    } | null;
    dependencies: [((state: any, listId: string) => EntityListState | undefined) & {
        clearCache: () => void;
        resultsCount: () => number;
        resetResultsCount: () => void;
    } & {
        resultFunc: (resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined;
        memoizedResultFunc: ((resultFuncArgs_0: EntityListsState, resultFuncArgs_1: string) => EntityListState | undefined) & {
            clearCache: () => void;
            resultsCount: () => number;
            resetResultsCount: () => void;
        };
        lastResult: () => EntityListState | undefined;
        dependencies: [(state: {
            entityLists: EntityListsState;
        }) => EntityListsState, (_: any, listId: string) => string];
        recomputations: () => number;
        resetRecomputations: () => void;
        dependencyRecomputations: () => number;
        resetDependencyRecomputations: () => void;
    } & {
        memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
        argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    }];
    recomputations: () => number;
    resetRecomputations: () => void;
    dependencyRecomputations: () => number;
    resetDependencyRecomputations: () => void;
} & {
    memoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
    argsMemoize: typeof import("@reduxjs/toolkit").weakMapMemoize;
};
declare const _default: import("@reduxjs/toolkit").Reducer<EntityListsState>;
export default _default;
