frontend: make a unified container widget
Current behaviour
We have separate implementations for nearly identical feature sets, and several issues that are unique to one of the container types (so there's extra to test, and extra to try to maintain).
This results in the independent maintenance overhead of issues like #587 and #1690, as well as troubleshooting overhead from issues like #1431, #1479, #1676, #1714, #1452, #1768, #1889, and #1750 (some of which are caused by the interaction between the independent implementations).
Expected or desired behaviour
I think we should merge the implementations into a single generic "container" widget, with configuration options that allow displaying the name, making it collapsible/hidden, and making it draggable outside of edit mode.
Ideally there would as be a configuration option to choose which container gets used as the top bar and bottom bar, with a convenience feature where dragging a container to the top or bottom edge of the view (in edit mode) allows setting it as the corresponding bar (and moving the existing bar, if there is one, to be a normal container).
If containers are stored at the Profile or User level they could readily be shared between Views, which would resolve problems like #688 as a side-effect.
Prerequisites
- [x] I have checked to make sure that a similar request has not already been filed or fixed.
Completely agree Eliot!
We should have a single floating container (probably the CustomBase, as it's a more complete one) and fix the InputWidgets to be completely isolated from them and other parts of the application (as it is already with MiniWidgets and the MiniWidgetsBar).
InputWidgets should really not be implemented any different from the MiniWidgets. What caused this tight coupling problem (mainly in widgetManager.ts) initially was the lack of a persistence feature in the data-lake, which implicated in other decisions that didn't evolved well, but we now have full persistence support on the data-lake, so this whole legacy code can be removed, functionality can be isolated, duplicated things can be merged and we can more easily fix bugs.