Create base layout for the rest page.
This commit is contained in:
@@ -1,15 +1,94 @@
|
||||
package rest
|
||||
|
||||
import "github.com/rivo/tview"
|
||||
import (
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
type Rest struct{}
|
||||
|
||||
func New() Rest {
|
||||
return Rest{}
|
||||
type Rest struct {
|
||||
app *tview.Application
|
||||
panels []tview.Primitive
|
||||
index int
|
||||
}
|
||||
|
||||
func (r Rest) Root() *tview.Box {
|
||||
return tview.NewBox().
|
||||
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("Hello Rest")
|
||||
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)
|
||||
}
|
||||
|
||||
23
tui/tui.go
23
tui/tui.go
@@ -2,12 +2,12 @@ package tui
|
||||
|
||||
import (
|
||||
"git.embergate.com/saeedafzal/restui/tui/rest"
|
||||
"github.com/rivo/tview"
|
||||
"github.com/gdamore/tcell/v2"
|
||||
"github.com/rivo/tview"
|
||||
)
|
||||
|
||||
type Tui struct {
|
||||
app *tview.Application
|
||||
app *tview.Application
|
||||
pages *tview.Pages
|
||||
}
|
||||
|
||||
@@ -16,18 +16,17 @@ func New(app *tview.Application) Tui {
|
||||
}
|
||||
|
||||
func (t Tui) Root() *tview.Pages {
|
||||
rest := rest.New()
|
||||
rest := rest.New(t.app)
|
||||
|
||||
t.pages.AddPage("rest", rest.Root(), true, true)
|
||||
t.pages.SetInputCapture(t.rootInputCapture)
|
||||
|
||||
t.pages.SetInputCapture(func(event *tcell.EventKey) *tcell.EventKey {
|
||||
if event.Rune() == 'q' {
|
||||
t.app.Stop()
|
||||
return nil
|
||||
}
|
||||
return event
|
||||
})
|
||||
|
||||
return t.pages
|
||||
}
|
||||
|
||||
func (t Tui) rootInputCapture(event *tcell.EventKey) *tcell.EventKey {
|
||||
if event.Rune() == 'q' {
|
||||
t.app.Stop()
|
||||
return nil
|
||||
}
|
||||
return event
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user