From 3c2a98c946013a4b4af25077c611f9734f7a9d54 Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 12:01:04 +0300 Subject: [PATCH 01/12] #13: add table info page --- makefile | 1 + src/.gitignore | 3 ++- src/App.tsx | 14 ++++++++++++++ src/pages/NotFound.tsx | 30 ++++++++++++++++++++++++++++++ src/pages/TableDetails.tsx | 7 +++++++ 5 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 src/pages/NotFound.tsx create mode 100644 src/pages/TableDetails.tsx diff --git a/makefile b/makefile index a3f2062..307f74a 100644 --- a/makefile +++ b/makefile @@ -8,6 +8,7 @@ build: gen: yarn run openapi-ts -i http://dm2.sao.ru:81/api/openapi.json -o ./src/clients/backend + yarn run openapi-ts -i http://dm2.sao.ru:81/admin/api/openapi.json -o ./src/clients/admin image-build: docker build . -t ghcr.io/hyperleda/hyperleda-webapp:$(GIT_VERSION) diff --git a/src/.gitignore b/src/.gitignore index d49256b..1d760ce 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -1 +1,2 @@ -clients/backend \ No newline at end of file +clients/backend +clients/admin diff --git a/src/App.tsx b/src/App.tsx index 49c8337..061a44d 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -3,6 +3,8 @@ import { Footer } from "./components/ui/footer"; import { HomePage } from "./pages/Home"; import { SearchResultsPage } from "./pages/SearchResults"; import { ObjectDetailsPage } from "./pages/ObjectDetails"; +import { NotFoundPage } from "./pages/NotFound"; +import { TableDetailsPage } from "./pages/TableDetails"; function Layout({ children }: { children: React.ReactNode }) { return ( @@ -41,6 +43,18 @@ function App() { } /> + + + + } + /> + } + /> ); diff --git a/src/pages/NotFound.tsx b/src/pages/NotFound.tsx new file mode 100644 index 0000000..d2a448a --- /dev/null +++ b/src/pages/NotFound.tsx @@ -0,0 +1,30 @@ +import { useNavigate } from "react-router-dom"; +import { Button } from "../components/ui/button"; + +export function NotFoundPage() { + const navigate = useNavigate(); + + return ( +
+
+
+

404

+

+ Page Not Found +

+

+ The page you're looking for doesn't exist or has been moved. +

