post_event.diff

· erock's pastes · raw

expires: 2025-05-26

 1diff --git a/tuivax/ui.go b/tuivax/ui.go
 2index a4d25c4..205a348 100644
 3--- a/tuivax/ui.go
 4+++ b/tuivax/ui.go
 5@@ -23,7 +23,6 @@ type UIVx struct {
 6 	vx     *vaxis.Vaxis
 7 
 8 	page string
 9-	quit bool
10 	menu list.List
11 }
12 
13@@ -38,13 +37,13 @@ func (ui *UIVx) menuPage(win vaxis.Window, ev vaxis.Event) {
14 	case vaxis.Key:
15 		switch msg.String() {
16 		case "Ctrl+c", "q", "Escape":
17-			ui.quit = true
18+			ui.vx.PostEvent(Quit{})
19 		case "Down", "j":
20 			ui.menu.Down()
21 		case "Up", "k":
22 			ui.menu.Up()
23 		case "Enter":
24-			ui.page = menuChoices[ui.menu.Index()]
25+			ui.vx.PostEvent(Navigate{To: menuChoices[ui.menu.Index()]})
26 		}
27 	}
28 	ui.menu.Draw(win)
29@@ -55,9 +54,9 @@ func (ui *UIVx) keysPage(win vaxis.Window, ev vaxis.Event) {
30 	case vaxis.Key:
31 		switch msg.String() {
32 		case "Ctrl+c":
33-			ui.quit = true
34+			ui.vx.PostEvent(Quit{})
35 		case "q", "Escape":
36-			ui.page = "menu"
37+			ui.vx.PostEvent(Navigate{To: "menu"})
38 		}
39 	}
40 	win.Print(vaxis.Segment{Text: "Hello, World!"})
41@@ -82,6 +81,13 @@ func NewTui(opts vaxis.Options, shared *common.SharedModel) {
42 		win := vx.Window()
43 		win.Clear()
44 
45+		switch msg := ev.(type) {
46+		case Quit:
47+			return
48+		case Navigate:
49+			ui.page = msg.To
50+		}
51+
52 		// header
53 		win.Print(vaxis.Segment{
54 			Text: fmt.Sprintf("pico.sh • %s", ui.page),
55@@ -98,10 +104,6 @@ func NewTui(opts vaxis.Options, shared *common.SharedModel) {
56 			ui.keysPage(pageWin, ev)
57 		}
58 
59-		if ui.quit {
60-			return
61-		}
62-
63 		vx.Render()
64 	}
65 }