internal/resources/customcolumns.go
Rama main · réplica de lectura del repositorio original.
package resources
import (
"strings"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"github.com/sophotechlabs/spinoza/internal/api"
)
const maxCustomColumns = 8
type Columns func() map[string][]api.CustomColumn
func (m *Manager) customFor(desc api.ResourceDescriptor) []*declaredColumn {
if m.columns == nil {
return nil
}
held := m.columns()
if len(held) == 0 {
return nil
}
wanted := held[keyOf(desc)]
out := make([]*declaredColumn, 0, len(wanted))
for _, one := range wanted {
column, made := customColumnOf(one)
if !made {
continue
}
out = append(out, column)
if len(out) == maxCustomColumns {
break
}
}
return out
}
func customColumnOf(one api.CustomColumn) (*declaredColumn, bool) {
name := strings.TrimSpace(one.Name)
path := strings.TrimSpace(one.Path)
if name == "" || path == "" {
return nil, false
}
parsed, err := parsePath(name, path)
if err != nil {
return nil, false
}
column := &declaredColumn{name: name, template: path}
if !ranges(name, path) {
column.kept = parsed
}
return column, true
}
func withCustom(base layout, custom []*declaredColumn) layout {
if len(custom) == 0 {
return base
}
columns := make([]api.Column, 0, len(base.columns)+len(custom))
columns = append(columns, base.columns...)
for _, one := range custom {
columns = append(columns, api.Column{Name: one.name})
}
return layout{
columns: columns,
cells: func(obj *unstructured.Unstructured) []string {
out := base.cells(obj)
for at := range custom {
out = append(out, custom[at].read(obj))
}
return out
},
}
}