instantdb-react-ui
Version:
Customizable react components for InstantDB (forms/lists/etc.)
44 lines • 2.85 kB
TypeScript
import { InstantReactWebDatabase } from '@instantdb/react';
import { ReactNode } from 'react';
import { ExtractIDBEntityType, IDBEntityType, IDBQueryType, IDBSchemaType } from '../form/use-idb-form';
interface BaseListProps<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> {
schema: TSchema;
db: InstantReactWebDatabase<any>;
entity: TEntity;
query?: TQuery;
render: (item: ExtractIDBEntityType<TSchema, TEntity, TQuery>, id: string) => ReactNode;
skeleton?: ReactNode;
noResults?: ReactNode;
}
type NormalListProps<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> = BaseListProps<TSchema, TEntity, TQuery> & {
mode?: 'normal';
};
type InfiniteListProps<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> = BaseListProps<TSchema, TEntity, TQuery> & {
mode: 'infinite';
pageSize?: number;
};
type PaginatedListProps<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> = BaseListProps<TSchema, TEntity, TQuery> & {
mode: 'paginated';
pagination: PaginationState<TSchema, TEntity, TQuery>;
};
export type IDBListProps<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> = NormalListProps<TSchema, TEntity, TQuery> | InfiniteListProps<TSchema, TEntity, TQuery> | PaginatedListProps<TSchema, TEntity, TQuery>;
interface PaginationOptions<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> {
query?: TQuery;
model: TEntity;
pageSize?: number;
schema: TSchema;
db: InstantReactWebDatabase<TSchema>;
}
interface PaginationState<TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>> extends PaginationOptions<TSchema, TEntity, TQuery> {
items: ExtractIDBEntityType<TSchema, TEntity, TQuery>[];
page: number;
totalPages: number;
totalItems: number;
goToPage: (page: number) => void;
}
/** Hook to get pagination state for a paginated list */
export declare const useIDBPagination: <TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>>(props: PaginationOptions<TSchema, TEntity, TQuery>) => PaginationState<TSchema, TEntity, TQuery>;
/** instantdb-react-ui list component, with support for normal, infinite, and paginated modes */
export declare const IDBList: <TSchema extends IDBSchemaType, TEntity extends IDBEntityType<TSchema>, TQuery extends IDBQueryType<TSchema>>(props: IDBListProps<TSchema, TEntity, TQuery>) => import("react/jsx-runtime").JSX.Element;
export {};
//# sourceMappingURL=list.d.ts.map