Skip to content

Commit 16438fa

Browse files
committed
create the CookiePreferences components
the modal will show the next time a user visits any page the check is for the cookie policy page. so that a user can update their preference. ref: scientist-hq/webstore#316
1 parent 1274a8c commit 16438fa

File tree

5 files changed

+146
-0
lines changed

5 files changed

+146
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import React from 'react'
2+
import Form from 'react-bootstrap/Form'
3+
import PropTypes from 'prop-types'
4+
import { useState } from 'react'
5+
6+
const CookiePreferencesCheck = ({ cookieConsent, disableCookies, enableCookies }) => {
7+
console.log('CookiePreferencesCheck', { cookieConsent, disableCookies, enableCookies })
8+
const [allowed, setAllowed] = useState(cookieConsent)
9+
10+
const handleEnablingCookies = () => {
11+
enableCookies()
12+
setAllowed('true')
13+
}
14+
15+
const handleDisablingCookies = () => {
16+
disableCookies()
17+
setAllowed('false')
18+
}
19+
20+
return (
21+
<Form>
22+
<Form.Check
23+
inline
24+
label='Allow Cookies'
25+
name='Allow Cookies'
26+
type='radio'
27+
id='allow-cookies'
28+
checked={allowed === 'true'}
29+
onChange={() => handleEnablingCookies()}
30+
/>
31+
<Form.Check
32+
inline
33+
label='Disable Cookies'
34+
name='Disable Cookies'
35+
type='radio'
36+
id='disable-cookies'
37+
checked={allowed === 'false'}
38+
onChange={() => handleDisablingCookies()}
39+
/>
40+
</Form>
41+
);
42+
}
43+
44+
CookiePreferencesCheck.propTypes = {
45+
cookieConsent: PropTypes.string.isRequired,
46+
disableCookies: PropTypes.func.isRequired,
47+
enableCookies: PropTypes.func.isRequired,
48+
}
49+
50+
export default CookiePreferencesCheck
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react'
2+
import CookiePreferencesCheck from './CookiePreferencesCheck'
3+
4+
export default {
5+
title: 'Components/CookiePreferencesCheck',
6+
component: CookiePreferencesCheck,
7+
}
8+
9+
const Template = (args) => <CookiePreferencesCheck {...args} />
10+
11+
export const Default = Template.bind({})
12+
Default.args = {
13+
cookieConsent: 'false',
14+
disableCookies: () => console.log('disable cookies'),
15+
enableCookies: () => console.log('enable cookies'),
16+
}
17+
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import React from 'react'
2+
import Link from 'next/link'
3+
import PropTypes from 'prop-types'
4+
import Button from 'react-bootstrap/Button'
5+
import Modal from 'react-bootstrap/Modal'
6+
import { useState } from 'react'
7+
8+
const CookiePreferencesModal = ({ cookieConsent, disableCookies, enableCookies }) => {
9+
const [show, setShow] = useState(false)
10+
const handleClose = () => setShow(false)
11+
const handleShow = () => setShow(true)
12+
console.log('CookiePreferencesModal', { cookieConsent })
13+
14+
const handleEnablingCookies = () => {
15+
enableCookies()
16+
handleClose()
17+
}
18+
19+
const handleDisablingCookies = () => {
20+
disableCookies()
21+
handleClose()
22+
}
23+
24+
if (!show && (cookieConsent === undefined)) return handleShow()
25+
26+
return (
27+
<Modal
28+
show={show}
29+
onHide={handleClose}
30+
backdrop='static'
31+
keyboard={false}
32+
>
33+
<Modal.Header closeButton>
34+
<Modal.Title>Cookie Preferences</Modal.Title>
35+
</Modal.Header>
36+
<Modal.Body>
37+
Please provide your consent below to our use of non-essential cookies on our site.
38+
You may withdraw your consent at any point by visiting our <Link href='legal-notices/cookie-policy'>Cookie Policy</Link> page.
39+
</Modal.Body>
40+
<Modal.Footer>
41+
<Button variant='primary' onClick={handleEnablingCookies}>
42+
Allow Cookies
43+
</Button>
44+
<Button variant='secondary' onClick={handleDisablingCookies}>
45+
Disable Cookies
46+
</Button>
47+
</Modal.Footer>
48+
</Modal>
49+
)
50+
}
51+
52+
CookiePreferencesModal.propTypes = {
53+
cookieConsent: PropTypes.string.isRequired,
54+
disableCookies: PropTypes.func.isRequired,
55+
enableCookies: PropTypes.func.isRequired,
56+
}
57+
58+
export default CookiePreferencesModal
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import React from 'react'
2+
import CookiePreferencesModal from './CookiePreferencesModal'
3+
4+
export default {
5+
title: 'Components/CookiePreferencesModal',
6+
component: CookiePreferencesModal,
7+
}
8+
9+
const Template = (args) => <CookiePreferencesModal {...args} />
10+
11+
export const Default = Template.bind({})
12+
Default.args = {
13+
cookieConsent: undefined,
14+
disableCookies: () => console.log('disable cookies'),
15+
enableCookies: () => console.log('enable cookies'),
16+
}
17+

src/components/index.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ import AdditionalInfo from './AdditionalInfo/AdditionalInfo'
77
import BlankRequestForm from './BlankRequestForm/BlankRequestForm'
88
import Button from './Button/Button'
99
import CollapsibleSection from './CollapsibleSection/CollapsibleSection'
10+
import CookiePreferencesCheck from './CookiePreferences/CookiePreferencesCheck'
11+
import CookiePreferencesModal from './CookiePreferences/CookiePreferencesModal'
1012
import Image from './Image/Image'
1113
import Link from './Link/Link'
1214
import Loading from './Loading/Loading'
@@ -23,6 +25,8 @@ export {
2325
BlankRequestForm,
2426
Button,
2527
CollapsibleSection,
28+
CookiePreferencesCheck,
29+
CookiePreferencesModal,
2630
Image,
2731
Link,
2832
Loading,

0 commit comments

Comments
 (0)