It looks like we have a new race condition that may only be a problem in
specs. If you trigger one report, it displays via websockets and then
you trigger the next report, there may still be some Javascript active
that displays the first report while the second one is loading. I'm not
sure if users would navigate that fast though.
To minimise the problem, I adjusted the polling to leave more room for
the default websockets response.
This also resolves a race condition scenario. Even if the report gets
rendered via websockets before the controller response is rendered then
the fallback script loads the report again. It's not the most beautiful
but probably okay until we replace websockts altogether.
I'm leaving websockets in at the moment because it can render the report
much quicker than polling can.
The helpers are more convenient but also allow us to add options like
smooth scrolling. I thought that looked nicer and is less confusing.
Please note that the `scroll_into_view` helper uses the `targets`
attribute instead of `target`. That attribute needs CSS selectors with a
leading `#` for ids.
I'm adding TurboPower for the scroll_into_view action. It adds all the
nice CableReady actions to Turbo Streams.
Note that I omitted `block: "start"` because that option is the default
in Javascript. And the generic `action` method doesn't support
parameters like this anyway. I'll work on that in the next commit.
I also re-introduced a race condition by rendering the "loading"
indicator after triggering the report rendering job. I'm planning to
resolve that later.
We still depend on it as long as we set it as image processor but now we
can switch to another image processor without changing the code around
error handling.
We now rescue from unknown errors during image processing which should
make the app more robust.
We only reference MiniMagick when rescuing errors but when it's not
loaded, that code fails to find the error class itself to apply the
rescue block.
The rescue block is covered by a spec but the code passes there as
MiniMagick is loaded.
We can see this error only in development, staging and production.
It wasn't really necessary, but I'm going to need this list in a moment, so we might as well use it.
Also it allows us to ensure the options are listed in a certain order.
Also maybe it will help protect against corrupt preferences.
The preference will be set from the admin interface in a new commit
It would be nice if we had an array/list type for preferences. Probably not too hard to implement, but this will do.