fix: ui tweaks including button styles, texts, and missing account link
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
import { create } from 'zustand';
|
||||
|
||||
interface ConsentState {
|
||||
isInitialized: boolean;
|
||||
isOpen: boolean;
|
||||
analytics: boolean;
|
||||
marketing: boolean;
|
||||
initialize: () => void;
|
||||
openBanner: () => void;
|
||||
closeBanner: () => void;
|
||||
setConsent: (analytics: boolean, marketing: boolean) => void;
|
||||
acceptAll: () => void;
|
||||
rejectOptional: () => void;
|
||||
}
|
||||
|
||||
const CONSENT_KEY = 'airproject_cookie_consent_v2';
|
||||
|
||||
export const useConsentStore = create<ConsentState>((set) => ({
|
||||
isInitialized: false,
|
||||
isOpen: false,
|
||||
analytics: false,
|
||||
marketing: false,
|
||||
|
||||
initialize: () => {
|
||||
if (typeof window !== 'undefined') {
|
||||
const stored = localStorage.getItem(CONSENT_KEY);
|
||||
if (stored) {
|
||||
try {
|
||||
const parsed = JSON.parse(stored);
|
||||
set({
|
||||
isInitialized: true,
|
||||
isOpen: false,
|
||||
analytics: !!parsed.analytics,
|
||||
marketing: !!parsed.marketing,
|
||||
});
|
||||
} catch (e) {
|
||||
// If parsing fails, show banner
|
||||
set({ isInitialized: true, isOpen: true });
|
||||
}
|
||||
} else {
|
||||
// No consent found, show banner
|
||||
set({ isInitialized: true, isOpen: true });
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
openBanner: () => set({ isOpen: true }),
|
||||
|
||||
closeBanner: () => set({ isOpen: false }),
|
||||
|
||||
setConsent: (analytics, marketing) => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics, marketing }));
|
||||
set({ analytics, marketing, isOpen: false });
|
||||
},
|
||||
|
||||
acceptAll: () => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics: true, marketing: true }));
|
||||
set({ analytics: true, marketing: true, isOpen: false });
|
||||
},
|
||||
|
||||
rejectOptional: () => {
|
||||
localStorage.setItem(CONSENT_KEY, JSON.stringify({ essential: true, analytics: false, marketing: false }));
|
||||
set({ analytics: false, marketing: false, isOpen: false });
|
||||
}
|
||||
}));
|
||||
Reference in New Issue
Block a user