Skip to content

Commit 9672a70

Browse files
committed
Fix bug related to <Table> cells and rows calling preventDefault() when pressing enter key
1 parent 14c933c commit 9672a70

File tree

2 files changed

+15
-9
lines changed

2 files changed

+15
-9
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@near-pagoda/ui",
3-
"version": "3.0.0",
3+
"version": "3.0.1",
44
"description": "A React component library that implements the official NEAR design system.",
55
"license": "MIT",
66
"repository": {

src/components/Table/Table.tsx

+14-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import type {
1111
import { createContext, forwardRef, useContext, useEffect, useRef } from 'react';
1212

1313
import { usePagodaUi } from '../../context/PagodaUi';
14+
import { mergeRefs } from '../../utils';
1415
import { Flex } from '../Flex';
1516
import { Placeholder } from '../Placeholder';
1617
import { SvgIcon } from '../SvgIcon';
@@ -140,14 +141,16 @@ export const Row = forwardRef<HTMLTableRowElement, RowProps>(({ className = '',
140141
const clickable = !!props.onClick;
141142
const role = clickable ? 'button' : undefined;
142143
const tabIndex = clickable ? 0 : undefined;
144+
const rowRef = useRef<HTMLTableRowElement | null>(null);
143145

144146
const onKeyDown: KeyboardEventHandler<HTMLTableRowElement> = (event) => {
145-
if (event.key === 'Enter') {
147+
if (props.onKeyDown) props.onKeyDown(event);
148+
149+
if (event.key === 'Enter' && rowRef.current === event.target) {
146150
event.preventDefault();
147151
event.stopPropagation();
148152
event.target.dispatchEvent(new Event('click', { bubbles: true, cancelable: true }));
149153
}
150-
if (props.onKeyDown) props.onKeyDown(event);
151154
};
152155

153156
return (
@@ -156,7 +159,7 @@ export const Row = forwardRef<HTMLTableRowElement, RowProps>(({ className = '',
156159
data-clickable={clickable}
157160
role={role}
158161
tabIndex={tabIndex}
159-
ref={ref}
162+
ref={mergeRefs([ref, rowRef])}
160163
{...props}
161164
onKeyDown={onKeyDown}
162165
/>
@@ -187,11 +190,12 @@ export const HeadCell = forwardRef<HTMLTableCellElement, HeadCellProps>(
187190
const role = clickable ? 'button' : undefined;
188191
const tabIndex = clickable ? 0 : undefined;
189192
const columnHasActiveSort = sort?.column === column;
193+
const cellRef = useRef<HTMLTableCellElement | null>(null);
190194

191195
const onKeyDown: KeyboardEventHandler<HTMLTableCellElement> = (event) => {
192196
if (props.onKeyDown) props.onKeyDown(event);
193197

194-
if (event.key === 'Enter') {
198+
if (event.key === 'Enter' && cellRef.current === event.target) {
195199
event.preventDefault();
196200
event.stopPropagation();
197201
event.target.dispatchEvent(new Event('click', { bubbles: true, cancelable: true }));
@@ -225,7 +229,7 @@ export const HeadCell = forwardRef<HTMLTableCellElement, HeadCellProps>(
225229
data-clickable={clickable}
226230
role={role}
227231
tabIndex={tabIndex}
228-
ref={ref}
232+
ref={mergeRefs([ref, cellRef])}
229233
{...props}
230234
onKeyDown={onKeyDown}
231235
onClick={onClick}
@@ -266,14 +270,16 @@ export const Cell = forwardRef<HTMLTableCellElement, CellProps>(
266270
const role = isButton ? 'button' : undefined;
267271
const tabIndex = isButton ? (disabled ? -1 : 0) : undefined;
268272
const { Link } = usePagodaUi();
273+
const cellRef = useRef<HTMLTableCellElement | null>(null);
269274

270275
const onKeyDown: KeyboardEventHandler<HTMLTableCellElement> = (event) => {
271-
if (event.key === 'Enter') {
276+
if (props.onKeyDown) props.onKeyDown(event);
277+
278+
if (event.key === 'Enter' && cellRef.current === event.target) {
272279
event.preventDefault();
273280
event.stopPropagation();
274281
event.target.dispatchEvent(new Event('click', { bubbles: true, cancelable: true }));
275282
}
276-
if (props.onKeyDown) props.onKeyDown(event);
277283
};
278284

279285
return (
@@ -283,7 +289,7 @@ export const Cell = forwardRef<HTMLTableCellElement, CellProps>(
283289
data-clickable={clickable}
284290
role={role}
285291
tabIndex={tabIndex}
286-
ref={ref}
292+
ref={mergeRefs([ref, cellRef])}
287293
{...props}
288294
colSpan={spanAllColumns ? 10_000 : props.colSpan}
289295
onKeyDown={onKeyDown}

0 commit comments

Comments
 (0)