MIF_E31221222/sigap-website/app/_utils/cookies/cookies-manager.ts

163 lines
4.6 KiB
TypeScript

// Cookie management utility functions
// Cookie types
export type CookiePreferences = {
necessary: boolean;
functional: boolean;
analytics: boolean;
marketing?: boolean;
};
// Default cookie preferences
export const defaultCookiePreferences: CookiePreferences = {
necessary: true, // Always true, cannot be disabled
functional: false,
analytics: false,
marketing: false,
};
// Cookie names
const COOKIE_PREFERENCES_KEY = "cookie-preferences";
const LANGUAGE_PREFERENCE_KEY = "language-preference";
const TIMEZONE_PREFERENCE_KEY = "timezone-preference";
const WEEK_START_PREFERENCE_KEY = "week-start-preference";
const AUTO_TIMEZONE_PREFERENCE_KEY = "auto-timezone-preference";
// Helper to set a cookie with expiration
export const setCookie = (
name: string,
value: string,
days: number = 365
): void => {
const date = new Date();
date.setTime(date.getTime() + days * 24 * 60 * 60 * 1000);
const expires = `; expires=${date.toUTCString()}`;
document.cookie = `${name}=${value}${expires}; path=/; SameSite=Lax`;
};
// Helper to get a cookie by name
export const getCookie = (name: string): string | null => {
if (typeof document === "undefined") return null;
const nameEQ = `${name}=`;
const ca = document.cookie.split(";");
for (let i = 0; i < ca.length; i++) {
let c = ca[i];
while (c.charAt(0) === " ") c = c.substring(1, c.length);
if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length);
}
return null;
};
// Helper to delete a cookie
export const deleteCookie = (name: string): void => {
setCookie(name, "", -1);
};
// Save cookie preferences
export const saveCookiePreferences = (preferences: CookiePreferences): void => {
// Always ensure necessary cookies are enabled
const prefsToSave = {
...preferences,
necessary: true,
};
setCookie(COOKIE_PREFERENCES_KEY, JSON.stringify(prefsToSave));
};
// Get cookie preferences
export const getCookiePreferences = (): CookiePreferences => {
try {
const preferences = getCookie(COOKIE_PREFERENCES_KEY);
if (preferences) {
return { ...defaultCookiePreferences, ...JSON.parse(preferences) };
}
} catch (error) {
console.error("Error parsing cookie preferences:", error);
}
return defaultCookiePreferences;
};
// Save language preference
export const saveLanguagePreference = (language: string): void => {
setCookie(LANGUAGE_PREFERENCE_KEY, language);
};
// Get language preference
export const getLanguagePreference = (): string | null => {
return getCookie(LANGUAGE_PREFERENCE_KEY);
};
// Save timezone preference
export const saveTimezonePreference = (timezone: string): void => {
setCookie(TIMEZONE_PREFERENCE_KEY, timezone);
};
// Get timezone preference
export const getTimezonePreference = (): string | null => {
return getCookie(TIMEZONE_PREFERENCE_KEY);
};
// Save week start preference
export const saveWeekStartPreference = (startOnMonday: boolean): void => {
setCookie(WEEK_START_PREFERENCE_KEY, startOnMonday ? "monday" : "sunday");
};
// Get week start preference
export const getWeekStartPreference = (): boolean => {
const pref = getCookie(WEEK_START_PREFERENCE_KEY);
return pref === "monday";
};
// Save auto timezone preference
export const saveAutoTimezonePreference = (auto: boolean): void => {
setCookie(AUTO_TIMEZONE_PREFERENCE_KEY, auto ? "true" : "false");
};
// Get auto timezone preference
export const getAutoTimezonePreference = (): boolean => {
const pref = getCookie(AUTO_TIMEZONE_PREFERENCE_KEY);
return pref === "true";
};
// Apply cookie preferences to the application
export const applyCookiePreferences = (
preferences: CookiePreferences
): void => {
// This function would implement the actual cookie policy enforcement
// For example, enabling/disabling analytics scripts based on preferences
if (preferences.analytics) {
// Enable analytics scripts
console.log("Analytics cookies enabled");
// Example: initAnalytics();
} else {
// Disable analytics scripts
console.log("Analytics cookies disabled");
// Example: disableAnalytics();
}
if (preferences.functional) {
// Enable functional cookies
console.log("Functional cookies enabled");
// Example: enableFunctionalFeatures();
} else {
// Disable functional cookies
console.log("Functional cookies disabled");
// Example: disableFunctionalFeatures();
}
if (preferences.marketing) {
// Enable marketing cookies
console.log("Marketing cookies enabled");
// Example: enableMarketingFeatures();
} else {
// Disable marketing cookies
console.log("Marketing cookies disabled");
// Example: disableMarketingFeatures();
}
};