Skip to content

Commit 2d4900b

Browse files
authored
Merge pull request #22 from aesirxio/opt-out-consent
Opt-Out Consent
2 parents b9c2a65 + 3dbe7e0 commit 2d4900b

14 files changed

Lines changed: 391 additions & 166 deletions

File tree

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aesirx-consent",
3-
"version": "1.0.8",
3+
"version": "1.0.9",
44
"license": "GPL-3.0-only",
55
"author": "AesirX",
66
"repository": "https://github.com/aesirxio/consent",

src/Components/ConsentCustom.tsx

Lines changed: 231 additions & 138 deletions
Large diffs are not rendered by default.

src/Components/CustomizeCategory.tsx

Lines changed: 89 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,16 @@ import minus from '../Assets/minus.png';
44
import { useTranslation } from 'react-i18next';
55
import { Accordion, Button, Form } from 'react-bootstrap';
66
import ConsentHeader from './ConsentHeader';
7+
import { postDisabledBlockDomains } from '../utils/consent';
78

8-
const CustomizeCategory = ({ languageSwitcher, setShowCustomize, disabledBlockDomains }: any) => {
9+
const CustomizeCategory = ({
10+
languageSwitcher,
11+
setShowCustomize,
12+
disabledBlockDomains,
13+
handleRevokeBtn,
14+
showRevoke,
15+
endpoint,
16+
}: any) => {
917
const { t } = useTranslation();
1018

1119
const blockJSDomains = window.blockJSDomains ?? [];
@@ -21,7 +29,14 @@ const CustomizeCategory = ({ languageSwitcher, setShowCustomize, disabledBlockDo
2129
return acc;
2230
}, {});
2331

32+
const isConsented =
33+
showRevoke ||
34+
(sessionStorage.getItem('aesirx-analytics-revoke') &&
35+
sessionStorage.getItem('aesirx-analytics-revoke') !== '0');
36+
2437
const [disabledItems, setDisabledItems] = useState([]);
38+
const [isDoNotSell, setIsDoNotSell] = useState(false);
39+
const [isLoading, setIsLoading] = useState(false);
2540

2641
const handleToggle = (category: string) => {
2742
setDisabledItems((prev) => {
@@ -107,9 +122,9 @@ const CustomizeCategory = ({ languageSwitcher, setShowCustomize, disabledBlockDo
107122
(window as any)?.aesirx_analytics_translate?.txt_custom_tracking_desc ??
108123
t('txt_custom_tracking_desc');
109124
}
110-
const allCategoryItems = blockJSDomains.filter((item) => item.category === key);
111-
const isCategoryChecked = !allCategoryItems.every((item) =>
112-
disabledItems.some((disabled) => disabled.domain === item.domain)
125+
const allCategoryItems = blockJSDomains?.filter((item) => item.category === key);
126+
const isCategoryChecked = !allCategoryItems?.every((item) =>
127+
disabledItems?.some((disabled) => disabled.domain === item.domain)
113128
);
114129
return (
115130
<Accordion.Item eventKey={index?.toString()} key={index}>
@@ -183,6 +198,42 @@ const CustomizeCategory = ({ languageSwitcher, setShowCustomize, disabledBlockDo
183198
</Accordion.Item>
184199
);
185200
})}
201+
{window['aesirxOptOutMode'] === 'true' &&
202+
window['aesirxOptOutDoNotSell'] === 'true' &&
203+
isConsented ? (
204+
<Accordion.Item className="mt-3" eventKey={'donotsell'}>
205+
<div className="d-flex align-items-center justify-content-between">
206+
<Accordion.Header>
207+
<div className="d-flex align-items-center">
208+
<div className="accordion-title">
209+
<div className="fw-medium text-black">
210+
{(window as any)?.aesirx_analytics_translate?.txt_do_not_sell ??
211+
t('txt_do_not_sell')}
212+
</div>
213+
<p className="mb-0 fs-14 d-none d-lg-block">
214+
{(window as any)?.aesirx_analytics_translate?.txt_disables_third_party ??
215+
t('txt_disables_third_party')}
216+
</p>
217+
</div>
218+
</div>
219+
</Accordion.Header>
220+
<Form.Check
221+
className="ms-auto me-0 pe-3"
222+
type="switch"
223+
value={'donotsell'}
224+
onChange={(e) => {
225+
setIsDoNotSell(e?.target?.checked);
226+
}}
227+
/>
228+
</div>
229+
<p className="mb-0 fs-14 subtitle-mobile d-lg-none">
230+
{(window as any)?.aesirx_analytics_translate?.txt_disables_third_party ??
231+
t('txt_disables_third_party')}
232+
</p>
233+
</Accordion.Item>
234+
) : (
235+
<></>
236+
)}
186237
</Accordion>
187238
</div>
188239
<div className="rounded-bottom position-relative overflow-hidden text-white bg-white">
@@ -200,12 +251,44 @@ const CustomizeCategory = ({ languageSwitcher, setShowCustomize, disabledBlockDo
200251
</Button>
201252
<Button
202253
variant="outline-success"
203-
onClick={() => {
204-
setShowCustomize(false);
254+
onClick={async () => {
205255
window['disabledBlockJSDomains'] = disabledItems;
256+
if (window['aesirxOptOutMode'] === 'true' && isConsented) {
257+
setIsLoading(true);
258+
const levelRevoke =
259+
sessionStorage.getItem('aesirx-analytics-revoke') &&
260+
parseInt(sessionStorage.getItem('aesirx-analytics-revoke'));
261+
262+
if (isDoNotSell) {
263+
sessionStorage.setItem('aesirx-analytics-rejected', 'true');
264+
await handleRevokeBtn();
265+
} else {
266+
await postDisabledBlockDomains(endpoint);
267+
}
268+
if (levelRevoke <= 1 && window['aesirx1stparty']) {
269+
setTimeout(() => {
270+
window.location.reload();
271+
}, 1000);
272+
} else {
273+
setShowCustomize(false);
274+
setIsLoading(false);
275+
}
276+
} else {
277+
setShowCustomize(false);
278+
}
206279
}}
207280
className="d-flex align-items-center justify-content-center fs-14 px-5 me-3 mb-2 mb-lg-0 rounded-pill py-2 py-lg-3"
281+
disabled={isLoading}
208282
>
283+
{isLoading ? (
284+
<span
285+
className="spinner-border spinner-border-sm me-1"
286+
role="status"
287+
aria-hidden="true"
288+
></span>
289+
) : (
290+
<></>
291+
)}
209292
{(window as any)?.aesirx_analytics_translate?.txt_save ?? t('txt_save')}
210293
</Button>
211294
</div>

src/styles/style.scss

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,16 @@ body wcm-modal {
3131
--wcm-z-index: 100060;
3232
}
3333
.aesirxconsent {
34+
color: #5f5e70;
35+
font-size: 16px;
36+
--w3m-z-index: 100060;
37+
z-index: 100050;
38+
position: relative;
39+
--#{$prefix}modal-margin: 1.75rem;
40+
--#{$prefix}btn-padding-y: 9px;
41+
--#{$prefix}btn-padding-x: 20px;
42+
line-height: 24px;
43+
box-sizing: border-box;
3444
// 6. Optionally include any other parts as needed
3545
@import 'bootstrap/scss/utilities';
3646
@import 'bootstrap/scss/modal';
@@ -47,16 +57,6 @@ body wcm-modal {
4757
@import 'bootstrap/scss/forms';
4858
// 7. Optionally include utilities API last to generate classes based on the Sass map in `_utilities.scss`
4959
@import 'bootstrap/scss/utilities/api';
50-
color: #5f5e70;
51-
font-size: 16px;
52-
--w3m-z-index: 100060;
53-
z-index: 100050;
54-
position: relative;
55-
--#{$prefix}modal-margin: 1.75rem;
56-
--#{$prefix}btn-padding-y: 9px;
57-
--#{$prefix}btn-padding-x: 20px;
58-
line-height: 24px;
59-
box-sizing: border-box;
6060
* {
6161
box-sizing: border-box;
6262
}

src/translations/dk/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Annoncesporing",
143143
"txt_advertising_tracking_desc": "Målrettet annoncering og remarketing (f.eks. Facebook Pixel, Google Ads).",
144144
"txt_custom_tracking": "Tilpasset sporing",
145-
"txt_custom_tracking_desc": "Enhver yderligere tredjepartsintegration (f.eks. kundesupportværktøjer, CDNS)."
145+
"txt_custom_tracking_desc": "Enhver yderligere tredjepartsintegration (f.eks. kundesupportværktøjer, CDNS).",
146+
"txt_opt_out_tracking": "Fravælg sporing",
147+
"txt_tracking_default": "Denne hjemmeside bruger sporing som standard. Du kan til enhver tid framelde dig.",
148+
"txt_do_not_sell": "Sælg eller del ikke mine personlige oplysninger (CCPA)",
149+
"txt_disables_third_party": "Deaktiverer tredjeparts datadeling for brugere i Californien."
146150
}

src/translations/en/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Advertising Tracking",
143143
"txt_advertising_tracking_desc": "Targeted advertising & remarketing (e.g, Facebook Pixel, Google Ads).",
144144
"txt_custom_tracking": "Custom Tracking",
145-
"txt_custom_tracking_desc": "Any additional third-party integrations (e.g, customer support tools, CDNS)."
145+
"txt_custom_tracking_desc": "Any additional third-party integrations (e.g, customer support tools, CDNS).",
146+
"txt_opt_out_tracking": "Opt-Out of tracking",
147+
"txt_tracking_default": "This website uses tracking by default. You may opt out at any time.",
148+
"txt_do_not_sell": "Do Not Sell or Share My Personal Information (CCPA)",
149+
"txt_disables_third_party": "Disables third-party data sharing for California users."
146150
}

src/translations/es/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Seguimiento publicitario",
143143
"txt_advertising_tracking_desc": "Publicidad dirigida y remarketing (p. ej., píxel de Facebook, Google Ads).",
144144
"txt_custom_tracking": "Seguimiento personalizado",
145-
"txt_custom_tracking_desc": "Cualquier integración adicional de terceros (p. ej., herramientas de atención al cliente, CDNS)."
145+
"txt_custom_tracking_desc": "Cualquier integración adicional de terceros (p. ej., herramientas de atención al cliente, CDNS).",
146+
"txt_opt_out_tracking": "Desactivar el seguimiento",
147+
"txt_tracking_default": "Este sitio web utiliza el seguimiento por defecto. Puede desactivarlo en cualquier momento.",
148+
"txt_do_not_sell": "No vender ni compartir mi información personal (CCPA)",
149+
"txt_disables_third_party": "Desactiva el intercambio de datos con terceros para los usuarios de California."
146150
}

src/translations/fr/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Suivi publicitaire",
143143
"txt_advertising_tracking_desc": "Publicité ciblée et remarketing (par exemple, Pixel Facebook, Google Ads).",
144144
"txt_custom_tracking": "Suivi personnalisé",
145-
"txt_custom_tracking_desc": "Toute intégration tierce supplémentaire (par exemple, outils de support client, CDNS)."
145+
"txt_custom_tracking_desc": "Toute intégration tierce supplémentaire (par exemple, outils de support client, CDNS).",
146+
"txt_opt_out_tracking": "Désactiver le suivi",
147+
"txt_tracking_default": "Ce site web utilise le suivi par défaut. Vous pouvez vous désinscrire à tout moment.",
148+
"txt_do_not_sell": "Ne pas vendre ni partager mes informations personnelles (CCPA)",
149+
"txt_disables_third_party": "Désactive le partage de données avec des tiers pour les utilisateurs californiens."
146150
}

src/translations/hr/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Praćenje oglašavanja",
143143
"txt_advertising_tracking_desc": "Ciljano oglašavanje i remarketing (npr. Facebook Pixel, Google Ads).",
144144
"txt_custom_tracking": "Prilagođeno praćenje",
145-
"txt_custom_tracking_desc": "Sve dodatne integracije trećih strana (npr. alati za korisničku podršku, CDNS)."
145+
"txt_custom_tracking_desc": "Sve dodatne integracije trećih strana (npr. alati za korisničku podršku, CDNS).",
146+
"txt_opt_out_tracking": "Isključivanje praćenja",
147+
"txt_tracking_default": "Ova web stranica koristi praćenje prema zadanim postavkama. Možete se isključiti u bilo kojem trenutku.",
148+
"txt_do_not_sell": "Nemoj prodavati niti dijeliti moje osobne podatke (CCPA)",
149+
"txt_disables_third_party": "Onemogućuje dijeljenje podataka trećih strana za korisnike u Kaliforniji."
146150
}

src/translations/nl/common.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,9 @@
142142
"txt_advertising_tracking": "Advertentietracking",
143143
"txt_advertising_tracking_desc": "Gerichte advertenties en remarketing (bijv. Facebook Pixel, Google Ads).",
144144
"txt_custom_tracking": "Aangepaste tracking",
145-
"txt_custom_tracking_desc": "Alle aanvullende integraties van derden (bijv. tools voor klantenondersteuning, CDNS)."
145+
"txt_custom_tracking_desc": "Alle aanvullende integraties van derden (bijv. tools voor klantenondersteuning, CDNS).",
146+
"txt_opt_out_tracking": "Tracking uitschakelen",
147+
"txt_tracking_default": "Deze website maakt standaard gebruik van tracking. U kunt zich op elk moment afmelden.",
148+
"txt_do_not_sell": "Mijn persoonsgegevens niet verkopen of delen (CCPA)",
149+
"txt_disables_third_party": "Hiermee schakelt u het delen van gegevens door derden uit voor gebruikers in Californië."
146150
}

0 commit comments

Comments
 (0)