github.com/soypat/vectytemplater@v0.0.0-20220501050640-d40b24e35168/_templates/default/views/body.go (about)

     1  package views
     2  
     3  import (
     4  	"vecty-templater-project/store"
     5  	"vecty-templater-project/store/actions"
     6  	"vecty-templater-project/store/dispatcher"
     7  
     8  	"github.com/hexops/vecty"
     9  	"github.com/hexops/vecty/elem"
    10  	"github.com/hexops/vecty/event"
    11  )
    12  
    13  type Body struct {
    14  	vecty.Core
    15  	Ctx actions.Context `vecty:"prop"`
    16  }
    17  
    18  func (b *Body) Render() vecty.ComponentOrHTML {
    19  	var mainContent vecty.MarkupOrChild
    20  	switch b.Ctx.Page {
    21  	case actions.PageLanding:
    22  		mainContent = elem.Div(
    23  			elem.Div(elem.Button(
    24  				vecty.Markup(event.Click(b.newItem)),
    25  				vecty.Text("New item"),
    26  			)),
    27  			&Landing{
    28  				Items: store.Items,
    29  			},
    30  		)
    31  	case actions.PageNewItem:
    32  		mainContent = &NewItem{}
    33  	default:
    34  		panic("unknown Page")
    35  	}
    36  	return elem.Body(
    37  		vecty.If(b.Ctx.Referrer != nil, elem.Div(
    38  			elem.Button(
    39  				vecty.Markup(event.Click(b.backButton)),
    40  				vecty.Text("Back"),
    41  			))),
    42  		mainContent,
    43  	)
    44  }
    45  
    46  func (b *Body) backButton(*vecty.Event) {
    47  	dispatcher.Dispatch(&actions.Back{})
    48  }
    49  
    50  func (b *Body) newItem(*vecty.Event) {
    51  	dispatcher.Dispatch(&actions.PageSelect{Page: actions.PageNewItem})
    52  }