@eeacms/volto-eea-map 0.1.27 → 0.1.29

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,14 +4,23 @@ 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
- ### [0.1.27](https://github.com/eea/volto-eea-map/compare/0.1.26...0.1.27) - 6 October 2022
7
+ ### [0.1.29](https://github.com/eea/volto-eea-map/compare/0.1.28...0.1.29) - 19 October 2022
8
+
9
+ #### :hammer_and_wrench: Others
10
+
11
+ - Enable opacity control [andreiggr - [`bb88b89`](https://github.com/eea/volto-eea-map/commit/bb88b89857169fd5b8174dcbeaeeba448a7c7d0c)]
12
+ ### [0.1.28](https://github.com/eea/volto-eea-map/compare/0.1.27...0.1.28) - 7 October 2022
13
+
14
+ #### :hammer_and_wrench: Others
15
+
16
+ - Clear [andreiggr - [`cef77e6`](https://github.com/eea/volto-eea-map/commit/cef77e6bf85f919c4968d5001f342c7d6c0e63f5)]
17
+ ### [0.1.27](https://github.com/eea/volto-eea-map/compare/0.1.26...0.1.27) - 7 October 2022
8
18
 
9
19
  #### :hammer_and_wrench: Others
10
20
 
11
21
  - privacy policy inherit height of map [andreiggr - [`dee7281`](https://github.com/eea/volto-eea-map/commit/dee7281caf834d017af8b99da1455c956bc663fe)]
12
22
  - set default legend, sources, privacy on [andreiggr - [`fb66ff8`](https://github.com/eea/volto-eea-map/commit/fb66ff8863d13b569955d7a774a9f1ab14729a29)]
13
23
  - clear console [andreiggr - [`e1d2841`](https://github.com/eea/volto-eea-map/commit/e1d28419dea2586c98b4df1c9e6dc1d6a4b987b6)]
14
- - use a custom basemap [andreiggr - [`b11fc62`](https://github.com/eea/volto-eea-map/commit/b11fc62a54730c0fb2229448c438f39f51db494d)]
15
24
  ### [0.1.26](https://github.com/eea/volto-eea-map/compare/0.1.25...0.1.26) - 4 October 2022
16
25
 
17
26
  #### :hammer_and_wrench: Others
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-eea-map",
3
- "version": "0.1.27",
3
+ "version": "0.1.29",
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",
@@ -146,41 +146,48 @@ const Webmap = (props) => {
146
146
  map_layers && map_layers.length > 0
147
147
  ? map_layers
148
148
  .filter(({ map_service_url, layer }) => map_service_url && layer)
149
- .map(({ map_service_url, layer, fullLayer, query = '' }, index) => {
150
- const url = `${map_service_url}/${layer?.id}`;
151
- let mapLayer;
152
- switch (layer.type) {
153
- case 'Raster Layer':
154
- mapLayer = new MapImageLayer({
155
- url: map_service_url,
156
- sublayers: [
157
- {
158
- id: layer.id,
159
- minScale: layer?.minScale,
160
- maxScale: layer?.maxScale,
161
- definitionExpression: query
162
- ? formatQuery(query, 'sql')
163
- : '',
164
- },
165
- ],
166
- });
167
- break;
168
- case 'Feature Layer':
169
- mapLayer = new FeatureLayer({
170
- layerId: layer.id,
171
- url,
172
- definitionExpression: query
173
- ? formatQuery(query, 'sql')
174
- : '',
175
- minScale: layer?.minScale,
176
- maxScale: layer?.maxScale,
177
- });
178
- break;
179
- default:
180
- break;
181
- }
182
- return mapLayer;
183
- })
149
+ .map(
150
+ (
151
+ { map_service_url, layer, fullLayer, query = '', opacity = 1 },
152
+ index,
153
+ ) => {
154
+ const url = `${map_service_url}/${layer?.id}`;
155
+ let mapLayer;
156
+ switch (layer.type) {
157
+ case 'Raster Layer':
158
+ mapLayer = new MapImageLayer({
159
+ url: map_service_url,
160
+ sublayers: [
161
+ {
162
+ id: layer.id,
163
+ minScale: layer?.minScale,
164
+ maxScale: layer?.maxScale,
165
+ opacity: opacity ? parseFloat(opacity) : 1,
166
+ definitionExpression: query
167
+ ? formatQuery(query, 'sql')
168
+ : '',
169
+ },
170
+ ],
171
+ });
172
+ break;
173
+ case 'Feature Layer':
174
+ mapLayer = new FeatureLayer({
175
+ layerId: layer.id,
176
+ url,
177
+ definitionExpression: query
178
+ ? formatQuery(query, 'sql')
179
+ : '',
180
+ minScale: layer?.minScale,
181
+ maxScale: layer?.maxScale,
182
+ opacity: opacity ? parseFloat(opacity) : 1,
183
+ });
184
+ break;
185
+ default:
186
+ break;
187
+ }
188
+ return mapLayer;
189
+ },
190
+ )
184
191
  : [];
185
192
 
186
193
  const mapBaseLayer = new WebTileLayer({
@@ -207,8 +214,25 @@ const Webmap = (props) => {
207
214
  return basemap;
208
215
  };
209
216
 
217
+ const setCustomBasemap = (urlTemplate) => {
218
+ const mapBaseLayer = new WebTileLayer({
219
+ urlTemplate,
220
+ });
221
+
222
+ // Create a Basemap with the WebTileLayer.
223
+ const customBase = new Basemap({
224
+ baseLayers: [mapBaseLayer],
225
+ title: 'Custom Base Layer',
226
+ id: 'custom-base',
227
+ });
228
+ return customBase;
229
+ };
230
+
210
231
  const map = new Map({
211
- basemap: setBasemap(base_layer),
232
+ basemap:
233
+ data?.base?.use_custom_base && data?.base?.custom_base_layer
234
+ ? setCustomBasemap(data?.base?.custom_base_layer)
235
+ : setBasemap(base_layer),
212
236
  layers,
213
237
  });
214
238
  const view = new MapView({
@@ -2,22 +2,39 @@ import { base_layers } from '../../constants';
2
2
 
3
3
  const customBaselayers = [['positron-composite', 'positron-composite']];
4
4
 
5
- const BaseLayerSchema = {
6
- title: 'Base Layer',
7
- fieldsets: [
8
- {
9
- id: 'base',
10
- title: 'Base Layer',
11
- fields: ['base_layer'],
12
- },
13
- ],
14
- properties: {
15
- base_layer: {
16
- title: 'Base Layer',
17
- choices: [...customBaselayers, ...base_layers],
5
+ const BaseLayerSchema = ({ data = {} }) => {
6
+ const useCustomBase = data?.map_data?.base?.use_custom_base;
7
+ return {
8
+ title: 'Base Layer',
9
+ fieldsets: [
10
+ {
11
+ id: 'base',
12
+ title: 'Base Layer',
13
+ fields: [
14
+ 'use_custom_base',
15
+ ...(useCustomBase ? ['custom_base_layer'] : ['base_layer']),
16
+ ],
17
+ },
18
+ ],
19
+ properties: {
20
+ use_custom_base: {
21
+ title: 'Use custom Base Layer',
22
+ description:
23
+ 'Switch between default base layers and defining your custom service base layer',
24
+ type: 'boolean',
25
+ },
26
+ base_layer: {
27
+ title: 'Base Layer',
28
+ choices: [...customBaselayers, ...base_layers],
29
+ },
30
+ custom_base_layer: {
31
+ title: 'Base Layer',
32
+ description:
33
+ 'Add an URL Template to import your own base layer from an external service',
34
+ },
18
35
  },
19
- },
20
- required: [],
36
+ required: [],
37
+ };
21
38
  };
22
39
 
23
40
  const LayerSchema = {
@@ -127,6 +144,7 @@ const GeneralSchema = ({ data = {} }) => {
127
144
 
128
145
  export default ({ data = {} }) => {
129
146
  const generalSchema = GeneralSchema({ data });
147
+ const baseLayerSchema = BaseLayerSchema({ data });
130
148
 
131
149
  return {
132
150
  title: 'Map Editor',
@@ -148,7 +166,7 @@ export default ({ data = {} }) => {
148
166
  },
149
167
  {
150
168
  id: 'base',
151
- schema: BaseLayerSchema,
169
+ schema: baseLayerSchema,
152
170
  },
153
171
  {
154
172
  id: 'layers',
@@ -172,6 +172,13 @@ const LayerSelectWidget = (props) => {
172
172
  }
173
173
  };
174
174
 
175
+ const handleOpacityChange = (val) => {
176
+ onChange(id, {
177
+ ...value,
178
+ opacity: val,
179
+ });
180
+ };
181
+
175
182
  const handleChangeServiceUrl = (value) => {
176
183
  setServiceUrlError('');
177
184
  setCheckColor('');
@@ -285,6 +292,27 @@ const LayerSelectWidget = (props) => {
285
292
  )}
286
293
  {availableLayers && availableLayers.length > 0 && selectedLayer && (
287
294
  <div className="spaced-row">
295
+ <Grid.Row stretched>
296
+ <h5>Opacity:</h5>
297
+ <input
298
+ className="map-number-input"
299
+ type="number"
300
+ min={0}
301
+ max={1}
302
+ step={0.1}
303
+ value={value?.opacity ? value?.opacity : 1}
304
+ onChange={(e) => handleOpacityChange(e.target.value)}
305
+ />
306
+ <input
307
+ className="map-range-input"
308
+ type="range"
309
+ min={0}
310
+ max={1}
311
+ step={0.1}
312
+ value={value?.opacity ? value?.opacity : 1}
313
+ onChange={(e) => handleOpacityChange(e.target.value)}
314
+ />
315
+ </Grid.Row>
288
316
  <Grid.Row stretched>
289
317
  <h5 style={{ padding: '0', margin: '15px 0px 5px 0px' }}>
290
318
  Description
@@ -185,6 +185,16 @@
185
185
  cursor: pointer;
186
186
  }
187
187
 
188
+ .map-number-input {
189
+ padding: 5px !important;
190
+ }
191
+
192
+ .map-range-input {
193
+ width: 100%;
194
+ margin: 7px 0;
195
+ color: green;
196
+ }
197
+
188
198
  @keyframes fadeDown {
189
199
  from {
190
200
  opacity: 0;