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 && ( -
-

Original Data

+ -
+ )} {candidates.length > 0 && (

Crossmatch Candidates

{candidates.map((candidate, index) => ( -
-

- Candidate {index + 1}:{" "} - {`PGC ${candidate.pgc}`} -

+ + {`PGC ${candidate.pgc}`} -
+ ))}
)}