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

Web.Hyperbole.Effect.Query

Synopsis

Documentation

query :: (FromQuery a, Hyperbole :> es) => Eff es a Source #

Parse querystring from the Request into a datatype. See FromQuery

data Filters = Filters
  { search :: Text
  }
  deriving (ToQuery, FromQuery, Generic)

page :: (Hyperbole :> es) => Page es '[Todos]
page = do
  filters <- query @Filters
  todos <- loadTodos filters
  pure $ do
    hyper Todos $ todosView todos

setQuery :: (ToQuery a, Hyperbole :> es) => a -> Eff es () Source #

Update the client's querystring to an encoded datatype. See ToQuery

instance HyperView Todos es where
  data Action Todos
    = SetSearch Text
    deriving (Generic, ViewAction)

  update (SetSearch term) = do
    let filters = Filters term
    setQuery filters
    todos <- loadTodos filters
    pure $ todosView todos

modifyQuery :: (ToQuery a, FromQuery a, Default a, Hyperbole :> es) => (a -> a) -> Eff es a Source #

param :: (FromParam a, Hyperbole :> es) => Param -> Eff es a Source #

Parse a single query parameter. Return a 400 status if missing or if parsing fails. See FromParam

page' :: (Hyperbole :> es) => Page es '[Message]
page' = do
  msg <- param "message"
  pure $ do
    hyper Message $ messageView msg

lookupParam :: (FromParam a, Hyperbole :> es) => Param -> Eff es (Maybe a) Source #

Parse a single parameter from the query string if available

page :: (Hyperbole :> es) => Page es '[Message]
page = do
  prm <- lookupParam "msg"
  let msg = fromMaybe "hello" prm
  pure $ do
    hyper Message $ messageView msg

setParam :: (ToParam a, Hyperbole :> es) => Param -> a -> Eff es () Source #

Modify the client's querystring to set a single parameter. See ToParam

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

  update (SetMessage msg) = do
    setParam "message" msg
    pure $ messageView msg

deleteParam :: Hyperbole :> es => Param -> Eff es () Source #

Delete a single parameter from the query string

queryParams :: Hyperbole :> es => Eff es QueryData Source #

Return the querystring from Request as a QueryData