Skip to content

Commit 55669aa

Browse files
committed
feat(spec): the view columns, sort and tabs repeaters enumerate their row children
Each child's label is the item schema's own `.meta({ title })`, so the i18n extractor emits a catalog key per column. Claude-Session: https://claude.ai/code/session_01Sfe5YjBLwB9J3y8fvm2xq1 Co-authored-by: Claude <noreply@anthropic.com>
1 parent 3b56070 commit 55669aa

1 file changed

Lines changed: 59 additions & 3 deletions

File tree

‎packages/spec/src/ui/view.form.ts‎

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,46 @@ export const viewForm = defineForm({
3737
label: 'Columns & filters',
3838
description: 'What rows show and how users filter them.',
3939
fields: [
40-
{ field: 'columns', type: 'repeater', required: true, helpText: 'Columns to display (field names from selected object)' },
40+
{
41+
field: 'columns',
42+
type: 'repeater',
43+
required: true,
44+
helpText: 'Columns to display (field names from selected object)',
45+
// Row-property names (#17508): every authorable row property, `label`
46+
// equal to the item schema's `.meta({ title })`, so `os i18n extract`
47+
// emits a catalog key per column and the panel keeps its schema-derived
48+
// widgets (no `type` here).
49+
fields: [
50+
{ field: 'field', label: 'Field' },
51+
{ field: 'label', label: 'Label' },
52+
{ field: 'width', label: 'Width (px)' },
53+
{ field: 'align', label: 'Alignment' },
54+
{ field: 'hidden', label: 'Hidden' },
55+
{ field: 'sortable', label: 'Sortable' },
56+
{ field: 'resizable', label: 'Resizable' },
57+
{ field: 'wrap', label: 'Wrap Text' },
58+
{ field: 'type', label: 'Renderer Type' },
59+
{ field: 'pinned', label: 'Pinned' },
60+
{ field: 'summary', label: 'Summary' },
61+
{ field: 'prefix', label: 'Prefix' },
62+
{ field: 'link', label: 'Primary Link' },
63+
{ field: 'action', label: 'Click Action' },
64+
],
65+
},
4166
{ field: 'filter', widget: 'filter-builder', dependsOn: 'data.object', helpText: 'Filter conditions — same visual builder as the list toolbar, with field-type-aware operators and value inputs' },
42-
{ field: 'sort', type: 'repeater', helpText: 'Default sort order' },
67+
{
68+
field: 'sort',
69+
type: 'repeater',
70+
helpText: 'Default sort order',
71+
// Row-property names (#17508): every authorable row property, `label`
72+
// equal to the item schema's `.meta({ title })`, so `os i18n extract`
73+
// emits a catalog key per column and the panel keeps its schema-derived
74+
// widgets (no `type` here).
75+
fields: [
76+
{ field: 'field', label: 'Field' },
77+
{ field: 'order', label: 'Direction' },
78+
],
79+
},
4380
{ field: 'searchableFields', widget: 'string-tags', helpText: 'Field names available for quick search' },
4481
{ field: 'filterableFields', widget: 'string-tags', helpText: 'Field names available for filtering' },
4582
],
@@ -129,7 +166,26 @@ export const viewForm = defineForm({
129166
collapsed: true,
130167
fields: [
131168
{ field: 'userFilters', type: 'composite', helpText: 'Quick-filter bar: element style (dropdown / tabs / toggle) + exposed fields or tab presets' },
132-
{ field: 'tabs', type: 'repeater', helpText: 'In-view filter tabs — each tab applies its own filter rules' },
169+
{
170+
field: 'tabs',
171+
type: 'repeater',
172+
helpText: 'In-view filter tabs — each tab applies its own filter rules',
173+
// Row-property names (#17508): every authorable row property, `label`
174+
// equal to the item schema's `.meta({ title })`, so `os i18n extract`
175+
// emits a catalog key per column and the panel keeps its schema-derived
176+
// widgets (no `type` here).
177+
fields: [
178+
{ field: 'name', label: 'Name' },
179+
{ field: 'label', label: 'Label' },
180+
{ field: 'icon', label: 'Icon' },
181+
{ field: 'view', label: 'List View' },
182+
{ field: 'filter', label: 'Filter' },
183+
{ field: 'order', label: 'Display Order' },
184+
{ field: 'pinned', label: 'Pinned' },
185+
{ field: 'isDefault', label: 'Default Tab' },
186+
{ field: 'visible', label: 'Visible' },
187+
],
188+
},
133189
{ field: 'appearance', type: 'composite', helpText: 'allowedVisualizations: which renderers users may switch between' },
134190
{ field: 'userActions', type: 'composite', helpText: 'Toolbar toggles: sort / search / filter / row height' },
135191
{ field: 'addRecord', type: 'composite' },

0 commit comments

Comments
 (0)