package components import ( "github.com/fthvgb1/wp-go/app/pkg/constraints" "github.com/fthvgb1/wp-go/app/theme/wp" "github.com/fthvgb1/wp-go/app/theme/wp/components/widget" "github.com/fthvgb1/wp-go/app/wpconfig" "github.com/fthvgb1/wp-go/helper/slice" str "github.com/fthvgb1/wp-go/helper/strings" "strings" ) var widgetFn = map[string]widgetComponent{ "search": {fn: widget.Search, name: "widget.search"}, "recent-posts": {fn: widget.RecentPosts, name: "widget.recent-posts"}, "recent-comments": {fn: widget.RecentComments, name: "widget.recent-comments"}, "archives": {fn: widget.Archive, name: "widget.archives"}, "categories": {fn: widget.Category, name: "widget.categories"}, "meta": {fn: widget.Meta, name: "widget.meta", cached: true}, } type widgetComponent struct { fn func(h *wp.Handle, id string) string cached bool name string } func WidgetArea(h *wp.Handle) { h.PushComponents(constraints.AllScene, constraints.SidebarsWidgets, sidebars()...) } func sidebars() []wp.Components[string] { v := wpconfig.GetPHPArrayVal("sidebars_widgets", []any{}, "sidebar-1") var i = 10.5 return slice.FilterAndMap(v, func(t any) (wp.Components[string], bool) { vv := t.(string) ss := strings.Split(vv, "-") id := ss[len(ss)-1] name := strings.Join(ss[0:len(ss)-1], "-") widgetComponents, ok := widgetFn[name] if name != "block" && !ok { return wp.Components[string]{}, false } var component wp.Components[string] if name == "block" { fn, fnName := Block(id) if fn == nil { return component, false } component.Fn = fn component.Name = str.Join("block.", fnName) } else { component.Fn = widget.Fn(id, widgetComponents.fn) component.Name = widgetComponents.name component.Cached = widgetComponents.cached } i -= 0.001 component.Order = i return component, true }) }