+
+
+ +
+
+
+ ); +} diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx new file mode 100644 index 0000000..2c663b6 --- /dev/null +++ b/src/pages/TableDetails.tsx @@ -0,0 +1,7 @@ +import React from "react"; + +export const TableDetailsPage: React.FC = () => { + return
+ Hello world +
+} \ No newline at end of file From 237a409a37121a6a6a21757bb46f6ccd9bd116ca Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 12:32:09 +0300 Subject: [PATCH 02/12] disable footer by default & added dummy table info page --- src/components/ui/footer.tsx | 2 +- src/pages/TableDetails.tsx | 68 +++++++++++++++++++++++++++++++++--- 2 files changed, 65 insertions(+), 5 deletions(-) diff --git a/src/components/ui/footer.tsx b/src/components/ui/footer.tsx index db5f73a..29c433a 100644 --- a/src/components/ui/footer.tsx +++ b/src/components/ui/footer.tsx @@ -10,7 +10,7 @@ Old version: http://leda.univ-lyon1.fr/ `; export function Footer() { - const [isCollapsed, setIsCollapsed] = useState(false); + const [isCollapsed, setIsCollapsed] = useState(true); const toggleCollapse = () => { setIsCollapsed(!isCollapsed); diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 2c663b6..271ca0a 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -1,7 +1,67 @@ -import React from "react"; +import React, { useEffect, useState } from "react"; +import { GetTableResponse, HttpValidationError } from "../clients/admin/types.gen"; +import { getTableAdminApiV1TableGet } from "../clients/admin/sdk.gen"; +import { useNavigate, useParams } from "react-router-dom"; export const TableDetailsPage: React.FC = () => { - return
- Hello world -
+ const { tableName } = useParams<{ tableName: string }>(); + const [table, setTable] = useState(null); + const [error, setError] = useState(null); + const [loading, setLoading] = useState(true); + const navigate = useNavigate(); + + useEffect(() => { + const fetchData = async () => { + if (!tableName) { + navigate("/"); + return; + } + + try { + const response = await getTableAdminApiV1TableGet({ query: { table_name: tableName } }) + if (response.error) { + setError(response.error) + return + } + + if (response.data) { + setTable(response.data.data) + } + } catch (err) { + console.log("Error fetching table", err) + } finally { + setLoading(false); + } + } + + fetchData(); + }, [tableName, navigate]) + + const renderNotFound = () => ( +
+

Table not found.

+
+ ); + + const renderError = (error: HttpValidationError) => ( +
+

{error.detail?.toString()}

+
+ ); + + return ( +
+ {loading ? ( +
+

Loading...

+
+ ) : table ? ( +
{table?.bibliography.title}
+ ) : error ? ( + renderError(error) + ) : ( + renderNotFound() + )} +
+ ); } \ No newline at end of file From 4afc762c21171ebe45c5d54ad5db3f175814bd63 Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 16:41:46 +0300 Subject: [PATCH 03/12] add simple table rendering --- src/components/ui/common-table.tsx | 6 ++-- src/pages/ObjectDetails.tsx | 9 ------ src/pages/TableDetails.tsx | 47 ++++++++++++++++++++++++++++-- 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/components/ui/common-table.tsx b/src/components/ui/common-table.tsx index 6bea113..41b1954 100644 --- a/src/components/ui/common-table.tsx +++ b/src/components/ui/common-table.tsx @@ -21,9 +21,9 @@ export const CommonTable: React.FC = ({ data, className = "", tableClassName = "", - headerClassName = "", - columnHeaderClassName = "", - cellClassName = "", + headerClassName = "bg-gray-700 border-gray-600", + columnHeaderClassName = "bg-gray-600 text-white", + cellClassName = "bg-gray-700 text-gray-200", children, }) => { const renderCell = (value: string | number | undefined): React.ReactNode => { diff --git a/src/pages/ObjectDetails.tsx b/src/pages/ObjectDetails.tsx index 8b779e8..504f95e 100644 --- a/src/pages/ObjectDetails.tsx +++ b/src/pages/ObjectDetails.tsx @@ -176,9 +176,6 @@ export const ObjectDetailsPage: React.FC = () => {

Coordinates

Celestial coordinates of the object

@@ -189,9 +186,6 @@ export const ObjectDetailsPage: React.FC = () => {

Redshift

Redshift measurements

@@ -202,9 +196,6 @@ export const ObjectDetailsPage: React.FC = () => {

Velocity

Velocity measurements with respect to different apexes

diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 271ca0a..c875bb4 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -1,7 +1,50 @@ import React, { useEffect, useState } from "react"; -import { GetTableResponse, HttpValidationError } from "../clients/admin/types.gen"; +import { GetTableResponse, HttpValidationError, Bibliography } from "../clients/admin/types.gen"; import { getTableAdminApiV1TableGet } from "../clients/admin/sdk.gen"; import { useNavigate, useParams } from "react-router-dom"; +import { CommonTable } from "../components/ui/common-table"; + +const renderBibliography = (bib: Bibliography) => { + var authors = "" + + if (bib.authors.length >= 1) { + authors += bib.authors[0] + } + if (bib.authors.length >= 2) { + authors += " et al." + } + + authors += ` ${bib.year}` + + // const targetLink = `https://ui.adsabs.harvard.edu/abs/${bib.bibcode}/abstract` + + return `${authors}: "${bib.title}"` +} + +const renderTableDetails = (tableName: string, table: GetTableResponse) => { + const infoColumns = [ + { name: "Parameter" }, + { name: "Value" } + ] + + const infoValues = [ + { + Parameter: "Table ID", + Value: table.id, + }, + { + Parameter: "Bibliography", + Value: renderBibliography(table.bibliography) + } + ] + + return
+ +

{tableName}

+

{table.description}

+
+
+} export const TableDetailsPage: React.FC = () => { const { tableName } = useParams<{ tableName: string }>(); @@ -56,7 +99,7 @@ export const TableDetailsPage: React.FC = () => {

Loading...

) : table ? ( -
{table?.bibliography.title}
+ renderTableDetails(tableName ?? "", table) ) : error ? ( renderError(error) ) : ( From 39d089061220e20d17bc662cdc45ad2844ef8bad Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 20:30:14 +0300 Subject: [PATCH 04/12] add cell rendering and table meta info --- src/components/ui/common-table.tsx | 16 +++++++++++++--- src/pages/TableDetails.tsx | 22 ++++++++++++++++++++-- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/components/ui/common-table.tsx b/src/components/ui/common-table.tsx index 41b1954..c37a0c7 100644 --- a/src/components/ui/common-table.tsx +++ b/src/components/ui/common-table.tsx @@ -3,11 +3,12 @@ import classNames from "classnames"; interface Column { name: string; + renderCell?: (value: any) => React.ReactNode; } interface CommonTableProps { columns: Column[]; - data: Record[]; + data: Record[]; className?: string; tableClassName?: string; headerClassName?: string; @@ -26,10 +27,19 @@ export const CommonTable: React.FC = ({ cellClassName = "bg-gray-700 text-gray-200", children, }) => { - const renderCell = (value: string | number | undefined): React.ReactNode => { + const renderCell = (value: any, column: Column): React.ReactNode => { + if (column.renderCell) { + return column.renderCell(value); + } + if (value === undefined || value === null) { return NULL; } + + if (React.isValidElement(value)) { + return value; + } + return {String(value)}; }; @@ -78,7 +88,7 @@ export const CommonTable: React.FC = ({ cellClassName )} > - {renderCell(cellValue)} + {renderCell(cellValue, column)} ); })} diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index c875bb4..60a8961 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -16,9 +16,15 @@ const renderBibliography = (bib: Bibliography) => { authors += ` ${bib.year}` - // const targetLink = `https://ui.adsabs.harvard.edu/abs/${bib.bibcode}/abstract` + const targetLink = "https://ui.adsabs.harvard.edu/abs/" + bib.bibcode + "/abstract" - return `${authors}: "${bib.title}"` + return
{bib.bibcode} | {authors}: "{bib.title}"
+} + +function renderTime(time: string): string { + const dt = new Date(time as string); + + return dt.toString() } const renderTableDetails = (tableName: string, table: GetTableResponse) => { @@ -35,6 +41,18 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { { Parameter: "Bibliography", Value: renderBibliography(table.bibliography) + }, + { + Parameter: "Number of records", + Value: table.rows_num + }, + { + Parameter: "Datatype", + Value: table.meta.datatype + }, + { + Parameter: "Modification time", + Value: renderTime(table.meta.modification_dt as string) } ] From cfe342110159e4bf68c139aad42ddf2f63d2bb2d Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 20:43:18 +0300 Subject: [PATCH 05/12] added column descriptions table --- src/pages/TableDetails.tsx | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 60a8961..3e8d90d 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -56,11 +56,32 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { } ] + const columnInfoColumns = [ + { name: "Name" }, + { name: "Description" }, + { name: "Unit" }, + { name: "UCD" }, + ] + + var columnInfoValues: any[] = [] + + table.column_info.forEach(col => { + columnInfoValues.push({ + Name:

{col.name}

, + Description: col.description, + Unit: col.unit, + UCD: col.ucd, + }) + }); + return
- +

{tableName}

{table.description}

+ +

Description of columns

+
} From 3568584946505fbfa3501c1d11bf7914113d8e25 Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 20:54:04 +0300 Subject: [PATCH 06/12] add good rendering to UCDs --- src/components/ui/common-table.tsx | 2 +- src/pages/TableDetails.tsx | 26 +++++++++++++++++++++----- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/components/ui/common-table.tsx b/src/components/ui/common-table.tsx index c37a0c7..3750785 100644 --- a/src/components/ui/common-table.tsx +++ b/src/components/ui/common-table.tsx @@ -1,7 +1,7 @@ import React from "react"; import classNames from "classnames"; -interface Column { +export interface Column { name: string; renderCell?: (value: any) => React.ReactNode; } diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 3e8d90d..9016984 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -1,8 +1,8 @@ -import React, { useEffect, useState } from "react"; +import React, { ReactElement, useEffect, useState } from "react"; import { GetTableResponse, HttpValidationError, Bibliography } from "../clients/admin/types.gen"; import { getTableAdminApiV1TableGet } from "../clients/admin/sdk.gen"; import { useNavigate, useParams } from "react-router-dom"; -import { CommonTable } from "../components/ui/common-table"; +import { CommonTable, Column } from "../components/ui/common-table"; const renderBibliography = (bib: Bibliography) => { var authors = "" @@ -27,6 +27,22 @@ function renderTime(time: string): string { return dt.toString() } +function renderUCD(ucd: string | undefined | null): ReactElement { + if (!ucd) { + return
+ } + + var words: ReactElement[] = [] + + ucd.split(";").forEach(word => { + words.push( +
{word}
+ ) + }); + + return
{words}
+} + const renderTableDetails = (tableName: string, table: GetTableResponse) => { const infoColumns = [ { name: "Parameter" }, @@ -56,11 +72,11 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { } ] - const columnInfoColumns = [ + const columnInfoColumns: Column[] = [ { name: "Name" }, { name: "Description" }, { name: "Unit" }, - { name: "UCD" }, + { name: "UCD", renderCell: renderUCD }, ] var columnInfoValues: any[] = [] @@ -80,7 +96,7 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => {

{table.description}

-

Description of columns

+

Description of columns

} From fcc4b5a4c75c7a9d017afaf39497bf0956389f9b Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 21:11:57 +0300 Subject: [PATCH 07/12] row highlight --- src/components/ui/common-table.tsx | 9 ++++----- src/pages/ObjectDetails.tsx | 2 +- src/pages/TableDetails.tsx | 12 ++++++------ 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/components/ui/common-table.tsx b/src/components/ui/common-table.tsx index 3750785..0b8a839 100644 --- a/src/components/ui/common-table.tsx +++ b/src/components/ui/common-table.tsx @@ -24,7 +24,7 @@ export const CommonTable: React.FC = ({ tableClassName = "", headerClassName = "bg-gray-700 border-gray-600", columnHeaderClassName = "bg-gray-600 text-white", - cellClassName = "bg-gray-700 text-gray-200", + cellClassName = "text-gray-200", children, }) => { const renderCell = (value: any, column: Column): React.ReactNode => { @@ -74,8 +74,7 @@ export const CommonTable: React.FC = ({ {columns.map((column) => { @@ -84,8 +83,8 @@ export const CommonTable: React.FC = ({ {renderCell(cellValue, column)} diff --git a/src/pages/ObjectDetails.tsx b/src/pages/ObjectDetails.tsx index 504f95e..baa7602 100644 --- a/src/pages/ObjectDetails.tsx +++ b/src/pages/ObjectDetails.tsx @@ -153,7 +153,7 @@ export const ObjectDetailsPage: React.FC = () => { ]; return ( -
+
{object.catalogs?.coordinates?.equatorial && ( { Value: table.id, }, { - Parameter: "Bibliography", + Parameter: "Source paper", Value: renderBibliography(table.bibliography) }, { @@ -63,7 +63,7 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { Value: table.rows_num }, { - Parameter: "Datatype", + Parameter: "Type of data", Value: table.meta.datatype }, { @@ -90,13 +90,13 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { }) }); - return
+ return
-

{tableName}

-

{table.description}

+

{table.description}

+

{tableName}

-

Description of columns

+

Column information

} From 497ddb34a018cb20bdb98f91fa7c2378351dba18 Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 21:21:12 +0300 Subject: [PATCH 08/12] add copy button to column name --- src/pages/TableDetails.tsx | 40 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 66a0e5e..a58a7e9 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -3,6 +3,7 @@ import { GetTableResponse, HttpValidationError, Bibliography } from "../clients/ import { getTableAdminApiV1TableGet } from "../clients/admin/sdk.gen"; import { useNavigate, useParams } from "react-router-dom"; import { CommonTable, Column } from "../components/ui/common-table"; +import { Button } from "../components/ui/button"; const renderBibliography = (bib: Bibliography) => { var authors = "" @@ -43,6 +44,41 @@ function renderUCD(ucd: string | undefined | null): ReactElement { return
{words}
} +function renderColumnName(name: string): ReactElement { + const handleCopy = async () => { + try { + await navigator.clipboard.writeText(name); + } catch (err) { + console.error('Failed to copy text: ', err); + } + }; + + return ( +
+

{name}

+ +
+ ); +} + const renderTableDetails = (tableName: string, table: GetTableResponse) => { const infoColumns = [ { name: "Parameter" }, @@ -73,7 +109,7 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { ] const columnInfoColumns: Column[] = [ - { name: "Name" }, + { name: "Name", renderCell: renderColumnName }, { name: "Description" }, { name: "Unit" }, { name: "UCD", renderCell: renderUCD }, @@ -83,7 +119,7 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { table.column_info.forEach(col => { columnInfoValues.push({ - Name:

{col.name}

, + Name: col.name, Description: col.description, Unit: col.unit, UCD: col.ucd, From 863c8878e42dadd22eefc0988df0c1936ed3542a Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 22:04:35 +0300 Subject: [PATCH 09/12] added copy button --- package.json | 3 ++- src/components/ui/button.tsx | 4 ++-- src/index.css | 19 ------------------- src/pages/TableDetails.tsx | 26 +++++++++++--------------- 4 files changed, 15 insertions(+), 37 deletions(-) diff --git a/package.json b/package.json index b2072fa..f5b443c 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "classnames": "^2.5.1", "react": "^19.0.0", "react-dom": "^19.0.0", + "react-icons": "^5.5.0", "react-markdown": "^10.0.1", "react-router-dom": "^7.2.0", "remark-gfm": "^4.0.1", @@ -37,4 +38,4 @@ "typescript-eslint": "^8.24.1", "vite": "^6.2.0" } -} \ No newline at end of file +} diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 59d196b..15abcd0 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -22,8 +22,8 @@ export const Button: React.FC = ({ onClick={onClick} disabled={disabled} className={classNames( - "px-4 py-2 flex items-center bg-blue-500 text-white font-semibold rounded hover:bg-blue-600 transition disabled:bg-gray-400 disabled:cursor-not-allowed", - className + className, + "px-4 py-2 box-border flex items-center font-semibold border-1 border-[#1a1a1a] rounded-lg bg-[#1a1a1a] hover:border-[#646cff] transition-colors active:border-white", )} > {children} diff --git a/src/index.css b/src/index.css index 06dfb17..8ed283d 100644 --- a/src/index.css +++ b/src/index.css @@ -36,25 +36,6 @@ h1 { line-height: 1.1; } -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - @media (prefers-color-scheme: light) { :root { color: #213547; diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index a58a7e9..40b591b 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -4,6 +4,7 @@ import { getTableAdminApiV1TableGet } from "../clients/admin/sdk.gen"; import { useNavigate, useParams } from "react-router-dom"; import { CommonTable, Column } from "../components/ui/common-table"; import { Button } from "../components/ui/button"; +import { MdContentCopy, MdCheck } from "react-icons/md"; const renderBibliography = (bib: Bibliography) => { var authors = "" @@ -45,9 +46,13 @@ function renderUCD(ucd: string | undefined | null): ReactElement { } function renderColumnName(name: string): ReactElement { + const [copied, setCopied] = useState(false); + const handleCopy = async () => { try { await navigator.clipboard.writeText(name); + setCopied(true); + setTimeout(() => setCopied(false), 1000); } catch (err) { console.error('Failed to copy text: ', err); } @@ -58,22 +63,13 @@ function renderColumnName(name: string): ReactElement {

{name}

); From 34553d43187ddaf61844508048a249abacbf5efd Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 22:24:03 +0300 Subject: [PATCH 10/12] tweaks here and there --- src/components/ui/button.tsx | 2 +- src/components/ui/common-table.tsx | 4 ++-- src/pages/TableDetails.tsx | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx index 15abcd0..4781feb 100644 --- a/src/components/ui/button.tsx +++ b/src/components/ui/button.tsx @@ -22,8 +22,8 @@ export const Button: React.FC = ({ onClick={onClick} disabled={disabled} className={classNames( + "px-2 py-2 box-border flex items-center font-semibold border-1 border-[#1a1a1a] rounded-lg bg-[#1a1a1a] hover:border-[#646cff] transition-colors duration-300 active:border-white", className, - "px-4 py-2 box-border flex items-center font-semibold border-1 border-[#1a1a1a] rounded-lg bg-[#1a1a1a] hover:border-[#646cff] transition-colors active:border-white", )} > {children} diff --git a/src/components/ui/common-table.tsx b/src/components/ui/common-table.tsx index 0b8a839..646a389 100644 --- a/src/components/ui/common-table.tsx +++ b/src/components/ui/common-table.tsx @@ -59,7 +59,7 @@ export const CommonTable: React.FC = ({ @@ -83,7 +83,7 @@ export const CommonTable: React.FC = ({ diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 40b591b..ba6afbc 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -63,7 +63,7 @@ function renderColumnName(name: string): ReactElement {

{name}

+
+ ); +}; + +function renderBibliography(bib: Bibliography): ReactElement { var authors = "" if (bib.authors.length >= 1) { @@ -20,7 +55,9 @@ const renderBibliography = (bib: Bibliography) => { const targetLink = "https://ui.adsabs.harvard.edu/abs/" + bib.bibcode + "/abstract" - return
{bib.bibcode} | {authors}: "{bib.title}"
+ return +
{bib.bibcode} | {authors}: "{bib.title}"
+
} function renderTime(time: string): string { @@ -36,43 +73,21 @@ function renderUCD(ucd: string | undefined | null): ReactElement { var words: ReactElement[] = [] - ucd.split(";").forEach(word => { + ucd.split(";").forEach((word, index) => { words.push( -
{word}
+
{word}
) }); - return
{words}
+ return +
{words}
+
} function renderColumnName(name: string): ReactElement { - const [copied, setCopied] = useState(false); - - const handleCopy = async () => { - try { - await navigator.clipboard.writeText(name); - setCopied(true); - setTimeout(() => setCopied(false), 1000); - } catch (err) { - console.error('Failed to copy text: ', err); - } - }; - - return ( -
-

{name}

- -
- ); + return +

{name}

+
} const renderTableDetails = (tableName: string, table: GetTableResponse) => { @@ -88,7 +103,7 @@ const renderTableDetails = (tableName: string, table: GetTableResponse) => { }, { Parameter: "Source paper", - Value: renderBibliography(table.bibliography) + Value: renderBibliography(table.bibliography), }, { Parameter: "Number of records", From 0fc96475fac60c02941aa73d4dcb6bcfc680059e Mon Sep 17 00:00:00 2001 From: Artyom Zaporozhets Date: Fri, 29 Aug 2025 22:58:52 +0300 Subject: [PATCH 12/12] small fix to link --- src/pages/TableDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pages/TableDetails.tsx b/src/pages/TableDetails.tsx index 4cf37c2..370ebfb 100644 --- a/src/pages/TableDetails.tsx +++ b/src/pages/TableDetails.tsx @@ -56,7 +56,7 @@ function renderBibliography(bib: Bibliography): ReactElement { const targetLink = "https://ui.adsabs.harvard.edu/abs/" + bib.bibcode + "/abstract" return -
{bib.bibcode} | {authors}: "{bib.title}"
+
{bib.bibcode} | {authors}: "{bib.title}"
}