hyperbole-0.4.3: Interactive HTML apps using type-safe serverside Haskell
Safe HaskellNone
LanguageGHC2021

Web.Hyperbole.Effect.Query

Synopsis

Documentation

query :: forall a (es :: [Effect]). (FromQuery a, Hyperbole :> es) => Eff es a Source #

Parse querystring from the Request into a datatype. See FromQuery

data Filters = Filters
  { active :: Bool
  , term :: Text
  }
  deriving (Generic, FromQuery, ToQuery)

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

setQuery :: forall a (es :: [Effect]). (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
    = SetFilters Filters
    deriving (Show, Read, ViewAction)

  update (SetFilters filters) = do
    setQuery filters
    todos <- loadTodos filters
    pure $ todosView todos

param :: forall a (es :: [Effect]). (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) => Eff es (Page '[Message])
page' = do
  msg <- param "message"
  pure $ do
    hyper Message $ messageView msg

lookupParam :: forall a (es :: [Effect]). (FromParam a, Hyperbole :> es) => Param -> Eff es (Maybe a) Source #

Parse a single parameter from the query string if available

setParam :: forall a (es :: [Effect]). (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 (Show, Read, ViewAction)

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

deleteParam :: forall (es :: [Effect]). Hyperbole :> es => Param -> Eff es () Source #

Delete a single parameter from the query string

queryParams :: forall (es :: [Effect]). Hyperbole :> es => Eff es QueryData Source #

Return the query from Request as a QueryData

modifyQuery :: forall (es :: [Effect]). Hyperbole :> es => (QueryData -> QueryData) -> Eff es () Source #