flamingo.me/flamingo-commerce/v3@v3.11.0/category/application/breadcrumbservice.go (about)

     1  package application
     2  
     3  import (
     4  	"context"
     5  	"net/url"
     6  
     7  	"flamingo.me/flamingo-commerce/v3/breadcrumbs"
     8  	"flamingo.me/flamingo-commerce/v3/category/domain"
     9  	"flamingo.me/flamingo/v3/framework/web"
    10  )
    11  
    12  type (
    13  	// RouterRouter defines a interface for testing
    14  	RouterRouter interface {
    15  		URL(name string, params map[string]string) (*url.URL, error)
    16  	}
    17  
    18  	// BreadcrumbService struct
    19  	BreadcrumbService struct {
    20  		router RouterRouter
    21  	}
    22  )
    23  
    24  // Inject required dependencies
    25  func (bs *BreadcrumbService) Inject(router RouterRouter) {
    26  	bs.router = router
    27  }
    28  
    29  // AddBreadcrumb - add a breadcrumb based on a root category
    30  func (bs *BreadcrumbService) AddBreadcrumb(ctx context.Context, tree domain.Tree) {
    31  	if !tree.Active() {
    32  		return
    33  	}
    34  	if tree.Code() != "" {
    35  		u, _ := bs.router.URL(URLWithName(tree.Code(), web.URLTitle(tree.Name())))
    36  		breadcrumbs.Add(ctx, breadcrumbs.Crumb{
    37  			Title: tree.Name(),
    38  			URL:   u.String(),
    39  			Code:  tree.Code(),
    40  		})
    41  	}
    42  
    43  	for _, subcat := range tree.SubTrees() {
    44  		bs.AddBreadcrumb(ctx, subcat)
    45  	}
    46  }