113 lines
2.8 KiB
Go
113 lines
2.8 KiB
Go
package pages
|
|
|
|
import (
|
|
"tasksquire/internal/common"
|
|
|
|
tea "charm.land/bubbletea/v2"
|
|
// "charm.land/bubbles/v2/key"
|
|
"charm.land/lipgloss/v2"
|
|
)
|
|
|
|
type MainPage struct {
|
|
common *common.Common
|
|
activePage common.Component
|
|
|
|
taskPage common.Component
|
|
timePage common.Component
|
|
currentTab int
|
|
width int
|
|
height int
|
|
}
|
|
|
|
func NewMainPage(common *common.Common) *MainPage {
|
|
m := &MainPage{
|
|
common: common,
|
|
}
|
|
|
|
m.taskPage = NewTaskPage(common, common.TW.GetReport(common.TW.GetConfig().Get("uda.tasksquire.report.default")))
|
|
// m.timePage = NewTimePage(common)
|
|
//
|
|
m.activePage = m.taskPage
|
|
m.currentTab = 0
|
|
|
|
return m
|
|
}
|
|
|
|
func (m *MainPage) Init() tea.Cmd {
|
|
// return tea.Batch(m.taskPage.Init(), m.timePage.Init())
|
|
return tea.Batch()
|
|
}
|
|
|
|
func (m *MainPage) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
var cmd tea.Cmd
|
|
|
|
// switch msg := msg.(type) {
|
|
// case tea.WindowSizeMsg:
|
|
// m.width = msg.Width
|
|
// m.height = msg.Height
|
|
// m.common.SetSize(msg.Width, msg.Height)
|
|
//
|
|
// tabHeight := lipgloss.Height(m.renderTabBar())
|
|
// contentHeight := msg.Height - tabHeight
|
|
// if contentHeight < 0 {
|
|
// contentHeight = 0
|
|
// }
|
|
//
|
|
// newMsg := tea.WindowSizeMsg{Width: msg.Width, Height: contentHeight}
|
|
// activePage, cmd := m.activePage.Update(newMsg)
|
|
// m.activePage = activePage.(common.Component)
|
|
// return m, cmd
|
|
//
|
|
// case tea.KeyMsg:
|
|
// // Only handle tab key for page switching when at the top level (no subpages active)
|
|
// if key.Matches(msg, m.common.Keymap.Next) && !m.common.HasSubpages() {
|
|
// if m.activePage == m.taskPage {
|
|
// m.activePage = m.timePage
|
|
// m.currentTab = 1
|
|
// } else {
|
|
// m.activePage = m.taskPage
|
|
// m.currentTab = 0
|
|
// }
|
|
//
|
|
// tabHeight := lipgloss.Height(m.renderTabBar())
|
|
// contentHeight := m.height - tabHeight
|
|
// if contentHeight < 0 {
|
|
// contentHeight = 0
|
|
// }
|
|
// m.activePage.SetSize(m.width, contentHeight)
|
|
//
|
|
// // Trigger a refresh/init on switch? Maybe not needed if we keep state.
|
|
// // But we might want to refresh data.
|
|
// return m, m.activePage.Init()
|
|
// }
|
|
// }
|
|
//
|
|
activePage, cmd := m.activePage.Update(msg)
|
|
m.activePage = activePage.(common.Component)
|
|
|
|
return m, cmd
|
|
}
|
|
|
|
func (m *MainPage) renderTabBar() string {
|
|
var tabs []string
|
|
headers := []string{"Tasks", "Time"}
|
|
|
|
for i, header := range headers {
|
|
style := m.common.Styles.Tab
|
|
if m.currentTab == i {
|
|
style = m.common.Styles.ActiveTab
|
|
}
|
|
tabs = append(tabs, style.Render(header))
|
|
}
|
|
|
|
row := lipgloss.JoinHorizontal(lipgloss.Top, tabs...)
|
|
return m.common.Styles.TabBar.Width(m.common.Width()).Render(row)
|
|
}
|
|
|
|
func (m *MainPage) View() tea.View {
|
|
v := tea.NewView(lipgloss.JoinVertical(lipgloss.Left, m.renderTabBar(), m.activePage.View().Content))
|
|
v.AltScreen = true
|
|
return v
|
|
// return lipgloss.JoinVertical(lipgloss.Left, m.renderTabBar(), m.activePage.View())
|
|
}
|