@eeacms/volto-cca-policy 0.3.40 → 0.3.41

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,24 @@ 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.3.41](https://github.com/eea/volto-cca-policy/compare/0.3.40...0.3.41) - 14 May 2025
8
+
9
+ #### :rocket: Dependency updates
10
+
11
+ - Release @eeacms/volto-globalsearch@2.1.1 [EEA Jenkins - [`95087df`](https://github.com/eea/volto-cca-policy/commit/95087dfc874dfac0186dbaad184666ab9b8649df)]
12
+
13
+ #### :bug: Bug Fixes
14
+
15
+ - fix(mission): fix signatory profile actions order - refs #286863 [kreafox - [`48de556`](https://github.com/eea/volto-cca-policy/commit/48de556432efa9c88676f6b938e451d18cce9582)]
16
+ - fix: update test [kreafox - [`951460d`](https://github.com/eea/volto-cca-policy/commit/951460d723278de41e9749e432aff1891497d4fa)]
17
+ - fix: update test [kreafox - [`4608fc9`](https://github.com/eea/volto-cca-policy/commit/4608fc90c2f68c8625a4ad00d8dca5c79c78551c)]
18
+
19
+ #### :nail_care: Enhancements
20
+
21
+ - change(mission): move signatory profile CSS to theme folder [kreafox - [`be3744f`](https://github.com/eea/volto-cca-policy/commit/be3744ff175412dbca210a25ac6d1ac686ff4d83)]
22
+ - change(mission): add statitic for Governance section - refs #285296 [kreafox - [`67774d2`](https://github.com/eea/volto-cca-policy/commit/67774d24334b213dc9e870403df9cd15d005219d)]
23
+ - change: adjust tab labels order from backend response - refs #287273 [kreafox - [`6fc277d`](https://github.com/eea/volto-cca-policy/commit/6fc277d8479198d2307de9c092d460a6676a8a51)]
24
+
7
25
  ### [0.3.40](https://github.com/eea/volto-cca-policy/compare/0.3.39...0.3.40) - 13 May 2025
8
26
 
9
27
  #### :bug: Bug Fixes
@@ -2324,13 +2342,10 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
2324
2342
  - Refs #260715 rast-block wip [Tripon Eugen - [`f19d54e`](https://github.com/eea/volto-cca-policy/commit/f19d54e0b9a6a86bf344eb85b6a1cda7f3de91bf)]
2325
2343
  - Refs #260715 rast-block wip [Tripon Eugen - [`2828537`](https://github.com/eea/volto-cca-policy/commit/2828537b6c084cd1a82162d552fb4ef025b71f9f)]
2326
2344
  - Refs #260715 rast-block updates [Tripon Eugen - [`1e803e5`](https://github.com/eea/volto-cca-policy/commit/1e803e5bd3d3fb7558f261c76c68866be7beb8b5)]
2327
- - test: [JENKINS] Use java17 for sonarqube scanner [valentinab25 - [`0a15e1b`](https://github.com/eea/volto-cca-policy/commit/0a15e1b2ad081233685e80d5b3c60a8663f6b896)]
2328
- - test: [JENKINS] Run cypress in started frontend container [valentinab25 - [`9554e44`](https://github.com/eea/volto-cca-policy/commit/9554e44c92a621a52b2adb5a4830fb084ee5734b)]
2329
2345
  ### [0.1.49](https://github.com/eea/volto-cca-policy/compare/0.1.48...0.1.49) - 15 November 2023
2330
2346
 
2331
2347
  #### :house: Internal changes
2332
2348
 
2333
- - chore: [JENKINS] Refactor automated testing [valentinab25 - [`7b820a6`](https://github.com/eea/volto-cca-policy/commit/7b820a6369c2ddd5203b1a4abe352cb4bb43db7a)]
2334
2349
  - chore: husky, lint-staged use fixed versions [valentinab25 - [`f0a8061`](https://github.com/eea/volto-cca-policy/commit/f0a8061c275c236deb00087c23fac9860a073106)]
2335
2350
 
2336
2351
  #### :hammer_and_wrench: Others
@@ -2347,9 +2362,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
2347
2362
  - Refs #259267 - jenkins test [Tripon Eugen - [`cacd31e`](https://github.com/eea/volto-cca-policy/commit/cacd31e7b1afe0983674ed5c7632d2e1d7fa752e)]
2348
2363
  - Refs #259267 - jenkins [Tripon Eugen - [`5b3affe`](https://github.com/eea/volto-cca-policy/commit/5b3affee8401239de10097884c1b7f2349d15ec0)]
2349
2364
  - Refs #259267 - add When, lead image and title to files [Tripon Eugen - [`2cedb23`](https://github.com/eea/volto-cca-policy/commit/2cedb237f898af9057e13fba94b615ef71077204)]
2350
- - test: [JENKINS] Add cpu limit on cypress docker [valentinab25 - [`4d607a5`](https://github.com/eea/volto-cca-policy/commit/4d607a576e9d0a5c34e48c41b409e7df616ee3d6)]
2351
- - test: [JENKINS] Increase shm-size to cypress docker [valentinab25 - [`b7f74d5`](https://github.com/eea/volto-cca-policy/commit/b7f74d53513a6edbfbca5cb6d19687929bb1e5db)]
2352
- - test: [JENKINS] Improve cypress time [valentinab25 - [`db65617`](https://github.com/eea/volto-cca-policy/commit/db656173391f65157098d95d388c25f6429753d8)]
2353
2365
  - Refs #259267 - cca event blocks attachments and check not mandatoty fields [Tripon Eugen - [`3138e5a`](https://github.com/eea/volto-cca-policy/commit/3138e5afb5bfbdbed14e27ed457b16867b7fa414)]
2354
2366
  - Refs #256681 - Fix error in CCA Event view menu. ([React Intl] An id must be provided to format a message.) [GhitaB - [`517eeb8`](https://github.com/eea/volto-cca-policy/commit/517eeb817264a47bbfd6b9b7d22aaf22d44ed224)]
2355
2367
  - Refs #161485 - Fix ECDE name conflict. [GhitaB - [`8bfd99f`](https://github.com/eea/volto-cca-policy/commit/8bfd99ff68bb82a04d1c0ed625fa514fcf46289e)]
@@ -2566,7 +2578,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
2566
2578
 
2567
2579
  #### :house: Internal changes
2568
2580
 
2569
- - chore: [JENKINS] Remove alpha testing version [valentinab25 - [`ad1ced0`](https://github.com/eea/volto-cca-policy/commit/ad1ced0971ba116c13a3b5fcc039172cc915c919)]
2570
2581
 
2571
2582
  #### :hammer_and_wrench: Others
2572
2583
 
@@ -3047,7 +3058,6 @@ Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
3047
3058
  #### :hammer_and_wrench: Others
3048
3059
 
3049
3060
  - Refs #158294 - Update supported languages list. [GhitaB - [`0a4f91f`](https://github.com/eea/volto-cca-policy/commit/0a4f91f39b7edc367bd4c127d6a8f273c7788361)]
3050
- - Add Sonarqube tag using cca-frontend addons list [EEA Jenkins - [`8f1f9ce`](https://github.com/eea/volto-cca-policy/commit/8f1f9ce6c22805670cc0800d3c779b6d619d0f31)]
3051
3061
  ### [0.1.1](https://github.com/eea/volto-cca-policy/compare/0.1.0...0.1.1) - 13 December 2022
3052
3062
 
3053
3063
  #### :hammer_and_wrench: Others
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-cca-policy",
3
- "version": "0.3.40",
3
+ "version": "0.3.41",
4
4
  "description": "@eeacms/volto-cca-policy: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "author": "European Environment Agency: IDM2 A-Team",
@@ -32,7 +32,7 @@
32
32
  "@eeacms/volto-eea-design-system": "<=1.36.3",
33
33
  "@eeacms/volto-eea-website-theme": "^1.35.0",
34
34
  "@eeacms/volto-embed": "^9.1.1",
35
- "@eeacms/volto-globalsearch": "2.1.0",
35
+ "@eeacms/volto-globalsearch": "2.1.1",
36
36
  "@eeacms/volto-hero-block": "^7.1.0",
37
37
  "@eeacms/volto-openlayers-map": "*",
38
38
  "@eeacms/volto-searchlib": "2.0.16",
@@ -6,7 +6,12 @@ import AssessmentTab from './TabSections/AssessmentTab';
6
6
  import PlanningTab from './TabSections/PlanningTab';
7
7
  import ActionPagesTab from './TabSections/ActionPagesTab';
8
8
 
9
- import './style.less';
9
+ const tabRenderers = {
10
+ Governance_Label: (data) => <GovernanceTab result={data} />,
11
+ Assessment_Label: (data) => <AssessmentTab result={data} />,
12
+ Planning_Label: (data) => <PlanningTab result={data} />,
13
+ Action_Label: (data) => <ActionPagesTab result={data} />,
14
+ };
10
15
 
11
16
  const MissionSignatoryProfileView = (props) => {
12
17
  const { content } = props || {};
@@ -19,12 +24,27 @@ const MissionSignatoryProfileView = (props) => {
19
24
  const assessment = result?.assessment || {};
20
25
  const action = result?.action || {};
21
26
  const footer_text = result?.footer_text || {};
22
- const tab_labels = result?.tab_labels || {};
23
- const { Governance_Label, Assessment_Label, Planning_Label, Action_Label } =
24
- tab_labels || {};
27
+ const tab_labels = result?.tab_labels || [];
25
28
 
26
29
  const [activeIndex, setActiveIndex] = React.useState(0);
27
30
 
31
+ const panes = tab_labels
32
+ .filter(({ key }) => key !== 'Language')
33
+ .map(({ key, value }) => {
34
+ const renderTab = tabRenderers[key];
35
+ const dataMap = {
36
+ Governance_Label: governance,
37
+ Assessment_Label: assessment,
38
+ Planning_Label: planning,
39
+ Action_Label: action,
40
+ };
41
+
42
+ return {
43
+ menuItem: value,
44
+ render: () => (renderTab ? renderTab(dataMap[key]) : null),
45
+ };
46
+ });
47
+
28
48
  return (
29
49
  <Container>
30
50
  <BannerTitle
@@ -39,7 +59,7 @@ const MissionSignatoryProfileView = (props) => {
39
59
  hideShareButton: false,
40
60
  }}
41
61
  />
42
- <div className="signatories-profile">
62
+ <div className="signatory-profile">
43
63
  <br />
44
64
 
45
65
  <Tab
@@ -52,24 +72,7 @@ const MissionSignatoryProfileView = (props) => {
52
72
  grid={{ paneWidth: 9, tabWidth: 3, stackable: true }}
53
73
  activeIndex={activeIndex}
54
74
  onTabChange={(e, { activeIndex }) => setActiveIndex(activeIndex)}
55
- panes={[
56
- {
57
- menuItem: Governance_Label || 'Governance',
58
- render: () => <GovernanceTab result={governance} />,
59
- },
60
- {
61
- menuItem: Assessment_Label || 'Assessment',
62
- render: () => <AssessmentTab result={assessment} />,
63
- },
64
- {
65
- menuItem: Planning_Label || 'Planning',
66
- render: () => <PlanningTab result={planning} />,
67
- },
68
- {
69
- menuItem: Action_Label || 'Action',
70
- render: () => <ActionPagesTab result={action} />,
71
- },
72
- ]}
75
+ panes={panes}
73
76
  />
74
77
 
75
78
  {footer_text.Disclaimer && (
@@ -17,27 +17,42 @@ jest.mock('@eeacms/volto-cca-policy/helpers', () => ({
17
17
  }));
18
18
 
19
19
  describe('MissionSignatoryProfileView', () => {
20
- const data = {
21
- _v_results: {
22
- planning: {
23
- planning_titles: [{}],
20
+ const content = {
21
+ '@components': {
22
+ missionsignatoryprofile: {
23
+ result: {
24
+ governance: [{}],
25
+ assessment: {},
26
+ planning: {},
27
+ action: {},
28
+ footer_text: {
29
+ Disclaimer_Title: 'Disclaimer Title',
30
+ Disclaimer: 'This is a disclaimer.',
31
+ },
32
+ tab_labels: [
33
+ { key: 'Governance_Label', value: 'Governance' },
34
+ { key: 'Assessment_Label', value: 'Assessment' },
35
+ { key: 'Planning_Label', value: 'Planning & Target' },
36
+ { key: 'Action_Label', value: 'Action' },
37
+ { key: 'Language', value: 'en' }, // will be filtered out
38
+ ],
39
+ },
24
40
  },
25
- governance: [{}],
26
41
  },
27
42
  };
28
43
 
29
44
  it('renders tab labels and default content', () => {
30
- render(<MissionSignatoryProfileView data={data} />);
45
+ render(<MissionSignatoryProfileView content={content} />);
31
46
 
32
47
  // Tab labels
33
48
  expect(screen.getByText('Governance')).toBeInTheDocument();
34
49
  expect(screen.getByText('Assessment')).toBeInTheDocument();
35
- expect(screen.getByText('Planning')).toBeInTheDocument();
50
+ expect(screen.getByText('Planning & Target')).toBeInTheDocument();
36
51
  expect(screen.getByText('Action')).toBeInTheDocument();
37
52
  });
38
53
 
39
54
  it('switches tabs and renders corresponding content', () => {
40
- render(<MissionSignatoryProfileView data={data} />);
55
+ render(<MissionSignatoryProfileView content={content} />);
41
56
 
42
57
  fireEvent.click(screen.getByText('Governance'));
43
58
  expect(screen.getByText('Mocked Governance')).toBeInTheDocument();
@@ -45,10 +60,16 @@ describe('MissionSignatoryProfileView', () => {
45
60
  fireEvent.click(screen.getByText('Assessment'));
46
61
  expect(screen.getByText('Mocked Assessment')).toBeInTheDocument();
47
62
 
48
- fireEvent.click(screen.getByText('Planning'));
63
+ fireEvent.click(screen.getByText('Planning & Target'));
49
64
  expect(screen.getByText('Mocked Planning')).toBeInTheDocument();
50
65
 
51
66
  fireEvent.click(screen.getByText('Action'));
52
67
  expect(screen.getByText('Mocked Action')).toBeInTheDocument();
53
68
  });
69
+
70
+ it('renders footer disclaimer text if present', () => {
71
+ render(<MissionSignatoryProfileView content={content} />);
72
+ expect(screen.getByText('Disclaimer Title')).toBeInTheDocument();
73
+ expect(screen.getByText('This is a disclaimer.')).toBeInTheDocument();
74
+ });
54
75
  });
@@ -1,5 +1,3 @@
1
- import React from 'react';
2
-
3
1
  import {
4
2
  Statistic,
5
3
  StatisticValue,
@@ -7,10 +5,10 @@ import {
7
5
  StatisticGroup,
8
6
  } from 'semantic-ui-react';
9
7
 
10
- const StatisticsSection = ({ statistics }) => {
8
+ const StatisticSection = ({ statistic }) => {
11
9
  return (
12
10
  <StatisticGroup widths="two" size="small">
13
- {statistics.map((stat, index) => (
11
+ {statistic.map((stat, index) => (
14
12
  <Statistic key={index}>
15
13
  <StatisticValue>{stat.value}</StatisticValue>
16
14
  <StatisticLabel>{stat.label}</StatisticLabel>
@@ -20,4 +18,4 @@ const StatisticsSection = ({ statistics }) => {
20
18
  );
21
19
  };
22
20
 
23
- export default StatisticsSection;
21
+ export default StatisticSection;
@@ -65,11 +65,7 @@ const ActionPagesTab = ({ result }) => {
65
65
  const { Title, Abstract, Abstract_Line } = result.action_text?.[0] || [];
66
66
  const actions = result.actions || [];
67
67
 
68
- const sortedActions = [...actions].sort((a, b) => {
69
- const aNum = parseInt(a.Action_Id.replace(/\D/g, ''), 10);
70
- const bNum = parseInt(b.Action_Id.replace(/\D/g, ''), 10);
71
- return aNum - bNum;
72
- });
68
+ const sortedActions = [...actions].sort((a, b) => a.Order - b.Order);
73
69
 
74
70
  return (
75
71
  <Tab.Pane>
@@ -85,7 +81,7 @@ const ActionPagesTab = ({ result }) => {
85
81
  return (
86
82
  <div key={index} className="section-wrapper">
87
83
  <h5 className="section-title">
88
- <span className="section-number">{action.Action_Id}. </span>
84
+ <span className="section-number">{action.Order}. </span>
89
85
  <HTMLField value={{ data: formatTextToHTML(action?.Action) }} />
90
86
  </h5>
91
87
 
@@ -1,4 +1,3 @@
1
- import React from 'react';
2
1
  import { Tab, Image, Segment, Item } from 'semantic-ui-react';
3
2
  import { Callout } from '@eeacms/volto-eea-design-system/ui';
4
3
  import { HTMLField } from '@eeacms/volto-cca-policy/helpers';
@@ -1,9 +1,9 @@
1
- import React from 'react';
2
1
  import { Tab } from 'semantic-ui-react';
3
2
  import { Callout } from '@eeacms/volto-eea-design-system/ui';
4
3
  import { HTMLField } from '@eeacms/volto-cca-policy/helpers';
5
4
  import { formatTextToHTML } from '@eeacms/volto-cca-policy/utils';
6
5
  import AccordionList from '../AccordionList';
6
+ import StatisticSection from '../StatisticSection';
7
7
 
8
8
  const GovernanceTab = ({ result }) => {
9
9
  const {
@@ -13,14 +13,43 @@ const GovernanceTab = ({ result }) => {
13
13
  Describe,
14
14
  Provide_Title,
15
15
  Provide,
16
+ Statistic_Area,
17
+ Statistic_Area_Label,
18
+ Statistic_Jurisdiction_Range,
19
+ Statistic_Jurisdiction_Range_Label,
20
+ Statistic_Population_Size,
21
+ Statistic_Population_Size_Label,
22
+ Statistic_Population_Year,
23
+ Statistic_Population_Year_Label,
16
24
  } = result;
17
25
 
26
+ const statisticData = [
27
+ {
28
+ value: Statistic_Area,
29
+ label: Statistic_Area_Label,
30
+ },
31
+ {
32
+ value: Statistic_Jurisdiction_Range,
33
+ label: Statistic_Jurisdiction_Range_Label,
34
+ },
35
+ {
36
+ value: Statistic_Population_Size,
37
+ label: Statistic_Population_Size_Label,
38
+ },
39
+ {
40
+ value: Statistic_Population_Year,
41
+ label: Statistic_Population_Year_Label,
42
+ },
43
+ ].filter((stat) => stat.value && stat.label);
44
+
18
45
  return (
19
46
  <Tab.Pane>
20
47
  {Title && <h2>{Title}</h2>}
21
48
 
22
49
  {Introduction && <Callout>{Introduction}</Callout>}
23
50
 
51
+ <StatisticSection statistic={statisticData} />
52
+
24
53
  {Describe_Title && <h3>{Describe_Title}</h3>}
25
54
 
26
55
  {Describe && <HTMLField value={{ data: formatTextToHTML(Describe) }} />}
@@ -116,6 +116,103 @@ body.subsite-mkh {
116
116
  #mega-menu .ui.accordion .content {
117
117
  background: @subsiteBackgroundGradient;
118
118
  }
119
+
120
+ /* Mission signatory profile */
121
+ .signatory-profile {
122
+ .ui.items.items-group {
123
+ margin: 2em 0 !important;
124
+ }
125
+
126
+ .column > .ui.segment {
127
+ background-color: #fff !important;
128
+ }
129
+
130
+ .section-wrapper-info {
131
+ display: flex;
132
+ justify-content: space-between;
133
+ font-size: 14px;
134
+
135
+ .date {
136
+ position: relative;
137
+ top: 5px;
138
+ }
139
+ }
140
+
141
+ .description > p {
142
+ margin-bottom: 1em;
143
+ }
144
+
145
+ .tab-section-wrapper {
146
+ padding: 1.5em;
147
+ margin: 2em 0;
148
+ background-color: #f9f9f9;
149
+
150
+ &.assessment {
151
+ .ui.accordion {
152
+ margin-top: 1em;
153
+
154
+ .content.active {
155
+ padding: 1rem 1rem !important;
156
+ background-color: @white;
157
+ }
158
+
159
+ .ui.segment.border {
160
+ border: 1px solid #e6e7e8;
161
+ }
162
+ }
163
+ }
164
+ }
165
+
166
+ .section-wrapper {
167
+ padding: 1em;
168
+ margin: 1em 0;
169
+ background-color: #f9f9f9;
170
+
171
+ .section-title {
172
+ display: flex;
173
+ align-items: baseline;
174
+ gap: 0.5em;
175
+ }
176
+
177
+ .ui.accordion {
178
+ margin-top: 1em;
179
+
180
+ .content.active {
181
+ padding-bottom: 1rem !important;
182
+ }
183
+ }
184
+
185
+ .small-label {
186
+ font-size: 1em;
187
+ }
188
+ }
189
+
190
+ .section-number {
191
+ color: @pineGreen;
192
+ }
193
+
194
+ strong.date {
195
+ margin-right: 0.5em;
196
+ }
197
+
198
+ .items-group {
199
+ display: block !important;
200
+ column-count: 2;
201
+
202
+ .item {
203
+ padding: 0.5em 0 !important;
204
+ break-inside: avoid-column;
205
+
206
+ .content {
207
+ padding-left: 0.5rem !important;
208
+ }
209
+ }
210
+ }
211
+
212
+ .footer-text {
213
+ margin-top: 3em;
214
+ }
215
+ }
119
216
  }
120
217
 
121
218
  /* Latest news updates, Latest events */
@@ -1,100 +0,0 @@
1
- @type: 'extra';
2
- @element: 'custom';
3
-
4
- @import (multiple, reference, optional) '../../theme.config';
5
-
6
- .signatories-profile {
7
- .ui.items.items-group {
8
- margin: 2em 0 !important;
9
- }
10
-
11
- .column > .ui.segment {
12
- background-color: #fff !important;
13
- }
14
-
15
- .section-wrapper-info {
16
- display: flex;
17
- justify-content: space-between;
18
- font-size: 14px;
19
-
20
- .date {
21
- position: relative;
22
- top: 5px;
23
- }
24
- }
25
-
26
- .description > p {
27
- margin-bottom: 1em;
28
- }
29
-
30
- .tab-section-wrapper {
31
- padding: 1.5em;
32
- margin: 2em 0;
33
- background-color: #f9f9f9;
34
-
35
- &.assessment {
36
- .ui.accordion {
37
- margin-top: 1em;
38
-
39
- .content.active {
40
- padding: 1rem 1rem !important;
41
- background-color: @white;
42
- }
43
-
44
- .ui.segment.border {
45
- border: 1px solid #e6e7e8;
46
- }
47
- }
48
- }
49
- }
50
-
51
- .section-wrapper {
52
- padding: 1em;
53
- margin: 1em 0;
54
- background-color: #f9f9f9;
55
-
56
- .section-title {
57
- display: flex;
58
- align-items: baseline;
59
- gap: 0.5em;
60
- }
61
-
62
- .ui.accordion {
63
- margin-top: 1em;
64
-
65
- .content.active {
66
- padding-bottom: 1rem !important;
67
- }
68
- }
69
-
70
- .small-label {
71
- font-size: 1em;
72
- }
73
- }
74
-
75
- .section-number {
76
- color: @pineGreen;
77
- }
78
-
79
- strong.date {
80
- margin-right: 0.5em;
81
- }
82
-
83
- .items-group {
84
- display: block !important;
85
- column-count: 2;
86
-
87
- .item {
88
- padding: 0.5em 0 !important;
89
- break-inside: avoid-column;
90
-
91
- .content {
92
- padding-left: 0.5rem !important;
93
- }
94
- }
95
- }
96
-
97
- .footer-text {
98
- margin-top: 3em;
99
- }
100
- }