|
@@ -1,57 +0,0 @@
|
|
|
-package picker
|
|
|
|
|
-
|
|
|
|
|
-import (
|
|
|
|
|
- "github.com/rivo/tview"
|
|
|
|
|
- "github.com/sahilm/fuzzy"
|
|
|
|
|
-)
|
|
|
|
|
-
|
|
|
|
|
-type Picker struct {
|
|
|
|
|
- *tview.Flex
|
|
|
|
|
- Input *tview.InputField
|
|
|
|
|
- List *tview.List
|
|
|
|
|
-
|
|
|
|
|
- app *tview.Application
|
|
|
|
|
- items Items
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func New(app *tview.Application, items Items) *Picker {
|
|
|
|
|
- p := &Picker{
|
|
|
|
|
- Flex: tview.NewFlex(),
|
|
|
|
|
- Input: tview.NewInputField(),
|
|
|
|
|
- List: tview.NewList(),
|
|
|
|
|
-
|
|
|
|
|
- app: app,
|
|
|
|
|
- items: items,
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // Render all of the items initially.
|
|
|
|
|
- p.changed("")
|
|
|
|
|
-
|
|
|
|
|
- p.Input.SetChangedFunc(p.changed)
|
|
|
|
|
- p.List.ShowSecondaryText(false).SetFocusFunc(func() {
|
|
|
|
|
- app.SetFocus(p.Input)
|
|
|
|
|
- })
|
|
|
|
|
- p.Flex.
|
|
|
|
|
- SetDirection(tview.FlexRow).
|
|
|
|
|
- AddItem(p.Input, 3, 1, true).
|
|
|
|
|
- AddItem(p.List, 0, 1, false)
|
|
|
|
|
- return p
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (p *Picker) changed(text string) {
|
|
|
|
|
- var fuzzied Items
|
|
|
|
|
- if text == "" {
|
|
|
|
|
- fuzzied = append(fuzzied, p.items...)
|
|
|
|
|
- } else {
|
|
|
|
|
- matches := fuzzy.FindFrom(text, p.items)
|
|
|
|
|
- for _, match := range matches {
|
|
|
|
|
- fuzzied = append(fuzzied, p.items[match.Index])
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- p.List.Clear()
|
|
|
|
|
-
|
|
|
|
|
- for _, item := range fuzzied {
|
|
|
|
|
- p.List.AddItem(item.text, "", 0, item.selected)
|
|
|
|
|
- }
|
|
|
|
|
-}
|
|
|