From e961bfc756cdb0398d91fce0c3682cf9b585759f Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Thu, 11 Jan 2024 09:47:51 +0000 Subject: [PATCH] refactor: add methods to get focused object's ID Created extra methods to get the IDs of the card or status in focus in order to reduce repeated code. --- internal/ui/ui.go | 58 +++++++++++++++++++++++++++++++---------------- 1 file changed, 38 insertions(+), 20 deletions(-) diff --git a/internal/ui/ui.go b/internal/ui/ui.go index d141039..b9cbbd6 100644 --- a/internal/ui/ui.go +++ b/internal/ui/ui.go @@ -103,17 +103,14 @@ func (u *UI) init() error { } case letter == 'm': if u.mode == normal { - focusedCard := u.columns[u.focusedColumn].focusedCard - u.statusSelection.cardID = u.columns[u.focusedColumn].cards[focusedCard].id - u.statusSelection.currentStatusID = u.columns[u.focusedColumn].statusID + u.statusSelection.cardID = u.focusedCardID() + u.statusSelection.currentStatusID = u.focusedStatusID() u.mode = selection } case letter == 'e': if u.mode == normal { u.cardModal.mode = edit - focusedCard := u.columns[u.focusedColumn].focusedCard - cardID := u.columns[u.focusedColumn].cards[focusedCard].id - card, _ := u.board.Card(cardID) + card, _ := u.getFocusedCard() u.cardModal.updateInputFields(card.Title, card.Description) u.cardModal.frame.SetTitle(" Edit Card ") u.pages.ShowPage(cardModalPage) @@ -135,7 +132,7 @@ func (u *UI) init() error { } case key == tcell.KeyEnter: if u.mode == selection { - u.statusSelection.nextStatusID = u.columns[u.focusedColumn].statusID + u.statusSelection.nextStatusID = u.focusedStatusID() if u.statusSelection.currentStatusID != u.statusSelection.nextStatusID { u.statusSelection.moveCard(u.board) } @@ -176,9 +173,7 @@ func (u *UI) initCardModal() { case create: _ = u.newCard(title, description) case edit: - focusedCard := u.columns[u.focusedColumn].focusedCard - cardID := u.columns[u.focusedColumn].cards[focusedCard].id - _ = u.editCard(cardID, title, description) + _ = u.editFocusedCard(title, description) } } @@ -193,7 +188,7 @@ func (u *UI) initCardModal() { func (u *UI) initDeleteCardModal() { doneFunc := func(_ int, buttonLabel string) { if buttonLabel == "Confirm" { - u.deleteCard() + u.deleteFocusedCard() _ = u.refresh(true) } @@ -239,8 +234,10 @@ func (u *UI) newCard(title, description string) error { return nil } -// editCard saves and edited card to the database. -func (u *UI) editCard(cardID int, title, description string) error { +// editFocusedCard saves and edited card to the database. +func (u *UI) editFocusedCard(title, description string) error { + cardID := u.focusedCardID() + args := board.UpdateCardArgs{ CardID: cardID, CardArgs: board.CardArgs{ @@ -258,15 +255,23 @@ func (u *UI) editCard(cardID int, title, description string) error { return nil } -// deleteCard deletes a card from the board. -func (u *UI) deleteCard() { - statusID := u.columns[u.focusedColumn].statusID - focusedCard := u.columns[u.focusedColumn].focusedCard - cardID := u.columns[u.focusedColumn].cards[focusedCard].id +// getFocusedCard retrieves the details of the focused card. +func (u *UI) getFocusedCard() (board.Card, error) { + cardID := u.focusedCardID() + card, err := u.board.Card(cardID) + if err != nil { + return board.Card{}, fmt.Errorf("unable to retrieve the card with card ID %d, %w", cardID, err) + } + + return card, nil +} + +// deleteFocusedCard deletes the focused card from the board. +func (u *UI) deleteFocusedCard() { args := board.DeleteCardArgs{ - CardID: cardID, - StatusID: statusID, + CardID: u.focusedCardID(), + StatusID: u.focusedStatusID(), } _ = u.board.DeleteCard(args) @@ -362,3 +367,16 @@ func (u *UI) shutdown() { func (u *UI) boardMode() boardMode { return u.mode } + +// focusedCardID returns the ID of the card in focus. +func (u *UI) focusedCardID() int { + focusedCard := u.columns[u.focusedColumn].focusedCard + id := u.columns[u.focusedColumn].cards[focusedCard].id + + return id +} + +// focusedStatusID returns the ID of thestatus (column) in focus. +func (u *UI) focusedStatusID() int { + return u.columns[u.focusedColumn].statusID +}