cookie-banner.tsx 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import OLButton from '@/shared/components/ol/ol-button'
  2. import { Trans, useTranslation } from 'react-i18next'
  3. import React, { useState } from 'react'
  4. import {
  5. CookieConsentValue,
  6. cookieBannerRequired,
  7. hasMadeCookieChoice,
  8. setConsent,
  9. } from '@/features/cookie-banner/utils'
  10. function CookieBanner() {
  11. const { t } = useTranslation()
  12. const [hidden, setHidden] = useState(
  13. () => !cookieBannerRequired() || hasMadeCookieChoice()
  14. )
  15. function makeCookieChoice(value: CookieConsentValue) {
  16. setConsent(value)
  17. setHidden(true)
  18. }
  19. if (hidden) {
  20. return null
  21. }
  22. return (
  23. <section
  24. className="cookie-banner hidden-print"
  25. aria-label={t('cookie_banner')}
  26. >
  27. <div className="cookie-banner-content">
  28. <Trans
  29. i18nKey="cookie_banner_info"
  30. // eslint-disable-next-line react/jsx-key, jsx-a11y/anchor-has-content
  31. components={[<a href="/legal#Cookies" />]}
  32. />
  33. </div>
  34. <div className="cookie-banner-actions">
  35. <OLButton
  36. variant="link"
  37. size="sm"
  38. onClick={() => makeCookieChoice('essential')}
  39. >
  40. {t('essential_cookies_only')}
  41. </OLButton>
  42. <OLButton
  43. variant="primary"
  44. size="sm"
  45. onClick={() => makeCookieChoice('all')}
  46. >
  47. {t('accept_all_cookies')}
  48. </OLButton>
  49. </div>
  50. </section>
  51. )
  52. }
  53. export default CookieBanner