- {href ?
{content} : content}
+const InnerMetadataView: React.FC<{ metadataEntries: MetadataEntries }> = ({ metadataEntries }) => {
+ const gitCommitInfo = metadataEntries.find(([key]) => key === 'git.commit.info')?.[1] as GitCommitInfo | undefined;
+ const entries = metadataEntries.filter(([key]) => key !== 'git.commit.info');
+ if (!gitCommitInfo && !entries.length)
+ return null;
+ return
+ {gitCommitInfo && <>
+
+ {entries.length > 0 && }
+ >}
+ {entries.map(([key, value]) => {
+ const valueString = typeof value !== 'object' || value === null || value === undefined ? String(value) : JSON.stringify(value);
+ const trimmedValue = valueString.length > 1000 ? valueString.slice(0, 1000) + '\u2026' : valueString;
+ return
+ {key}
+ {valueString && : {linkifyText(trimmedValue)}}
+
;
+ })}
+ ;
+};
+
+const GitCommitInfoView: React.FC<{ info: GitCommitInfo }> = ({ info }) => {
+ const email = info['revision.email'] ? ` <${info['revision.email']}>` : '';
+ const author = `${info['revision.author'] || ''}${email}`;
+ const shortTimestamp = Intl.DateTimeFormat(undefined, { dateStyle: 'medium' }).format(info['revision.timestamp']);
+ const longTimestamp = Intl.DateTimeFormat(undefined, { dateStyle: 'full', timeStyle: 'long' }).format(info['revision.timestamp']);
+ return
;
};
diff --git a/packages/html-reporter/src/reportView.tsx b/packages/html-reporter/src/reportView.tsx
index cf0f5e5e56..e48064201c 100644
--- a/packages/html-reporter/src/reportView.tsx
+++ b/packages/html-reporter/src/reportView.tsx
@@ -23,8 +23,6 @@ import { HeaderView } from './headerView';
import { Route, SearchParamsContext } from './links';
import type { LoadedReport } from './loadedReport';
import './reportView.css';
-import type { Metainfo } from './metadataView';
-import { MetadataView } from './metadataView';
import { TestCaseView } from './testCaseView';
import { TestFilesHeader, TestFilesView } from './testFilesView';
import './theme.css';
@@ -50,6 +48,7 @@ export const ReportView: React.FC<{
const searchParams = React.useContext(SearchParamsContext);
const [expandedFiles, setExpandedFiles] = React.useState