Files
2025-08-07 12:03:02 +01:00

32 lines
1.1 KiB
Python

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)