Skip to content

Commit 88716d9

Browse files
Copilothotlong
andcommitted
Update tests and ROADMAP for navigation mode fixes
Co-authored-by: hotlong <50353452+hotlong@users.noreply.github.com>
1 parent e4d1d50 commit 88716d9

2 files changed

Lines changed: 40 additions & 2 deletions

File tree

ROADMAP.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,21 @@ The `FlowDesigner` is a canvas-based flow editor that bridges the gap between th
10501050

10511051
**Tests:** All 32 ObjectView tests and 29 useNavigationOverlay tests pass.
10521052

1053+
### ListView Multi-Navigation Mode Support — split/popover/page/new_window (February 2026)
1054+
1055+
**Root Cause:** While `drawer`/`modal` modes worked in the Console ObjectView, the remaining 4 navigation modes had gaps:
1056+
1. Console's `onNavigate` callback relied on implicit fallthrough for `view` action (page mode) — not explicit.
1057+
2. `PluginObjectView`'s `formLayout` only mapped `drawer`/`modal` modes; `split`/`popover` fell through to the default layout (`drawer`), rendering the wrong overlay type.
1058+
3. `PluginObjectView` lacked `NavigationOverlay` integration for `split` (resizable side-by-side panels) and `popover` (compact dialog preview).
1059+
1060+
**Fix:**
1061+
- Console `onNavigate` now explicitly checks for `action === 'view'` (page mode) alongside the existing `'new_window'` check.
1062+
- `PluginObjectView` `formLayout` now includes `split` and `popover` branches.
1063+
- `PluginObjectView` imports and renders `NavigationOverlay` from `@object-ui/components` for both `split` mode (with `mainContent` wrapping the grid) and `popover` mode (Dialog fallback when no `popoverTrigger`).
1064+
- Split mode close button properly resets form state via `handleFormCancel`.
1065+
1066+
**Tests:** Updated split/popover tests to verify `NavigationOverlay` rendering (close panel button for split, dialog role for popover). Added split close-and-return test. All 29 PluginObjectView tests and 37 Console ObjectView tests pass.
1067+
10531068
### ListView Grouping Mode Empty Rows (February 2026)
10541069

10551070
**Root Cause:** When grouping is enabled in list view, `buildGroupTableSchema` in `ObjectGrid.tsx` sets `pagination: false` but inherits `pageSize: 10` from the parent schema. The `DataTableRenderer` filler row logic (`Array.from({ length: Math.max(0, pageSize - paginatedData.length) })`) pads each group table with empty rows up to `pageSize`, creating many blank lines.

packages/plugin-view/src/__tests__/ObjectView.test.tsx

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,9 @@ describe('ObjectView', () => {
300300

301301
fireEvent.click(screen.getByTestId('grid-row'));
302302

303-
// Split mode should trigger form display in view mode
303+
// Split mode renders NavigationOverlay with split panels including a close button
304304
expect(screen.getByTestId('object-form')).toBeDefined();
305+
expect(screen.getByLabelText('Close panel')).toBeDefined();
305306
});
306307

307308
it('should open form in view mode when popover navigation mode is clicked', () => {
@@ -315,8 +316,30 @@ describe('ObjectView', () => {
315316

316317
fireEvent.click(screen.getByTestId('grid-row'));
317318

318-
// Popover mode should trigger form display in view mode
319+
// Popover mode renders NavigationOverlay Dialog fallback (no popoverTrigger)
319320
expect(screen.getByTestId('object-form')).toBeDefined();
321+
expect(screen.getByRole('dialog')).toBeDefined();
322+
});
323+
324+
it('should close split panel and return to normal view', () => {
325+
const schema: ObjectViewSchema = {
326+
type: 'object-view',
327+
objectName: 'contacts',
328+
navigation: { mode: 'split' },
329+
};
330+
331+
render(<ObjectView schema={schema} dataSource={mockDataSource} />);
332+
333+
// Open split panel
334+
fireEvent.click(screen.getByTestId('grid-row'));
335+
expect(screen.getByLabelText('Close panel')).toBeDefined();
336+
337+
// Close split panel
338+
fireEvent.click(screen.getByLabelText('Close panel'));
339+
340+
// Form should be gone, grid should remain
341+
expect(screen.queryByLabelText('Close panel')).toBeNull();
342+
expect(screen.getByTestId('object-grid')).toBeDefined();
320343
});
321344
});
322345

0 commit comments

Comments
 (0)