module Gargantext.Hooks.UpdateEffect ( useUpdateEffect, useUpdateEffect' , useUpdateEffect1, useUpdateEffect1' , useUpdateEffect2, useUpdateEffect2' , useUpdateEffect3, useUpdateEffect3' ) where import Gargantext.Prelude import Effect (Effect) import Gargantext.Hooks.FirstEffect (useFirstMount) import Reactix (nothing, thenNothing) import Reactix as R -- | Hook triggered on update only (not on first mount) useUpdateEffect :: Effect (Effect Unit) -> R.Hooks Unit useUpdateEffect e = useFirstMount >>= eff e -- | Like `useUpdateEffect` but Effect fn does return a cleanup handler useUpdateEffect' :: forall a. Effect a -> R.Hooks Unit useUpdateEffect' e = useFirstMount >>= eff (e # thenNothing) -- | Like `useUpdateEffect` but with a memo value useUpdateEffect1 :: forall a. a -> Effect (Effect Unit) -> R.Hooks Unit useUpdateEffect1 a e = useFirstMount >>= eff1 a e -- | Like `useUpdateEffect` but the provided Effect does not return a -- | cleanup handler useUpdateEffect1' :: forall a b. a -> Effect b -> R.Hooks Unit useUpdateEffect1' a e = useFirstMount >>= eff1 a (e # thenNothing) useUpdateEffect2 :: forall a b. a -> b -> Effect (Effect Unit) -> R.Hooks Unit useUpdateEffect2 a b e = useFirstMount >>= eff2 a b e useUpdateEffect2' :: forall a b c. a -> b -> Effect c -> R.Hooks Unit useUpdateEffect2' a b e = useFirstMount >>= eff2 a b (e # thenNothing) useUpdateEffect3 :: forall a b c. a -> b -> c -> Effect (Effect Unit) -> R.Hooks Unit useUpdateEffect3 a b c e = useFirstMount >>= eff3 a b c e useUpdateEffect3' :: forall a b c d. a -> b -> c -> Effect d -> R.Hooks Unit useUpdateEffect3' a b c e = useFirstMount >>= eff3 a b c (e # thenNothing) eff :: Effect (Effect Unit) -> Boolean -> R.Hooks Unit eff ef cd = R.useEffect if cd then nothing # thenNothing else ef eff1 :: forall a. a -> Effect (Effect Unit) -> Boolean -> R.Hooks Unit eff1 a ef cd = R.useEffect1 a if cd then nothing # thenNothing else ef eff2 :: forall a b. a -> b -> Effect (Effect Unit) -> Boolean -> R.Hooks Unit eff2 a b ef cd = R.useEffect2 a b if cd then nothing # thenNothing else ef eff3 :: forall a b c. a -> b -> c -> Effect (Effect Unit) -> Boolean -> R.Hooks Unit eff3 a b c ef cd = R.useEffect3 a b c if cd then nothing # thenNothing else ef