Add event registration and feedback points to site preferences: Update SitePreferences model and related components to include eventRegistrationPoints and eventFeedbackPoints, ensuring proper handling of user scores during event interactions.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
"use client";
|
||||
|
||||
import { useEffect, useState } from "react";
|
||||
import { useEffect, useState, useCallback } from "react";
|
||||
import { useSession } from "next-auth/react";
|
||||
import Link from "next/link";
|
||||
import { Avatar } from "@/components/ui";
|
||||
@@ -42,6 +42,31 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) {
|
||||
initialUserData || defaultUserData
|
||||
);
|
||||
|
||||
const refreshUserData = useCallback(async () => {
|
||||
if (!session?.user?.id) return;
|
||||
|
||||
try {
|
||||
const res = await fetch(`/api/users/${session.user.id}`);
|
||||
const data = await res.json();
|
||||
if (data) {
|
||||
requestAnimationFrame(() => {
|
||||
setUserData({
|
||||
username: data.username || "Guest",
|
||||
avatar: data.avatar,
|
||||
hp: data.hp || 1000,
|
||||
maxHp: data.maxHp || 1000,
|
||||
xp: data.xp || 0,
|
||||
maxXp: data.maxXp || 5000,
|
||||
level: data.level || 1,
|
||||
score: data.score || 0,
|
||||
});
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Error refreshing user data:", error);
|
||||
}
|
||||
}, [session]);
|
||||
|
||||
useEffect(() => {
|
||||
// Si on a déjà des données initiales, ne rien faire (déjà initialisé dans useState)
|
||||
if (initialUserData) {
|
||||
@@ -92,6 +117,18 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) {
|
||||
}
|
||||
}, [session, initialUserData]);
|
||||
|
||||
// Écouter les événements de refresh du score
|
||||
useEffect(() => {
|
||||
const handleRefreshScore = () => {
|
||||
refreshUserData();
|
||||
};
|
||||
|
||||
window.addEventListener("refreshUserScore", handleRefreshScore);
|
||||
return () => {
|
||||
window.removeEventListener("refreshUserScore", handleRefreshScore);
|
||||
};
|
||||
}, [refreshUserData]);
|
||||
|
||||
const { username, avatar, level, score } = userData;
|
||||
|
||||
return (
|
||||
@@ -136,7 +173,6 @@ export default function PlayerStats({ initialUserData }: PlayerStatsProps) {
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user