Simple Rails forms prevent double-clicking on submit already. Converting
the StimulusReflex interaction to a simple form submit to a controller
solves the race condition.
The UX is slightly worse because the whole page is reloaded instead
rendering only the connected app panel. But we can solve that when we
add more apps and want to activate them independently. By then, we may
have good patterns for working with Turbo.
Technically, the new buttons are a form within a form which is invalid
HTML, but it works.
The app has to provide a webhook URL to be notified when the app is
disconnected. Once we have better token management, we would have a
unique token per app and could revoke it. But for now it's just a
request to disconnect the app.
I would have like to use a standard form to submit to the reflex but the
whole enterprise settings tab is in a form already and HTML doesn't
allow nested forms. While it does still work in browsers, it would have
added much more HTML to set up a form with a hidden input field instead
of just one additional data attribute.
The whole page is rendered by the controller again but the reflex root
attribute ensures that only parts of this tab are replaced. Otherwise
unsaved data on other tabs could be replaced and the page actually
becomes blank because AngularJS doesn't play well with the morph.
+ Move outside `Admin` module the reflex
Therefore, this reflex should be _equivalent_ to its javascript controller: `ProductsV3` (relation is made through names)
Remove unwanted line
Actually call StimulusJS controller instead of calling the reflex itself
In order to have this "showLoading", "hideLoading" behavior.
It seems to be possible to directly use the Reflex itself (use `data-reflex` instead of `data-action`) but I can't make it work: the `stimulus-controller:after` event is never broadcasted/catched (but `stimulus-controller:before` yes...)
Documentation:
https://docs.stimulusreflex.com/guide/reflexes.html#understanding-stimulusreflex-controllers
https://docs.stimulusreflex.com/guide/lifecycle.html#generic-life-cycle-methods
Maybe @dacook if you want to have a look...
For `admin_style_v3` use `<` and `>` for next and previous link
instead of `next` and `previous` string
Extract a mixin for a default box-shadow
Maybe this needs to be redefined. Let's see how next things goes.
When a table is followed by a pagination, remove its margin-bottom + border
Finally, design the pagination component
Add sorting/pagination module, on top of table
We use `cablea_ready.replace`, so need to add `#products-content` id
Use a `pagy` partial with reflex action, instead of the legacy one
- revert the legacy one to its previous state
- in reflex, fetch product with page attribute, 1 by default
Move `pagy` into `admin/shared/v3/` to be reusable
+ use fontawesome icons for next and previous page
Remove useless line