Skip to content

Commit a645a22

Browse files
committed
Merge branch 'develop' of https://github.com/dinesh-aot/EPIC.compliance into fixes
2 parents 1c623d7 + 1b3d9ad commit a645a22

File tree

12 files changed

+239
-115
lines changed

12 files changed

+239
-115
lines changed

compliance-api/src/compliance_api/schemas/inspection_requirement.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ class InspectionReqDetailDocCreateSchema(BaseSchema):
147147
metadata={"description": "Additional description of the document"}
148148
)
149149
images = fields.List(
150-
fields.Nested(InspectionReqDetailDocImageCreateSchema),
150+
fields.Nested(InspectionReqDetailDocImageUpdateSchema),
151151
allow_none=True,
152152
required=False,
153153
)

compliance-web/src/components/App/Inspections/Profile/Reports/ReportTabContents/IRImageSection.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,8 @@ const IRImageSection = ({ image }: { image: RequirementImage }) => {
3535
/>
3636
</Box>
3737
<Typography variant="caption">
38-
{image.image_type} {image.sort_order}. {image.caption}
38+
{image.image_type ? `${image.image_type} ${image.sort_order}. ` : ""}
39+
{image.caption}
3940
</Typography>
4041
</Box>
4142
);

compliance-web/src/components/App/Inspections/Profile/Reports/ReportTabContents/IRRequirement.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,18 @@ import { Inspection } from "@/models/Inspection";
1212
import { useQueryClient } from "@tanstack/react-query";
1313
import { useRequirementStore } from "@/components/App/Inspections/Profile/Requirements/requirementStore";
1414
import IRImageSection from "./IRImageSection";
15+
import { useRequirementDocumentImages, useRequirementSourceImages } from "@/hooks/useInspectionRequirements";
1516

