generated from john/python-template
page tweaks
This commit is contained in:
@@ -1,11 +1,14 @@
|
|||||||
"""Common logic for generating table widgets."""
|
"""Common logic for generating table widgets."""
|
||||||
|
|
||||||
|
import logging
|
||||||
from collections.abc import Callable
|
from collections.abc import Callable
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from nicegui import events
|
from nicegui import events
|
||||||
from nicegui import ui
|
from nicegui import ui
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
def _extract_row_id(args: Any) -> str | None:
|
def _extract_row_id(args: Any) -> str | None:
|
||||||
if isinstance(args, dict):
|
if isinstance(args, dict):
|
||||||
@@ -37,6 +40,7 @@ def _bind_row_click_handler(
|
|||||||
on_row_click_id(row_id)
|
on_row_click_id(row_id)
|
||||||
|
|
||||||
table.on("rowClick", handle_row_click)
|
table.on("rowClick", handle_row_click)
|
||||||
|
logger.debug("Row click handler bound to table")
|
||||||
|
|
||||||
|
|
||||||
def build_table(
|
def build_table(
|
||||||
@@ -63,6 +67,7 @@ def build_table(
|
|||||||
.classes(classes)
|
.classes(classes)
|
||||||
.props('table-style="table-layout: fixed; width: 100%;"')
|
.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:
|
if on_row_click_id is not None:
|
||||||
_bind_row_click_handler(table, on_row_click_id=on_row_click_id)
|
_bind_row_click_handler(table, on_row_click_id=on_row_click_id)
|
||||||
return table
|
return table
|
||||||
|
|||||||
@@ -11,8 +11,6 @@ from transcription.app_state import resolve_session_factory
|
|||||||
from transcription.services.jobs import JobService
|
from transcription.services.jobs import JobService
|
||||||
from transcription.services.transcription import TranscriptionService
|
from transcription.services.transcription import TranscriptionService
|
||||||
from transcription.ui.components.app_shell import render_navigation_header
|
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.job_detail import render_job_detail
|
||||||
from transcription.ui.components.table.jobs import render_jobs_table
|
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)
|
session_factory = resolve_session_factory(request.app.state)
|
||||||
jobs_service = JobService(session_factory=session_factory)
|
jobs_service = JobService(session_factory=session_factory)
|
||||||
render_navigation_header(current_path="/jobs")
|
render_navigation_header(current_path="/jobs")
|
||||||
ui.label("Transcription Jobs")
|
|
||||||
status = ui.label("Ready")
|
|
||||||
|
|
||||||
@ui.refreshable
|
@ui.refreshable
|
||||||
async def render_table() -> None:
|
async def render_table() -> None:
|
||||||
@@ -45,18 +41,8 @@ def register_page() -> None:
|
|||||||
]
|
]
|
||||||
render_jobs_table(jobs)
|
render_jobs_table(jobs)
|
||||||
|
|
||||||
async def refresh() -> None:
|
ui.button("Refresh", on_click=render_table.refresh, icon="refresh")
|
||||||
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)
|
|
||||||
await render_table()
|
await render_table()
|
||||||
ui.link("Back to upload", "/upload")
|
|
||||||
|
|
||||||
@ui.page("/jobs/{job_id}")
|
@ui.page("/jobs/{job_id}")
|
||||||
async def job_detail_page(job_id: str, request: Request) -> None:
|
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)
|
jobs_service = JobService(session_factory=session_factory)
|
||||||
transcription_service = TranscriptionService(session_factory=session_factory)
|
transcription_service = TranscriptionService(session_factory=session_factory)
|
||||||
render_navigation_header(current_path="/jobs")
|
render_navigation_header(current_path="/jobs")
|
||||||
ui.label("Job Detail")
|
ui.button(icon="arrow_back", on_click=ui.navigate.back)
|
||||||
try:
|
try:
|
||||||
parsed_id = UUID(job_id)
|
parsed_id = UUID(job_id)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
|
|||||||
Reference in New Issue
Block a user