diff --git a/gshmm.go b/gshmm.go index ec4e52f..6c33583 100644 --- a/gshmm.go +++ b/gshmm.go @@ -138,7 +138,9 @@ func initialModel() model { return nil }) - // TODO: set width/heigh to match terminal + // TODO: set width/heigh to match terminal. this should also + // be set in relation to the list of filenames also. they + // should have some visually pleasing ratio set i imagine viewp := viewport.New(60, 30) selectedDatasheet := datasheets[len(datasheets)-1].contents viewp.SetContent(selectedDatasheet) @@ -160,6 +162,26 @@ func (m model) Init() tea.Cmd { return textinput.Blink } +// filterDatasheetNames filters datasheet names based on user input. +func filterDatasheetNames(m model) []string { + search := m.input.Value() + if !(len(search) >= minCharsUntilFilter) { + return m.datasheetNames + } + + var matchedDatasheets []string + matches := fuzzy.Find(search, m.datasheetNames) + for _, match := range matches { + matchedDatasheets = append(matchedDatasheets, match.Str) + } + + if len(matches) > 0 { + return matchedDatasheets + } + + return m.datasheetNames +} + // Update updates the program state. func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var ( @@ -168,23 +190,7 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { ) if m.input.Focused() { - var matchedDatasheets []string - - search := m.input.Value() - if len(search) >= minCharsUntilFilter { - matches := fuzzy.Find(search, m.datasheetNames) - for _, match := range matches { - matchedDatasheets = append(matchedDatasheets, match.Str) - } - - if len(matches) > 0 { - m.filteredDatasheets = matchedDatasheets - } else { - m.filteredDatasheets = m.datasheetNames - } - } else { - m.filteredDatasheets = m.datasheetNames - } + m.filteredDatasheets = filterDatasheetNames(m) // TODO: implement cursor for scrolling up/down filtered // results so we can view the PDF contents as desired