My first thought was to just assign a “move right” action to Mouse Exit to ensure only one panel can be “open” --slid left. However, this would prevent user from engaging with widgets behind the panel (e.g., trash button.) and wouldn’t work with touch-only/mobile UI.
My next thought was to update the repeater when swiping/dragging a row, as that would reset every row to default, thus closing them all. But that would likely slow things down and/or be clunky --if it worked at all.
I then considered a selection group and an Unselected event to “close” the panel–moving it all the way to the right. So, when you uncheck the repeater’s “Isolate Selection Groups” checkbox option, and assign a widget to a selection group, only one instance of that group may be selected at a time. I tested this out and it seems to work pretty well.
slide only 1 row in repeater.rp (62.1 KB)
In the repeater, there is a rectangle to show the row’s label. I created a selection group for this widget, named “repeater panels” (click Show All in the INTERACTIONS pane) and unchecked “Isolate Selection Groups” checkbox for the repeater (also in INTERACTIONS pane.) I then created a dynamic panel from this rectangle, and it sits in front of a trash button. The dynamic panel has a Dragged event to allow it to move left and right to expose or hide the trash button.
Now, here is the important part to ensure only one row can be “open” at a time. The dynamic panel has a Drag Started event that sets “This” to true–which selects the one widget inside its only state. When the rectangle in the current row is selected, all other row’s instances are automatically unselected. The rectangle has an Unselected event with an action to “Move row panel to (0, ) ease out cubic 300” which resets the panel to its default location, with a little animation. I had to create this on the rectangle widget instead of the dynamic panel itself because the latter don’t have Selected / Unselected events. A Drag Dropped event decides whether to open or close the row depending on the location of the dynamic panel and direction of the drag.