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

Policy Compliance Dashboard

← All Policies
{renderComplianceOverlays overlays}

Overall Coverage

{show totalDecisions}
Total Decisions
{show coveredDecisions}
With Policy Ref
{coveragePct}%
Coverage
|] where decisionIdsWithPolicy = map (show . (.decisionId)) policies 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 renderComplianceOverlays :: [FederatedPolicyOverlay] -> Html renderComplianceOverlays [] = [hsx|

No active policy overlays.

|] renderComplianceOverlays os = [hsx|
{forEach os renderOverlayRow}
|] renderOverlayRow :: FederatedPolicyOverlay -> Html renderOverlayRow o = [hsx|

{o.title}

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

active
|]