diff --git a/apps/design-system/package.json b/apps/design-system/package.json
index aa0c8da1057..4694e992bfd 100644
--- a/apps/design-system/package.json
+++ b/apps/design-system/package.json
@@ -31,7 +31,7 @@
"next-contentlayer2": "0.4.6",
"next-themes": "^0.3.0",
"react": "catalog:",
- "react-data-grid": "7.0.0-beta.41",
+ "react-data-grid": "7.0.0-beta.47",
"react-day-picker": "^9.11.1",
"react-dom": "catalog:",
"react-hook-form": "^7.45.0",
diff --git a/apps/design-system/registry/default/example/data-grid-demo.tsx b/apps/design-system/registry/default/example/data-grid-demo.tsx
index 461d63e5406..66af73297fa 100644
--- a/apps/design-system/registry/default/example/data-grid-demo.tsx
+++ b/apps/design-system/registry/default/example/data-grid-demo.tsx
@@ -33,7 +33,7 @@ export default function DataGridDemo() {
headerCellClass: 'border-default border-r border-b',
renderCell: ({ row }) => {
// eslint-disable-next-line react-hooks/rules-of-hooks
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useRowSelection()
return (
@@ -43,7 +43,6 @@ export default function DataGridDemo() {
e.stopPropagation()
onRowSelectionChange({
row,
- type: 'ROW',
checked: !isRowSelected,
isShiftClick: e.shiftKey,
})
diff --git a/apps/studio/components/grid/components/grid/AddColumn.tsx b/apps/studio/components/grid/components/grid/AddColumn.tsx
index 5cf1478412e..69c0a4dbef8 100644
--- a/apps/studio/components/grid/components/grid/AddColumn.tsx
+++ b/apps/studio/components/grid/components/grid/AddColumn.tsx
@@ -1,10 +1,10 @@
import { Plus } from 'lucide-react'
import type { CalculatedColumn } from 'react-data-grid'
-
-import { useTableEditorStateSnapshot } from 'state/table-editor'
import { Button } from 'ui'
+
import { ADD_COLUMN_KEY } from '../../constants'
import { DefaultFormatter } from '../formatter/DefaultFormatter'
+import { useTableEditorStateSnapshot } from '@/state/table-editor'
export const AddColumn: CalculatedColumn
= {
key: ADD_COLUMN_KEY,
@@ -15,7 +15,6 @@ export const AddColumn: CalculatedColumn = {
resizable: false,
sortable: false,
frozen: false,
- isLastFrozenColumn: false,
renderHeaderCell() {
return
},
diff --git a/apps/studio/components/grid/components/grid/Grid.tsx b/apps/studio/components/grid/components/grid/Grid.tsx
index 2079e3692ea..e15bca7e474 100644
--- a/apps/studio/components/grid/components/grid/Grid.tsx
+++ b/apps/studio/components/grid/components/grid/Grid.tsx
@@ -203,7 +203,7 @@ export const Grid = memo(
// Compute rowClass function to style pending add/delete rows
const computedRowClass = useMemo(() => {
return (row: SupaRow) => {
- const classes: string[] = []
+ const classes: string[] = ['[&>.rdg-cell]:flex', '[&>.rdg-cell]:items-center']
// Call the original rowClass if provided
if (rowClass) {
diff --git a/apps/studio/components/grid/components/grid/SelectColumn.tsx b/apps/studio/components/grid/components/grid/SelectColumn.tsx
index 0e07057b921..8596cc65772 100644
--- a/apps/studio/components/grid/components/grid/SelectColumn.tsx
+++ b/apps/studio/components/grid/components/grid/SelectColumn.tsx
@@ -5,14 +5,15 @@ import {
RenderCellProps,
RenderGroupCellProps,
RenderHeaderCellProps,
+ useHeaderRowSelection,
useRowSelection,
} from 'react-data-grid'
-import { ButtonTooltip } from 'components/ui/ButtonTooltip'
-import { useTableEditorStateSnapshot } from 'state/table-editor'
-import { useTableEditorTableStateSnapshot } from 'state/table-editor-table'
import { SELECT_COLUMN_KEY } from '../../constants'
import type { SupaRow } from '../../types'
+import { ButtonTooltip } from '@/components/ui/ButtonTooltip'
+import { useTableEditorStateSnapshot } from '@/state/table-editor'
+import { useTableEditorTableStateSnapshot } from '@/state/table-editor-table'
export const SelectColumn: CalculatedColumn = {
key: SELECT_COLUMN_KEY,
@@ -23,25 +24,24 @@ export const SelectColumn: CalculatedColumn = {
resizable: false,
sortable: false,
frozen: true,
- isLastFrozenColumn: false,
renderHeaderCell: (props: RenderHeaderCellProps) => {
// [Joshen] formatter is actually a valid React component, so we can use hooks here
// eslint-disable-next-line react-hooks/rules-of-hooks
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useHeaderRowSelection()
return (
onRowSelectionChange({ type: 'HEADER', checked })}
+ onChange={(checked) => onRowSelectionChange({ checked })}
/>
)
},
renderCell: (props: RenderCellProps) => {
// [Alaister] formatter is actually a valid React component, so we can use hooks here
// eslint-disable-next-line react-hooks/rules-of-hooks
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useRowSelection()
return (
= {
value={isRowSelected}
row={props.row}
onChange={(checked, isShiftClick) => {
- onRowSelectionChange({ type: 'ROW', row: props.row, checked, isShiftClick })
+ onRowSelectionChange({ row: props.row, checked, isShiftClick })
}}
// Stop propagation to prevent row selection
onClick={stopPropagation}
@@ -59,7 +59,7 @@ export const SelectColumn: CalculatedColumn = {
renderGroupCell: (props: RenderGroupCellProps) => {
// [Alaister] groupFormatter is actually a valid React component, so we can use hooks here
// eslint-disable-next-line react-hooks/rules-of-hooks
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useRowSelection()
return (
= {
value={isRowSelected}
onChange={(checked) => {
onRowSelectionChange({
- type: 'ROW',
row: props.row,
checked,
isShiftClick: false,
diff --git a/apps/studio/components/grid/utils/gridColumns.tsx b/apps/studio/components/grid/utils/gridColumns.tsx
index 064f055ec3b..54d50cdc72b 100644
--- a/apps/studio/components/grid/utils/gridColumns.tsx
+++ b/apps/studio/components/grid/utils/gridColumns.tsx
@@ -1,4 +1,3 @@
-import { COLUMN_MIN_WIDTH } from 'components/grid/constants'
import { CalculatedColumn, RenderCellProps } from 'react-data-grid'
import { DefaultValue } from '../components/common/DefaultValue'
@@ -39,6 +38,7 @@ import {
isTextColumn,
isTimeColumn,
} from './types'
+import { COLUMN_MIN_WIDTH } from '@/components/grid/constants'
export const ESTIMATED_CHARACTER_PIXEL_WIDTH = 9
@@ -73,7 +73,6 @@ export function getGridColumns(
width: columnWidth,
minWidth: COLUMN_MIN_WIDTH,
frozen: false,
- isLastFrozenColumn: false,
renderHeaderCell: (props) => (
{
// This is actually a valid React component, so we can use hooks here
// eslint-disable-next-line react-hooks/rules-of-hooks
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useRowSelection()
const value = row?.[col.id]
const user = users?.find((u) => u.id === row.id)
@@ -329,7 +329,6 @@ export const formatUserColumns = ({
e.stopPropagation()
onRowSelectionChange({
row,
- type: 'ROW',
checked: !isRowSelected,
isShiftClick: e.shiftKey,
})
diff --git a/apps/studio/components/interfaces/Auth/Users/UsersGridComponents.tsx b/apps/studio/components/interfaces/Auth/Users/UsersGridComponents.tsx
index 13a085c76ff..67d4b04fb27 100644
--- a/apps/studio/components/interfaces/Auth/Users/UsersGridComponents.tsx
+++ b/apps/studio/components/interfaces/Auth/Users/UsersGridComponents.tsx
@@ -1,6 +1,6 @@
import { ChevronDown, SortAsc, SortDesc } from 'lucide-react'
import { useEffect, useRef, useState } from 'react'
-import { useRowSelection } from 'react-data-grid'
+import { useHeaderRowSelection } from 'react-data-grid'
import {
Button,
DropdownMenu,
@@ -18,7 +18,7 @@ export const SelectHeaderCell = ({
allRowsSelected: boolean
}) => {
const inputRef = useRef(null)
- const [isRowSelected, onRowSelectionChange] = useRowSelection()
+ const { isRowSelected, onRowSelectionChange } = useHeaderRowSelection()
const isIndeterminate = selectedUsers.size > 0 && !allRowsSelected
@@ -36,7 +36,7 @@ export const SelectHeaderCell = ({
className="sb-grid-select-cell__header__input"
disabled={false}
checked={isRowSelected}
- onChange={(e) => onRowSelectionChange({ type: 'HEADER', checked: e.target.checked })}
+ onChange={(e) => onRowSelectionChange({ checked: e.target.checked })}
/>
diff --git a/apps/studio/components/ui/APIDocsButton.tsx b/apps/studio/components/ui/APIDocsButton.tsx
index dc1d3fc072e..2f3291b58b6 100644
--- a/apps/studio/components/ui/APIDocsButton.tsx
+++ b/apps/studio/components/ui/APIDocsButton.tsx
@@ -1,8 +1,9 @@
-import { BookOpenText } from 'lucide-react'
import { useParams } from 'common'
import { useSendEventMutation } from 'data/telemetry/send-event-mutation'
import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization'
+import { BookOpenText } from 'lucide-react'
import { useAppStateSnapshot } from 'state/app-state'
+
import { ButtonTooltip } from './ButtonTooltip'
interface APIDocsButtonProps {
@@ -36,7 +37,7 @@ export const APIDocsButton = ({ section, source }: APIDocsButtonProps) => {
})
}}
icon={}
- className="h-7 w-7"
+ className="w-7"
tooltip={{
content: {
side: 'bottom',
diff --git a/apps/studio/package.json b/apps/studio/package.json
index c0c422e830d..e95f81597a0 100644
--- a/apps/studio/package.json
+++ b/apps/studio/package.json
@@ -114,7 +114,7 @@
"react": "catalog:",
"react-beautiful-dnd": "^13.1.0",
"react-contexify": "^5.0.0",
- "react-data-grid": "7.0.0-beta.41",
+ "react-data-grid": "7.0.0-beta.47",
"react-day-picker": "^9.11.1",
"react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 748b1f7feec..26d2bb2a871 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -171,8 +171,8 @@ importers:
specifier: 'catalog:'
version: 18.3.1
react-data-grid:
- specifier: 7.0.0-beta.41
- version: 7.0.0-beta.41(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 7.0.0-beta.47
+ version: 7.0.0-beta.47(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-day-picker:
specifier: ^9.11.1
version: 9.11.1(react@18.3.1)
@@ -1002,8 +1002,8 @@ importers:
specifier: ^5.0.0
version: 5.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-data-grid:
- specifier: 7.0.0-beta.41
- version: 7.0.0-beta.41(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
+ specifier: 7.0.0-beta.47
+ version: 7.0.0-beta.47(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
react-day-picker:
specifier: ^9.11.1
version: 9.11.1(react@18.3.1)
@@ -15800,11 +15800,11 @@ packages:
react: '>= 15'
react-dom: '>= 15'
- react-data-grid@7.0.0-beta.41:
- resolution: {integrity: sha512-WmTP/PV+vtVjIaGVLgyG6WAhqvuPBM8I54bsR7oJZl6w43+mIasZM9rEBWjQ52XHJEy41/tjcMBIMNiWqoEbrQ==}
+ react-data-grid@7.0.0-beta.47:
+ resolution: {integrity: sha512-28kjsmwQGD/9RXYC50zn5Zv/SQMhBBoSvG5seq0fM8XXi9TZ0zr9Z5T3YJqLwcEtoNzTOq3y0njkmdujGkIwQQ==}
peerDependencies:
- react: ^18.0
- react-dom: ^18.0
+ react: ^18.0 || ^19.0
+ react-dom: ^18.0 || ^19.0
react-day-picker@9.11.1:
resolution: {integrity: sha512-l3ub6o8NlchqIjPKrRFUCkTUEq6KwemQlfv3XZzzwpUeGwmDJ+0u0Upmt38hJyd7D/vn2dQoOoLV/qAp0o3uUw==}
@@ -34816,7 +34816,7 @@ snapshots:
react: 18.3.1
react-dom: 18.3.1(react@18.3.1)
- react-data-grid@7.0.0-beta.41(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
+ react-data-grid@7.0.0-beta.47(react-dom@18.3.1(react@18.3.1))(react@18.3.1):
dependencies:
clsx: 2.1.1
react: 18.3.1