Skip to content

Commit aa467b1

Browse files
committed
#3881 requested changes
1 parent 11bdb51 commit aa467b1

2 files changed

Lines changed: 189 additions & 228 deletions

File tree

src/frontend/src/hooks/bom.hooks.ts

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { useMutation, useQuery, useQueryClient } from 'react-query';
2-
import { Assembly, Manufacturer, Material, MaterialType, Unit, WbsNumber, wbsPipe } from 'shared';
2+
import { Assembly, Manufacturer, Material, MaterialType, ProjectPreview, Unit, WbsNumber, wbsPipe } from 'shared';
33
import { useToast } from '../hooks/toasts.hooks';
44
import {
55
assignMaterialToAssembly,
@@ -326,3 +326,33 @@ export const useGetMaterialsForWbsElement = (wbsNum: WbsNumber) => {
326326
return data;
327327
});
328328
};
329+
330+
export const useGetMaterialsForCar = (carNumber: number | null, projects: ProjectPreview[]) => {
331+
const projectsInCar = projects.filter((p) => p.wbsNum.carNumber === carNumber);
332+
333+
return useQuery<Material[], Error>(
334+
['materials', 'car', carNumber ?? 'none'],
335+
async () => {
336+
const results = await Promise.all(
337+
projectsInCar.map(async (p) => {
338+
const { data } = await getMaterialsForWbsElement({
339+
carNumber: p.wbsNum.carNumber,
340+
projectNumber: p.wbsNum.projectNumber,
341+
workPackageNumber: 0
342+
});
343+
return data;
344+
})
345+
);
346+
347+
const flat = results.flat();
348+
const seen = new Set<string>();
349+
return flat.filter((material) => {
350+
const key = `${material.name.toLowerCase()}-${material.assemblyId ?? 'no-assembly'}`;
351+
if (seen.has(key)) return false;
352+
seen.add(key);
353+
return true;
354+
});
355+
},
356+
{ enabled: carNumber !== null && projectsInCar.length > 0 }
357+
);
358+
};

0 commit comments

Comments
 (0)