diff --git a/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx index 23ee69fa8b5..d9adfd120e3 100644 --- a/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx +++ b/apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.tsx @@ -143,6 +143,8 @@ export const UnifiedLogs = () => { const { data: unifiedLogsData, + error, + isError, isLoading, isFetching, isFetchingNextPage, @@ -152,6 +154,7 @@ export const UnifiedLogs = () => { fetchNextPage, fetchPreviousPage, } = useUnifiedLogsInfiniteQuery({ projectRef, search: searchParameters }) + const { data: counts, isPending: isLoadingCounts, @@ -161,6 +164,7 @@ export const UnifiedLogs = () => { projectRef, search: searchParameters, }) + const { data: unifiedLogsChart = [], isFetching: isFetchingCharts, @@ -355,6 +359,7 @@ export const UnifiedLogs = () => { return ( { searchParameters={searchParameters} enableColumnOrdering={true} isFetching={isFetching} + isError={isError} isLoading={isLoading} isLoadingCounts={isLoadingCounts} getFacetedUniqueValues={getFacetedUniqueValues(facets)} diff --git a/apps/studio/components/ui/DataTable/DataTableInfinite.tsx b/apps/studio/components/ui/DataTable/DataTableInfinite.tsx index be67cab38aa..e190f9d6dee 100644 --- a/apps/studio/components/ui/DataTable/DataTableInfinite.tsx +++ b/apps/studio/components/ui/DataTable/DataTableInfinite.tsx @@ -7,6 +7,7 @@ import { Fragment, UIEvent, useCallback, useRef } from 'react' import { Button, cn } from 'ui' import { ShimmeringLoader } from 'ui-patterns' +import AlertError from '../AlertError' import { formatCompactNumber } from './DataTable.utils' import { useDataTable } from './providers/DataTableProvider' import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from './Table' @@ -44,7 +45,7 @@ export function DataTableInfinite({ setColumnVisibility, searchParamsParser, }: DataTableInfiniteProps) { - const { table, isLoading, isFetching } = useDataTable() + const { table, error, isError, isLoading, isFetching } = useDataTable() const tableRef = useRef(null) const headerGroups = table.getHeaderGroups() @@ -145,6 +146,20 @@ export function DataTableInfinite({ ))} + ) : isError ? ( + + + +
+ +
+
+
+
) : ( diff --git a/apps/studio/components/ui/DataTable/providers/DataTableProvider.tsx b/apps/studio/components/ui/DataTable/providers/DataTableProvider.tsx index 393377026b0..9dfd396da82 100644 --- a/apps/studio/components/ui/DataTable/providers/DataTableProvider.tsx +++ b/apps/studio/components/ui/DataTable/providers/DataTableProvider.tsx @@ -11,6 +11,7 @@ import { createContext, ReactNode, useContext, useMemo } from 'react' import { DataTableFilterField } from '../DataTable.types' import { QuerySearchParamsType } from '@/components/interfaces/UnifiedLogs/UnifiedLogs.types' +import { ResponseError } from '@/types' // REMINDER: read about how to move controlled state out of the useReactTable hook // https://github.com/TanStack/table/discussions/4005#discussioncomment-7303569 @@ -28,11 +29,13 @@ interface DataTableStateContextType { interface DataTableBaseContextType { table: Table + error: ResponseError | null filterFields: DataTableFilterField[] columns: ColumnDef[] - isFetching?: boolean - isLoading?: boolean - isLoadingCounts?: boolean + isFetching: boolean + isError: boolean + isLoading: boolean + isLoadingCounts: boolean getFacetedUniqueValues?: (table: Table, columnId: string) => Map getFacetedMinMaxValues?: (table: Table, columnId: string) => undefined | [number, number] } diff --git a/apps/studio/data/logs/unified-logs-infinite-query.ts b/apps/studio/data/logs/unified-logs-infinite-query.ts index ea9fb942495..c877348502a 100644 --- a/apps/studio/data/logs/unified-logs-infinite-query.ts +++ b/apps/studio/data/logs/unified-logs-infinite-query.ts @@ -116,6 +116,7 @@ export async function getUnifiedLogs( }) if (error) handleError(error) + if (data.error) handleError(new Error(data.error as string)) const resultData = data?.result ?? []