module Web.View.HubCapabilityManifests.Show where import Web.Types import Generated.Types import IHP.Prelude import IHP.ViewPrelude import Data.Aeson (Value(..), encode) import qualified Data.Vector as V import qualified Data.ByteString.Lazy.Char8 as BL data ShowView = ShowView { manifest :: !HubCapabilityManifest , hub :: !Hub } instance View ShowView where html ShowView { .. } = [hsx|
← Capability Manifests

{hub.name} — Capability Manifest

{statusBadge manifest.status}
{if manifest.status == "draft" then [hsx|
Edit Draft Activate
|] else if manifest.status == "active" then [hsx|
Retire
|] else [hsx||]}

Manifest Version

{manifest.manifestVersion}

Activated

{maybe "—" show manifest.activatedAt}

{forEach (maybeText manifest.capabilityDescription) (\d -> [hsx|

{d}

|])} {forEach (maybeText manifest.contact) (\c -> [hsx|

Contact: {c}

|])}
{jsonArraySection "Declared Widget Types" manifest.declaredWidgetTypes} {jsonArraySection "Declared Event Types" manifest.declaredEventTypes} {jsonArraySection "Declared Annotation Categories" manifest.declaredAnnotationCategories} {jsonArraySection "Declared Policy Scopes" manifest.declaredPolicyScopes}
|] jsonArraySection :: Text -> Value -> Html jsonArraySection title val = [hsx|

{title} ({arrayLen val})

{renderArrayItems val}
|] renderArrayItems :: Value -> Html renderArrayItems (Array v) | V.null v = [hsx|

None declared

|] renderArrayItems (Array v) = [hsx| |] renderArrayItems _ = [hsx|

|] renderItem :: Value -> Html renderItem (String t) = [hsx|
  • {t}
  • |] renderItem v = [hsx|
  • {cs (BL.unpack (encode v)) :: Text}
  • |] arrayLen :: Value -> Text arrayLen (Array v) = tshow (V.length v) arrayLen _ = "0" statusBadge :: Text -> Html statusBadge "active" = [hsx|active|] statusBadge "draft" = [hsx|draft|] statusBadge "retired" = [hsx|retired|] statusBadge s = [hsx|{s}|] maybeText :: Maybe Text -> [Text] maybeText Nothing = [] maybeText (Just t) = [t]