Skip to content

Commit 71681d4

Browse files
committed
Enhance ObjectView and DataTableRenderer to support customizable onRowClick behavior
1 parent 964fa93 commit 71681d4

3 files changed

Lines changed: 25 additions & 4 deletions

File tree

apps/console/src/components/ObjectView.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { Button, Empty, EmptyTitle, EmptyDescription } from '@object-ui/componen
1010
import { Plus, Calendar as CalendarIcon, Kanban as KanbanIcon, Table as TableIcon, AlignLeft } from 'lucide-react';
1111
import type { ListViewSchema } from '@object-ui/types';
1212

13-
export function ObjectView({ dataSource, objects, onEdit }: any) {
13+
export function ObjectView({ dataSource, objects, onEdit, onRowClick }: any) {
1414
const { objectName } = useParams();
1515
const [searchParams, setSearchParams] = useSearchParams();
1616

@@ -63,8 +63,8 @@ export function ObjectView({ dataSource, objects, onEdit }: any) {
6363
// Helper to pass dataSource if component needs it
6464
const interactionProps = {
6565
onEdit,
66-
onRowClick: (record: any) => onEdit(record), // Default to edit on click
67-
dataSource // Ensure ListView gets dataSource if it needs to pass it down
66+
onRowClick: onRowClick || ((record: any) => onEdit(record)),
67+
dataSource
6868
};
6969

7070
if (activeView.type === 'chart') {

packages/components/src/renderers/complex/data-table.tsx

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
// Enterprise-level DataTable Component (Airtable-like)
1010
import React, { useState, useMemo, useRef, useEffect } from 'react';
11+
import { cn } from '../../lib/utils';
1112
import { ComponentRegistry } from '@object-ui/core';
1213
import type { DataTableSchema } from '@object-ui/types';
1314
import {
@@ -486,7 +487,26 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
486487
const isSelected = selectedRowIds.has(rowId);
487488

488489
return (
489-
<TableRow key={rowId} data-state={isSelected ? 'selected' : undefined}>
490+
<TableRow
491+
key={rowId}
492+
data-state={isSelected ? 'selected' : undefined}
493+
className={cn(
494+
// @ts-ignore
495+
schema.onRowClick && "cursor-pointer"
496+
)}
497+
onClick={(e) => {
498+
// @ts-ignore
499+
if (schema.onRowClick && !e.defaultPrevented) {
500+
// Simple heuristic to avoid triggering on interactive elements if they didn't stop propagation
501+
const target = e.target as HTMLElement;
502+
if (target.closest('button') || target.closest('[role="checkbox"]') || target.closest('a')) {
503+
return;
504+
}
505+
// @ts-ignore
506+
schema.onRowClick(row);
507+
}
508+
}}
509+
>
490510
{selectable && (
491511
<TableCell>
492512
<Checkbox

packages/plugin-grid/src/ObjectGrid.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ export const ObjectGrid: React.FC<ObjectGridProps> = ({
429429
reorderableColumns: schema.reorderableColumns ?? false,
430430
className: schema.className,
431431
onSelectionChange: onRowSelect,
432+
onRowClick: onRowClick,
432433
};
433434

434435
return <SchemaRenderer schema={dataTableSchema} />;

0 commit comments

Comments
 (0)