Skip to content
This repository has been archived by the owner on Apr 25, 2024. It is now read-only.

Commit

Permalink
Merge pull request #53 from eea/develop
Browse files Browse the repository at this point in the history
Added compatibility with volto-datablocks@3.x
  • Loading branch information
nileshgulia1 committed Feb 4, 2022
2 parents b771d16 + 8ce707c commit 3c76737
Show file tree
Hide file tree
Showing 17 changed files with 1,000 additions and 372 deletions.
21 changes: 21 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,29 @@ 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).

#### [0.2.0](https://github.com/eea/volto-forests-theme/compare/0.2.0-beta.0...0.2.0)

- Develop [`#51`](https://github.com/eea/volto-forests-theme/pull/51)

#### [0.2.0-beta.0](https://github.com/eea/volto-forests-theme/compare/0.1.37...0.2.0-beta.0)

> 3 February 2022
- adapt to data-blocks v3 [`#52`](https://github.com/eea/volto-forests-theme/pull/52)
- Release 0.2.0-beta.0 [`4c7e23a`](https://github.com/eea/volto-forests-theme/commit/4c7e23a7d710c656ad39260b9d4509cc903c424c)
- Use latest volto-datablocks [`cc5e03b`](https://github.com/eea/volto-forests-theme/commit/cc5e03b45ba8ce1b3e632353bd1f43c4ae62c54e)
- Added DiscodataConnectorBlock [`7502a9e`](https://github.com/eea/volto-forests-theme/commit/7502a9ea2c57aacfdfabf86fbf80c752c856cb6a)
- fix navigationBlock View [`ee0891a`](https://github.com/eea/volto-forests-theme/commit/ee0891addb9e7c78283b2d9b03a36224ac6904b6)
- object list widget [`874c0d7`](https://github.com/eea/volto-forests-theme/commit/874c0d7077b9e36fccf765547e550679c4bfb5bb)
- rafactor navigation block [`e96c48e`](https://github.com/eea/volto-forests-theme/commit/e96c48ed5995b075a2b8a7c0834befd6608763db)
- Updated style [`26d2e5e`](https://github.com/eea/volto-forests-theme/commit/26d2e5ee9cef90533338359e35bc6df1ada7f7eb)
- WIP: adapt to volto-datablocks v3 [`e5d143e`](https://github.com/eea/volto-forests-theme/commit/e5d143e8a76a1d90921b73f7e6f7238b31fd4164)

#### [0.1.37](https://github.com/eea/volto-forests-theme/compare/0.1.36...0.1.37)

> 28 January 2022
- Develop [`#51`](https://github.com/eea/volto-forests-theme/pull/51)
- nice homepage buttons [`14616da`](https://github.com/eea/volto-forests-theme/commit/14616da40f1d51b24d1fee540b0ea9331569306b)

#### [0.1.36](https://github.com/eea/volto-forests-theme/compare/0.1.35...0.1.36)
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@eeacms/volto-forests-theme",
"version": "0.1.37",
"version": "0.2.0",
"description": "@eeacms/volto-forests-theme: Volto add-on",
"main": "src/index.js",
"author": "European Environment Agency: IDM2 A-Team",
Expand All @@ -25,7 +25,7 @@
"dependencies": {
"@eeacms/volto-plotlycharts": "*",
"@eeacms/volto-addons-forest": "*",
"@eeacms/volto-datablocks": "2.0.16",
"@eeacms/volto-datablocks": "*",
"@eeacms/volto-matomo": "*",
"react-highlight-words": "^0.16.0",
"react-image-gallery": "1.2.7",
Expand Down
24 changes: 24 additions & 0 deletions src/components/manage/Blocks/DiscodataConnectorBlock/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import worldSVG from '@plone/volto/icons/world.svg';
import DiscodataConnectorBlockEdit from './v1/Edit';
import DiscodataConnectorBlockView from './v1/View';

// TODO: Move this to volto-forests-theme

export default (config) => {
config.blocks.blocksConfig.discodata_connector_block = {
id: 'discodata_connector_block',
title: 'Discodata connector block',
icon: worldSVG,
group: 'data_blocks',
view: DiscodataConnectorBlockView,
edit: DiscodataConnectorBlockEdit,
restricted: false,
mostUsed: false,
sidebarTab: 1,
security: {
addPermission: [],
view: [],
},
};
return config;
};
16 changes: 16 additions & 0 deletions src/components/manage/Blocks/DiscodataConnectorBlock/styles.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
.connected-data-block {
background-color: lightblue;
}

.block-container .data-content span {
white-space: break-spaces;
}

#sidebar-properties .accordion .ui.menu {
flex-wrap: wrap;
}

#sidebar-properties .accordion .ui.menu .active.item {
border: 1px solid #d4d4d5;
border-radius: 0.28rem !important;
}
90 changes: 90 additions & 0 deletions src/components/manage/Blocks/DiscodataConnectorBlock/v1/Edit.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import React, { useState, useEffect } from 'react';
import { compose } from 'redux';
import _uniqueId from 'lodash/uniqueId';
import { v4 as uuid } from 'uuid';
import View from './View';
import { SidebarPortal } from '@plone/volto/components';
import InlineForm from '@plone/volto/components/manage/Form/InlineForm';
import { connectToMultipleProviders } from '@eeacms/volto-datablocks/hocs';

import { getSchema } from './schema';

import '../styles.css';

const Edit = (props) => {
const [state, setState] = useState({
id: _uniqueId('block_'),
schema: getSchema(props),
});

useEffect(() => {
const newData = { ...props.data };
if (props.data.data_providers) {
if (
typeof props.data?.data_providers === 'object' &&
props.data?.data_providers?.value
) {
try {
newData.data_providers = [];
const dataProvidersSchema = JSON.parse(
props.data?.data_providers?.value,
);
dataProvidersSchema?.fieldsets?.[0]?.fields &&
dataProvidersSchema.fieldsets[0].fields.forEach((dataProvider) => {
newData.data_providers.push({
...dataProvidersSchema.properties[dataProvider],
'@id': uuid(),
id: dataProvider,
});
});
} catch {}
}
}
if (JSON.stringify(newData) !== JSON.stringify(props.data)) {
props.onChangeBlock(props.block, {
...newData,
});
}
/* eslint-disable-next-line */
}, []);

useEffect(() => {
setState({
...state,
schema: getSchema(props),
});
/* eslint-disable-next-line */
}, [props.providers_data, props.data.data_providers_new]);

return (
<div>
<SidebarPortal selected={props.selected}>
<InlineForm
schema={state.schema}
title={state.schema.title}
onChangeField={(field, data) => {
props.onChangeBlock(props.block, {
...(props.data || {}),
[field]: data,
});
}}
formData={props.data || {}}
block={props.block}
/>
</SidebarPortal>
<View {...props} id={state.id} />
</div>
);
};

export default compose(
connectToMultipleProviders((props) => ({
providers:
props.data?.data_providers
?.map((provider) => ({
provider_url: provider.path,
title: provider.title,
}))
?.filter((provider) => provider.provider_url) || [],
})),
)(Edit);
180 changes: 180 additions & 0 deletions src/components/manage/Blocks/DiscodataConnectorBlock/v1/View.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,180 @@
import React, { useState, useEffect } from 'react';
import { compose } from 'redux';
import { connectToMultipleProviders } from '@eeacms/volto-datablocks/hocs';
import { DataConnectedValue } from '@eeacms/volto-datablocks/Utils';
import { Sources } from '@eeacms/volto-datablocks/Utils';

const providerView = (dataProviderKey, dataProvider) => {
return (
<div
key={`land-data-for-${dataProviderKey}`}
className={dataProvider.className}
>
<span>
{dataProvider.hasDiscodataConnector && (
<DataConnectedValue
url={dataProvider.path}
column={dataProvider.displayColumn}
textTemplate={dataProvider.textTemplate}
specifier={dataProvider.specifier}
placeholder="_"
/>
)}
{dataProvider.measurmentUnit || ''}
</span>
{' ' + (dataProvider.additionalText || '')}
</div>
);
};

const bulletListView = (items) => (
<div className="ui bulleted list">
{items &&
Object.entries(items).map(([key, item]) => (
<div className="item">
{item.leftText}
<span className="float-right">{item.rightText}</span>
</div>
))}
</div>
);

const View = (props) => {
const [dataProviders, setDataProviders] = useState({});
const [parentsDataProviders, setParentsDataProviders] = useState({});
const { providers_data, providers_metadata } = props;
const bulletList =
props.data?.bullet_list?.value &&
JSON.parse(props.data?.bullet_list?.value).properties;

const updateDataProviders = () => {
let newDataProviders = { ...dataProviders };
if (props.data.data_providers) {
if (
typeof props.data.data_providers === 'object' &&
props.data.data_providers.value
) {
newDataProviders = {};
const dataProvidersSchema =
props.data?.data_providers?.value &&
JSON.parse(props.data?.data_providers?.value);
dataProvidersSchema?.fieldsets?.[0]?.fields &&
dataProvidersSchema.fieldsets[0].fields.forEach((dataProvider) => {
newDataProviders[dataProvider] = {
...dataProvidersSchema.properties[dataProvider],
};
});
} else if (Array.isArray(props.data.data_providers)) {
newDataProviders = {};
props.data.data_providers.forEach((provider) => {
newDataProviders[provider.id] = { ...provider };
});
}
}
setDataProviders({ ...newDataProviders });
return newDataProviders;
};

const updateParentsDataProviders = () => {
const newParentsDataProviders = {};
dataProviders &&
Object.entries(dataProviders).forEach(
([dataProviderKey, dataProvider]) => {
if (!dataProvider.hasParent) {
newParentsDataProviders[dataProviderKey] = { ...dataProvider };
} else if (
dataProvider.parent &&
newParentsDataProviders[dataProvider.parent]
) {
if (!newParentsDataProviders[dataProvider.parent].children) {
newParentsDataProviders[dataProvider.parent].children = {};
}
newParentsDataProviders[dataProvider.parent].children[
dataProviderKey
] = dataProvider;
}
},
);
setParentsDataProviders({ ...newParentsDataProviders });
return newParentsDataProviders;
};

useEffect(() => {
updateDataProviders();
/* eslint-disable-next-line */
}, [JSON.stringify(props.data?.data_providers)]);

useEffect(() => {
updateParentsDataProviders();
/* eslint-disable-next-line */
}, [JSON.stringify(dataProviders)]);

const view = (
<div className="flex h-100 pa-1">
<div className="flex flex-column w-100">
{/* {props.data?.block_title ? <h5>{props.data.block_title}</h5> : ''} */}
{parentsDataProviders &&
Object.entries(parentsDataProviders).map(
([dataProviderKey, dataProvider]) => {
if (dataProvider.children) {
return (
<div
className={dataProvider.wrapperClassName}
key={`data-wrapper-${dataProviderKey}`}
>
{providerView(dataProviderKey, dataProvider)}
{Object.entries(
dataProvider.children,
).map(([cildrenKey, children]) =>
providerView(cildrenKey, children),
)}
</div>
);
}
return (
<div
className={dataProvider.wrapperClassName}
key={`data-wrapper-${dataProviderKey}`}
>
{providerView(dataProviderKey, dataProvider)}
</div>
);
},
)}
{bulletList && bulletListView(bulletList)}
{props?.data?.chartSources && (
<div>
<Sources
sources={props.data?.chartSources}
providers_data={providers_data}
providers_metadata={providers_metadata}
download_button={props.data?.download_button}
title={
props.data?.block_title ||
props.data?.data_providers
?.map((provider) => provider.path)
?.filter((path) => path)?.[0]
}
/>
</div>
)}
</div>
</div>
);
return view;
};

export default compose(
connectToMultipleProviders((props) => ({
providers:
props.data?.data_providers
?.map((provider) => ({
provider_url: provider.path,
title: provider.title,
has_data_query_by_context: provider.has_data_query_by_context,
has_data_query_by_provider: provider.has_data_query_by_provider,
data_query: provider.data_query,
}))
?.filter((provider) => provider.provider_url) || [],
})),
)(View);
Loading

0 comments on commit 3c76737

Please sign in to comment.