| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- package grpcapi
- import (
- apiv1 "github.com/OliveTin/OliveTin/gen/grpc/olivetin/api/v1"
- config "github.com/OliveTin/OliveTin/internal/config"
- sv "github.com/OliveTin/OliveTin/internal/stringvariables"
- "golang.org/x/exp/slices"
- )
- func buildEntityFieldsets(entityTitle string, tpl *config.DashboardComponent, rr *DashboardRenderRequest) []*apiv1.DashboardComponent {
- ret := make([]*apiv1.DashboardComponent, 0)
- entityCount := sv.GetEntityCount(entityTitle)
- for i := range entityCount {
- fs := buildEntityFieldset(tpl, entityTitle, i, rr)
- if len(fs.Contents) > 0 {
- ret = append(ret, fs)
- }
- }
- return ret
- }
- func buildEntityFieldset(tpl *config.DashboardComponent, entityTitle string, entityIndex int, rr *DashboardRenderRequest) *apiv1.DashboardComponent {
- prefix := sv.GetEntityPrefix(entityTitle, entityIndex)
- return &apiv1.DashboardComponent{
- Title: sv.ReplaceEntityVars(prefix, tpl.Title),
- Type: "fieldset",
- Contents: removeFieldsetIfHasNoLinks(buildEntityFieldsetContents(tpl.Contents, prefix, rr)),
- CssClass: sv.ReplaceEntityVars(prefix, tpl.CssClass),
- }
- }
- func removeFieldsetIfHasNoLinks(contents []*apiv1.DashboardComponent) []*apiv1.DashboardComponent {
- for _, subitem := range contents {
- if subitem.Type == "link" {
- return contents
- }
- }
- return nil
- }
- func buildEntityFieldsetContents(contents []config.DashboardComponent, prefix string, rr *DashboardRenderRequest) []*apiv1.DashboardComponent {
- ret := make([]*apiv1.DashboardComponent, 0)
- for _, subitem := range contents {
- c := cloneItem(&subitem, prefix, rr)
- if c != nil {
- ret = append(ret, c)
- }
- }
- return ret
- }
- func cloneItem(subitem *config.DashboardComponent, prefix string, rr *DashboardRenderRequest) *apiv1.DashboardComponent {
- clone := &apiv1.DashboardComponent{}
- clone.CssClass = sv.ReplaceEntityVars(prefix, subitem.CssClass)
- if subitem.Type == "" || subitem.Type == "link" {
- clone.Type = "link"
- clone.Title = sv.ReplaceEntityVars(prefix, subitem.Title)
- if !slices.Contains(rr.AllowedActionTitles, clone.Title) {
- return nil
- }
- } else {
- clone.Title = sv.ReplaceEntityVars(prefix, subitem.Title)
- clone.Type = subitem.Type
- }
- return clone
- }
|