@eeacms/volto-cca-policy 0.3.30 → 0.3.32

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.
Files changed (25) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/package.json +1 -1
  3. package/src/components/index.js +1 -0
  4. package/src/components/manage/Blocks/index.js +0 -2
  5. package/src/components/{manage/Blocks/MissionSignatoriesProfile/MissionSignatoriesProfileView.js → theme/MissionSignatoryProfile/MissionSignatoryProfileView.jsx} +25 -16
  6. package/src/components/{manage/Blocks/MissionSignatoriesProfile/MissionSignatoriesProfileView.test.jsx → theme/MissionSignatoryProfile/MissionSignatoryProfileView.test.jsx} +11 -10
  7. package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/ActionPagesTab.jsx +1 -1
  8. package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/AssessmentTab.jsx +1 -1
  9. package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/GovernanceTab.jsx +2 -2
  10. package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/PlanningTab.jsx +1 -1
  11. package/src/index.js +2 -0
  12. package/src/utils.js +7 -1
  13. package/theme/globals/site.overrides +18 -0
  14. package/src/components/manage/Blocks/MissionSignatoriesProfile/MissionSignatoriesProfileEdit.js +0 -28
  15. package/src/components/manage/Blocks/MissionSignatoriesProfile/index.js +0 -25
  16. package/src/components/manage/Blocks/MissionSignatoriesProfile/schema.js +0 -18
  17. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/AccordionList.jsx +0 -0
  18. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/AccordionList.test.jsx +0 -0
  19. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/StatisticsSection.jsx +0 -0
  20. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/ActionPagesTab.test.jsx +0 -0
  21. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/AssessmentTab.test.jsx +0 -0
  22. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/GovernanceTab.test.jsx +0 -0
  23. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/IntroductionTab.jsx +0 -0
  24. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/TabSections/PlanningTab.test.jsx +0 -0
  25. /package/src/components/{manage/Blocks/MissionSignatoriesProfile → theme/MissionSignatoryProfile}/style.less +0 -0
