@@ -3,6 +3,8 @@ import PropTypes from 'prop-types';
3
3
import { Adsense } from '@ctrl/react-adsense' ;
4
4
import { ConsentProvider , ConsentBanner } from 'react-hook-consent' ;
5
5
import 'react-hook-consent/dist/styles/style.css' ;
6
+ const dayjs = require ( 'dayjs' )
7
+ const timezone = require ( 'dayjs/plugin/timezone' )
6
8
7
9
import { connect } from 'react-redux' ;
8
10
@@ -13,10 +15,47 @@ import * as actions from '../actions';
13
15
import CodeContainer from './CodeContainer' ;
14
16
import OptionsContainer from './OptionsContainer' ;
15
17
18
+ const EU_TIMEZONES = [
19
+ 'Europe/Vienna' ,
20
+ 'Europe/Brussels' ,
21
+ 'Europe/Sofia' ,
22
+ 'Europe/Zagreb' ,
23
+ 'Asia/Famagusta' ,
24
+ 'Asia/Nicosia' ,
25
+ 'Europe/Prague' ,
26
+ 'Europe/Copenhagen' ,
27
+ 'Europe/Tallinn' ,
28
+ 'Europe/Helsinki' ,
29
+ 'Europe/Paris' ,
30
+ 'Europe/Berlin' ,
31
+ 'Europe/Busingen' ,
32
+ 'Europe/Athens' ,
33
+ 'Europe/Budapest' ,
34
+ 'Europe/Dublin' ,
35
+ 'Europe/Rome' ,
36
+ 'Europe/Riga' ,
37
+ 'Europe/Vilnius' ,
38
+ 'Europe/Luxembourg' ,
39
+ 'Europe/Malta' ,
40
+ 'Europe/Amsterdam' ,
41
+ 'Europe/Warsaw' ,
42
+ 'Atlantic/Azores' ,
43
+ 'Atlantic/Madeira' ,
44
+ 'Europe/Lisbon' ,
45
+ 'Europe/Bucharest' ,
46
+ 'Europe/Bratislava' ,
47
+ 'Europe/Ljubljana' ,
48
+ 'Africa/Ceuta' ,
49
+ 'Atlantic/Canary' ,
50
+ 'Europe/Madrid' ,
51
+ 'Europe/Stockholm'
52
+ ] ;
53
+
16
54
class App extends Component {
17
55
18
56
state = {
19
- cookiesEnabled : false
57
+ cookiesEnabled : false ,
58
+ consentRequired : this . isConsentRequired ( )
20
59
}
21
60
22
61
static propTypes = {
@@ -37,6 +76,12 @@ class App extends Component {
37
76
window . enableCookies = this . enableCookies . bind ( this ) ;
38
77
}
39
78
79
+ componentDidMount ( ) {
80
+ if ( ! this . state . consentRequired ) {
81
+ this . enableCookies ( )
82
+ }
83
+ }
84
+
40
85
obfuscate ( ) {
41
86
const { dispatch} = this . props ;
42
87
const { code, options} = this . props ;
@@ -64,6 +109,12 @@ class App extends Component {
64
109
downloadFile ( data ) ;
65
110
}
66
111
112
+ isConsentRequired ( ) {
113
+ dayjs . extend ( timezone ) ;
114
+
115
+ return EU_TIMEZONES . includes ( dayjs . tz . guess ( ) ) ;
116
+ }
117
+
67
118
enableCookies ( ) {
68
119
( adsbygoogle = window . adsbygoogle || [ ] ) . pauseAdRequests = 0 ;
69
120
}
@@ -109,30 +160,32 @@ class App extends Component {
109
160
110
161
< OptionsContainer />
111
162
112
- < ConsentProvider
113
- options = { {
114
- services : [
115
- {
116
- id : 'analytics_and_ads' ,
117
- name : 'Analytics & Ads' ,
118
- scripts : [
119
- { id : 'enable-cookies' , code : 'window.enableCookies()' } ,
120
- ] ,
121
- cookies : [ ] ,
122
- mandatory : false ,
123
- } ,
124
- ] ,
125
- theme : 'light' ,
126
- } }
127
- >
128
- < ConsentBanner
129
- settings = { { hidden : false , label : 'More' , modal : { title : 'Cookie settings' } } }
130
- decline = { { hidden : true } }
131
- approve = { { label : 'Accept' } }
132
- >
133
- obfuscator.io uses cookies according to the < a href = "/docs/cookie-policy.docx" > cookie policy</ a >
134
- </ ConsentBanner >
135
- </ ConsentProvider >
163
+ { this . state . consentRequired && (
164
+ < ConsentProvider
165
+ options = { {
166
+ services : [
167
+ {
168
+ id : 'analytics_and_ads' ,
169
+ name : 'Analytics & Ads' ,
170
+ scripts : [
171
+ { id : 'enable-cookies' , code : 'window.enableCookies()' } ,
172
+ ] ,
173
+ cookies : [ ] ,
174
+ mandatory : false ,
175
+ } ,
176
+ ] ,
177
+ theme : 'light' ,
178
+ } }
179
+ >
180
+ < ConsentBanner
181
+ settings = { { hidden : false , label : 'More' , modal : { title : 'Cookie settings' } } }
182
+ decline = { { hidden : true } }
183
+ approve = { { label : 'Accept' } }
184
+ >
185
+ obfuscator.io uses cookies according to the < a href = "/docs/cookie-policy.docx" > cookie policy</ a >
186
+ </ ConsentBanner >
187
+ </ ConsentProvider >
188
+ ) }
136
189
</ React . Fragment >
137
190
) ;
138
191
}
0 commit comments