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 }