@@ -11,6 +11,8 @@ import {
1111 faChevronRight ,
1212} from '@fortawesome/free-solid-svg-icons' ;
1313import { EditableQueryResultProvider } from 'renderer/contexts/EditableQueryResultProvider' ;
14+ import QueryResultLoading from '../QueryResultViewer/QueryResultLoading' ;
15+ import { useDialog } from 'renderer/contexts/DialogProvider' ;
1416
1517interface TableDataViewerProps {
1618 databaseName : string ;
@@ -29,6 +31,7 @@ export default function TableDataViewer({
2931 const [ loading , setLoading ] = useState ( true ) ;
3032 const [ totalRows , setTotalRows ] = useState ( 0 ) ;
3133 const [ data , setData ] = useState < QueryResultWithIndex [ ] > ( [ ] ) ;
34+ const { showErrorDialog } = useDialog ( ) ;
3235
3336 const [ sortedHeader , setSortedHeader ] = useState <
3437 | {
@@ -55,7 +58,11 @@ export default function TableDataViewer({
5558 . then ( ( result ) => {
5659 setTotalRows ( Number ( result [ 0 ] . result . rows [ 0 ] [ 'total' ] ?? 0 ) ) ;
5760 } )
58- . catch ( ) ;
61+ . catch ( ( e ) => {
62+ if ( e . message ) {
63+ showErrorDialog ( e . message ) ;
64+ }
65+ } ) ;
5966 } , [ databaseName , tableName , setTotalRows ] ) ;
6067
6168 useEffect ( ( ) => {
@@ -91,7 +98,11 @@ export default function TableDataViewer({
9198 end : page * PAGE_SIZE + result [ 0 ] . result . rows . length ,
9299 } ) ;
93100 } )
94- . catch ( ) ;
101+ . catch ( ( e ) => {
102+ if ( e . message ) {
103+ showErrorDialog ( e . message ) ;
104+ }
105+ } ) ;
95106 } , [
96107 runner ,
97108 page ,
@@ -110,6 +121,26 @@ export default function TableDataViewer({
110121 setPage ( ( prev ) => prev - 1 ) ;
111122 } , [ setPage ] ) ;
112123
124+ const footer = (
125+ < Toolbar shadowTop >
126+ < Toolbar . Filler />
127+ < Toolbar . Item
128+ icon = { < FontAwesomeIcon icon = { faChevronLeft } /> }
129+ disabled = { page === 0 }
130+ onClick = { onPrevPage }
131+ />
132+ < Toolbar . Text >
133+ { rowRange . start } -{ rowRange . end } /
134+ { totalRows . toLocaleString ( undefined , { maximumFractionDigits : 0 } ) }
135+ </ Toolbar . Text >
136+ < Toolbar . Item
137+ disabled = { PAGE_SIZE * ( page + 1 ) >= totalRows }
138+ icon = { < FontAwesomeIcon icon = { faChevronRight } /> }
139+ onClick = { onNextPage }
140+ />
141+ </ Toolbar >
142+ ) ;
143+
113144 return (
114145 < Layout >
115146 < Layout . Grow >
@@ -127,25 +158,7 @@ export default function TableDataViewer({
127158 ) }
128159 </ div >
129160 </ Layout . Grow >
130- < Layout . Fixed >
131- < Toolbar shadowTop >
132- < Toolbar . Filler />
133- < Toolbar . Item
134- icon = { < FontAwesomeIcon icon = { faChevronLeft } /> }
135- disabled = { page === 0 }
136- onClick = { onPrevPage }
137- />
138- < Toolbar . Text >
139- { rowRange . start } -{ rowRange . end } /
140- { totalRows . toLocaleString ( undefined , { maximumFractionDigits : 0 } ) }
141- </ Toolbar . Text >
142- < Toolbar . Item
143- disabled = { PAGE_SIZE * ( page + 1 ) >= totalRows }
144- icon = { < FontAwesomeIcon icon = { faChevronRight } /> }
145- onClick = { onNextPage }
146- />
147- </ Toolbar >
148- </ Layout . Fixed >
161+ < Layout . Fixed > { loading ? < QueryResultLoading /> : footer } </ Layout . Fixed >
149162 </ Layout >
150163 ) ;
151164}
0 commit comments