Skip to content

Commit

Permalink
[Backport 2022.01.xx-georchestra] #8086 Layout changes and other impr…
Browse files Browse the repository at this point in the history
…ovements (#8085) (#8175)

* #8086 Layout changes and other improvements (#8085)

* # 150 Layout changes of the UI

- Moving annotations to the left sidebar (TOC), adding annotation management tools into its toolbar.

* Updated test to be align with the changed position of annotations panel

* Changes for print plugin required to support printing of additional layers.

* Minor customizations for "Home" and "Login" plugins to make them properly styled both for Omnibar and SidebarMenu
Adding abstract element for sidebar menu that could be used as a tool.
Making OmniBar disappear on map viewer page if sidebarMenu was instantiated.

* Update of the rest plugins that were presented in BurgerMenu to appear in SidebarMenu

* rollback, was causing problems when some glyphicons were not rendered

* Corrections of style for legacy burger menu

* - Hide burger menu when SidebarMenu is active, keep OmniBar visible as it is a container for search plugin
- Updated configuration for right panels: aligned their width (all to 550px), connected them to the layout state so that they track for right/bottom paddings.
- Provided different way to apply paddings for dock panels and for toolbars (omnibar, map toolbar)
- New component to wrap dock panels.
- Style changes

* Skip attempt to sum-up dockSize as percentage amount.

* Moved layout-based style from omnibar to search plugin to prevent infinite loop

* Added toggle support for part of the tools;
Style fixes.

* Selector & reducer update

* Sidebar menu with tracking of the window height and hiding elements into dropdown dynamically.

* - Sidebar - keep last active item tracked.
- Burger menu, fix for visibility condition
- Minor fix to the selector to get paddings for docks and toolbars depending on open tools. Definitely not the most beauty way to resolve the issue, but it helps to prevent gazzilions of unneeded re-renders for components when store state changes by ANY action.
- All menu elements are togglable.
- Search bar with new behavior (- media queries, + checks if width fit to the screen)
- Fix for react-container-dimensions & dock components by updating it to the latest version (only used by docks, so it's easy to test/safe to update)
- Slightly changes styles of preview plugin to make it look fine with the sidebar menu.

* Prevent reset of last active item from additional list when user toggles item in the main list

* Support of having plugins list that define dock panel that needs to be open exclusively in sidebar. All other panels from the list will be deactivated automatically. Configurable/extendible via "miscSettings.excludsiveDockPanels" in localConfig.json

* - Updated annotations panels order (since it's moved from right to left)
- Deactivate annotations when measure is on and vice versa
- Toggle off any open panel in right sidebar when feature editor is open
- Toggle off Identify panel when any right panel is getting activated.
- Z-index readjustments

* - Fixes for searchbar when omnibar contains elements;
- Add cadastrapp to the list of exclusive panels
- Re-checking that sidebar is properly instantiated on its update. Sometimes onInit isn't running on component mount.
- Making user extensions plugin close feature editor

* Locale strings for sidebar menu

* Fixes search to be styled consistently with or without sidebar menu.
Correction of elements order in omnibar on home page.

* Fixes search to be styled consistently with or without sidebar menu.

* Amending existing tests to make them work after layout changes;
Minor fixes to the epic to keep old logic for "bottom" offset.

* Basic test coverage for implemented functionality

* Reverting flex styles for omnibar. Using simpler approach for proper searchbar positioning.

* Fix of the bug that prevents prioritized container to be properly selected if more than one container is defined as a function in plugin.

* - Changes in plugin priorities to make them appear in BurgerMenu by default.
- SLight update to the burger menu to make it's possible to track whether it's mounted on the page or not.
- Resolving issue with Home and Login plugins to be rendered in sidebarMenu IF there is no BurgerMenu, otherwise they should be rendered in omnibar;
-

* Reducing button sizes;
Adding shadow to the sidebar;
Replaced save tool icon.

* Making option to print additional layers optional and disabled by default, updating option name.

* Removed monitored state.

* Removed BurgerMenu from desktop plugins.

* Share plugin tests fix.

* Order matters

* 15/30px size for medium-size buttons

* - Separate panel component with support of tracking of container width
- Fix for measure plugin;
- Fix of map grid element height on home page.

* Fix for annotations plugin tests

* Revert of hardcoded toolbar buttons in TOC for annotations. Defining buttons in Annotations plugin instead.

* Correction to make cards size approximately same as it was before button sizes change

* Using common button size in less stylesheet of SidebarMenu;
Migration guide.

* - Tracking of the case when left/right panels are open via state.
- Style fix for mapstore logo, spinner;
- Widgets plugin corrections, removed hardcoded offset, using offset provided by state.
- Amended tests

* Updated migration documentation with changes to the pluginsConfig.json

* - Map export, Save, SaveAs plugins - making them work again by adding doNotHide flag into container configuration.

* DockContainer and ResponsivePanel documentation

* Added card-height variable.
Applied it to the min-height of the sidegrid cards & TOC layers list

* Missed lines

* Missed lines /2

* Use card-height in TOC styles

* Suggested change to the documentation with minor fix

* Update web/client/configs/pluginsConfig.json

Co-authored-by: Lorenzo Natali <[email protected]>

* Properly hide overlay layers printing options by default (it is enabled if opposite is not passed by props)

* Properly hide overlay layers printing options by default (it is enabled if opposite is not passed by props)

* Missing doNotHide for DeleteMap plugin

Co-authored-by: Lorenzo Natali <[email protected]>

(cherry picked from commit 8d438d9)

* 8086 Bugfixes for layout changes (#8169)

* Context creator - map configuration - use SidebarMenu instead of burger menu.
Properly refresh sidebar menu activity state on map reload

* Class name should be applied to the container as it's important for proper styling of catalog in modal map viewer in geostory

* Custom compass offset on Cesium viewer in case if sidebar is active. Passing sidebar state to the map plugin.

* Get back original containers, applying same priority to the containers and hiding menu item in sidebar if burger menu exists on the page
Rolling back updatableLayersCount selector item.

* Revert "Custom compass offset on Cesium viewer in case if sidebar is active. Passing sidebar state to the map plugin."

This reverts commit 704c205.

* Static position update of compass

* Update of the pluginsFilterOverride to make it works with a custom list of plugins passed by props

(cherry picked from commit 29cbb12)
  • Loading branch information
alexander-fedorenko authored May 9, 2022
1 parent d45ae63 commit 72e2f4c
Show file tree
Hide file tree
Showing 123 changed files with 2,505 additions and 695 deletions.
78 changes: 78 additions & 0 deletions docs/developer-guide/mapstore-migration-guide.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,90 @@ This is a list of things to check if you want to update from a previous version
- Follow the instructions below, in order, from your version to the one you want to update to.


### Replacing BurgerMenu with SidebarMenu
There were several changes applied to the application layout, one of them is the Sidebar Menu that comes to replace Burger menu on map viewer and in contexts.
Following actions need to be applied to make a switch:
- Update localConfig.json and add "SidebarMenu" entry to the "desktop" section:
```json
{
"desktop": [
...
"SidebarMenu",
...
]
}
```
- Remove "BurgerMenu" entry from "desktop" section.

#### Updating contexts to use Sidebar Menu

Contents of your `pluginsConfig.json` need to be reviewed to allow usage of new "SidebarMenu" in contexts.

- Find "BurgerMenu" plugin confuguration in `pluginsConfig.json` and remove `"hidden": true` line from it:

```json
{
"name": "BurgerMenu",
"glyph": "menu-hamburger",
"title": "plugins.BurgerMenu.title",
"description": "plugins.BurgerMenu.description",
"dependencies": [
"OmniBar"
]
}
```

- Add `SidebarMenu` entry to the "plugins" array:

```json
{
"plugins": [
...
{
"name": "SidebarMenu",
"hidden": true
}
...
]
}
```

- Go through all plugins definitions and replace `BurgerMenu` dependency with `SidebarMenu`, e.g.:

```json
{
"name": "MapExport",
"glyph": "download",
"title": "plugins.MapExport.title",
"description": "plugins.MapExport.description",
"dependencies": [
"SidebarMenu"
]
}
```

- Also the `StreetView` plugin needs to depend from `SidebarMenu`.

```json
{
"name": "StreetView",
"glyph": "road",
"title": "plugins.StreetView.title",
"description": "plugins.StreetView.description",
"dependencies": [
"SidebarMenu"
]
}
```


## Migration from 2022.01.00 to 2022.01.01

### MailingLists plugin has been removed

`MailingLists` plugin has ben removed from the core of MapStore. This means you can remove it from your `localConfig.json` (if present, it will be anyway ignored by the plugin system).


## Migration from 2021.02.02 to 2022.01.00

This release includes several libraries upgrade on the backend side,
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@
"react-codemirror2": "4.0.0",
"react-color": "2.17.0",
"react-confirm-button": "0.0.2",
"react-container-dimensions": "1.3.2",
"react-container-dimensions": "1.4.1",
"react-contenteditable": "3.3.2",
"react-copy-to-clipboard": "5.0.0",
"react-data-grid": "5.0.4",
Expand Down
19 changes: 19 additions & 0 deletions web/client/actions/__tests__/sidebarmenu-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/**
* Copyright 2022, GeoSolutions Sas.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/

import expect from 'expect';
import {SET_LAST_ACTIVE_ITEM, setLastActiveItem} from "../sidebarmenu";

describe('Test correctness of the sidebar actions', () => {

it('test setLastActiveItem', () => {
const action = setLastActiveItem("annotations");
expect(action.type).toBe(SET_LAST_ACTIVE_ITEM);
expect(action.value).toBe("annotations");
});
});
16 changes: 16 additions & 0 deletions web/client/actions/sidebarmenu.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Copyright 2022, GeoSolutions Sas.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/

export const SET_LAST_ACTIVE_ITEM = 'SIDEBARMENU:SET_LAST_ACTIVE_ITEM';

export function setLastActiveItem(value) {
return {
type: SET_LAST_ACTIVE_ITEM,
value
};
}
2 changes: 2 additions & 0 deletions web/client/components/TOC/Toolbar.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class Toolbar extends React.Component {
static propTypes = {
groups: PropTypes.array,
items: PropTypes.array,
layers: PropTypes.array,
selectedLayers: PropTypes.array,
generalInfoFormat: PropTypes.string,
selectedGroups: PropTypes.array,
Expand All @@ -41,6 +42,7 @@ class Toolbar extends React.Component {
static defaultProps = {
groups: [],
items: [],
layers: [],
selectedLayers: [],
selectedGroups: [],
onToolsActions: {
Expand Down
22 changes: 13 additions & 9 deletions web/client/components/contextcreator/ContextCreator.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ import ConfigureMap from './ConfigureMapStep';
import ConfigureThemes from './ConfigureThemes';
import {CONTEXT_TUTORIALS} from '../../actions/contextcreator';
/**
* Filters plugins and applies overrides.
* The resulting array will filter the pluginsConfig returning only the ones present in viewerPlugins.
* Merges plugins "cfg" from pluginsConfigs and applies "overrides" from viewerPlugins.
* The resulting array will return viewerPlugins with "cfg" applied directly from the pluginsConfigs and optionally overridden
* with "overrides" from viewerPlugins.
* If some viewerPlugin is an object, it can contain a special entry "overrides". If so, the configuration here
* will override the ones in the original plugin config.
* Actually overrides are supported only for "cfg" values.
Expand Down Expand Up @@ -46,17 +47,20 @@ import {CONTEXT_TUTORIALS} from '../../actions/contextcreator';
* "cfg": { activateQueryTool: false, otherOptions: true }
* },
* ```
* NOTE: Logic has changed to support custom list of plugins to be active on the map configuration step of context wizard.
* The final result will match previous implementation except that it will also contain plugins that are missing
* in "viewer"/"desktop" array inside localConfig.json -> plugins
* @param {array} pluginsConfigs array of plugins (Strings or objects) to override
* @param {array} viewerPlugins list of plugins to use
*/
export const pluginsFilterOverride = (pluginsConfigs, viewerPlugins) => {
return pluginsConfigs.map(p => {
const pName = isObject(p) ? p.name : p;
return viewerPlugins.map((viewerPlugin) => {
const pName = isObject(viewerPlugin) ? viewerPlugin.name : viewerPlugin;
// find out
const viewerPlugin = find(viewerPlugins, vp => {
return pName === (isObject(vp) ? vp.name : vp);
const p = find(pluginsConfigs, plugin => {
return pName === (isObject(plugin) ? plugin.name : plugin);
});
if (viewerPlugin) {
if (p) {
if (isObject(viewerPlugin) && viewerPlugin.overrides) {
const newP = isObject(p) ? p : { name: p };
const cfg = {
Expand All @@ -70,8 +74,8 @@ export const pluginsFilterOverride = (pluginsConfigs, viewerPlugins) => {
}
return p;
}
return null;
}).filter(p => p); // remove plugins not found
return viewerPlugin;
});
};

export default class ContextCreator extends React.Component {
Expand Down
Loading

0 comments on commit 72e2f4c

Please sign in to comment.