Allow providing arrays of subcomponents when crafting a component.

Review Request #13646 — Created March 18, 2024 and submitted

Information

Ink
master

Reviewers

When crafting a component, subcomponents are expected to be provided
one-by-one. This is fine in typical usage, but if a component needs to
pre-build subcomponent state and pass it in as an array of
subcomponents, then this will fail.

What happens is that the array of subcomponents ends up being provided
as a single child to a component. This doesn't get seen as subcomponent
information, since it's an array and not a subcomponent object.

Since the grammar doesn't provide something like ...${subcomponents}
outside of a <tag>, we instead need to handle this in the crafting
implementation.

We now handle any children that are arrays as possible lists of
subcomponents. We'll never have an array as a valid child outside of
this, so this should be safe and shouldn't impact any other usage.

This problem was first encountered in MenuButton.

All unit tests pass.

Hit this with MenuButton and verified I could capture and pass along
arrays of subcomponents.

Summary ID
Allow providing arrays of subcomponents when crafting a component.
When crafting a component, subcomponents are expected to be provided one-by-one. This is fine in typical usage, but if a component needs to pre-build subcomponent state and pass it in as an array of subcomponents, then this will fail. What happens is that the array of subcomponents ends up being provided as a single child to a component. This doesn't get seen as subcomponent information, since it's an array and not a subcomponent object. Since the grammar doesn't provide something like `...${subcomponents}` outside of a `<tag>`, we instead need to handle this in the crafting implementation. We now handle any children that are arrays as possible lists of subcomponents. We'll never have an array as a valid child outside of this, so this should be safe and shouldn't impact any other usage. This problem was first encountered in `MenuButton`.
a66894a2f0425eced443b0406b3ebfd2d419337c
david
  1. Ship It!
  2. 
      
chipx86
Review request changed
Status:
Completed
Change Summary:
Pushed to master (19daf64)