Hey @kevin.hunt, thanks for your kind comments and ALSO for your generous contribution to the development of Bubble plugins that do not suck!
As for the problem you are describing, it’s impossible for me to say what’s going on in your Iterate workflow without actually seeing it. If you can put your simple example into a project where anyone can edit (DM me the link), I can take a look sometime soon-ish.
There is probably NOT a problem with List Shifter, but more of a problem on your end understanding what, exactly, is happening. Though it’s possible something is wacky in Bubble that impacts what it is you’re trying to do. (I see no problems with List Shifter ATM, BTW, and I use it all the time.)
As for your List Shifter-in-a-repeating-group scenario, any wacky results you are most likely the result of misunderstanding “what happens when” in Bubble. While you can do this (put a List Shifter into a repeating group, resulting in a bunch of List Shifters (one for each cell) all doing their own thing (s) within the scope of that RG), this is NOT what List Shifter is for.
List Shifter is (in part) a way to compute values before sending them to a repeating group for display. (Repeating Groups are stupid and cause Bubble developers to be confused about the difference between computing values and displaying them.)
Basically, if you have a List Shifter in a Repeating Group cell (meaning that you are, at runtime, creating a bunch of List Shifters, each of which exists in a cell of that RG) and are then firing off “Iterate” actions, that’s gonna get real wacky real fast. Because each List Shifter will be firing off workflows iteratively at the same time.
I can’t think of ANY practical use case for doing that. (Such List Shifters [probably just 1 List Shifter] should exist outside of the RG, compute what it is that you want to display, and then use the outputs of that List Shifter in the RG.)
Anyway, I’d be interested to see what it is that you are trying to do. The solution is likely rather simpler than how you are attempting to do it (whatever “it” is).
As for why List Shifter is donation-ware, rather than a commercial plugin: List Shifter started as just a (nearly) one-liner to do
.reverse() an an array of values in a List of primitive data types. (That function, amongst many others, being mysteriously absent from Bubble.) But of course, I couldn’t stop there.
If you want to reverse a list, you might also want to change the positions of items in the list (“SWAP Items” action). Or you might want to rotate (“shift”) such an array (hence the name, “List Shifter”). And, it’s really common design pattern in Bubble to store a “selected item” (in a custom state) so that you can do something special with it. (Why not build that into the plugin as well, and save a lot of time?)
And then, people asked for List Shifter to work better with Things, and that’s an interesting subject to explore in Bubble plugins, so I added that.
A little earlier, I had completed Calendar Grid Pro, which incorporates similar “Iterate” functionality that I later added to List Shifter. (In CG Pro, it can be used to iterate over internal lists of dates that that plugin generates and that was developed to solve a specific problem that I needed to solve for myself for my own commercial Bubble-built app.)
Obviously, it would be useful to be able to iterate over any sort of list and it was kind of a no-brainer to make such a feature available in List Shifter. And I did think about making that “List Shifter Pro” (a paid plugin). However, there were other considerations:
At the time, this feature seemed too useful to just be limited to folks with paid plans (only paid apps can use paid plugins).
It pisses me off that Bubble doesn’t easily enable arbitrary, client-side iteration and forces people to do dumb stuff with backend workflows to accomplish very simple looping operations, and I just wanted to make a point. (The point being, “c’mon Bubble, your users aren’t as stupid as you think they are, please finish the product.”) Bubble is a half-finished, array-oriented language. Somebody has to point this out, might as well be me.
While the Iterate feature was very novel and kind of breakthrough in terms of my own plugin development, it’s not actually hard and a really skilled JS developer would immediately see that this is possible just from reading the docs in the plugin builder. (I even posted about the pre-“a-ha!” moment, in this post.)
In fact, there’s another plugin dev who realized the same thing at almost exactly the same time that I did. (They just didn’t understand how useful and important that was and implemented it in a paid plugin in a different way.)
There’s also a bunch of not-very-good Bubble plugin devs who would likely stumble upon the same idea and either (1) develop crappy versions of it or (2) outright steal it from commercial plugins without really understanding how it works and take people’s money for it, but do a shitty job of the whole thing.
So, I just built it into List Shifter and made it free, but also well-implemented and fairly-well supported (while List Shifter is fairly mature and updates are sporadic, it’s something that I constantly improve).
This turns out to have been the right decision as “Iterate” isn’t really all of that useful because of how slow workflows are (for reasons I will not belabor here). Most of what Bubble devs want to do is better served by the PROCESS List action (which is itself very innovative) and better makes my point about Bubble being a half-assed / half-finished array-oriented language.
As more and more people use List Shifter, I see what they are trying to accomplish and try to make things incrementally easier. One big thing people seem to have an issue with is how to count some things in an array-wise manner (even though this is trivial using PROCESS List), and so the next update to List Shifter features a built in “count the number of things in a Thing” feature that hopefully will alleviate such pains.
Also, there is a server-side version of PROCESS List that I’ll release soon-ish (as a paid plugin, because it’s more specialized). But first, I need to get my next paid plugin “Cheap Date Tricks” out, which I hope to finally release this week (it solves bunch of common date/date range/date list/date range list problems that people often run into).