diff --git a/backend/src/controllers/couchdb.controller.js b/backend/src/controllers/couchdb.controller.js index ac75807..e913ee3 100644 --- a/backend/src/controllers/couchdb.controller.js +++ b/backend/src/controllers/couchdb.controller.js @@ -1,8 +1,8 @@ const axios = require("axios"); -const COUCHDB_BASE_URL = - process.env.COUCHDB_BASE_URL || - "https://cors.redoc.ly/https://neurojson.io:7777"; - +// const COUCHDB_BASE_URL = +// process.env.COUCHDB_BASE_URL || +// "https://cors.redoc.ly/https://neurojson.io:7777"; +const COUCHDB_BASE_URL = "https://neurojson.io:7777"; // get all dbs list (registry) const getDbList = async (req, res) => { try { diff --git a/backend/src/routes/dbs.routes.js b/backend/src/routes/dbs.routes.js index d11f970..c8a57fa 100644 --- a/backend/src/routes/dbs.routes.js +++ b/backend/src/routes/dbs.routes.js @@ -16,7 +16,7 @@ router.get("/", getDbList); router.get("/stats", getDbStats); // cross-database search -router.get("/search", searchAllDatabases); +router.post("/search", searchAllDatabases); // Specific database routes router.get("/:dbName", getDbInfo); diff --git a/src/components/User/Dashboard/DatasetOrganizer/utils/plannerHelpers.ts b/src/components/User/Dashboard/DatasetOrganizer/utils/plannerHelpers.ts index 5b203e8..820c61f 100644 --- a/src/components/User/Dashboard/DatasetOrganizer/utils/plannerHelpers.ts +++ b/src/components/User/Dashboard/DatasetOrganizer/utils/plannerHelpers.ts @@ -858,7 +858,14 @@ export const buildBidsPlan = async ( } // Preserve raw YAML string for saving - const planYamlStr = raw.startsWith("```") ? planYaml._raw ?? raw : raw; + // const planYamlStr = raw.startsWith("```") ? planYaml._raw ?? raw : raw; + // Preserve raw YAML string for saving — strip markdown fences if present (mirrors planner.py Step 3) + let planYamlStr = raw.trim(); + if (planYamlStr.startsWith("```yaml")) planYamlStr = planYamlStr.slice(7); + else if (planYamlStr.startsWith("```")) + planYamlStr = planYamlStr.split("\n").slice(1).join("\n"); + if (planYamlStr.endsWith("```")) planYamlStr = planYamlStr.slice(0, -3); + planYamlStr = planYamlStr.trim(); log("✓ BIDSPlan complete"); return { diff --git a/src/pages/UpdatedDatasetDetailPage.tsx b/src/pages/UpdatedDatasetDetailPage.tsx index 52f87ca..f94a751 100644 --- a/src/pages/UpdatedDatasetDetailPage.tsx +++ b/src/pages/UpdatedDatasetDetailPage.tsx @@ -68,6 +68,7 @@ import { fetchDbInfoByDatasetId, } from "redux/neurojson/neurojson.action"; import { NeurojsonSelector } from "redux/neurojson/neurojson.selector"; +import { resetDocument } from "redux/neurojson/neurojson.slice"; // import { NeurojsonService } from "services/neurojson.service"; import RoutesEnum from "types/routes.enum"; @@ -262,7 +263,7 @@ const UpdatedDatasetDetailPage: React.FC = () => { const [searchParams, setSearchParams] = useSearchParams(); const focus = searchParams.get("focus") || undefined; // get highlight from url const rev = searchParams.get("rev") || undefined; // get revision from url - + const [chart2DPreviewPath, setChart2DPreviewPath] = useState(""); const [externalLinks, setExternalLinks] = useState([]); const [internalLinks, setInternalLinks] = useState([]); const [isInternalExpanded, setIsInternalExpanded] = useState(true); @@ -284,6 +285,14 @@ const UpdatedDatasetDetailPage: React.FC = () => { ? rawSummary : Object.values(rawSummary).filter(Boolean).join("\n\n"); const readme = datasetDocument?.["README"] ?? ""; + + useEffect(() => { + window.__clear2DPath = () => setChart2DPreviewPath(""); + return () => { + delete window.__clear2DPath; + }; + }, []); + const handleSelectRevision = (newRev?: string | null) => { setSearchParams((prev) => { const p = new URLSearchParams(prev); // copy of the query url @@ -335,7 +344,7 @@ const UpdatedDatasetDetailPage: React.FC = () => { : "Unknown Size"; const parts = currentPath.split("/"); - const subpath = parts.slice(-3).join("/"); + const subpath = parts.slice(-6).join("/"); const label = parentKey || "ExternalData"; links.push({ @@ -478,6 +487,12 @@ const UpdatedDatasetDetailPage: React.FC = () => { }; }, []); + // clean old dataset detail and metadata panel(include rev) + useEffect(() => { + dispatch(resetDocument()); // clear redux state + setRevsList([]); // clear local state + }, [dbName, docId, dispatch]); + useEffect(() => { if (!dbName || !docId) return; @@ -493,10 +508,10 @@ const UpdatedDatasetDetailPage: React.FC = () => { const fromDoc = Array.isArray(datasetDocument?._revs_info) ? (datasetDocument._revs_info as { rev: string }[]) : []; - if (fromDoc.length && revsList.length === 0) { - setRevsList(fromDoc); + if (fromDoc.length > 0) { + setRevsList(fromDoc); // only update when we have revisions } - }, [datasetDocument, revsList.length]); + }, [datasetDocument]); useEffect(() => { if (datasetDocument) { @@ -625,7 +640,9 @@ const UpdatedDatasetDetailPage: React.FC = () => { const handlePreview = ( dataOrUrl: string | any, idx: number, - isInternal: boolean = false + isInternal: boolean = false, + previewPath: string = "", + displayNumber?: number ) => { // console.log( // "🟢 Preview button clicked for:", @@ -635,6 +652,9 @@ const UpdatedDatasetDetailPage: React.FC = () => { // "Is Internal:", // isInternal // ); + setChart2DPreviewPath( + displayNumber ? `[${displayNumber}] ${previewPath}` : previewPath + ); // Clear any stale preview type from last run delete (window as any).__previewType; @@ -783,14 +803,14 @@ const UpdatedDatasetDetailPage: React.FC = () => { // Try internal data first const internal = internalMap.get(previewPath); if (internal) { - handlePreview(internal.data, internal.index, true); + handlePreview(internal.data, internal.index, true, previewPath); return; } // Then try external data by JSON path const external = linkMap.get(previewPath); if (external) { - handlePreview(external.url, external.index, false); + handlePreview(external.url, external.index, false, previewPath); } }, [ datasetDocument, @@ -1324,7 +1344,12 @@ const UpdatedDatasetDetailPage: React.FC = () => { }, }} onClick={() => - handlePreview(link.data, link.index, true) + handlePreview( + link.data, + link.index, + true, + link.path + ) } > Preview @@ -1463,7 +1488,7 @@ const UpdatedDatasetDetailPage: React.FC = () => { }} title={link.name} > - {link.name} + {index + 1}. {link.name}