Support controlled state in the carousel component #1503
Closed
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.
Introduce controlled selection for the
<Carousel>component, allowing external management of the selected index.This way it is possible to use for example query params to decide where the Carousel should start. Or auto-scroll with
setTimeout:Screen.Recording.2025-11-13.at.12.08.09.mov
My initial thought was to consolidate the
onSelectedIndexChangeand theonChangecallbacks. TheonChangecallback was initially added to support tracking, and this is used by some consumers already. I haven't found any easy way to make theonSelectedIndexChangecallback flexible enough to support bothCarouselItem | number(for tracking you probably wantCarouselItem, but for regular controlled state management the index (number) is much easier. The callback also needs to be of typeSetStateAction, since the next/prev "buttons" bases the new state set on the current state. A simple approach would be to just scraponChangealtogether, but then that would require the consumer to put the component in a controlled state just to be able to track changes. Which also feels a bit much to ask. So I suggest we initially just keep theonChangeprop for tracking purposes, and separate that from controlled state management.