diff --git a/package-lock.json b/package-lock.json
index 882d17093..04e6c95b3 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3493,15 +3493,15 @@
}
},
"node_modules/@vitest/expect": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.6.tgz",
- "integrity": "sha512-1+7q9BtaKzEmO+fmNT3kYvoNn5Y71XWAx2Q5HRim4tTVRQVRv4uJFAQ5FbK0OPUeNP/WmVCpxYxoJdvuHVjzBQ==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.2.7.tgz",
+ "integrity": "sha512-E8eBXaKibuvH2pSZErOjdVb5vF4PbKYcrnluBTYxEk1l/VhhwZg1kZQsdtjq+CsF5CFydf2Rdkz7jDHKSisi3w==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/spy": "3.2.6",
- "@vitest/utils": "3.2.6",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
"chai": "^5.2.0",
"tinyrainbow": "^2.0.0"
},
@@ -3510,13 +3510,13 @@
}
},
"node_modules/@vitest/mocker": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.6.tgz",
- "integrity": "sha512-EZOrpDbkKotFAP7wPAQV1UIyoGOk4oX7ynWhBhLB7v+meMHbQhU16oPpIYGTTe4oFlhpryGpgpcZP/sin3hYuw==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.2.7.tgz",
+ "integrity": "sha512-Trr0hYO9CM3Wj6ksWHRhK9IZpIY6wTMO5u/MqXurMxT57sWBaOPEtP3Oq60ihZuh5JsiagKfz95OcxdEP6dBrA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/spy": "3.2.6",
+ "@vitest/spy": "3.2.7",
"estree-walker": "^3.0.3",
"magic-string": "^0.30.17"
},
@@ -3537,9 +3537,9 @@
}
},
"node_modules/@vitest/pretty-format": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.6.tgz",
- "integrity": "sha512-lb7XXXzmm2h2ASzFnRvQpDo6onT1NmMJA3tkGTWiBFtRJ9lxGY3d3mm/Apt36gej2bkkOVLL/yTOtufDaFa/jA==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.2.7.tgz",
+ "integrity": "sha512-KUHlwqVu0sRlhCdyPdQ/wBoTfRahjUky1MubOmYw9fWfIZy1gNoHpuaaQBPAaMaVYdQYHJLurzj8ECCj5OwTqA==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3550,13 +3550,13 @@
}
},
"node_modules/@vitest/runner": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.6.tgz",
- "integrity": "sha512-HYcoSj1w5tcgUnzoF0HcyaAQjpA1gj9ftUJ7iSJSuipc02jW9gKkigwZbjFldAfYHA1fa8UZVRftdMY5msWM9Q==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.2.7.tgz",
+ "integrity": "sha512-sB9y4ovltoQP+WaUPwmSxO9WIg9Ig694Di5PalVPsYHklAdE027mehpWF2SQSVq+k6sFgaivbTjTJwZLSHbedA==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/utils": "3.2.6",
+ "@vitest/utils": "3.2.7",
"pathe": "^2.0.3",
"strip-literal": "^3.0.0"
},
@@ -3565,13 +3565,13 @@
}
},
"node_modules/@vitest/snapshot": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.6.tgz",
- "integrity": "sha512-H+ZjNTWGpObenh0YnlBctAPnJSI20P81PL8BPzWpx54YXLLTm8hEsWawtcYLMrwvpK48hGxLLbCS+1KRXhsKhw==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.2.7.tgz",
+ "integrity": "sha512-7C+MwShwtBSI5Buwoyg3s/iY1eHL9PKAf+O1wVh/TdnjXUtkoL/9YQtre90i4MtNXM6edP1wJ2zOBpfCyhIS7g==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.6",
+ "@vitest/pretty-format": "3.2.7",
"magic-string": "^0.30.17",
"pathe": "^2.0.3"
},
@@ -3580,9 +3580,9 @@
}
},
"node_modules/@vitest/spy": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.6.tgz",
- "integrity": "sha512-oq6BbH68WzcWmwtBrU9nqLeaXTR4XwJF7FSLkKEZo4i6eoXcrxjcwSuTvWBIRUTC6VC72nXYunzqgZA+IKdtxg==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.2.7.tgz",
+ "integrity": "sha512-Q2eQGI6d2L/hBtZ0qNuKcAGid68XK6cv1xsoaIma6PaJhHPoqcEJhYpXZ/5myCMqkNgtP6UKuBhbc0nHKnrkuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -3593,13 +3593,13 @@
}
},
"node_modules/@vitest/utils": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.6.tgz",
- "integrity": "sha512-lI23nIs4bnT3T8NIoh+vFaz5s2/DdP0Jgt2jxwgWljvwn82cLJtyi/If+fjFyoLMGIOz0U/fKvWE0d4jsNQEfg==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.2.7.tgz",
+ "integrity": "sha512-x6BDOd7dyo3PFLY3I9/HJ25X/6OurhGXk2/B9gOZNPF7XDVjeBK4k01lQE5uvDpbuheErh91qYuE1E2OEjK3Rw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@vitest/pretty-format": "3.2.6",
+ "@vitest/pretty-format": "3.2.7",
"loupe": "^3.1.4",
"tinyrainbow": "^2.0.0"
},
@@ -6755,9 +6755,9 @@
"license": "MIT"
},
"node_modules/js-yaml": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
- "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz",
+ "integrity": "sha512-SFNOvSJ+Dgf/9An904Yx+CgSlIPCkIpao4qo51lpee25TIRejdH3rhR4EZMGoNx3/TP3O+wzWuiTFl4sqbltzA==",
"funding": [
{
"type": "github",
@@ -9977,9 +9977,9 @@
}
},
"node_modules/tinyspy": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.4.tgz",
- "integrity": "sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==",
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-4.0.6.tgz",
+ "integrity": "sha512-u8KszXvGfU68hVcZpRHKG28T0krMuv2G5nDhiHaMLen/gIuFEgIJhaJuO69qjnXg5paSrbPMFfx3brNuN8eVSg==",
"dev": true,
"license": "MIT",
"engines": {
@@ -10642,20 +10642,20 @@
}
},
"node_modules/vitest": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.6.tgz",
- "integrity": "sha512-xejya+bT/j/+R/AGa1XOfRxLmNUlLtlwjRsFUILF+xHfzElmGcmFydy2gqqIrd62ptIEfwVMofd19uNWD9L7Nw==",
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.2.7.tgz",
+ "integrity": "sha512-KrxIJ62Fd89gfysR4WotlgZABiz2dqFPgqGzX7s+CwsqLFomRH7777ZcrOD6+WVAh7khPQP41A+BKbpcJFrdEg==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/chai": "^5.2.2",
- "@vitest/expect": "3.2.6",
- "@vitest/mocker": "3.2.6",
- "@vitest/pretty-format": "^3.2.6",
- "@vitest/runner": "3.2.6",
- "@vitest/snapshot": "3.2.6",
- "@vitest/spy": "3.2.6",
- "@vitest/utils": "3.2.6",
+ "@vitest/expect": "3.2.7",
+ "@vitest/mocker": "3.2.7",
+ "@vitest/pretty-format": "^3.2.7",
+ "@vitest/runner": "3.2.7",
+ "@vitest/snapshot": "3.2.7",
+ "@vitest/spy": "3.2.7",
+ "@vitest/utils": "3.2.7",
"chai": "^5.2.0",
"debug": "^4.4.1",
"expect-type": "^1.2.1",
@@ -10685,8 +10685,8 @@
"@edge-runtime/vm": "*",
"@types/debug": "^4.1.12",
"@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0",
- "@vitest/browser": "3.2.6",
- "@vitest/ui": "3.2.6",
+ "@vitest/browser": "3.2.7",
+ "@vitest/ui": "3.2.7",
"happy-dom": "*",
"jsdom": "*"
},
diff --git a/src/components/Collections/CreateCollection/CreateCollectionButton.jsx b/src/components/Collections/CreateCollection/CreateCollectionButton.jsx
index 493954262..41be3bfed 100644
--- a/src/components/Collections/CreateCollection/CreateCollectionButton.jsx
+++ b/src/components/Collections/CreateCollection/CreateCollectionButton.jsx
@@ -1,64 +1,40 @@
-import React, { useState, useCallback } from 'react';
+import React from 'react';
import { Button, Tooltip } from '@mui/material';
-import CreateCollectionDialog from './CreateCollectionDialog';
+import { Link } from 'react-router';
import AddIcon from '@mui/icons-material/Add';
import { useClient } from '../../../context/client-context';
-import PropTypes from 'prop-types';
const BUTTON_LABEL = 'Create Collection';
-const CreateCollectionButton = ({ onComplete }) => {
- const [open, setOpen] = useState(false);
+const CreateCollectionButton = () => {
const { isRestricted } = useClient();
- const handleClose = useCallback(() => {
- setOpen(false);
- onComplete();
- }, [onComplete]);
-
- const handleOpen = useCallback(() => {
- if (!isRestricted) {
- setOpen(true);
- }
- }, [isRestricted]);
+ if (isRestricted) {
+ return (
+
+
+ } disabled aria-label={BUTTON_LABEL}>
+ {BUTTON_LABEL}
+
+
+
+ );
+ }
return (
- <>
- {isRestricted ? (
-
- {/* span is needed to allow tooltip on disabled button */}
-
- }
- onClick={handleOpen}
- disabled
- aria-label={BUTTON_LABEL}
- >
- {BUTTON_LABEL}
-
-
-
- ) : (
- }
- onClick={handleOpen}
- aria-label={BUTTON_LABEL}
- >
- {BUTTON_LABEL}
-
- )}
-
- >
+ }
+ component={Link}
+ to="/collection/create"
+ aria-label={BUTTON_LABEL}
+ >
+ {BUTTON_LABEL}
+
);
};
-CreateCollectionButton.propTypes = {
- onComplete: PropTypes.func.isRequired,
-};
-
export default CreateCollectionButton;
diff --git a/src/pages/CollectionCreation.jsx b/src/pages/CollectionCreation.jsx
new file mode 100644
index 000000000..6b7b92e01
--- /dev/null
+++ b/src/pages/CollectionCreation.jsx
@@ -0,0 +1,21 @@
+import React, { useCallback } from 'react';
+import { Navigate, useNavigate } from 'react-router';
+import CreateCollectionDialog from '../components/Collections/CreateCollection/CreateCollectionDialog';
+import { useClient } from '../context/client-context';
+
+function CollectionCreation() {
+ const navigate = useNavigate();
+ const { isRestricted } = useClient();
+
+ const handleClose = useCallback(() => {
+ navigate('/collections');
+ }, [navigate]);
+
+ if (isRestricted) {
+ return ;
+ }
+
+ return ;
+}
+
+export default CollectionCreation;
diff --git a/src/pages/Collections.jsx b/src/pages/Collections.jsx
index 9a9ff3be6..04026376b 100644
--- a/src/pages/Collections.jsx
+++ b/src/pages/Collections.jsx
@@ -298,7 +298,7 @@ function Collections() {
Delete ({selectedCollections.size})
)}
- getCollectionsCall(currentPage)} />
+
getCollectionsCall(currentPage)} key={'snapshots'} />
diff --git a/src/routes.jsx b/src/routes.jsx
index be6ae658b..6f1ba42e3 100644
--- a/src/routes.jsx
+++ b/src/routes.jsx
@@ -3,6 +3,7 @@ import Home from './pages/Home';
import Console from './pages/Console';
import Collections from './pages/Collections';
import Collection from './pages/Collection';
+import CollectionCreation from './pages/CollectionCreation';
import Visualize from './pages/Visualize';
import TutorialIndex from './pages/TutorialIndex';
import Tutorial from './pages/Tutorial';
@@ -22,6 +23,7 @@ const routes = () => [
{ path: '/welcome', element: },
{ path: '/console', element: },
{ path: '/datasets', element: },
+ { path: '/collection/create', element: },
{ path: '/collections', element: },
{ path: '/collections/:collectionName', element: },
{