diff --git a/types/types.go b/types/types.go index dc280d9..5dda7eb 100644 --- a/types/types.go +++ b/types/types.go @@ -129,6 +129,7 @@ type ( Label string `json:"label"` Value T `json:"value"` Parent T `json:"-"` + Used bool `json:"-"` Children []*TierValue[T] `json:"children"` } diff --git a/utils.go b/utils.go index 1712df6..c58ea33 100644 --- a/utils.go +++ b/utils.go @@ -48,11 +48,20 @@ func isEmpty(val any) bool { func recursiveTier[T any](parent T, values []*types.TierValue[T]) []*types.TierValue[T] { items := make([]*types.TierValue[T], 0, len(values)/2) - for _, row := range values { + for idx, row := range values { + if row.Used { + continue + } if reflect.DeepEqual(row.Parent, parent) { + values[idx].Used = true row.Children = recursiveTier(row.Value, values) items = append(items, row) } } + for _, row := range values { + if !row.Used { + items = append(items, row) + } + } return items }