-----------------------------------------------------------------------------
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE MultilineStrings  #-}
{-# LANGUAGE RecordWildCards   #-}
-----------------------------------------------------------------------------
module Miso.UI.Pagination
  ( -- ** Props
    PaginationProps (..)
  , defaultPaginationProps
    -- ** Views
  , pagination_
  , paginationLink_
  , paginationPrevious_
  , paginationNext_
  , paginationEllipsis_
    -- ** Samples
  , paginationSample
  , paginationCodeSample
  , paginationPropsApi
  ) where
-----------------------------------------------------------------------------
import           Miso
import qualified Miso.Html.Element as H
import qualified Miso.Html.Property as P
-----------------------------------------------------------------------------
import           Miso.UI.Icons
-----------------------------------------------------------------------------
-- | Props for 'pagination_'
data PaginationProps action
  = PaginationProps
  { forall action. PaginationProps action -> [MisoString]
paginationClasses :: [MisoString]
    -- ^ Extra classes appended to the @nav@
  , forall action. PaginationProps action -> [Attribute action]
paginationAttrs :: [Attribute action]
  }
-----------------------------------------------------------------------------
-- | Smart constructor
defaultPaginationProps :: PaginationProps action
defaultPaginationProps :: forall action. PaginationProps action
defaultPaginationProps
  = PaginationProps
  { paginationClasses :: [MisoString]
paginationClasses = []
  , paginationAttrs :: [Attribute action]
paginationAttrs = []
  }
-----------------------------------------------------------------------------
-- | <https://basecoatui.com/components/pagination/ Pagination>.
-- Children are 'paginationLink_' \/ 'paginationPrevious_' \/ etc.
pagination_
  :: PaginationProps action
  -> [View model action]
  -> View model action
pagination_ :: forall action model.
PaginationProps action -> [View model action] -> View model action
pagination_ PaginationProps {[MisoString]
[Attribute action]
paginationClasses :: forall action. PaginationProps action -> [MisoString]
paginationAttrs :: forall action. PaginationProps action -> [Attribute action]
paginationClasses :: [MisoString]
paginationAttrs :: [Attribute action]
..} [View model action]
kids =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.nav_
    ( [MisoString] -> Attribute action
forall action. [MisoString] -> Attribute action
P.classes_ (MisoString
"mx-auto" MisoString -> [MisoString] -> [MisoString]
forall a. a -> [a] -> [a]
: MisoString
"flex" MisoString -> [MisoString] -> [MisoString]
forall a. a -> [a] -> [a]
: MisoString
"w-full" MisoString -> [MisoString] -> [MisoString]
forall a. a -> [a] -> [a]
: MisoString
"justify-center" MisoString -> [MisoString] -> [MisoString]
forall a. a -> [a] -> [a]
: [MisoString]
paginationClasses)
    Attribute action -> [Attribute action] -> [Attribute action]
forall a. a -> [a] -> [a]
: MisoString -> MisoString -> Attribute action
forall action. MisoString -> MisoString -> Attribute action
P.aria_ MisoString
"label" MisoString
"pagination"
    Attribute action -> [Attribute action] -> [Attribute action]
forall a. a -> [a] -> [a]
: MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.role_ MisoString
"navigation"
    Attribute action -> [Attribute action] -> [Attribute action]
forall a. a -> [a] -> [a]
: [Attribute action]
paginationAttrs
    )
    [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.ul_
      [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"flex flex-row items-center gap-1" ]
      [View model action]
kids
    ]
-----------------------------------------------------------------------------
-- | Page number link; the 'Bool' marks the current page
paginationLink_
  :: Bool
  -> MisoString
  -- ^ href
  -> [View model action]
  -> View model action
paginationLink_ :: forall model action.
Bool -> MisoString -> [View model action] -> View model action
paginationLink_ Bool
current MisoString
url [View model action]
kids =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.li_ []
  [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.a_
    [ [MisoString] -> Attribute action
forall action. [MisoString] -> Attribute action
P.classes_ [ if Bool
current then MisoString
"btn-outline" else MisoString
"btn-ghost", MisoString
"size-9" ]
    , MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.href_ MisoString
url
    ] [View model action]
kids
  ]
-----------------------------------------------------------------------------
paginationPrevious_ :: MisoString -> View model action
paginationPrevious_ :: forall model action. MisoString -> View model action
paginationPrevious_ MisoString
url =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.li_ []
  [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.a_
    [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-ghost", MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.href_ MisoString
url ]
    [ [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
chevronLeftIcon [], View model action
"Previous" ]
  ]
-----------------------------------------------------------------------------
paginationNext_ :: MisoString -> View model action
paginationNext_ :: forall model action. MisoString -> View model action
paginationNext_ MisoString
url =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.li_ []
  [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.a_
    [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-ghost", MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.href_ MisoString
url ]
    [ View model action
"Next", [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
chevronRightIcon [] ]
  ]
-----------------------------------------------------------------------------
paginationEllipsis_ :: MisoString -> View model action
paginationEllipsis_ :: forall model action. MisoString -> View model action
paginationEllipsis_ MisoString
url =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.li_ []
  [ [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.a_
    [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"btn-icon-ghost", MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.href_ MisoString
url ]
    [ [Attribute action] -> View model action
forall action model. [Attribute action] -> View model action
dotsIcon [] ]
  ]
-----------------------------------------------------------------------------
paginationSample :: View model action
paginationSample :: forall model action. View model action
paginationSample =
  [Attribute action] -> [View model action] -> View model action
forall action model.
[Attribute action] -> [View model action] -> View model action
H.div_
  [ MisoString -> Attribute action
forall action. MisoString -> Attribute action
P.class_ MisoString
"inline-flex" ]
  [ PaginationProps action -> [View model action] -> View model action
forall action model.
PaginationProps action -> [View model action] -> View model action
pagination_ PaginationProps action
forall action. PaginationProps action
defaultPaginationProps
    [ MisoString -> View model action
forall model action. MisoString -> View model action
paginationPrevious_ MisoString
"#"
    , Bool -> MisoString -> [View model action] -> View model action
forall model action.
Bool -> MisoString -> [View model action] -> View model action
paginationLink_ Bool
False MisoString
"#" [ View model action
"1" ]
    , Bool -> MisoString -> [View model action] -> View model action
forall model action.
Bool -> MisoString -> [View model action] -> View model action
paginationLink_ Bool
True MisoString
"#" [ View model action
"2" ]
    , Bool -> MisoString -> [View model action] -> View model action
forall model action.
Bool -> MisoString -> [View model action] -> View model action
paginationLink_ Bool
False MisoString
"#" [ View model action
"3" ]
    , MisoString -> View model action
forall model action. MisoString -> View model action
paginationEllipsis_ MisoString
"#"
    , MisoString -> View model action
forall model action. MisoString -> View model action
paginationNext_ MisoString
"#"
    ]
  ]
-----------------------------------------------------------------------------
paginationCodeSample :: View model action
paginationCodeSample :: forall model action. View model action
paginationCodeSample =
  View model action
"""
  -----------------------------------------------------------------------------
  module MyPagination (paginationSample) where
  -----------------------------------------------------------------------------
  import           Miso
  import qualified Miso.Html.Element as H
  import qualified Miso.Html.Property as P
  import           Miso.UI.Icons
  import           Miso.UI.Pagination
  -----------------------------------------------------------------------------
  paginationSample :: View model action
  paginationSample =
    H.div_
    [ P.class_ "inline-flex" ]
    [ pagination_ defaultPaginationProps
      [ paginationPrevious_ "#"
      , paginationLink_ False "#" [ "1" ]
      , paginationLink_ True "#" [ "2" ]
      , paginationLink_ False "#" [ "3" ]
      , paginationEllipsis_ "#"
      , paginationNext_ "#"
      ]
    ]
  """
-----------------------------------------------------------------------------
paginationPropsApi :: View model action
paginationPropsApi :: forall model action. View model action
paginationPropsApi =
  View model action
"""
  -- | Props for 'pagination_'
  data PaginationProps action
    = PaginationProps
    { paginationClasses :: [MisoString]
      -- ^ Extra classes appended to the @nav@
    , paginationAttrs :: [Attribute action]
    }
  -----------------------------------------------------------------------------
  -- | Smart constructor
  defaultPaginationProps :: PaginationProps action
  defaultPaginationProps
    = PaginationProps
    { paginationClasses = []
    , paginationAttrs = []
    }
  """
-----------------------------------------------------------------------------