Skip to content

Commit c781ef5

Browse files
committed
feat: add loading in the table data
1 parent 1c09753 commit c781ef5

File tree

1 file changed

+34
-21
lines changed
  • src/renderer/screens/DatabaseScreen/TableDataViewer

1 file changed

+34
-21
lines changed

src/renderer/screens/DatabaseScreen/TableDataViewer/index.tsx

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {
1111
faChevronRight,
1212
} from '@fortawesome/free-solid-svg-icons';
1313
import { EditableQueryResultProvider } from 'renderer/contexts/EditableQueryResultProvider';
14+
import QueryResultLoading from '../QueryResultViewer/QueryResultLoading';
15+
import { useDialog } from 'renderer/contexts/DialogProvider';
1416

1517
interface 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

Comments
 (0)