diff options
| author | Joris | 2018-10-30 18:04:58 +0100 | 
|---|---|---|
| committer | Joris | 2018-10-30 18:04:58 +0100 | 
| commit | 50fb8fa48d1c4881da20b4ecf6d68a772301e713 (patch) | |
| tree | 99c30c644d40664a9a7bb4a27e838d7cccda7a5f /client/src/Component/Modal.hs | |
| parent | 40b4994797a797b1fa86cafda789a5c488730c6d (diff) | |
Update table when adding or removing a payment
Diffstat (limited to 'client/src/Component/Modal.hs')
| -rw-r--r-- | client/src/Component/Modal.hs | 66 | 
1 files changed, 45 insertions, 21 deletions
| diff --git a/client/src/Component/Modal.hs b/client/src/Component/Modal.hs index 72091c9..b86fee0 100644 --- a/client/src/Component/Modal.hs +++ b/client/src/Component/Modal.hs @@ -4,16 +4,18 @@ module Component.Modal    , modal    ) where -import           Control.Monad    (void) -import qualified Data.Map         as M -import qualified Data.Map.Lazy    as LM -import           Data.Text        (Text) -import qualified GHCJS.DOM.Node   as Node -import           Reflex.Dom       (Dynamic, Event, MonadWidget) -import qualified Reflex.Dom       as R -import qualified Reflex.Dom.Class as R +import           Control.Monad     (void) +import qualified Data.Map          as M +import qualified Data.Map.Lazy     as LM +import           Data.Text         (Text) +import qualified GHCJS.DOM.Element as Element +import qualified GHCJS.DOM.Node    as Node +import           JSDOM.Types       (JSString) +import           Reflex.Dom        (Dynamic, Event, MonadWidget) +import qualified Reflex.Dom        as R +import qualified Reflex.Dom.Class  as R -import qualified Util.Dom         as Dom +import qualified Util.Dom          as Dom  data ModalIn t m a = ModalIn    { _modalIn_show    :: Event t () @@ -28,20 +30,21 @@ data ModalOut a = ModalOut  modal :: forall t m a. MonadWidget t m => ModalIn t m a -> m (ModalOut a)  modal modalIn = do    rec -    showModal <- R.holdDyn False $ R.leftmost -      [ True <$ _modalIn_show modalIn -      , False <$ _modalIn_hide modalIn -      , False <$ curtainClick -      ] +    let showEvent = R.leftmost +          [ True <$ _modalIn_show modalIn +          , False <$ _modalIn_hide modalIn +          , False <$ curtainClick +          ] -    (elem, (curtainClick, content)) <- R.buildElement "div" (getAttributes <$> showModal) $ do -      (curtain, _) <- R.elAttr' "div" (M.singleton "class" "modalCurtain") $ R.blank -      cont <- R.divClass "modalContent" $ _modalIn_content modalIn -      return (R.domEvent R.Click curtain, cont) +    showModal <- R.holdDyn False showEvent -  body <- Dom.getBody -  let moveBackdrop = (const $ (Node.appendChild body elem)) `fmap` (_modalIn_show modalIn) -  R.performEvent_ $ void `fmap` moveBackdrop +    (elem, (curtainClick, content)) <- +      R.buildElement "div" (getAttributes <$> showModal) $ do +        (curtain, _) <- R.elAttr' "div" (M.singleton "class" "modalCurtain") $ R.blank +        cont <- R.divClass "modalContent" $ _modalIn_content modalIn +        return (R.domEvent R.Click curtain, cont) + +  performShowEffects showEvent elem    return $ ModalOut      { _modalOut_content = content @@ -53,3 +56,24 @@ getAttributes show =      [ ("style", if show then "display:block" else "display:none")      , ("class", "modal")      ] + +performShowEffects +  :: forall t m a. MonadWidget t m +  => Event t Bool +  -> Element.Element +  -> m () +performShowEffects showEvent elem = do +  body <- Dom.getBody + +  let showEffects = +        flip fmap showEvent (\show -> do +          if show +            then +              do +                Node.appendChild body elem +                Element.setClassName body ("modal" :: JSString) +            else +              Element.setClassName body ("" :: JSString) +        ) + +  R.performEvent_ $ void `fmap` showEffects | 
