From 2e6feed194ab6e77290c5f2bafe65f811b035c25 Mon Sep 17 00:00:00 2001
From: kraysent
Date: Sun, 22 Feb 2026 10:13:50 +0000
Subject: [PATCH 1/2] add original data to the crossmatch details page
---
src/pages/RecordCrossmatchDetails.tsx | 39 ++++++++++++++++++++++++++-
1 file changed, 38 insertions(+), 1 deletion(-)
diff --git a/src/pages/RecordCrossmatchDetails.tsx b/src/pages/RecordCrossmatchDetails.tsx
index 94cf807..1be1981 100644
--- a/src/pages/RecordCrossmatchDetails.tsx
+++ b/src/pages/RecordCrossmatchDetails.tsx
@@ -4,6 +4,11 @@ import { AladinViewer } from "../components/ui/Aladin";
import { Loading } from "../components/ui/Loading";
import { ErrorPage } from "../components/ui/ErrorPage";
import { CatalogData } from "../components/ui/CatalogData";
+import {
+ CommonTable,
+ Column,
+ CellPrimitive,
+} from "../components/ui/CommonTable";
import { getRecordCrossmatch } from "../clients/admin/sdk.gen";
import {
GetRecordCrossmatchResponse,
@@ -120,10 +125,32 @@ interface RecordCrossmatchDetailsProps {
data: GetRecordCrossmatchResponse;
}
+function OriginalData({
+ data,
+}: {
+ data: { [key: string]: unknown };
+}): ReactElement {
+ const columns: Column[] = [{ name: "Column" }, { name: "Value" }];
+ const tableData: Record[] = Object.entries(data).map(
+ ([key, value]) => ({
+ Column: key,
+ Value: value === null || value === undefined ? "NULL" : String(value),
+ }),
+ );
+
+ return ;
+}
+
function RecordCrossmatchDetails({
data,
}: RecordCrossmatchDetailsProps): ReactElement {
- const { crossmatch, candidates, schema } = data;
+ const {
+ crossmatch,
+ candidates,
+ schema,
+ table_name: tableName,
+ original_data: originalData,
+ } = data;
const recordCatalogs = crossmatch.catalogs;
const backendSchema = convertAdminSchemaToBackendSchema(schema);
const candidateSources = convertCandidatesToAdditionalSources(
@@ -156,6 +183,9 @@ function RecordCrossmatchDetails({
{crossmatch.record_id}
+
+ Table: {tableName}
+
Status:{" "}
{getResource(`crossmatch.status.${crossmatch.status}`).Title}
@@ -165,6 +195,13 @@ function RecordCrossmatchDetails({
+ {originalData && (
+
+
Original Data
+
+
+ )}
+
{candidates.length > 0 && (
Crossmatch Candidates
From f3ebcb1a0be02d354b5d133a57d45203a6c47ead Mon Sep 17 00:00:00 2001
From: kraysent
Date: Sun, 22 Feb 2026 10:18:17 +0000
Subject: [PATCH 2/2] add accodion component
---
src/components/ui/Accordion.tsx | 39 +++++++++++++++++++++++++++
src/pages/RecordCrossmatchDetails.tsx | 23 ++++++++--------
2 files changed, 51 insertions(+), 11 deletions(-)
create mode 100644 src/components/ui/Accordion.tsx
diff --git a/src/components/ui/Accordion.tsx b/src/components/ui/Accordion.tsx
new file mode 100644
index 0000000..e737319
--- /dev/null
+++ b/src/components/ui/Accordion.tsx
@@ -0,0 +1,39 @@
+import React, { ReactElement, useState } from "react";
+import classNames from "classnames";
+
+interface AccordionProps {
+ title: string;
+ children: React.ReactNode;
+ defaultOpen?: boolean;
+ className?: string;
+}
+
+export function Accordion({
+ title,
+ children,
+ defaultOpen = false,
+ className,
+}: AccordionProps): ReactElement {
+ const [isOpen, setIsOpen] = useState(defaultOpen);
+
+ return (
+
+
+ {isOpen &&
{children}
}
+
+ );
+}
diff --git a/src/pages/RecordCrossmatchDetails.tsx b/src/pages/RecordCrossmatchDetails.tsx
index 1be1981..c59c5cc 100644
--- a/src/pages/RecordCrossmatchDetails.tsx
+++ b/src/pages/RecordCrossmatchDetails.tsx
@@ -20,6 +20,7 @@ import { Schema as BackendSchema } from "../clients/backend/types.gen";
import { getResource } from "../resources/resources";
import { Link } from "../components/ui/Link";
import { CopyButton } from "../components/ui/CopyButton";
+import { Accordion } from "../components/ui/Accordion";
import { useDataFetching } from "../hooks/useDataFetching";
import { adminClient } from "../clients/config";
@@ -196,28 +197,28 @@ function RecordCrossmatchDetails({
{originalData && (
-
+
)}
{candidates.length > 0 && (
Crossmatch Candidates
{candidates.map((candidate, index) => (
-
-
- Candidate {index + 1}:{" "}
- {`PGC ${candidate.pgc}`}
-
+
+ {`PGC ${candidate.pgc}`}
-
+
))}
)}