Skip to content

ListView Spec Protocol Gap — Complete Unimplemented Properties Checklist #736

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

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

1. ListView Top-Level Properties (42 total)

#Spec PropertyType (Spec)StatusDetails
1namestring?Used as view identifier
2labelI18nLabel?Displayed in title; but i18n object form { en, zh } is NOT resolved — only plain string works
3typeenumMapped to viewType
4dataViewDataSchema?⚠️ Typed-onlyListView.tsx ignores data entirely — always uses dataSource.find(objectName). provider: api/value modes not consumed
5columnsstring[] | ListColumn[]Supports both simple strings and detailed column configs
6filterany[]?Used as base filter in data fetching
7sortstring | SortConfig[]?✅ PartialOnly array form supported; legacy string format "field desc" NOT parsed
8searchableFieldsstring[]?⚠️ Typed-onlySearch UI exists but does NOT scope queries to these fields
9filterableFieldsstring[]?⚠️ Typed-onlyFilterBuilder does NOT restrict fields to this whitelist
10quickFiltersQuickFilter[]?⚠️ IncompatibleStructure mismatch: spec uses { field, operator, value }, ObjectUI uses { id, label, filters[] }
11resizableboolean?Passed to ObjectGrid
12stripedboolean?Forwarded to child views
13borderedboolean?Forwarded to child views
14selectionSelectionConfig?Fully implemented
15navigationNavigationConfig?drawer/modal/page/popover all supported
16paginationPaginationConfig?⚠️ PartialpageSize works; pageSizeOptions has no UI selector for users to switch
17kanbanKanbanConfig?⚠️ PartialUses legacy schema.options?.kanban?.groupField instead of spec kanban config
18calendarCalendarConfig?⚠️ PartialUses legacy schema.options?.calendar instead of spec structure
19ganttGanttConfig?⚠️ PartialUses legacy schema.options?.gantt instead of spec structure
20galleryGalleryConfig?❌ Not ImplementedSpec GalleryConfigSchema (coverField, coverFit, cardSize, titleField, visibleFields) is NOT typed or consumed
21timelineTimelineConfig?❌ Not ImplementedSpec TimelineConfigSchema (startDateField, endDateField, titleField, groupByField, colorField, scale) is NOT typed or consumed
22descriptionI18nLabel?⚠️ Typed-onlyBridge passes through, no UI renders view description
23sharingViewSharing?⚠️ Schema MismatchSpec: { type: personal/collaborative, lockedBy } vs ObjectUI: { visibility, enabled } — Share button renders but is non-functional
24rowHeightRowHeight enum?⚠️ PartialOnly compact/medium/tall mapped; spec short and extra_tall are NOT handled
25groupingGroupingConfig?⚠️ StubGroup button renders but is disabled — zero grouping rendering logic
26rowColorRowColorConfig?⚠️ StubColor button renders but is disabled — zero row coloring logic
27hiddenFieldsstring[]?Implemented with hide/show popover UI
28fieldOrderstring[]?Sorts fields by order map
29rowActionsstring[]?⚠️ Typed-onlyNo row-level action menu UI rendered
30bulkActionsstring[]?⚠️ Typed-onlyNo bulk action bar UI on multi-select
31virtualScrollboolean?⚠️ Typed-onlyVirtualGrid exists but ListView does NOT toggle it based on this flag
32conditionalFormattingArray<{condition, style}>?⚠️ Schema MismatchSpec uses expression-based { condition, style }, ObjectUI uses field/operator/value rules
33inlineEditboolean?Mapped to editable on ObjectGrid
34exportOptionsenum[]?⚠️ Schema MismatchSpec: simple string[], ObjectUI: { formats, maxRecords, includeHeaders, fileNamePrefix } object
35userActionsUserActionsConfig?⚠️ Typed-onlyuserActions.sort/search/filter/rowHeight/addRecordForm/buttons do NOT control toolbar visibility
36appearanceAppearanceConfig?⚠️ Typed-onlyshowDescription and allowedVisualizations have NO rendering
37tabsViewTab[]?⚠️ Typed-onlyNO tab bar UI rendered
38addRecordAddRecordConfig?⚠️ Typed-onlyNO "+ Add Record" button rendered
39showRecordCountboolean?⚠️ IgnoredRecord count bar ALWAYS shows regardless of this flag
40allowPrintingboolean?⚠️ Typed-onlyNO print button or functionality
41emptyState{ title?, message?, icon? }Fully implemented with Lucide icon resolution
42ariaAriaProps?Applied to root container element

