@eeacms/volto-cca-policy 0.3.14 → 0.3.16

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,27 @@ 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.16](https://github.com/eea/volto-cca-policy/compare/0.3.15...0.3.16) - 17 March 2025
8
+
9
+ #### :rocket: New Features
10
+
11
+ - feat(block): add mission signatories profile block [kreafox - [`818f2ee`](https://github.com/eea/volto-cca-policy/commit/818f2eee63310c8d461fefc0d973882768a71fdb)]
12
+
13
+ #### :bug: Bug Fixes
14
+
15
+ - fix: multiple semantic-ui-react imports [kreafox - [`b73246f`](https://github.com/eea/volto-cca-policy/commit/b73246f05a49c94ff8cf6063c28fb597ee4e73b9)]
16
+
17
+ #### :hammer_and_wrench: Others
18
+
19
+ - test: increase coverage [kreafox - [`7c501ed`](https://github.com/eea/volto-cca-policy/commit/7c501ed316d845b17b1787bd124bf89a44495c9a)]
20
+ - make block available on mission [kreafox - [`2059222`](https://github.com/eea/volto-cca-policy/commit/2059222f1ff962bc8c8c84e8b06c6018fd058d47)]
21
+ ### [0.3.15](https://github.com/eea/volto-cca-policy/compare/0.3.14...0.3.15) - 6 March 2025
22
+
23
+ #### :rocket: Dependency updates
24
+
25
+ - Release @eeacms/volto-globalsearch@2.0.9 [EEA Jenkins - [`4ec7cea`](https://github.com/eea/volto-cca-policy/commit/4ec7ceaad21b2fc3a7ce9474f91142934350a63e)]
26
+ - Release @eeacms/volto-searchlib@2.0.13 [EEA Jenkins - [`37a98dd`](https://github.com/eea/volto-cca-policy/commit/37a98ddb1709bc7925124d2b841f99659e729b21)]
27
+
7
28
  ### [0.3.14](https://github.com/eea/volto-cca-policy/compare/0.3.13...0.3.14) - 6 March 2025
8
29
 
9
30
  #### :nail_care: Enhancements
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-cca-policy",
3
- "version": "0.3.14",
3
+ "version": "0.3.16",
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,10 +32,10 @@
32
32
  "@eeacms/volto-eea-design-system": "*",
33
33
  "@eeacms/volto-eea-website-theme": "^1.35.0",
34
34
  "@eeacms/volto-embed": "^9.1.1",
35
- "@eeacms/volto-globalsearch": "2.0.8",
35
+ "@eeacms/volto-globalsearch": "2.0.9",
36
36
  "@eeacms/volto-hero-block": "^7.1.0",
37
37
  "@eeacms/volto-openlayers-map": "*",
38
- "@eeacms/volto-searchlib": "2.0.12",
38
+ "@eeacms/volto-searchlib": "2.0.13",
39
39
  "@eeacms/volto-slate-label": "^0.6.0",
40
40
  "@eeacms/volto-tabs-block": "^7.5.1",
41
41
  "@elastic/search-ui": "1.21.2",
@@ -1,6 +1,5 @@
1
1
  import React from 'react';
2
- import { TabPane, Tab } from 'semantic-ui-react';
3
- import { Accordion, Icon } from 'semantic-ui-react';
2
+ import { TabPane, Tab, Accordion, Icon } from 'semantic-ui-react';
4
3
  import CountryTabPane from './CountryTabPane';
5
4
 
6
5
  import './styles.less';
@@ -0,0 +1,28 @@
1
+ import { SidebarPortal } from '@plone/volto/components';
2
+ import BlockDataForm from '@plone/volto/components/manage/Form/BlockDataForm';
3
+ import MissionSignatoriesProfile from './MissionSignatoriesProfileView';
4
+ import schema from './schema';
5
+
6
+ export default function Edit(props) {
7
+ const { block, data, onChangeBlock, selected } = props;
8
+ return (
9
+ <>
10
+ <MissionSignatoriesProfile {...props} mode="edit" />
11
+ <SidebarPortal selected={selected}>
12
+ <BlockDataForm
13
+ block={block}
14
+ title={schema.title}
15
+ schema={schema}
16
+ onChangeField={(id, value) => {
17
+ onChangeBlock(block, {
18
+ ...data,
19
+ [id]: value,
20
+ });
21
+ }}
22
+ onChangeBlock={onChangeBlock}
23
+ formData={data}
24
+ />
25
+ </SidebarPortal>
26
+ </>
27
+ );
28
+ }
@@ -0,0 +1,149 @@
1
+ import React from 'react';
2
+ import {
3
+ Tab,
4
+ AccordionTitle,
5
+ AccordionContent,
6
+ Accordion,
7
+ Icon,
8
+ } from 'semantic-ui-react';
9
+ import { Callout } from '@eeacms/volto-eea-design-system/ui';
10
+
11
+ export default function MissionSignatoriesProfileView(props) {
12
+ const { data } = props;
13
+ const result = data?._v_results?.[0] || {};
14
+ // const dataJson = JSON.parse(result?.Cooperation_Experience);
15
+
16
+ const [activeAccIndex, setActiveAccIndex] = React.useState(-1);
17
+
18
+ function handleAccClick(e, titleProps) {
19
+ const { index } = titleProps;
20
+ const newIndex = activeAccIndex === index ? -1 : index;
21
+
22
+ setActiveAccIndex(newIndex);
23
+ }
24
+
25
+ return (
26
+ <>
27
+ <div>
28
+ {/* {
29
+ dataJson['Cooperation_Experience'][0][
30
+ 'DescribeDetailCooperationEnhance'
31
+ ]
32
+ } */}
33
+ <h1>{result?.Signatory}</h1>
34
+ <Tab
35
+ menu={{
36
+ fluid: true,
37
+ className: 'secondary',
38
+ vertical: true,
39
+ pointing: true,
40
+ }}
41
+ grid={{ paneWidth: 9, tabWidth: 3, stackable: true }}
42
+ onTabChange={() => {}}
43
+ panes={[
44
+ {
45
+ menuItem: 'Introduction',
46
+ render: () => (
47
+ <Tab.Pane>
48
+ <h2>Introduction</h2>
49
+ <p>
50
+ Nullam quis arcu in magna pulvinar tincidunt. Lorem ipsum
51
+ dolor sit amet, consectetur adipiscing elit. Nam hendrerit
52
+ nulla ut cursus laoreet. Nullam elementum lorem vel
53
+ facilisis laoreet. Cras ac turpis vel erat vehicula
54
+ venenatis.
55
+ </p>
56
+ </Tab.Pane>
57
+ ),
58
+ },
59
+ {
60
+ menuItem: 'Governance',
61
+ render: () => (
62
+ <Tab.Pane>
63
+ <h2>Governance</h2>
64
+ <Callout>
65
+ <p>
66
+ Etiam id velit feugiat, scelerisque velit a, scelerisque
67
+ nunc. Vestibulum ante ipsum primis in faucibus orci luctus
68
+ et ultrices posuere cubilia curae; Integer dignissim risus
69
+ non nibh scelerisque, sit amet tincidunt sapien rutrum.
70
+ </p>
71
+ </Callout>
72
+
73
+ <h3>Opportunities and benefits of climate action</h3>
74
+ <p>{result?.Describe}</p>
75
+
76
+ <Accordion>
77
+ <AccordionTitle
78
+ active={activeAccIndex === 0}
79
+ index={0}
80
+ onClick={handleAccClick}
81
+ >
82
+ <Icon
83
+ name={
84
+ activeAccIndex
85
+ ? 'ri-arrow-down-s-line'
86
+ : 'ri-arrow-up-s-line'
87
+ }
88
+ />
89
+ Further details and evidence
90
+ </AccordionTitle>
91
+ <AccordionContent active={activeAccIndex === 0}>
92
+ <p>{result?.Provide}</p>
93
+ </AccordionContent>
94
+ </Accordion>
95
+ </Tab.Pane>
96
+ ),
97
+ },
98
+ {
99
+ menuItem: 'Assessment',
100
+ render: () => (
101
+ <Tab.Pane>
102
+ <h2>Assessment</h2>
103
+ <p>
104
+ Etiam accumsan urna a mauris dapibus, nec aliquet nunc
105
+ convallis. Phasellus eget justo et libero ultrices posuere.
106
+ Cras euismod, arcu nec congue convallis, ipsum nunc cursus
107
+ nibh, vel condimentum sapien orci non libero. Integer
108
+ ullamcorper felis sit amet felis placerat, eu convallis
109
+ lorem iaculis.
110
+ </p>
111
+ </Tab.Pane>
112
+ ),
113
+ },
114
+ {
115
+ menuItem: 'Planning',
116
+ render: () => (
117
+ <Tab.Pane>
118
+ <h2>Planning</h2>
119
+ <p>
120
+ Suspendisse potenti. Vivamus non arcu tincidunt, congue
121
+ massa at, porttitor velit. Curabitur lacinia nisl ut turpis
122
+ convallis, at dictum urna aliquet. Nullam non urna eget
123
+ felis interdum feugiat. Morbi vel neque elit. Nullam a
124
+ luctus leo. Integer maximus sapien in bibendum scelerisque.
125
+ </p>
126
+ </Tab.Pane>
127
+ ),
128
+ },
129
+ {
130
+ menuItem: 'Action Pages',
131
+ render: () => (
132
+ <Tab.Pane>
133
+ <h2>Action PAges</h2>
134
+ <p>
135
+ Phasellus ac eros at urna condimentum lacinia. Pellentesque
136
+ habitant morbi tristique senectus et netus et malesuada
137
+ fames ac turpis egestas. Sed bibendum, sapien a venenatis
138
+ fermentum, mauris augue cursus turpis, vitae elementum massa
139
+ orci sit amet massa. In hac habitasse platea dictumst.
140
+ </p>
141
+ </Tab.Pane>
142
+ ),
143
+ },
144
+ ]}
145
+ />
146
+ </div>
147
+ </>
148
+ );
149
+ }
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+ import '@testing-library/jest-dom/extend-expect';
3
+ import { render, fireEvent } from '@testing-library/react';
4
+ import MissionSignatoriesProfileView from './MissionSignatoriesProfileView';
5
+
6
+ describe('MissionSignatoriesProfileView', () => {
7
+ it('should render the component with data', () => {
8
+ const data = {
9
+ _v_results: [
10
+ {
11
+ Signatory: 'Test Signatory',
12
+ Describe: 'Test description',
13
+ Provide: 'Test evidence',
14
+ },
15
+ ],
16
+ };
17
+
18
+ const { getByText } = render(<MissionSignatoriesProfileView data={data} />);
19
+
20
+ expect(getByText('Test Signatory')).toBeInTheDocument();
21
+ expect(getByText('Governance')).toBeInTheDocument();
22
+ expect(getByText('Assessment')).toBeInTheDocument();
23
+ expect(getByText('Planning')).toBeInTheDocument();
24
+ expect(getByText('Action Pages')).toBeInTheDocument();
25
+ });
26
+
27
+ it('should render tabs and switch content', () => {
28
+ const data = {
29
+ _v_results: [
30
+ {
31
+ Signatory: 'Test Signatory',
32
+ },
33
+ ],
34
+ };
35
+
36
+ const { getByText } = render(<MissionSignatoriesProfileView data={data} />);
37
+ const governanceTab = getByText('Governance');
38
+ fireEvent.click(governanceTab);
39
+ expect(
40
+ getByText('Opportunities and benefits of climate action'),
41
+ ).toBeInTheDocument();
42
+ });
43
+ });
@@ -0,0 +1,25 @@
1
+ import MissionSignatoriesProfileEdit from './MissionSignatoriesProfileEdit';
2
+ import MissionSignatoriesProfileView from './MissionSignatoriesProfileView';
3
+ import { blockAvailableInMission } from '@eeacms/volto-cca-policy/utils';
4
+ import worldSVG from '@plone/volto/icons/world.svg';
5
+
6
+ export default function installMissionSignatoriesProfileBlock(config) {
7
+ config.blocks.blocksConfig.missionSignatoriesProfile = {
8
+ id: 'missionSignatoriesProfile',
9
+ title: 'Mission Signatories Profile',
10
+ icon: worldSVG,
11
+ group: 'site',
12
+ edit: MissionSignatoriesProfileEdit,
13
+ view: MissionSignatoriesProfileView,
14
+ sidebarTab: 1,
15
+ security: {
16
+ addPermission: [],
17
+ view: [],
18
+ },
19
+ restricted: ({ properties, block }) => {
20
+ return blockAvailableInMission(properties, block);
21
+ },
22
+ };
23
+
24
+ return config;
25
+ }
@@ -0,0 +1,18 @@
1
+ export default {
2
+ title: 'Mission Signatories Profile',
3
+ fieldsets: [
4
+ {
5
+ id: 'default',
6
+ title: 'Default',
7
+ fields: ['profile_id'],
8
+ },
9
+ ],
10
+ properties: {
11
+ profile_id: {
12
+ title: 'Profile ID',
13
+ type: 'number',
14
+ default: '54403',
15
+ },
16
+ },
17
+ required: [],
18
+ };
@@ -22,6 +22,7 @@ import installTabsBlock from './TabsBlock';
22
22
  import installRedirectBlock from './RedirectBlock';
23
23
  import installContentLinks from './ContentLinks';
24
24
  import installASTNavigation from './ASTNavigation';
25
+ import installMissionSignatoriesProfileBlock from './MissionSignatoriesProfile';
25
26
 
26
27
  export default function installBlocks(config) {
27
28
  config.blocks.blocksConfig.title.restricted = false;
@@ -53,5 +54,6 @@ export default function installBlocks(config) {
53
54
  installRedirectBlock,
54
55
  installContentLinks,
55
56
  installASTNavigation,
57
+ installMissionSignatoriesProfileBlock,
56
58
  )(config);
57
59
  }
package/src/utils.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import { flattenToAppURL } from '@plone/volto/helpers';
2
2
 
3
3
  export const blockAvailableInMission = (properties, block) => {
4
- const missionBlocks = ['mkh_map', 'rastBlock'];
4
+ const missionBlocks = ['mkh_map', 'rastBlock', 'missionSignatoriesProfile'];
5
5
  const id = properties?.['@id'];
6
6
 
7
7
  if (!id) {
@@ -35,6 +35,13 @@ body.view-viewview.contenttype-subsite.section-mission
35
35
  }
36
36
 
37
37
  body.subsite-mkh {
38
+ --text-color-secondary: @green-5;
39
+ --border-color-secondary: @green-5;
40
+
41
+ .column > .ui.segment {
42
+ background-color: transparent;
43
+ }
44
+
38
45
  &.subsite-root {
39
46
  .content-area {
40
47
  padding: 0 !important;
@@ -86,6 +93,15 @@ body.subsite-mkh {
86
93
  background: @green-1;
87
94
  }
88
95
 
96
+ .ui.statistics:not(.inverted) .ui.statistic .slate.secondary {
97
+ color: @green-5;
98
+ }
99
+
100
+ .ui.secondary.pointing.menu .active.item {
101
+ color: @green-5;
102
+ border-color: @green-5;
103
+ }
104
+
89
105
  #mega-menu {
90
106
  .ui.accordion .title i,
91
107
  .ui.accordion button.title i {