@whotechs/react-gdpr-cookie-banner
Version:
A modern, customizable GDPR & Google Consent Mode v2 compliant cookie consent banner
250 lines (203 loc) • 6.35 kB
Markdown
# React GDPR Cookie Banner
A modern, customizable, and GDPR-compliant cookie consent banner for React applications. Fully compatible with Google Consent Mode v2.
## Features
- 🎨 Fully customizable UI
- 📱 Responsive design
- ✅ GDPR compliant
- 🔄 Google Consent Mode v2 integration
- 🌐 TypeScript support
- 💾 Persistent preferences
- 🎯 Google Tag Manager support
- ♿ Accessibility features
## Installation
```bash
# Using npm
npm install @whotechs/react-gdpr-cookie-banner
# Using yarn
yarn add @whotechs/react-gdpr-cookie-banner
# Using pnpm
pnpm add @whotechs/react-gdpr-cookie-banner
```
Make sure you have the peer dependencies installed:
```bash
npm install styled-components
```
## Quick Start
1. Add your Google Tag Manager ID to your environment variables:
```env
VITE_GTM_ID="GTM-XXXXXX" # For Vite
# or
REACT_APP_GTM_ID="GTM-XXXXXX" # For Create React App
```
2. Import and use the component:
```jsx
import { CookieBanner } from '@whotechs/react-gdpr-cookie-banner';
function App() {
return (
<div>
<CookieBanner
gtmContainerId={import.meta.env.VITE_GTM_ID || ''} // For Vite
// or
// gtmContainerId={process.env.REACT_APP_GTM_ID || ''} // For Create React App
primaryColor="#007bff"
onPreferencesUpdate={(preferences) => {
console.log('Cookie preferences updated:', preferences);
}}
/>
{/* Your other components */}
</div>
);
}
```
## Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| primaryColor | string | '#FFD700' | Primary color used for buttons and switches |
| textColor | string | '#FFFFFF' | Text color for the banner |
| backgroundColor | string | 'rgba(0, 0, 0, 0.95)' | Background color for the banner |
| className | string | '' | Custom CSS class for the banner container |
| onPreferencesUpdate | function | () => {} | Callback function when preferences are updated |
| titleText | string | 'Privacy Preferences Center' | Custom text for the title |
| descriptionText | string | '...' | Custom text for the description |
| showDelay | number | 1000 | Wait time in milliseconds before showing the banner |
| gtmContainerId | string | '' | Google Tag Manager container ID |
## Cookie Preferences
The banner manages the following cookie categories:
- Essential (Always enabled)
- Analytics
- Advertising
- Ad Personalization
- User Data Processing
## Google Consent Mode v2 Integration
This banner automatically integrates with Google Consent Mode v2, managing the following consent types:
- ad_storage
- analytics_storage
- ad_user_data
- ad_personalization
## Example with Custom Styling
```jsx
import { CookieBanner } from '@whotechs/react-gdpr-cookie-banner';
function App() {
return (
<CookieBanner
gtmContainerId="GTM-XXXXXX"
primaryColor="#4CAF50"
textColor="#FFFFFF"
backgroundColor="rgba(33, 33, 33, 0.98)"
titleText="Cookie Settings"
descriptionText="We use cookies to enhance your experience."
onPreferencesUpdate={(prefs) => {
console.log('Updated preferences:', prefs);
}}
/>
);
}
```
## TypeScript Support
The package includes built-in TypeScript declarations. You can import types like this:
```typescript
import { CookieBanner, CookieBannerProps, CookiePreferences } from '@whotechs/react-gdpr-cookie-banner';
```
## Browser Support
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
- IE 11 (with appropriate polyfills)
## Post-Installation Setup
1. **Google Tag Manager Setup:**
```html
<!-- Add this in your index.html head section -->
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
</script>
```
2. **Environment Variables:**
Create a `.env` file in your project root:
```env
# For Vite
VITE_GTM_ID=GTM-XXXXXX
# For Create React App
REACT_APP_GTM_ID=GTM-XXXXXX
```
3. **Add to Your Root Component:**
```jsx
// App.jsx or App.tsx
import { CookieBanner } from '@whotechs/react-gdpr-cookie-banner';
function App() {
const handlePreferencesUpdate = (preferences) => {
// Optional: Handle preference updates
console.log('Cookie preferences updated:', preferences);
// Example: Trigger analytics based on preferences
if (preferences.analytics_storage) {
// Initialize analytics
}
// Example: Handle advertising preferences
if (preferences.ad_storage) {
// Initialize ad services
}
};
return (
<>
<CookieBanner
gtmContainerId={import.meta.env.VITE_GTM_ID || ''}
primaryColor="#007bff"
onPreferencesUpdate={handlePreferencesUpdate}
/>
{/* Your app content */}
</>
);
}
```
4. **Styled Components Setup:**
If you're using TypeScript, add styled-components types:
```bash
npm install @types/styled-components
```
5. **TypeScript Configuration (if using TypeScript):**
Make sure your `tsconfig.json` includes:
```json
{
"compilerOptions": {
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true
}
}
```
6. **Testing Cookie Banner:**
- Clear your browser's cookies and localStorage
- Refresh your page
- The banner should appear on first visit
- Test all preference toggles
- Verify GTM integration using Google Tag Assistant
7. **Optional: Custom Styling**
```jsx
// Example with theme integration
import { ThemeProvider } from 'styled-components';
const theme = {
cookieBanner: {
primary: '#007bff',
text: '#FFFFFF',
background: 'rgba(0, 0, 0, 0.95)'
}
};
function App() {
return (
<ThemeProvider theme={theme}>
<CookieBanner
gtmContainerId={import.meta.env.VITE_GTM_ID || ''}
primaryColor={theme.cookieBanner.primary}
textColor={theme.cookieBanner.text}
backgroundColor={theme.cookieBanner.background}
/>
{/* Your app content */}
</ThemeProvider>
);
}
```
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
## License
MIT © [whotechs]