@replyke/core
Version:
Replyke: Build interactive apps with social features like comments, votes, feeds, user lists, notifications, and more.
79 lines (78 loc) • 3.85 kB
TypeScript
import { Entity } from "../../interfaces/models/Entity";
import { EntityListSortByOptions } 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 UseEntityListDataProps {
limit?: number;
sortBy?: EntityListSortByOptions;
timeFrame?: TimeFrame | null;
sourceId?: string | null;
userId?: string | null;
followedOnly?: boolean;
keywordsFilters?: KeywordsFilters | null;
titleFilters?: TitleFilters | null;
contentFilters?: ContentFilters | null;
attachmentsFilters?: AttachmentsFilters | null;
locationFilters?: LocationFilters | null;
metadataFilters?: MetadataFilters | null;
idle?: boolean;
onReset?: () => void;
infuseData?: (foreignId: string) => Promise<Record<string, any> | null>;
}
export interface UseEntityListDataValues {
entities: Entity[];
setEntities: React.Dispatch<React.SetStateAction<Entity[]>>;
infusedEntities: (Entity & Record<string, any>)[];
loading: boolean;
hasMore: boolean;
resetting: boolean;
sortBy: EntityListSortByOptions | null;
setSortBy: (sortBy: EntityListSortByOptions) => void;
timeFrame: TimeFrame | null;
setTimeFrame: (timeFrame: TimeFrame | null) => void;
sourceId: string | null;
setSourceId: (sourceId: string | null) => void;
userId: string | null;
setUserId: (userId: string | null) => void;
followedOnly: boolean;
setFollowedOnly: (state: boolean) => void;
keywordsFilters: KeywordsFilters | null;
updateKeywordsFilters: (type: "add" | "remove" | "reset" | "replace", key: "includes" | "doesNotInclude" | "both", value?: string | string[]) => void;
titleFilters: TitleFilters | null;
setTitleFilters: (metadata: TitleFilters | null) => void;
contentFilters: ContentFilters | null;
setContentFilters: (metadata: ContentFilters | null) => void;
attachmentsFilters: AttachmentsFilters | null;
setAttachmentsFilters: (metadata: AttachmentsFilters | null) => void;
locationFilters: LocationFilters | null;
setLocationFilters: (location: LocationFilters | null) => void;
metadataFilters: MetadataFilters | null;
setMetadataFilters: (metadata: MetadataFilters | null) => void;
kickstart: () => void;
loadMore: () => void;
resetEntities: () => Promise<void>;
createEntity: (props: {
foreignId?: string;
sourceId?: string;
title?: string;
content?: string;
attachments?: Record<string, any>[];
keywords?: string[];
location?: {
latitude: number;
longitude: number;
};
metadata?: Record<string, any>;
insertPosition?: "first" | "last";
}) => Promise<Entity | undefined>;
deleteEntity: (props: {
entityId: string;
}) => Promise<void>;
}
declare function useEntityListData({ limit, sortBy: sortByProp, timeFrame: timeFrameProp, sourceId: sourceIdProp, userId: userIdProp, followedOnly: followedOnlyProp, keywordsFilters: keywordsFiltersProp, locationFilters: locationFiltersProp, metadataFilters: metadataFiltersProp, titleFilters: titleFiltersProp, contentFilters: contentFiltersProp, attachmentsFilters: attachmentsFiltersProp, idle, onReset, infuseData, }: UseEntityListDataProps): UseEntityListDataValues;
export default useEntityListData;