module Component.ConfirmDialog ( In(..) , view ) where import Data.Text (Text) import Reflex.Dom (Event, MonadWidget) import qualified Reflex.Dom as R import qualified Common.Msg as Msg import qualified Component.Button as Button import qualified Component.Modal as Modal import qualified Util.Either as EitherUtil import qualified Util.WaitFor as WaitFor data In t m = In { _in_header :: Text , _in_confirm :: Event t () -> m (Event t ()) } view :: forall t m a. MonadWidget t m => (In t m) -> Modal.Content t m view input _ = R.divClass "confirm" $ do R.divClass "confirmHeader" $ R.text $ _in_header input R.divClass "confirmContent" $ do (confirm, cancel) <- R.divClass "buttons" $ do cancel <- Button._out_clic <$> (Button.view $ (Button.defaultIn (R.text $ Msg.get Msg.Dialog_Undo)) { Button._in_class = R.constDyn "undo" }) rec confirm <- Button._out_clic <$> (Button.view $ (Button.defaultIn (R.text $ Msg.get Msg.Dialog_Confirm)) { Button._in_class = R.constDyn "confirm" , Button._in_submit = True , Button._in_waiting = waiting }) (result, waiting) <- WaitFor.waitFor (_in_confirm input) confirm return (result, cancel) return $ ( R.leftmost [ cancel, () <$ confirm ] , confirm )