@baqhub/sdk-react
Version:
The official React SDK for the BAQ federated app platform.
55 lines (54 loc) • 2.4 kB
TypeScript
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>;
};