import { QueryClient } from '@tanstack/react-query'; import { ArchbaseRemoteDataSourceV2 } from './ArchbaseRemoteDataSourceV2'; import { ArchbaseRemoteApiService } from '../../service/ArchbaseRemoteApiService'; import { ArchbaseQueryFilter } from '@archbase/core'; /** * Configuration for TanStack Query integration */ export interface ArchbaseTanStackQueryConfig { /** Cache time in milliseconds (default: 5 minutes) */ cacheTime?: number; /** Stale time in milliseconds (default: 30 seconds) */ staleTime?: number; /** Refetch on window focus (default: false) */ refetchOnWindowFocus?: boolean; /** Refetch on reconnect (default: true) */ refetchOnReconnect?: boolean; /** Retry count (default: 3) */ retry?: number; /** Enable background updates (default: true) */ refetchInterval?: number | false; } /** * Default TanStack Query configuration */ export declare const DEFAULT_TANSTACK_CONFIG: ArchbaseTanStackQueryConfig; /** * Query keys factory for consistent caching */ export declare class ArchbaseQueryKeys { private static base; static all: readonly ["archbase"]; static datasource: (name: string) => readonly ["archbase", "datasource", string]; static records: (name: string, filter?: ArchbaseQueryFilter, page?: number) => readonly ["archbase", "datasource", string, "records", { readonly filter: ArchbaseQueryFilter; readonly page: number; }]; static record: (name: string, id: any) => readonly ["archbase", "datasource", string, "record", any]; static count: (name: string, filter?: ArchbaseQueryFilter) => readonly ["archbase", "datasource", string, "count", { readonly filter: ArchbaseQueryFilter; }]; } /** * Enhanced RemoteDataSource with TanStack Query integration */ export declare class ArchbaseRemoteDataSourceV2WithQuery extends ArchbaseRemoteDataSourceV2 { private queryClient; private queryConfig; constructor(config: { name: string; service: ArchbaseRemoteApiService; queryClient: QueryClient; pageSize?: number; queryConfig?: ArchbaseTanStackQueryConfig; onStateChange?: (prevRecords: T[], newRecords: T[]) => void; }); /** * Load data with TanStack Query caching */ loadWithQuery(filter?: ArchbaseQueryFilter, page?: number): Promise; /** * Save record with optimistic updates */ saveWithOptimisticUpdate(): Promise; /** * Remove record with optimistic updates */ removeWithOptimisticUpdate(): Promise; /** * Prefetch next page for better UX */ prefetchNextPage(): Promise; /** * Invalidate all cache for this datasource */ invalidateCache(): Promise; /** * Get cached data without triggering a request */ getCachedData(filter?: ArchbaseQueryFilter, page?: number): T[] | undefined; /** * Check if data is stale and needs refresh */ isDataStale(filter?: ArchbaseQueryFilter, page?: number): boolean; } /** * Result type for useArchbaseRemoteDataSourceWithQuery hook */ export interface UseArchbaseRemoteDataSourceWithQueryResult { dataSource: ArchbaseRemoteDataSourceV2WithQuery; isLoading: boolean; isError: boolean; error: Error | null; isRefetching: boolean; records: T[]; currentRecord: T | undefined; totalRecords: number; currentPage: number; totalPages: number; refetch: () => Promise; save: () => Promise; remove: () => Promise; invalidateCache: () => Promise; prefetchNextPage: () => Promise; isSaving: boolean; isRemoving: boolean; saveError: Error | null; removeError: Error | null; } /** * React Hook for RemoteDataSource with TanStack Query */ export declare function useArchbaseRemoteDataSourceWithQuery(config: { name: string; service: ArchbaseRemoteApiService; pageSize?: number; queryConfig?: ArchbaseTanStackQueryConfig; filter?: ArchbaseQueryFilter; enabled?: boolean; }): UseArchbaseRemoteDataSourceWithQueryResult; /** * Hook for real-time data synchronization */ export declare function useArchbaseRealTimeSync(dataSourceName: string, options?: { interval?: number; enabled?: boolean; }): void;