New source found from dndbeyond.com
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
import { useCallback } from "react";
|
||||
|
||||
import { KETCH_RETRY_CONFIG } from "~/constants";
|
||||
import { KetchConsentResponse } from "~/types";
|
||||
|
||||
export const useConsent = () => {
|
||||
const setupAnalyticsConsentListener = useCallback(
|
||||
(onConsentChange: (hasConsent: boolean) => void) => {
|
||||
let retries = 0;
|
||||
let timeoutId: ReturnType<typeof setTimeout> | null = null;
|
||||
|
||||
if (process.env.NODE_ENV === "development") {
|
||||
onConsentChange(true);
|
||||
return () => {
|
||||
// noop cleanup for dev
|
||||
};
|
||||
}
|
||||
|
||||
const trySetup = () => {
|
||||
if ("window" in globalThis && window.ketch) {
|
||||
try {
|
||||
window.ketch(
|
||||
"on",
|
||||
"consent",
|
||||
(consentData: KetchConsentResponse) => {
|
||||
onConsentChange(Boolean(consentData.purposes?.analytics));
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
console.error("Failed to setup Ketch consent listener:", error);
|
||||
onConsentChange(false);
|
||||
}
|
||||
} else if (retries < KETCH_RETRY_CONFIG.maxRetries) {
|
||||
retries++;
|
||||
timeoutId = setTimeout(trySetup, KETCH_RETRY_CONFIG.retryInterval);
|
||||
} else {
|
||||
console.warn(
|
||||
`Failed to initialize consent management after ${KETCH_RETRY_CONFIG.maxRetries} retries`
|
||||
);
|
||||
onConsentChange(false);
|
||||
}
|
||||
};
|
||||
|
||||
trySetup();
|
||||
|
||||
// Return cleanup function to cancel pending retries
|
||||
return () => {
|
||||
if (timeoutId !== null) {
|
||||
clearTimeout(timeoutId);
|
||||
}
|
||||
};
|
||||
},
|
||||
[]
|
||||
);
|
||||
|
||||
return {
|
||||
setupAnalyticsConsentListener,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user