Skip to content

Commit 8474302

Browse files
committed
Moving on
1 parent 87b18b4 commit 8474302

File tree

5 files changed

+34
-42
lines changed

5 files changed

+34
-42
lines changed

src/gdpr/ConsentBannerAndConsentManagement.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -269,7 +269,7 @@ function createConsentManagement<
269269

270270
const [isProcessingChanges, setIsProcessingChanges] = useState(false);
271271

272-
const createOnAcceptOrRefuseAll =
272+
const createButtonCallback =
273273
(type: "grantAll" | "denyAll" | "apply local changes") => async () => {
274274
setIsProcessingChanges(true);
275275

@@ -310,7 +310,7 @@ function createConsentManagement<
310310
<button
311311
title={t("accept all - title")}
312312
className={fr.cx("fr-btn")}
313-
onClick={createOnAcceptOrRefuseAll("grantAll")}
313+
onClick={createButtonCallback("grantAll")}
314314
disabled={isProcessingChanges}
315315
>
316316
{t("accept all")}
@@ -319,7 +319,7 @@ function createConsentManagement<
319319
title={t("refuse all - title")}
320320
className={fr.cx("fr-btn", "fr-btn--secondary")}
321321
disabled={isProcessingChanges}
322-
onClick={createOnAcceptOrRefuseAll("denyAll")}
322+
onClick={createButtonCallback("denyAll")}
323323
>
324324
{t("refuse all")}
325325
</button>
@@ -407,7 +407,11 @@ function createConsentManagement<
407407
)}
408408
>
409409
<li>
410-
<button className={fr.cx("fr-btn")} disabled={isProcessingChanges}>
410+
<button
411+
className={fr.cx("fr-btn")}
412+
disabled={isProcessingChanges}
413+
onClick={createButtonCallback("apply local changes")}
414+
>
411415
Confirmer mes choix
412416
</button>
413417
</li>

src/gdpr/createGdprApi.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,13 +40,6 @@ export function createGdprApi<
4040
return JSON.parse(serializedFinalityConsent);
4141
});
4242

43-
$finalityConsent.subscribe(finalityConsent => {
44-
if (finalityConsent === undefined) {
45-
return;
46-
}
47-
localStorage.setItem(localStorageKey, JSON.stringify(finalityConsent));
48-
});
49-
5043
const finalities = getFinalitiesFromFinalityDescription({
5144
"finalityDescription":
5245
typeof finalityDescription === "function"
@@ -58,7 +51,11 @@ export function createGdprApi<
5851
callback,
5952
finalities,
6053
"getFinalityConsent": () => $finalityConsent.current,
61-
"setFinalityConsent": ({ finalityConsent }) => ($finalityConsent.current = finalityConsent)
54+
"setFinalityConsent": ({ finalityConsent, prAllCallbacksRun }) => {
55+
localStorage.setItem(localStorageKey, JSON.stringify(finalityConsent));
56+
57+
prAllCallbacksRun.then(() => ($finalityConsent.current = finalityConsent));
58+
}
6259
});
6360

6461
function useFinalityConsent() {

src/gdpr/processConsentChanges.ts

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ export function finalityConsentToChanges<Finality extends string>(params: {
5757
export function createProcessConsentChanges<Finality extends string>(params: {
5858
finalities: Finality[];
5959
getFinalityConsent: () => FinalityConsent<Finality> | undefined;
60-
setFinalityConsent: (params: { finalityConsent: FinalityConsent<Finality> }) => void;
60+
setFinalityConsent: (params: {
61+
finalityConsent: FinalityConsent<Finality>;
62+
prAllCallbacksRun: Promise<void>;
63+
}) => void;
6164
callback: GdprConsentCallback<Finality> | undefined;
6265
}) {
6366
const { finalities, getFinalityConsent, setFinalityConsent, callback } = params;
@@ -149,16 +152,17 @@ export function createProcessConsentChanges<Finality extends string>(params: {
149152
});
150153
}
151154

152-
await Promise.all(
153-
callbacks.map(callback =>
154-
callback({
155-
finalityConsent,
156-
finalityConsent_prev
157-
})
158-
)
159-
);
160-
161-
setFinalityConsent({ finalityConsent });
155+
setFinalityConsent({
156+
finalityConsent,
157+
"prAllCallbacksRun": Promise.all(
158+
callbacks.map(callback =>
159+
callback({
160+
finalityConsent,
161+
finalityConsent_prev
162+
})
163+
)
164+
).then(() => undefined)
165+
});
162166
};
163167

164168
return { processConsentChanges, useRegisterCallback };

test/integration/next-appdir/app/gdpr.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,12 @@
22

33
import { createGdprApi } from "@codegouvfr/react-dsfr/gdpr";
44

5-
export const { ConsentBannerAndConsentManagement, useGdpr, FooterConsentManagementItem, FooterPersonalDataPolicyItem } = createGdprApi({
5+
export const {
6+
ConsentBannerAndConsentManagement,
7+
useGdpr,
8+
FooterConsentManagementItem,
9+
FooterPersonalDataPolicyItem
10+
} = createGdprApi({
611
"finalityDescription": ({ lang }) => ({
712
"advertising": {
813
"title": "Publicité",

test/integration/next-appdir/ui/ClientComponent.tsx

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,30 +5,12 @@ import Stack from '@mui/material/Stack';
55
import Button from '@mui/material/Button';
66
import { useIsDark } from "@codegouvfr/react-dsfr/useIsDark";
77
import { createModal } from "@codegouvfr/react-dsfr/Modal";
8-
import { useGdpr } from "../app/gdpr";
98
import { useIsModalOpen } from "@codegouvfr/react-dsfr/Modal/useIsModalOpen";
109

1110
export function ClientComponent() {
1211

1312
const { isDark } = useIsDark();
1413

15-
const { finalityConsent } = useGdpr(
16-
async ({ finalityConsent, finalityConsent_prev }) => {
17-
18-
19-
console.log("Callback from hook", { finalityConsent, finalityConsent_prev });
20-
21-
await new Promise(resolve => setTimeout(resolve, 500));
22-
23-
console.log("done waiting");
24-
25-
26-
27-
}
28-
);
29-
30-
console.log("=========>", { finalityConsent });
31-
3214
const isModalOpen = useIsModalOpen(modal);
3315

3416
//console.log(`Modal ${modal.id} is currently: ${isModalOpen ? "open" : "closed"}`);

0 commit comments

Comments
 (0)