|
1 | | -import { |
2 | | - ApolloClient, |
3 | | - ApolloError, |
4 | | - NormalizedCacheObject, |
5 | | -} from "@apollo/client"; |
| 1 | +import { ApolloClient } from "@apollo/client"; |
6 | 2 | import { Inner as InnerDataTable } from "@components/DataTable"; |
7 | 3 | import DataTableLayout from "@components/layouts/DataTableLayout"; |
8 | 4 | import { Button, Loader } from "@dolthub/react-components"; |
9 | 5 | import { useSessionQueryHistory } from "@dolthub/react-hooks"; |
10 | | -import { |
11 | | - ColumnForSqlDataTableFragment, |
12 | | - QueryExecutionStatus, |
13 | | - RowForDataTableFragment, |
14 | | - useSqlSelectForSqlDataTableQuery, |
15 | | -} from "@gen/graphql-types"; |
16 | 6 | import { SqlQueryParams } from "@lib/params"; |
17 | 7 | import { useState } from "react"; |
18 | 8 | import { Maybe } from "@dolthub/web-utils"; |
| 9 | +import { ApolloErrorType } from "@lib/errors/types"; |
19 | 10 | import SqlMessage from "./SqlMessage"; |
20 | 11 | import { isReadOnlyDatabaseRevisionError } from "./SqlMessage/utils"; |
21 | 12 | import WorkingDiff from "./WorkingDiff"; |
22 | 13 | import css from "./index.module.css"; |
23 | 14 | import useSqlQuery from "./useSqlQuery"; |
| 15 | +import useSqlSelectRows, { RowsState } from "./useSqlSelectRows"; |
24 | 16 |
|
25 | 17 | type Props = { |
26 | 18 | params: SqlQueryParams; |
27 | 19 | }; |
28 | 20 |
|
29 | 21 | type InnerProps = Props & { |
30 | | - gqlError?: ApolloError; |
31 | | - executionStatus?: QueryExecutionStatus; |
32 | | - executionMessage?: string; |
33 | | - rows?: RowForDataTableFragment[]; |
34 | | - columns?: ColumnForSqlDataTableFragment[]; |
35 | | - client: ApolloClient<NormalizedCacheObject>; |
| 22 | + fetchMore: () => Promise<void>; |
| 23 | + state: RowsState; |
| 24 | + hasMore: boolean; |
| 25 | + client: ApolloClient<any>; |
| 26 | + error?: ApolloErrorType; |
36 | 27 | warnings?: Maybe<string[]>; |
37 | 28 | }; |
38 | 29 |
|
39 | 30 | function Inner(props: InnerProps) { |
40 | | - const isMut = useSqlQuery(props.params, props.client, props.gqlError); |
41 | | - const msg = <SqlMessage {...props} rowsLen={props.rows?.length ?? 0} />; |
| 31 | + const isMut = useSqlQuery(props.params, props.client, props.error); |
| 32 | + const msg = ( |
| 33 | + <SqlMessage |
| 34 | + params={props.params} |
| 35 | + {...props.state} |
| 36 | + rowsLen={props.state.rows.length} |
| 37 | + /> |
| 38 | + ); |
42 | 39 | return ( |
43 | 40 | <> |
44 | 41 | <DataTableLayout params={props.params}> |
45 | 42 | <InnerDataTable |
46 | 43 | params={props.params} |
47 | | - rows={props.rows} |
48 | | - columns={props.columns} |
49 | | - loadMore={async () => {}} |
| 44 | + rows={props.state.rows} |
| 45 | + columns={props.state.cols} |
| 46 | + loadMore={props.fetchMore} |
50 | 47 | message={msg} |
51 | 48 | warnings={props.warnings} |
| 49 | + hasMore={props.hasMore} |
52 | 50 | /> |
53 | 51 | </DataTableLayout> |
54 | | - {isMut && !isReadOnlyDatabaseRevisionError(props.gqlError) && ( |
| 52 | + {isMut && !isReadOnlyDatabaseRevisionError(props.error) && ( |
55 | 53 | <WorkingDiff {...props} /> |
56 | 54 | )} |
57 | 55 | </> |
58 | 56 | ); |
59 | 57 | } |
60 | 58 |
|
61 | 59 | function Query(props: Props) { |
62 | | - const { data, loading, error, client } = useSqlSelectForSqlDataTableQuery({ |
63 | | - variables: { |
64 | | - databaseName: props.params.databaseName, |
65 | | - refName: props.params.refName, |
66 | | - queryString: props.params.q, |
67 | | - schemaName: props.params.schemaName, |
68 | | - }, |
69 | | - fetchPolicy: "cache-and-network", |
70 | | - }); |
| 60 | + const { state, fetchMore, hasMore, loading, client } = useSqlSelectRows( |
| 61 | + props.params, |
| 62 | + ); |
71 | 63 |
|
72 | 64 | if (loading) return <Loader loaded={false} />; |
73 | 65 |
|
74 | 66 | return ( |
75 | 67 | <Inner |
76 | | - gqlError={error} |
77 | | - executionStatus={data?.sqlSelect.queryExecutionStatus} |
78 | | - executionMessage={data?.sqlSelect.queryExecutionMessage} |
79 | | - rows={data?.sqlSelect.rows} |
80 | | - columns={data?.sqlSelect.columns} |
81 | | - params={props.params} |
| 68 | + {...props} |
| 69 | + state={state} |
| 70 | + fetchMore={fetchMore} |
| 71 | + hasMore={hasMore} |
82 | 72 | client={client} |
83 | | - warnings={data?.sqlSelect.warnings} |
84 | 73 | /> |
85 | 74 | ); |
86 | 75 | } |
|
0 commit comments