1617
const DetailSection = ({
1718
title,
1819
content,
1920
appendixNo,
21+
detailSectionImages,
2022
}: {
2123
title: string;
2224
content: string;
2325
appendixNo?: string;
26+
detailSectionImages?: RequirementImage[];
2427
}) => (
2528
<>
2629
<Typography variant="body1" mb={0.5}>
@@ -34,6 +37,13 @@ const DetailSection = ({
3437
mb={1.5}
3538
dangerouslySetInnerHTML={{ __html: content || "" }}
3639
/>
40+
{detailSectionImages && detailSectionImages.length > 0 && (
41+
<Box sx={{ display: "flex", flexWrap: "wrap", gap: 1 }}>
42+
{detailSectionImages.map((image) => (
43+
<IRImageSection key={image.id} image={image = {...image, caption: image.original_file_name}} />
44+
))}
45+
</Box>
46+
)}
3747
</>
3848
);
3949

@@ -63,6 +73,9 @@ const IRRequirement = ({
6373
}) => {
6474
const { inspectionData, isReportsReadOnly } = useReportStore();
6575
const { requirementPhotos, requirementFigures } = useRequirementStore();
76+
const { data: requirementSourceImages } = useRequirementSourceImages(inspectionData?.id ?? 0, requirement.id, 540000);
77+
const { data: requirementDocumentImages } = useRequirementDocumentImages(inspectionData?.id ?? 0, requirement.id, 540000);
78+
6679
const { setOpen, setClose } = useDrawer();
6780
const queryClient = useQueryClient();
6881
const [photos, setPhotos] = useState<RequirementImage[]>([]);
@@ -133,13 +146,15 @@ const IRRequirement = ({
133146
${reqSourceDetail.title ?? ""}`}
134147
content={reqSourceDetail.description || ""}
135148
appendixNo={reqSourceDetail.appendix?.appendix_no}
149+
detailSectionImages={requirementSourceImages?.filter(image => image.req_detail_id === reqSourceDetail.id) ?? []}
136150
/>
137151
{reqSourceDetail.documents.map((document) => (
138152
<DetailSection
139153
key={document.id}
140154
title={`${document.document_title} Section ${document.section_number ?? ""} ${document.section_title ?? ""}`}
141155
content={document.description || ""}
142156
appendixNo={document.appendix?.appendix_no}
157+
detailSectionImages={requirementDocumentImages?.filter(image => image.req_detail_doc_id === document.id) ?? []}
143158
/>
144159
))}
145160
</Box>

compliance-web/src/components/App/Inspections/Profile/Requirements/RequirementFormRight.tsx

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { FC, useEffect, useMemo, useState } from "react";
2222
import { useRequirementStore } from "./requirementStore";
2323
import { CaseFile } from "@/models/CaseFile";
2424
import { MODAL_WIDTHS } from "@/utils/constants";
25-
import { useRequirementSourceImages } from "@/hooks/useInspectionRequirements";
25+
import { useRequirementDocumentImages, useRequirementSourceImages } from "@/hooks/useInspectionRequirements";
2626

2727
interface RequirementFormRightProps {
2828
onDataChange: (data: RequirementSourceFormData[]) => void;
@@ -52,6 +52,10 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
5252
inspectionId,
5353
requirementId
5454
);
55+
const { data: requirementDocumentImages } = useRequirementDocumentImages(
56+
inspectionId,
57+
requirementId
58+
);
5559
const { setIsDataChanged } = useRequirementStore();
5660

5761
useEffect(() => {
@@ -176,6 +180,7 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
176180
<RequirementSourceModal
177181
onSubmit={handleOnAddSubmit}
178182
caseFile={caseFile}
183+
inspectionId={inspectionId}
179184
appendixList={appendixList}
180185
/>
181186
),
@@ -192,6 +197,7 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
192197
<RequirementSourceModal
193198
onSubmit={handleOnEditSubmit}
194199
caseFile={caseFile}
200+
inspectionId={inspectionId}
195201
requirementSourceFormData={data}
196202
appendixList={appendixList}
197203
requirementSourceImages={
@@ -249,10 +255,10 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
249255
<RequirementSourceModal
250256
onSubmit={handleOnAddSubmit}
251257
caseFile={caseFile}
258+
inspectionId={inspectionId}
252259
requirementSource={data.requirementSource}
253260
order={data.order}
254261
appendixList={appendixList}
255-
requirementSourceImages={requirementSourceImages ?? []}
256262
isSectionModal={true}
257263
/>
258264
),
@@ -267,6 +273,7 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
267273
content: (
268274
<RequirementRelatedDocumentModal
269275
onSubmit={handleOnAddRelatedDocumentSubmit}
276+
inspectionId={inspectionId}
270277
requirementSourceData={data}
271278
appendixList={appendixList}
272279
/>
@@ -283,6 +290,7 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
283290
content: (
284291
<RequirementRelatedDocumentModal
285292
onSubmit={handleOnAddRelatedDocumentSubmit}
293+
inspectionId={inspectionId}
286294
requirementSourceData={srcData}
287295
relatedDocumentData={docData}
288296
appendixList={appendixList}
@@ -311,10 +319,14 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
311319
content: (
312320
<RequirementRelatedDocumentModal
313321
onSubmit={handleOnAddRelatedDocumentSubmit}
322+
inspectionId={inspectionId}
314323
requirementSourceData={srcData!}
315324
relatedDocumentData={docData!}
316325
relatedDocumentSectionData={data}
317326
appendixList={appendixList}
327+
relatedDocumentImages={requirementDocumentImages?.filter(
328+
(image) => image.req_detail_doc_id === data.id
329+
) ?? []}
318330
isEditSection={true}
319331
/>
320332
),
@@ -380,6 +392,7 @@ const RequirementFormRight: FC<RequirementFormRightProps> = ({
380392
handleDeleteRequirementRelatedDocumentSection
381393
}
382394
requirementSourceImages={requirementSourceImages}
395+
requirementDocumentImages={requirementDocumentImages}
383396
isRequirementEditable={isRequirementEditable}
384397
/>
385398
))}

compliance-web/src/components/App/Inspections/Profile/Requirements/RequirementSource/RequirementRelatedDocumentCard.tsx

Lines changed: 81 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import {
2222
RequirementRelatedDocumentSectionData,
2323
} from "@/models/InspectionRequirementSource";
2424
import ParagraphWithReadMore from "@/components/Shared/ParagraphWithReadMore";
25+
import { generateHtmlWithEmbeddedImages } from "../RequirementUtils";
26+
import { RequirementImage } from "@/models/Image";
2527

2628
interface RequirementRelatedDocumentCardProps {
2729
relatedDocument: RequirementRelatedDocumentData;
@@ -33,6 +35,7 @@ interface RequirementRelatedDocumentCardProps {
3335
onEditRelatedDocumentSection: (
3436
data: RequirementRelatedDocumentSectionData
3537
) => void;
38+
relatedDocumentImages?: RequirementImage[];
3639
isRequirementEditable?: boolean;
3740
}
3841

@@ -44,6 +47,7 @@ const RequirementRelatedDocumentCard: FC<
4447
onAddRelatedDocumentSection,
4548
onDeleteRelatedDocumentSection,
4649
onEditRelatedDocumentSection,
50+
relatedDocumentImages,
4751
isRequirementEditable = true,
4852
}) => {
4953
const [isExpanded, setIsExpanded] = useState(true);
@@ -119,96 +123,97 @@ const RequirementRelatedDocumentCard: FC<
119123
</AccordionSummary>
120124
<AccordionDetails sx={{ padding: "0" }}>
121125
{relatedDocument.sections?.map((section, idx) => (
126+
<Box
127+
key={idx}
128+
sx={{
129+
padding: "1rem",
130+
borderBottom: `1px solid ${BCDesignTokens.surfaceColorBorderDefault}`,
131+
}}
132+
>
133+
{isRequirementEditable && (
134+
<Box
135+
display={"flex"}
136+
justifyContent={"flex-start"}
137+
gap={".25rem"}
138+
>
139+
<Tooltip title="Edit" arrow>
140+
<IconButton
141+
size="small"
142+
color="secondary"
143+
onClick={() => onEditRelatedDocumentSection(section)}
144+
data-testid={`requirement-related-document-edit-${index}-${idx}`}
145+
>
146+
<EditOutlined />
147+
</IconButton>
148+
</Tooltip>
149+
<Tooltip title="Delete" arrow>
150+
<IconButton
151+
size="small"
152+
color="secondary"
153+
onClick={() => onDeleteRelatedDocumentSection(section)}
154+
data-testid={`requirement-related-document-delete-${index}-${idx}`}
155+
>
156+
<DeleteOutlineRounded />
157+
</IconButton>
158+
</Tooltip>
159+
</Box>
160+
)}
122161
<Box
123-
key={idx}
124162
sx={{
125-
padding: "1rem",
126-
borderBottom: `1px solid ${BCDesignTokens.surfaceColorBorderDefault}`,
163+
display: "flex",
164+
flexDirection: "row",
165+
gap: "1rem",
166+
marginBottom: ".5rem",
127167
}}
128168
>
129-
{isRequirementEditable && (
130-
<Box
131-
display={"flex"}
132-
justifyContent={"flex-start"}
133-
gap={".25rem"}
169+
<Box>
170+
<Typography
171+
variant="subtitle2"
172+
color={BCDesignTokens.typographyColorPlaceholder}
134173
>
135-
<Tooltip title="Edit" arrow>
136-
<IconButton
137-
size="small"
138-
color="secondary"
139-
onClick={() => onEditRelatedDocumentSection(section)}
140-
data-testid={`requirement-related-document-edit-${index}-${idx}`}
141-
>
142-
<EditOutlined />
143-
</IconButton>
144-
</Tooltip>
145-
<Tooltip title="Delete" arrow>
146-
<IconButton
147-
size="small"
148-
color="secondary"
149-
onClick={() => onDeleteRelatedDocumentSection(section)}
150-
data-testid={`requirement-related-document-delete-${index}-${idx}`}
151-
>
152-
<DeleteOutlineRounded />
153-
</IconButton>
154-
</Tooltip>
155-
</Box>
156-
)}
157-
<Box
158-
sx={{
159-
display: "flex",
160-
flexDirection: "row",
161-
gap: "1rem",
162-
marginBottom: ".5rem",
163-
}}
164-
>
165-
<Box>
166-
<Typography
167-
variant="subtitle2"
168-
color={BCDesignTokens.typographyColorPlaceholder}
169-
>
170-
Section #:
171-
</Typography>
172-
<Typography variant="body2" fontWeight={700}>
173-
{section.sectionNumber}
174-
</Typography>
175-
</Box>
176-
<Box>
177-
<Typography
178-
variant="subtitle2"
179-
color={BCDesignTokens.typographyColorPlaceholder}
180-
>
181-
Section Title:
182-
</Typography>
183-
<Typography variant="body2">
184-
{section.sectionTitle}
185-
</Typography>
186-
</Box>
174+
Section #:
175+
</Typography>
176+
<Typography variant="body2" fontWeight={700}>
177+
{section.sectionNumber}
178+
</Typography>
187179
</Box>
188180
<Box>
189181
<Typography
190182
variant="subtitle2"
191183
color={BCDesignTokens.typographyColorPlaceholder}
192184
>
193-
Description:
185+
Section Title:
194186
</Typography>
195-
<ParagraphWithReadMore
196-
key={section.description?.html}
197-
maxHeight={84}
198-
isFormatted={true}
199-
renderTypography={
200-
<Typography
201-
variant="subtitle2"
202-
component={"div"}
203-
dangerouslySetInnerHTML={{
204-
__html: section.description?.html ?? "",
205-
}}
206-
/>
207-
}
208-
/>
187+
<Typography variant="body2">{section.sectionTitle}</Typography>
209188
</Box>
210189
</Box>
211-
))}
190+
<Box>
191+
<Typography
192+
variant="subtitle2"
193+
color={BCDesignTokens.typographyColorPlaceholder}
194+
>
195+
Description:
196+
</Typography>
197+
<ParagraphWithReadMore
198+
key={`req-related-doc-card-desc-${section.id}`}
199+
maxHeight={84}
200+
isFormatted={true}
201+
renderTypography={
202+
<Box
203+
dangerouslySetInnerHTML={{
204+
__html: generateHtmlWithEmbeddedImages(
205+
section.description?.html ?? "",
206+
relatedDocumentImages?.filter(
207+
(image) => image.req_detail_doc_id === section.id
208+
) ?? []
209+
),
210+
}}
211+
/>
212+
}
213+
/>
214+
</Box>
215+
</Box>
216+
))}
212217
</AccordionDetails>
213218
</Accordion>
214219
);

0 commit comments

Comments
 (0)