module Web.View.FederatedPolicyOverlays.PolicyComplianceDashboard where import Web.Types import Generated.Types import IHP.Prelude import IHP.ViewPrelude data PolicyComplianceDashboardView = PolicyComplianceDashboardView { overlays :: ![FederatedPolicyOverlay] , hubs :: ![Hub] , decisions :: ![DecisionRecord] , policies :: ![PolicyReference] } instance View PolicyComplianceDashboardView where html PolicyComplianceDashboardView { .. } = [hsx|

Policy Compliance Dashboard

← All Policies
{if null overlays then [hsx|

No active policy overlays.

|] else [hsx|
{forEach overlays renderOverlayRow}
|]}

Overall Coverage

{show totalDecisions}
Total Decisions
{show coveredDecisions}
With Policy Ref
{coveragePct}%
Coverage
|] where decisionIdsWithPolicy = map (.requirementId) policies |> catMaybes |> map show coveredDecisions = length $ filter (\d -> show d.id `elem` decisionIdsWithPolicy) decisions totalDecisions = length decisions coveragePct :: Int coveragePct = if totalDecisions == 0 then 0 else (coveredDecisions * 100) `div` totalDecisions renderOverlayRow :: FederatedPolicyOverlay -> Html renderOverlayRow o = [hsx|

{o.title}

Enforced from: {maybe "–" show o.enforcedFrom}

active
|]