hyperbole
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
  { 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 :: 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
    = SetSearch Text
    deriving (Generic, ViewAction)

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

modifyQuery :: forall a (es :: [Effect]). (ToQuery a, FromQuery a, Default a, Hyperbole :> es) => (a -> a) -> Eff es a Source #

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

param :: forall a (es :: [Effect]). (FromJSON a, Hyperbole :> es) => Param -> Eff es a Source #

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

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

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

Parse a single parameter from the query string if available

page :: (Hyperbole :> es, Concurrent :> es, Reader Text :> es) => Page es '[SlowReader]
page = do
  pure $ hyper SlowReader $ messageView "..."

setParam :: forall a (es :: [Effect]). (ToJSON a, Hyperbole :> es) => Param -> a -> Eff es () Source #

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

instance HyperView Message es where
  data Action Message
    = SetMessage Text
    deriving (Generic, 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 querystring from Request as a QueryData

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