diff --git a/cmd/terminal-client/tui/basemodel.go b/cmd/terminal-client/tui/basemodel.go index 9c281bf..9e3d8be 100644 --- a/cmd/terminal-client/tui/basemodel.go +++ b/cmd/terminal-client/tui/basemodel.go @@ -54,16 +54,18 @@ func (m baseModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { case "ctrl+c", "q", "esc": return m, tea.Quit case "right", "tab": - m.activeTab = min(m.activeTab+1, len(m.Tabs)-1) - return m, nil + m.TabContent, cmd = m.nextTab() + cmds = append(cmds, cmd) + return m, tea.Batch(cmds...) case "left", "shift+tab": - m.activeTab = max(m.activeTab-1, 0) - return m, nil + m.TabContent, cmd = m.prevTab() + cmds = append(cmds, cmd) + return m, tea.Batch(cmds...) } case tea.WindowSizeMsg: m.windowSize = msg if !m.initialized { - m.TabContent, cmd = NewEMDBTab(m.emdb, m.logger) + m.TabContent, cmd = NewTabEMDB(m.emdb, m.logger) cmds = append(cmds, cmd) m.initialized = true } @@ -106,6 +108,29 @@ func (m baseModel) View() string { return docStyle.Render(doc.String()) } +func (m *baseModel) nextTab() (tea.Model, tea.Cmd) { + m.activeTab = min(m.activeTab+1, len(m.Tabs)-1) + + return m.newTab() +} + +func (m *baseModel) prevTab() (tea.Model, tea.Cmd) { + m.activeTab = max(m.activeTab-1, 0) + + return m.newTab() +} + +func (m *baseModel) newTab() (tea.Model, tea.Cmd) { + switch m.activeTab { + case 0: + return NewTabEMDB(m.emdb, m.logger) + case 1: + return NewTabTMDB(m.tmdb, m.logger) + default: + return nil, nil + } +} + func (m *baseModel) renderMenu() string { var items []string for i, t := range m.Tabs { diff --git a/cmd/terminal-client/tui/tabemdb.go b/cmd/terminal-client/tui/tabemdb.go index 334c544..73b494c 100644 --- a/cmd/terminal-client/tui/tabemdb.go +++ b/cmd/terminal-client/tui/tabemdb.go @@ -8,19 +8,19 @@ import ( tea "github.com/charmbracelet/bubbletea" ) -type emdbTab struct { +type tabEMDB struct { initialized bool list list.Model emdb *client.EMDB logger *Logger } -func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) { +func NewTabEMDB(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) { list := list.New([]list.Item{}, list.NewDefaultDelegate(), 0, 0) list.Title = "Movies" list.SetShowHelp(false) - m := emdbTab{ + m := tabEMDB{ emdb: emdb, logger: logger, list: list, @@ -29,11 +29,11 @@ func NewEMDBTab(emdb *client.EMDB, logger *Logger) (tea.Model, tea.Cmd) { return m, FetchMovieList(emdb, logger) } -func (m emdbTab) Init() tea.Cmd { +func (m tabEMDB) Init() tea.Cmd { return nil } -func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) { +func (m tabEMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { var cmd tea.Cmd var cmds []tea.Cmd @@ -54,11 +54,11 @@ func (m emdbTab) Update(msg tea.Msg) (tea.Model, tea.Cmd) { return m, tea.Batch(cmds...) } -func (m emdbTab) View() string { +func (m tabEMDB) View() string { return m.list.View() } -func (m *emdbTab) Log(s string) { +func (m *tabEMDB) Log(s string) { m.logger.Log(s) } diff --git a/cmd/terminal-client/tui/tabimdb.go b/cmd/terminal-client/tui/tabimdb.go deleted file mode 100644 index 37a525e..0000000 --- a/cmd/terminal-client/tui/tabimdb.go +++ /dev/null @@ -1,24 +0,0 @@ -package tui - -//focused string -//searchInput textinput.Model -//searchResults list.Model -//movieList list.Model - -//func (m *model) Search() { -// m.Log("start search") -// movies, err := m.tmdb.Search(m.searchInput.Value()) -// if err != nil { -// m.Log(fmt.Sprintf("error: %v", err)) -// return -// } -// -// m.Log(fmt.Sprintf("found %d results", len(movies))) -// items := []list.Item{} -// for _, res := range movies { -// items = append(items, Movie{m: res}) -// } -// -// m.searchResults.SetItems(items) -// m.focused = "result" -//} diff --git a/cmd/terminal-client/tui/tabtmdb.go b/cmd/terminal-client/tui/tabtmdb.go new file mode 100644 index 0000000..6d08f11 --- /dev/null +++ b/cmd/terminal-client/tui/tabtmdb.go @@ -0,0 +1,72 @@ +package tui + +import ( + "ewintr.nl/emdb/client" + "github.com/charmbracelet/bubbles/list" + tea "github.com/charmbracelet/bubbletea" +) + +//focused string +//searchInput textinput.Model +//searchResults list.Model +//movieLis + +type tabTMDB struct { + initialized bool + results list.Model + tmdb *client.TMDB + logger *Logger +} + +func NewTabTMDB(tmdb *client.TMDB, logger *Logger) (tea.Model, tea.Cmd) { + m := tabTMDB{ + tmdb: tmdb, + logger: logger, + } + + return m, nil +} + +func (m tabTMDB) Init() tea.Cmd { + return nil +} + +func (m tabTMDB) Update(msg tea.Msg) (tea.Model, tea.Cmd) { + var cmd tea.Cmd + var cmds []tea.Cmd + + switch msg := msg.(type) { + case tea.KeyMsg: + switch msg.String() { + case "ctrl+c", "q", "esc": + return m, tea.Quit + } + } + + m.results, cmd = m.results.Update(msg) + cmds = append(cmds, cmd) + + return m, tea.Batch(cmds...) +} + +func (m tabTMDB) View() string { + return "tmdb" +} + +//func (m *model) Search() { +// m.Log("start search") +// movies, err := m.tmdb.Search(m.searchInput.Value()) +// if err != nil { +// m.Log(fmt.Sprintf("error: %v", err)) +// return +// } +// +// m.Log(fmt.Sprintf("found %d results", len(movies))) +// items := []list.Item{} +// for _, res := range movies { +// items = append(items, Movie{m: res}) +// } +// +// m.searchResults.SetItems(items) +// m.focused = "result" +//}