diff --git a/src/components/ProgressCard/ProgressCard.models.ts b/src/components/ProgressCard/ProgressCard.models.ts
new file mode 100644
index 0000000..0d37939
--- /dev/null
+++ b/src/components/ProgressCard/ProgressCard.models.ts
@@ -0,0 +1,7 @@
+export interface ProgressCardProps {
+ header: string;
+ summary?: string;
+ progressAmount: number;
+ totalAmount: number;
+ colorTheme?: "primary" | "secondary" | "error" | "info" | "success" | "warning";
+}
diff --git a/src/components/ProgressCard/ProgressCard.tsx b/src/components/ProgressCard/ProgressCard.tsx
new file mode 100644
index 0000000..ac82e41
--- /dev/null
+++ b/src/components/ProgressCard/ProgressCard.tsx
@@ -0,0 +1,23 @@
+import ProgressCardView from "./ProgressCard.view";
+import { ProgressCardProps } from "./ProgressCard.models";
+import { getPercentage, parseSummary } from "./ProgressCard.utils";
+
+export default function ProgressCard(props: ProgressCardProps) {
+ const { progressAmount, totalAmount, summary } = props;
+
+ const percentage = getPercentage(progressAmount, totalAmount);
+ const { prefixAmount, suffixString } = parseSummary(
+ summary,
+ progressAmount,
+ totalAmount
+ );
+
+ return (
+
+ );
+}
diff --git a/src/components/ProgressCard/ProgressCard.utils.ts b/src/components/ProgressCard/ProgressCard.utils.ts
new file mode 100644
index 0000000..6f126cd
--- /dev/null
+++ b/src/components/ProgressCard/ProgressCard.utils.ts
@@ -0,0 +1,19 @@
+export const getPercentage = (progressAmount: number, totalAmount: number) => {
+ if (!totalAmount) return 0;
+ return Math.min(100, Math.max(0, (progressAmount / totalAmount) * 100));
+};
+
+export const parseSummary = (
+ summary: string | undefined,
+ progressAmount: number,
+ totalAmount: number
+) => {
+ const displaySummary = summary ?? `Rs ${progressAmount} / Rs ${totalAmount}`;
+
+ const parts = displaySummary.split("/");
+ const prefixAmount = parts[0]?.trim() || "";
+ const suffixString =
+ parts.length > 1 ? `/ ${parts.slice(1).join("/").trim()}` : "";
+
+ return { prefixAmount, suffixString };
+};
diff --git a/src/components/ProgressCard.tsx b/src/components/ProgressCard/ProgressCard.view.tsx
similarity index 56%
rename from src/components/ProgressCard.tsx
rename to src/components/ProgressCard/ProgressCard.view.tsx
index 74c66d3..94454e8 100644
--- a/src/components/ProgressCard.tsx
+++ b/src/components/ProgressCard/ProgressCard.view.tsx
@@ -1,29 +1,26 @@
import * as React from "react";
-import { Box, Typography, Paper, LinearProgress, linearProgressClasses } from "@mui/material";
+import {
+ Box,
+ Typography,
+ Paper,
+ LinearProgress,
+ linearProgressClasses
+} from "@mui/material";
+import { ProgressCardProps } from "./ProgressCard.models";
-export interface ProgressCardProps {
- header: string;
- summary?: string;
- progressAmount: number;
- totalAmount: number;
- colorTheme?: "primary" | "secondary" | "error" | "info" | "success" | "warning";
+interface ViewProps extends ProgressCardProps {
+ percentage: number;
+ prefixAmount: string;
+ suffixString: string;
}
-export default function ProgressCard({
+export default function ProgressCardView({
header,
- summary,
- progressAmount,
- totalAmount,
colorTheme = "info",
-}: ProgressCardProps) {
- const percentage = Math.min(100, Math.max(0, (progressAmount / totalAmount) * 100)) || 0;
-
- const displaySummary = summary ?? `Rs ${progressAmount} / Rs ${totalAmount}`;
-
- const parts = displaySummary.split('/');
- const prefixAmount = parts[0]?.trim() || '';
- const suffixString = parts.length > 1 ? `/ ${parts.slice(1).join('/').trim()}` : '';
-
+ percentage,
+ prefixAmount,
+ suffixString,
+}: ViewProps) {
return (
`0 12px 24px -10px ${theme.palette.mode === 'dark' ? '#000' : theme.palette[colorTheme].main}`,
+ position: "relative",
+ overflow: "hidden",
+ boxShadow: (theme) =>
+ `0 12px 24px -10px ${
+ theme.palette.mode === "dark"
+ ? "#000"
+ : theme.palette[colorTheme].main
+ }`,
}}
>
@@ -52,7 +54,11 @@ export default function ProgressCard({
{prefixAmount}{" "}
{suffixString && (
-
+
{suffixString}
)}
@@ -70,7 +76,7 @@ export default function ProgressCard({
},
[`& .${linearProgressClasses.bar}`]: {
borderRadius: 5,
- backgroundColor: "#fff",
+ backgroundColor: "#fff",
},
}}
/>
diff --git a/src/components/ProgressCard/index.ts b/src/components/ProgressCard/index.ts
new file mode 100644
index 0000000..2847eeb
--- /dev/null
+++ b/src/components/ProgressCard/index.ts
@@ -0,0 +1,2 @@
+export { default } from "./LatestItems";
+export * from "./LatestItems.models";