flamingo.me/flamingo-commerce/v3@v3.11.0/breadcrumbs/breadcrumbs.go (about) 1 package breadcrumbs 2 3 import ( 4 "context" 5 6 "flamingo.me/flamingo/v3/framework/web" 7 ) 8 9 type ( 10 // Crumb defines a breadcrumb 11 Crumb struct { 12 Title string 13 URL string 14 Code string 15 } 16 17 // Controller defines the data controller 18 Controller struct{} 19 20 contextKeyTyp string 21 ) 22 23 const requestKey contextKeyTyp = "breadcrumbs" 24 25 // Add a breadcrumb to the current context 26 func Add(ctx context.Context, b Crumb) { 27 req := web.RequestFromContext(ctx) 28 29 breadcrumbs, _ := req.Values.Load(requestKey) 30 if breadcrumbs, ok := breadcrumbs.([]Crumb); ok { 31 breadcrumbs = append(breadcrumbs, b) 32 req.Values.Store(requestKey, breadcrumbs) 33 } else { 34 req.Values.Store(requestKey, []Crumb{b}) 35 } 36 } 37 38 // Data controller 39 func (bc *Controller) Data(ctx context.Context, _ *web.Request, _ web.RequestParams) interface{} { 40 req := web.RequestFromContext(ctx) 41 42 breadcrumbs, _ := req.Values.Load(requestKey) 43 if breadcrumbs, ok := breadcrumbs.([]Crumb); ok { 44 return breadcrumbs 45 } 46 return []Crumb{} 47 }