from textual.app import ComposeResult from textual.containers import VerticalScroll from textual.screen import Screen from textual.widgets import DataTable, Header, Footer from hamstertools.db import HamsterActivity, ClockifyProject, HamsterClockifyMapping class ClockifyMappingScreen(Screen): """Screen for managing Clockify activity-project mappings""" BINDINGS = [("q", "quit", "Quit")] def compose(self) -> ComposeResult: yield Header() yield VerticalScroll(DataTable()) yield Footer() def on_mount(self) -> None: table = self.query_one(DataTable) table.add_columns("Hamster Activity", "Clockify Project") # Query all mappings mappings = (HamsterClockifyMapping .select() .join(HamsterActivity) .join(ClockifyProject)) for mapping in mappings: activity = f"{mapping.hamster_activity.category.name} ยป {mapping.hamster_activity.name}" project = mapping.clockify_project.name table.add_row(activity, project)