from typing import Any, Callable import library_api from dates import check_date from tui.content_pane import ContentPane from tui.dialogs import FormDialog, FormField class LibraryPane(ContentPane): reload_message = "Reloaded from the library" def __init__(self, **kwargs): super().__init__(**kwargs) self.border_title = f"[b]kitty[/b] {library_api.api_url()}/api/library" def load_entries(self, load: Callable[[], list[dict]]) -> list[dict]: try: return load() except (OSError, ValueError) as error: self.notify(str(error), title="Library", severity="error", timeout=10) return [] def edit_dates(self, title: str, entry: dict, save: Callable[[str | None, str | None], Any], focus_key: str): fields = [ FormField("started", "Started (YYYY-MM-DD, empty to clear)", value=entry.get("started", ""), placeholder="2026-01-31"), FormField("finished", "Finished (YYYY-MM-DD, empty to clear)", value=entry.get("finished", ""), placeholder="2026-02-14"), ] def saved(values: dict | None): if values is not None: self.run_now(lambda: save(check_date(values["started"]), check_date(values["finished"])), f"Saved dates for {title}", focus_key) self.app.push_screen(FormDialog(f"History for {title}", fields), saved)