Files
restui/tui/rest/init.go

95 lines
1.9 KiB
Go

package rest
import (
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)
type Rest struct {
app *tview.Application
panels []tview.Primitive
index int
}
func New(app *tview.Application) *Rest {
return &Rest{
app,
make([]tview.Primitive, 5),
0,
}
}
func (r *Rest) Root() *tview.Flex {
flex := tview.NewFlex().
AddItem(r.request(), 0, 1, true).
AddItem(r.response(), 0, 1, false)
flex.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
if event.Key() == tcell.KeyCtrlJ {
r.index = (r.index + 1) % len(r.panels)
r.app.SetFocus(r.panels[r.index])
return nil
} else if event.Key() == tcell.KeyCtrlK {
length := len(r.panels)
r.index = (r.index - 1 + length) % length
r.app.SetFocus(r.panels[r.index])
return nil
}
return event
})
return flex
}
func (r *Rest) request() *tview.Flex {
form := tview.NewForm().
AddDropDown("Method", []string{"GET", "POST", "PUT", "DELETE"}, 0, nil).
AddInputField("URL", "", 0, nil, nil).
AddButton("Headers", nil).
AddButton("Send", nil)
form.
SetBorder(true).
SetTitle("Request Form")
body := tview.NewTextArea().
SetPlaceholder("Enter request body (ctrl + e to open editor)")
body.
SetBorder(true).
SetTitle("Request Body")
summary := tview.NewTextView()
summary.
SetBorder(true).
SetTitle("Request Summary")
r.panels[0] = form
r.panels[1] = body
r.panels[2] = summary
return tview.NewFlex().
SetDirection(tview.FlexRow).
AddItem(form, 9, 0, true).
AddItem(body, 0, 1, false).
AddItem(summary, 0, 1, false)
}
func (r *Rest) response() *tview.Flex {
summary := tview.NewTextView()
summary.
SetBorder(true).
SetTitle("Response Summary")
body := tview.NewTextView()
body.
SetBorder(true).
SetTitle("Response Body")
r.panels[3] = summary
r.panels[4] = body
return tview.NewFlex().
SetDirection(tview.FlexRow).
AddItem(summary, 0, 1, false).
AddItem(body, 0, 1, false)
}