refactor: make sure lists are ordered correctly and add configurable scopes

This commit is contained in:
Slug-Boi
2025-04-20 22:16:21 +02:00
parent f89d399e17
commit 2686f32184
+35 -7
View File
@@ -142,7 +142,7 @@ const (
type Model struct { type Model struct {
list list.Model list list.Model
swap_lists [][]list.Item swap_lists [3][]list.Item
keys *listKeyMap keys *listKeyMap
quitting bool quitting bool
scope int scope int
@@ -255,8 +255,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if m.scope == git_scope { if m.scope == git_scope {
m.scope = local_scope m.scope = local_scope
m.list.Title = title_text + local_scope_style.Render("Scope: LOCAL") m.list.Title = title_text + local_scope_style.Render("Scope: LOCAL")
if len(m.swap_lists) < 2 { if len(m.swap_lists[1]) == 0 {
m.swap_lists = append(m.swap_lists, generate_list(local_scope)) m.swap_lists[1] = generate_list(local_scope)
} }
m.list.SetItems(m.swap_lists[1]) m.list.SetItems(m.swap_lists[1])
m.list.ResetFilter() m.list.ResetFilter()
@@ -265,8 +265,8 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if m.scope == local_scope { if m.scope == local_scope {
m.scope = mixed_scope m.scope = mixed_scope
m.list.Title = title_text + mixed_scope_style.Render("Scope: MIXED") m.list.Title = title_text + mixed_scope_style.Render("Scope: MIXED")
if len(m.swap_lists) < 3 { if len(m.swap_lists[2]) == 0 {
m.swap_lists = append(m.swap_lists, generate_list(mixed_scope)) m.swap_lists[2] = generate_list(mixed_scope)
} }
m.list.SetItems(m.swap_lists[2]) m.list.SetItems(m.swap_lists[2])
m.list.ResetFilter() m.list.ResetFilter()
@@ -275,6 +275,9 @@ func (m Model) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
if m.scope == mixed_scope { if m.scope == mixed_scope {
m.scope = git_scope m.scope = git_scope
m.list.Title = title_text + git_scope_style.Render("Scope: GIT") m.list.Title = title_text + git_scope_style.Render("Scope: GIT")
if len(m.swap_lists[0]) == 0 {
m.swap_lists[0] = generate_list(git_scope)
}
m.list.SetItems(m.swap_lists[0]) m.list.SetItems(m.swap_lists[0])
m.list.ResetFilter() m.list.ResetFilter()
return m, nil return m, nil
@@ -360,6 +363,19 @@ func generate_list(scope int) []list.Item {
} }
func ConvertStringScopeToIOTA(scope string) int {
switch scope {
case "git":
return git_scope
case "local":
return local_scope
case "mixed":
return mixed_scope
default:
return -1
}
}
func (m Model) View() string { func (m Model) View() string {
if sub_model != nil { if sub_model != nil {
return sub_model.View() return sub_model.View()
@@ -391,6 +407,7 @@ func listModel(scope ...int) Model {
// Add items to the list // Add items to the list
if len(scope) == 0 { if len(scope) == 0 {
git_scope := ConvertStringScopeToIOTA(utils.ConfigVar.Settings.StartingScope)
scope = append(scope, git_scope) scope = append(scope, git_scope)
} }
items := generate_list(scope[0]) items := generate_list(scope[0])
@@ -402,7 +419,16 @@ func listModel(scope ...int) Model {
const defaultWidth = 20 const defaultWidth = 20
l := list.New(items, itemDelegate{}, defaultWidth, listHeight) l := list.New(items, itemDelegate{}, defaultWidth, listHeight)
l.Title = title_text + lipgloss.NewStyle().Foreground(lipgloss.Color("170")).Render("Scope: GIT")
switch scope[0] {
case git_scope:
l.Title = title_text + git_scope_style.Render("Scope: GIT")
case local_scope:
l.Title = title_text + local_scope_style.Render("Scope: LOCAL")
case mixed_scope:
l.Title = title_text + mixed_scope_style.Render("Scope: MIXED")
}
l.SetShowStatusBar(false) l.SetShowStatusBar(false)
l.SetFilteringEnabled(true) // Enable filtering l.SetFilteringEnabled(true) // Enable filtering
l.Styles.Title = titleStyle l.Styles.Title = titleStyle
@@ -427,7 +453,9 @@ func listModel(scope ...int) Model {
} }
l.Styles.HelpStyle = helpStyle l.Styles.HelpStyle = helpStyle
model := Model{list: l, swap_lists: [][]list.Item{items}, keys: listKeys, scope: git_scope} swapLists := [3][]list.Item{}
swapLists[scope[0]] = items
model := Model{list: l, swap_lists: swapLists, keys: listKeys, scope: scope[0]}
//TODO: figure out async create //TODO: figure out async create
// IDEA DO IT WITH CHANNELS // IDEA DO IT WITH CHANNELS