diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2020-02-14 22:07:56 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2020-02-15 08:47:36 +1100 |
commit | 814a0ea36f9f2e2d438ccb43a76402fe0479421b (patch) | |
tree | af332966e36e807f10242b5a6a05a0e8ceb0ac28 /pkg/utils | |
parent | 71e018a3dd01af4cb12c18b2e73ed34d6ce3b010 (diff) |
begin refactor of menu panel
Diffstat (limited to 'pkg/utils')
-rw-r--r-- | pkg/utils/utils.go | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/pkg/utils/utils.go b/pkg/utils/utils.go index 26d1b9021..093f8069e 100644 --- a/pkg/utils/utils.go +++ b/pkg/utils/utils.go @@ -151,14 +151,14 @@ func renderDisplayableList(items []Displayable, isFocused bool) (string, error) stringArrays := getDisplayStringArrays(items, isFocused) - if !displayArraysAligned(stringArrays) { - return "", errors.New("Each item must return the same number of strings to display") - } + return RenderDisplayStrings(stringArrays), nil +} - padWidths := getPadWidths(stringArrays) - paddedDisplayStrings := getPaddedDisplayStrings(stringArrays, padWidths) +func RenderDisplayStrings(displayStringsArr [][]string) string { + padWidths := getPadWidths(displayStringsArr) + paddedDisplayStrings := getPaddedDisplayStrings(displayStringsArr, padWidths) - return strings.Join(paddedDisplayStrings, "\n"), nil + return strings.Join(paddedDisplayStrings, "\n") } // Decolorise strips a string of color @@ -168,10 +168,13 @@ func Decolorise(str string) string { } func getPadWidths(stringArrays [][]string) []int { - if len(stringArrays[0]) <= 1 { - return []int{} + maxWidth := 0 + for _, stringArray := range stringArrays { + if len(stringArray) > maxWidth { + maxWidth = len(stringArray) + } } - padWidths := make([]int, len(stringArrays[0])-1) + padWidths := make([]int, maxWidth-1) for i := range padWidths { for _, strings := range stringArrays { uncoloredString := Decolorise(strings[i]) @@ -190,8 +193,14 @@ func getPaddedDisplayStrings(stringArrays [][]string, padWidths []int) []string continue } for j, padWidth := range padWidths { + if len(stringArray)-1 < j { + continue + } paddedDisplayStrings[i] += WithPadding(stringArray[j], padWidth) + " " } + if len(stringArray)-1 < len(padWidths) { + continue + } paddedDisplayStrings[i] += stringArray[len(padWidths)] } return paddedDisplayStrings |