fix: frontend event handling
- Removed unnecessary reverse() since backend returns events in descending order - Fixed event polling to preserve pagination - Only update events on first page during polling - Combined useEffects for better state management
This commit is contained in:
parent
9dc65a138f
commit
3ad694f34b
|
|
@ -53,26 +53,32 @@ function App() {
|
||||||
setSettings(settingsData);
|
setSettings(settingsData);
|
||||||
setGateStatus(statusData);
|
setGateStatus(statusData);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError('Failed to load initial data');
|
setError('Failed to load data');
|
||||||
console.error(err);
|
console.error(err);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
loadData();
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
const interval = setInterval(async () => {
|
const interval = setInterval(async () => {
|
||||||
try {
|
try {
|
||||||
const status = await api.getGateStatus();
|
// Only update status and most recent events
|
||||||
setGateStatus(status);
|
const [statusData, eventsData] = await Promise.all([
|
||||||
const newEvents = await api.getEvents();
|
api.getGateStatus(),
|
||||||
setEvents(newEvents.events);
|
api.getEvents(10, 0)
|
||||||
setHasMoreEvents(newEvents.hasMore);
|
]);
|
||||||
setTotalEvents(newEvents.total);
|
setGateStatus(statusData);
|
||||||
|
// Only update events if we're on the first page
|
||||||
|
if (events.length <= 10) {
|
||||||
|
setEvents(eventsData.events);
|
||||||
|
setHasMoreEvents(eventsData.hasMore);
|
||||||
|
setTotalEvents(eventsData.total);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error('Failed to update gate status:', err);
|
console.error('Failed to update status:', err);
|
||||||
}
|
}
|
||||||
}, 1000);
|
}, 1000);
|
||||||
|
|
||||||
|
loadData();
|
||||||
|
|
||||||
return () => clearInterval(interval);
|
return () => clearInterval(interval);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
|
@ -173,7 +179,7 @@ function App() {
|
||||||
<div className="mt-6">
|
<div className="mt-6">
|
||||||
<h2 className="text-lg font-semibold mb-2">Recent Events</h2>
|
<h2 className="text-lg font-semibold mb-2">Recent Events</h2>
|
||||||
<div className="border rounded-lg divide-y divide-gray-200 max-h-96 overflow-y-auto">
|
<div className="border rounded-lg divide-y divide-gray-200 max-h-96 overflow-y-auto">
|
||||||
{[...events].reverse().map((event, index) => (
|
{events.map((event, index) => (
|
||||||
<div key={index} className="px-3 py-2 hover:bg-gray-50 flex items-center justify-between text-sm">
|
<div key={index} className="px-3 py-2 hover:bg-gray-50 flex items-center justify-between text-sm">
|
||||||
<div className="flex-1">
|
<div className="flex-1">
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue