Skip to content

Commit 8e29c07

Browse files
committed
#3885: Finished linking confirmation modal with the copy BOM modal
1 parent 497a99d commit 8e29c07

3 files changed

Lines changed: 45 additions & 28 deletions

File tree

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/BOM/CopyBOM/CopyBOMModal.tsx

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,35 +2,58 @@ import { WbsNumber, wbsPipe } from 'shared';
22
import CopyBOMView from './CopyBOMView';
33
import { useGetAllCars } from '../../../../../hooks/cars.hooks';
44
import { useAllProjects } from '../../../../../hooks/projects.hooks';
5-
import { useCopyMaterialsToProject } from '../../../../../hooks/bom.hooks';
6-
import React from 'react';
5+
import React, { useState } from 'react';
76
import ErrorPage from '../../../../ErrorPage';
87
import LoadingIndicator from '../../../../../components/LoadingIndicator';
8+
import BOMCopyConfirmModal from '../MaterialForm/BOMCopyConfirmModal';
99

1010
export interface CopyBOMModalProps {
1111
open: boolean;
1212
onHide: () => void;
1313
destinationWbsNum: WbsNumber;
14+
currentProjectName: string;
1415
}
1516

16-
const CopyBOMModal: React.FC<CopyBOMModalProps> = ({ open, onHide, destinationWbsNum }) => {
17+
const CopyBOMModal: React.FC<CopyBOMModalProps> = ({ open, onHide, destinationWbsNum, currentProjectName }) => {
1718
const { data: cars, isLoading: isLoadingCars, isError: carsIsError, error: carsError } = useGetAllCars();
1819
const { data: projects, isLoading: isLoadingProjects, isError: projectsIsError, error: projectsError } = useAllProjects();
19-
const { mutateAsync: copyMaterials } = useCopyMaterialsToProject();
20+
const [confirmOpen, setConfirmOpen] = useState(false);
21+
const [confirmedMaterialIds, setConfirmedMaterialIds] = useState<string[]>([]);
22+
const [confirmedSourceProjectName, setConfirmedSourceProjectName] = useState('');
2023

2124
if (isLoadingCars || !cars || isLoadingProjects || !projects) return <LoadingIndicator />;
2225
if (carsIsError) return <ErrorPage message={carsError?.message} />;
2326
if (projectsIsError) return <ErrorPage message={projectsError?.message} />;
2427

25-
const handleCopy = async (materialIds: string[]) => {
26-
await copyMaterials({
27-
materialIds,
28-
destinationWbsNum: wbsPipe(destinationWbsNum)
29-
});
30-
onHide();
31-
};
28+
const destinationWbs = wbsPipe(destinationWbsNum);
3229

33-
return <CopyBOMView open={open} onHide={onHide} cars={cars} projects={projects} onCopy={handleCopy} />;
30+
return (
31+
<>
32+
<CopyBOMView
33+
open={open}
34+
onHide={onHide}
35+
cars={cars}
36+
projects={projects}
37+
onCopy={(materialIds, sourceProjectName) => {
38+
setConfirmedMaterialIds(materialIds);
39+
setConfirmedSourceProjectName(sourceProjectName);
40+
setConfirmOpen(true);
41+
}}
42+
/>
43+
<BOMCopyConfirmModal
44+
open={confirmOpen}
45+
onHide={() => setConfirmOpen(false)}
46+
onSuccess={() => {
47+
onHide();
48+
setConfirmOpen(false);
49+
}}
50+
materialIds={confirmedMaterialIds}
51+
sourceProjectName={confirmedSourceProjectName}
52+
currentProjectName={`${wbsPipe(destinationWbsNum)} - ${currentProjectName}`}
53+
destinationWbsNum={destinationWbs}
54+
/>
55+
</>
56+
);
3457
};
3558

3659
export default CopyBOMModal;

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/BOM/CopyBOM/CopyBOMView.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ interface CopyBOMViewProps {
1010
onHide: () => void;
1111
cars: Car[];
1212
projects: ProjectPreview[];
13-
onCopy: (materialIds: string[]) => Promise<void>;
13+
onCopy: (materialIds: string[], sourceProjectName: string) => void;
1414
}
1515

1616
const CopyBOMView: React.FC<CopyBOMViewProps> = ({ open, onHide, cars, projects, onCopy }) => {
@@ -34,7 +34,9 @@ const CopyBOMView: React.FC<CopyBOMViewProps> = ({ open, onHide, cars, projects,
3434
}));
3535

3636
const handleSubmit = async () => {
37-
await onCopy(selectedMaterialIdsRef.current);
37+
if (!selectedProject) return;
38+
const sourceProjectName = `${wbsPipe(selectedProject.wbsNum)} - ${selectedProject.name}`;
39+
onCopy(selectedMaterialIdsRef.current, sourceProjectName);
3840
};
3941

4042
return (

src/frontend/src/pages/ProjectDetailPage/ProjectViewContainer/BOMTab.tsx

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import {
2020
useGetMaterialsForWbsElement
2121
} from '../../../hooks/bom.hooks';
2222
import ImportBOMModal from './BOM/ImportBOMModal';
23-
import BOMCopyConfirmModal from './BOM/MaterialForm/BOMCopyConfirmModal';
2423

2524
export const addMaterialCosts = (accumulator: number, currentMaterial: MaterialPreview) =>
2625
(currentMaterial.subtotal ?? 0) + accumulator;
@@ -32,7 +31,6 @@ const BOMTab = ({ project }: { project: Project }) => {
3231
const [showAddAssembly, setShowAddAssembly] = useState(false);
3332
const [showCopyBOM, setShowCopyBOM] = useState(false);
3433
const [showImportBOM, setShowImportBOM] = useState(false);
35-
const [bomConfirmOpen, setBomConfirmOpen] = useState(false);
3634

3735
const theme = useTheme();
3836
const user = useCurrentUser();
@@ -101,7 +99,12 @@ const BOMTab = ({ project }: { project: Project }) => {
10199
allUnits={units}
102100
assemblies={assemblies}
103101
/>
104-
<CopyBOMModal open={showCopyBOM} onHide={() => setShowCopyBOM(false)} destinationWbsNum={project.wbsNum} />
102+
<CopyBOMModal
103+
open={showCopyBOM}
104+
onHide={() => setShowCopyBOM(false)}
105+
destinationWbsNum={project.wbsNum}
106+
currentProjectName={project.name}
107+
/>
105108
<Box sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between' }}>
106109
<BOMTableWrapper
107110
project={project}
@@ -150,17 +153,6 @@ const BOMTab = ({ project }: { project: Project }) => {
150153
Copy Existing BOM
151154
</NERButton>
152155
</Box>
153-
{/* <BOMCopyConfirmModal
154-
open={bomConfirmOpen}
155-
onHide={() => {
156-
setBomConfirmOpen(false);
157-
}}
158-
onSuccess={() => {}}
159-
materialIds={materials.map((m) => m.materialId)} // Test: right now, it just copies everything to destination
160-
sourceProjectName={'This Project'}
161-
currentProjectName={'0.7.0 - Laser Cannon Prototype'}
162-
destinationWbsNum={'0.7.0'}
163-
></BOMCopyConfirmModal> */}
164156
<Box display="flex" gap="20px" alignItems="center">
165157
<Box sx={{ backgroundColor: theme.palette.background.paper, padding: '8px 14px 8px 14px', borderRadius: '6px' }}>
166158
Budget: ${project.budget}

0 commit comments

Comments
 (0)