Fixed bug with a custom layer being added to the m_map twice.
Add methods to MapLayout mixin for building custom layers and layer groups consistently
Remove hard-coded values from add custom layer modal
Add custom layers to the bottom of the stack of layers (not on top)
Add layer tree item to the bottom of the Custom Layer group instead of on top
Make map extent definition easier to change dynamically (at runtime)
MVView can now be defined from center and zoom OR extent
Added JavaScript API for adding alert messages dynamically on the front end that are consistent with those generated by Django messages on the backend.
Map Layout can now automatically discover WMS layer extents for the zoom-to-layer feature.
Layer groups can be set to be collapsed initially on map layout.
The rename and remove options can be enabled/disabled on a layer-by-layer basis.
Coverage decreased (-0.01%) to 99.99% when pulling a42011b989807f315c5a7db8d9f4a3458adfd7d0 on map_layout_custom_layer_fixes into 6203c3b0181f7d5affcea9bee665173d07472c61 on main.