Skip to content

Commit e9d3554

Browse files
authored
Resize for results grid (#18049)
* resize for results grid * fix white space * fix lint * fix lint
1 parent 63aa4f4 commit e9d3554

File tree

2 files changed

+39
-4
lines changed

2 files changed

+39
-4
lines changed

src/reactviews/pages/QueryResult/queryResultPane.tsx

+30-3
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import {
2121
useTableColumnSizing_unstable,
2222
useTableFeatures,
2323
} from "@fluentui/react-components";
24-
import { useContext, useRef, useState } from "react";
24+
import { useContext, useEffect, useRef, useState } from "react";
2525
import { OpenFilled } from "@fluentui/react-icons";
2626
import { QueryResultContext } from "./queryResultStateProvider";
2727
import * as qr from "../../../sharedInterfaces/queryResult";
@@ -106,6 +106,33 @@ export const QueryResultPane = () => {
106106
renderHeaderCell: () => <>{MESSAGE}</>,
107107
}),
108108
];
109+
const gridParentRef = useRef<HTMLDivElement>(null);
110+
const ribbonRef = useRef<HTMLDivElement>(null);
111+
// Resize grid when parent element resizes
112+
useEffect(() => {
113+
const gridParent = gridParentRef.current;
114+
if (!gridParent) {
115+
return;
116+
}
117+
const observer = new ResizeObserver(() => {
118+
if (!gridRef.current) {
119+
return;
120+
}
121+
if (!ribbonRef.current) {
122+
return;
123+
}
124+
if (gridParent.clientWidth && gridParent.clientHeight) {
125+
gridRef.current.resizeGrid(
126+
gridParent.clientWidth,
127+
gridParent.clientHeight -
128+
ribbonRef.current.clientHeight -
129+
5,
130+
);
131+
}
132+
});
133+
observer.observe(gridParent);
134+
return () => observer.disconnect();
135+
}, []);
109136
const [columns] =
110137
useState<TableColumnDefinition<qr.IMessage>[]>(columnsDef);
111138
const items = metadata?.messages ?? [];
@@ -145,8 +172,8 @@ export const QueryResultPane = () => {
145172
const gridRef = useRef<SlickGridHandle>(null);
146173

147174
return (
148-
<div className={classes.root}>
149-
<div className={classes.ribbon}>
175+
<div className={classes.root} ref={gridParentRef}>
176+
<div className={classes.ribbon} ref={ribbonRef}>
150177
<TabList
151178
size="medium"
152179
selectedValue={metadata.tabStates!.resultPaneTab}

src/reactviews/pages/QueryResult/slickgrid.tsx

+9-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import {
2727
DbCellValue,
2828
ResultSetSummary,
2929
} from "../../../sharedInterfaces/queryResult";
30+
import * as DOM from "./table/dom";
3031

3132
window.jQuery = $ as any;
3233
require("slickgrid/lib/jquery.event.drag-2.3.0.js");
@@ -52,7 +53,9 @@ export interface SlickGridProps {
5253

5354
export interface SlickGridHandle {
5455
refreshGrid: () => void;
56+
resizeGrid: (width: number, height: number) => void;
5557
}
58+
let table: Table<any>;
5659

5760
const SlickGrid = forwardRef<SlickGridHandle, SlickGridProps>(
5861
(props: SlickGridProps, ref) => {
@@ -61,6 +64,10 @@ const SlickGrid = forwardRef<SlickGridHandle, SlickGridProps>(
6164
const refreshGrid = () => {
6265
setRefreshKey((prev) => prev + 1);
6366
};
67+
const resizeGrid = (width: number, height: number) => {
68+
const dimension = new DOM.Dimension(width, height);
69+
table.layout(dimension);
70+
};
6471
useEffect(() => {
6572
const ROW_HEIGHT = 25;
6673
if (!props.resultSetSummary) {
@@ -190,7 +197,7 @@ const SlickGrid = forwardRef<SlickGridHandle, SlickGridProps>(
190197
undefined,
191198
undefined,
192199
);
193-
var table = new Table(
200+
table = new Table(
194201
div,
195202
defaultTableStyles,
196203
{ dataProvider: dataProvider, columns: columns },
@@ -211,6 +218,7 @@ const SlickGrid = forwardRef<SlickGridHandle, SlickGridProps>(
211218

212219
useImperativeHandle(ref, () => ({
213220
refreshGrid,
221+
resizeGrid,
214222
}));
215223

216224
return <div ref={gridContainerRef}></div>;

0 commit comments

Comments
 (0)