From 1e14075e033057bf195a081f21806467fd74ca93 Mon Sep 17 00:00:00 2001 From: Orka Arnest CRUZE Date: Mon, 16 Sep 2024 19:35:24 +0200 Subject: [PATCH 1/2] feat: customize localStorage key for analytics consents #302 --- .../createConsentManagement.ts | 17 +++++++++++++---- stories/ConsentManagement.stories.tsx | 18 +++++++++++++----- .../integration/vite/src/consentManagement.tsx | 6 ++++-- 3 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/consentManagement/createConsentManagement.ts b/src/consentManagement/createConsentManagement.ts index b46f80487..2b6990e4f 100644 --- a/src/consentManagement/createConsentManagement.ts +++ b/src/consentManagement/createConsentManagement.ts @@ -9,7 +9,7 @@ import { useRerenderOnChange } from "../tools/StatefulObservable/hooks"; import { createConsentBannerAndConsentManagement } from "./ConsentBannerAndConsentManagement"; import { isBrowser } from "../tools/isBrowser"; -export const localStorageKeyPrefix = "@codegouvfr/react-dsfr finalityConsent"; +export const defaultLocalStorageKeyPrefix = "@codegouvfr/react-dsfr finalityConsent"; export function createConsentManagement< FinalityDescription extends Record< @@ -21,10 +21,16 @@ export function createConsentManagement< consentCallback?: ConsentCallback>; /** Optional: If you have a dedicated page that provides comprehensive information about your website's GDPR policies. */ personalDataPolicyLinkProps?: RegisteredLinkProps; + localStorageKeyPrefix?: string; }) { type Finality = ExtractFinalityFromFinalityDescription; - const { finalityDescription, personalDataPolicyLinkProps, consentCallback } = params; + const { + finalityDescription, + personalDataPolicyLinkProps, + consentCallback, + localStorageKeyPrefix + } = params; const finalities = getFinalitiesFromFinalityDescription({ "finalityDescription": @@ -33,7 +39,9 @@ export function createConsentManagement< : finalityDescription }); - const localStorageKey = `${localStorageKeyPrefix} ${finalities.join("-")}`; + const localStorageKey = `${ + localStorageKeyPrefix ?? defaultLocalStorageKeyPrefix + } ${finalities.join("-")}`; const $finalityConsent = createStatefulObservable | undefined>(() => { if (!isBrowser) { @@ -98,7 +106,8 @@ export function createConsentManagement< useConsent, ConsentBannerAndConsentManagement, FooterConsentManagementItem, - FooterPersonalDataPolicyItem + FooterPersonalDataPolicyItem, + consentLocalStorageKey: localStorageKey }; } diff --git a/stories/ConsentManagement.stories.tsx b/stories/ConsentManagement.stories.tsx index a122e7cd4..5a5cba16d 100644 --- a/stories/ConsentManagement.stories.tsx +++ b/stories/ConsentManagement.stories.tsx @@ -2,7 +2,7 @@ import React from "react"; import { sectionName } from "./sectionName"; import { getStoryFactory } from "./getStory"; import { createConsentManagement } from "../dist/consentManagement"; -import { localStorageKeyPrefix } from "../dist/consentManagement/createConsentManagement"; +import { defaultLocalStorageKeyPrefix } from "../dist/consentManagement/createConsentManagement"; import { Placeholder } from "../dist/consentManagement/Placeholder"; import { Footer } from "../dist/Footer"; import { Button } from "../dist/Button"; @@ -34,7 +34,8 @@ export const { ConsentBannerAndConsentManagement, FooterConsentManagementItem, FooterPersonalDataPolicyItem, - useConsent + useConsent, + consentLocalStorageKey } = createConsentManagement({ /* Can be an object or a function that take the current language as argument. @@ -121,7 +122,13 @@ export const { } */ - } + }, + + /* + This optional parameter let's you personalise the key that is used to store user's consents in the localStorage. + The default value is "${defaultLocalStorageKeyPrefix}" + */ + "localStorageKeyPrefix": "company-name/app-name" }); \`\`\` @@ -213,7 +220,8 @@ const { ConsentBannerAndConsentManagement, FooterConsentManagementItem, FooterPersonalDataPolicyItem, - useConsent + useConsent, + consentLocalStorageKey } = createConsentManagement({ "finalityDescription": { "advertising": { @@ -284,7 +292,7 @@ function Story() {