diff --git a/entrypoints/degree-audit/components/degree-audit-page.tsx b/entrypoints/degree-audit/components/degree-audit-page.tsx
index 9e565d8..6a29787 100644
--- a/entrypoints/degree-audit/components/degree-audit-page.tsx
+++ b/entrypoints/degree-audit/components/degree-audit-page.tsx
@@ -3,9 +3,10 @@ import Title from "@/entrypoints/components/common/text";
import "@/entrypoints/styles/content.css";
import { useAuditContext } from "../providers/audit-provider";
import { SimpleDegreeCompletionDonut } from "./degree-completion-donut";
+import { CreditHourTotalsCard, GPATotalsCard } from "./gpa-credit-cards";
import RequirementBreakdown from "./requirement-breakdown";
-const GpaSummaryCard = () => {
+const SidePanel = () => {
const { sections } = useAuditContext();
const gpaSection = sections.find((section) =>
section.title.toLowerCase().includes("gpa"),
@@ -58,33 +59,53 @@ const SidePanel = () => {
x="center"
>
-
-
-
+
+
+
+
);
};
const MainContent = () => {
const { progresses, sections } = useAuditContext();
- const checklistSections = sections.filter(
+ const nonGPASections = sections.filter(
(section) => !section.title.toLowerCase().includes("gpa"),
);
return (
-
- {checklistSections.map((section) => {
- const sectionIndex = sections.findIndex((item) => item === section);
+ {nonGPASections.map((section) => {
+ const originalIdx = sections.findIndex((s) => s.title === section.title);
+ const sectionProgress = progresses.sections[originalIdx];
+
return (
- progresses.sections[sectionIndex]?.progress.total > 0 && (
+ sectionProgress?.progress.total > 0 && (
)
);
diff --git a/entrypoints/degree-audit/components/gpa-credit-cards.tsx b/entrypoints/degree-audit/components/gpa-credit-cards.tsx
new file mode 100644
index 0000000..71c306f
--- /dev/null
+++ b/entrypoints/degree-audit/components/gpa-credit-cards.tsx
@@ -0,0 +1,93 @@
+import { HStack, VStack } from "@/entrypoints/components/common/helperdivs";
+
+type GPATotalsProps = {
+ required: number;
+ counted: number;
+ hoursUsed: number;
+ points: number;
+};
+
+export const GPATotalsCard = ({
+ required = 2.0,
+ counted = 4.0,
+ hoursUsed = 80,
+ points = 320,
+}: GPATotalsProps) => {
+ return (
+
+
+ GPA Totals
+
+
+
+
+
+ Required
+
+ {required.toFixed(4)}
+
+
+
+ Counted
+
+
+ {counted.toFixed(4)}
+
+
+
+
+
+
+ {hoursUsed} hours for a total of {points} points were used to calculate
+ the GPA.
+
+
+ );
+};
+
+type CreditRequirement = {
+ met: boolean;
+ hours: number;
+ description: string;
+};
+
+type CreditHourTotalsProps = {
+ requirements: CreditRequirement[];
+};
+
+export const CreditHourTotalsCard = ({
+ requirements = [
+ {
+ met: true,
+ hours: 21,
+ description: "hours of upper-division coursework in residence.",
+ },
+ {
+ met: false,
+ hours: 36,
+ description: "hours of upper-division coursework required.",
+ },
+ ],
+}: CreditHourTotalsProps) => {
+ return (
+
+
Credit Hour Totals
+
+
+ {requirements.map((req, idx) => (
+
+
+
+ {req.hours} hours of{" "}
+ {req.description}
+
+
+ ))}
+
+
+ );
+};
diff --git a/public/Frame (1).svg b/public/Frame (1).svg
new file mode 100644
index 0000000..31ef55d
--- /dev/null
+++ b/public/Frame (1).svg
@@ -0,0 +1,10 @@
+
diff --git a/public/Frame.svg b/public/Frame.svg
new file mode 100644
index 0000000..6ddeb57
--- /dev/null
+++ b/public/Frame.svg
@@ -0,0 +1,10 @@
+
diff --git a/public/Info.svg b/public/Info.svg
new file mode 100644
index 0000000..8c84be0
--- /dev/null
+++ b/public/Info.svg
@@ -0,0 +1,3 @@
+