Skip to content
This repository has been archived by the owner on Aug 28, 2022. It is now read-only.

Commit

Permalink
Merge pull request #23 from brendonmatos/issue-21-update-child
Browse files Browse the repository at this point in the history
Resolving update child
  • Loading branch information
brendonmatos authored Feb 21, 2021
2 parents 4be097b + 0d482d3 commit eab8475
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 13 deletions.
15 changes: 14 additions & 1 deletion component.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,16 @@ type ComponentLifeTime interface {

type ChildLiveComponent interface{}

type ComponentContext struct {
Pairs map[string]interface{}
}

func NewComponentContext() ComponentContext {
return ComponentContext{
Pairs: map[string]interface{}{},
}
}

//
type LiveComponent struct {
Name string
Expand All @@ -48,13 +58,16 @@ type LiveComponent struct {
renderer LiveRenderer

children []*LiveComponent

Context ComponentContext
}

// NewLiveComponent ...
func NewLiveComponent(name string, component ComponentLifeTime) *LiveComponent {
return &LiveComponent{
Name: name,
component: component,
Context: NewComponentContext(),
renderer: LiveRenderer{
state: &LiveState{},
template: nil,
Expand Down Expand Up @@ -124,7 +137,7 @@ func (l *LiveComponent) createChildren() error {
var err error
for _, child := range l.getChildrenComponents() {
child.log = l.log

child.Context = l.Context
err = child.Create(l.life)
if err != nil {
panic(err)
Expand Down
2 changes: 1 addition & 1 deletion page.go
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ func (lp *Page) HandleBrowserEvent(m BrowserEvent) error {
err = c.Kill()
}

lp.entryComponent.UpdateWithSource(source)
c.UpdateWithSource(source)

return err
}
Expand Down
14 changes: 3 additions & 11 deletions renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,35 +63,27 @@ func (lr *LiveRenderer) renderToText(data interface{}) (string, error) {
func (lr *LiveRenderer) Render(data interface{}) (string, *html.Node, error) {

textRender, err := lr.renderToText(data)

if err != nil {
return "", nil, err
}

err = lr.state.setText(textRender)

return lr.state.text, lr.state.html, err
}

func (lr *LiveRenderer) LiveRender(data interface{}) (*diff, error) {

actualRender := lr.state.html
actualRenderText := lr.state.text
proposedRenderText, err := lr.renderToText(data)

err = lr.state.setText(proposedRenderText)

if err != nil {
return nil, fmt.Errorf("render to text: %w", err)
return nil, fmt.Errorf("state set text: %w", err)
}

// TODO: maybe the right way to call a diff is calling based on state
diff := newDiff(actualRender)

if actualRenderText == proposedRenderText {
return diff, nil
}

_ = lr.state.setText(proposedRenderText)

diff.propose(lr.state.html)

return diff, nil
Expand Down
2 changes: 2 additions & 0 deletions session.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,8 @@ func (s *Session) ActivatePage(lp *Page) {
// Receive all the events from page
evt := <-s.LivePage.Events

s.log(LogDebug, fmt.Sprintf("component %s triggering %d", evt.Component.Name, evt.Type), logEx{"evt": evt})

switch evt.Type {
case PageComponentUpdated:
if err := s.LiveRenderComponent(evt.Component, evt.Source); err != nil {
Expand Down

0 comments on commit eab8475

Please sign in to comment.