almeira-web/src/lib/preferences.ts

52 lines
1.8 KiB
TypeScript

import { createSessionClient } from './appwrite.server';
export interface UserPreferences {
hiddenColumns?: Record<string, string[]>; // entidad -> lista de nombres de campos ocultos
sortConfig?: Record<string, { field: string, direction: 'asc' | 'desc' }>;
}
/**
* Obtiene las preferencias persistidas del usuario desde Appwrite Account Prefs
*/
export async function getUserPreferences(): Promise<UserPreferences> {
try {
const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c';
const { cookies } = await import('next/headers');
const cookieStore = await cookies();
const sessionCookie = cookieStore.get(`a_session_${PROJECT_ID.toLowerCase()}`);
// En modo bypass no hay preferencias persistidas reales que valga la pena pedir a account.get()
if (sessionCookie?.value === "admin-bypass-session") {
return {};
}
const sessionClient = await createSessionClient();
if (!sessionClient) return {};
const account = await sessionClient.account.get();
return (account.prefs as UserPreferences) || {};
} catch (error) {
console.error('Error fetching user prefs:', error);
return {};
}
}
/**
* Actualiza una preferencia específica del usuario
*/
export async function updateUserPreference(update: Partial<UserPreferences>): Promise<boolean> {
try {
const sessionClient = await createSessionClient();
if (!sessionClient) return false;
const currentPrefs = await getUserPreferences();
const newPrefs = { ...currentPrefs, ...update };
await sessionClient.account.updatePrefs(newPrefs);
return true;
} catch (error) {
console.error('Error updating user prefs:', error);
return false;
}
}