pelican/internal/ui/init.go
Dan Anglin d532c86475
All checks were successful
/ test (pull_request) Successful in 29s
/ lint (pull_request) Successful in 3m48s
feat: add support for deleting status columns
Add support for deleting status columns. If a column is not empty then
it will not be deleted and the user will see an error message in the
status bar.

Part of apollo/pelican#24
2024-01-18 22:36:33 +00:00

130 lines
2.8 KiB
Go

package ui
import (
"fmt"
"github.com/gdamore/tcell/v2"
)
// initColumns initialises the columns of the Kanban board.
func (a *App) initColumns() error {
a.columnFlex.Clear()
statusList, err := a.board.StatusList()
if err != nil {
return fmt.Errorf("unable to retrieve the list of statuses; %w", err)
}
columns := make([]*column, len(statusList))
for i := range statusList {
column := newColumn(statusList[i].ID, statusList[i].Name, a.boardMode)
a.columnFlex.AddItem(column, 50, 1, true)
columns[i] = column
}
a.columns = columns
a.focusedColumn = 0
return nil
}
// initCardForm initialises the card form.
func (a *App) initCardForm() {
doneFunc := func(title, description string, success bool, mode formMode) {
if success {
switch mode {
case create:
a.saveCard(title, description)
case edit:
a.editFocusedCard(title, description)
}
}
a.pages.HidePage(cardFormPage)
a.setColumnFocus()
}
a.cardForm.setDoneFunc(doneFunc)
}
// initDeleteModal initialises the modal for deleting cards or statuses.
func (a *App) initDeleteModal() {
doneFunc := func(_ int, buttonLabel string) {
if buttonLabel == "Confirm" {
switch a.mode {
case normal:
a.deleteFocusedCard()
case boardEdit:
a.deleteFocusedStatusColumn()
}
}
a.pages.HidePage(deleteModalPage)
a.setColumnFocus()
}
a.deleteModal.AddButtons([]string{"Cancel", "Confirm"}).SetDoneFunc(doneFunc)
a.deleteModal.SetBorder(true).SetBorderColor(tcell.ColorOrangeRed)
a.deleteModal.SetBackgroundColor(tcell.ColorBlack.TrueColor())
a.deleteModal.SetButtonBackgroundColor(tcell.ColorBlueViolet.TrueColor())
a.deleteModal.SetTextColor(tcell.ColorWhite.TrueColor())
}
// initQuitModal initialises the quit modal.
func (a *App) initQuitModal() {
doneFunc := func(_ int, buttonLabel string) {
switch buttonLabel {
case "Quit":
a.shutdown()
default:
a.pages.HidePage(quitPage)
a.setColumnFocus()
}
}
a.quitModal.SetText("Do you want to quit the application?").
AddButtons([]string{"Quit", "Cancel"}).
SetDoneFunc(doneFunc)
}
// initCardView initialises the view window for displaying the card.
func (a *App) initCardView() {
doneFunc := func(key tcell.Key) {
if key == tcell.KeyEsc {
a.pages.HidePage(viewPage)
a.cardView.Clear()
a.setColumnFocus()
}
}
a.cardView.setDoneFunc(doneFunc)
}
// initStatusbar initialises the status bar.
func (a *App) initStatusbar() {
changedFunc := func() {
a.Draw()
}
a.statusbar.SetChangedFunc(changedFunc)
}
func (a *App) initStatusForm() {
doneFunc := func(name string, success bool, mode formMode) {
if success {
switch mode {
case create:
a.saveNewStatus(name)
case edit:
a.editFocusedStatusColumn(name)
}
}
a.pages.HidePage(statusFormPage)
a.setColumnFocus()
}
a.statusForm.setDoneFunc(doneFunc)
}