import { AthenaReadQueryClient, AthenaReadQueryDefinition, AthenaReadQueryExecutionResult, AthenaReadQueryFlatRow } from '../../../../athena/table-query-executor.js'; import { AthenaTableAsyncLoadingConfig } from '../core/data-table.js'; import { UseDataTablePaginationResult } from './use-data-table-pagination.js'; export type { AthenaReadQueryClient, AthenaReadQueryColumn, AthenaReadQueryDefinition, AthenaReadQueryExecutionInput, AthenaReadQueryExecutionResult, AthenaReadQueryFilter, AthenaReadQueryFilterOperator, AthenaReadQueryFilterValue, AthenaReadQueryFlatRow, AthenaReadQueryMode, AthenaReadQueryOrder, AthenaReadQueryOrderByInput, AthenaReadQueryOrderDirection, AthenaReadQueryRelationRef, AthenaTableFilter, AthenaTableFilterOperator, AthenaTableFilterValue, AthenaTableFlatRow, AthenaTableOrder, AthenaTableOrderDirection, AthenaTableQueryClient, AthenaTableQueryColumn, AthenaTableQueryDefinition, AthenaTableQueryExecutionInput, AthenaTableQueryExecutionResult, AthenaTableQueryMode, AthenaTableRelationRef } from '../../../../athena/table-query-executor.js'; /** * Primary Athena data-query options (paged). * * Powers table surfaces, KPI cards, and any consumer that needs * `AthenaReadQueryDefinition` / `AthenaTableQueryDefinition` execution over a * v3 Athena client (`createClient`), the root client from * `AthenaAuthProvider`, or an explicit legacy `dataProxy` route. * * Execution is delegated to `@xylex-group/athena` `executeAthenaReadQuery`. * This hook owns React Query caching, pagination UI state, and optional proxy. */ export interface UseAthenaQueryOptions { client?: AthenaReadQueryClient | null; /** * Legacy app-owned POST proxy. Prefer the root Athena client from * `AthenaAuthProvider` (or an explicit `client`). */ dataProxy?: string; /** Alias for initialPageSize. Prefer this in AthenaTable-facing configs. */ defaultRowsPerPage?: number; enabled?: boolean; initialPageSize?: number; onPageChange?: (page: number) => void; onPageSizeChange?: (pageSize: number) => void; /** Controlled pagination (e.g. via nuqs for URL state). */ page?: number; pageSize?: number; /** * Choices for the rows-per-page selector. * Only shown when `showPageSizeSelector` is true (opt-in, off by default). */ pageSizeOptions?: readonly number[]; query: AthenaReadQueryDefinition; queryKey?: readonly unknown[]; queryKeyPrefix?: readonly unknown[]; /** * TanStack Query poll interval in milliseconds. * `false` or omitted: no polling. */ refetchInterval?: number | false; /** * Opt-in rows-per-page selector in the pagination footer. * Off by default. */ showPageSizeSelector?: boolean; /** * Opt-in range summary (`Showing x–y of z results`) in the pagination footer. * Off by default. Forwarded to `WorkspacePagination` via the pagination props. */ showSummary?: boolean; } export interface UseAthenaQueryResult { debugAst?: AthenaReadQueryExecutionResult["debugAst"]; errorMessage: string; isFetching: boolean; isLoading: boolean; page: number; pageSize: number; pagination: UseDataTablePaginationResult; /** * Head-count from the query when present. Null when the server omitted a * total so pagination may synthesize `totalItems`. */ reportedTotalItems: number | null; rows: AthenaReadQueryFlatRow[]; totalItems: number; totalPages: number; } export type UseAthenaInfiniteQueryOptions = Omit & { initialPage?: number; scrollOffset?: AthenaTableAsyncLoadingConfig["scrollOffset"]; }; export interface UseAthenaInfiniteQueryResult { asyncLoading: AthenaTableAsyncLoadingConfig; debugAst?: AthenaReadQueryExecutionResult["debugAst"]; errorMessage: string; fetchNextPage: () => void; hasMore: boolean; isFetching: boolean; isLoading: boolean; isLoadingMore: boolean; page: number; pageSize: number; reset: () => void; rows: AthenaReadQueryFlatRow[]; totalItems: number; totalPages: number; } /** @deprecated Use {@link UseAthenaQueryOptions}. */ export type UseAthenaTableQueryOptions = UseAthenaQueryOptions; /** @deprecated Use {@link UseAthenaQueryResult}. */ export type UseAthenaTableQueryResult = UseAthenaQueryResult; /** @deprecated Use {@link UseAthenaInfiniteQueryOptions}. */ export type UseAthenaInfiniteTableQueryOptions = UseAthenaInfiniteQueryOptions; /** @deprecated Use {@link UseAthenaInfiniteQueryResult}. */ export type UseAthenaInfiniteTableQueryResult = UseAthenaInfiniteQueryResult; /** * Primary Athena data hook: runs an {@link AthenaReadQueryDefinition} * through a v3 Athena client (`createClient`), the root client from * `AthenaAuthProvider`, or an explicit legacy `dataProxy` route. * * Includes pagination state, React Query caching, expression/alias columns, * filters, order, findMany/select modes, and debug AST when available. * Use for tables, KPIs, charts, or any consumer of the portable query contract. * Imperative / server code should call `executeAthenaReadQuery` from * `@xylex-group/athena` directly. */ export declare function useAthenaQuery({ client, dataProxy, enabled, defaultRowsPerPage, initialPageSize, page, pageSize, pageSizeOptions, showPageSizeSelector, showSummary, onPageChange, onPageSizeChange, query, queryKey, queryKeyPrefix, refetchInterval }: UseAthenaQueryOptions): UseAthenaQueryResult; /** * Infinite / load-more variant of {@link useAthenaQuery}. * Same query definition, client/proxy path, and row flattening contract. */ export declare function useAthenaInfiniteQuery({ client, dataProxy, enabled, defaultRowsPerPage, initialPage, initialPageSize, query, queryKey, queryKeyPrefix, scrollOffset }: UseAthenaInfiniteQueryOptions): UseAthenaInfiniteQueryResult; /** * @deprecated Prefer {@link useAthenaQuery}. Same implementation; kept for * existing table consumers and generated showcase code. */ export declare const useAthenaTableQuery: typeof useAthenaQuery; /** * @deprecated Prefer {@link useAthenaInfiniteQuery}. Same implementation. */ export declare const useAthenaInfiniteTableQuery: typeof useAthenaInfiniteQuery;