Files
HiveGrid-Wireframes/03 Quellen und Referenzen/hivegrid-cloud/apps/web/app/modules/shared/scripts/ScriptSentryReplay.tsx
T

49 lines
1.5 KiB
TypeScript

import { useEffect } from "react";
import { CookieCategory } from "~/application/cookies/CookieCategory";
import { useRootData } from "~/utils/data/useRootData";
import CookieHelper from "~/utils/helpers/CookieHelper";
type ReplayModule = typeof import("~/sentry-replay.client");
let loadedReplayModule: Promise<ReplayModule> | undefined;
export default function ScriptSentryReplay() {
const rootData = useRootData();
const hasAnalyticsConsent = CookieHelper.hasConsent(rootData.userSession ?? null, CookieCategory.ANALYTICS);
useEffect(() => {
let cancelled = false;
if (!hasAnalyticsConsent) {
if (loadedReplayModule) {
void loadedReplayModule.then(({ disableSentryReplay }) => disableSentryReplay());
}
return () => {
cancelled = true;
};
}
void import("~/sentry.client").then(({ readClientSentryConfig }) => {
const config = readClientSentryConfig();
if (cancelled || !config.dsn || (config.replaysSessionSampleRate <= 0 && config.replaysOnErrorSampleRate <= 0)) {
return;
}
loadedReplayModule ??= import("~/sentry-replay.client");
void loadedReplayModule.then(({ enableSentryReplay }) => {
if (!cancelled) {
enableSentryReplay(config);
}
});
});
return () => {
cancelled = true;
if (loadedReplayModule) {
void loadedReplayModule.then(({ disableSentryReplay }) => disableSentryReplay());
}
};
}, [hasAnalyticsConsent]);
return null;
}