fix(ui): clear status bar and previous repo info on empty repo

Ayman Bagabas created

Change summary

ui/pages/repo/files.go | 14 ++++++++++++++
ui/pages/repo/log.go   | 16 ++++++++++++++++
ui/pages/repo/refs.go  | 12 ++++++++++++
ui/pages/repo/repo.go  |  6 +++++-
4 files changed, 47 insertions(+), 1 deletion(-)

Detailed changes

ui/pages/repo/files.go 🔗

@@ -265,6 +265,14 @@ func (f *Files) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 				}
 			}
 		}
+	case EmptyRepoMsg:
+		f.ref = nil
+		f.path = ""
+		f.currentItem = nil
+		f.activeView = filesViewFiles
+		f.lastSelected = make([]int, 0)
+		f.selector.Select(0)
+		cmds = append(cmds, f.setItems([]selector.IdentifiableItem{}))
 	}
 	switch f.activeView {
 	case filesViewFiles:
@@ -398,3 +406,9 @@ func (f *Files) deselectItemCmd() tea.Msg {
 	f.selector.Select(index)
 	return msg
 }
+
+func (f *Files) setItems(items []selector.IdentifiableItem) tea.Cmd {
+	return func() tea.Msg {
+		return FileItemsMsg(items)
+	}
+}

ui/pages/repo/log.go 🔗

@@ -299,6 +299,16 @@ func (l *Log) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 				l.startLoading(),
 			)
 		}
+	case EmptyRepoMsg:
+		l.ref = nil
+		l.loading = false
+		l.activeView = logViewCommits
+		l.nextPage = 0
+		l.count = 0
+		l.activeCommit = nil
+		l.selectedCommit = nil
+		l.selector.Select(0)
+		cmds = append(cmds, l.setItems([]selector.IdentifiableItem{}))
 	}
 	if l.loading {
 		s, cmd := l.spinner.Update(msg)
@@ -486,3 +496,9 @@ func (l *Log) renderDiff(diff *ggit.Diff) string {
 	}
 	return wrap.String(s.String(), l.common.Width)
 }
+
+func (l *Log) setItems(items []selector.IdentifiableItem) tea.Cmd {
+	return func() tea.Msg {
+		return LogItemsMsg(items)
+	}
+}

ui/pages/repo/refs.go 🔗

@@ -139,6 +139,9 @@ func (r *Refs) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 		case key.Matches(msg, r.common.KeyMap.SelectItem):
 			cmds = append(cmds, r.selector.SelectItem)
 		}
+	case EmptyRepoMsg:
+		r.ref = nil
+		cmds = append(cmds, r.setItems([]selector.IdentifiableItem{}))
 	}
 	m, cmd := r.selector.Update(msg)
 	r.selector = m.(*selector.Selector)
@@ -193,6 +196,15 @@ func (r *Refs) updateItemsCmd() tea.Msg {
 	}
 }
 
+func (r *Refs) setItems(items []selector.IdentifiableItem) tea.Cmd {
+	return func() tea.Msg {
+		return RefItemsMsg{
+			items:  items,
+			prefix: r.refPrefix,
+		}
+	}
+}
+
 func switchRefCmd(ref *ggit.Reference) tea.Cmd {
 	return func() tea.Msg {
 		return RefMsg(ref)

ui/pages/repo/repo.go 🔗

@@ -261,8 +261,12 @@ func (r *Repo) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
 	case tea.WindowSizeMsg:
 		cmds = append(cmds, r.updateModels(msg))
 	case EmptyRepoMsg:
+		r.ref = nil
 		r.state = readyState
-		cmds = append(cmds, r.updateStatusBarCmd)
+		cmds = append(cmds,
+			r.updateModels(msg),
+			r.updateStatusBarCmd,
+		)
 	case common.ErrorMsg:
 		r.state = readyState
 	}