Skip to content

Commit 55ee339

Browse files
authored
Merge pull request #714 from objectstack-ai/copilot/update-roadmap-sync-issues
2 parents 8f0979b + e98f7ef commit 55ee339

1 file changed

Lines changed: 88 additions & 11 deletions

File tree

ROADMAP.md

Lines changed: 88 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
> **Spec Version:** @objectstack/spec v3.0.8
66
> **Client Version:** @objectstack/client v3.0.8
77
> **Target UX Benchmark:** 🎯 Airtable parity
8-
> **Current Priority:** AppShell Navigation · Designer Interaction · Dashboard Config Panel · Airtable UX Polish
8+
> **Current Priority:** AppShell Navigation · Designer Interaction · View Config Live Preview Sync · Dashboard Config Panel · Airtable UX Polish
99
1010
---
1111

@@ -18,9 +18,10 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind
1818
**What Remains:** The gap to **Airtable-level UX** is primarily in:
1919
1. ~~**AppShell** — No dynamic navigation renderer from spec JSON (last P0 blocker)~~ ✅ Complete
2020
2. **Designer Interaction** — ViewDesigner and DataModelDesigner have undo/redo, field type selectors, inline editing, Ctrl+S save, column drag-to-reorder with dnd-kit ✅
21-
3. **Dashboard Config Panel** — Airtable-style right-side configuration panel for dashboards (data source, layout, widget properties, sub-editors, type definitions)
22-
4. **Console Advanced Polish** — Remaining upgrades for forms, import/export, automation, comments
23-
5. **PWA Sync** — Background sync is simulated only
21+
3. **View Config Live Preview Sync** — Config panel changes sync in real-time for Grid, but `showSort`/`showSearch`/`showFilters`/`striped`/`bordered` not yet propagated to Kanban/Calendar/Timeline/Gallery/Map/Gantt (see P1.8.1)
22+
4. **Dashboard Config Panel** — Airtable-style right-side configuration panel for dashboards (data source, layout, widget properties, sub-editors, type definitions)
23+
5. **Console Advanced Polish** — Remaining upgrades for forms, import/export, automation, comments
24+
6. **PWA Sync** — Background sync is simulated only
2425

2526
---
2627

@@ -138,14 +139,88 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind
138139
- [x] User actions section: Edit records inline, Add/delete records inline, Click into record details
139140
- [x] Calendar endDateField support
140141
- [x] i18n for all 11 locales (en, zh, ja, de, fr, es, ar, ru, pt, ko)
141-
- [x] **Live preview: ViewConfigPanel changes sync in real-time to all list types (Grid/Kanban/Calendar/Timeline/Gallery/Map)**
142-
- `showSort` added to `ObjectViewSchema` and propagated through plugin-view
143-
- Appearance properties (`rowHeight`, `densityMode`, `color`, etc.) flow through `renderListView` schema
144-
- `gridSchema` in plugin-view includes `striped`/`bordered` from active view config
145-
- Plugin `renderContent` passes `rowHeight`, `densityMode`, `groupBy` to `renderListView` schema
146-
- All `useMemo` dependency arrays expanded to cover full view config
142+
- [ ] **Live preview: ViewConfigPanel changes sync in real-time to all list types (Grid/Kanban/Calendar/Timeline/Gallery/Map)** _(partially complete — see P1.8.1 gap analysis below)_
143+
-`showSort` added to `ObjectViewSchema` and propagated through plugin-view (Grid only)
144+
- ✅ Appearance properties (`rowHeight`, `densityMode`) flow through `renderListView` schema for all view types
145+
-`gridSchema` in plugin-view includes `striped`/`bordered` from active view config (Grid only)
146+
- ✅ Plugin `renderContent` passes `rowHeight`, `densityMode`, `groupBy` to `renderListView` schema
147+
-`useMemo` dependency arrays expanded to cover full view config
148+
- ⚠️ `showSort`/`showSearch`/`showFilters` only wired to Grid — not propagated to Kanban/Calendar/Timeline/Gallery/Map/Gantt
149+
- ⚠️ `striped`/`bordered` only applied via `gridSchema` — not passed to non-grid views through `renderListView`
150+
- ⚠️ `generateViewSchema` sets `showSearch: false` unconditionally for all non-grid types
151+
- ⚠️ Console `renderListView` callback does not pass `showSort`/`showSearch`/`showFilters`/`striped`/`bordered` to `fullSchema`
152+
- ⚠️ No per-view-type integration tests verifying config properties reach non-grid renderers
147153
- [ ] Conditional formatting rules
148154

155+
### P1.8.1 Live Preview — Gap Analysis & Phased Remediation
156+
157+
> **Ref:** Issue [#711](https://github.com/objectstack-ai/objectui/issues/711) — Right-side view config panel changes not syncing in real-time to all list types.
158+
159+
**Current Config Property Propagation Matrix:**
160+
161+
| Property | Grid | Kanban | Calendar | Timeline | Gallery | Map | Gantt |
162+
|----------|:----:|:------:|:--------:|:--------:|:-------:|:---:|:-----:|
163+
| `showSearch` ||||||||
164+
| `showSort` ||||||||
165+
| `showFilters` ||||||||
166+
| `rowHeight` ||||||||
167+
| `densityMode` ||||||||
168+
| `striped` ||||||||
169+
| `bordered` ||||||||
170+
| `groupBy` | N/A || N/A | N/A | N/A | N/A | N/A |
171+
| `color` ||||||||
172+
| Type-specific options ||||||||
173+
174+
**Root Causes:**
175+
1. **`generateViewSchema` (plugin-view):** Hardcodes `showSearch: false` for non-grid views; does not propagate `showSort`/`showFilters`/`striped`/`bordered`/`color` from `activeView`
176+
2. **Console `renderListView`:** Omits `showSort`/`showSearch`/`showFilters`/`striped`/`bordered` from the `fullSchema` passed to `ListView`
177+
3. **`NamedListView` type:** Does not declare `showSearch`/`showSort`/`showFilters`/`striped`/`bordered`/`color` as first-class properties
178+
4. **No per-view-type integration tests:** Tests verify config reaches the `ViewConfigPanel` switch, but not that non-grid renderers actually receive and apply the properties
179+
180+
**Phase 1 — Grid/Table View (baseline, already complete):**
181+
- [x] `gridSchema` includes `striped`/`bordered` from `activeView`
182+
- [x] `showSort`/`showSearch`/`showFilters` passed via `ObjectViewSchema`
183+
- [x] `useMemo` dependency arrays cover all grid config
184+
185+
**Phase 2 — Kanban Live Preview:**
186+
- [ ] Propagate `showSort`/`showSearch`/`showFilters` through `generateViewSchema` kanban branch
187+
- [ ] Pass `color`/`striped`/`bordered` in `renderContent``renderListView` for kanban
188+
- [ ] Ensure `groupBy` config changes reflect immediately (currently ✅ via `renderListView`)
189+
- [ ] Add integration test: ViewConfigPanel kanban config change → Kanban renderer receives updated props
190+
191+
**Phase 3 — Calendar Live Preview:**
192+
- [ ] Propagate `showSort`/`showSearch`/`showFilters` through `generateViewSchema` calendar branch
193+
- [ ] Pass `filter`/`sort`/appearance properties to calendar renderer in real-time
194+
- [ ] Verify `startDateField`/`endDateField` config changes trigger re-render via `useMemo` deps
195+
- [ ] Add integration test: ViewConfigPanel calendar config change → Calendar renderer receives updated props
196+
197+
**Phase 4 — Timeline/Gantt Live Preview:**
198+
- [ ] Propagate `showSort`/`showSearch`/`showFilters` through `generateViewSchema` timeline/gantt branches
199+
- [ ] Pass appearance properties (`color`, `striped`, `bordered`) through `renderListView` schema
200+
- [ ] Ensure `dateField`/`startDateField`/`endDateField` config changes trigger re-render
201+
- [ ] Add integration tests for timeline and gantt config sync
202+
203+
**Phase 5 — Gallery & Map Live Preview:**
204+
- [ ] Propagate `showSort`/`showSearch`/`showFilters` through `generateViewSchema` gallery/map branches
205+
- [ ] Pass appearance properties through `renderListView` schema for gallery/map
206+
- [ ] Ensure gallery `imageField`/`titleField` and map `locationField`/`zoom`/`center` config changes trigger re-render
207+
- [ ] Add integration tests for gallery and map config sync
208+
209+
**Phase 6 — Data Flow & Dependency Refactor:**
210+
- [ ] Add `showSearch`/`showSort`/`showFilters`/`striped`/`bordered`/`color` to `NamedListView` type in `@object-ui/types`
211+
- [ ] Update Console `renderListView` to pass all config properties in `fullSchema`
212+
- [ ] Audit all `useMemo`/`useEffect` dependency arrays in `plugin-view/ObjectView.tsx` for missing `activeView` sub-properties
213+
- [ ] Remove hardcoded `showSearch: false` from `generateViewSchema` — use `activeView.showSearch ?? schema.showSearch` instead
214+
215+
**Phase 7 — End-to-End Integration Tests:**
216+
- [ ] Per-view-type test: Grid config sync (showSort, showSearch, showFilters, striped, bordered)
217+
- [ ] Per-view-type test: Kanban config sync (groupBy, color, showSearch)
218+
- [ ] Per-view-type test: Calendar config sync (startDateField, endDateField, showFilters)
219+
- [ ] Per-view-type test: Timeline/Gantt config sync (dateField, appearance)
220+
- [ ] Per-view-type test: Gallery config sync (imageField, titleField, appearance)
221+
- [ ] Per-view-type test: Map config sync (locationField, zoom, center, appearance)
222+
- [ ] Cross-view-type test: Switch view type in ViewConfigPanel → verify config properties transfer correctly
223+
149224
### P1.10 Console — Dashboard Config Panel
150225

151226
> Airtable-style right-side configuration panel for dashboards. Phased rollout from shared infrastructure to full type-safe editing.
@@ -301,6 +376,8 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind
301376
| Airtable UX bar is high | Focus on Grid + Kanban + Form triad first; defer Gallery/Timeline polish |
302377
| PWA real sync complexity | Keep simulated sync as fallback; real sync behind feature flag |
303378
| Performance regression | Performance budgets in CI, 10K-record benchmarks |
379+
| View config live preview dependency chain breakage | `generateViewSchema` hardcodes non-grid defaults; per-view-type integration tests required (see P1.8.1) |
380+
| Config property type gaps (`NamedListView` missing fields) | Add first-class properties to `@object-ui/types`; use Zod schema to validate at runtime |
304381

305382
---
306383

@@ -312,6 +389,6 @@ ObjectUI is a universal Server-Driven UI (SDUI) engine built on React + Tailwind
312389

313390
---
314391

315-
**Roadmap Status:** 🎯 Active — AppShell · Designer Interaction · Dashboard Config Panel · Airtable UX Parity
392+
**Roadmap Status:** 🎯 Active — AppShell · Designer Interaction · View Config Live Preview Sync (P1.8.1) · Dashboard Config Panel · Airtable UX Parity
316393
**Next Review:** March 15, 2026
317394
**Contact:** hello@objectui.org | https://github.com/objectstack-ai/objectui

0 commit comments

Comments
 (0)