UNPKG

@baqhub/sdk-react

Version:

The official React SDK for the BAQ federated app platform.

55 lines (54 loc) 2.4 kB
import { AnyBlobLink, AnyRecord, BlobResponse, Client, Handler, NoContentRecord, Query, RecordKey } from "@baqhub/sdk"; import { FindClient } from "./storeIdentity.js"; import { QueryRefreshSpec, StoreQuery } from "./storeQuery.js"; import { UpdateRecords } from "./storeTypes.js"; export type RecordVersions<T extends AnyRecord> = { [K: string]: T | NoContentRecord; }; export type Records<T extends AnyRecord> = { [K: RecordKey<T | NoContentRecord>]: T | NoContentRecord; }; export interface RecordsState<T extends AnyRecord> { dictionary: Records<T>; list: ReadonlyArray<T | NoContentRecord>; } export interface EntityRecordsState<T extends AnyRecord> { [K: string]: RecordsState<T>; } export type Queries<T extends AnyRecord> = { [K: number]: StoreQuery<T, T>; }; export type QueriesList<T extends AnyRecord> = ReadonlyArray<StoreQuery<T, T>>; export type Subscription = () => void; export type Selector<T extends AnyRecord, R> = (state: EntityRecordsState<T>) => R; export interface RegisterQueryOptions { isFetch: boolean; isSync: boolean; isLocalTracked: boolean; refreshSpec: QueryRefreshSpec | undefined; loadMorePageSize: number | undefined; } export interface StoreContextProps<T extends AnyRecord> { isAuthenticated: boolean; entity: string; findClient: FindClient; discover: Client["discover"]; downloadBlob: Client["downloadBlob"]; versions: RecordVersions<T>; updateRecords: UpdateRecords<T>; buildBlobUrl: <R extends T>(record: R, blob: AnyBlobLink, expiresInSeconds?: number) => string; uploadBlob: (blob: Blob, signal?: AbortSignal) => Promise<BlobResponse>; onDisconnectRequest: Handler; subscribeToState: (callback: () => void) => () => void; getStateSnapshot: () => EntityRecordsState<T>; subscribeToQueries: (callback: () => void) => () => void; getQueriesSnapshot: () => Queries<T>; subscribeToLiveQueries: (callback: () => void) => () => void; getLiveQueriesSnapshot: () => QueriesList<T>; registerQuery: <Q extends T>(query: Query<Q>, options: RegisterQueryOptions) => StoreQuery<T, Q>; registerLiveQuery: (query: StoreQuery<T, T>) => (() => void) | undefined; } export declare function buildStoreContext<T extends AnyRecord>(): { StoreContext: import("react").Context<StoreContextProps<T> | undefined>; useStoreContext: () => StoreContextProps<T>; };