Skip to content

Commit 547ac8e

Browse files
committed
Resizable columns
1 parent 32c91f2 commit 547ac8e

1 file changed

Lines changed: 31 additions & 0 deletions

File tree

apps/webapp/app/components/code/TSQLResultsTable.tsx

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import {
55
flexRender,
66
type ColumnDef,
77
type CellContext,
8+
type ColumnResizeMode,
89
} from "@tanstack/react-table";
910
import { useVirtualizer } from "@tanstack/react-virtual";
1011
import { formatDurationMilliseconds, MachinePresetName } from "@trigger.dev/core/v3";
@@ -663,9 +664,13 @@ export const TSQLResultsTable = memo(function TSQLResultsTable({
663664
);
664665

665666
// Initialize TanStack Table
667+
// Column resize mode: 'onChange' for real-time feedback, 'onEnd' for performance
668+
const columnResizeMode: ColumnResizeMode = "onChange";
669+
666670
const table = useReactTable({
667671
data: rows,
668672
columns: columnDefs,
673+
columnResizeMode,
669674
getCoreRowModel: getCoreRowModel(),
670675
});
671676

@@ -705,6 +710,7 @@ export const TSQLResultsTable = memo(function TSQLResultsTable({
705710
return (
706711
<th
707712
key={header.id}
713+
className="group/header relative"
708714
style={{
709715
display: "flex",
710716
width: header.getSize(),
@@ -716,6 +722,18 @@ export const TSQLResultsTable = memo(function TSQLResultsTable({
716722
>
717723
{flexRender(header.column.columnDef.header, header.getContext())}
718724
</HeaderCellContent>
725+
{/* Column resizer */}
726+
<div
727+
onDoubleClick={() => header.column.resetSize()}
728+
onMouseDown={header.getResizeHandler()}
729+
onTouchStart={header.getResizeHandler()}
730+
className={cn(
731+
"absolute right-0 top-0 h-full w-1 cursor-col-resize touch-none select-none",
732+
"opacity-0 group-hover/header:opacity-100",
733+
"bg-charcoal-600 hover:bg-primary",
734+
header.column.getIsResizing() && "bg-primary opacity-100"
735+
)}
736+
/>
719737
</th>
720738
);
721739
})}
@@ -759,6 +777,7 @@ export const TSQLResultsTable = memo(function TSQLResultsTable({
759777
return (
760778
<th
761779
key={header.id}
780+
className="group/header relative"
762781
style={{
763782
display: "flex",
764783
width: header.getSize(),
@@ -770,6 +789,18 @@ export const TSQLResultsTable = memo(function TSQLResultsTable({
770789
>
771790
{flexRender(header.column.columnDef.header, header.getContext())}
772791
</HeaderCellContent>
792+
{/* Column resizer */}
793+
<div
794+
onDoubleClick={() => header.column.resetSize()}
795+
onMouseDown={header.getResizeHandler()}
796+
onTouchStart={header.getResizeHandler()}
797+
className={cn(
798+
"absolute right-0 top-0 h-full w-1 cursor-col-resize touch-none select-none",
799+
"opacity-0 group-hover/header:opacity-100",
800+
"bg-charcoal-600 hover:bg-primary",
801+
header.column.getIsResizing() && "bg-primary opacity-100"
802+
)}
803+
/>
773804
</th>
774805
);
775806
})}

0 commit comments

Comments
 (0)