{{- /* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Commercial */ -}} {{- /* SPDX-FileCopyrightText: 2025-2026 Christian Galo */ -}} {{/* Grants management partial for operator; READ-ONLY. Per operator-mpa-conversion D8, Issue/Extend/Revoke and CreateGrant are exposed only on /operator/organizations/{orgID}. This view is browse/audit only. Built from the page-anatomy parts (docs/design-system.md ยง6). Delivery renders the derived state from the shared delivery-state derivation (ux-honest-surfaces design decision 1; the paged query ListGrantsWithDeliveryPage repeats the identical CASE expression, design D4): the same vocabulary and badge treatment the org-detail composite's Plan and grants table uses, so the two surfaces can never disagree. Issuance (grants.status) is what the record says happened to the grant and is deliberately NOT a colored state badge (Delivery above is); each column header carries a help icon (design D23) explaining the distinction instead of a standing paragraph. Governed by operator-list-scale: server-side search, the delivery-state filter, and true-total pagination (operator_list_controls.html, driven by .Nav). */}} {{ template "pageHeader" .Header }} {{ if .Error }} {{ else }} {{ if eq (len .Grants) 0 }} {{ if .Nav.Filtered }} {{ template "listControls" .Nav }} {{ template "listNoMatch" .Nav }} {{ else }} {{ template "emptyState" .Empty }} {{ end }} {{ else }} {{ template "listControls" .Nav }}
{{ range .Grants }} {{ end }}
Organization Grant target Qty Reason Issuance {{ template "helpIcon" (helpIcon "Issuance" "What the record says happened to the grant: active, revoked, or expired.") }} Delivery {{ template "helpIcon" (helpIcon "Delivery" "Whether the grant is delivering into the pool now.") }} Granted by Created
{{ if .OrgID }}{{ .OrgName }}{{ else }}{{ .OrgName }}{{ end }} {{ if .ProductName }}{{ .ProductName }}{{ else }}{{ .EntitlementSetName }}{{ end }} {{ template "statusBadge" .TargetBadge }} {{ .Quantity }} {{ .GrantReason }}{{ if .Note }}
{{ .Note }}
{{ end }}
{{ .Issuance }} {{ template "statusBadge" .DeliveryBadge }} {{/* A superseded row names its replacement, which is why it stopped delivering. The live row names nothing: an extension continues the same tier, so "extends X" only repeated the Product column (maintainer, 2026-09-05). */}} {{ if eq .DeliveryState "superseded" }} {{ if .ReplacedByLabel }}
replaced by {{ .ReplacedByLabel }}{{ end }} {{ end }}
{{ if .GrantedByName }}{{ .GrantedByName }}{{ else }}System{{ end }} {{ .CreatedAt }}
{{ template "listPager" .Nav }} {{ end }} {{ end }}