Files
Compagnon-du-Lagon---Marama/lib/hooks/useClientData.ts
syoul f633dbb1c0 Ajout du système d'administration avec token unique et QR code
- Implémentation complète du système d'administration (/admin)
- Gestion des clients avec base de données JSON
- Génération de token unique et QR code pour chaque client
- Intégration des données client dans l'application (bungalow, WiFi, message)
- Amélioration du composant WifiCard avec fallback de copie
- Optimisation du hook useClientData pour chargement immédiat
- Ajout de la variable d'environnement ADMIN_PASSWORD
2025-11-23 08:55:50 +01:00

97 lines
2.9 KiB
TypeScript

"use client";
import { useState, useEffect, useMemo } from "react";
import { useSearchParams } from "next/navigation";
import { config } from "@/lib/config";
export interface ClientData {
bungalowNumber: string;
wifiName: string;
wifiPassword: string;
gerantMessage: string;
}
const STORAGE_KEY = "clientData";
function loadFromStorage(): ClientData | null {
if (typeof window === "undefined") return null;
try {
const stored = localStorage.getItem(STORAGE_KEY);
if (stored) {
return JSON.parse(stored);
}
} catch (error) {
console.error("Erreur lors du chargement depuis localStorage:", error);
}
return null;
}
export function useClientData() {
const searchParams = useSearchParams();
// Charger immédiatement depuis localStorage pour éviter le délai
const [clientData, setClientData] = useState<ClientData | null>(() => loadFromStorage());
const [loading, setLoading] = useState(true);
useEffect(() => {
const loadClientData = async () => {
// 1. Charger d'abord depuis localStorage pour un affichage immédiat
const storedData = loadFromStorage();
if (storedData) {
setClientData(storedData);
setLoading(false);
}
// 2. Vérifier s'il y a un token dans l'URL
const token = searchParams.get("token");
if (token) {
try {
// 3. Charger les données depuis l'API pour mettre à jour
const response = await fetch(`/api/client/${token}`);
if (response.ok) {
const data = await response.json();
const clientInfo: ClientData = {
bungalowNumber: data.bungalowNumber,
wifiName: data.wifiName,
wifiPassword: data.wifiPassword,
gerantMessage: data.gerantMessage,
};
// 4. Sauvegarder dans localStorage
if (typeof window !== "undefined") {
localStorage.setItem(STORAGE_KEY, JSON.stringify(clientInfo));
}
setClientData(clientInfo);
} else {
// Token invalide, garder les données sauvegardées si disponibles
if (!storedData) {
setClientData(null);
}
}
} catch (error) {
console.error("Erreur lors du chargement des données client:", error);
// En cas d'erreur, garder les données sauvegardées si disponibles
if (!storedData) {
setClientData(null);
}
}
}
setLoading(false);
};
loadClientData();
}, [searchParams]);
// Retourner les données client ou les valeurs par défaut
return useMemo(() => ({
bungalowNumber: clientData?.bungalowNumber || config.bungalowNumber,
wifiName: clientData?.wifiName || config.wifiName,
wifiPassword: clientData?.wifiPassword || config.wifiPassword,
gerantMessage: clientData?.gerantMessage || config.gerantMessage,
loading,
}), [clientData, loading]);
}