diff --git a/pyproject.toml b/pyproject.toml index 78a74fa..b137e61 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -39,8 +39,8 @@ ktui = "kanban_tui.__main__:cli" [tool.pytest.ini_options] asyncio_mode = "auto" -asyncio_default_fixture_loop_scope = "function" -addopts = "--cov src/kanban_tui --cov-report term-missing --verbose --color=yes"# -n 4 --dist=loadgroup" +asyncio_default_fixture_loop_scope = "file" +addopts = "--cov src/kanban_tui --cov-report term-missing --verbose --color=yes -n 4 --dist=loadgroup" testpaths = ["tests"] [build-system] diff --git a/src/kanban_tui/assets/style.tcss b/src/kanban_tui/assets/style.tcss index fb5e639..b891d84 100644 --- a/src/kanban_tui/assets/style.tcss +++ b/src/kanban_tui/assets/style.tcss @@ -284,15 +284,26 @@ ModalBoardOverviewScreen { align:center middle; content-align:center middle; - Label{ + #label_header{ width:1fr; height: auto; text-align:center; + padding:0 0 1 0; - VerticalScroll{ - width:1fr; - height: auto; + } + BoardList{ + # border:outer $success; + } + BoardListItem{ + height:auto; + padding:1 0; + content-align:center middle; + + Label{ + text-align:left; } + + } Button { width: 1fr; diff --git a/src/kanban_tui/classes/board.py b/src/kanban_tui/classes/board.py index b3f90b9..16cf8a8 100644 --- a/src/kanban_tui/classes/board.py +++ b/src/kanban_tui/classes/board.py @@ -8,3 +8,7 @@ class Board(BaseModel): name: str icon: str | None = None creation_date: datetime = datetime.now().replace(microsecond=0) + + @property + def full_name(self): + return f"{self.icon} {self.name}" diff --git a/src/kanban_tui/modal/modal_board_screen.py b/src/kanban_tui/modal/modal_board_screen.py index f55df55..df619ec 100644 --- a/src/kanban_tui/modal/modal_board_screen.py +++ b/src/kanban_tui/modal/modal_board_screen.py @@ -48,7 +48,6 @@ def compose(self) -> Iterable[Widget]: validators=[ValidBoard()], id="input_board_name", ) - # yield CreationDateInfo() yield Label( f"Board created at: {datetime.now().replace(microsecond=0)}", id="label_create_date", @@ -105,6 +104,7 @@ class ModalBoardOverviewScreen(ModalScreen): BINDINGS = [ Binding("escape", "app.pop_screen", "Close"), Binding("n", "new_board", "New Board", show=True, priority=True), + Binding("e", "edit_board", "Edit Board", show=True, priority=True), ] def _on_mount(self, event: Mount) -> None: @@ -123,5 +123,12 @@ def compose(self) -> Iterable[Widget]: yield Footer(show_command_palette=False) return super().compose() + @on(Button.Pressed, "#btn_create_board") def action_new_board(self) -> None: self.app.push_screen(ModalNewBoardScreen(), callback=None) + + def action_edit_board(self) -> None: + highlighted_board = self.query_one(BoardList).highlighted_child.board + self.app.push_screen( + ModalNewBoardScreen(board=highlighted_board), callback=None + ) diff --git a/src/kanban_tui/utils.py b/src/kanban_tui/utils.py index 5620ded..82dd213 100644 --- a/src/kanban_tui/utils.py +++ b/src/kanban_tui/utils.py @@ -391,6 +391,10 @@ def create_demo_tasks(database_path: Path, config_path: Path): create_new_board_db( name="Demo Board No2", icon=":sparkles:", database=database_path ) + for i in range(3, 6): + create_new_board_db( + name=f"Demo Board No{i}", icon=":sparkles:", database=database_path + ) # Ready create_new_task_db( diff --git a/src/kanban_tui/widgets/modal_board_widgets.py b/src/kanban_tui/widgets/modal_board_widgets.py index 5c5deeb..d3aa6d9 100644 --- a/src/kanban_tui/widgets/modal_board_widgets.py +++ b/src/kanban_tui/widgets/modal_board_widgets.py @@ -3,7 +3,7 @@ if TYPE_CHECKING: from kanban_tui.app import KanbanTui -from textual.containers import VerticalScroll +from textual.binding import Binding from textual.widget import Widget from textual.widgets import ListView, ListItem, Label @@ -12,28 +12,34 @@ # Or use Datatable? -class BoardList(VerticalScroll): +class BoardList(ListView): app: "KanbanTui" - def compose(self) -> Iterable[Widget]: - self.id = "board_list" + BINDINGS = [ + Binding(key="j", action="cursor_down", show=False), + Binding(key="k", action="cursor_up", show=False), + ] - yield ListView( - *[BoardListItem(board=board) for board in self.app.board_list], - ) + def __init__(self) -> None: + children = [BoardListItem(board=board) for board in self.app.board_list] + initial_index = self.app.cfg.active_board - 1 - return super().compose() + super().__init__(*children, initial_index=initial_index, id="board_list") def on_mount(self): - self.query_one(ListView).index = None + self.focus() class BoardListItem(ListItem): + app: "KanbanTui" + def __init__(self, board: Board) -> None: self.board = board super().__init__(id=f"listitem_board_{self.board.board_id}") def compose(self) -> Iterable[Widget]: - yield Label(self.board.name) + if self.board.board_id == self.app.cfg.active_board: + self.styles.background = "green" + yield Label(self.board.full_name) return super().compose()