module Web.View.CrossHubPropagations.Index where
import Web.Types
import Generated.Types
import IHP.Prelude
import IHP.ViewPrelude
import Web.Routes ()
data IndexView = IndexView
{ propagations :: ![CrossHubPropagation]
, hubs :: ![Hub]
}
instance View IndexView where
html IndexView { .. } = [hsx|
{renderPropagationsList propagations hubs}
|]
renderPropagationsList :: [CrossHubPropagation] -> [Hub] -> Html
renderPropagationsList [] _ = [hsx|No propagation events detected yet.
|]
renderPropagationsList propagations hubs = [hsx|
| Pattern |
Summary |
Source Hub |
Status |
Detected |
|
{forEach propagations (renderPropRow hubs)}
|]
renderPropRow :: [Hub] -> CrossHubPropagation -> Html
renderPropRow hubs p =
let hubName hid = maybe "–" (.name) (find (\h -> h.id == hid) hubs)
in [hsx|
|
{p.patternType}
|
{p.summary} |
{maybe "–" hubName p.sourceHubId}
|
" text-xs px-2 py-0.5 rounded font-medium"}>
{p.status}
|
{show p.detectedAt} |
{renderAcknowledgeLink p}
{renderResolveLink p}
|
|]
renderAcknowledgeLink :: CrossHubPropagation -> Html
renderAcknowledgeLink p
| p.status == "open" = [hsx|Acknowledge|]
| otherwise = mempty
renderResolveLink :: CrossHubPropagation -> Html
renderResolveLink p
| p.status /= "resolved" = [hsx|Resolve|]
| otherwise = mempty
statusBadge :: Text -> Text
statusBadge s = case s of
"open" -> "bg-yellow-100 text-yellow-800"
"acknowledged" -> "bg-blue-100 text-blue-800"
"resolved" -> "bg-green-100 text-green-800"
_ -> "bg-gray-100 text-gray-600"