From 6ac385e2cdff71b897cdd6d6e5fcafd900dd87fb Mon Sep 17 00:00:00 2001 From: Christian Rocha Date: Wed, 16 Nov 2022 17:38:02 -0500 Subject: [PATCH] chore(list): rework New() function to use functional arguments --- list/list.go | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/list/list.go b/list/list.go index 68d0f27..4d90588 100644 --- a/list/list.go +++ b/list/list.go @@ -179,8 +179,29 @@ type Model struct { delegate ItemDelegate } +type ListOption func(*Model) + +func WithSize(width, height int) ListOption { + return func(m *Model) { + m.width = width + m.height = height + } +} + +func WithItems(i ...Item) ListOption { + return func(m *Model) { + m.items = i + } +} + +func WithDelegate(d ItemDelegate) ListOption { + return func(m *Model) { + m.delegate = d + } +} + // New returns a new model with sensible defaults. -func New(items []Item, delegate ItemDelegate, width, height int) Model { +func New(opts ...ListOption) Model { styles := DefaultStyles() sp := spinner.New() @@ -215,15 +236,19 @@ func New(items []Item, delegate ItemDelegate, width, height int) Model { FilterInput: filterInput, StatusMessageLifetime: time.Second, - width: width, - height: height, - delegate: delegate, - items: items, Paginator: p, spinner: sp, Help: help.New(), } + for _, opt := range opts { + opt(&m) + } + + if m.delegate == nil { + m.delegate = NewDefaultDelegate() + } + m.updatePagination() m.updateKeybindings() return m