fix: event pagination
- Added secondary sort by id DESC for consistent ordering - Fixed hasMore calculation to use actual events returned - Only append events in frontend if we got new ones - Made SQL query more readable
This commit is contained in:
parent
3ad694f34b
commit
c8a48e8e7a
|
|
@ -206,7 +206,12 @@ async def get_events(limit: int = 10, offset: int = 0):
|
||||||
|
|
||||||
# Get paginated events
|
# Get paginated events
|
||||||
async with db.execute(
|
async with db.execute(
|
||||||
"SELECT timestamp, action, source, success FROM events ORDER BY timestamp DESC LIMIT ? OFFSET ?",
|
"""
|
||||||
|
SELECT timestamp, action, source, success
|
||||||
|
FROM events
|
||||||
|
ORDER BY timestamp DESC, id DESC
|
||||||
|
LIMIT ? OFFSET ?
|
||||||
|
""",
|
||||||
(limit, offset)
|
(limit, offset)
|
||||||
) as cursor:
|
) as cursor:
|
||||||
events = [
|
events = [
|
||||||
|
|
@ -222,7 +227,7 @@ async def get_events(limit: int = 10, offset: int = 0):
|
||||||
return {
|
return {
|
||||||
"events": events,
|
"events": events,
|
||||||
"total": total,
|
"total": total,
|
||||||
"hasMore": total > (offset + limit)
|
"hasMore": offset + len(events) < total
|
||||||
}
|
}
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error(f"Failed to get events: {e}", exc_info=True)
|
logger.error(f"Failed to get events: {e}", exc_info=True)
|
||||||
|
|
|
||||||
|
|
@ -198,6 +198,10 @@ class HomeAssistantMQTT:
|
||||||
"""Set callback for handling commands"""
|
"""Set callback for handling commands"""
|
||||||
self.command_callback = callback
|
self.command_callback = callback
|
||||||
|
|
||||||
|
def is_connected(self) -> bool:
|
||||||
|
"""Return current connection status"""
|
||||||
|
return self._connected
|
||||||
|
|
||||||
def update_settings(self, settings):
|
def update_settings(self, settings):
|
||||||
"""Update MQTT settings"""
|
"""Update MQTT settings"""
|
||||||
logger.info(f"Updating MQTT settings - Broker: {settings.broker}:{settings.port}")
|
logger.info(f"Updating MQTT settings - Broker: {settings.broker}:{settings.port}")
|
||||||
|
|
|
||||||
|
|
@ -117,9 +117,11 @@ function App() {
|
||||||
const handleLoadMore = async () => {
|
const handleLoadMore = async () => {
|
||||||
try {
|
try {
|
||||||
const moreEvents = await api.getEvents(10, events.length);
|
const moreEvents = await api.getEvents(10, events.length);
|
||||||
setEvents(prev => [...prev, ...moreEvents.events]);
|
if (moreEvents.events.length > 0) {
|
||||||
setHasMoreEvents(moreEvents.hasMore);
|
setEvents(prev => [...prev, ...moreEvents.events]);
|
||||||
setTotalEvents(moreEvents.total);
|
setHasMoreEvents(moreEvents.hasMore);
|
||||||
|
setTotalEvents(moreEvents.total);
|
||||||
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
setError('Failed to load more events');
|
setError('Failed to load more events');
|
||||||
console.error(err);
|
console.error(err);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue