Skip to content

Commit 3930eef

Browse files
Copilothotlong
andcommitted
feat: wire up collapsible+pageSize in DetailView, prominent count Badge, stronger row hover
- DetailView passes collapsible and pageSize={5} to all RelatedList instances - Record count uses Badge component for prominent display (e.g., Order [7]) - DataTable row hover increased from hover:bg-muted/30 to hover:bg-muted/50 - Remove unused ChevronUp import and recordCountText variable - Update tests for new Badge-based record count display Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent a496ce3 commit 3930eef

4 files changed

Lines changed: 15 additions & 15 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -858,7 +858,7 @@ const DataTableRenderer = ({ schema }: { schema: DataTableSchema }) => {
858858
key={rowId}
859859
data-state={isSelected ? 'selected' : undefined}
860860
className={cn(
861-
"bg-background border-b border-border hover:bg-muted/30 group/row",
861+
"bg-background border-b border-border hover:bg-muted/50 group/row",
862862
schema.onRowClick && "cursor-pointer",
863863
rowHasChanges && "bg-amber-50 dark:bg-amber-950/20",
864864
rowClassName && rowClassName(row, rowIndex)

packages/plugin-detail/src/DetailView.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -694,6 +694,8 @@ export const DetailView: React.FC<DetailViewProps> = ({
694694
columns={related.columns as any}
695695
dataSource={dataSource}
696696
objectName={related.api}
697+
collapsible
698+
pageSize={5}
697699
/>
698700
))}
699701
</div>
@@ -777,6 +779,8 @@ export const DetailView: React.FC<DetailViewProps> = ({
777779
columns={related.columns as any}
778780
dataSource={dataSource}
779781
objectName={related.api}
782+
collapsible
783+
pageSize={5}
780784
/>
781785
))}
782786
</div>

packages/plugin-detail/src/RelatedList.tsx

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
CardHeader,
1313
CardTitle,
1414
CardContent,
15+
Badge,
1516
Button,
1617
Input,
1718
} from '@object-ui/components';
@@ -25,7 +26,6 @@ import {
2526
ChevronRight,
2627
ArrowUpDown,
2728
ChevronDown,
28-
ChevronUp,
2929
} from 'lucide-react';
3030
import type { DataSource, FieldMetadata } from '@object-ui/types';
3131
import { getCellRenderer } from '@object-ui/fields';
@@ -254,10 +254,6 @@ export const RelatedList: React.FC<RelatedListProps> = ({
254254
}
255255
}, [type, paginatedData, effectiveColumns, schema, effectivePageSize]);
256256

257-
const recordCountText = relatedData.length === 1
258-
? t('detail.relatedRecordOne', { count: relatedData.length })
259-
: t('detail.relatedRecords', { count: relatedData.length });
260-
261257
const hasRowActions = !!onRowEdit || !!onRowDelete;
262258

263259
const headerClassName = collapsible ? 'cursor-pointer select-none' : undefined;
@@ -274,9 +270,9 @@ export const RelatedList: React.FC<RelatedListProps> = ({
274270
: (<ChevronDown className="h-4 w-4 text-muted-foreground" />)
275271
)}
276272
<span>{title}</span>
277-
<span className="text-sm font-normal text-muted-foreground">
278-
{recordCountText}
279-
</span>
273+
<Badge variant="secondary" className="text-xs font-normal">
274+
{relatedData.length}
275+
</Badge>
280276
</div>
281277
<div className="flex items-center gap-1">
282278
{onNew && (

packages/plugin-detail/src/__tests__/RelatedList.test.tsx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ describe('RelatedList', () => {
1616
expect(screen.getByText('Contacts')).toBeInTheDocument();
1717
});
1818

19-
it('should show record count for empty list', () => {
19+
it('should show record count badge for empty list', () => {
2020
render(<RelatedList title="Contacts" type="table" data={[]} />);
21-
expect(screen.getByText('0 records')).toBeInTheDocument();
21+
expect(screen.getByText('0')).toBeInTheDocument();
2222
});
2323

24-
it('should show singular record count for one item', () => {
24+
it('should show record count badge for one item', () => {
2525
render(<RelatedList title="Contacts" type="table" data={[{ id: 1, name: 'Alice' }]} />);
26-
expect(screen.getByText('1 record')).toBeInTheDocument();
26+
expect(screen.getByText('1')).toBeInTheDocument();
2727
});
2828

29-
it('should show plural record count for multiple items', () => {
29+
it('should show record count badge for multiple items', () => {
3030
const data = [
3131
{ id: 1, name: 'Alice' },
3232
{ id: 2, name: 'Bob' },
3333
];
3434
render(<RelatedList title="Orders" type="table" data={data} />);
35-
expect(screen.getByText('2 records')).toBeInTheDocument();
35+
expect(screen.getByText('2')).toBeInTheDocument();
3636
});
3737

3838
it('should show "No related records found" for empty data', () => {

0 commit comments

Comments
 (0)