Skip to content

Commit d125648

Browse files
authored
Merge pull request #233 from nitheesh-aot/image-upload
Image Upload
2 parents 0c73bfc + d738eb9 commit d125648

22 files changed

+946
-54
lines changed

compliance-web/package-lock.json

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

compliance-web/package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@
1212
"cy:unit": "cypress run --component"
1313
},
1414
"dependencies": {
15+
"@dnd-kit/core": "^6.3.1",
16+
"@dnd-kit/sortable": "^10.0.0",
1517
"@emotion/react": "^11.11.4",
1618
"@emotion/styled": "^11.11.5",
1719
"@hookform/resolvers": "^3.9.0",
Lines changed: 2 additions & 0 deletions
Loading

compliance-web/src/components/App/ContinuationReports/ContinuationReportTimelineEntry.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,11 @@ export default function ContinuationReportTimelineEntry({
9797
<Typography
9898
variant="subtitle2"
9999
component={"div"}
100+
sx={{
101+
"& p": {
102+
my: 0,
103+
},
104+
}}
100105
dangerouslySetInnerHTML={{ __html: getFormattedText() }}
101106
/>
102107
{!isSystemGenerated && createdByUser && (

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ const GridLabelValuePair: FC<{
66
label: string;
77
value: ReactNode;
88
gridProps?: { xs: number };
9-
}> = memo(({ label, value, gridProps = { xs: 12 } }) => (
9+
isBold?: boolean;
10+
}> = memo(({ label, value, gridProps = { xs: 12 }, isBold = false }) => (
1011
<Grid item {...gridProps}>
1112
<Typography
1213
variant="body2"
13-
color={BCDesignTokens.typographyColorPlaceholder}
14+
color={isBold ? "inherit" : BCDesignTokens.typographyColorPlaceholder}
15+
fontWeight={isBold ? 700 : 400}
1416
>
1517
{label}
1618
</Typography>
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
import { Link, Tooltip } from "@mui/material";
2+
import { Box } from "@mui/material";
3+
import { Image } from "@/models/Image";
4+
import { arraySwap, useSortable } from "@dnd-kit/sortable";
5+
import { CSS } from "@dnd-kit/utilities";
6+
import { formatS3Url } from "@/utils/appUtils";
7+
import imageNotFound from "@/assets/images/image-not-found.svg";
8+
import { BCDesignTokens } from "epic.theme";
9+
10+
type ImageCardProps = {
11+
image: Image;
12+
handleImageClick: () => void;
13+
isPhoto: boolean;
14+
index: number;
15+
};
16+
17+
export default function ImageCard({
18+
image,
19+
handleImageClick,
20+
isPhoto,
21+
index,
22+
}: ImageCardProps) {
23+
const { attributes, listeners, setNodeRef, transition, transform } =
24+
useSortable({
25+
id: image.id ?? 0,
26+
getNewIndex: ({ id, items, activeIndex, overIndex }) =>
27+
arraySwap(items, activeIndex, overIndex).indexOf(id),
28+
});
29+
30+
const style = {
31+
transform: CSS.Transform.toString(transform),
32+
transition,
33+
};
34+
35+
return (
36+
<Box
37+
id={index.toString()}
38+
sx={{
39+
display: "flex",
40+
flexDirection: "column",
41+
width: "calc(50% - 4px)",
42+
borderRadius: "4px",
43+
padding: "8px",
44+
pb: "12px",
45+
boxSizing: "border-box",
46+
backgroundColor: BCDesignTokens.surfaceColorBackgroundLightGray,
47+
cursor: "pointer",
48+
"&:hover": {
49+
backgroundColor: BCDesignTokens.surfaceColorBackgroundLightBlue,
50+
},
51+
}}
52+
ref={setNodeRef}
53+
style={style}
54+
{...attributes}
55+
{...listeners}
56+
onClick={handleImageClick}
57+
>
58+
<Box
59+
sx={{
60+
height: 150,
61+
marginBottom: 0.5,
62+
display: "flex",
63+
justifyContent: "center",
64+
alignItems: "center",
65+
overflow: "hidden",
66+
pointerEvents: "none", // Disable drag on this image
67+
}}
68+
>
69+
<img
70+
src={formatS3Url(image.relative_url ?? "")}
71+
alt={image.caption}
72+
width={"100%"}
73+
onError={(e) => {
74+
e.currentTarget.src = imageNotFound;
75+
e.currentTarget.style.opacity = "0.5";
76+
e.currentTarget.style.width = "45%";
77+
e.currentTarget.style.height = "150px";
78+
}}
79+
/>
80+
</Box>
81+
<Tooltip title={image.caption}>
82+
<Link
83+
sx={{
84+
display: "-webkit-box",
85+
WebkitBoxOrient: "vertical",
86+
WebkitLineClamp: 2,
87+
overflow: "hidden",
88+
textOverflow: "ellipsis",
89+
}}
90+
>
91+
<strong>
92+
{isPhoto ? "Photo" : "Figure"} {index + 1}:
93+
</strong>{" "}
94+
{image.caption}
95+
</Link>
96+
</Tooltip>
97+
</Box>
98+
);
99+
}

0 commit comments

Comments
 (0)