diff --git a/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte b/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte index e69ca73f7a..beadd151b8 100644 --- a/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte +++ b/src/ifctester/webapp/src/pages/Home/IdsViewer.svelte @@ -4,7 +4,7 @@ import { error, success } from "$src/modules/utils/toast.svelte"; import * as Tooltip from "$src/lib/components/ui/tooltip"; import type { AuditReport, AuditReportData } from "$src/types/report"; - import type { DocumentState, IdsDocument, Specification } from "$src/types/ids"; + import type { DocumentState, Facet, IdsDocument, Specification } from "$src/types/ids"; let activeDocument = $derived( IDS.Module.activeDocument ? (IDS.Module.documents[IDS.Module.activeDocument] as IdsDocument) : null @@ -122,6 +122,31 @@ return spec.requirements[reqIndex]; } + type RequirementGroup = { + facetType: string; + items: { facet: Facet; reqIndex: number }[]; + }; + + function getRequirementGroups(spec: Specification | undefined | null): RequirementGroup[] { + if (!spec?.requirements) return []; + + const groups: RequirementGroup[] = []; + let reqIndex = 0; + + for (const [facetType, facets] of Object.entries(spec.requirements)) { + if (!Array.isArray(facets) || facets.length === 0) continue; + groups.push({ + facetType, + items: facets.map((facet) => ({ + facet, + reqIndex: reqIndex++ + })) + }); + } + + return groups; + } + function toggleRequirementDetails(specIndex: number, reqIndex: number) { const key = `${specIndex}-${reqIndex}`; if (expandedRequirements.has(key)) { @@ -230,6 +255,7 @@ {#each activeDocument.specifications.specification as spec, index} {@const usage = getDocumentSpecificationUsage(spec)} + {@const requirementGroups = getRequirementGroups(spec)}