diff --git a/controllers/shopItemController.go b/controllers/shopItemController.go index 534f0a3..76973e9 100644 --- a/controllers/shopItemController.go +++ b/controllers/shopItemController.go @@ -432,15 +432,45 @@ func (rc *shopItemController) AddItemsHandler(c *gin.Context) { c.HTML(http.StatusOK, "batchupload.html", data) } -func (rc *shopItemController) EditItemView(c *gin.Context) { - shopItem, err := repositories.ShopItems.GetById(c.Param("id")) - tags, err := repositories.Tags.GetAll() +func GetCheckedTags(item models.ShopItem) ([]models.CheckedTag, error) { + allTags, err := repositories.Tags.GetAll() if err != nil { - c.HTML(http.StatusBadRequest, "edititem.html", gin.H{"error": err}) + return nil, err } - fmt.Println(shopItem) + var tags []models.CheckedTag + for _, tag := range allTags { + tmpTag := models.CheckedTag{ + Tag: tag, + Checked: "", + } + + for _, itemTag := range item.Tags { + if itemTag.Name == tmpTag.Name { + tmpTag.Checked = "checked" + break + } + } + + tags = append(tags, tmpTag) + } + + return tags, nil +} + +func (rc *shopItemController) EditItemView(c *gin.Context) { + shopItem, err := repositories.ShopItems.GetById(c.Param("id")) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + } + + tags, err := GetCheckedTags(shopItem) + + if err != nil { + c.HTML(http.StatusBadRequest, "error.html", gin.H{"error": err}) + } data := CreateSessionData(c, gin.H{ "error": "", @@ -489,7 +519,7 @@ func (rc *shopItemController) EditItemHandler(c *gin.Context) { newShopItem.PrintMode = shopItem.PrintMode - tags, err := repositories.Tags.GetAll() + tags, err := GetCheckedTags(newShopItem) if err != nil { c.HTML(http.StatusBadRequest, "edititem.html", gin.H{"error": err}) return @@ -498,9 +528,10 @@ func (rc *shopItemController) EditItemHandler(c *gin.Context) { _, err = repositories.ShopItems.Update(newShopItem) if err != nil { data := CreateSessionData(c, gin.H{ - "error": err, - "success": "", - "tags": tags, + "error": err, + "success": "", + "shopItem": newShopItem, + "tags": tags, }) c.HTML(http.StatusOK, "edititem.html", data) @@ -508,9 +539,10 @@ func (rc *shopItemController) EditItemHandler(c *gin.Context) { } data := CreateSessionData(c, gin.H{ - "error": "", - "success": fmt.Sprintf("Item '%s' Updated", newShopItem.Name), - "tags": tags, + "error": "", + "success": fmt.Sprintf("Item '%s' Updated", newShopItem.Name), + "shopItem": newShopItem, + "tags": tags, }) c.HTML(http.StatusOK, "edititem.html", data) diff --git a/models/tag.go b/models/tag.go index 3c0cef3..c1fac70 100644 --- a/models/tag.go +++ b/models/tag.go @@ -14,6 +14,11 @@ type Tag struct { ShopItems []ShopItem `gorm:"many2many:item_tags;"` } +type CheckedTag struct { + Tag + Checked string +} + func NewTag(ctx *gin.Context) (Tag, error) { colors := []string{ "red", diff --git a/views/edititem.html b/views/edititem.html index 86124f6..9557cce 100644 --- a/views/edititem.html +++ b/views/edititem.html @@ -37,7 +37,7 @@
{{ range .data.tags }} {{ end }}