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