Skip to content

Commit

Permalink
working on minor validation:
Browse files Browse the repository at this point in the history
  • Loading branch information
ShireenKumar committed Feb 12, 2025
1 parent a698d00 commit 36d6d0e
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 14 deletions.
60 changes: 58 additions & 2 deletions packages/common/src/major2-validation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import {
Result,
Err,
Ok,
Minor,
} from "./types";
import { assertUnreachable, courseToString } from "./course-utils";

Expand Down Expand Up @@ -283,9 +284,11 @@ export type MajorValidationResult = Result<
export function validateMajor2(
major: Major2,
taken: ScheduleCourse2<unknown>[],
minor?: Minor,
concentrations?: SelectedConcentrationsType
): MajorValidationResult {
const tracker = new Major2ValidationTracker(taken);

let concentrationReq: Requirement2[] = [];
if (major.concentrations) {
concentrationReq = getConcentrationsRequirement(
Expand All @@ -294,7 +297,19 @@ export function validateMajor2(
);
}

const majorReqs = [...major.requirementSections, ...concentrationReq];
let minorRequirements: Requirement2[] = [];
if (minor) {
// Get the minor requirements and assign them
minorRequirements = getMinorRequirement(minor);
// console.log(minorRequirements)
}

//const majorReqs = [...major.requirementSections, ...(minor?.requirementSections ?? []), ...concentrationReq];
const majorReqs = [
...major.requirementSections,
...minorRequirements,
...concentrationReq,
];
// create a big AND requirement of all the sections and selected concentrations
const requirementsResult = validateRequirement(
{
Expand All @@ -304,7 +319,7 @@ export function validateMajor2(
tracker
);
const creditsResult = validateTotalCreditsRequired(
major.totalCreditsRequired,
major.totalCreditsRequired + (minor?.totalCreditsRequired ?? 0),
taken
);

Expand All @@ -317,6 +332,7 @@ export function validateMajor2(
}
const totalCreditsRequirementError =
creditsResult.type === ResultType.Ok ? undefined : creditsResult.err;
console.log("error");
return Err({
majorRequirementsError,
totalCreditsRequirementError,
Expand Down Expand Up @@ -377,6 +393,46 @@ function convertToConcentrationsArray(
return concentrations;
}

export function getMinorRequirement(
inputMinor: undefined | Minor
): Requirement2[] {
// No minor
if (!inputMinor) {
return [];
}

// put all the minor requirments into minor requirments and assigning type as section
const minorRequirements: Section[] = inputMinor.requirementSections;

const selectedMinors = convertToMinorsArray(inputMinor);

Check failure on line 407 in packages/common/src/major2-validation.ts

View workflow job for this annotation

GitHub Actions / Run linting for all packages

'selectedMinors' is assigned a value but never used. Allowed unused vars must match /^_/u

const matchedRequirements = [];

Check failure on line 409 in packages/common/src/major2-validation.ts

View workflow job for this annotation

GitHub Actions / Run linting for all packages

'matchedRequirements' is assigned a value but never used. Allowed unused vars must match /^_/u
// for (const minor of selectedMinors) {
// console.log(selectedMinors);
// const found = minorRequirements.find((m) => {
// // for(const req of )
// console.log(`Comparing title: ${m.title} with minor name: ${minor.name}`);
// return m.title === minor.name;
// });
// if (!found) {
// throw new Error (`Minor was not found: ${minor.name}`);
// }
// matchedRequirements.push(found);
// }

return [{ type: "AND", courses: minorRequirements }];
}

function convertToMinorsArray(minors: undefined | Minor | Minor[]): Minor[] {
if (minors === undefined) {
return [];
}
if (!Array.isArray(minors)) {
return [minors];
}
return minors;
}

// the solutions returned may have duplicate courses, indicating the # of times a course is taken
export const validateRequirement = (
req: Requirement2,
Expand Down
25 changes: 14 additions & 11 deletions packages/frontend/components/Sidebar/Sidebar.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ const Sidebar: React.FC<SidebarProps> = memo(

const minorResponse = useMinor(
selectedPlan.catalogYear,
selectedPlan.minor
selectedPlan.minor ?? ""
);

const workerRef = useRef<Worker>();
Expand All @@ -108,6 +108,7 @@ const Sidebar: React.FC<SidebarProps> = memo(
currentRequestNum += 1;
const validationInfo: WorkerPostInfo = {
major: major,
minor: minorResponse.minor,
taken: coursesTaken,
concentration: selectedPlan.concentration,
requestNumber: currentRequestNum,
Expand Down Expand Up @@ -260,14 +261,16 @@ const Sidebar: React.FC<SidebarProps> = memo(
>
Major
</Tab>
<Tab
_selected={{ color: "white", bg: "blue.800" }}
flex="0.4"
p={1}
borderTopRadius="lg"
>
Minor(s)
</Tab>
{minorResponse.minor && (
<Tab
_selected={{ color: "white", bg: "blue.800" }}
flex="0.4"
p={1}
borderTopRadius="lg"
>
Minor(s)
</Tab>
)}
</TabList>
<TabPanels>
<TabPanel width="100%" p={0} m={0}>
Expand Down Expand Up @@ -319,11 +322,11 @@ const Sidebar: React.FC<SidebarProps> = memo(
/>
)}
</TabPanel>
<TabPanel>
<TabPanel width="100%" p={0} m={0}>
{minorResponse.minor && (
<>
<Text>Minor Requirments</Text>
{minorResponse.minor?.requirementSections.map(
{minorResponse.minor.requirementSections.map(
(section, index) => {
const sectionValidationError:
| MajorValidationError
Expand Down
2 changes: 2 additions & 0 deletions packages/frontend/validation-worker/worker-messages.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
Major2,
MajorValidationResult,
Minor,
ScheduleCourse2,
} from "@graduate/common";

Expand All @@ -20,6 +21,7 @@ export type Loaded = { type: WorkerMessageType.Loaded };

export interface WorkerPostInfo {
major: Major2;
minor?: Minor;
taken: ScheduleCourse2<unknown>[];
concentration?: string;
requestNumber: number;
Expand Down
7 changes: 6 additions & 1 deletion packages/frontend/validation-worker/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,12 @@ postMessage(loadMessage);
addEventListener("message", ({ data }: MessageEvent<WorkerPostInfo>) => {
const validationResult: ValidationResult = {
type: WorkerMessageType.ValidationResult,
result: validateMajor2(data.major, data.taken, data.concentration),
result: validateMajor2(
data.major,
data.taken,
data.minor,
data.concentration
),
requestNumber: data.requestNumber,
};

Expand Down

0 comments on commit 36d6d0e

Please sign in to comment.