2. ListColumn Properties (13 total)

#Spec PropertyStatusDetails
1fieldCore column identifier
2labelDisplay label override
3widthColumn width in pixels
4alignText alignment
5hiddenHide column by default
6sortableAllow sorting
7resizableAllow column resizing
8wrapText wrapping
9typeRenderer type override
10pinned⚠️ Bridge-onlyObjectGrid does NOT implement frozen/pinned columns
11summary⚠️ Bridge-onlyNO column footer aggregation UI (count, sum, avg)
12link⚠️ Bridge-onlyNo click-to-navigate rendering on link columns
13action⚠️ Bridge-onlyNo action dispatch on column click

3. Sub-Config Schemas

#Spec SchemaStatusKey Gaps
1GalleryConfigSchemacoverField, coverFit, cardSize, titleField, visibleFields — all missing
2TimelineConfigSchemastartDateField, endDateField, titleField, groupByField, colorField, scale — all missing
3GroupingConfigSchema⚠️ Typed-onlyfields[].field, fields[].order, fields[].collapsed — zero rendering
4RowColorConfigSchema⚠️ Typed-onlyfield, colors mapping — zero rendering
5ViewSharingSchema⚠️ Schema MismatchSpec personal/collaborative vs ObjectUI visibility
6UserActionsConfigSchema⚠️ Typed-onlysort, search, filter, rowHeight, addRecordForm, buttons — none wired
7AppearanceConfigSchema⚠️ Typed-onlyshowDescription, allowedVisualizations — zero UI
8ViewTabSchema⚠️ Typed-onlyname, label, icon, view, filter, order, pinned, isDefault, visible — zero UI
9AddRecordConfigSchema⚠️ Typed-onlyenabled, position, mode, formView — zero UI
10PaginationConfigSchema⚠️ PartialpageSize works, pageSizeOptions has no UI selector

4. Summary Statistics

CategoryCountPercentage
Spec ListView properties total42100%
✅ Fully implemented1433%
⚠️ Typed-only / Stub / Partial2252%
❌ Not implemented at all615%

5. Priority Ranking

PriorityPropertyImpact
P0data (ViewDataSchema)Core protocol — provider: api/value modes ignored
P0groupingGroup button visible but disabled — top Airtable parity
P0rowColorColor button visible but disabled — top Airtable parity
P0gallery / timeline configSpec configs ignored, legacy options.* used
P1userActions → toolbar controlSpec should drive showSearch/showSort/showFilters
P1tabs (ViewTab)Multi-tab interfaces — core Interface Builder feature
P1addRecordNo "+ Add Record" button from spec config
P1quickFiltersStructure mismatch — spec vs ObjectUI format
P1conditionalFormattingExpression-based (spec) vs field/operator (ObjectUI) mismatch
P1Column pinnedBridge passes but grid doesn't freeze columns
P1Column summaryNo footer aggregation UI
P2rowActions / bulkActionsNo row action menu or bulk action bar
P2allowPrintingNo print functionality
P2showRecordCount flagRecord count always shows, flag ignored
P2appearance.allowedVisualizationsViewSwitcher doesn't respect whitelist
P2sharing schema mismatchSpec personal/collaborative vs ObjectUI visibility
P3searchableFieldsSearch exists but doesn't scope to fields
P3filterableFieldsFilterBuilder doesn't restrict to whitelist
P3rowHeight enum gapsshort and extra_tall not mapped
P3sort 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