import { AuthState, InstantSchemaDef, InstaQLResponse, PageInfoResponse, RuleParams, ValidQuery, } from '@instantdb/core'; import InstantReactWebDatabase from '../InstantReactWebDatabase.ts'; import { useContext } from 'react'; import { SuspsenseQueryContext } from './InstantSuspenseProvider.tsx'; export class InstantNextDatabase< Schema extends InstantSchemaDef, UseDates extends boolean, > extends InstantReactWebDatabase { public useSuspenseQuery = >( q: Q, opts?: { ruleParams: RuleParams; }, ): { data: InstaQLResponse>; pageInfo?: PageInfoResponse; } => { const ctx = useContext(SuspsenseQueryContext); if (!ctx) { throw new Error( 'useSuspenseQuery must be used within a SuspenseQueryProvider', ); } return ctx.useSuspenseQuery(q, opts) as any; }; useAuth = (): AuthState => { const ctx = useContext(SuspsenseQueryContext); const realAuthResult = this._useAuth(); if (!ctx) { return realAuthResult; } const { ssrUser } = ctx; if (ssrUser === undefined) { return realAuthResult; } if (realAuthResult.isLoading) { return { error: undefined, isLoading: false, user: ssrUser ?? undefined, // null -> undefined for the response }; } return realAuthResult; }; }