{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE GeneralizedNewtypeDeriving #-}
{-# LANGUAGE OverloadedStrings #-}

module Yesod.Paginator.PaginationConfig
    ( PaginationConfig(..)
    , PageParamName(..)
    , defaultPaginationConfig
    ) where

import Yesod.Paginator.Prelude

import Yesod.Core
import Yesod.Paginator.Pages

newtype PageParamName = PageParamName { PageParamName -> Text
unPageParamName :: Text }
    deriving stock PageParamName -> PageParamName -> Bool
(PageParamName -> PageParamName -> Bool)
-> (PageParamName -> PageParamName -> Bool) -> Eq PageParamName
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
/= :: PageParamName -> PageParamName -> Bool
$c/= :: PageParamName -> PageParamName -> Bool
== :: PageParamName -> PageParamName -> Bool
$c== :: PageParamName -> PageParamName -> Bool
Eq
    deriving newtype (ReadPrec [PageParamName]
ReadPrec PageParamName
Int -> ReadS PageParamName
ReadS [PageParamName]
(Int -> ReadS PageParamName)
-> ReadS [PageParamName]
-> ReadPrec PageParamName
-> ReadPrec [PageParamName]
-> Read PageParamName
forall a.
(Int -> ReadS a)
-> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a
readListPrec :: ReadPrec [PageParamName]
$creadListPrec :: ReadPrec [PageParamName]
readPrec :: ReadPrec PageParamName
$creadPrec :: ReadPrec PageParamName
readList :: ReadS [PageParamName]
$creadList :: ReadS [PageParamName]
readsPrec :: Int -> ReadS PageParamName
$creadsPrec :: Int -> ReadS PageParamName
Read, Int -> PageParamName -> ShowS
[PageParamName] -> ShowS
PageParamName -> String
(Int -> PageParamName -> ShowS)
-> (PageParamName -> String)
-> ([PageParamName] -> ShowS)
-> Show PageParamName
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [PageParamName] -> ShowS
$cshowList :: [PageParamName] -> ShowS
show :: PageParamName -> String
$cshow :: PageParamName -> String
showsPrec :: Int -> PageParamName -> ShowS
$cshowsPrec :: Int -> PageParamName -> ShowS
Show, Text -> Maybe PageParamName
PageParamName -> Text
(Text -> Maybe PageParamName)
-> (PageParamName -> Text) -> PathPiece PageParamName
forall s. (Text -> Maybe s) -> (s -> Text) -> PathPiece s
toPathPiece :: PageParamName -> Text
$ctoPathPiece :: PageParamName -> Text
fromPathPiece :: Text -> Maybe PageParamName
$cfromPathPiece :: Text -> Maybe PageParamName
PathPiece)

data PaginationConfig = PaginationConfig
    { PaginationConfig -> PageParamName
paginationConfigPageParamName :: PageParamName
    , PaginationConfig -> PerPage
paginationConfigPerPage :: PerPage
    }

defaultPaginationConfig :: PaginationConfig
defaultPaginationConfig :: PaginationConfig
defaultPaginationConfig = PaginationConfig :: PageParamName -> PerPage -> PaginationConfig
PaginationConfig
    { paginationConfigPageParamName :: PageParamName
paginationConfigPageParamName = Text -> PageParamName
PageParamName Text
"p"
    , paginationConfigPerPage :: PerPage
paginationConfigPerPage = PerPage
3
    }