Skip to content

Commit b7e2e8a

Browse files
authored
Merge pull request #445 from objectstack-ai/copilot/optimize-list-page-layout
2 parents cf11933 + 16c17a7 commit b7e2e8a

5 files changed

Lines changed: 20 additions & 14 deletions

File tree

packages/plugin-list/src/ListView.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ export interface ListViewProps {
2424
onSearchChange?: (search: string) => void;
2525
/** Callback when a row/item is clicked (overrides NavigationConfig) */
2626
onRowClick?: (record: Record<string, unknown>) => void;
27+
/** Show view type switcher (Grid/Kanban/etc). Default: false (view type is fixed) */
28+
showViewSwitcher?: boolean;
2729
[key: string]: any;
2830
}
2931

@@ -68,6 +70,7 @@ export const ListView: React.FC<ListViewProps> = ({
6870
onSortChange,
6971
onSearchChange,
7072
onRowClick,
73+
showViewSwitcher = false,
7174
...props
7275
}) => {
7376
// Kernel level default: Ensure viewType is always defined (default to 'grid')
@@ -392,14 +395,16 @@ export const ListView: React.FC<ListViewProps> = ({
392395
{/* Airtable-style Toolbar */}
393396
<div className="border-b px-4 py-2 flex items-center justify-between gap-4 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
394397
<div className="flex items-center gap-2 flex-1 overflow-hidden">
395-
{/* View Switcher on the Left */}
396-
<div className="flex items-center pr-2 border-r mr-2">
397-
<ViewSwitcher
398-
currentView={currentView}
399-
availableViews={availableViews}
400-
onViewChange={handleViewChange}
401-
/>
402-
</div>
398+
{/* View Switcher on the Left (optional, hidden by default) */}
399+
{showViewSwitcher && (
400+
<div className="flex items-center pr-2 border-r mr-2">
401+
<ViewSwitcher
402+
currentView={currentView}
403+
availableViews={availableViews}
404+
onViewChange={handleViewChange}
405+
/>
406+
</div>
407+
)}
403408

404409
{/* Action Tools */}
405410
<div className="flex items-center gap-1">

packages/plugin-list/src/__tests__/ListView.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ describe('ListView', () => {
108108
},
109109
};
110110

111-
renderWithProvider(<ListView schema={schema} />);
111+
renderWithProvider(<ListView schema={schema} showViewSwitcher={true} />);
112112

113113
// Find kanban view button and click it
114114
// ViewSwitcher uses buttons with aria-label

packages/plugin-list/src/__tests__/ListViewPersistence.test.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('ListView Persistence', () => {
5656
},
5757
};
5858

59-
renderWithProvider(<ListView schema={schema} />);
59+
renderWithProvider(<ListView schema={schema} showViewSwitcher={true} />);
6060

6161
// Simulate changing to kanban view
6262
const kanbanButton = screen.getByLabelText('Kanban');
@@ -89,7 +89,7 @@ describe('ListView Persistence', () => {
8989
},
9090
};
9191

92-
renderWithProvider(<ListView schema={viewB_Schema} />);
92+
renderWithProvider(<ListView schema={viewB_Schema} showViewSwitcher={true} />);
9393

9494
// Should use the schema default 'kanban' (since no storage exists for THIS view id)
9595
// It should NOT use 'grid' from the global/default view.
@@ -117,7 +117,7 @@ describe('ListView Persistence', () => {
117117
},
118118
};
119119

120-
renderWithProvider(<ListView schema={schema} />);
120+
renderWithProvider(<ListView schema={schema} showViewSwitcher={true} />);
121121

122122
// Should respect schema ('grid') because storage persistence is currently disabled
123123
const kanbanButton = screen.getByLabelText('Kanban');

packages/plugin-view/src/ObjectView.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -857,7 +857,7 @@ export const ObjectView: React.FC<ObjectViewProps> = ({
857857
const showSearchBox = schema.showSearch !== false;
858858
const showCreateButton = schema.showCreate !== false && operations.create !== false;
859859
const showRefreshButton = schema.showRefresh !== false;
860-
const showViewSwitcherToggle = schema.showViewSwitcher !== false;
860+
const showViewSwitcherToggle = schema.showViewSwitcher === true; // Changed: default to false (hidden)
861861

862862
return (
863863
<div className="flex flex-col gap-3">

packages/types/src/objectql.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,8 @@ export interface ObjectViewSchema extends BaseSchema {
833833

834834
/**
835835
* Show view switcher (for multi-view)
836-
* @default true
836+
* When false (default), view type is fixed at creation in ViewDesigner
837+
* @default false
837838
*/
838839
showViewSwitcher?: boolean;
839840

0 commit comments

Comments
 (0)