aboutsummaryrefslogtreecommitdiff
path: root/client/src/Component/Modal.hs
diff options
context:
space:
mode:
authorJoris2018-10-30 18:04:58 +0100
committerJoris2018-10-30 18:04:58 +0100
commit50fb8fa48d1c4881da20b4ecf6d68a772301e713 (patch)
tree99c30c644d40664a9a7bb4a27e838d7cccda7a5f /client/src/Component/Modal.hs
parent40b4994797a797b1fa86cafda789a5c488730c6d (diff)
downloadbudget-50fb8fa48d1c4881da20b4ecf6d68a772301e713.tar.gz
budget-50fb8fa48d1c4881da20b4ecf6d68a772301e713.tar.bz2
budget-50fb8fa48d1c4881da20b4ecf6d68a772301e713.zip
Update table when adding or removing a payment
Diffstat (limited to 'client/src/Component/Modal.hs')
-rw-r--r--client/src/Component/Modal.hs66
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