From a5f86ed1e8f63e3b971cf92d784a105d8046b842 Mon Sep 17 00:00:00 2001 From: August Fu Date: Tue, 27 Feb 2024 03:11:24 -0500 Subject: [PATCH] migrate select drop down list to degree add modal --- .../components/FourYearPlan/DegreeModal.tsx | 80 ++++++++++++------- .../degree-plan/pages/FourYearPlanPage.tsx | 4 +- frontend/degree-plan/pages/OnboardingPage.tsx | 4 +- 3 files changed, 56 insertions(+), 32 deletions(-) diff --git a/frontend/degree-plan/components/FourYearPlan/DegreeModal.tsx b/frontend/degree-plan/components/FourYearPlan/DegreeModal.tsx index 648f8cabd..c044be380 100644 --- a/frontend/degree-plan/components/FourYearPlan/DegreeModal.tsx +++ b/frontend/degree-plan/components/FourYearPlan/DegreeModal.tsx @@ -1,8 +1,8 @@ import styled from "@emotion/styled"; -import type { DegreePlan, Fulfillment, Semester } from "@/types"; -import { useState } from "react"; +import type { DegreeListing, DegreePlan, Fulfillment, MajorOption, SchoolOption, Semester } from "@/types"; +import React, { useState } from "react"; import { deleteFetcher, postFetcher, useSWRCrud } from "@/hooks/swrcrud"; -import { useSWRConfig } from "swr"; +import useSWR, { useSWRConfig } from "swr"; import ModalContainer from "../common/ModalContainer"; import Select from "react-select"; @@ -61,15 +61,47 @@ const ModalInterior = ({ modalObject, modalKey, setActiveDegreeplanId, close }: const { create: createDegreeplan, update: updateDegreeplan, remove: deleteDegreeplan, copy: copyDegreeplan } = useSWRCrud('/api/degree/degreeplans'); const { mutate } = useSWRConfig(); - console.log("FIRED") - const create_degreeplan = (name: string) => { createDegreeplan({ name: name }) .then((new_) => new_ && setActiveDegreeplanId(new_.id)) } + const [school, setSchool] = useState(); + const [major, setMajor] = useState(); const [name, setName] = useState(modalObject?.name || ""); - const [degreeId, setDegreeId] = useState(null); + // const [degreeId, setDegreeId] = useState(null); + + const { data: degrees, isLoading: isLoadingDegrees } = useSWR< + DegreeListing[] + >(`/api/degree/degrees`); + + const defaultSchools = ['BSE', 'BA', 'BAS', 'BS']; + + const schoolOptions = + defaultSchools.map((d) => ({ + value: d, + label: d + })) + // console.log('schooOptions', schoolOptions); + + /** Create label for major listings */ + const createMajorLabel = (degree: DegreeListing) => { + const concentration = + degree.concentration && degree.concentration !== 'NONE' + ? ` - ${degree.concentration}` + : ''; + return `${degree.major}${concentration}`; + } + + const getMajorOptions = React.useCallback(() => { + /** Filter major options based on selected schools/degrees */ + const majorOptions = degrees + ?.filter(d => school?.value === d.degree) + .map((degree) => ({ value: degree, label: createMajorLabel(degree)})) + || []; + return majorOptions; + }, [school]); + if (modalKey === "plan-create") { return ( @@ -138,39 +170,29 @@ const ModalInterior = ({ modalObject, modalKey, setActiveDegreeplanId, close }: case "degree-add": return ( - {/* -
- - setSchools(selectedOption)} + value={school} + onChange={(selectedOption) => setSchool(selectedOption)} isClearable - isMulti placeholder="Select School or Program" - styles={customSelectStylesRight} + // styles={customSelectStylesRight} isLoading={isLoadingDegrees} /> -
- -
- -