diff --git a/src/transcription/ui/components/table/common.py b/src/transcription/ui/components/table/common.py index 556c206..6c4e309 100644 --- a/src/transcription/ui/components/table/common.py +++ b/src/transcription/ui/components/table/common.py @@ -1,11 +1,14 @@ """Common logic for generating table widgets.""" +import logging from collections.abc import Callable from typing import Any from nicegui import events from nicegui import ui +logger = logging.getLogger(__name__) + def _extract_row_id(args: Any) -> str | None: if isinstance(args, dict): @@ -37,6 +40,7 @@ def _bind_row_click_handler( on_row_click_id(row_id) table.on("rowClick", handle_row_click) + logger.debug("Row click handler bound to table") def build_table( @@ -63,6 +67,7 @@ def build_table( .classes(classes) .props('table-style="table-layout: fixed; width: 100%;"') ) + logger.info("Table built with %d rows and %d columns", len(rows), len(columns)) if on_row_click_id is not None: _bind_row_click_handler(table, on_row_click_id=on_row_click_id) return table diff --git a/src/transcription/ui/pages/jobs_page.py b/src/transcription/ui/pages/jobs_page.py index a88669c..4227b2f 100644 --- a/src/transcription/ui/pages/jobs_page.py +++ b/src/transcription/ui/pages/jobs_page.py @@ -11,8 +11,6 @@ from transcription.app_state import resolve_session_factory from transcription.services.jobs import JobService from transcription.services.transcription import TranscriptionService from transcription.ui.components.app_shell import render_navigation_header -from transcription.ui.components.error_presenter import show_error -from transcription.ui.components.error_presenter import summarize_error from transcription.ui.components.job_detail import render_job_detail from transcription.ui.components.table.jobs import render_jobs_table @@ -27,8 +25,6 @@ def register_page() -> None: session_factory = resolve_session_factory(request.app.state) jobs_service = JobService(session_factory=session_factory) render_navigation_header(current_path="/jobs") - ui.label("Transcription Jobs") - status = ui.label("Ready") @ui.refreshable async def render_table() -> None: @@ -45,18 +41,8 @@ def register_page() -> None: ] render_jobs_table(jobs) - async def refresh() -> None: - status.text = "Refreshing..." - try: - await render_table.refresh() - status.text = "Refreshed" - except Exception as exc: # noqa: BLE001 - status.text = f"Refresh failed: {summarize_error(exc, operation='jobs.refresh')}" - show_error(exc, title="Jobs refresh failed", operation="jobs.refresh") - - ui.button("Refresh", on_click=refresh) + ui.button("Refresh", on_click=render_table.refresh, icon="refresh") await render_table() - ui.link("Back to upload", "/upload") @ui.page("/jobs/{job_id}") async def job_detail_page(job_id: str, request: Request) -> None: @@ -64,7 +50,7 @@ def register_page() -> None: jobs_service = JobService(session_factory=session_factory) transcription_service = TranscriptionService(session_factory=session_factory) render_navigation_header(current_path="/jobs") - ui.label("Job Detail") + ui.button(icon="arrow_back", on_click=ui.navigate.back) try: parsed_id = UUID(job_id) except ValueError: