dingo-core-0.0.2: src/Dingo/Internal/Widget.hs
module Dingo.Internal.Widget
( getWidgetState
, setWidgetState
, widgetSelector
-- Re-export
, Widget(..)
) where
import Control.Monad.Trans.Class (lift)
import Data.Aeson (ToJSON(..))
import qualified Data.Text.Lazy as TL
import Dingo.Selector
import Dingo.Internal.Base (Command(..), widgetIdToLazyText)
import Dingo.Internal.Callback (CallbackM, addCommand)
import qualified Dingo.Internal.Session as S
import Dingo.Internal.WidgetTypes
-- | Widget selector.
widgetSelector :: (Widget w s) => w -> SimpleSelector
widgetSelector w = anyElement `withId` TL.concat ["i", widgetIdToLazyText $ getWidgetId w]
-- | Update the value of a widget. This function pushes
-- the new value to the browser.
setWidgetState :: Widget w s => w -> s -> CallbackM ()
setWidgetState c s = do
-- Update the session's idea of what the widget state is.
lift $ S.setWidgetStateM c s
-- Serialize to client.
addCommand $ SetWidgetValue (getWidgetId c) (toJSON s)
-- | Get the current value of widget.
getWidgetState :: Widget w s => w -> CallbackM (Maybe s)
getWidgetState c = lift $ S.getWidgetStateM c