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|

Cross-Hub Propagations

Detect
{renderPropagationsList propagations hubs} |] renderPropagationsList :: [CrossHubPropagation] -> [Hub] -> Html renderPropagationsList [] _ = [hsx|

No propagation events detected yet.

|] renderPropagationsList propagations hubs = [hsx|
{forEach propagations (renderPropRow hubs)}
Pattern Summary Source Hub Status Detected
|] 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"