feat(flow-designer): nested-array columns in the node property form (#2678 P2-5)#2761
Merged
Conversation
…2678 P2-5) The server-driven node property form (configSchema → FlowConfigField) now renders nested arrays inside an objectList repeater instead of degrading them to a plain text cell that String()-joined and corrupted the array on save. A repeater column whose item property is itself an array becomes a nested repeater (repeater-in-repeater): - json-schema-to-fields `columnsFor` maps an array-typed item property to a stringList / numberList / objectList column; object-array columns derive their nested columns recursively (bounded by a nesting cap so a pathological / cyclic schema can't build a non-terminating form). Unrepresentable arrays fall through to the prior text behavior — no regression. - FlowConfigColumn gains the three list kinds plus a recursive `columns` for nested objectList. - FlowObjectListField renders those columns via the shared FlowStringListField (string/number lists, with number[] coercion) and a recursive FlowObjectListField (object lists), round-tripping each cell as an array. Closes the last open acceptance item of #2678 (P2-5). Docs + changeset updated; new mapper + nested-render tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sa7REWrWMsukqPbtoGASPr
|
The latest updates on your projects. Learn more about Vercel for GitHub. |
Contributor
✅ Console Performance Budget
📦 Bundle Size Report
Size Limits
|
os-zhuang
marked this pull request as ready for review
July 21, 2026 03:07
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes the last open acceptance item of #2678 — P2-5: nested-array support in the flow designer. Everything else in the umbrella (OOO/quorum/per_group SDUI paths, decision attachments, the
DeclaredActionsBaraction-SDUI migration, viewer gating) already merged (#2681, #2692, #2697, #2710, #2719); each of those PRs explicitly deferred this one item.The gap
The server-driven node property form (
configSchema→FlowConfigFieldviajson-schema-to-fields) maps an array-of-objects to anobjectListrepeater, but a repeater column could only be a scalar (text/expression/boolean/select/reference). An item property that was itself an array (or object) fell through to atextcolumn — whichString()-joined the array (["a","b"]→"a,b") and corrupted it on save. So an engine-published nested-array node config was effectively un-editable in the designer.What
A repeater column whose item property is an array now becomes a nested repeater (repeater-in-repeater):
json-schema-to-fields—columnsFormaps an array-typed item property to astringList/numberList/objectListcolumn. Object-array columns derive their own nested columns recursively, bounded by a nesting cap so a pathological or (via inlined$ref) cyclic schema can't build a non-terminating form. Arrays that still aren't representable fall through to the priortextbehavior — no regression.flow-node-config—FlowConfigColumn.kindgainsstringList/numberList/objectList, plus a recursivecolumns?for nestedobjectList.FlowObjectListField— renders the nested columns via the sharedFlowStringListField(string/number lists, withnumber[]coercion) and a recursiveFlowObjectListField(object lists), round-tripping each cell as an array.numberList/objectList/stringListcells init to[], prune empty on flush, and commit as real arrays.The one thing I did not change: the component's existing commit idiom (
flushinside thesetRowsupdater). Moving it out to fix React's dev-only "update a component while rendering a different component" warning trips the React-Compilerrefsadvisory (ref access must live inside the updater), which would break the repo's lint-delta-zero rule. The warning is pre-existing to this component — base triggers the identical one for its own objectList checkbox/select/remove controls — so the nested lists just inherit it; a clean fix is a separate, component-wide refactor.Verification
FlowObjectListFieldnested render + round-trip tests (nestedstringListedit →string[];numberList→number[]coercion; nestedobjectListrow). Full inspector suite green (330 tests); typecheck clean; eslint delta zero.GET /api/v1/automation/actionsto publish aconfigSchemawith an array-in-objectList. Selecting the node rendered theobjectListfrom the schema; adding a rule row rendered the nested Recipients (stringList), Retry offsets (numberList), and Escalations (objectList) editors inline; a nested recipient round-tripped (recipients[0]committed"oncall@example.com") and a nested Escalations row (After hours + Notify) rendered — a repeater-in-repeater, no drop to Advanced JSON.Docs
content/docs/guide/flow-designer.mdandpackages/app-shell/README.mdupdated; changeset added (@object-ui/app-shellminor).Refs
#2678 (P2-5) · #2681 / #2692 / #2697 / #2710 / #2719 (prior phases)
🤖 Generated with Claude Code
Generated by Claude Code