@asafarim/react-privacy-consent
Version:
A comprehensive React TypeScript package for GDPR/CCPA privacy consent management with customizable UI components
1 lines • 67 kB
Source Map (JSON)
{"version":3,"sources":["../src/hooks/useConsentStorage.ts","../src/utils/consentUtils.ts","../src/utils/themeUtils.ts","../src/components/ConsentProvider.tsx","../src/hooks/useConsent.ts","../src/components/ConsentBanner.tsx","../src/components/ConsentToggle.tsx","../src/components/ConsentCategory.tsx","../src/components/ConsentModal.tsx","../src/index.ts"],"names":["storageCache","useConsentStorage","storageKey","isStorageAvailable","currentStorageKey","useRef","useEffect","saveConsent","useCallback","record","recordToSave","serializedRecord","error","loadConsent","validStatuses","validDecisions","isValid","parsedRecord","clearConsent","generateSessionId","createConsentRecord","sessionId","decisions","version","userId","isValidConsentRecord","currentVersion","getConsentValue","categoryId","d","mergeConsentDecisions","existing","updates","merged","update","existingIndex","hasExpiredConsent","expirationDays","expirationDate","sanitizeConsentRecord","applyConsentTheme","theme","root","removeConsentTheme","property","getDefaultTheme","getDarkTheme","ConsentContext","createContext","ConsentProvider","children","config","isVisible","setIsVisible","useState","isPreferencesVisible","setIsPreferencesVisible","consentRecord","setConsentRecord","initialized","c","savedConsent","category","mergedDecisions","mergedRecord","initialDecisions","defaultRecord","showDelay","cat","showBanner","hideBanner","showPreferences","hidePreferences","updateConsentRecord","updateConsent","accepted","newDecisions","decision","getAllConsent","getConsent","hasConsent","acceptAll","rejectAll","resetConsent","getConsentStatus","contextValue","jsx","useConsentContext","context","useContext","useConsent","ConsentBanner","className","style","onAcceptAll","onRejectAll","onManagePreferences","handleAcceptAll","handleRejectAll","handleManagePreferences","bannerClasses","jsxs","Fragment","ConsentToggle","checked","onChange","disabled","size","label","toggleClasses","event","ConsentCategory","value","categoryClasses","ConsentModal","isOpen","onClose","showBackdrop","handleSavePreferences","modalClasses","currentValue","defaultPrivacySettings","defaultBannerConfig","defaultConsentTexts","defaultPrivacyConsentConfig"],"mappings":"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","file":"index.mjs","sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\r\nimport { ConsentRecord, UseConsentStorageReturn } from '../types';\r\n\r\n// Create a global cache to ensure consistent storage key usage across components\r\nconst storageCache: Record<string, ConsentRecord | null> = {};\r\n\r\nexport function useConsentStorage(storageKey: string): UseConsentStorageReturn {\r\n const isStorageAvailable = typeof Storage !== 'undefined';\r\n const currentStorageKey = useRef(storageKey);\r\n \r\n // Update the ref if the storage key changes\r\n useEffect(() => {\r\n currentStorageKey.current = storageKey;\r\n }, [storageKey]);\r\n const saveConsent = useCallback((record: ConsentRecord) => {\r\n if (!isStorageAvailable) {\r\n console.warn('Storage is not available, cannot save consent');\r\n return;\r\n }\r\n \r\n try {\r\n // Make sure we have a valid record to save\r\n if (!record || !record.decisions || !Array.isArray(record.decisions) || record.decisions.length === 0) {\r\n console.error('Cannot save invalid consent record', record);\r\n return;\r\n }\r\n \r\n // Clone the record to avoid reference issues\r\n const recordToSave = {\r\n ...record,\r\n decisions: [...record.decisions]\r\n };\r\n \r\n // Update the in-memory cache\r\n storageCache[currentStorageKey.current] = recordToSave;\r\n \r\n const serializedRecord = JSON.stringify(recordToSave);\r\n console.log(`Saving consent to localStorage (key: ${currentStorageKey.current}):`, recordToSave);\r\n localStorage.setItem(currentStorageKey.current, serializedRecord);\r\n \r\n // Also save to sessionStorage as a backup\r\n sessionStorage.setItem(`${currentStorageKey.current}_backup`, serializedRecord);\r\n } catch (error) {\r\n console.error('Failed to save consent to localStorage:', error);\r\n }\r\n }, [isStorageAvailable]); const loadConsent = useCallback((): ConsentRecord | null => {\r\n if (!isStorageAvailable) {\r\n console.warn('Storage is not available, cannot load consent');\r\n return null;\r\n }\r\n \r\n try {\r\n // Check if we have the record in our cache first\r\n if (storageCache[currentStorageKey.current]) {\r\n console.log(`Using cached consent record for key: ${currentStorageKey.current}`);\r\n return storageCache[currentStorageKey.current];\r\n }\r\n \r\n console.log(`Loading consent from localStorage (key: ${currentStorageKey.current})`);\r\n let serializedRecord = localStorage.getItem(currentStorageKey.current);\r\n \r\n // If not in localStorage, try the sessionStorage backup\r\n if (!serializedRecord) {\r\n console.log('No saved consent found in localStorage, checking sessionStorage backup');\r\n serializedRecord = sessionStorage.getItem(`${currentStorageKey.current}_backup`);\r\n \r\n if (serializedRecord) {\r\n console.log('Found consent record in sessionStorage backup');\r\n }\r\n }\r\n \r\n if (!serializedRecord) {\r\n console.log('No saved consent found in any storage');\r\n return null;\r\n }\r\n \r\n console.log('Found serialized consent record:', serializedRecord.substring(0, 100) + '...');\r\n \r\n const record = JSON.parse(serializedRecord);\r\n console.log('Parsed consent record:', record);\r\n \r\n // Validate the loaded record has all required properties\r\n if (!record || !record.decisions || !Array.isArray(record.decisions) || \r\n !record.version || !record.sessionId || !record.lastUpdated) {\r\n console.warn('Consent record missing required fields, discarding', record);\r\n return null;\r\n }\r\n \r\n // Validate each decision has the required properties\r\n const validStatuses = ['accepted', 'rejected', 'pending'];\r\n const validDecisions = record.decisions.filter((d: any) => {\r\n const isValid = d && d.categoryId && typeof d.categoryId === 'string' && \r\n d.status && validStatuses.indexOf(d.status) !== -1 &&\r\n d.timestamp && d.version;\r\n \r\n if (!isValid) {\r\n console.warn('Invalid decision found:', d);\r\n }\r\n \r\n return isValid;\r\n });\r\n \r\n if (validDecisions.length !== record.decisions.length) {\r\n console.warn('Some consent decisions were invalid and filtered out', \r\n 'Valid:', validDecisions.length, \r\n 'Total:', record.decisions.length);\r\n }\r\n \r\n if (validDecisions.length === 0) {\r\n console.warn('No valid consent decisions found, discarding record');\r\n return null;\r\n }\r\n \r\n // Convert timestamp strings back to Date objects\r\n const parsedRecord = {\r\n ...record,\r\n lastUpdated: new Date(record.lastUpdated),\r\n decisions: validDecisions.map((d: any) => ({\r\n ...d,\r\n timestamp: new Date(d.timestamp)\r\n }))\r\n };\r\n console.log('Successfully loaded consent record with', \r\n parsedRecord.decisions.length, 'valid decisions:', \r\n parsedRecord.decisions.map((d: any) => `${d.categoryId}:${d.status}`).join(', '));\r\n \r\n // Update the cache\r\n storageCache[currentStorageKey.current] = parsedRecord;\r\n return parsedRecord;\r\n } catch (error) {\r\n console.warn('Failed to load consent from storage:', error);\r\n return null;\r\n }\r\n }, [isStorageAvailable]);\r\n const clearConsent = useCallback(() => {\r\n if (!isStorageAvailable) {\r\n console.warn('Storage is not available, cannot clear consent');\r\n return;\r\n }\r\n \r\n try {\r\n console.log(`Clearing consent from storage (key: ${currentStorageKey.current})`);\r\n localStorage.removeItem(currentStorageKey.current);\r\n sessionStorage.removeItem(`${currentStorageKey.current}_backup`);\r\n \r\n // Clear from cache\r\n delete storageCache[currentStorageKey.current];\r\n \r\n console.log('Consent data cleared successfully');\r\n } catch (error) {\r\n console.error('Failed to clear consent from storage:', error);\r\n }\r\n }, [isStorageAvailable]);\r\n\r\n return {\r\n saveConsent,\r\n loadConsent,\r\n clearConsent,\r\n isStorageAvailable\r\n };\r\n}\r\n","import { ConsentRecord, ConsentDecision } from '../types';\r\n\r\nexport function generateSessionId(): string {\r\n return 'session_' + Date.now() + '_' + Math.random().toString(36).substring(2, 15);\r\n}\r\n\r\nexport function createConsentRecord(\r\n sessionId: string,\r\n decisions: ConsentDecision[],\r\n version: string,\r\n userId?: string\r\n): ConsentRecord {\r\n return {\r\n userId,\r\n sessionId,\r\n decisions,\r\n lastUpdated: new Date(),\r\n version,\r\n userAgent: typeof navigator !== 'undefined' ? navigator.userAgent : undefined,\r\n };\r\n}\r\n\r\nexport function isValidConsentRecord(record: ConsentRecord, currentVersion: string): boolean {\r\n return Boolean(\r\n record &&\r\n record.version === currentVersion &&\r\n record.decisions &&\r\n Array.isArray(record.decisions) &&\r\n record.lastUpdated &&\r\n record.sessionId\r\n );\r\n}\r\n\r\nexport function getConsentValue(record: ConsentRecord | null, categoryId: string): boolean {\r\n if (!record) return false;\r\n \r\n const decision = record.decisions.find((d: ConsentDecision) => d.categoryId === categoryId);\r\n return decision?.status === 'accepted';\r\n}\r\n\r\nexport function mergeConsentDecisions(\r\n existing: ConsentDecision[],\r\n updates: ConsentDecision[]\r\n): ConsentDecision[] {\r\n const merged = [...existing];\r\n \r\n updates.forEach(update => {\r\n const existingIndex = merged.findIndex((d: ConsentDecision) => d.categoryId === update.categoryId);\r\n if (existingIndex >= 0) {\r\n merged[existingIndex] = update;\r\n } else {\r\n merged.push(update);\r\n }\r\n });\r\n \r\n return merged;\r\n}\r\n\r\nexport function hasExpiredConsent(record: ConsentRecord, expirationDays: number): boolean {\r\n if (!record.lastUpdated) return true;\r\n \r\n const expirationDate = new Date(record.lastUpdated);\r\n expirationDate.setDate(expirationDate.getDate() + expirationDays);\r\n \r\n return expirationDate <= new Date();\r\n}\r\n\r\nexport function sanitizeConsentRecord(record: ConsentRecord): ConsentRecord {\r\n return {\r\n userId: record.userId,\r\n sessionId: record.sessionId,\r\n decisions: record.decisions.map((d: ConsentDecision) => ({\r\n categoryId: d.categoryId,\r\n status: d.status,\r\n timestamp: new Date(d.timestamp),\r\n version: d.version\r\n })),\r\n lastUpdated: new Date(record.lastUpdated),\r\n version: record.version,\r\n ipAddress: record.ipAddress,\r\n userAgent: record.userAgent\r\n };\r\n}\r\n","import { ConsentTheme } from '../types';\r\n\r\nexport function applyConsentTheme(theme: ConsentTheme): void {\r\n const root = document.documentElement;\r\n \r\n // Apply CSS custom properties\r\n root.style.setProperty('--consent-primary-color', theme.primaryColor);\r\n root.style.setProperty('--consent-secondary-color', theme.secondaryColor);\r\n root.style.setProperty('--consent-background-color', theme.backgroundColor);\r\n root.style.setProperty('--consent-text-color', theme.textColor);\r\n root.style.setProperty('--consent-border-color', theme.borderColor);\r\n root.style.setProperty('--consent-border-radius', theme.borderRadius);\r\n root.style.setProperty('--consent-font-family', theme.fontFamily);\r\n root.style.setProperty('--consent-font-size', theme.fontSize);\r\n root.style.setProperty('--consent-button-style', theme.buttonStyle);\r\n root.style.setProperty('--consent-shadow', theme.shadow ? '0 4px 6px rgba(0, 0, 0, 0.1)' : 'none');\r\n}\r\n\r\nexport function removeConsentTheme(): void {\r\n const root = document.documentElement;\r\n \r\n const themeProperties = [\r\n '--consent-primary-color',\r\n '--consent-secondary-color',\r\n '--consent-background-color',\r\n '--consent-text-color',\r\n '--consent-border-color',\r\n '--consent-border-radius',\r\n '--consent-font-family',\r\n '--consent-font-size',\r\n '--consent-button-style',\r\n '--consent-shadow'\r\n ];\r\n \r\n themeProperties.forEach(property => {\r\n root.style.removeProperty(property);\r\n });\r\n}\r\n\r\nexport function getDefaultTheme(): ConsentTheme {\r\n return {\r\n primaryColor: '#007bff',\r\n secondaryColor: '#6c757d',\r\n backgroundColor: '#ffffff',\r\n textColor: '#212529',\r\n borderColor: '#dee2e6',\r\n borderRadius: '0.375rem',\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n fontSize: '14px',\r\n buttonStyle: 'solid',\r\n shadow: true\r\n };\r\n}\r\n\r\nexport function getDarkTheme(): ConsentTheme {\r\n return {\r\n primaryColor: '#0d6efd',\r\n secondaryColor: '#adb5bd',\r\n backgroundColor: '#212529',\r\n textColor: '#ffffff',\r\n borderColor: '#495057',\r\n borderRadius: '0.375rem',\r\n fontFamily: 'system-ui, -apple-system, sans-serif',\r\n fontSize: '14px',\r\n buttonStyle: 'solid',\r\n shadow: true\r\n };\r\n}\r\n","import React, { createContext, useContext, useState, useEffect, useCallback, useRef, ReactNode } from 'react';\r\nimport { \r\n ConsentContextType, \r\n PrivacyConsentConfig, \r\n ConsentRecord, \r\n ConsentDecision,\r\n ConsentStatus \r\n} from '../types';\r\nimport { useConsentStorage } from '../hooks/useConsentStorage';\r\nimport { generateSessionId, createConsentRecord } from '../utils/consentUtils';\r\nimport { applyConsentTheme } from '../utils/themeUtils';\r\n\r\nexport interface ConsentProviderProps {\r\n children: ReactNode;\r\n config: PrivacyConsentConfig;\r\n}\r\n\r\nconst ConsentContext = createContext<ConsentContextType | undefined>(undefined);\r\n\r\nexport function ConsentProvider({ children, config }: ConsentProviderProps) {\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [isPreferencesVisible, setIsPreferencesVisible] = useState(false);\r\n const [consentRecord, setConsentRecord] = useState<ConsentRecord | null>(null);\r\n const [sessionId] = useState(() => generateSessionId());\r\n \r\n const initialized = useRef(false);\r\n \r\n const { saveConsent, loadConsent, clearConsent } = useConsentStorage(config.settings.storageKey);\r\n \r\n // Initialize consent record\r\n useEffect(() => {\r\n console.log('[ConsentProvider] Initializing with storage key:', config.settings.storageKey);\r\n \r\n // Reset initialized flag when key dependencies change\r\n if (config.settings.version || config.settings.storageKey) {\r\n initialized.current = false;\r\n }\r\n \r\n if (initialized.current) {\r\n console.log('[ConsentProvider] Already initialized, skipping');\r\n return;\r\n }\r\n \r\n console.log('[ConsentProvider] useEffect triggered - initializing consent');\r\n console.log('[ConsentProvider] Config version:', config.settings.version);\r\n console.log('[ConsentProvider] Config categories:', config.settings.categories.map(c => c.id));\r\n \r\n const savedConsent = loadConsent();\r\n console.log('Loaded consent from storage:', savedConsent ? 'found' : 'not found');\r\n \r\n if (savedConsent && savedConsent.version === config.settings.version) {\r\n console.log('Consent version matches current version:', config.settings.version);\r\n \r\n // Check if consent is still valid\r\n const expirationDate = new Date(savedConsent.lastUpdated);\r\n expirationDate.setDate(expirationDate.getDate() + config.settings.expirationDays);\r\n \r\n if (expirationDate > new Date()) {\r\n console.log('Consent is not expired, valid until:', expirationDate);\r\n \r\n // Ensure all configured categories exist in the saved consent\r\n const allCategoriesPresent = config.settings.categories.every(category => \r\n savedConsent.decisions.some(d => d.categoryId === category.id)\r\n );\r\n \r\n if (allCategoriesPresent) {\r\n // All categories found, use the saved consent\r\n console.log('[ConsentProvider] All categories present in saved consent, using it', savedConsent.decisions);\r\n console.log('[ConsentProvider] Setting consent record to:', savedConsent);\r\n setConsentRecord(savedConsent);\r\n // Ensure the record is saved with the current storage key\r\n saveConsent(savedConsent);\r\n console.log('[ConsentProvider] Consent record set successfully');\r\n initialized.current = true;\r\n return;\r\n } else {\r\n console.log('[ConsentProvider] Some categories missing in saved consent, merging with defaults');\r\n // Some categories are missing, merge with defaults\r\n const mergedDecisions: ConsentDecision[] = [...savedConsent.decisions];\r\n \r\n // Add any missing categories with their default values\r\n config.settings.categories.forEach(category => {\r\n const exists = savedConsent.decisions.some(d => d.categoryId === category.id);\r\n if (!exists) {\r\n mergedDecisions.push({\r\n categoryId: category.id,\r\n status: category.required ? 'accepted' : (category.defaultValue ? 'accepted' : 'rejected') as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n });\r\n }\r\n });\r\n \r\n // Create a new record with the merged decisions\r\n const mergedRecord = createConsentRecord(\r\n savedConsent.sessionId, \r\n mergedDecisions, \r\n config.settings.version\r\n );\r\n \r\n console.log('[ConsentProvider] Setting merged consent record:', mergedRecord);\r\n setConsentRecord(mergedRecord);\r\n saveConsent(mergedRecord);\r\n initialized.current = true;\r\n return;\r\n }\r\n } else {\r\n console.log('[ConsentProvider] Consent is expired, expired on:', expirationDate);\r\n }\r\n } else {\r\n console.log('[ConsentProvider] No valid consent found or version mismatch');\r\n if (savedConsent) {\r\n console.log('[ConsentProvider] Saved consent version:', savedConsent.version);\r\n console.log('[ConsentProvider] Expected version:', config.settings.version);\r\n }\r\n }\r\n \r\n // Create a default consent record when none is found\r\n // This ensures we always have a valid record with default values\r\n console.log('[ConsentProvider] Creating default consent record');\r\n const initialDecisions: ConsentDecision[] = config.settings.categories.map(category => ({\r\n categoryId: category.id,\r\n status: category.required ? 'accepted' : (category.defaultValue ? 'accepted' : 'rejected') as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n }));\r\n \r\n const defaultRecord = createConsentRecord(sessionId, initialDecisions, config.settings.version);\r\n console.log('[ConsentProvider] Setting initial default consent record:', defaultRecord);\r\n setConsentRecord(defaultRecord);\r\n \r\n // Save the default record to localStorage to ensure persistence\r\n console.log('[ConsentProvider] Saving default record to localStorage');\r\n saveConsent(defaultRecord);\r\n \r\n // Show banner if no valid consent found\r\n const showDelay = config.settings.autoShowDelay || 0;\r\n setTimeout(() => {\r\n if (!savedConsent || savedConsent.version !== config.settings.version) {\r\n console.log('[ConsentProvider] Showing consent banner');\r\n setIsVisible(true);\r\n config.onBannerShow?.();\r\n }\r\n }, showDelay);\r\n \r\n initialized.current = true;\r\n }, [config.settings.version, config.settings.storageKey, config.settings.categories, \r\n config.settings.expirationDays, loadConsent, saveConsent, sessionId, config.onBannerShow]);\r\n\r\n // Apply theme\r\n useEffect(() => {\r\n if (config.theme) {\r\n applyConsentTheme(config.theme);\r\n }\r\n }, [config.theme]);\r\n\r\n // Respect Do Not Track\r\n useEffect(() => {\r\n if (config.settings.respectDoNotTrack && navigator.doNotTrack === '1') {\r\n const record = createConsentRecord(\r\n sessionId,\r\n config.settings.categories.map(cat => ({\r\n categoryId: cat.id,\r\n status: cat.required ? 'accepted' : 'rejected' as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n })),\r\n config.settings.version\r\n );\r\n setConsentRecord(record);\r\n saveConsent(record);\r\n setIsVisible(false);\r\n }\r\n }, [config.settings, sessionId, saveConsent]);\r\n\r\n const showBanner = useCallback(() => {\r\n setIsVisible(true);\r\n config.onBannerShow?.();\r\n }, [config]);\r\n\r\n const hideBanner = useCallback(() => {\r\n setIsVisible(false);\r\n config.onBannerHide?.();\r\n }, [config]);\r\n\r\n const showPreferences = useCallback(() => {\r\n setIsPreferencesVisible(true);\r\n }, []);\r\n\r\n const hidePreferences = useCallback(() => {\r\n setIsPreferencesVisible(false);\r\n }, []);\r\n\r\n const updateConsentRecord = useCallback((decisions: ConsentDecision[]) => {\r\n const record = createConsentRecord(sessionId, decisions, config.settings.version);\r\n setConsentRecord(record);\r\n saveConsent(record);\r\n config.onConsentChange?.(record);\r\n return record;\r\n }, [config, sessionId, saveConsent]);\r\n \r\n // Add updateConsent function for ConsentContextType\r\n const updateConsent = useCallback((categoryId: string, accepted: boolean) => {\r\n if (!consentRecord) return;\r\n \r\n const newDecisions = consentRecord.decisions.map((decision: ConsentDecision) => {\r\n if (decision.categoryId === categoryId) {\r\n return {\r\n ...decision,\r\n status: accepted ? 'accepted' : 'rejected' as ConsentStatus,\r\n timestamp: new Date()\r\n };\r\n }\r\n return decision;\r\n });\r\n \r\n updateConsentRecord(newDecisions);\r\n }, [consentRecord, updateConsentRecord]);\r\n \r\n // Add getAllConsent function for ConsentContextType\r\n const getAllConsent = useCallback(() => {\r\n return consentRecord;\r\n }, [consentRecord]);\r\n \r\n // Define getConsent before it's used in hasConsent\r\n const getConsent = useCallback((categoryId: string): boolean => {\r\n if (!consentRecord) return false;\r\n \r\n const decision = consentRecord.decisions.find((d: ConsentDecision) => d.categoryId === categoryId);\r\n return decision ? decision.status === 'accepted' : false;\r\n }, [consentRecord]);\r\n \r\n // Add hasConsent function for ConsentContextType\r\n const hasConsent = useCallback((categoryId: string): boolean => {\r\n return getConsent(categoryId);\r\n }, [getConsent]);\r\n\r\n const acceptAll = useCallback(() => {\r\n const decisions = config.settings.categories.map(category => ({\r\n categoryId: category.id,\r\n status: 'accepted' as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n }));\r\n \r\n const record = updateConsentRecord(decisions);\r\n hideBanner();\r\n return record;\r\n }, [config.settings.categories, config.settings.version, hideBanner, updateConsentRecord]);\r\n\r\n const rejectAll = useCallback(() => {\r\n const decisions = config.settings.categories.map(category => ({\r\n categoryId: category.id,\r\n status: category.required ? 'accepted' : 'rejected' as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n }));\r\n \r\n const record = updateConsentRecord(decisions);\r\n hideBanner();\r\n return record;\r\n }, [config.settings.categories, config.settings.version, hideBanner, updateConsentRecord]);\r\n\r\n\r\n\r\n const resetConsent = useCallback(() => {\r\n console.log('Resetting consent to default state');\r\n \r\n // Clear consent from storage\r\n clearConsent();\r\n \r\n // Create a new default record\r\n const decisions = config.settings.categories.map(category => ({\r\n categoryId: category.id,\r\n status: category.required ? 'accepted' : (category.defaultValue ? 'accepted' : 'rejected') as ConsentStatus,\r\n timestamp: new Date(),\r\n version: config.settings.version\r\n }));\r\n \r\n const record = createConsentRecord(sessionId, decisions, config.settings.version);\r\n setConsentRecord(record);\r\n saveConsent(record);\r\n \r\n // Show the banner again\r\n setIsVisible(true);\r\n config.onBannerShow?.();\r\n \r\n return record;\r\n }, [clearConsent, config, sessionId, saveConsent]);\r\n\r\n // Fix the getConsent type to match ConsentContextType\r\n const getConsentStatus = useCallback((categoryId: string): ConsentStatus => {\r\n if (!consentRecord) return 'pending';\r\n \r\n const decision = consentRecord.decisions.find((d: ConsentDecision) => d.categoryId === categoryId);\r\n return decision ? decision.status : 'pending';\r\n }, [consentRecord]);\r\n \r\n const contextValue: ConsentContextType = {\r\n isVisible,\r\n isPreferencesVisible,\r\n consentRecord,\r\n showBanner,\r\n hideBanner,\r\n showPreferences,\r\n hidePreferences,\r\n acceptAll,\r\n rejectAll,\r\n getConsent: getConsentStatus, // Use the correctly typed function\r\n resetConsent,\r\n // Add missing properties required by ConsentContextType\r\n updateConsent,\r\n getAllConsent,\r\n hasConsent,\r\n config\r\n };\r\n\r\n return (\r\n <ConsentContext.Provider key={se