95 lines
1.9 KiB
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)
|
|
}
|