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  }