diff --git a/client/src/components/DataFiles/DataFilesBreadcrumbs/DataFilesBreadcrumbs.jsx b/client/src/components/DataFiles/DataFilesBreadcrumbs/DataFilesBreadcrumbs.jsx
index 636a4e5f7..010d88065 100644
--- a/client/src/components/DataFiles/DataFilesBreadcrumbs/DataFilesBreadcrumbs.jsx
+++ b/client/src/components/DataFiles/DataFilesBreadcrumbs/DataFilesBreadcrumbs.jsx
@@ -141,7 +141,7 @@ const DataFilesBreadcrumbs = ({
});
};
- const { fetchSelectedSystem } = useSystems();
+ const { fetchSelectedSystem, isRootProjectSystem } = useSystems();
const selectedSystem = fetchSelectedSystem({ scheme, system, path });
@@ -183,9 +183,7 @@ const DataFilesBreadcrumbs = ({
{currentDirectory.length === 0 ? (
-
- {truncateMiddle(systemName || 'Shared Workspaces', 30)}
-
+ {truncateMiddle(systemName, 30)}
) : (
currentDirectory.map((pathComp, i) => {
if (i === fullPath.length - 1) {
@@ -194,11 +192,13 @@ const DataFilesBreadcrumbs = ({
})
)}
- {systemName && api === 'tapis' && (
-
- )}
+ {systemName &&
+ api === 'tapis' &&
+ !isRootProjectSystem(selectedSystem ?? '') && (
+
+ )}
);
};
diff --git a/client/src/components/DataFiles/DataFilesDropdown/DataFilesDropdown.jsx b/client/src/components/DataFiles/DataFilesDropdown/DataFilesDropdown.jsx
index 60e90fce2..33affeef4 100644
--- a/client/src/components/DataFiles/DataFilesDropdown/DataFilesDropdown.jsx
+++ b/client/src/components/DataFiles/DataFilesDropdown/DataFilesDropdown.jsx
@@ -26,7 +26,12 @@ const BreadcrumbsDropdown = ({
const location = useLocation();
const pathParts = location.pathname.split('/');
+
const projectId = pathParts.includes('projects')
+ ? pathParts[pathParts.indexOf('projects') + 2]
+ : null;
+
+ const rootProjectSystem = pathParts.includes('projects')
? pathParts[pathParts.indexOf('projects') + 1]
: null;
@@ -35,13 +40,15 @@ const BreadcrumbsDropdown = ({
let url;
if (scheme === 'projects' && targetPath === systemName) {
- url = `${basePath}/${api}/projects/${projectId}/`;
+ url = `${basePath}/${api}/projects/${rootProjectSystem}/${projectId}/`;
} else if (scheme === 'projects' && !targetPath) {
- url = `${basePath}/${api}/projects/`;
+ url = `${basePath}/${api}/projects/${rootProjectSystem}`;
} else if (api === 'googledrive' && !targetPath) {
url = `${basePath}/${api}/${scheme}/${system}/`;
} else if (api === 'tapis' && scheme !== 'projects' && !targetPath) {
url = `${basePath}/${api}/${scheme}/${system}/`;
+ } else if (scheme === 'projects') {
+ url = `${basePath}/${api}/projects/${rootProjectSystem}/${system}${targetPath}`;
} else {
url = `${basePath}/${api}/${scheme}/${system}${targetPath}/`;
}
@@ -69,7 +76,7 @@ const BreadcrumbsDropdown = ({
);
const sharedWorkspacesDisplayName = systems.find(
- (e) => e.scheme === 'projects'
+ (e) => e.scheme === 'projects' && e.system === rootProjectSystem
)?.name;
let currentPath = startingPath;
@@ -81,7 +88,7 @@ const BreadcrumbsDropdown = ({
const fullPath = paths.reverse();
const displayPaths =
scheme === 'projects' ? [...fullPath, systemName] : fullPath;
- const sliceStart = scheme === 'projects' && systemName ? 0 : 1;
+ const sliceStart = 1;
return (
{
const dispatch = useDispatch();
@@ -40,6 +41,12 @@ const DataFilesManageProjectModal = () => {
return projectSystem?.readOnly || !canEditSystem;
});
+ const portalName = useSelector((state) => state.workbench.portalName);
+
+ const { DataFilesManageProjectModalAddon } = useAddonComponents({
+ portalName,
+ });
+
const toggle = useCallback(() => {
setTransferMode(false);
dispatch({
@@ -154,6 +161,9 @@ const DataFilesManageProjectModal = () => {
) : null}
+ {DataFilesManageProjectModalAddon && (
+
+ )}
diff --git a/client/src/components/DataFiles/DataFilesModals/DataFilesModals.jsx b/client/src/components/DataFiles/DataFilesModals/DataFilesModals.jsx
index e250ac0c8..1e8a081d7 100644
--- a/client/src/components/DataFiles/DataFilesModals/DataFilesModals.jsx
+++ b/client/src/components/DataFiles/DataFilesModals/DataFilesModals.jsx
@@ -23,6 +23,7 @@ import DataFilesProjectTreeModal from './DataFilesProjectTreeModal';
import DataFilesProjectDescriptionModal from './DataFilesProjectDescriptionModal';
import DataFilesViewDataModal from './DataFilesViewDataModal';
import DataFilesProjectCitationModal from './DataFilesProjectCitationModal';
+import DataFilesPublicationAuthorsModal from './DataFilesPublicationAuthorsModal';
export default function DataFilesModals() {
return (
@@ -50,6 +51,7 @@ export default function DataFilesModals() {
+
>
);
}
diff --git a/client/src/components/DataFiles/DataFilesModals/DataFilesProjectEditDescriptionModal.jsx b/client/src/components/DataFiles/DataFilesModals/DataFilesProjectEditDescriptionModal.jsx
index 8172e234d..03b5aa54c 100644
--- a/client/src/components/DataFiles/DataFilesModals/DataFilesProjectEditDescriptionModal.jsx
+++ b/client/src/components/DataFiles/DataFilesModals/DataFilesProjectEditDescriptionModal.jsx
@@ -60,6 +60,7 @@ const DataFilesProjectEditDescriptionModal = () => {
description: values.description || '',
metadata: DataFilesProjectEditDescriptionModalAddon ? values : null,
},
+ modal: 'editproject',
},
});
},
@@ -89,7 +90,7 @@ const DataFilesProjectEditDescriptionModal = () => {
{({ isValid, dirty }) => (