Skip to content

Commit

Permalink
Fix #65, transform every action when using focus, split, etc. (#66)
Browse files Browse the repository at this point in the history
  • Loading branch information
paf31 authored Jul 14, 2016
1 parent 4ac0b80 commit 5dddb49
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 7 deletions.
12 changes: 6 additions & 6 deletions src/Thermite.purs
Original file line number Diff line number Diff line change
Expand Up @@ -269,9 +269,9 @@ focus lens prism (Spec spec) = Spec { performAction, render }
performAction a p st =
case matching prism a of
Left _ -> pure unit
Right a' -> transform (map (view lens))
Right a' -> forever (transform (map (view lens)))
`transformCoTransformL` spec.performAction a' p (view lens st)
`transformCoTransformR` transform (over lens)
`transformCoTransformR` forever (transform (over lens))

render :: Render state2 props action2
render k p st = spec.render (k <<< review prism) p (view lens st)
Expand Down Expand Up @@ -305,9 +305,9 @@ split prism (Spec spec) = Spec { performAction, render }
performAction a p st =
case matching prism st of
Left _ -> pure unit
Right st2 -> transform (_ >>= preview prism)
Right st2 -> forever (transform (_ >>= preview prism))
`transformCoTransformL` spec.performAction a p st2
`transformCoTransformR` transform (over prism)
`transformCoTransformR` forever (transform (over prism))

render :: Render state1 props action
render k p st children =
Expand All @@ -333,9 +333,9 @@ foreach f = Spec
performAction (Tuple i a) p sts =
for_ (sts !! i) \st ->
case f i of
Spec s -> transform (_ >>= (_ !! i))
Spec s -> forever (transform (_ >>= (_ !! i)))
`transformCoTransformL` s.performAction a p st
`transformCoTransformR` transform (modifying i)
`transformCoTransformR` forever (transform (modifying i))
where
modifying :: Int -> (state -> state) -> List state -> List state
modifying i f sts' = fromMaybe sts' (modifyAt i f sts')
Expand Down
6 changes: 5 additions & 1 deletion test/Components/Task.purs
Original file line number Diff line number Diff line change
Expand Up @@ -49,5 +49,9 @@ taskSpec = T.simpleSpec performAction render
-- _Note_: this component can only see actions of type `TaskAction`, but the `RemoveTask` action
-- is ignored here: it will be handled by the parent component.
performAction :: T.PerformAction eff Task props TaskAction
performAction (ChangeCompleted b) _ _ = void (T.cotransform (_ { completed = b }))
performAction (ChangeCompleted b) _ _ = void do
-- This is a test for issue #65.
-- In practice, we only need one `cotransform` here.
T.cotransform id
T.cotransform (_ { completed = b })
performAction _ _ _ = pure unit

0 comments on commit 5dddb49

Please sign in to comment.