xylabs/sdk-react

View on GitHub
packages/cookie-consent/src/contexts/Loader.tsx

Summary

Maintainability
A
0 mins
Test Coverage
import { WithChildren } from '@xylabs/react-shared'
import { useState } from 'react'

import { CookieConsentContext } from './Context'

const CookiesAcceptedLocalStorageName = 'CookiesAccepted'

const CookieConsentLoader: React.FC<WithChildren> = ({ children }) => {
  const getAcceptedFromLocalStorage = () => {
    return localStorage.getItem(CookiesAcceptedLocalStorageName) === 'true'
  }
  const setAcceptedToLocalStorage = (accepted: boolean) => {
    localStorage.setItem(CookiesAcceptedLocalStorageName, accepted ? 'true' : 'false')
  }
  const [accepted, setAccepted] = useState(getAcceptedFromLocalStorage())
  const setAcceptedHandler = (accepted: boolean) => {
    setAcceptedToLocalStorage(accepted)
    setAccepted(accepted)
  }

  const clearAccepted = () => {
    localStorage.removeItem(CookiesAcceptedLocalStorageName)
    setAccepted(getAcceptedFromLocalStorage())
  }

  return (
    <CookieConsentContext.Provider value={{ accepted, clearAccepted, setAccepted: setAcceptedHandler, storageName: CookiesAcceptedLocalStorageName }}>
      {children}
    </CookieConsentContext.Provider>
  )
}

export { CookieConsentLoader }