module Dingo.Internal.Widget
( getWidgetState
, setWidgetState
, widgetSelector
, 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
widgetSelector :: (Widget w s) => w -> SimpleSelector
widgetSelector w = anyElement `withId` TL.concat ["i", widgetIdToLazyText $ getWidgetId w]
setWidgetState :: Widget w s => w -> s -> CallbackM ()
setWidgetState c s = do
lift $ S.setWidgetStateM c s
addCommand $ SetWidgetValue (getWidgetId c) (toJSON s)
getWidgetState :: Widget w s => w -> CallbackM (Maybe s)
getWidgetState c = lift $ S.getWidgetStateM c