50 lines
1 KiB
Haskell
50 lines
1 KiB
Haskell
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
{-# LANGUAGE PackageImports #-}
|
||
|
{-# LANGUAGE DataKinds #-}
|
||
|
module Control.Product where
|
||
|
|
||
|
import Servant
|
||
|
import Servant.Client
|
||
|
import Servant.Server
|
||
|
|
||
|
import qualified Data.Text as T
|
||
|
|
||
|
import Data.Maybe (fromMaybe)
|
||
|
|
||
|
import Data.Text.I18n
|
||
|
|
||
|
import Data.String (fromString)
|
||
|
|
||
|
import Control.Monad.Reader (ask)
|
||
|
import Control.Monad.IO.Class (liftIO)
|
||
|
|
||
|
-- imports from "mateamt"
|
||
|
|
||
|
import qualified "mateamt" Types as MT
|
||
|
|
||
|
-- internal imports
|
||
|
|
||
|
import View
|
||
|
import Types
|
||
|
import Client
|
||
|
import Util
|
||
|
|
||
|
productListControl
|
||
|
:: Maybe T.Text
|
||
|
-> Maybe MT.ProductRefine
|
||
|
-> UserHandler ProductListPage
|
||
|
productListControl mcookie mrefine = do
|
||
|
(ReadState l10n backend _) <- ask
|
||
|
let loc = Locale
|
||
|
(fromMaybe "en" $ lookup "locale" =<< fmap parseCookieText mcookie)
|
||
|
eProducts <- liftIO $ runClientM
|
||
|
(productShortList mrefine)
|
||
|
backend
|
||
|
case eProducts of
|
||
|
Right products ->
|
||
|
return $ productListPage l10n loc mrefine products
|
||
|
Left err ->
|
||
|
throwError $ err500
|
||
|
{ errBody = fromString $ show err
|
||
|
}
|