65 lines
1.2 KiB
Go
65 lines
1.2 KiB
Go
package aeusadmin
|
|
|
|
import "git.nobla.cn/golang/aeus-admin/models"
|
|
|
|
type (
|
|
menuOptions struct {
|
|
icon string
|
|
position int
|
|
public bool
|
|
hidden bool
|
|
description string
|
|
}
|
|
|
|
MenuOption func(o *menuOptions)
|
|
)
|
|
|
|
func WithMenuIcon(icon string) MenuOption {
|
|
return func(o *menuOptions) {
|
|
o.icon = icon
|
|
}
|
|
}
|
|
|
|
func WithMenuPosition(position int) MenuOption {
|
|
return func(o *menuOptions) {
|
|
o.position = position
|
|
}
|
|
}
|
|
|
|
func WithMenuPublic(public bool) MenuOption {
|
|
return func(o *menuOptions) {
|
|
o.public = public
|
|
}
|
|
}
|
|
|
|
func WithMenuHidden(hidden bool) MenuOption {
|
|
return func(o *menuOptions) {
|
|
o.hidden = hidden
|
|
}
|
|
}
|
|
|
|
func WithMenuDescription(description string) MenuOption {
|
|
return func(o *menuOptions) {
|
|
o.description = description
|
|
}
|
|
}
|
|
|
|
func NewMenu(label string, name string, parent string, uri string, viewPath string, cbs ...MenuOption) *models.Menu {
|
|
opts := &menuOptions{}
|
|
for _, cb := range cbs {
|
|
cb(opts)
|
|
}
|
|
model := &models.Menu{}
|
|
model.Name = name
|
|
model.Label = label
|
|
model.Parent = parent
|
|
model.Uri = uri
|
|
model.ViewPath = viewPath
|
|
model.Public = opts.public
|
|
model.Position = int64(opts.position)
|
|
model.Icon = opts.icon
|
|
model.Hidden = opts.hidden
|
|
model.Description = opts.description
|
|
return model
|
|
}
|