{-# LANGUAGE FlexibleContexts #-}

module Glazier.React.Effect.JavaScript.Exec where

import Control.Monad.IO.Class
import Glazier.React.Effect.JavaScript
import qualified JavaScript.Extras as JE

execJavascript ::
    MonadIO m
    => (c -> m ()) -> JavaScriptCmd c -> m ()
execJavascript executor c = case c of
    SetProperty prop j -> liftIO $ JE.setProperty prop j
    GetProperty n j k -> do
        r <- liftIO $ JE.getProperty n j
        executor $ k r