module IHP.Breadcrumb.Types where

import Prelude (Show(..), Maybe, (<>), ($))
import Data.Text (Text)
import Text.Blaze.Html (Html)
import Text.Blaze.Html.Renderer.String (renderHtml)

data BreadcrumbItem =
    BreadcrumbItem
    { BreadcrumbItem -> Html
breadcrumbLabel :: Html -- ^ The label of a single breadcrumbs items. May be HTML, thus use SVG or font icon.
    , BreadcrumbItem -> Maybe Text
url :: Maybe Text -- ^ The URL of the item. If Nothing, it will only show the label.
    }

-- Html doesn't have a Show instance, so we define it manually and use 'renderHtml' for that.
instance Show BreadcrumbItem where
    show :: BreadcrumbItem -> String
show BreadcrumbItem
breadcrumbItem = String
"{ breadcrumbLabel = \"" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
renderedLabel String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"\", url = " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
renderedUrl String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
" }"
        where
            renderedLabel :: String
renderedLabel = Html -> String
renderHtml (Html -> String) -> Html -> String
forall a b. (a -> b) -> a -> b
$ BreadcrumbItem -> Html
breadcrumbLabel BreadcrumbItem
breadcrumbItem
            renderedUrl :: String
renderedUrl = Maybe Text -> String
forall a. Show a => a -> String
show (Maybe Text -> String) -> Maybe Text -> String
forall a b. (a -> b) -> a -> b
$ BreadcrumbItem -> Maybe Text
url BreadcrumbItem
breadcrumbItem