package/CHANGELOG.md CHANGED
@@ -4,6 +4,25 @@ 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.32](https://github.com/eea/volto-cca-policy/compare/0.3.31...0.3.32) - 30 April 2025
8
+
9
+ #### :bug: Bug Fixes
10
+
11
+ - fix: remove fallback [kreafox - [`738324e`](https://github.com/eea/volto-cca-policy/commit/738324edeb747b4d3f030b7e92a45614923a659b)]
12
+ - fix: update tests [kreafox - [`ed276ea`](https://github.com/eea/volto-cca-policy/commit/ed276eaceab752cd54a1d96db4cee9b1605f34ed)]
13
+
14
+ #### :nail_care: Enhancements
15
+
16
+ - change: enhance formatTextToHTML to auto-link URLs as clickable anchor tags - refs #285296 [kreafox - [`c660faf`](https://github.com/eea/volto-cca-policy/commit/c660faf359963084537c28c4c558473227c35b59)]
17
+ - change: refactor mission signatory profile; add view, remove block - refs #285361 [kreafox - [`3424316`](https://github.com/eea/volto-cca-policy/commit/34243168e2cae1b617f6ea05d479157109be5dcf)]
18
+
19
+ ### [0.3.31](https://github.com/eea/volto-cca-policy/compare/0.3.30...0.3.31) - 29 April 2025
20
+
21
+ #### :bug: Bug Fixes
22
+
23
+ - fix: item image size - refs #286407 [kreafox - [`d9fae66`](https://github.com/eea/volto-cca-policy/commit/d9fae6619e1297c091f20b4590b4d5994555cb2b)]
24
+ - fix: item image size - refs #286407 [kreafox - [`a8210be`](https://github.com/eea/volto-cca-policy/commit/a8210bec76d7189f88eb2af8610082d05404749e)]
25
+
7
26
  ### [0.3.30](https://github.com/eea/volto-cca-policy/compare/0.3.29...0.3.30) - 28 April 2025
8
27
 
9
28
  #### :house: Internal changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eeacms/volto-cca-policy",
3
- "version": "0.3.30",
3
+ "version": "0.3.32",
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",
@@ -5,6 +5,7 @@ export { default as TranslationDisclaimer } from './theme/TranslationDisclaimer/
5
5
  export { default as ShareInfoButton } from './theme/ShareInfoButton/ShareInfoButton';
6
6
  export { default as ASTNavigation } from './theme/ASTNavigation/ASTNavigation';
7
7
  export { default as RedirectToLogin } from './theme/RedirectToLogin/RedirectToLogin';
8
+ export { default as MissionSignatoryProfileView } from './theme/MissionSignatoryProfile/MissionSignatoryProfileView';
8
9
 
9
10
  // Widgets
10
11
  export { default as RASTWidgetView } from './theme/Widgets/RASTWidgetView';
@@ -22,7 +22,6 @@ 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';
26
25
 
27
26
  export default function installBlocks(config) {
28
27
  config.blocks.blocksConfig.title.restricted = false;
@@ -54,6 +53,5 @@ export default function installBlocks(config) {
54
53
  installRedirectBlock,
55
54
  installContentLinks,
56
55
  installASTNavigation,
57
- installMissionSignatoriesProfileBlock,
58
56
  )(config);
59
57
  }
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
- import { Tab } from 'semantic-ui-react';
3
-
2
+ import { Tab, Container } from 'semantic-ui-react';
3
+ import { BannerTitle } from '@eeacms/volto-cca-policy/helpers';
4
4
  import IntroductionTab from './TabSections/IntroductionTab';
5
5
  import GovernanceTab from './TabSections/GovernanceTab';
6
6
  import AssessmentTab from './TabSections/AssessmentTab';
@@ -9,26 +9,35 @@ import ActionPagesTab from './TabSections/ActionPagesTab';
9
9
 
10
10
  import './style.less';
11
11
 
12
- const MissionSignatoriesProfileView = (props) => {
13
- const { data } = props;
14
- const result = data?._v_results || {};
12
+ const MissionSignatoryProfileView = (props) => {
13
+ const { content } = props || {};
14
+ const dataJson =
15
+ props?.content?.['@components']?.missionsignatoryprofile || {};
16
+
17
+ const result = dataJson?.result || {};
15
18
  const governance = result?.governance?.[0] || [];
16
19
  const planning = result?.planning || {};
17
20
  const assessment = result?.assessment || {};
18
21
  const action = result?.action || {};
19
22
 
20
- // const dataJson = JSON.parse(result?.Cooperation_Experience);
21
23
  const [activeIndex, setActiveIndex] = React.useState(0);
22
24
 
23
25
  return (
24
- <>
26
+ <Container>
27
+ <BannerTitle
28
+ content={content}
29
+ data={{
30
+ info: [{ description: '' }],
31
+ hideContentType: true,
32
+ hideCreationDate: true,
33
+ hideModificationDate: true,
34
+ hidePublishingDate: true,
35
+ hideDownloadButton: false,
36
+ hideShareButton: false,
37
+ }}
38
+ />
25
39
  <div className="signatories-profile">
26
- {/* {
27
- dataJson['Cooperation_Experience'][0][
28
- 'DescribeDetailCooperationEnhance'
29
- ]
30
- } */}
31
- <h2>{planning?.planning_titles?.[0].Signatory}</h2>
40
+ {/* <h2>{planning?.planning_titles?.[0].Signatory}</h2> */}
32
41
  {/* <h2>{planning?.planning_titles?.[0].Id}</h2> */}
33
42
 
34
43
  <br />
@@ -61,14 +70,14 @@ const MissionSignatoriesProfileView = (props) => {
61
70
  render: () => <PlanningTab result={planning} />,
62
71
  },
63
72
  {
64
- menuItem: 'Action Pages',
73
+ menuItem: 'Action',
65
74
  render: () => <ActionPagesTab result={action} />,
66
75
  },
67
76
  ]}
68
77
  />
69
78
  </div>
70
- </>
79
+ </Container>
71
80
  );
72
81
  };
73
82
 
74
- export default MissionSignatoriesProfileView;
83
+ export default MissionSignatoryProfileView;
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, fireEvent, screen } from '@testing-library/react';
3
3
  import '@testing-library/jest-dom';
4
- import MissionSignatoriesProfileView from './MissionSignatoriesProfileView';
4
+ import MissionSignatoryProfileView from './MissionSignatoryProfileView';
5
5
 
6
6
  // Mock the tab components with minimal placeholders
7
7
  jest.mock('./TabSections/IntroductionTab', () => () => (
@@ -14,11 +14,12 @@ jest.mock('./TabSections/AssessmentTab', () => () => (
14
14
  <div>Mocked Assessment</div>
15
15
  ));
16
16
  jest.mock('./TabSections/PlanningTab', () => () => <div>Mocked Planning</div>);
17
- jest.mock('./TabSections/ActionPagesTab', () => () => (
18
- <div>Mocked Action Pages</div>
19
- ));
17
+ jest.mock('./TabSections/ActionPagesTab', () => () => <div>Mocked Action</div>);
18
+ jest.mock('@eeacms/volto-cca-policy/helpers', () => ({
19
+ BannerTitle: ({ children }) => <div>{children}</div>,
20
+ }));
20
21
 
21
- describe('MissionSignatoriesProfileView', () => {
22
+ describe('MissionSignatoryProfileView', () => {
22
23
  const data = {
23
24
  _v_results: {
24
25
  planning: {
@@ -29,21 +30,21 @@ describe('MissionSignatoriesProfileView', () => {
29
30
  };
30
31
 
31
32
  it('renders tab labels and default content', () => {
32
- render(<MissionSignatoriesProfileView data={data} />);
33
+ render(<MissionSignatoryProfileView data={data} />);
33
34
 
34
35
  // Tab labels
35
36
  expect(screen.getByText('Introduction')).toBeInTheDocument();
36
37
  expect(screen.getByText('Governance')).toBeInTheDocument();
37
38
  expect(screen.getByText('Assessment')).toBeInTheDocument();
38
39
  expect(screen.getByText('Planning')).toBeInTheDocument();
39
- expect(screen.getByText('Action Pages')).toBeInTheDocument();
40
+ expect(screen.getByText('Action')).toBeInTheDocument();
40
41
 
41
42
  // Default selected tab content (Introduction)
42
43
  expect(screen.getByText('Mocked Introduction')).toBeInTheDocument();
43
44
  });
44
45
 
45
46
  it('switches tabs and renders corresponding content', () => {
46
- render(<MissionSignatoriesProfileView data={data} />);
47
+ render(<MissionSignatoryProfileView data={data} />);
47
48
 
48
49
  fireEvent.click(screen.getByText('Governance'));
49
50
  expect(screen.getByText('Mocked Governance')).toBeInTheDocument();
@@ -54,7 +55,7 @@ describe('MissionSignatoriesProfileView', () => {
54
55
  fireEvent.click(screen.getByText('Planning'));
55
56
  expect(screen.getByText('Mocked Planning')).toBeInTheDocument();
56
57
 
57
- fireEvent.click(screen.getByText('Action Pages'));
58
- expect(screen.getByText('Mocked Action Pages')).toBeInTheDocument();
58
+ fireEvent.click(screen.getByText('Action'));
59
+ expect(screen.getByText('Mocked Action')).toBeInTheDocument();
59
60
  });
60
61
  });
@@ -1,7 +1,7 @@
1
1
  import React from 'react';
2
2
  import { Tab, Grid } from 'semantic-ui-react';
3
3
  import { Callout } from '@eeacms/volto-eea-design-system/ui';
4
- import AccordionList from './../AccordionList';
4
+ import AccordionList from '../AccordionList';
5
5
 
6
6
  const ActionsTabContent = ({ action }) => {
7
7
  const hasHazards = action?.Climate_Hazards?.length > 0;
@@ -8,7 +8,7 @@ import {
8
8
  ItemContent,
9
9
  } from 'semantic-ui-react';
10
10
  import { Callout } from '@eeacms/volto-eea-design-system/ui';
11
- import AccordionList from './../AccordionList';
11
+ import AccordionList from '../AccordionList';
12
12
 
13
13
  import image from '@eeacms/volto-cca-policy/../theme//assets/images/image-narrow.svg';
14
14
 
@@ -3,7 +3,7 @@ import { Tab } from 'semantic-ui-react';
3
3
  import { Callout } from '@eeacms/volto-eea-design-system/ui';
4
4
  import { HTMLField } from '@eeacms/volto-cca-policy/helpers';
5
5
  import { formatTextToHTML } from '@eeacms/volto-cca-policy/utils';
6
- import AccordionList from './../AccordionList';
6
+ import AccordionList from '../AccordionList';
7
7
 
8
8
  const GovernanceTab = ({ result }) => {
9
9
  const {
@@ -27,7 +27,7 @@ const GovernanceTab = ({ result }) => {
27
27
 
28
28
  <br />
29
29
 
30
- {Provide_Title && Provide && (
30
+ {Provide && (
31
31
  <AccordionList
32
32
  accordions={[
33
33
  {
@@ -15,7 +15,7 @@ import {
15
15
  formatTextToHTML,
16
16
  extractPlanNameAndURL,
17
17
  } from '@eeacms/volto-cca-policy/utils';
18
- import AccordionList from './../AccordionList';
18
+ import AccordionList from '../AccordionList';
19
19
  import image from '@eeacms/volto-cca-policy/../theme/assets/images/image-narrow.svg';
20
20
 
21
21
  const ItemsSection = ({ items }) => {
package/src/index.js CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  RASTWidgetView,
9
9
  TranslationDisclaimer,
10
10
  RedirectToLogin,
11
+ MissionSignatoryProfileView,
11
12
  } from '@eeacms/volto-cca-policy/components';
12
13
  import { blockAvailableInMission } from '@eeacms/volto-cca-policy/utils';
13
14
 
@@ -375,6 +376,7 @@ const applyConfig = (config) => {
375
376
  'eea.climateadapt.c3sindicator': C3SIndicatorView,
376
377
  'eea.climateadapt.adaptationoption': AdaptationOptionView,
377
378
  'News Item': NewsItemView,
379
+ mission_signatory_profile: MissionSignatoryProfileView,
378
380
  };
379
381
 
380
382
  config.views.layoutViewsNamesMapping.view_cca_event = 'CCA Event View';
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', 'missionSignatoriesProfile'];
4
+ const missionBlocks = ['mkh_map', 'rastBlock'];
5
5
  const id = properties?.['@id'];
6
6
 
7
7
  if (!id) {
@@ -90,6 +90,12 @@ export const formatTextToHTML = (text) => {
90
90
  .replace(/\\no\s*/g, '<br />• ') // list-like "o " to bullet point
91
91
  .replace(/\\n/g, '<br />'); // single line break
92
92
 
93
+ // Convert URLs to clickable links
94
+ formattedText = formattedText.replace(
95
+ /((https?:\/\/[^\s<>"]+))/g,
96
+ '<a href="$1" target="_blank" rel="noreferrer">$1</a>',
97
+ );
98
+
93
99
  return `<p>${formattedText}</p>`;
94
100
  };
95
101
 
@@ -44,6 +44,24 @@ p.has--clear--both:empty {
44
44
  gap: 0 0.7em !important;
45
45
  }
46
46
 
47
+ // Fix item image size
48
+ #main {
49
+ .ui.items > .item > .image > img {
50
+ width: auto;
51
+ }
52
+ .ui.items > .item > .image + .content{
53
+ padding-left: 1rem;
54
+ }
55
+
56
+ .ui.items > .item .ui.middle.aligned.image {
57
+ display: flex;
58
+
59
+ img {
60
+ align-self: center;
61
+ }
62
+ }
63
+ }
64
+
47
65
  // Add icon for external links
48
66
  // .content-area #view {
49
67
  // a[data-linktype='internal'] {
@@ -1,28 +0,0 @@
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
- }
@@ -1,25 +0,0 @@
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
- }
@@ -1,18 +0,0 @@
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
- };