-
Notifications
You must be signed in to change notification settings - Fork 0
/
tview.go
104 lines (87 loc) · 2.51 KB
/
tview.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package ui
import (
"net/http"
"github.com/gdamore/tcell/v2"
"github.com/ikorihn/kuroneko/core"
"github.com/rivo/tview"
)
var (
httpMethods = []string{
http.MethodGet,
http.MethodPost,
http.MethodPut,
http.MethodPatch,
http.MethodDelete,
}
contentTypes = []string{
"",
"application/json",
"application/xml",
"text/plain",
}
responseSwitchButtons = []string{
"body", "header", "curl",
}
)
type request struct {
Method string
Url string
ContentType string
Header []string
Body []byte
}
type UI struct {
controller *core.Controller
app *tview.Application
rootView *tview.Pages
rootGrid *tview.Grid
historyViewModel *historyViewModel
favoritesViewModel *favoriteViewModel
requestViewModel *requestViewModel
responseViewModel *responseViewModel
responseSwitchModal *tview.Modal
footerText *tview.TextView
}
func NewUi() (*UI, error) {
ui := &UI{}
var err error
ui.controller, err = core.NewController()
if err != nil {
return nil, err
}
ui.app = tview.NewApplication()
ui.historyViewModel = NewHistoryViewModel(ui)
ui.favoritesViewModel = NewFavoriteViewModel(ui)
ui.requestViewModel = NewRequestViewModel(ui)
ui.responseViewModel = NewResponseViewModel(ui)
ui.responseSwitchModal = tview.NewModal().
SetText("Select response field you want to see").
AddButtons(responseSwitchButtons).
SetDoneFunc(func(buttonIndex int, buttonLabel string) {
ui.responseViewModel.Show(buttonIndex)
ui.app.SetRoot(ui.rootView, true).SetFocus(ui.responseViewModel.responseField)
})
ui.footerText = tview.NewTextView().SetTextAlign(tview.AlignCenter).SetTextColor(tcell.ColorGray)
ui.showInfo("kuroneko / q->Quit / C->From curl")
navigation := tview.NewGrid().
SetRows(0, 0).
AddItem(ui.historyViewModel.historyField, 0, 0, 1, 1, 0, 0, false).
AddItem(ui.favoritesViewModel.favoriteField, 1, 0, 1, 1, 0, 0, false)
reqAndRes := tview.NewGrid().
SetRows(0, 0).
AddItem(ui.requestViewModel.Grid, 0, 0, 1, 1, 0, 0, false).
AddItem(ui.responseViewModel.Grid, 1, 0, 1, 1, 0, 0, false)
ui.rootGrid = tview.NewGrid().
SetRows(0, 2).
SetColumns(35, 0).
SetBorders(false).
AddItem(navigation, 0, 0, 1, 1, 0, 0, true).
AddItem(reqAndRes, 0, 1, 1, 1, 0, 0, false).
AddItem(ui.footerText, 1, 0, 1, 2, 0, 0, false)
ui.rootView = tview.NewPages().AddPage("main", ui.rootGrid, true, true)
ui.setupKeyboard()
return ui, nil
}
func (u *UI) Run() error {
return u.app.SetRoot(u.rootView, true).SetFocus(u.requestViewModel.requestForm).Run()
}