From db222ba5389b00906af313697d5c0355e4b8afe4 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sun, 8 Dec 2024 22:35:01 -0500 Subject: [PATCH 01/16] #3060-created hooks --- src/frontend/src/apis/organizations.api.ts | 12 +++++++++ src/frontend/src/hooks/organizations.hooks.ts | 26 ++++++++++++++++++- src/frontend/src/utils/urls.ts | 4 +++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 486b22256a..32b4aefab6 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -23,3 +23,15 @@ export const setOrganizationDescription = async (description: string) => { description }); }; + +export const getOrganizationLogo = async () => { + return axios.get(apiUrls.organizationsLogoImage(), { + transformResponse: (data) => JSON.parse(data) + }); +}; + +export const setOrganizationLogo = async (file: File) => { + const formData = new FormData(); + formData.append('logo', file); + return axios.post(apiUrls.organizationsSetLogoImage(), formData); +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index d182994fa2..9dce4e608c 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -2,7 +2,14 @@ import { useContext, useState } from 'react'; import { OrganizationContext } from '../app/AppOrganizationContext'; import { useMutation, useQuery, useQueryClient } from 'react-query'; import { Organization, Project } from 'shared'; -import { getFeaturedProjects, getCurrentOrganization, setOrganizationDescription } from '../apis/organizations.api'; +import { + getFeaturedProjects, + getCurrentOrganization, + setOrganizationDescription, + getOrganizationLogo, + setOrganizationLogo +} from '../apis/organizations.api'; +import { downloadGoogleImage } from '../apis/finance.api'; interface OrganizationProvider { organizationId: string; @@ -64,3 +71,20 @@ export const useSetOrganizationDescription = () => { } ); }; + +export const useSetOrganizationLogo = () => { + return useMutation(['reimbursement-requsts', 'edit'], async (file: File) => { + const { data } = await setOrganizationLogo(file); + return data; + }); +}; + +export const useOrganizationLogo = () => { + return useQuery(['organizations', 'logo'], async () => { + const { data: fileId } = await getOrganizationLogo(); + + const imageBlob = await downloadGoogleImage(fileId); + + return URL.createObjectURL(imageBlob); + }); +}; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 1b00a9e46b..1fba20024c 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -177,6 +177,8 @@ const organizationsUsefulLinks = () => `${organizations()}/useful-links`; const organizationsSetUsefulLinks = () => `${organizationsUsefulLinks()}/set`; const organizationsSetDescription = () => `${organizations()}/description/set`; const organizationsFeaturedProjects = () => `${organizations()}/featured-projects`; +const organizationsLogoImage = () => `${organizations()}/logo`; +const organizationsSetLogoImage = () => `${organizations()}/logo/update`; /******************* Car Endpoints ********************/ const cars = () => `${API_URL}/cars`; @@ -336,6 +338,8 @@ export const apiUrls = { organizationsSetUsefulLinks, organizationsFeaturedProjects, organizationsSetDescription, + organizationsLogoImage, + organizationsSetLogoImage, cars, carsCreate, From 32e23a42c16d7623c7f7064cacaccc940a7b9d71 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 10 Dec 2024 17:23:16 -0500 Subject: [PATCH 02/16] #3060-created forms --- .../controllers/organizations.controllers.ts | 1 + src/frontend/src/hooks/organizations.hooks.ts | 2 + .../pages/AdminToolsPage/AdminToolsPage.tsx | 5 +- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 21 ++++++ .../EditGuestView/EditLogoForm.tsx | 66 +++++++++++++++++++ 5 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx create mode 100644 src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx diff --git a/src/backend/src/controllers/organizations.controllers.ts b/src/backend/src/controllers/organizations.controllers.ts index af14eb1dd8..c418d4d779 100644 --- a/src/backend/src/controllers/organizations.controllers.ts +++ b/src/backend/src/controllers/organizations.controllers.ts @@ -78,6 +78,7 @@ export default class OrganizationsController { if (!req.file) { throw new HttpException(400, 'Invalid or undefined image data'); } + const updatedOrg = await OrganizationsService.setLogoImage(req.file, req.currentUser, req.organization); res.status(200).json(updatedOrg); diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 9dce4e608c..fdc288c6f0 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -73,8 +73,10 @@ export const useSetOrganizationDescription = () => { }; export const useSetOrganizationLogo = () => { + const queryClient = useQueryClient(); return useMutation(['reimbursement-requsts', 'edit'], async (file: File) => { const { data } = await setOrganizationLogo(file); + queryClient.invalidateQueries(['organizations']); return data; }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 04856d5265..059f2a2514 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -19,6 +19,7 @@ import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; import EditDescription from './EditGuestView/EditDescription'; +import EditLogo from './EditGuestView/EditLogo'; const AdminToolsPage: React.FC = () => { const currentUser = useCurrentUser(); @@ -94,9 +95,7 @@ const AdminToolsPage: React.FC = () => { ) : tabIndex === 3 ? ( ) : tabIndex === 4 ? ( - - - + ) : ( diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx new file mode 100644 index 0000000000..311ec282f0 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { useCurrentOrganization, useOrganizationLogo, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; +import LoadingIndicator from '../../../components/LoadingIndicator'; +import EditLogoForm from './EditLogoForm'; + +const EditLogo = () => { + const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); + const { mutateAsync } = useSetOrganizationLogo(); + const { data: imageUrl } = useOrganizationLogo(); + + if (organizationIsLoading || !organization) return ; + + const onSubmitWrapper = async (logoImage: File) => { + console.log('RECEIVED FILE'); + await mutateAsync(logoImage); + }; + + return ; +}; + +export default EditLogo; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx new file mode 100644 index 0000000000..56fb62c168 --- /dev/null +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -0,0 +1,66 @@ +import React from 'react'; +import { Box, Button, Stack, useTheme } from '@mui/material'; +import FileUploadIcon from '@mui/icons-material/FileUpload'; + +interface EditLogoFormProps { + logoImageUrl?: string; + onSubmit: (logoImage: File) => Promise; +} + +const EditLogoForm: React.FC = ({ logoImageUrl, onSubmit }) => { + const theme = useTheme(); + return ( + + {!logoImageUrl ? ( + + ) : ( + + )} + + + ); +}; + +export default EditLogoForm; From 907e54db029ac3b44d7a9cdc532dcb565f05991e Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 10 Dec 2024 18:00:00 -0500 Subject: [PATCH 03/16] #3060-updated logo fom --- .../src/services/organizations.services.ts | 4 ++ .../pages/AdminToolsPage/AdminToolsPage.tsx | 1 - .../AdminToolsPage/EditGuestView/EditLogo.tsx | 16 +++++-- .../EditGuestView/EditLogoForm.tsx | 46 ++++++++----------- .../pages/HomePage/components/LogoDisplay.tsx | 24 ++++++++++ 5 files changed, 59 insertions(+), 32 deletions(-) create mode 100644 src/frontend/src/pages/HomePage/components/LogoDisplay.tsx diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index c4ce91668b..ba785861cb 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -201,6 +201,10 @@ export default class OrganizationsService { const logoImageData = await uploadFile(logoImage); + if (!logoImageData?.name) { + throw new HttpException(500, 'Image Name not found'); + } + const updatedOrg = await prisma.organization.update({ where: { organizationId: organization.organizationId }, data: { diff --git a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx index 059f2a2514..cc90246456 100644 --- a/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx +++ b/src/frontend/src/pages/AdminToolsPage/AdminToolsPage.tsx @@ -18,7 +18,6 @@ import NERTabs from '../../components/Tabs'; import { routes } from '../../utils/routes'; import { Box } from '@mui/system'; import AdminToolsRecruitmentConfig from './RecruitmentConfig/AdminToolsRecruitmentConfig'; -import EditDescription from './EditGuestView/EditDescription'; import EditLogo from './EditGuestView/EditLogo'; const AdminToolsPage: React.FC = () => { diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 311ec282f0..e545a78e86 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -1,21 +1,29 @@ import React from 'react'; -import { useCurrentOrganization, useOrganizationLogo, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; +import { useCurrentOrganization, useSetOrganizationLogo } from '../../../hooks/organizations.hooks'; import LoadingIndicator from '../../../components/LoadingIndicator'; import EditLogoForm from './EditLogoForm'; +import { useToast } from '../../../hooks/toasts.hooks'; const EditLogo = () => { const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); const { mutateAsync } = useSetOrganizationLogo(); - const { data: imageUrl } = useOrganizationLogo(); + const toast = useToast(); if (organizationIsLoading || !organization) return ; const onSubmitWrapper = async (logoImage: File) => { - console.log('RECEIVED FILE'); + try { + await mutateAsync(logoImage); + toast.success('Logo updated successfully!'); + } catch (e) { + if (e instanceof Error) { + toast.error(e.message); + } + } await mutateAsync(logoImage); }; - return ; + return ; }; export default EditLogo; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index 56fb62c168..18c64eb2ac 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -1,39 +1,31 @@ import React from 'react'; import { Box, Button, Stack, useTheme } from '@mui/material'; import FileUploadIcon from '@mui/icons-material/FileUpload'; +import LogoDisplay from '../../HomePage/components/LogoDisplay'; interface EditLogoFormProps { - logoImageUrl?: string; onSubmit: (logoImage: File) => Promise; } -const EditLogoForm: React.FC = ({ logoImageUrl, onSubmit }) => { +const EditLogoForm: React.FC = ({ onSubmit }) => { const theme = useTheme(); return ( - {!logoImageUrl ? ( - - ) : ( - - )} + + + + + {value.name !== 'undefined' && ( + + + {value.name} + + )} + + )} + /> + + + > + + Cancel + + + Save + + + + ); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx index 7e47085d0f..419bb2548c 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/GuestViewConfig.tsx @@ -1,13 +1,21 @@ -import { Stack } from '@mui/material'; +import { Stack, Grid } from '@mui/material'; import EditDescription from './EditDescription'; import EditFeaturedProjects from './EditFeaturedProjects'; +import EditLogo from './EditLogo'; const GuestViewConfig: React.FC = () => { return ( - - - - + + + + + + + + + + + ); }; diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index 6ee1159d77..0f5c26a02e 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -1,23 +1,32 @@ -import { Box } from '@mui/material'; +import { Box, useTheme, Card } from '@mui/material'; import React from 'react'; -import { useOrganizationLogo } from '../../../hooks/organizations.hooks'; -import LoadingIndicator from '../../../components/LoadingIndicator'; -const LogoDisplay = () => { - const { data: imageUrl, isLoading } = useOrganizationLogo(); - - if (isLoading) return ; +interface LogoDisplayProps { + imageUrl?: string; +} +const LogoDisplay: React.FC = ({ imageUrl = './default-logo.png' }) => { + const theme = useTheme(); return ( - + > + + ); }; From ed36d21a80a6ca64f34dd239161a199ddb109f18 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 13 Dec 2024 19:14:48 -0500 Subject: [PATCH 06/16] #3060-small fix --- .../src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 8d9e2d5461..8f5c6294b4 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -65,7 +65,7 @@ const EditLogo = () => { ) : ( <> - + Date: Sat, 14 Dec 2024 00:18:24 -0500 Subject: [PATCH 07/16] #3060-default logo showing --- src/frontend/src/hooks/organizations.hooks.ts | 15 +++++++++------ .../AdminToolsPage/EditGuestView/EditLogo.tsx | 4 ++-- .../src/pages/HomePage/components/LogoDisplay.tsx | 4 ++-- src/frontend/src/utils/image.utils.ts | 8 ++++++++ 4 files changed, 21 insertions(+), 10 deletions(-) create mode 100644 src/frontend/src/utils/image.utils.ts diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 3d425b4a8e..162476bcdf 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -11,6 +11,7 @@ import { setOrganizationFeaturedProjects } from '../apis/organizations.api'; import { downloadGoogleImage } from '../apis/finance.api'; +import { getDefaultImageData } from '../utils/image.utils'; interface OrganizationProvider { organizationId: string; @@ -98,11 +99,13 @@ export const useSetOrganizationLogo = () => { }; export const useOrganizationLogo = () => { - return useQuery<{ url: string; blob: Blob }, Error>(['organizations', 'logo'], async () => { - const { data: fileId } = await getOrganizationLogo(); - - const imageBlob = await downloadGoogleImage(fileId); - - return { url: URL.createObjectURL(imageBlob), blob: imageBlob }; + return useQuery(['organizations', 'logo'], async () => { + try { + const { data: fileId } = await getOrganizationLogo(); + return await downloadGoogleImage(fileId); + } catch { + // return default logo if fileId was not found + return getDefaultImageData(); + } }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 8f5c6294b4..6fd56bbe66 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -60,12 +60,12 @@ const EditLogo = () => { ) : ( <> - + = ({ imageUrl = './default-logo.png' }) => { +const LogoDisplay: React.FC = ({ imageUrl }) => { const theme = useTheme(); return ( { + const { data } = await axios.get('/default-logo.png', { + responseType: 'blob' + }); + return data; +}; From b466c25a509b5ee162a7917eeaca3377f9b41b5f Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 00:44:47 -0500 Subject: [PATCH 08/16] #3060-small fix --- .../src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index ec27cfb67a..dab8640e95 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -7,7 +7,7 @@ import NERSuccessButton from '../../../components/NERSuccessButton'; import ImageIcon from '@mui/icons-material/Image'; export interface EditLogoInput { - logoImage?: File; + logoImage: File; } interface EditLogoFormProps { From 61b6cf8913a3241a4d98789ab79cc7dde8e9f385 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 00:50:58 -0500 Subject: [PATCH 09/16] #3060-await --- src/frontend/src/hooks/organizations.hooks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 162476bcdf..4c04bc0c60 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -105,7 +105,7 @@ export const useOrganizationLogo = () => { return await downloadGoogleImage(fileId); } catch { // return default logo if fileId was not found - return getDefaultImageData(); + return await getDefaultImageData(); } }); }; From 0e2fed53ee52e61de92fdc29692a5e3a296d0377 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Sat, 14 Dec 2024 14:10:11 -0500 Subject: [PATCH 10/16] #3060-fixed tests --- src/backend/tests/unmocked/organization.test.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index 2c0affdff9..dcfbdcf574 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -55,7 +55,7 @@ describe('Organization Tests', () => { it('Succeeds and updates all the images', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); (uploadFile as Mock).mockImplementation((file) => { - return Promise.resolve({ id: `uploaded-${file.originalname}` }); + return Promise.resolve({ name: `${file.originalname}`, id: `uploaded-${file.originalname}` }); }); await OrganizationsService.setImages(file1, file2, testBatman, organization); @@ -240,7 +240,7 @@ describe('Organization Tests', () => { it('Succeeds and updates the logo', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); (uploadFile as Mock).mockImplementation((file) => { - return Promise.resolve({ id: `uploaded-${file.originalname}` }); + return Promise.resolve({ name: `${file.originalname}`, id: `uploaded-${file.originalname}` }); }); await OrganizationsService.setLogoImage(file1, testBatman, organization); From 8477e8723ecdcc52d5934edbffde4697dd0fb9c8 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:36:19 -0500 Subject: [PATCH 11/16] #3060-removed default image --- .../src/services/organizations.services.ts | 6 +----- src/frontend/public/default-logo.png | Bin 114559 -> 0 bytes src/frontend/src/hooks/organizations.hooks.ts | 13 +++++-------- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 6 +++--- .../EditGuestView/EditLogoForm.tsx | 10 ++++++---- .../pages/HomePage/components/LogoDisplay.tsx | 6 +++--- src/frontend/src/utils/image.utils.ts | 8 -------- 7 files changed, 18 insertions(+), 31 deletions(-) delete mode 100644 src/frontend/public/default-logo.png delete mode 100644 src/frontend/src/utils/image.utils.ts diff --git a/src/backend/src/services/organizations.services.ts b/src/backend/src/services/organizations.services.ts index ba785861cb..5feed48fc4 100644 --- a/src/backend/src/services/organizations.services.ts +++ b/src/backend/src/services/organizations.services.ts @@ -220,7 +220,7 @@ export default class OrganizationsService { * @param organizationId the id of the organization * @returns the id of the image */ - static async getLogoImage(organizationId: string): Promise { + static async getLogoImage(organizationId: string): Promise { const organization = await prisma.organization.findUnique({ where: { organizationId } }); @@ -229,10 +229,6 @@ export default class OrganizationsService { throw new NotFoundException('Organization', organizationId); } - if (!organization.logoImageId) { - throw new HttpException(404, `Organization ${organizationId} does not have a logo image`); - } - return organization.logoImageId; } diff --git a/src/frontend/public/default-logo.png b/src/frontend/public/default-logo.png deleted file mode 100644 index a549f0ea6997896cac671426ae22fa2b8366f8bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 114559 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�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 LTe(Eh>goRhAO`T! diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index 4c04bc0c60..bd2f3ac964 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -11,7 +11,6 @@ import { setOrganizationFeaturedProjects } from '../apis/organizations.api'; import { downloadGoogleImage } from '../apis/finance.api'; -import { getDefaultImageData } from '../utils/image.utils'; interface OrganizationProvider { organizationId: string; @@ -99,13 +98,11 @@ export const useSetOrganizationLogo = () => { }; export const useOrganizationLogo = () => { - return useQuery(['organizations', 'logo'], async () => { - try { - const { data: fileId } = await getOrganizationLogo(); - return await downloadGoogleImage(fileId); - } catch { - // return default logo if fileId was not found - return await getDefaultImageData(); + return useQuery(['organizations', 'logo'], async () => { + const { data: fileId } = await getOrganizationLogo(); + if (!fileId) { + return; } + return await downloadGoogleImage(fileId); }); }; diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 6fd56bbe66..9ba6a4643e 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -15,7 +15,7 @@ const EditLogo = () => { const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); - if (isLoading || !mutateAsync || organizationIsLoading || !organization || !imageData || imageDataIsLoading) + if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; const handleClose = () => { @@ -60,12 +60,12 @@ const EditLogo = () => { ) : ( <> - + Promise; onHide: () => void; - orgLogo: File; + orgLogo?: File; } const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide }) => { @@ -24,7 +24,9 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } }); const onSubmitWrapper = async (data: EditLogoInput) => { - await onSubmit(data); + if (!!data.logoImage) { + await onSubmit(data); + } reset(); }; @@ -85,7 +87,7 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } hidden /> - {value.name !== 'undefined' && ( + {value && value.name !== 'undefined' && ( {value.name} diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index a0699c9916..e56da136cf 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -2,7 +2,7 @@ import { Box, useTheme, Card } from '@mui/material'; import React from 'react'; interface LogoDisplayProps { - imageUrl: string; + imageUrl?: string; } const LogoDisplay: React.FC = ({ imageUrl }) => { @@ -17,7 +17,7 @@ const LogoDisplay: React.FC = ({ imageUrl }) => { borderRadius: 2 }} > - = ({ imageUrl }) => { width: '100%', borderRadius: 2 }} - /> + />} ); }; diff --git a/src/frontend/src/utils/image.utils.ts b/src/frontend/src/utils/image.utils.ts deleted file mode 100644 index 198e07ed88..0000000000 --- a/src/frontend/src/utils/image.utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -import axios from 'axios'; - -export const getDefaultImageData = async () => { - const { data } = await axios.get('/default-logo.png', { - responseType: 'blob' - }); - return data; -}; From 53d5e72e5f409033ea357dd675c9c9663887f05c Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:38:02 -0500 Subject: [PATCH 12/16] #3060-removed check for no logo --- src/backend/tests/unmocked/organization.test.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/backend/tests/unmocked/organization.test.ts b/src/backend/tests/unmocked/organization.test.ts index dcfbdcf574..a66814357b 100644 --- a/src/backend/tests/unmocked/organization.test.ts +++ b/src/backend/tests/unmocked/organization.test.ts @@ -273,12 +273,6 @@ describe('Organization Tests', () => { ); }); - it('Fails if the organization does not have a logo image', async () => { - await expect(async () => await OrganizationsService.getLogoImage(orgId)).rejects.toThrow( - new HttpException(404, `Organization ${orgId} does not have a logo image`) - ); - }); - it('Succeeds and gets the image', async () => { const testBatman = await createTestUser(batmanAppAdmin, orgId); await OrganizationsService.setLogoImage( From 55f17f4d4dfc231a8344924c2ad5ff0f4cadf4fe Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 08:40:16 -0500 Subject: [PATCH 13/16] #3060-prettier --- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 3 +-- .../pages/HomePage/components/LogoDisplay.tsx | 20 ++++++++++--------- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 9ba6a4643e..13ef97a3f6 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -15,8 +15,7 @@ const EditLogo = () => { const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); - if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) - return ; + if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; const handleClose = () => { setIsEditMode(false); diff --git a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx index e56da136cf..0ebeb68db5 100644 --- a/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx +++ b/src/frontend/src/pages/HomePage/components/LogoDisplay.tsx @@ -17,15 +17,17 @@ const LogoDisplay: React.FC = ({ imageUrl }) => { borderRadius: 2 }} > - {imageUrl && } + {imageUrl && ( + + )} ); }; From 2722e7dc164482749532790dd84c569f3160f2d5 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Tue, 17 Dec 2024 18:17:03 -0500 Subject: [PATCH 14/16] #3060-added onboarding endpoints --- src/backend/index.ts | 2 ++ .../src/controllers/onboarding.controller.ts | 22 +++++++++++++++++++ src/backend/src/routes/onboarding.routes.ts | 8 +++++++ .../src/services/onboarding.services.ts | 12 ++++++++++ src/frontend/src/apis/onboarding.api.ts | 17 ++++++++++++++ src/frontend/src/hooks/organizations.hooks.ts | 2 +- src/frontend/src/utils/urls.ts | 5 +++++ 7 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 src/backend/src/controllers/onboarding.controller.ts create mode 100644 src/backend/src/routes/onboarding.routes.ts create mode 100644 src/backend/src/services/onboarding.services.ts create mode 100644 src/frontend/src/apis/onboarding.api.ts diff --git a/src/backend/index.ts b/src/backend/index.ts index babf50b843..680ead6886 100644 --- a/src/backend/index.ts +++ b/src/backend/index.ts @@ -17,6 +17,7 @@ import workPackageTemplatesRouter from './src/routes/work-package-templates.rout import carsRouter from './src/routes/cars.routes'; import organizationRouter from './src/routes/organizations.routes'; import recruitmentRouter from './src/routes/recruitment.routes'; +import onboardingRouter from './src/routes/onboarding.routes'; const app = express(); @@ -68,6 +69,7 @@ app.use('/templates', workPackageTemplatesRouter); app.use('/cars', carsRouter); app.use('/organizations', organizationRouter); app.use('/recruitment', recruitmentRouter); +app.use('/onboarding', onboardingRouter); app.use('/', (_req, res) => { res.status(200).json('Welcome to FinishLine'); }); diff --git a/src/backend/src/controllers/onboarding.controller.ts b/src/backend/src/controllers/onboarding.controller.ts new file mode 100644 index 0000000000..9c89420e78 --- /dev/null +++ b/src/backend/src/controllers/onboarding.controller.ts @@ -0,0 +1,22 @@ +import { NextFunction, Request, Response } from 'express'; +import OnboardingServices from '../services/onboarding.services'; + +export default class OnboardingController { + static async downloadImage(req: Request, res: Response, next: NextFunction) { + try { + const { fileId } = req.params; + console.log('FILE ID:', fileId); + + const imageData = await OnboardingServices.downloadImage(fileId); + + // Set the appropriate headers for the HTTP response + res.setHeader('content-type', String(imageData.type)); + res.setHeader('content-length', imageData.buffer.length); + + // Send the Buffer as the response body + res.send(imageData.buffer); + } catch (error: unknown) { + return next(error); + } + } +} diff --git a/src/backend/src/routes/onboarding.routes.ts b/src/backend/src/routes/onboarding.routes.ts new file mode 100644 index 0000000000..fabce68796 --- /dev/null +++ b/src/backend/src/routes/onboarding.routes.ts @@ -0,0 +1,8 @@ +import express from 'express'; +import OnboardingController from '../controllers/onboarding.controller'; + +const onboardingRouter = express.Router(); + +onboardingRouter.get('/image/:fileId', OnboardingController.downloadImage); + +export default onboardingRouter; diff --git a/src/backend/src/services/onboarding.services.ts b/src/backend/src/services/onboarding.services.ts new file mode 100644 index 0000000000..823451c580 --- /dev/null +++ b/src/backend/src/services/onboarding.services.ts @@ -0,0 +1,12 @@ +import { NotFoundException } from '../utils/errors.utils'; +import { downloadImageFile } from '../utils/google-integration.utils'; + +export default class OnboardingServices { + static async downloadImage(fileId: string) { + const fileData = await downloadImageFile(fileId); + console.log('FILE DATA RECEIVED'); + + if (!fileData) throw new NotFoundException('Image File', fileId); + return fileData; + } +} diff --git a/src/frontend/src/apis/onboarding.api.ts b/src/frontend/src/apis/onboarding.api.ts new file mode 100644 index 0000000000..e6cbf8c53a --- /dev/null +++ b/src/frontend/src/apis/onboarding.api.ts @@ -0,0 +1,17 @@ +import axios from 'axios'; +import { apiUrls } from '../utils/urls'; + +/** + * API Call to download a google image + * @param fileId file id to be downloaded + * @returns an image blob + */ +export const downloadGoogleImage = async (fileId: string): Promise => { + const response = await axios.get(apiUrls.imageById(fileId), { + responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer + }); + console.log('ID IN API:', fileId); + const imageBuffer = new Uint8Array(response.data); + const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); + return imageBlob; +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index bd2f3ac964..ddcbaf1190 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -10,7 +10,7 @@ import { setOrganizationLogo, setOrganizationFeaturedProjects } from '../apis/organizations.api'; -import { downloadGoogleImage } from '../apis/finance.api'; +import { downloadGoogleImage } from '../apis/onboarding.api'; interface OrganizationProvider { organizationId: string; diff --git a/src/frontend/src/utils/urls.ts b/src/frontend/src/utils/urls.ts index 4cb11c03e9..ae65afe744 100644 --- a/src/frontend/src/utils/urls.ts +++ b/src/frontend/src/utils/urls.ts @@ -196,6 +196,10 @@ const faqCreate = () => `${recruitment()}/faq/create`; const faqEdit = (id: string) => `${recruitment()}/faq/${id}/edit`; const faqDelete = (id: string) => `${recruitment()}/faq/${id}/delete`; +/************** Onboarding Endpoints ***************/ +const onboarding = () => `${API_URL}/onboarding`; +const imageById = (imageId: string) => `${onboarding()}/image/${imageId}`; + /**************** Other Endpoints ****************/ const version = () => `https://api.github.com/repos/Northeastern-Electric-Racing/FinishLine/releases/latest`; @@ -354,6 +358,7 @@ export const apiUrls = { faqCreate, faqEdit, faqDelete, + imageById, version }; From b9206bd2f32e4248739269da7c8f58c16322c028 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 11:53:52 -0500 Subject: [PATCH 15/16] #3060-removed finance get image --- .../src/controllers/onboarding.controller.ts | 1 - src/frontend/src/apis/onboarding.api.ts | 1 - src/frontend/src/apis/organizations.api.ts | 15 +++++++++++++++ src/frontend/src/hooks/organizations.hooks.ts | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/backend/src/controllers/onboarding.controller.ts b/src/backend/src/controllers/onboarding.controller.ts index 9c89420e78..2bd8660a35 100644 --- a/src/backend/src/controllers/onboarding.controller.ts +++ b/src/backend/src/controllers/onboarding.controller.ts @@ -5,7 +5,6 @@ export default class OnboardingController { static async downloadImage(req: Request, res: Response, next: NextFunction) { try { const { fileId } = req.params; - console.log('FILE ID:', fileId); const imageData = await OnboardingServices.downloadImage(fileId); diff --git a/src/frontend/src/apis/onboarding.api.ts b/src/frontend/src/apis/onboarding.api.ts index e6cbf8c53a..7912e80516 100644 --- a/src/frontend/src/apis/onboarding.api.ts +++ b/src/frontend/src/apis/onboarding.api.ts @@ -10,7 +10,6 @@ export const downloadGoogleImage = async (fileId: string): Promise => { const response = await axios.get(apiUrls.imageById(fileId), { responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer }); - console.log('ID IN API:', fileId); const imageBuffer = new Uint8Array(response.data); const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); return imageBlob; diff --git a/src/frontend/src/apis/organizations.api.ts b/src/frontend/src/apis/organizations.api.ts index 47311f1f19..7c7f37af1f 100644 --- a/src/frontend/src/apis/organizations.api.ts +++ b/src/frontend/src/apis/organizations.api.ts @@ -41,3 +41,18 @@ export const setOrganizationFeaturedProjects = async (featuredProjectIds: string projectIds: featuredProjectIds }); }; + +/** + * Downloads a given fileId from google drive into a blob + * + * @param fileId the google id of the file to download + * @returns the downloaded file as a Blob + */ +export const downloadGoogleImage = async (fileId: string): Promise => { + const response = await axios.get(apiUrls.imageById(fileId), { + responseType: 'arraybuffer' // Set the response type to 'arraybuffer' to receive the image as a Buffer + }); + const imageBuffer = new Uint8Array(response.data); + const imageBlob = new Blob([imageBuffer], { type: response.headers['content-type'] }); + return imageBlob; +}; diff --git a/src/frontend/src/hooks/organizations.hooks.ts b/src/frontend/src/hooks/organizations.hooks.ts index ddcbaf1190..573ece5bdb 100644 --- a/src/frontend/src/hooks/organizations.hooks.ts +++ b/src/frontend/src/hooks/organizations.hooks.ts @@ -10,7 +10,7 @@ import { setOrganizationLogo, setOrganizationFeaturedProjects } from '../apis/organizations.api'; -import { downloadGoogleImage } from '../apis/onboarding.api'; +import { downloadGoogleImage } from '../apis/organizations.api'; interface OrganizationProvider { organizationId: string; From 06df95061e749f6e1d9f9739e15788c6221d8b50 Mon Sep 17 00:00:00 2001 From: caiodasilva2005 Date: Fri, 20 Dec 2024 12:03:01 -0500 Subject: [PATCH 16/16] #3060-fixed issues --- .../AdminToolsPage/EditGuestView/EditLogo.tsx | 14 +++++++++++--- .../AdminToolsPage/EditGuestView/EditLogoForm.tsx | 14 +------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx index 13ef97a3f6..d4c10f0e76 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogo.tsx @@ -6,16 +6,24 @@ import { useToast } from '../../../hooks/toasts.hooks'; import { Box, Card, Typography, useTheme } from '@mui/material'; import LogoDisplay from '../../HomePage/components/LogoDisplay'; import { NERButton } from '../../../components/NERButton'; +import ErrorPage from '../../ErrorPage'; const EditLogo = () => { - const { data: organization, isLoading: organizationIsLoading } = useCurrentOrganization(); - const { data: imageData, isLoading: imageDataIsLoading } = useOrganizationLogo(); + const { + data: organization, + isLoading: organizationIsLoading, + isError: organizationIsError, + error: organizationError + } = useCurrentOrganization(); + const { data: imageData, isLoading: imageDataIsLoading, isError: imageIsError, error: imageError } = useOrganizationLogo(); const { mutateAsync, isLoading } = useSetOrganizationLogo(); const toast = useToast(); const [isEditMode, setIsEditMode] = useState(false); const theme = useTheme(); if (isLoading || !mutateAsync || organizationIsLoading || !organization || imageDataIsLoading) return ; + if (organizationIsError) return ; + if (imageIsError) return ; const handleClose = () => { setIsEditMode(false); @@ -23,8 +31,8 @@ const EditLogo = () => { const onSubmit = async (logoInput: EditLogoInput) => { try { - console.log(logoInput); if (!logoInput.logoImage) { + toast.error('No logo image submitted.'); handleClose(); return; } diff --git a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx index 3ebb20cf53..72be9d618e 100644 --- a/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx +++ b/src/frontend/src/pages/AdminToolsPage/EditGuestView/EditLogoForm.tsx @@ -23,13 +23,6 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } } }); - const onSubmitWrapper = async (data: EditLogoInput) => { - if (!!data.logoImage) { - await onSubmit(data); - } - reset(); - }; - const onHideWrapper = () => { onHide(); reset(); @@ -106,12 +99,7 @@ const EditLogoForm: React.FC = ({ onSubmit, orgLogo, onHide } Cancel - + Save