2deced9ddc86e98b49e3f188cd512cb264dfde4c

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

feat(ui): selector click mouse support

Diff

  1diff --git a/ui/components/selector/selector.go b/ui/components/selector/selector.go
  2index 4beea1fe3e6ca934688c680bcebdeceaf9af6a73..9c99755f506837eb7ac86ab83c2b3ad2871a1d5b 100644
  3--- a/ui/components/selector/selector.go
  4+++ b/ui/components/selector/selector.go
  5@@ -143,6 +143,20 @@ func (s *Selector) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
  6 			s.Model.CursorUp()
  7 		case tea.MouseWheelDown:
  8 			s.Model.CursorDown()
  9+		case tea.MouseLeft:
 10+			curIdx := s.Model.Index()
 11+			for i, item := range s.Model.Items() {
 12+				item, _ := item.(IdentifiableItem)
 13+				// Check each item to see if it's in bounds.
 14+				if item != nil && s.common.Zone.Get(item.ID()).InBounds(msg) {
 15+					if i == curIdx {
 16+						cmds = append(cmds, s.selectCmd)
 17+					} else {
 18+						s.Model.Select(i)
 19+					}
 20+					break
 21+				}
 22+			}
 23 		}
 24 	case tea.KeyMsg:
 25 		filterState := s.Model.FilterState()
 26diff --git a/ui/pages/repo/filesitem.go b/ui/pages/repo/filesitem.go
 27index 1934b440ad5ab1bea0869403dfbdcaf226b3d87f..1d64cb8d13e1ed7ba3262159dfc6686d6bc00ba0 100644
 28--- a/ui/pages/repo/filesitem.go
 29+++ b/ui/pages/repo/filesitem.go
 30@@ -146,10 +146,13 @@ func (d FileItemDelegate) Render(w io.Writer, m list.Model, index int, listItem
 31 		s.Selector.GetHorizontalFrameSize() -
 32 		s.Selector.GetWidth())
 33 	fmt.Fprint(w,
 34-		truncate.Render(fmt.Sprintf("%s%s%s",
 35-			modeStr,
 36-			size,
 37-			name,
 38-		)),
 39+		d.common.Zone.Mark(
 40+			i.ID(),
 41+			truncate.Render(fmt.Sprintf("%s%s%s",
 42+				modeStr,
 43+				size,
 44+				name,
 45+			)),
 46+		),
 47 	)
 48 }
 49diff --git a/ui/pages/repo/logitem.go b/ui/pages/repo/logitem.go
 50index 410a7e90e12013db11fc907820e6602d853d1758..b30c21d67f4b371c121b0007c5b93073811e078d 100644
 51--- a/ui/pages/repo/logitem.go
 52+++ b/ui/pages/repo/logitem.go
 53@@ -137,13 +137,16 @@ func (d LogItemDelegate) Render(w io.Writer, m list.Model, index int, listItem l
 54 	who += styles.Desc.Render("on ") + styles.Keyword.Render(date)
 55 	who = common.TruncateString(who, m.Width()-horizontalFrameSize)
 56 	fmt.Fprint(w,
 57-		styles.Base.Render(
 58-			lipgloss.JoinVertical(lipgloss.Top,
 59-				truncate.String(fmt.Sprintf("%s%s",
 60-					title,
 61-					hash,
 62-				), uint(m.Width()-horizontalFrameSize)),
 63-				who,
 64+		d.common.Zone.Mark(
 65+			i.ID(),
 66+			styles.Base.Render(
 67+				lipgloss.JoinVertical(lipgloss.Top,
 68+					truncate.String(fmt.Sprintf("%s%s",
 69+						title,
 70+						hash,
 71+					), uint(m.Width()-horizontalFrameSize)),
 72+					who,
 73+				),
 74 			),
 75 		),
 76 	)
 77diff --git a/ui/pages/repo/refsitem.go b/ui/pages/repo/refsitem.go
 78index cfae1a3d4aaf12e3293d20f818269d9b1f99a29e..ec378696f450278914c13eadf51f25b1b458a95e 100644
 79--- a/ui/pages/repo/refsitem.go
 80+++ b/ui/pages/repo/refsitem.go
 81@@ -121,5 +121,10 @@ func (d RefItemDelegate) Render(w io.Writer, m list.Model, index int, listItem l
 82 		s.Normal.Item.GetMarginLeft()
 83 	ref = common.TruncateString(ref, refMaxWidth)
 84 	ref = st.Render(ref)
 85-	fmt.Fprint(w, selector, ref)
 86+	fmt.Fprint(w,
 87+		d.common.Zone.Mark(
 88+			i.ID(),
 89+			fmt.Sprint(selector, ref),
 90+		),
 91+	)
 92 }
 93diff --git a/ui/pages/selection/item.go b/ui/pages/selection/item.go
 94index 3db9edeb142ef0c3887a3aec3e0d6e9e97726666..97abe72c1669a702c352183db1118ce84adeb58c 100644
 95--- a/ui/pages/selection/item.go
 96+++ b/ui/pages/selection/item.go
 97@@ -141,5 +141,9 @@ func (d ItemDelegate) Render(w io.Writer, m list.Model, index int, listItem list
 98 		cmd = styles.Command.Render("Copied!")
 99 	}
100 	s.WriteString(cmd)
101-	fmt.Fprint(w, styles.Base.Render(s.String()))
102+	fmt.Fprint(w,
103+		d.common.Zone.Mark(i.ID(),
104+			styles.Base.Render(s.String()),
105+		),
106+	)
107 }
108diff --git a/ui/ui.go b/ui/ui.go
109index 2e0db8c8009d6d2048e76d2585216df9d6dcdc55..43ed760d82db723a7d3f6503774e91e3cd36a624 100644
110--- a/ui/ui.go
111+++ b/ui/ui.go
112@@ -186,6 +186,8 @@ func (ui *UI) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
113 			case key.Matches(msg, ui.common.KeyMap.Help):
114 				cmds = append(cmds, footer.ToggleFooterCmd)
115 			case key.Matches(msg, ui.common.KeyMap.Quit):
116+				// Stop bubblezone background workers.
117+				ui.common.Zone.Close()
118 				return ui, tea.Quit
119 			case ui.activePage == repoPage && key.Matches(msg, ui.common.KeyMap.Back):
120 				ui.activePage = selectionPage