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 }