diff --git a/CHANGELOG.md b/CHANGELOG.md
index 070d580..70579a9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,35 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
+### [5.0.0](https://github.com/eea/volto-eea-map/compare/4.1.0...5.0.0) - 25 July 2024
+
+#### :house: Internal changes
+
+- style: Automated code fix [eea-jenkins - [`aadf771`](https://github.com/eea/volto-eea-map/commit/aadf771b40e0a190c29de42d99466d2e6ef440e7)]
+- style: Automated code fix [eea-jenkins - [`edfae3b`](https://github.com/eea/volto-eea-map/commit/edfae3b8ab4cdef23ae23ed7ea008043601dd783)]
+- style: Automated code fix [eea-jenkins - [`fd6c49f`](https://github.com/eea/volto-eea-map/commit/fd6c49f6d0d5081a230f9b4427844eace0321361)]
+- style: Automated code fix [eea-jenkins - [`5bcee12`](https://github.com/eea/volto-eea-map/commit/5bcee12ab667ad89096baae214ade24fa1c98fd1)]
+- style: Automated code fix [eea-jenkins - [`9bf0079`](https://github.com/eea/volto-eea-map/commit/9bf0079694c16fa20c857f896e303850cf67da43)]
+- style: Automated code fix [eea-jenkins - [`3d9adb6`](https://github.com/eea/volto-eea-map/commit/3d9adb6cee7ff1c45ae88d816e7f17de4bbaba37)]
+- style: Automated code fix [eea-jenkins - [`f310427`](https://github.com/eea/volto-eea-map/commit/f3104279ad719b16a149a357c0eab2f8b7fd8ef7)]
+- style: Automated code fix [eea-jenkins - [`fcf5adf`](https://github.com/eea/volto-eea-map/commit/fcf5adf32a73d388d97597dd9c88c3da362f90b8)]
+
+#### :hammer_and_wrench: Others
+
+- remove uneeded logo [Miu Razvan - [`759a07b`](https://github.com/eea/volto-eea-map/commit/759a07b587b8298d88800346a230fd55304aadf9)]
+- fix bugs [Miu Razvan - [`ccccc8a`](https://github.com/eea/volto-eea-map/commit/ccccc8a1fac321d3968ffdc0843ff87138748476)]
+- fix infinite rerenders [Miu Razvan - [`8dbb501`](https://github.com/eea/volto-eea-map/commit/8dbb5016741f2518668cfe1d40abe1484b53bfc3)]
+- lint fix [Miu Razvan - [`56c2138`](https://github.com/eea/volto-eea-map/commit/56c2138099d7425e21a566cb13fee814acdaea68)]
+- merge origin/develop into revamp branch [Miu Razvan - [`01ea06c`](https://github.com/eea/volto-eea-map/commit/01ea06ccad2b337a28f4e5847116a41bdda749e3)]
+- fix zoom to layer extent [Miu Razvan - [`28bc084`](https://github.com/eea/volto-eea-map/commit/28bc08456fbaa66938e8d0bf5f25ceaff753fae3)]
+- finalize eea-map refactoring [Miu Razvan - [`3c6abf9`](https://github.com/eea/volto-eea-map/commit/3c6abf998e3fdca55b1e81a0553749ee90bfbcd6)]
+- update [Miu Razvan - [`65205bc`](https://github.com/eea/volto-eea-map/commit/65205bc494f1d3c1b381ed6f9af01ed022e87c75)]
+- Update [Miu Razvan - [`13468a3`](https://github.com/eea/volto-eea-map/commit/13468a3c6738e612115535813e64b0a6af4c97d7)]
+- wip [Miu Razvan - [`901fcc3`](https://github.com/eea/volto-eea-map/commit/901fcc318c618c0307a64081002ab4a048be70a7)]
+- Update [Miu Razvan - [`d70dcf2`](https://github.com/eea/volto-eea-map/commit/d70dcf293b1395741ccbc524fa19145c829f72a9)]
+- Update [Miu Razvan - [`a35b941`](https://github.com/eea/volto-eea-map/commit/a35b941700d985c6f3b53247cb60ecc103c4f339)]
+- Widget component + other [Miu Razvan - [`291f5ad`](https://github.com/eea/volto-eea-map/commit/291f5ad97945cacb1bc4c6d12d177f232b907184)]
+- update [Miu Razvan - [`b073166`](https://github.com/eea/volto-eea-map/commit/b073166de8be0b709e5b2ec397ba9d768c8c2fc8)]
### [4.1.0](https://github.com/eea/volto-eea-map/compare/4.0.0...4.1.0) - 7 June 2024
#### :hammer_and_wrench: Others
diff --git a/Jenkinsfile b/Jenkinsfile
index a04b5df..725c343 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -9,7 +9,7 @@ pipeline {
environment {
GIT_NAME = "volto-eea-map"
NAMESPACE = "@eeacms"
- SONARQUBE_TAGS = "volto.eea.europa.eu,forest.eea.europa.eu,climate-adapt.eea.europa.eu,biodiversity.europa.eu,demo-www.eea.europa.eu,www.eea.europa.eu-en,water.europa.eu-freshwater,water.europa.eu-marine"
+ SONARQUBE_TAGS = "volto.eea.europa.eu,forest.eea.europa.eu,climate-adapt.eea.europa.eu,biodiversity.europa.eu,demo-www.eea.europa.eu,www.eea.europa.eu-en,water.europa.eu-freshwater,water.europa.eu-marine,insitu.copernicus.eu"
DEPENDENCIES = "@eeacms/volto-embed"
BACKEND_PROFILES = "eea.kitkat:testing"
BACKEND_ADDONS = ""
diff --git a/package.json b/package.json
index dffe4c0..bfba0f3 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "@eeacms/volto-eea-map",
- "version": "4.1.0",
+ "version": "5.0.0",
"description": "@eeacms/volto-eea-map: Volto add-on",
"main": "src/index.js",
"author": "European Environment Agency: IDM2 A-Team",
@@ -21,16 +21,19 @@
"@eeacms/volto-object-widget"
],
"dependencies": {
+ "@arcgis/core": "4.29.10",
"@eeacms/volto-embed": "*",
"@eeacms/volto-object-widget": "*",
"@plone/scripts": "*",
"esri-loader": "3.6.0",
+ "jsoneditor": "10.1.0",
"lodash": "4.17.21",
"razzle-plugin-scss": "4.2.18",
"react-color": "~2.19.3",
- "react-querybuilder": "4.2.3"
+ "react-querybuilder": "6.5.5"
},
"devDependencies": {
+ "@babel/preset-env": "7.24.6",
"@cypress/code-coverage": "^3.10.0",
"@plone/scripts": "*",
"babel-plugin-transform-class-properties": "^6.24.1",
diff --git a/src/Arcgis/Editor/Editor.jsx b/src/Arcgis/Editor/Editor.jsx
new file mode 100644
index 0000000..2718a79
--- /dev/null
+++ b/src/Arcgis/Editor/Editor.jsx
@@ -0,0 +1,130 @@
+import { memo, useRef, useState, useMemo } from 'react';
+import { isNil } from 'lodash';
+
+import SidebarGroup from './SidebarGroup';
+
+import _MapBuilder from '../Map/MapBuilder';
+
+import {
+ StructureBaseLayerPanel,
+ StructureLayersPanel,
+ StructureWidgetsPanel,
+ SettingsGeneralPanel,
+ SettingsLayersPanel,
+} from './Panels';
+
+import EditorContext from './EditorContext';
+
+import 'react-querybuilder/dist/query-builder.css';
+import 'jsoneditor/dist/jsoneditor.min.css';
+
+const MapBuilder = memo(_MapBuilder);
+
+const panels = {
+ structure: [
+ {
+ title: 'Base layer',
+ Panel: StructureBaseLayerPanel,
+ },
+ {
+ title: 'Layers',
+ Panel: StructureLayersPanel,
+ },
+ {
+ title: 'Widgets',
+ Panel: StructureWidgetsPanel,
+ },
+ ],
+ settings: [
+ { title: 'General', Panel: SettingsGeneralPanel },
+ { title: 'Layers', Panel: SettingsLayersPanel },
+ ],
+};
+
+function useApi() {
+ const [data, setData] = useState({});
+ const [loading, setLoading] = useState({});
+ const [loaded, setLoaded] = useState({});
+ const [error, setError] = useState({});
+
+ const load = async (url, opts) => {
+ if (data[url]) return data[url];
+ let response, result;
+ setLoading((prev) => ({ ...prev, [url]: true }));
+ try {
+ response = await fetch(`${url}?f=json`, opts);
+ } catch {
+ response = { ok: false, statusText: 'Unexpected error' };
+ }
+ try {
+ result = await response.json();
+ } catch {
+ result = response.ok
+ ? {
+ code: 500,
+ message: 'Unexpected error',
+ }
+ : {
+ code: response.status,
+ message: response.statusText,
+ };
+ }
+
+ if (!response.ok || (!isNil(result.code) && result.code !== 200)) {
+ setData((prev) => ({ ...prev, [url]: null }));
+ setError((prev) => ({ ...prev, [url]: result }));
+ setLoading((prev) => ({ ...prev, [url]: false }));
+ setLoaded((prev) => ({ ...prev, [url]: false }));
+ return;
+ }
+ setData((prev) => ({ ...prev, [url]: result }));
+ setError((prev) => ({ ...prev, [url]: null }));
+ setLoading((prev) => ({ ...prev, [url]: false }));
+ setLoaded((prev) => ({ ...prev, [url]: true }));
+ };
+
+ return { data, loading, loaded, error, load };
+}
+
+export default function Editor({ value, properties, onChangeValue }) {
+ const $map = useRef(null);
+ const [active, setActive] = useState({
+ sidebar: 'structure',
+ panel: panels.structure[0],
+ });
+ const servicesApi = useApi();
+ const layersApi = useApi();
+
+ const Panel = useMemo(() => active.panel.Panel, [active]);
+
+ return (
+
+ When using page level parameters to filter the map, please specify the + corresponding name +
++ {$layer.error.message} +
+ ) : null, + }, + zoomToExtent: { + title: 'Zoom to extent', + type: 'boolean', + }, + }, + required: [], + }} + formData={{ + ...layer, + layerId: !isNil(layer.id) + ? { + label: `${layer.id}${layer.name ? ` - ${layer.name}` : ''}`, + value: layer.id, + } + : null, + }} + onChangeField={(id, fieldValue) => { + let $fieldValue = fieldValue; + let newLayer = {}; + + if (id === 'layerId') { + $fieldValue = toNumber(fieldValue) || 0; + newLayer = + $service.data?.layers.find((layer) => layer.id === $fieldValue) || + {}; + } + + onChangeValue({ + ...value, + layers: layers.map((layer, i) => { + if (i !== index) + return { + ...layer, + ...(id === 'zoomToExtent' ? { zoomToExtent: false } : {}), + }; + if (id === 'url') { + return { url: $fieldValue }; + } + return { + ...layer, + ...newLayer, + [id === 'layerId' ? 'id' : id]: $fieldValue, + subLayers: getSublayers(newLayer?.subLayerIds, $service.data), + }; + }), + }); + }} + /> + + {$service.loaded && $layer.loaded && $layer.data?.fields?.length && ( + <> ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/Dictionary.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/Dictionary.jsx new file mode 100644 index 0000000..ca28570 --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/Dictionary.jsx @@ -0,0 +1,8 @@ +export default function Dictionary() { + return ( ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/DotDensity.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/DotDensity.jsx new file mode 100644 index 0000000..88a59be --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/DotDensity.jsx @@ -0,0 +1,8 @@ +export default function DotDensity() { + return ( ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/Heatmap.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/Heatmap.jsx new file mode 100644 index 0000000..efd2602 --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/Heatmap.jsx @@ -0,0 +1,8 @@ +export default function Heatmap() { + return ( ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/PieChart.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/PieChart.jsx new file mode 100644 index 0000000..147c19d --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/PieChart.jsx @@ -0,0 +1,8 @@ +export default function PieChart() { + return ( ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/Simple.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/Simple.jsx new file mode 100644 index 0000000..46f6f03 --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/Simple.jsx @@ -0,0 +1,109 @@ +import { toNumber } from 'lodash'; + +import { InlineForm } from '@plone/volto/components'; + +import { simpleSymbols as simpleSymbolsOptions } from '@eeacms/volto-eea-map/constants'; + +import { simpleSymbols } from '../RendererEditor/_defaults'; + +export default function Simple(props) { + const { $map, value, id, onChange } = props; + + const symbol = value?.symbol || {}; + + return ( ++ Renderer visual editor under work. Please edit it through json editor by + pressing the "Renderer" button +
+ ); +} diff --git a/src/Widgets/ArcgisRendererWidget/RendererEditor/_Editor.jsx b/src/Widgets/ArcgisRendererWidget/RendererEditor/_Editor.jsx new file mode 100644 index 0000000..789a168 --- /dev/null +++ b/src/Widgets/ArcgisRendererWidget/RendererEditor/_Editor.jsx @@ -0,0 +1,29 @@ +import { useMemo } from 'react'; + +import Simple from './Simple'; +import UniqueValue from './UniqueValue'; +import Heatmap from './Heatmap'; +import ClassBreaks from './ClassBreaks'; +import Dictionary from './Dictionary'; +import DotDensity from './DotDensity'; +import PieChart from './PieChart'; + +const types = { + simle: Simple, + 'unique-value': UniqueValue, + heatmap: Heatmap, + 'class-breaks': ClassBreaks, + dictionary: Dictionary, + 'dot-density': DotDensity, + 'pie-chart': PieChart, +}; + +function getRendererByType(type) { + return types[type] || Simple; +} + +export default function Editor(props) { + const Renderer = useMemo(() => getRendererByType(props.type), [props.type]); + + return{description}
} +No map view to show. Set visualization in block configuration.
- )} -- No layer found for legend. Please add a map layer from editor. -
-- {param?.i}:{' '} - {param?.v && param.v.join(', ')} -
-No parameters set
- )} -{mapData.mapName}
-- Available Fields: -
-- {field.alias} ({field.type}) -
- ))} -