hyperbole-0.5.0: Interactive HTML apps using type-safe serverside Haskell
Safe HaskellSafe-Inferred
LanguageGHC2021

Web.Hyperbole.Effect.Client

Synopsis

Documentation

trigger :: (HyperView id es, HyperViewHandled id view, Hyperbole :> es) => id -> Action id -> Eff (Reader view : es) () Source #

Trigger an action for an arbitrary HyperView

▶️ Advanced

instance HyperView Controls es where
  type Require Controls = '[Message]

  data Action Controls = TriggerMessage
    deriving (Generic, ViewAction)

  update TriggerMessage = do
    trigger Message $ SetMessage "Triggered!"
    pure controlView

pushEvent :: (ToJSON a, Hyperbole :> es) => Text -> a -> Eff es () Source #

Dispatch a custom javascript event. This is emitted on the current hyper view and bubbles up to the document

▶️ Javascript

instance HyperView Message es where
  data Action Message = AlertMe
    deriving (Generic, ViewAction)

  update AlertMe = do
    pushEvent @Text "server-message" "hello"
    pure "Sent 'server-message' event"
function listenServerEvents() {
  // you can listen on document instead, the event will bubble
  Hyperbole.hyperView("Message").addEventListener("server-message", function(e) {
    alert("Server Message: " + e.detail)
  })

pageTitle :: Hyperbole :> es => Text -> Eff es () Source #

Set the document title

page :: (Hyperbole :> es) => Page es '[]
page = do
  pageTitle "My Page Title"
  pure $ el "Hello World"