Skip to content

Commit

Permalink
Privacy on map
Browse files Browse the repository at this point in the history
  • Loading branch information
razvanMiu committed Nov 11, 2020
1 parent 6dc48c1 commit 8537726
Show file tree
Hide file tree
Showing 8 changed files with 651 additions and 234 deletions.
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -110,15 +110,15 @@
"node": "^10 || ^12"
},
"dependencies": {
"@eeacms/volto-blocks-form": "github:eea/volto-blocks-form#0.5.2",
"@eeacms/volto-blocks-form": "github:eea/volto-blocks-form#1.0.0",
"@eeacms/volto-metadata-block": "github:eea/volto-metadata-block#1.0.1",
"@eeacms/volto-object-widget": "github:eea/volto-object-widget#0.2.3",
"@eeacms/volto-widget-toggle": "github:eea/volto-widget-toggle#0.1.0",
"@eeacms/volto-object-widget": "github:eea/volto-object-widget#1.0.0",
"@eeacms/volto-widget-toggle": "github:eea/volto-widget-toggle#1.0.0",
"@eeacms/volto-widgets-view": "github:eea/volto-widgets-view#1.0.1",
"@eeacms/volto-slate-metadata-mentions": "github:eea/volto-slate-metadata-mentions#0.4.2",
"@material/react-linear-progress": "^0.15.0",
"@plone/volto": "github:eea/volto#8.2.6-beta1",
"volto-slate": "github:eea/volto-slate#0.9.0-beta.4",
"volto-slate": "github:eea/volto-slate#0.9.2",
"axios": "^0.20.0",
"jsonp": "^0.2.1",
"ol": "^6.4.3",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,14 @@ const getSchema = (props) => {
title: 'Has regions features',
defaultValue: false,
},
privacy: {
type: 'array',
title: 'Privacy',
choices: [
['small', 'Small'],
['big', 'Big'],
],
},
filterSource: {
type: 'array',
title: 'Filter source',
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import React, { useState } from 'react';
import VisibilitySensor from 'react-visibility-sensor';
import { Placeholder } from 'semantic-ui-react';
import cookie from 'react-cookie';
import ReactTooltip from 'react-tooltip';
import { Button, Checkbox, Message, Image } from 'semantic-ui-react';
import Icon from '@plone/volto/components/theme/Icon/Icon';
import infoSVG from '@plone/volto/icons/info.svg';
import { settings } from '~/config';

import 'volto-embed/css/embed-styles.css';

const key = (domain_key) => `accept-${domain_key}`;

const getExpDays = () =>
typeof settings.embedCookieExpirationDays !== 'undefined'
? settings.embedCookieExpirationDays
: 90;

function saveCookie(domain_key) {
const date = new Date();
date.setDate(date.getDate() + getExpDays());

cookie.save(key(domain_key), 'true', {
path: '/',
expires: date,
});
}

function canShow(domain_key) {
return cookie.load(key(domain_key)) === 'true';
}

export default ({ children, data = {}, block, onShow, ...rest }) => {
const { dataprotection = {} } = data;
const [visible, setVisibility] = useState(false);
const defaultShow = canShow(dataprotection.privacy_cookie_key);
const [show, setShow] = useState(defaultShow);
const [remember, setRemember] = useState(defaultShow);

return (
<VisibilitySensor
onChange={(isVisible) => {
!visible && isVisible && setVisibility(true);
}}
partialVisibility={true}
offset={{ bottom: 200 }}
>
{visible ? (
<>
{!dataprotection.enabled || show ? (
children
) : (
<div className="privacy-protection" {...rest}>
<div className="overlay">
<div className="wrapped">
{dataprotection.type === 'big' ? (
<Message>
<div
className="privacy-statement"
dangerouslySetInnerHTML={{
__html: dataprotection.privacy_statement,
}}
/>
</Message>
) : (
''
)}
<div className="privacy-button">
{dataprotection.type === 'small' ? (
<span
className="floating-icon mr-1"
data-tip={dataprotection.privacy_statement}
>
<Icon
className="firefox-icon"
name={infoSVG}
size="20"
color="#D63D27"
/>
</span>
) : (
''
)}
<Button
primary
onClick={() => {
setShow(true);
if (onShow) {
onShow();
}
if (remember) {
saveCookie(dataprotection.privacy_cookie_key);
}
}}
>
Show external content
</Button>
</div>

<div className="privacy-toggle">
<Checkbox
toggle
label="Remember my choice"
id={`remember-choice-${block}`}
onChange={(ev, { checked }) => {
setRemember(checked);
}}
checked={remember}
/>
</div>

<p className="discreet">
Your choice will be saved in a cookie managed by{' '}
{settings.ownDomain || '.eea.europa.eu'} that will expire in{' '}
{getExpDays()} days.
</p>
</div>
</div>
</div>
)}
<ReactTooltip />
</>
) : (
<Placeholder style={{ height: '100%', width: '100%' }}>
<Placeholder.Image rectangular />
</Placeholder>
)}
</VisibilitySensor>
);
};
Loading

0 comments on commit 8537726

Please sign in to comment.