Skip to content

ListView Spec Protocol Gap — Complete Unimplemented Properties Checklist #736

@hotlong

Description

@hotlong

ListView Spec Protocol — Complete Implementation Gap Analysis

A thorough comparison between @objectstack/spec View protocol (view.zod.ts) and the ObjectUI ListView implementation across packages/types, packages/plugin-list, packages/plugin-grid, and packages/react/src/spec-bridge.

Legend

Status Meaning
✅ Implemented Property is typed, bridged, AND rendered with real UI behavior
⚠️ Typed-only / Stub Property exists in types or bridge, but has NO real rendering logic (disabled button, passthrough, no UI)
❌ Not Implemented Property is defined in spec but has no corresponding type, bridge, or rendering at all

1. ListView Top-Level Properties (42 total)

# Spec Property Type (Spec) Status Details
1 name string? Used as view identifier
2 label I18nLabel? Displayed in title; but i18n object form { en, zh } is NOT resolved — only plain string works
3 type enum Mapped to viewType
4 data ViewDataSchema? ⚠️ Typed-only ListView.tsx ignores data entirely — always uses dataSource.find(objectName). provider: api/value modes not consumed
5 columns string[] | ListColumn[] Supports both simple strings and detailed column configs
6 filter any[]? Used as base filter in data fetching
7 sort string | SortConfig[]? ✅ Partial Only array form supported; legacy string format "field desc" NOT parsed
8 searchableFields string[]? ⚠️ Typed-only Search UI exists but does NOT scope queries to these fields
9 filterableFields string[]? ⚠️ Typed-only FilterBuilder does NOT restrict fields to this whitelist
10 quickFilters QuickFilter[]? ⚠️ Incompatible Structure mismatch: spec uses { field, operator, value }, ObjectUI uses { id, label, filters[] }
11 resizable boolean? Passed to ObjectGrid
12 striped boolean? Forwarded to child views
13 bordered boolean? Forwarded to child views
14 selection SelectionConfig? Fully implemented
15 navigation NavigationConfig? drawer/modal/page/popover all supported
16 pagination PaginationConfig? ⚠️ Partial pageSize works; pageSizeOptions has no UI selector for users to switch
17 kanban KanbanConfig? ⚠️ Partial Uses legacy schema.options?.kanban?.groupField instead of spec kanban config
18 calendar CalendarConfig? ⚠️ Partial Uses legacy schema.options?.calendar instead of spec structure
19 gantt GanttConfig? ⚠️ Partial Uses legacy schema.options?.gantt instead of spec structure
20 gallery GalleryConfig? ❌ Not Implemented Spec GalleryConfigSchema (coverField, coverFit, cardSize, titleField, visibleFields) is NOT typed or consumed
21 timeline TimelineConfig? ❌ Not Implemented Spec TimelineConfigSchema (startDateField, endDateField, titleField, groupByField, colorField, scale) is NOT typed or consumed
22 description I18nLabel? ⚠️ Typed-only Bridge passes through, no UI renders view description
23 sharing ViewSharing? ⚠️ Schema Mismatch Spec: { type: personal/collaborative, lockedBy } vs ObjectUI: { visibility, enabled } — Share button renders but is non-functional
24 rowHeight RowHeight enum? ⚠️ Partial Only compact/medium/tall mapped; spec short and extra_tall are NOT handled
25 grouping GroupingConfig? ⚠️ Stub Group button renders but is disabled — zero grouping rendering logic
26 rowColor RowColorConfig? ⚠️ Stub Color button renders but is disabled — zero row coloring logic
27 hiddenFields string[]? Implemented with hide/show popover UI
28 fieldOrder string[]? Sorts fields by order map
29 rowActions string[]? ⚠️ Typed-only No row-level action menu UI rendered
30 bulkActions string[]? ⚠️ Typed-only No bulk action bar UI on multi-select
31 virtualScroll boolean? ⚠️ Typed-only VirtualGrid exists but ListView does NOT toggle it based on this flag
32 conditionalFormatting Array<{condition, style}>? ⚠️ Schema Mismatch Spec uses expression-based { condition, style }, ObjectUI uses field/operator/value rules
33 inlineEdit boolean? Mapped to editable on ObjectGrid
34 exportOptions enum[]? ⚠️ Schema Mismatch Spec: simple string[], ObjectUI: { formats, maxRecords, includeHeaders, fileNamePrefix } object
35 userActions UserActionsConfig? ⚠️ Typed-only userActions.sort/search/filter/rowHeight/addRecordForm/buttons do NOT control toolbar visibility
36 appearance AppearanceConfig? ⚠️ Typed-only showDescription and allowedVisualizations have NO rendering
37 tabs ViewTab[]? ⚠️ Typed-only NO tab bar UI rendered
38 addRecord AddRecordConfig? ⚠️ Typed-only NO "+ Add Record" button rendered
39 showRecordCount boolean? ⚠️ Ignored Record count bar ALWAYS shows regardless of this flag
40 allowPrinting boolean? ⚠️ Typed-only NO print button or functionality
41 emptyState { title?, message?, icon? } Fully implemented with Lucide icon resolution
42 aria AriaProps? Applied to root container element

