sync - tui loads but no data in views

This commit is contained in:
2025-09-26 09:25:07 -07:00
parent 8c7015545a
commit 6c7e49d093
2 changed files with 15 additions and 20 deletions

View File

@@ -14,6 +14,7 @@ from textual.widgets import (
Header, Footer, Static, Button, DataTable, Header, Footer, Static, Button, DataTable,
Placeholder, TabbedContent, TabPane Placeholder, TabbedContent, TabPane
) )
from textual import on
from textual.logging import TextualHandler from textual.logging import TextualHandler
from backend.app.config import settings from backend.app.config import settings
@@ -166,6 +167,13 @@ class CyclingCoachApp(App):
nav_button.remove_class("-active") nav_button.remove_class("-active")
event.button.add_class("-active") event.button.add_class("-active")
@on(TabbedContent.TabActivated)
async def on_tab_activated(self, event: TabbedContent.TabActivated) -> None:
"""Handle tab activation to load data for the active tab."""
if event.pane.id == "workouts-tab":
workout_view = self.query_one("#workout-view", WorkoutView)
workout_view.load_data()
def action_quit(self) -> None: def action_quit(self) -> None:
"""Quit the application.""" """Quit the application."""
self.exit() self.exit()

View File

@@ -13,7 +13,6 @@ from textual.widgets import (
from textual.widget import Widget from textual.widget import Widget
from textual.reactive import reactive from textual.reactive import reactive
from textual.message import Message from textual.message import Message
from textual import on
from typing import List, Dict, Optional from typing import List, Dict, Optional
from backend.app.database import AsyncSessionLocal from backend.app.database import AsyncSessionLocal
@@ -306,23 +305,11 @@ Elevation Gain: {workout.get('elevation_gain_m', 'N/A')} m
"""Load workout data when mounted.""" """Load workout data when mounted."""
self.loading = True self.loading = True
async def load_workouts_data(self) -> None: def load_data(self) -> None:
"""Load workout data and handle the result.""" """Public method to trigger data loading for the workout view."""
self.loading = True self.loading = True
self.refresh() self.refresh()
try: self.run_async(self._load_workouts_data(), self.on_workouts_loaded)
workouts, sync_status = await self._load_workouts_data()
self.on_workouts_loaded((workouts, sync_status))
except Exception as e:
self.log(f"Error loading workouts data: {e}", severity="error")
self.loading = False
self.refresh()
@on(TabbedContent.TabActivated)
async def on_tab_activated(self, event: TabbedContent.TabActivated) -> None:
"""Handle tab activation to load data for the active tab."""
if event.pane.id == "workouts-tab":
await self.load_workouts_data()
async def _load_workouts_data(self) -> tuple[list, dict]: async def _load_workouts_data(self) -> tuple[list, dict]:
"""Load workouts and sync status (async worker).""" """Load workouts and sync status (async worker)."""
@@ -340,10 +327,10 @@ Elevation Gain: {workout.get('elevation_gain_m', 'N/A')} m
def on_workouts_loaded(self, result: tuple[list, dict]) -> None: def on_workouts_loaded(self, result: tuple[list, dict]) -> None:
"""Handle loaded workout data.""" """Handle loaded workout data."""
print("Entering on_workouts_loaded") self.log("Entering on_workouts_loaded")
try: try:
workouts, sync_status = result workouts, sync_status = result
print(f"on_workouts_loaded received: {len(workouts)} workouts, sync status: {sync_status}") self.log(f"on_workouts_loaded received: {len(workouts)} workouts, sync status: {sync_status}")
self.workouts = workouts self.workouts = workouts
self.sync_status = sync_status self.sync_status = sync_status
self.loading = False self.loading = False
@@ -351,7 +338,7 @@ Elevation Gain: {workout.get('elevation_gain_m', 'N/A')} m
self.populate_workouts_table() self.populate_workouts_table()
self.update_sync_status() self.update_sync_status()
except Exception as e: except Exception as e:
print(f"Error in on_workouts_loaded: {e}") self.log(f"Error in on_workouts_loaded: {e}", severity="error")
self.loading = False self.loading = False
self.refresh() self.refresh()