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()
|
|
}
|