2. ListColumn Properties (13 total)

# Spec Property Status Details
1 field Core column identifier
2 label Display label override
3 width Column width in pixels
4 align Text alignment
5 hidden Hide column by default
6 sortable Allow sorting
7 resizable Allow column resizing
8 wrap Text wrapping
9 type Renderer type override
10 pinned ⚠️ Bridge-only ObjectGrid does NOT implement frozen/pinned columns
11 summary ⚠️ Bridge-only NO column footer aggregation UI (count, sum, avg)
12 link ⚠️ Bridge-only No click-to-navigate rendering on link columns
13 action ⚠️ Bridge-only No action dispatch on column click

3. Sub-Config Schemas

# Spec Schema Status Key Gaps
1 GalleryConfigSchema coverField, coverFit, cardSize, titleField, visibleFields — all missing
2 TimelineConfigSchema startDateField, endDateField, titleField, groupByField, colorField, scale — all missing
3 GroupingConfigSchema ⚠️ Typed-only fields[].field, fields[].order, fields[].collapsed — zero rendering
4 RowColorConfigSchema ⚠️ Typed-only field, colors mapping — zero rendering
5 ViewSharingSchema ⚠️ Schema Mismatch Spec personal/collaborative vs ObjectUI visibility
6 UserActionsConfigSchema ⚠️ Typed-only sort, search, filter, rowHeight, addRecordForm, buttons — none wired
7 AppearanceConfigSchema ⚠️ Typed-only showDescription, allowedVisualizations — zero UI
8 ViewTabSchema ⚠️ Typed-only name, label, icon, view, filter, order, pinned, isDefault, visible — zero UI
9 AddRecordConfigSchema ⚠️ Typed-only enabled, position, mode, formView — zero UI
10 PaginationConfigSchema ⚠️ Partial pageSize works, pageSizeOptions has no UI selector

4. Summary Statistics

Category Count Percentage
Spec ListView properties total 42 100%
✅ Fully implemented 14 33%
⚠️ Typed-only / Stub / Partial 22 52%
❌ Not implemented at all 6 15%

5. Priority Ranking

Priority Property Impact
P0 data (ViewDataSchema) Core protocol — provider: api/value modes ignored
P0 grouping Group button visible but disabled — top Airtable parity
P0 rowColor Color button visible but disabled — top Airtable parity
P0 gallery / timeline config Spec configs ignored, legacy options.* used
P1 userActions → toolbar control Spec should drive showSearch/showSort/showFilters
P1 tabs (ViewTab) Multi-tab interfaces — core Interface Builder feature
P1 addRecord No "+ Add Record" button from spec config
P1 quickFilters Structure mismatch — spec vs ObjectUI format
P1 conditionalFormatting Expression-based (spec) vs field/operator (ObjectUI) mismatch
P1 Column pinned Bridge passes but grid doesn't freeze columns
P1 Column summary No footer aggregation UI
P2 rowActions / bulkActions No row action menu or bulk action bar
P2 allowPrinting No print functionality
P2 showRecordCount flag Record count always shows, flag ignored
P2 appearance.allowedVisualizations ViewSwitcher doesn't respect whitelist
P2 sharing schema mismatch Spec personal/collaborative vs ObjectUI visibility
P3 searchableFields Search exists but doesn't scope to fields
P3 filterableFields FilterBuilder doesn't restrict to whitelist
P3 rowHeight enum gaps short and extra_tall not mapped
P3 sort legacy string format "field desc" format not parsed

6. Source Code References

  • Spec protocol: objectstack-ai/specpackages/spec/src/ui/view.zod.ts
  • ObjectUI types: packages/types/src/list-view.ts
  • ListView component: packages/plugin-list/src/ListView.tsx
  • Spec bridge: packages/react/src/spec-bridge/bridges/list-view.ts
  • ObjectGrid: packages/plugin-grid/src/ObjectGrid.tsx

This checklist focuses on protocol alignment analysis only. Interaction design details can be further discussed in sub-issues.

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions