Skip to content

Commit 6b0eac5

Browse files
Fix multi-table pager display
1 parent 66226f5 commit 6b0eac5

File tree

7 files changed

+129
-171
lines changed

7 files changed

+129
-171
lines changed

internal/cmd/beta/server/describe/describe.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
125125

126126
return nil
127127
default:
128+
content := []tables.Table{}
129+
128130
table := tables.NewTable()
129131
table.SetTitle("Server")
130132

@@ -182,10 +184,7 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
182184
table.AddSeparator()
183185
}
184186

185-
err := table.Display(p)
186-
if err != nil {
187-
return fmt.Errorf("render table: %w", err)
188-
}
187+
content = append(content, table)
189188

190189
if server.Nics != nil && len(*server.Nics) > 0 {
191190
nicsTable := tables.NewTable()
@@ -201,10 +200,12 @@ func outputResult(p *print.Printer, model *inputModel, server *iaas.Server) erro
201200
nicsTable.AddSeparator()
202201
}
203202

204-
err := nicsTable.Display(p)
205-
if err != nil {
206-
return fmt.Errorf("render table: %w", err)
207-
}
203+
content = append(content, nicsTable)
204+
}
205+
206+
err := tables.DisplayTables(p, content)
207+
if err != nil {
208+
return fmt.Errorf("render table: %w", err)
208209
}
209210

210211
return nil

internal/cmd/beta/sqlserverflex/options/options.go

Lines changed: 32 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -300,120 +300,96 @@ func outputResult(p *print.Printer, model *inputModel, flavors *sqlserverflex.Li
300300
}
301301

