{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE ExistentialQuantification #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE LambdaCase #-}
module Miso.UI.AlertDialog
(
alertDialogComponent
, AlertDialog (..)
, emptyAlertDialog
) where
import Control.Monad
import Language.Javascript.JSaddle ((#), jsg)
import Miso
import qualified Miso.Html.Element as H
import qualified Miso.Html.Event as E
import qualified Miso.Html.Property as P
data AlertDialog
= AlertDialog
{ AlertDialog -> MisoString
_alertDialogButton :: MisoString
} deriving (AlertDialog -> AlertDialog -> Bool
(AlertDialog -> AlertDialog -> Bool)
-> (AlertDialog -> AlertDialog -> Bool) -> Eq AlertDialog
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: AlertDialog -> AlertDialog -> Bool
== :: AlertDialog -> AlertDialog -> Bool
$c/= :: AlertDialog -> AlertDialog -> Bool
/= :: AlertDialog -> AlertDialog -> Bool
Eq, Int -> AlertDialog -> ShowS
[AlertDialog] -> ShowS
AlertDialog -> String
(Int -> AlertDialog -> ShowS)
-> (AlertDialog -> String)
-> ([AlertDialog] -> ShowS)
-> Show AlertDialog
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> AlertDialog -> ShowS
showsPrec :: Int -> AlertDialog -> ShowS
$cshow :: AlertDialog -> String
show :: AlertDialog -> String
$cshowList :: [AlertDialog] -> ShowS
showList :: [AlertDialog] -> ShowS
Show)
emptyAlertDialog :: AlertDialog
emptyAlertDialog :: AlertDialog
emptyAlertDialog = MisoString -> AlertDialog
AlertDialog MisoString
forall a. Monoid a => a
mempty
data Action
= ShowModal DOMRef
| CloseDialog
alertDialogComponent :: Component parent AlertDialog Action
alertDialogComponent :: forall parent. Component parent AlertDialog Action
alertDialogComponent = Component parent AlertDialog Action
forall parent. Component parent AlertDialog Action
vcomp
where
update_ :: Action -> Effect parent model action
update_ (ShowModal JSVal
domRef) = JSM () -> Effect parent model action
forall a parent model action. JSM a -> Effect parent model action
io_ (JSM () -> Effect parent model action)
-> JSM () -> Effect parent model action
forall a b. (a -> b) -> a -> b
$ do
dialogRef <- JSVal -> JSM JSVal
nextSibling JSVal
domRef
void $ dialogRef # ("showModal" :: MisoString) $ ()
update_ Action
CloseDialog = JSM () -> Effect parent model action
forall a parent model action. JSM a -> Effect parent model action
io_ (JSM () -> Effect parent model action)
-> JSM () -> Effect parent model action
forall a b. (a -> b) -> a -> b
$ do
dialog <- forall a. ToJSString a => a -> JSM JSVal
jsg @MisoString MisoString
"document"
# ("getElementById" :: MisoString)
([MisoString] -> JSM JSVal) -> [MisoString] -> JSM JSVal
forall a b. (a -> b) -> a -> b
$ [MisoString
"alert-dialog-demo" :: MisoString]
void $ dialog # ("close" :: MisoString) $ ()
vcomp :: Component parent AlertDialog Action
vcomp = AlertDialog
-> (Action -> Effect parent AlertDialog Action)
-> (AlertDialog -> View AlertDialog Action)
-> Component parent AlertDialog Action
forall model action parent.
model
-> (action -> Effect parent model action)
-> (model -> View model action)
-> Component parent model action
component AlertDialog
emptyAlertDialog Action -> Effect parent AlertDialog Action
forall {parent} {model} {action}.
Action -> Effect parent model action
update_ ((AlertDialog -> View AlertDialog Action)
-> Component parent AlertDialog Action)
-> (AlertDialog -> View AlertDialog Action)
-> Component parent AlertDialog Action
forall a b. (a -> b) -> a -> b
$ \AlertDialog
_ ->
[Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.div_
[]
[ [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.button_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.type_ MisoString
"button"
, MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-outline"
, (JSVal -> Action) -> Attribute Action
forall action. (JSVal -> action) -> Attribute action
E.onClickWith JSVal -> Action
ShowModal
]
[ View AlertDialog Action
"Open alert dialog"
]
, [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.dialog_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.id_ MisoString
"alert-dialog-demo"
, MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.class_ MisoString
"dialog"
, MisoString -> MisoString -> Attribute Action
forall action. MisoString -> MisoString -> Attribute action
P.aria_ MisoString
"labelledby" MisoString
"alert-dialog-title"
, MisoString -> MisoString -> Attribute Action
forall action. MisoString -> MisoString -> Attribute action
P.aria_ MisoString
"describedby" MisoString
"alert-dialog-description"
]
[ [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.article_ []
[ [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.header_ []
[ [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.h2_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.id_ MisoString
"alert-dialog-title"
]
[ View AlertDialog Action
"Are you absolutely sure?"
]
, [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.p_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.id_ MisoString
"alert-dialog-description"
]
[ MisoString -> View AlertDialog Action
forall model action. MisoString -> View model action
text (MisoString -> View AlertDialog Action)
-> MisoString -> View AlertDialog Action
forall a b. (a -> b) -> a -> b
$
MisoString
"This action cannot be undone. " MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<>
MisoString
"This will permanently delete your" MisoString -> MisoString -> MisoString
forall a. Semigroup a => a -> a -> a
<>
MisoString
"account and remove your data from our servers."
]
]
, [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.footer_ []
[ [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.button_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-outline"
, Action -> Attribute Action
forall action. action -> Attribute action
E.onClick Action
CloseDialog
] [ View AlertDialog Action
"Cancel" ]
, [Attribute Action]
-> [View AlertDialog Action] -> View AlertDialog Action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.button_
[ MisoString -> Attribute Action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-primary"
, Action -> Attribute Action
forall action. action -> Attribute action
E.onClick Action
CloseDialog
] [ View AlertDialog Action
"Continue" ]
]
]
]
]