You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

166 lines
3.8 KiB

package shelves
import (
"fmt"
"git.brettb.xyz/goinv/client/internal/ui/dialogs"
"git.brettb.xyz/goinv/client/internal/ui/style"
)
func (a *Shelves) runCommand(cmd string) {
switch cmd {
case "create shelf":
a.createDialog.Display()
case "edit shelf":
a.cedit()
case "delete shelf":
a.cdelete()
case "refresh":
a.crefresh()
}
}
func (a *Shelves) cNotImplemented() {
a.displayError("not implemented", fmt.Errorf("this command has not been implemented"))
}
// Confirm deletion
func (a *Shelves) cdelete() {
selectedItem := a.getSelectedItem()
// Empty table
if selectedItem == nil {
a.displayError("DELETE SHELF ERROR", fmt.Errorf("no shelfs to delete"))
return
}
title := "delete shelf"
a.confirmDialog.SetTitle(title)
a.confirmData = status_CONFIRM_DELETE_SHELF
bgColor := style.GetColorHex(style.DialogSubBoxBorderColor)
fgColor := style.GetColorHex(style.DialogFgColor)
shelfName := fmt.Sprintf("[%s:%s:b]SHELF NAME:[:-:-] %s", fgColor, bgColor, selectedItem.name)
confirmMsg := fmt.Sprintf("%s\n%s\nAre you sure you want to delete the selected shelf ?", shelfName)
a.confirmDialog.SetText(confirmMsg)
a.confirmDialog.Display()
}
func (a *Shelves) cedit() {
selectedItem := a.getSelectedItem()
if selectedItem == nil {
a.displayError("SHELF EDIT ERROR", fmt.Errorf("no shelves to edit"))
return
}
shelf, err := a.client.RetrieveShelfByID(selectedItem.id)
if err != nil {
a.displayError("SHELF EDIT ERROR", fmt.Errorf("unable to retrieve shelf from server"))
return
}
a.editDialog.SetShelf(shelf)
a.editDialog.Display()
}
func (a *Shelves) edit() {
selectedItem := a.getSelectedItem()
createReq := a.editDialog.EditShelfOptions()
if createReq.Name == "" {
a.displayError("SHELF EDIT ERROR", fmt.Errorf("shelf name cannot be empty"))
return
}
if createReq.BuildingID == nil {
a.displayError("SHELF EDIT ERROR", fmt.Errorf("shelf building cannot be empty"))
return
}
_, err := a.client.UpdateShelf(selectedItem.id, createReq)
if err != nil {
a.displayError("SHELF EDIT ERROR", err)
return
}
a.crefresh()
}
func (a *Shelves) delete() {
selectedItem := a.getSelectedItem()
a.progressDialog.SetTitle(fmt.Sprintf("deleting shelf %s", selectedItem.id))
a.progressDialog.Display()
del := func() {
_, err := a.client.DeleteShelfByID(selectedItem.id)
a.progressDialog.Hide()
if err != nil {
a.displayError("DELETE SHELF ERROR", err)
return
}
// display success message
a.messageDialog.SetTitle(fmt.Sprintf("deleting shelf %s", selectedItem.id))
a.messageDialog.SetText(dialogs.MessageGeneric, "Success!", fmt.Sprintf("Shelf %s successfully deleted.", selectedItem.id))
a.messageDialog.Display()
a.UpdateShelfData()
}
del()
}
func (a *Shelves) crefresh() {
a.progressDialog.SetTitle("refreshing shelves")
a.progressDialog.Display()
ref := func() {
a.UpdateShelfData()
a.UpdateBuildingData()
a.progressDialog.Hide()
if !a.errorDialog.IsDisplay() {
a.messageDialog.SetTitle("shelf refresh")
a.messageDialog.SetText(dialogs.MessageGeneric, "Refreshed!", "Successfully refreshed page.")
a.messageDialog.Display()
}
}
ref()
}
func (a *Shelves) create() {
createReq := a.createDialog.CreateShelfOptions()
if createReq.Name == "" {
a.displayError("SHELF CREATE ERROR", fmt.Errorf("shelf name cannot be empty"))
return
}
if createReq.BuildingID == nil {
a.displayError("SHELF CREATE ERROR", fmt.Errorf("shelf building cannot be empty"))
return
}
_, err := a.client.CreateShelf(createReq)
if err != nil {
a.displayError("SHELF CREATE ERROR", err)
return
}
a.crefresh()
a.shelfTable.ScrollToEnd()
a.shelfTable.Select(a.shelfTable.GetRowCount(), 0)
}
func (a *Shelves) displayError(title string, err error) {
a.errorDialog.SetTitle(title)
a.errorDialog.SetText(fmt.Sprintf("%v", err))
a.errorDialog.Display()
}