@eeacms/volto-eea-map 2.0.7 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,19 @@ All notable changes to this project will be documented in this file. Dates are d
4
4
 
5
5
  Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
6
6
 
7
+ ### [3.0.0](https://github.com/eea/volto-eea-map/compare/2.0.7...3.0.0) - 23 November 2023
8
+
9
+ #### :hammer_and_wrench: Others
10
+
11
+ - update [Miu Razvan - [`005b994`](https://github.com/eea/volto-eea-map/commit/005b9949a93a9101cf5b88054523e05d03deae05)]
12
+ - clean up [Miu Razvan - [`4144747`](https://github.com/eea/volto-eea-map/commit/4144747b84d1fb0e51614c7a963d750c9b67100d)]
13
+ - clean up [Miu Razvan - [`80c37f9`](https://github.com/eea/volto-eea-map/commit/80c37f9cb8b54e79caf5d147e452a5e88168a218)]
14
+ - bump version + remove uneeded code [Miu Razvan - [`adb8733`](https://github.com/eea/volto-eea-map/commit/adb8733fa4ce3d42a9d16cb7ad19518d49949da2)]
15
+ - update [Miu Razvan - [`6723242`](https://github.com/eea/volto-eea-map/commit/6723242a8507a29194cfc9650ae214d2abca74ad)]
16
+ - fix sonorqube [Dobricean Ioan Dorian - [`02b4406`](https://github.com/eea/volto-eea-map/commit/02b44067598c6cedcfc28c3b7667e4cb23addfc5)]
17
+ - fix prettier [Dobricean Ioan Dorian - [`78fc2ba`](https://github.com/eea/volto-eea-map/commit/78fc2baa2f5264ca1bba61b70bc0bdc5b2788e67)]
18
+ - Fix Sonorqube [dobri1408 - [`e04011a`](https://github.com/eea/volto-eea-map/commit/e04011aa811422f865d0bbb1e66af558a4310e77)]
19
+ - adapt embedeeamap to use serialized data [Dobricean Ioan Dorian - [`005965c`](https://github.com/eea/volto-eea-map/commit/005965c6793a9a9977fef52c08ba9a3173eec348)]
7
20
  ### [2.0.7](https://github.com/eea/volto-eea-map/compare/2.0.6...2.0.7) - 10 November 2023
8
21
 
9
22
  #### :rocket: New Features
package/README.md CHANGED
@@ -18,26 +18,30 @@
18
18
 
19
19
  # Configuration
20
20
 
21
- This addon contains the EEA Embed Map Block & EEA Map Block. It's configured to work with the map visualization content type and give more access to ArcGIS maps. See available maps here https://discomap.eea.europa.eu/
21
+ This addon contains the EEA Embed Map Block & EEA Map Block. It's configured to work with the map visualization content type and give more access to ArcGIS maps. See available maps here https://discomap.eea.europa.eu/
22
22
 
23
- # Enable data queries auto-import
23
+ # Enable data queries auto-import
24
24
 
25
- To enable automatic import of queries from the content-type, "Parameters for data connections" should be checked as behavior on the content-type that uses the map.
25
+ To enable automatic import of queries from the content-type, "Parameters for data connections" should be checked as behavior on the content-type that uses the map.
26
26
 
27
27
  controlpanel/dexterity-types/{content-type-id}
28
28
 
29
29
  # Enable Sources
30
30
 
31
- Sources (Data provenance) should be set on the visualization. To enable this, "EEA Core Metadata" should be checked as behavior on the visualization content-type.
31
+ Sources (Data provenance) should be set on the visualization. To enable this, "EEA Core Metadata" should be checked as behavior on the visualization content-type.
32
32
 
33
33
  controlpanel/dexterity-types/map_visualization
34
-
34
+
35
35
  After this, sources can be added from the visualization edit interface. "Data Provenance" tab => "Add source"
36
36
 
37
37
  [EEA MAP](https://raw.githubusercontent.com/eea/volto-eea-map/master/docs/volto-eea-map.gif)
38
38
 
39
39
  ## Getting started
40
40
 
41
+ ### Upgrade
42
+
43
+ #### 3.0.0 -> requires >= eea.api.dataconnector@7.0
44
+
41
45
  ### Try volto-eea-map with Docker
42
46
 
43
47
  git clone https://github.com/eea/volto-eea-map.git
@@ -57,25 +61,25 @@ Go to http://localhost:3000
57
61
 
58
62
  1. Start Volto frontend
59
63
 
60
- * If you already have a volto project, just update `package.json`:
64
+ - If you already have a volto project, just update `package.json`:
61
65
 
62
- ```JSON
63
- "addons": [
64
- "@eeacms/volto-eea-map"
65
- ],
66
+ ```JSON
67
+ "addons": [
68
+ "@eeacms/volto-eea-map"
69
+ ],
66
70
 
67
- "dependencies": {
68
- "@eeacms/volto-eea-map": "*"
69
- }
70
- ```
71
+ "dependencies": {
72
+ "@eeacms/volto-eea-map": "*"
73
+ }
74
+ ```
71
75
 
72
- * If not, create one:
76
+ - If not, create one:
73
77
 
74
- ```
75
- npm install -g yo @plone/generator-volto
76
- yo @plone/volto my-volto-project --canary --addon @eeacms/volto-eea-map
77
- cd my-volto-project
78
- ```
78
+ ```
79
+ npm install -g yo @plone/generator-volto
80
+ yo @plone/volto my-volto-project --canary --addon @eeacms/volto-eea-map
81
+ cd my-volto-project
82
+ ```
79
83
 
80
84
  1. Install new add-ons and restart Volto:
81
85
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-eea-map",
3
- "version": "2.0.7",
3
+ "version": "3.0.0",
4
4
  "description": "@eeacms/volto-eea-map: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -81,4 +81,4 @@
81
81
  "cypress:open": "make cypress-open",
82
82
  "prepare": "husky install"
83
83
  }
84
- }
84
+ }
@@ -1,119 +1,84 @@
1
- import React from 'react';
2
- import { SidebarPortal } from '@plone/volto/components';
3
-
1
+ import React, { useEffect, useMemo } from 'react';
2
+ import { Message } from 'semantic-ui-react';
4
3
  import { connect } from 'react-redux';
5
4
  import { compose } from 'redux';
6
5
 
6
+ import { SidebarPortal } from '@plone/volto/components';
7
+ import { getContent } from '@plone/volto/actions';
8
+ import { flattenToAppURL } from '@plone/volto/helpers';
7
9
  import BlockDataForm from '@plone/volto/components/manage/Form/BlockDataForm';
8
10
  import Webmap from '@eeacms/volto-eea-map/components/Webmap';
9
11
  import ExtraViews from '@eeacms/volto-eea-map/components/ExtraViews';
10
12
 
11
- import { expandToBackendURL } from '@plone/volto/helpers';
12
-
13
13
  import { Schema } from './Schema';
14
14
  import { applyQueriesToMapLayers } from '@eeacms/volto-eea-map/utils';
15
15
 
16
- import { getVisualization } from '@eeacms/volto-eea-map/actions';
16
+ import { getMapVisualizationData } from './helpers';
17
17
 
18
18
  const Edit = (props) => {
19
+ const { id, block, onChangeBlock, selected, data, getContent } = props;
19
20
  const {
20
- block,
21
- onChangeBlock,
22
- selected,
23
- data_provenance = {},
24
- figure_note = [],
25
- } = props;
21
+ data_query_params,
22
+ enable_queries,
23
+ show_legend = true,
24
+ show_note = true,
25
+ show_sources = true,
26
+ show_more_info = true,
27
+ show_share = true,
28
+ dataprotection = { enabled: true },
29
+ height = '',
30
+ } = data;
26
31
  const schema = Schema(props);
27
32
  const [mapData, setMapData] = React.useState('');
28
- const data = React.useMemo(() => props.data, [props.data]);
29
- const { height = '' } = data;
30
33
 
31
- React.useEffect(() => {
32
- if (!Object.hasOwn(data, 'show_legend')) {
33
- onChangeBlock(block, {
34
- ...data,
35
- show_legend: true,
36
- });
37
- }
38
- if (!Object.hasOwn(data, 'show_note')) {
39
- onChangeBlock(block, {
40
- ...data,
41
- show_note: true,
42
- });
43
- }
44
- if (!Object.hasOwn(data, 'show_sources')) {
45
- onChangeBlock(block, {
46
- ...data,
47
- show_sources: true,
48
- });
49
- }
50
- if (!Object.hasOwn(data, 'show_more_info')) {
51
- onChangeBlock(block, {
52
- ...data,
53
- show_more_info: true,
54
- });
55
- }
56
- if (!Object.hasOwn(data, 'dataprotection')) {
57
- onChangeBlock(block, {
58
- ...data,
59
- dataprotection: { enabled: true },
60
- });
61
- }
62
- if (!Object.hasOwn(data, 'show_share')) {
63
- onChangeBlock(block, {
64
- ...data,
65
- show_share: true,
66
- });
67
- }
68
- // eslint-disable-next-line react-hooks/exhaustive-deps
69
- }, [
70
- data.show_legend,
71
- data.show_note,
72
- data.show_sources,
73
- data.show_more_info,
74
- data.dataprotection,
75
- data.show_share,
34
+ const vis_url = useMemo(() => flattenToAppURL(data.vis_url), [data.vis_url]);
35
+
36
+ const map_visualization_data = useMemo(() => getMapVisualizationData(props), [
37
+ props,
76
38
  ]);
77
39
 
78
- React.useEffect(() => {
79
- if (props.data.vis_url) {
80
- props.getVisualization(expandToBackendURL(props.data.vis_url));
40
+ useEffect(() => {
41
+ const mapVisId = flattenToAppURL(map_visualization_data['@id'] || '');
42
+ if (vis_url && vis_url !== mapVisId) {
43
+ getContent(vis_url, null, id);
81
44
  }
82
- if (!props.data.vis_url) {
45
+ if (!vis_url) {
83
46
  setMapData('');
84
47
  }
85
- // eslint-disable-next-line react-hooks/exhaustive-deps
86
- }, [props.data.vis_url]);
48
+ }, [id, getContent, vis_url, map_visualization_data]);
87
49
 
88
50
  React.useEffect(() => {
89
51
  const updatedMapData = applyQueriesToMapLayers(
90
- props.map_visualization,
91
- props.data.data_query_params,
92
- props.data.enable_queries,
52
+ map_visualization_data,
53
+ data_query_params,
54
+ enable_queries,
93
55
  );
94
56
  setMapData(updatedMapData);
95
-
96
- // eslint-disable-next-line react-hooks/exhaustive-deps
97
- }, [props.map_visualization, props.data]);
57
+ }, [map_visualization_data, data_query_params, enable_queries]);
98
58
 
99
59
  return (
100
60
  <>
101
- {mapData && (
61
+ {!vis_url && (
62
+ <Message>Please select a visualization from block editor.</Message>
63
+ )}
64
+
65
+ {!!vis_url && mapData && (
102
66
  <div>
103
67
  <Webmap data={mapData} height={height} isEdit={true} />
104
68
  <ExtraViews
105
69
  data={{
106
70
  ...data,
107
- data_provenance,
108
- figure_note,
109
- map_data: props.map_visualization,
71
+ show_legend,
72
+ show_note,
73
+ show_sources,
74
+ show_more_info,
75
+ show_share,
76
+ dataprotection,
77
+ map_visualization_data,
110
78
  }}
111
79
  />
112
80
  </div>
113
81
  )}
114
- {!mapData && (
115
- <p>No map view to show. Set visualization in block configuration.</p>
116
- )}
117
82
  <SidebarPortal selected={selected}>
118
83
  <BlockDataForm
119
84
  block={block}
@@ -135,27 +100,11 @@ const Edit = (props) => {
135
100
  export default compose(
136
101
  connect(
137
102
  (state, props) => ({
103
+ mapContent: state.content.subrequests?.[props.id]?.data,
138
104
  data_query: state.content.data.data_query,
139
- '@id': props.data.vis_url
140
- ? state.map_visualizations?.data[
141
- expandToBackendURL(props.data.vis_url)
142
- ]?.['@id']
143
- : props.content?.['@id'],
144
- map_visualization: props.data.vis_url
145
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
146
- ?.data
147
- : '',
148
- data_provenance: props.data.vis_url
149
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
150
- ?.data_provenance
151
- : '',
152
- figure_note: props.data.vis_url
153
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
154
- ?.figure_note
155
- : '',
156
105
  }),
157
106
  {
158
- getVisualization,
107
+ getContent,
159
108
  },
160
109
  ),
161
110
  )(Edit);
@@ -1,63 +1,45 @@
1
- import React from 'react';
2
-
3
- import { connect } from 'react-redux';
4
- import { compose } from 'redux';
5
-
6
- import { expandToBackendURL } from '@plone/volto/helpers';
7
-
1
+ import React, { useMemo } from 'react';
8
2
  import { PrivacyProtection } from '@eeacms/volto-embed';
9
-
10
3
  import Webmap from '@eeacms/volto-eea-map/components/Webmap';
11
4
  import ExtraViews from '@eeacms/volto-eea-map/components/ExtraViews';
12
5
  import { applyQueriesToMapLayers } from '@eeacms/volto-eea-map/utils';
13
- import { getVisualization } from '@eeacms/volto-eea-map/actions';
6
+
7
+ import { getMapVisualizationData } from './helpers';
14
8
 
15
9
  const View = (props) => {
16
- const { data, data_provenance = {}, figure_note = [] } = props || {};
17
- const { height = '' } = data;
10
+ const { data_query_params, enable_queries, height = '' } = props.data;
18
11
 
19
- const [mapData, setMapData] = React.useState('');
12
+ const map_visualization_data = useMemo(() => getMapVisualizationData(props), [
13
+ props,
14
+ ]);
20
15
 
21
- React.useEffect(() => {
22
- if (props.data.vis_url) {
23
- props.getVisualization(expandToBackendURL(props.data.vis_url));
24
- }
25
- if (!props.data.vis_url) {
26
- setMapData('');
27
- }
28
- // eslint-disable-next-line react-hooks/exhaustive-deps
29
- }, [props.data.vis_url]);
16
+ const { data_provenance = {}, figure_note = [] } = map_visualization_data;
17
+ const [mapData, setMapData] = React.useState('');
30
18
 
31
19
  React.useEffect(() => {
32
20
  const updatedMapData = applyQueriesToMapLayers(
33
- props.map_visualization,
34
- props.data.data_query_params,
35
- props.data.enable_queries,
21
+ map_visualization_data,
22
+ data_query_params,
23
+ enable_queries,
36
24
  );
37
-
38
25
  setMapData(updatedMapData);
39
- // eslint-disable-next-line react-hooks/exhaustive-deps
40
- }, [
41
- props.map_visualization,
42
- props.data.data_query_params,
43
- props.data.enable_queries,
44
- ]);
26
+ }, [map_visualization_data, data_query_params, enable_queries]);
45
27
 
46
28
  return (
47
29
  <PrivacyProtection
48
- data={data}
30
+ data={props.data}
49
31
  className="embed-map-visualization"
50
32
  {...props}
51
33
  >
52
- {mapData && (
34
+ {!!mapData && (
53
35
  <>
54
36
  <Webmap data={mapData} height={height} />
55
37
  <ExtraViews
56
38
  data={{
57
- ...data,
39
+ ...props.data,
58
40
  data_provenance,
59
41
  figure_note,
60
- map_data: props.map_visualization,
42
+ map_data: map_visualization_data,
61
43
  '@id': props['@id'],
62
44
  }}
63
45
  />
@@ -70,29 +52,4 @@ const View = (props) => {
70
52
  );
71
53
  };
72
54
 
73
- export default compose(
74
- connect(
75
- (state, props) => ({
76
- '@id': props.data.vis_url
77
- ? state.map_visualizations?.data[
78
- expandToBackendURL(props.data.vis_url)
79
- ]?.['@id']
80
- : props.content?.['@id'],
81
- map_visualization: props.data.vis_url
82
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
83
- ?.data
84
- : '',
85
- data_provenance: props.data.vis_url
86
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
87
- ?.data_provenance
88
- : '',
89
- figure_note: props.data.vis_url
90
- ? state.map_visualizations?.data[expandToBackendURL(props.data.vis_url)]
91
- ?.figure_note
92
- : '',
93
- }),
94
- {
95
- getVisualization,
96
- },
97
- ),
98
- )(View);
55
+ export default View;
@@ -1,3 +1,4 @@
1
+ import { pickMetadata } from '@eeacms/volto-embed/helpers';
1
2
  import { updateBlockQueryFromPageQuery } from '@eeacms/volto-eea-map/utils';
2
3
 
3
4
  const deepUpdateDataQueryParams = (block, data, data_query, onChangeBlock) => {
@@ -27,4 +28,14 @@ const deepUpdateDataQueryParams = (block, data, data_query, onChangeBlock) => {
27
28
  }
28
29
  };
29
30
 
30
- export { deepUpdateDataQueryParams };
31
+ function getMapVisualizationData(props) {
32
+ const content = props.mapContent || {};
33
+ const map_visualization_data =
34
+ content.map_visualization_data || props.data?.map_visualization_data || {};
35
+ return {
36
+ ...pickMetadata(content),
37
+ ...map_visualization_data,
38
+ };
39
+ }
40
+
41
+ export { deepUpdateDataQueryParams, getMapVisualizationData };
@@ -16,7 +16,7 @@ const ExtraViews = ({ data, screen }) => {
16
16
  const toolbar = useRef();
17
17
  const [mobile, setMobile] = useState(false);
18
18
  const {
19
- map_data = {},
19
+ map_visualization_data = {},
20
20
  description,
21
21
  show_legend,
22
22
  show_viewer,
@@ -24,10 +24,10 @@ const ExtraViews = ({ data, screen }) => {
24
24
  show_sources = true,
25
25
  show_more_info = true,
26
26
  show_share = true,
27
- data_provenance = {},
28
- figure_note = [],
29
27
  } = data;
30
28
 
29
+ const { data_provenance = {}, figure_note = [] } = map_visualization_data;
30
+
31
31
  useEffect(() => {
32
32
  if (toolbar.current) {
33
33
  const toolbarParentWidth = toolbar.current.parentElement.offsetWidth;
@@ -42,8 +42,8 @@ const ExtraViews = ({ data, screen }) => {
42
42
 
43
43
  return (
44
44
  <>
45
- {show_legend && map_data && (
46
- <LegendView data={map_data} show_viewer={show_viewer} />
45
+ {show_legend && map_visualization_data && (
46
+ <LegendView data={map_visualization_data} show_viewer={show_viewer} />
47
47
  )}
48
48
  <div className={cx('visualization-toolbar', { mobile })} ref={toolbar}>
49
49
  <div className="left-col">
@@ -60,7 +60,7 @@ const Webmap = (props) => {
60
60
  css: true,
61
61
  }).then((modules) => {
62
62
  const [
63
- Map,
63
+ MapBlock,
64
64
  MapView,
65
65
  FeatureLayer,
66
66
  MapImageLayer,
@@ -75,7 +75,7 @@ const Webmap = (props) => {
75
75
  Fullscreen,
76
76
  ] = modules;
77
77
  setModules({
78
- Map,
78
+ MapBlock,
79
79
  MapView,
80
80
  FeatureLayer,
81
81
  MapImageLayer,
@@ -125,7 +125,7 @@ const Webmap = (props) => {
125
125
  const esri = React.useMemo(() => {
126
126
  if (Object.keys(modules).length === 0) return {};
127
127
  const {
128
- Map,
128
+ MapBlock,
129
129
  MapView,
130
130
  FeatureLayer,
131
131
  MapImageLayer,
@@ -257,7 +257,7 @@ const Webmap = (props) => {
257
257
  return customBase;
258
258
  };
259
259
 
260
- const map = new Map({
260
+ const map = new MapBlock({
261
261
  basemap:
262
262
  data?.base?.use_custom_base && data?.base?.custom_base_layer
263
263
  ? setCustomBasemap(data?.base?.custom_base_layer)
package/src/index.js CHANGED
@@ -12,9 +12,6 @@ import VisualizationView from './components/visualization/VisualizationView';
12
12
 
13
13
  import SimpleColorPickerWidget from './components/widgets/SimpleColorPickerWidget';
14
14
 
15
- import { data_visualizations } from './middlewares';
16
- import * as addonReducers from './reducers';
17
-
18
15
  import './less/global.less';
19
16
 
20
17
  export default (config) => {
@@ -67,15 +64,5 @@ export default (config) => {
67
64
  //map viewer for the visualization(content-type)
68
65
  config.views.contentTypesViews.map_visualization = VisualizationView;
69
66
 
70
- config.settings.storeExtenders = [
71
- ...(config.settings.storeExtenders || []),
72
- data_visualizations,
73
- ];
74
-
75
- config.addonReducers = {
76
- ...config.addonReducers,
77
- ...addonReducers,
78
- };
79
-
80
67
  return config;
81
68
  };
@@ -1 +0,0 @@
1
- export const GET_MAP_VISUALIZATION = 'GET_MAP_VISUALIZATION';
package/src/actions.js DELETED
@@ -1,12 +0,0 @@
1
- import { GET_MAP_VISUALIZATION } from './actionTypes';
2
-
3
- export function getVisualization(path) {
4
- return {
5
- type: GET_MAP_VISUALIZATION,
6
- path,
7
- request: {
8
- op: 'get',
9
- path: `${path}/@map-visualization`,
10
- },
11
- };
12
- }
@@ -1,14 +0,0 @@
1
- import { GET_MAP_VISUALIZATION } from '../actionTypes';
2
-
3
- export const data_visualizations = (middlewares) => [
4
- (store) => (next) => (action) => {
5
- if (action.type === GET_MAP_VISUALIZATION) {
6
- store.dispatch({
7
- type: `${GET_MAP_VISUALIZATION}_PENDING`,
8
- path: action.path,
9
- });
10
- }
11
- return next(action);
12
- },
13
- ...middlewares,
14
- ];
@@ -1 +0,0 @@
1
- export * from './map_visualizations';
@@ -1,3 +0,0 @@
1
- import map_visualizations from './map_visualizations';
2
-
3
- export { map_visualizations };
@@ -1,48 +0,0 @@
1
- import { GET_MAP_VISUALIZATION } from '../actionTypes';
2
-
3
- const initialState = {
4
- data: {},
5
- error: null,
6
- loaded: false,
7
- loading: false,
8
- };
9
-
10
- export default function data_providers(state = initialState, action = {}) {
11
- const path = action.path
12
- ? action.path.replace(`/@map-visualization`, '')
13
- : undefined;
14
-
15
- switch (action.type) {
16
- case `${GET_MAP_VISUALIZATION}_PENDING`:
17
- return {
18
- ...state,
19
- error: null,
20
- loaded: false,
21
- loading: true,
22
- };
23
-
24
- case `${GET_MAP_VISUALIZATION}_SUCCESS`:
25
- return {
26
- ...state,
27
- error: null,
28
- data: {
29
- ...state.data,
30
- [path]: action.result.map_visualization,
31
- },
32
- loaded: true,
33
- loading: false,
34
- };
35
-
36
- case `${GET_MAP_VISUALIZATION}_FAIL`:
37
- return {
38
- ...state,
39
- error: action.error,
40
- data: { ...state.data },
41
- loaded: false,
42
- loading: false,
43
- };
44
-
45
- default:
46
- return state;
47
- }
48
- }