diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx index 770e3c9b5a8f6c4442801b6aec5e80517d358076..77489287a127c478325f98fb603513193b337ce9 100644 --- a/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx +++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.component.tsx @@ -16,6 +16,7 @@ import { injectMatomoTracking } from '@/utils/injectMatomoTracking'; import { USER_ACCEPTED_COOKIES_COOKIE_NAME, USER_ACCEPTED_COOKIES_COOKIE_VALUE, + USER_ACCEPTED_COOKIES_DATE, USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME, } from './CookieBanner.constants'; @@ -33,11 +34,28 @@ export const CookieBanner = (): React.ReactNode => { const [options, setOptions] = useState([selectMatomoOption]); useEffect(() => { - const isAccepted = + const userAcceptedCookieDate = localStorage.getItem(USER_ACCEPTED_COOKIES_DATE); + let isAccepted = localStorage.getItem(USER_ACCEPTED_COOKIES_COOKIE_NAME) === USER_ACCEPTED_COOKIES_COOKIE_VALUE.ACCEPTED && localStorage.getItem(USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME) !== null && localStorage.getItem(USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME) !== undefined; + if (!userAcceptedCookieDate) { + isAccepted = false; + } else { + const whenAccepted = Date.parse(userAcceptedCookieDate); + const now = Date.now(); + + // eslint-disable-next-line no-magic-numbers + const oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds + + const diffDays = Math.round(Math.abs((now - whenAccepted) / oneDay)); + // eslint-disable-next-line no-magic-numbers + if (diffDays > 365) { + isAccepted = false; + } + } + if (isAccepted) { dispatch(acceptCookies()); } else { @@ -51,6 +69,7 @@ export const CookieBanner = (): React.ReactNode => { USER_ACCEPTED_COOKIES_COOKIE_NAME, USER_ACCEPTED_COOKIES_COOKIE_VALUE.ACCEPTED, ); + localStorage.setItem(USER_ACCEPTED_COOKIES_DATE, new Date().toISOString().split('T')[ZERO]); if (options.length > ZERO) { localStorage.setItem( USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME, diff --git a/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts b/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts index dc1f3a5f24dd0cf88344453205ca9d59209062fd..a5b0e9a80f4ff550bc661ea205573f68d86ea133 100644 --- a/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts +++ b/src/components/FunctionalArea/CookieBanner/CookieBanner.constants.ts @@ -1,4 +1,5 @@ export const USER_ACCEPTED_COOKIES_COOKIE_NAME = 'cookiesAccepted'; +export const USER_ACCEPTED_COOKIES_DATE = 'cookiesAcceptedDate'; export const USER_ACCEPTED_MATOMO_COOKIES_COOKIE_NAME = 'matomoAccepted'; export const USER_ACCEPTED_COOKIES_COOKIE_VALUE = {