module Web.View.GovernanceTemplates.Show where import Web.Types import Generated.Types import IHP.Prelude import IHP.ViewPrelude import Web.Routes () import Data.Aeson (Value(..), decode, encode) import qualified Data.ByteString.Lazy.Char8 as BL data ShowView = ShowView { template :: !GovernanceTemplate , hub :: !Hub , cloneCount :: !Int } instance View ShowView where html ShowView { .. } = [hsx|
← Governance Templates

{template.name}

{renderPublishedBadge template.isPublished}

Hub: {hub.name}

{tshow cloneCount} clones

{maybe mempty renderTemplateDesc template.description}

Categories

{forEach (jsonArrayTexts template.categories) renderCategoryTag} {if null (jsonArrayTexts template.categories) then noCategoriesBadge else mempty}

Template Body

                {cs (BL.unpack (encode template.templateBody)) :: Text}
            
{if template.isPublished then renderCloneLink template.id else mempty} |] renderCloneLink :: Id GovernanceTemplate -> Html renderCloneLink tid = [hsx| Clone to My Hub |] renderCategoryTag :: Text -> Html renderCategoryTag cat = [hsx| {cat} |] renderPublishedBadge :: Bool -> Html renderPublishedBadge True = [hsx|published|] renderPublishedBadge False = [hsx|draft|] noCategoriesBadge :: Html noCategoriesBadge = [hsx|None|] renderTemplateDesc :: Text -> Html renderTemplateDesc d = [hsx|

{d}

|] jsonArrayTexts :: Value -> [Text] jsonArrayTexts val = case decode (encode val) of Just (arr :: [Text]) -> arr Nothing -> []