302302
func outputResultAsTable(p *print.Printer, model *inputModel, options *options) error {
303-
content := ""
304-
if model.Flavors {
305-
content += renderFlavors(*options.Flavors)
303+
content := []tables.Table{}
304+
if model.Flavors && len(*options.Flavors) != 0 {
305+
content = append(content, buildFlavorsTable(*options.Flavors))
306306
}
307-
if model.Versions {
308-
content += renderVersions(*options.Versions)
307+
if model.Versions && len(*options.Versions) != 0 {
308+
content = append(content, buildVersionsTable(*options.Versions))
309309
}
310-
if model.Storages {
311-
content += renderStorages(options.Storages.Storages)
310+
if model.Storages && options.Storages.Storages != nil && len(*options.Storages.Storages.StorageClasses) != 0 {
311+
storagesTable := buildStoragesTable(*options.Storages.Storages.StorageClasses, *options.Storages.Storages.StorageRange.Min, *options.Storages.Storages.StorageRange.Max)
312+
content = append(content, storagesTable)
312313
}
313-
if model.UserRoles {
314-
content += renderUserRoles(options.UserRoles)
314+
if model.UserRoles && len(options.UserRoles.UserRoles) != 0 {
315+
content = append(content, buildUserRoles(options.UserRoles))
315316
}
316-
if model.DBCompatibilities {
317-
content += renderDBCompatibilities(options.DBCompatibilities)
317+
if model.DBCompatibilities && len(options.DBCompatibilities.DBCompatibilities) != 0 {
318+
content = append(content, buildDBCompatibilitiesTable(options.DBCompatibilities.DBCompatibilities))
318319
}
319320
// Rendered at last because table is very long
320-
if model.DBCollations {
321-
content += renderDBCollations(options.DBCollations)
321+
if model.DBCollations && len(options.DBCollations.DBCollations) != 0 {
322+
content = append(content, buildDBCollationsTable(options.DBCollations.DBCollations))
322323
}
323324

324-
err := p.PagerDisplay(content)
325+
err := tables.DisplayTables(p, content)
325326
if err != nil {
326327
return fmt.Errorf("display output: %w", err)
327328
}
328329

329330
return nil
330331
}
331332

332-
func renderFlavors(flavors []sqlserverflex.InstanceFlavorEntry) string {
333-
if len(flavors) == 0 {
334-
return ""
335-
}
336-
333+
func buildFlavorsTable(flavors []sqlserverflex.InstanceFlavorEntry) tables.Table {
337334
table := tables.NewTable()
338335
table.SetTitle("Flavors")
339336
table.SetHeader("ID", "CPU", "MEMORY", "DESCRIPTION", "VALID INSTANCE TYPES")
340337
for i := range flavors {
341338
f := flavors[i]
342339
table.AddRow(*f.Id, *f.Cpu, *f.Memory, *f.Description, *f.Categories)
343340
}
344-
return table.Render()
341+
return table
345342
}
346343

347-
func renderVersions(versions []string) string {
348-
if len(versions) == 0 {
349-
return ""
350-
}
351-
344+
func buildVersionsTable(versions []string) tables.Table {
352345
table := tables.NewTable()
353346
table.SetTitle("Versions")
354347
table.SetHeader("VERSION")
355348
for i := range versions {
356349
v := versions[i]
357350
table.AddRow(v)
358351
}
359-
return table.Render()
352+
return table
360353
}
361354

362-
func renderStorages(resp *sqlserverflex.ListStoragesResponse) string {
363-
if resp.StorageClasses == nil || len(*resp.StorageClasses) == 0 {
364-
return ""
365-
}
366-
storageClasses := *resp.StorageClasses
367-
355+
func buildStoragesTable(storageClasses []string, min, max int64) tables.Table {
368356
table := tables.NewTable()
369357
table.SetTitle("Storages")
370358
table.SetHeader("MINIMUM", "MAXIMUM", "STORAGE CLASS")
371359
for i := range storageClasses {
372360
sc := storageClasses[i]
373-
table.AddRow(*resp.StorageRange.Min, *resp.StorageRange.Max, sc)
361+
table.AddRow(min, max, sc)
374362
}
375363
table.EnableAutoMergeOnColumns(1, 2, 3)
376-
return table.Render()
364+
return table
377365
}
378366

379-
func renderUserRoles(roles *instanceUserRoles) string {
380-
if len(roles.UserRoles) == 0 {
381-
return ""
382-
}
383-
367+
func buildUserRoles(roles *instanceUserRoles) tables.Table {
384368
table := tables.NewTable()
385369
table.SetTitle("User Roles")
386370
table.SetHeader("ROLE")
387371
for i := range roles.UserRoles {
388372
table.AddRow(roles.UserRoles[i])
389373
}
390-
return table.Render()
374+
return table
391375
}
392376

393-
func renderDBCollations(dbCollations *instanceDBCollations) string {
394-
if len(dbCollations.DBCollations) == 0 {
395-
return ""
396-
}
397-
377+
func buildDBCollationsTable(dbCollations []sqlserverflex.MssqlDatabaseCollation) tables.Table {
398378
table := tables.NewTable()
399379
table.SetTitle("DB Collations")
400380
table.SetHeader("NAME", "DESCRIPTION")
401-
for i := range dbCollations.DBCollations {
402-
table.AddRow(*dbCollations.DBCollations[i].CollationName, *dbCollations.DBCollations[i].Description)
381+
for i := range dbCollations {
382+
table.AddRow(dbCollations[i].CollationName, dbCollations[i].Description)
403383
}
404-
return table.Render()
384+
return table
405385
}
406386

407-
func renderDBCompatibilities(dbCompatibilities *instanceDBCompatibilities) string {
408-
if len(dbCompatibilities.DBCompatibilities) == 0 {
409-
return ""
410-
}
411-
387+
func buildDBCompatibilitiesTable(dbCompatibilities []sqlserverflex.MssqlDatabaseCompatibility) tables.Table {
412388
table := tables.NewTable()
413389
table.SetTitle("DB Compatibilities")
414390
table.SetHeader("COMPATIBILITY LEVEL", "DESCRIPTION")
415-
for i := range dbCompatibilities.DBCompatibilities {
416-
table.AddRow(*dbCompatibilities.DBCompatibilities[i].CompatibilityLevel, *dbCompatibilities.DBCompatibilities[i].Description)
391+
for i := range dbCompatibilities {
392+
table.AddRow(dbCompatibilities[i].CompatibilityLevel, dbCompatibilities[i].Description)
417393
}
418-
return table.Render()
394+
return table
419395
}

internal/cmd/load-balancer/describe/describe.go

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -121,25 +121,27 @@ func outputResult(p *print.Printer, outputFormat string, loadBalancer *loadbalan
121121
}
122122

123123
func outputResultAsTable(p *print.Printer, loadBalancer *loadbalancer.LoadBalancer) error {
124-
content := renderLoadBalancer(loadBalancer)
124+
content := []tables.Table{}
125+
126+
content = append(content, buildLoadBalancerTable(loadBalancer))
125127

126128
if loadBalancer.Listeners != nil {
127-
content += renderListeners(*loadBalancer.Listeners)
129+
content = append(content, buildListenersTable(*loadBalancer.Listeners))
128130
}
129131

130132
if loadBalancer.TargetPools != nil {
131-
content += renderTargetPools(*loadBalancer.TargetPools)
133+
content = append(content, buildTargetPoolsTable(*loadBalancer.TargetPools))
132134
}
133135

134-
err := p.PagerDisplay(content)
136+
err := tables.DisplayTables(p, content)
135137
if err != nil {
136138
return fmt.Errorf("display output: %w", err)
137139
}
138140

139141
return nil
140142
}
141143

142-
func renderLoadBalancer(loadBalancer *loadbalancer.LoadBalancer) string {
144+
func buildLoadBalancerTable(loadBalancer *loadbalancer.LoadBalancer) tables.Table {
143145
acl := []string{}
144146
privateAccessOnly := false
145147
if loadBalancer.Options != nil {
@@ -187,26 +189,26 @@ func renderLoadBalancer(loadBalancer *loadbalancer.LoadBalancer) string {
187189
table.AddRow("ATTACHED NETWORK ID", networkId)
188190
table.AddSeparator()
189191
table.AddRow("ACL", acl)
190-
return table.Render()
192+
return table
191193
}
192194

193-
func renderListeners(listeners []loadbalancer.Listener) string {
195+
func buildListenersTable(listeners []loadbalancer.Listener) tables.Table {
194196
table := tables.NewTable()
195197
table.SetTitle("Listeners")
196198
table.SetHeader("NAME", "PORT", "PROTOCOL", "TARGET POOL")
197199
for i := range listeners {
198200
listener := listeners[i]
199201
table.AddRow(*listener.Name, *listener.Port, *listener.Protocol, *listener.TargetPool)
200202
}
201-
return table.Render()
203+
return table
202204
}
203205

204-
func renderTargetPools(targetPools []loadbalancer.TargetPool) string {
206+
func buildTargetPoolsTable(targetPools []loadbalancer.TargetPool) tables.Table {
205207
table := tables.NewTable()
206208
table.SetTitle("Target Pools")
207209
table.SetHeader("NAME", "PORT", "TARGETS")
208210
for _, targetPool := range targetPools {
209211
table.AddRow(*targetPool.Name, *targetPool.TargetPort, len(*targetPool.Targets))
210212
}
211-
return table.Render()
213+
return table
212214
}

internal/cmd/mongodbflex/options/options.go

Lines changed: 16 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -206,68 +206,56 @@ func outputResult(p *print.Printer, model *inputModel, flavors *mongodbflex.List
206206
}
207207

208208
func outputResultAsTable(p *print.Printer, model *inputModel, options *options) error {
209-
content := ""
210-
if model.Flavors {
211-
content += renderFlavors(*options.Flavors)
209+
content := []tables.Table{}
210+
if model.Flavors && len(*options.Flavors) != 0 {
211+
content = append(content, buildFlavorsTable(*options.Flavors))
212212
}
213-
if model.Versions {
214-
content += renderVersions(*options.Versions)
213+
if model.Versions && len(*options.Versions) != 0 {
214+
content = append(content, buildVersionsTable(*options.Versions))
215215
}
216-
if model.Storages {
217-
content += renderStorages(options.Storages.Storages)
216+
if model.Storages && options.Storages.Storages != nil && len(*options.Storages.Storages.StorageClasses) == 0 {
217+
storagesTable := buildStoragesTable(*options.Storages.Storages.StorageClasses, *options.Storages.Storages.StorageRange.Min, *options.Storages.Storages.StorageRange.Max)
218+
content = append(content, storagesTable)
218219
}
219220

220-
err := p.PagerDisplay(content)
221+
err := tables.DisplayTables(p, content)
221222
if err != nil {
222223
return fmt.Errorf("display output: %w", err)
223224
}
224225

225226
return nil
226227
}
227228

228-
func renderFlavors(flavors []mongodbflex.HandlersInfraFlavor) string {
229-
if len(flavors) == 0 {
230-
return ""
231-
}
232-
229+
func buildFlavorsTable(flavors []mongodbflex.HandlersInfraFlavor) tables.Table {
233230
table := tables.NewTable()
234231
table.SetTitle("Flavors")
235232
table.SetHeader("ID", "CPU", "MEMORY", "DESCRIPTION", "VALID INSTANCE TYPES")
236233
for i := range flavors {
237234
f := flavors[i]
238235
table.AddRow(*f.Id, *f.Cpu, *f.Memory, *f.Description, *f.Categories)
239236
}
240-
return table.Render()
237+
return table
241238
}
242239

243-
func renderVersions(versions []string) string {
244-
if len(versions) == 0 {
245-
return ""
246-
}
247-
240+
func buildVersionsTable(versions []string) tables.Table {
248241
table := tables.NewTable()
249242
table.SetTitle("Versions")
250243
table.SetHeader("VERSION")
251244
for i := range versions {
252245
v := versions[i]
253246
table.AddRow(v)
254247
}
255-
return table.Render()
248+
return table
256249
}
257250

258-
func renderStorages(resp *mongodbflex.ListStoragesResponse) string {
259-
if resp.StorageClasses == nil || len(*resp.StorageClasses) == 0 {
260-
return ""
261-
}
262-
storageClasses := *resp.StorageClasses
263-
251+
func buildStoragesTable(storageClasses []string, min, max int64) tables.Table {
264252
table := tables.NewTable()
265253
table.SetTitle("Storages")
266254
table.SetHeader("MINIMUM", "MAXIMUM", "STORAGE CLASS")
267255
for i := range storageClasses {
268256
sc := storageClasses[i]
269-
table.AddRow(*resp.StorageRange.Min, *resp.StorageRange.Max, sc)
257+
table.AddRow(min, max, sc)
270258
}
271259
table.EnableAutoMergeOnColumns(1, 2, 3)
272-
return table.Render()
260+
return table
273261
}

0 commit comments

Comments
 (0)