From d7d1344cf8ae57bc12b02f48368153a682916b39 Mon Sep 17 00:00:00 2001 From: ddelpiano Date: Fri, 5 Sep 2025 20:07:09 +0200 Subject: [PATCH 1/8] some fixes to organizations page --- .../swaggerMockMissingEndpoints.msw.ts | 16 +++- src/components/Header/index.jsx | 6 ++ src/components/SingleOrganization/index.jsx | 87 ++++++++++++------- 3 files changed, 77 insertions(+), 32 deletions(-) diff --git a/src/api/endpoints/swaggerMockMissingEndpoints.msw.ts b/src/api/endpoints/swaggerMockMissingEndpoints.msw.ts index 769ae86a..e9412903 100644 --- a/src/api/endpoints/swaggerMockMissingEndpoints.msw.ts +++ b/src/api/endpoints/swaggerMockMissingEndpoints.msw.ts @@ -4210,9 +4210,21 @@ export const getGetUserForksMockHandler = (overrideResponse?: Forks) => { } export const getGetOrganizationMockHandler = (overrideResponse?: Organization) => { - return http.get('*/operations/getOrganization/:id', async () => { + return http.get('*/operations/getOrganization/:id', async ({ params }) => { await delay(1000); - return new HttpResponse(JSON.stringify(overrideResponse !== undefined ? overrideResponse : getGetOrganizationResponseMock()), + const { id } = params; + const originalMock = getGetOrganizationResponseMock(); + const isRealOrganization = typeof id === 'string' && id !== originalMock.name; + + const mockResponse = overrideResponse !== undefined ? overrideResponse : { + ...originalMock, + name: typeof id === 'string' ? id : originalMock.name, + description: isRealOrganization ? '' : originalMock.description, // Empty description for real organizations + id: isRealOrganization ? '' : originalMock.id, + url: isRealOrganization ? '' : originalMock.url, + icon: isRealOrganization ? '' : originalMock.icon + }; + return new HttpResponse(JSON.stringify(mockResponse), { status: 200, headers: { diff --git a/src/components/Header/index.jsx b/src/components/Header/index.jsx index e99207c2..3e443907 100644 --- a/src/components/Header/index.jsx +++ b/src/components/Header/index.jsx @@ -202,6 +202,7 @@ const Header = () => { }; const handleClickCurieEditor = () => { + handleClose(); navigate('curie-editor') }; @@ -211,6 +212,7 @@ const Header = () => { } const handleOpenEditBulkTerms = () => { + handleClose(); setOpenEditBulkTerms(true) } @@ -231,6 +233,10 @@ const Header = () => { }; const handleMenuClick = async (e, menu) => { + // Close both popovers + handleClose(); + handleUserClose(); + if (menu.label === 'Log out') { try { await userLogout(user['groupname']); diff --git a/src/components/SingleOrganization/index.jsx b/src/components/SingleOrganization/index.jsx index 271aacdd..e827ee84 100644 --- a/src/components/SingleOrganization/index.jsx +++ b/src/components/SingleOrganization/index.jsx @@ -14,7 +14,7 @@ import { } from "@mui/icons-material"; import LeaveModal from "./LeaveModal"; import AddIcon from '@mui/icons-material/Add'; -import { useNavigate } from "react-router-dom"; +import { useNavigate, useParams } from "react-router-dom"; import CustomButton from "../common/CustomButton"; import OrganizationCard from "./OrganizationCard"; import CreateForkDialog from "./CreateForkDialog"; @@ -62,9 +62,9 @@ const useOrganizationData = (id) => { getOrganizationOntologies(id), ]); setOrganization(orgRes); - setOrganizationTerms(termsRes.results); - setOrganizationCuries(curiesRes); - setOrganizationOntologies(ontologiesRes); + setOrganizationTerms(termsRes?.results || []); + setOrganizationCuries(curiesRes || []); + setOrganizationOntologies(ontologiesRes || []); } catch (error) { console.error("Error fetching organization data", error); } finally { @@ -94,11 +94,12 @@ const SingleOrganization = () => { const [ontologiesPageOptions, setOntologiesPageOptions] = useState([]); const navigate = useNavigate(); + const { title } = useParams(); // Get organization name from URL params - const { organization, organizationTerms, organizationOntologies, loading } = useOrganizationData(); + const { organization, organizationTerms, organizationOntologies, loading } = useOrganizationData(title); useEffect(() => { - if (organizationTerms.length > 0) { + if (Array.isArray(organizationTerms) && organizationTerms.length > 0) { const options = generatePageOptions(organizationTerms.length); setTermPageOptions(options); setNumberOfTermsVisiblePages(options[0]); @@ -106,7 +107,7 @@ const SingleOrganization = () => { }, [organizationTerms]); useEffect(() => { - if (organizationOntologies.length > 0) { + if (Array.isArray(organizationOntologies) && organizationOntologies.length > 0) { const options = generatePageOptions(organizationOntologies.length); setOntologiesPageOptions(options); setNumberOfOntologiesVisiblePages(options[0]); @@ -125,7 +126,7 @@ const SingleOrganization = () => { const handleTermsPageChange = (event, value) => setTermsPage(value); const handleOntologiesPageChange = (event, value) => setOntologiesPage(value); - const handleViewOrganizationsClick = () => navigate(`/organizations/${organization?.name}/curie-editor`); + const handleViewOrganizationsClick = () => navigate(`/organizations/${title}/curie-editor`); const handleOpenEditBulkTerms = () => setOpenEditBulkTerms(true); const handleCloseEditBulkTerms = () => { setOpenEditBulkTerms(false); @@ -143,12 +144,9 @@ const SingleOrganization = () => { - + + {organization?.name || title} +