ü++
This commit is contained in:
Binary file not shown.
+3
-2
@@ -231,9 +231,10 @@ app.get('/games/:gameId/items', (req, res) => {
|
|||||||
if (err) {
|
if (err) {
|
||||||
return res.status(500).json({ error: 'Internal server error' });
|
return res.status(500).json({ error: 'Internal server error' });
|
||||||
}
|
}
|
||||||
|
// Convert image data to base64 and store as Img property
|
||||||
const processedRows = rows.map(row => {
|
const processedRows = rows.map(row => {
|
||||||
if (row.img) {
|
if (row.img) { // Database column is lowercase
|
||||||
row.Img = `data:image/jpeg;base64,${row.img.toString('base64')}`;
|
row.Img = `data:image/jpeg;base64,${row.img.toString('base64')}`; // Store as uppercase Img
|
||||||
}
|
}
|
||||||
return row;
|
return row;
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -21,21 +21,18 @@ const GameMasterPage = () => {
|
|||||||
const [allOwners, setAllOwners] = useState([]);
|
const [allOwners, setAllOwners] = useState([]);
|
||||||
const [formData, setFormData] = useState(null);
|
const [formData, setFormData] = useState(null);
|
||||||
|
|
||||||
// Fix useEffect data fetching
|
// Update useEffect for data fetching
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchData = async () => {
|
const fetchData = async () => {
|
||||||
try {
|
try {
|
||||||
// Fetch player characters
|
|
||||||
const pcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/playerchars`);
|
const pcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/playerchars`);
|
||||||
const processedPCs = Array.isArray(pcsResponse.data) ? pcsResponse.data : [pcsResponse.data];
|
const processedPCs = Array.isArray(pcsResponse.data) ? pcsResponse.data : [pcsResponse.data];
|
||||||
setPlayerCharacters(processedPCs.filter(pc => pc !== null));
|
setPlayerCharacters(processedPCs.filter(pc => pc !== null));
|
||||||
|
|
||||||
// Fetch NPCs with different structure
|
|
||||||
const npcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/npcs`);
|
const npcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/npcs`);
|
||||||
const processedNPCs = Array.isArray(npcsResponse.data) ? npcsResponse.data : [npcsResponse.data];
|
const processedNPCs = Array.isArray(npcsResponse.data) ? npcsResponse.data : [npcsResponse.data];
|
||||||
setNpcs(processedNPCs.filter(npc => npc !== null));
|
setNpcs(processedNPCs.filter(npc => npc !== null));
|
||||||
|
|
||||||
// Fetch Items
|
|
||||||
const itemsResponse = await axios.get(`http://localhost:5000/games/${gameId}/items`);
|
const itemsResponse = await axios.get(`http://localhost:5000/games/${gameId}/items`);
|
||||||
const processedItems = Array.isArray(itemsResponse.data) ? itemsResponse.data : [itemsResponse.data];
|
const processedItems = Array.isArray(itemsResponse.data) ? itemsResponse.data : [itemsResponse.data];
|
||||||
setItems(processedItems.filter(item => item !== null));
|
setItems(processedItems.filter(item => item !== null));
|
||||||
@@ -44,15 +41,21 @@ const GameMasterPage = () => {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
fetchData();
|
// Initial fetch only if no modal is open
|
||||||
let interval;
|
if (!editModalOpen) {
|
||||||
if (!isEditing && !editModalOpen) { // Add editModalOpen check
|
fetchData();
|
||||||
interval = setInterval(fetchData, 10000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set up polling only if modal is closed
|
||||||
|
let interval;
|
||||||
|
if (!editModalOpen) {
|
||||||
|
interval = setInterval(fetchData, 5000);
|
||||||
|
}
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
if (interval) clearInterval(interval);
|
if (interval) clearInterval(interval);
|
||||||
};
|
};
|
||||||
}, [gameId, isEditing, editModalOpen]); // Add editModalOpen dependency
|
}, [gameId, editModalOpen]);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const fetchOwners = async () => {
|
const fetchOwners = async () => {
|
||||||
@@ -83,7 +86,7 @@ const GameMasterPage = () => {
|
|||||||
setFormData({...item});
|
setFormData({...item});
|
||||||
setEditType('item');
|
setEditType('item');
|
||||||
setEditModalOpen(true);
|
setEditModalOpen(true);
|
||||||
setIsEditing(true);
|
setIsEditing(true); // Stops the polling
|
||||||
};
|
};
|
||||||
|
|
||||||
const handleNpcClick = (npc) => {
|
const handleNpcClick = (npc) => {
|
||||||
@@ -102,6 +105,7 @@ const GameMasterPage = () => {
|
|||||||
setIsEditing(true);
|
setIsEditing(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Update handleUpdate to fetch once after saving
|
||||||
const handleUpdate = async () => {
|
const handleUpdate = async () => {
|
||||||
try {
|
try {
|
||||||
let response;
|
let response;
|
||||||
@@ -114,10 +118,26 @@ const GameMasterPage = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (response.status === 200) {
|
if (response.status === 200) {
|
||||||
|
const fetchData = async () => {
|
||||||
|
try {
|
||||||
|
const pcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/playerchars`);
|
||||||
|
const processedPCs = Array.isArray(pcsResponse.data) ? pcsResponse.data : [pcsResponse.data];
|
||||||
|
setPlayerCharacters(processedPCs.filter(pc => pc !== null));
|
||||||
|
|
||||||
|
const npcsResponse = await axios.get(`http://localhost:5000/games/${gameId}/npcs`);
|
||||||
|
const processedNPCs = Array.isArray(npcsResponse.data) ? npcsResponse.data : [npcsResponse.data];
|
||||||
|
setNpcs(processedNPCs.filter(npc => npc !== null));
|
||||||
|
|
||||||
|
const itemsResponse = await axios.get(`http://localhost:5000/games/${gameId}/items`);
|
||||||
|
const processedItems = Array.isArray(itemsResponse.data) ? itemsResponse.data : [itemsResponse.data];
|
||||||
|
setItems(processedItems.filter(item => item !== null));
|
||||||
|
} catch (error) {
|
||||||
|
console.error('Error fetching data:', error);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
await fetchData(); // Fetch once after successful update
|
||||||
setEditModalOpen(false);
|
setEditModalOpen(false);
|
||||||
setIsEditing(false);
|
|
||||||
setFormData(null);
|
setFormData(null);
|
||||||
fetchData();
|
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error updating:', error);
|
console.error('Error updating:', error);
|
||||||
@@ -126,7 +146,7 @@ const GameMasterPage = () => {
|
|||||||
|
|
||||||
const handleModalClose = () => {
|
const handleModalClose = () => {
|
||||||
setEditModalOpen(false);
|
setEditModalOpen(false);
|
||||||
setIsEditing(false);
|
setIsEditing(false); // Restarts the polling
|
||||||
setFormData(null);
|
setFormData(null);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -489,8 +509,8 @@ const GameMasterPage = () => {
|
|||||||
}}>
|
}}>
|
||||||
<CardMedia
|
<CardMedia
|
||||||
component="img"
|
component="img"
|
||||||
height="135" // Reduced from 140
|
height="135"
|
||||||
image={item.img || defaultItemImage} // Changed from item.img to item.Img
|
image={item.Img || defaultItemImage}
|
||||||
alt={item.ItemName}
|
alt={item.ItemName}
|
||||||
className={`rarity-${item.Rarity} rarity-image`}
|
className={`rarity-${item.Rarity} rarity-image`}
|
||||||
sx={{
|
sx={{
|
||||||
|
|||||||
Reference in New Issue
Block a user