You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Found dogfooding report design in Studio. Authoring the blocks of a joined report uses the raw generic SchemaForm repeater, so it lacks the curated affordances the top-level report inspector (ReportDefaultInspector) has. Functional, but clunky.
Priority: Low — joined is the least-used report type, and authoring is functional (you can build + save; the editor preview now renders them after #1965). This is friction, not a blocker.
Symptoms (all one root cause)
Per joined block, the inspector shows generic fields because blocks are array items rendered by the repeater without curated widgets/layout:
Dataset is a free-text input (no ref:dataset dropdown) — the author must type the exact dataset name.
Rows / Columns / Values are free-text tag inputs — no dataset-aware measure/dimension pickers (no catalog, no validation against the dataset's semantic layer).
The entire ChartConfigSchema is rendered inline for each block's optional chart (Title/Subtitle, X/Y axis, Series table, Colors, Height, Annotations, Tooltips/Zoom/Brush, Aria…) — dozens of fields that bury the block's data binding and make the form very long.
* "required" markers appear on the optional chart's xAxis/yAxis/type even though the whole chart is optional (markers come from the nested ReportChartSchema; leaving the chart empty is valid, so they mislead).
Root cause
joined blocks are a nested array edited via the blocks repeater, which renders each item from JoinedReportBlockSchema generically. The metadata-admin's curated inspectors operate per top-level metadata type (ReportDefaultInspector), not per nested array item — so blocks don't get the dataset dropdown / measure-dimension pickers / compact chart.
Suggested approach
Follow the dashboard-widget precedent (scoped inspector): let a joined block emit a selection and register a scoped BlockInspector (via registerMetadataInspector) that edits the selected block with curated controls — reusing the already-exported DatasetNamesEditor (measures/dimensions) and the ref:dataset dropdown from the top-level report inspector. This generalizes to other repeater-based authoring too.
Cheaper partial alternatives (lower value, with caveats):
Give the block dataset a dropdown — needs repeater-item widget hints.
Collapse the block's chart composite by default / suppress * on an optional composite — touches generic SchemaForm rendering (affects all optional composites), so weigh carefully.
Reference files: packages/app-shell/src/views/metadata-admin/inspectors/ReportDefaultInspector.tsx (curated top-level — the model to mirror), the blocks repeater path, and @objectstack/specJoinedReportBlockSchema / ReportChartSchema.
Summary
Found dogfooding report design in Studio. Authoring the blocks of a
joinedreport uses the raw genericSchemaFormrepeater, so it lacks the curated affordances the top-level report inspector (ReportDefaultInspector) has. Functional, but clunky.Priority: Low —
joinedis the least-used report type, and authoring is functional (you can build + save; the editor preview now renders them after #1965). This is friction, not a blocker.Symptoms (all one root cause)
Per joined block, the inspector shows generic fields because blocks are array items rendered by the repeater without curated widgets/layout:
ref:datasetdropdown) — the author must type the exact dataset name.ChartConfigSchemais rendered inline for each block's optional chart (Title/Subtitle, X/Y axis, Series table, Colors, Height, Annotations, Tooltips/Zoom/Brush, Aria…) — dozens of fields that bury the block's data binding and make the form very long.*"required" markers appear on the optional chart'sxAxis/yAxis/typeeven though the whole chart is optional (markers come from the nestedReportChartSchema; leaving the chart empty is valid, so they mislead).Root cause
joinedblocks are a nested array edited via theblocksrepeater, which renders each item fromJoinedReportBlockSchemagenerically. The metadata-admin's curated inspectors operate per top-level metadata type (ReportDefaultInspector), not per nested array item — so blocks don't get the dataset dropdown / measure-dimension pickers / compact chart.Suggested approach
Follow the dashboard-widget precedent (scoped inspector): let a joined block emit a selection and register a scoped
BlockInspector(viaregisterMetadataInspector) that edits the selected block with curated controls — reusing the already-exportedDatasetNamesEditor(measures/dimensions) and theref:datasetdropdown from the top-level report inspector. This generalizes to other repeater-based authoring too.Cheaper partial alternatives (lower value, with caveats):
dataseta dropdown — needs repeater-item widget hints.*on an optional composite — touches genericSchemaFormrendering (affects all optional composites), so weigh carefully.Context
packages/app-shell/src/views/metadata-admin/inspectors/ReportDefaultInspector.tsx(curated top-level — the model to mirror), theblocksrepeater path, and@objectstack/specJoinedReportBlockSchema/ReportChartSchema.