import { Box, Paper, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, Tooltip, Typography } from "@mui/material"; import Link from "@mui/material/Link"; import { Fragment, useState } from "react"; import { IOccurrence, IReport, IReportApplication, IReportModule } from "../../server/src/core/interfaces"; import { DisablableConfiguration } from "./DisablableConfiguration"; import { DisabledConfigurations } from "./DisabledConfigurations"; import { IModuleId } from "./functions"; import { LibraryInfo } from "./LibraryInfo"; import { ModuleReport } from "./ModuleReport"; import { Occurrences } from "./Occurrences"; import { useRefresher } from "./Refresher"; import ReportHelper from "./ReportHelper"; export interface IReportProps { report: IReport; } export const Report = (props: IReportProps) => { const refresh = useRefresher(); const [occurrences, setOccurrences] = useState(undefined); const [moduleId, setModuleId] = useState(undefined); const report = props.report; const allVersions = [...ReportHelper.fetchAllVersions(report)]; allVersions.sort(); const librariesAndConfigurations = ReportHelper.fetchConfigurationPerLibrariesAndVersion(report); function renderAppRows(appName: string, appReport: IReportApplication) { const appVersions = [...ReportHelper.fetchAppVersions(appReport)]; if (appVersions.length === 0) { return ; } return ( {appName} ({appVersions.join(", ")}) {Object.entries(appReport.modules).map(([moduleName, moduleReport]) => renderModuleRows(appName, moduleName, moduleReport))} ); } function renderModuleRows(appName: string, moduleName: string, moduleReport: IReportModule) { const moduleVersions = [...ReportHelper.fetchModuleVersions(moduleReport)]; if (moduleVersions.length === 0) { return ; } const occurencesPerVersion = ReportHelper.getOccurrencesPerVersion(moduleReport.occurrences); return ( setModuleId({ appName, moduleName })}> {moduleName} {allVersions.map((v) => ( {occurencesPerVersion[v] ? ( setOccurrences(occurencesPerVersion[v])}> {occurencesPerVersion[v].length}x ) : ( "" )} ))} ); } return ( <> Found libraries/versions {sort([...librariesAndConfigurations.keys()]).map((libAndVersion) => { const library = librariesAndConfigurations.get(libAndVersion)!.libraryInfo; return ( {sort([...librariesAndConfigurations.get(libAndVersion)!.configurations]).map((configuration) => ( ))} ); })}
Version / modules App/Module {allVersions.map((version) => ( {version} ))} {Object.entries(report.applications).map(([appName, appReport]) => renderAppRows(appName, appReport))}
{occurrences && setOccurrences(undefined)} onRefresh={refresh} />} {moduleId && setModuleId(undefined)} />} ); }; function sort(array: string[]): string[] { const result = [...array]; result.sort(); return result; }