github.com/jgarto/itcv@v0.0.0-20180826224514-4eea09c1aa0d/examples/sites/globalstate/app.go (about)

     1  package main
     2  
     3  import (
     4  	"myitcv.io/react"
     5  	"myitcv.io/react/examples/sites/globalstate/state"
     6  )
     7  
     8  type AppDef struct {
     9  	react.ComponentDef
    10  }
    11  
    12  type AppState struct {
    13  	hideViewer bool
    14  }
    15  
    16  func App() *AppElem {
    17  	return buildAppElem()
    18  }
    19  
    20  func (a AppDef) Render() react.Element {
    21  	var viewer *react.DivElem
    22  	var showHide *react.ButtonElem
    23  
    24  	if a.State().hideViewer {
    25  		showHide = react.Button(
    26  			&react.ButtonProps{OnClick: hideClick{a, false}},
    27  			react.S("Show viewer"),
    28  		)
    29  	} else {
    30  		viewer = react.Div(nil,
    31  			react.H3(nil, react.S("Person Viewer")),
    32  			PersonViewer(),
    33  		)
    34  		showHide = react.Button(
    35  			&react.ButtonProps{OnClick: hideClick{a, true}},
    36  			react.S("Hide viewer"),
    37  		)
    38  	}
    39  
    40  	return react.Div(&react.DivProps{ClassName: "container"},
    41  		react.H3(nil, react.S("Person Chooser")),
    42  		PersonChooser(PersonChooserProps{
    43  			PersonState: state.State.CurrentPerson(),
    44  		}),
    45  		react.Hr(nil),
    46  		showHide,
    47  		viewer,
    48  	)
    49  }
    50  
    51  type hideClick struct {
    52  	AppDef
    53  	showHide bool
    54  }
    55  
    56  func (h hideClick) OnClick(e *react.SyntheticMouseEvent) {
    57  	h.AppDef.SetState(AppState{
    58  		hideViewer: h.showHide,
    59  	})
    60  }