Open
Conversation
### Summary Resolves #377 ### How to Test 1. Courses already added change color to selected color palette 2. Default palette displayed for new schedule versions 3. getRandomColor works 4. compare schedule uses user's currently selected palette --------- Co-authored-by: DanielChee <128537022+DanielChee@users.noreply.github.com> Co-authored-by: Uma Anand <63426041+uma-anand@users.noreply.github.com> Co-authored-by: Uma Anand <uma2005anand@gmail.com> Co-authored-by: Alexa Fazio <45372449+afazio1@users.noreply.github.com> Co-authored-by: afazio1 <alexa.fazio04@gmail.com>
Implemented a hook that adds a comma separated list (non case sensitive) to the desired courses tab on the side. Testing: Created a button to run the hook with some test courses (not committed of course, so attaching screenshots).   
### Summary Resolves #353 <!-- What does this PR change and why? Discuss any breaking changes. --> caches seating info and removes tooltip from existing design. conditionally renders seat and waitlist info based on color of background. ### How to Test flame my code but my functionality is flawless bog --------- Co-authored-by: Uma Anand <63426041+uma-anand@users.noreply.github.com> Co-authored-by: Uma Anand <uma2005anand@gmail.com>
### Summary - wrong font color - incorrect padding ### How to Test Deploy preview --------- Co-authored-by: Uma Anand <uma2005anand@gmail.com>
### Summary Resolves #354 This is a long commit. Everything described in the issue has been implemented except for the map auto focusing on click. A few notes: 1. The design and the frontend for locations not specified are not exactly 1-1 (had already worked on this before getting access to the design - can change though). 2. Minor differences in design for the location picker component. 3. There is a 300 line variable which has all GT locations which the location search can prioritize. I could not pull everything from the crawler because some non-class location don't exist on it (e.g. Bobby Dodd). It works really good though. (have to merge this constant with the course locations constant linked in the issue). 4. To implement the location picker, our mapbox usage will double. The first API call manages the search (/suggest) , and now the second API call will extract the lat and long of the specific location the user adds (/retrieve). Screenshots <img width="1685" height="983" alt="image" src="https://github.com/user-attachments/assets/586a4e91-01c6-4ed7-b474-5edea232b330" /> <img width="1687" height="983" alt="image" src="https://github.com/user-attachments/assets/1149ad0d-84e7-4fcb-8a0f-02ed33d301b9" /> <img width="1691" height="981" alt="image" src="https://github.com/user-attachments/assets/0aa4feb6-2759-42cf-8f76-df910f4564f6" /> NYC trip appears only on zooming out manually. --------- Co-authored-by: Uma Anand <uma2005anand@gmail.com>
### Summary Resolves #364 <!-- What does this PR change and why? Discuss any breaking changes. --> Adds min travel time option to schedule combination dropdown. - Used MapBox API to generate distance array. - `GT_LOCATIONS` array has some duplicate/different names for locations. - Uses Oliver's PR's code for consistency. ### Checklist - [x] Copy over the latitudes longitudes used in Ritwic's ticket to `src/mapConstants` - [x] Use the [MapBox Matrix API](https://docs.mapbox.com/api/navigation/matrix/) once to get a matrix of distances between all the possible class locations, store this in the `src/mapConsts` file - [x] Create a new sorting option in [`src/data/beans/Oscar`](https://github.com/gt-scheduler/website/blob/594219a8b0985d9d79071558ab737e0161cbf1cd/src/data/beans/Oscar.ts#L177) to sort by the sum of time taken to go from each location to the next location on a particular day. This should automatically add it to the combination container without you having to specify it. ### How to Test <!-- Describe how to test your code. --> Tested by starting a development instance with `npm start` and using the option to create schedules. This assumes the MapBox distances are 100% accurate.
## Summary Resolves #368 This PR fixes a long-standing UX issue where the mobile navigation drawer remained open after selecting a tab. The expected behavior is that tapping a navigation item both (a) switches the active tab and (b) closes the drawer to reveal content. After this change, the drawer now closes immediately on selection. Despite early guidance that this would be a “one-line fix,” the actual implementation required a modest four-line update to correctly wire the close action alongside the tab change. The end result is simple and predictable behavior with minimal code churn. ## Background **Previous behavior:** - On mobile, opening the drawer and tapping a tab changed the active tab but left the drawer visible. - Users had to manually dismiss the drawer to view content, adding an extra step. **Desired behavior:** - Selecting a tab should immediately close the drawer so the newly selected view is visible. ## Implementation - Added the drawer close action to the same click path that handles tab changes. - Kept the change localized to the navigation event handler used by the mobile drawer flow. - No layout, styling, or rendering changes were required. - Total changes: **~4 lines** (handler composition + minor wiring). *(Yes, the “1-line fix” characterization turned out to be optimistic.)* ## Behavior Changes - **Mobile:** Selecting any navigation item now closes the drawer immediately after switching the tab. - **Desktop:** Unchanged. The drawer is not used; tab switching works as before. - **No regressions** to keyboard navigation or pointer interactions were observed. ## Rationale - Reduces friction: one tap performs the full navigation action. - Aligns with common mobile drawer patterns. - Keeps logic in one place, which is easier to maintain and reason about. ## QA / Verification Steps 1. On a mobile-sized viewport, open the drawer. 2. Tap each tab in turn: - The active tab updates. - The drawer closes immediately. 3. Reopen the drawer and select the currently active tab: - No errors; drawer still closes. 4. Switch to a desktop-sized viewport: - Drawer controls are hidden. - Tab switching continues to work normally.
### Summary Resolves #366 extend the scheduler’s active hours from 8 AM–10 PM to 6 AM–11:59 PM. OPEN and CLOSE constants in src/constants.ts were updated to 60*6 and 60*24 - 1, and the calendar height was increased from 920px to 1180px to fit the new timeframe and make sure event blocks remained the same height. Additionally fixed bug where a ghost event drag (transparent block) would remain on the screen after a quick drag-and-release. The drag logic now cancels pending animation frames so the draft always disappears immediately. ### How to Test NEW: add a 50 minute class and make sure prof name doesn't overflow (ensure event block height isnt smushed) adding recurring events (manually or dragging to create) dragging to move recurring events mobile schedule export .ics export
### Summary Resolves #356 - Modified the Oscar beans class to retrieve planned counts and store it. I had to modify the constructor setup for this, because we want the planned counts to be fetched before creating the Course beans. - Modified Course and Section beans classes to contain field `plannedCount` that stores the planned count for that course or section ### Checklist - [x] Add a method(s) in the beans/ classes to retrieve the the aggregate count information. - [x] Update Course and Section types to contain this metric. ### How to Test Deployed new cloud function to dev db and ran website locally. I used console.log() to print the counts assigned to each section/course and made sure it matched the count calculated by the function. --------- Co-authored-by: Alexa Fazio <45372449+afazio1@users.noreply.github.com>
Implemented the discard button as per the issue. <img width="1658" height="1202" alt="image" src="https://github.com/user-attachments/assets/ca15c402-4484-4dfe-880f-4cb7101c8397" /> --------- Co-authored-by: Alexa Fazio <45372449+afazio1@users.noreply.github.com>
Resolves #377 1. Courses already added change color to selected color palette 2. Default palette displayed for new schedule versions 3. getRandomColor works 4. compare schedule uses user's currently selected palette --------- Co-authored-by: DanielChee <128537022+DanielChee@users.noreply.github.com> Co-authored-by: Uma Anand <63426041+uma-anand@users.noreply.github.com> Co-authored-by: Uma Anand <uma2005anand@gmail.com> Co-authored-by: Alexa Fazio <45372449+afazio1@users.noreply.github.com> Co-authored-by: afazio1 <alexa.fazio04@gmail.com>
Implemented a hook that adds a comma separated list (non case sensitive) to the desired courses tab on the side. Testing: Created a button to run the hook with some test courses (not committed of course, so attaching screenshots).   
### Summary This PR changes the phrase "delivery mode" to be "class format" as requested by exec in the GT-Scheduler Changes for this semester. It hasn't been done yet and didn't need a ticket to be completed since it literally changes two words. Co-authored-by: Spencer Banko <spencer@lockchain.io>
### Summary Resolves #396 adds location in a new line in Map tab sidebar ### How to Test add a class and section with a location check location appears in Map tab --------- Co-authored-by: afazio1 <alexa.fazio04@gmail.com>
### Summary Resolves #404 Uses `daysToString` util on the `course.daysOfWeek` to correctly order days in the DaySelection component.
### Summary Resolves #383 Fixes overflow state for recurring events that are too small. excluded location on desktop and mobile ### How to Test Copy Uma's exact location here: <img width="299" height="207" alt="image" src="https://github.com/user-attachments/assets/83008c6f-ce84-4f14-8e23-d1af4a47a13e" /> make sure it doesn't overflow play around with other times in desktop and mobile to make sure it doesn't overflow.
### Summary Resolves #365 Add travel times to map view Co-authored-by: Uma Anand <uma2005anand@gmail.com>
### Summary Resolves #400 https://www.gt-scheduler.org/#/?courses=CS1332,MATH3012 ImportCoursesModal should pop up. Then, a user can confirm or deny importing the courses. This will **append** to `desiredCourses` and it will not add courses that cannot be found in `oscar.courses`. ### How to Test Append `?courses=CS1332,MATH3012` to the deploy preview url. https://www.gt-scheduler.org/pr-preview/pr-412/#/?courses=CS1332,MATH3012
### Summary Resolves #382 <!-- What does this PR change and why? Discuss any breaking changes. --> This PR makes the following 4 places show correct **section title** as **course name** for 8803 special topics courses: 1. SectionBlocks 2. CompareBlocks 3. Map list 4. Calendar export text ### Note: Merge Order Merge **this** PR after the [corresponding backend PR](gt-scheduler/crawler-v2#46). This PR includes a fallback, so merging out of order won’t break builds, but this order is preferred. ### Checklist - [x] fix: Special Topics courses show incorrect titles ### How to Test <!-- Describe how to test your code. --> ```zsh yarn start ``` 1. SectionBlocks <img width="334" height="216" alt="image" src="https://github.com/user-attachments/assets/d9cb531b-931a-4c6a-8cc7-c419b1538998" /> 2. CompareBlocks <img width="362" height="238" alt="image" src="https://github.com/user-attachments/assets/93b68480-eb4c-4b30-8cbb-d12509e14ead" /> 3. Map list <img width="273" height="164" alt="image" src="https://github.com/user-attachments/assets/559ad8dd-8df7-4209-87ad-79db0634ce27" /> 4. Calendar export text <img width="379" height="130" alt="image" src="https://github.com/user-attachments/assets/2526d38a-4d6e-4de4-8d71-d24bb506449d" /> --------- Co-authored-by: Uma Anand <63426041+uma-anand@users.noreply.github.com> Co-authored-by: Uma Anand <uma2005anand@gmail.com>
### Summary As part of the new Course Details Page, we want to enable a new toggle to view course details. This PR adds the ability to toggle to a new context as well as creates the components necessary for the visual aspect of this (the button). Currently we use a placeholder for the course details page before we go ahead with the implementation. Note that we are still waiting on light mode designs (eta next week) so this only works on dark. For mobile to avoid problems with indices I also changed the way we did tabs (using indices) to using values (strings so not bulky and equality holds). ### How to Test [Deploy Preview](https://gt-scheduler.github.io/website/pr-preview/pr-419/) `yarn start` <img width="1787" height="858" alt="image" src="https://github.com/user-attachments/assets/a6f593ae-c9cd-41ec-8333-9bd92b486d43" /> <img width="1892" height="855" alt="image" src="https://github.com/user-attachments/assets/7f7d0eda-8b2f-4100-a372-1fe560fac93d" /> Mobile <img width="352" height="617" alt="image" src="https://github.com/user-attachments/assets/c84799b2-8be3-4bdc-84c6-80268cb1e5ca" />
### Summary This PR contains the two different landings when one navigates to the course details tab. One is a page for Empty Course details (ie, when the user has no selected courses). The other has a list of info cards for each course the user has added to the schedule. With regards to the information, this PR hasn't added corequisites, the actual metrics, and descriptions yet- the ones currently present are placeholders. However the styles for everything are accurate to Figma. Light mode designs are still a WIP. This code does have the mobile views implemented though. ### How to Test `yarn start` [PR Preview](https://gt-scheduler.github.io/website/pr-preview/pr-420/) Empty Course Details page (dark mode): <img width="1886" height="857" alt="image" src="https://github.com/user-attachments/assets/2eed26f0-5f17-4e59-8883-dd96b86105db" /> Empty Course Details page (light mode- we do have a design for this): <img width="925" height="551" alt="image" src="https://github.com/user-attachments/assets/d3b91a61-7a5b-46d7-b56d-4ee0a3da8465" /> Empty Course Details Page (mobile): <img width="451" height="785" alt="image" src="https://github.com/user-attachments/assets/6d76d18a-938e-4bab-8a89-36d69dff15a1" /> Course Details Page populated (web): <img width="1185" height="783" alt="image" src="https://github.com/user-attachments/assets/eed4fa9d-f484-4573-8020-54b4cab17d09" /> <img width="1153" height="598" alt="image" src="https://github.com/user-attachments/assets/ee88a67b-67c0-4ebf-b2a6-49f183df6127" /> Course Details Page populated (mobile): <img width="402" height="781" alt="image" src="https://github.com/user-attachments/assets/8d1f8cb2-cfd8-48a3-841e-57db0575a4b8" />
### Summary This PR populates all the information needed for the short Course Info blob except for the rating reviews. This include Co-reqs (which are gotten with [a parallel crawler PR](gt-scheduler/crawler-v2#53)), the description, and information about previous terms offered. This is ready for both mobile and web (dark mode) but light mode designs are not yet available. ### How to Test [PR Preview](https://gt-scheduler.github.io/website/pr-preview/pr-421/) (note coreqs will not work till crawler change pushed) `yarn start` (Run with parallel crawler) <img width="1178" height="720" alt="image" src="https://github.com/user-attachments/assets/8a674c56-a38f-4ff0-bb75-8d15a64f649f" /> A more recent class (not all terms) <img width="1226" height="653" alt="image" src="https://github.com/user-attachments/assets/56de4fcc-82b4-4301-960f-843daeddf24b" /> A class with coreqs <img width="1172" height="645" alt="image" src="https://github.com/user-attachments/assets/eedd5f3b-003d-42a7-ae7e-5fd24c3fe9b7" /> Mobile <img width="382" height="772" alt="image" src="https://github.com/user-attachments/assets/87f57f4e-26a4-4085-ba32-f0536ee95c03" /> <img width="421" height="775" alt="image" src="https://github.com/user-attachments/assets/8466ea7e-b96f-4536-86b7-c4174eb87427" />
## Summary Creates the long "Section Details" view with section and professor information. - Only handles dark mode not light - Does not actually populate metrics - Includes Web and mobile views ## How to Test [PR Preview ](https://www.gt-scheduler.org/pr-preview/pr-425/) `yarn start` Section Details View for CS 1332: <img width="1902" height="793" alt="image" src="https://github.com/user-attachments/assets/db88d518-b25f-446d-b21d-57430465b55f" /> Current Term: <img width="1187" height="727" alt="image" src="https://github.com/user-attachments/assets/764d61d0-bbc1-46a9-9ea5-f36d9fee99ad" /> <img width="1197" height="717" alt="image" src="https://github.com/user-attachments/assets/6350ecc4-1eb5-48dc-88cf-b4cadac98439" /> Select a section to add to your schedule <img width="1607" height="738" alt="image" src="https://github.com/user-attachments/assets/ed9fc409-29e7-4b60-bf23-794066d8d02f" /> You can press the icon again to unselect. You can also select from the side panel and it will automatically show as having been added. Other terms: <img width="1182" height="722" alt="image" src="https://github.com/user-attachments/assets/22c0515d-987a-44b7-b791-6dd2abd18c89" /> Mobile: <img width="455" height="777" alt="image" src="https://github.com/user-attachments/assets/29614888-feb9-4533-ad65-12d595f5e18d" /> Table and Term bar linear gradient <img width="333" height="677" alt="image" src="https://github.com/user-attachments/assets/9c61f0f3-6edc-4bd2-8ad9-3d3dd85a3ec8" /> <img width="310" height="220" alt="image" src="https://github.com/user-attachments/assets/b680c738-1e94-488e-85a0-b54322b28406" /> Non current terms <img width="372" height="665" alt="image" src="https://github.com/user-attachments/assets/c2a3365c-1d64-430b-a5e7-ca6d9758e8a8" /> Previous semesters <img width="1610" height="820" alt="image" src="https://github.com/user-attachments/assets/4e64222d-69d8-41c6-b4a1-d1c47e825a25" /> <img width="1202" height="411" alt="image" src="https://github.com/user-attachments/assets/d0f6b4f1-2539-47a5-a481-226596bdbda8" />
### Summary Resolves #426 Adds light mode designs for View Mode tab, Course Details, Section Details ### How to Test View Mode tab: <img width="328" height="44" alt="Screenshot 2026-01-29 at 2 52 03 PM" src="https://github.com/user-attachments/assets/274ef638-6ea3-4ef1-8096-c045f2a1355f" /> Course Details: <img width="1703" height="862" alt="Screenshot 2026-01-29 at 2 52 21 PM" src="https://github.com/user-attachments/assets/4c4544c5-4ba8-4433-98db-aa06494cd1e5" /> Section Details: <img width="1703" height="863" alt="Screenshot 2026-01-29 at 2 52 42 PM" src="https://github.com/user-attachments/assets/7b396715-8d2e-45d7-acf0-211d3c4dca27" /> <img width="1701" height="861" alt="Screenshot 2026-01-29 at 2 53 29 PM" src="https://github.com/user-attachments/assets/aca1bdec-5a07-4537-a3e2-031bfb2a2e1b" /> Gradient: <img width="593" height="44" alt="Screenshot 2026-01-29 at 2 53 01 PM" src="https://github.com/user-attachments/assets/4eb60372-3968-4c20-b6df-9326c624b689" /> <img width="588" height="311" alt="Screenshot 2026-01-29 at 2 53 12 PM" src="https://github.com/user-attachments/assets/247657eb-610c-47d6-aff8-4b2222e5d5bc" /> Mobile: <img width="362" height="796" alt="Screenshot 2026-01-29 at 2 53 54 PM" src="https://github.com/user-attachments/assets/4d379cb5-2783-47e6-936e-2b734d64b81d" /> <img width="354" height="785" alt="Screenshot 2026-01-29 at 2 54 09 PM" src="https://github.com/user-attachments/assets/12848313-ed80-4c45-8690-cb30a6cc3715" /> <img width="361" height="790" alt="Screenshot 2026-01-29 at 2 54 19 PM" src="https://github.com/user-attachments/assets/0869c445-25c9-43fb-be10-d075d029d40d" /> Previous Semesters: <img width="1706" height="860" alt="Screenshot 2026-01-29 at 2 55 19 PM" src="https://github.com/user-attachments/assets/6043bb78-fb55-4325-8a8a-d4f58b06a8a6" /> <img width="1081" height="866" alt="Screenshot 2026-01-29 at 2 55 45 PM" src="https://github.com/user-attachments/assets/48597f39-6576-49a9-9049-79f038350b79" /> Dark Mode unchanged: <img width="1073" height="862" alt="Screenshot 2026-01-29 at 2 56 07 PM" src="https://github.com/user-attachments/assets/47abf82c-d58e-4cbd-b77c-7161e6236502" /> <img width="1079" height="865" alt="Screenshot 2026-01-29 at 2 56 25 PM" src="https://github.com/user-attachments/assets/d11f9a4a-6e7e-4d40-9de4-dd44b874658e" /> also fixed small bug where semester tab bar was not scrollable
### Summary Resolves #430 ### Checklist - [x] Added a new ratings field in the Course bean. - [x] Created a new fetchRatingsInner function within the Course bean. - [x] Added fetchRatings function in the Course bean. - [x] Added fetchProfessorRatings function in the Course bean. - [x] Called these functions in the front-end (CourseInfo). - [x] Added 15 minute caching for the ratings. ### How to Test in firebase-conf (comment out auth) & deploy dev. then run: ``` curl -X POST http://localhost:5001/gt-scheduler-web-dev/us-east1/submitRatings \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'data={"IDToken":"abc","ratings":[{"courseId":"CS 6210","professorId":"anand-padmanabha-iyer","term":202602,"rating":4,"difficulty":4,"workload":4}]}' ``` ``` curl -X POST http://localhost:5001/gt-scheduler-web-dev/us-east1/submitRatings \ -H "Content-Type: application/x-www-form-urlencoded" \ -d 'data={"IDToken":"abc","ratings":[{"courseId":"CS 6210","professorId":"umakishore-ramachandran","term":202602,"rating":3,"difficulty":3,"workload":3}]}' ``` Verify ratings are displayed: <img width="620" height="159" alt="Screenshot 2026-02-01 at 3 27 41 PM" src="https://github.com/user-attachments/assets/a3ed5271-4478-4f39-86f6-4aa9f5bcbae9" /> <img width="619" height="673" alt="Screenshot 2026-02-01 at 3 27 52 PM" src="https://github.com/user-attachments/assets/f12b9bdc-9e63-45f6-8393-609ae41701c7" /> Professors with no ratings: <img width="619" height="419" alt="Screenshot 2026-02-01 at 3 28 05 PM" src="https://github.com/user-attachments/assets/20b2ab3a-e2fa-4afb-a1c5-ee0b405c1eee" /> Courses with no ratings: <img width="617" height="446" alt="Screenshot 2026-02-01 at 3 28 40 PM" src="https://github.com/user-attachments/assets/f0969936-0a3a-4ec7-83dc-403e0f7e28d5" /> Verified that deleting and re-adding a course uses cached results with 15 minute expiration: <img width="252" height="129" alt="Screenshot 2026-02-01 at 3 31 19 PM" src="https://github.com/user-attachments/assets/7b98501d-1f6b-43bb-8ee0-6d1fedabd8c7" /> <img width="249" height="116" alt="Screenshot 2026-02-01 at 3 31 34 PM" src="https://github.com/user-attachments/assets/4dfe2d0f-ed6c-48ec-94d3-9945914a5135" />
### Summary Adds Course Info Modal ### How to Test <img width="1708" height="869" alt="Screenshot 2026-02-06 at 4 07 13 PM" src="https://github.com/user-attachments/assets/3682688a-0faa-4a7e-959d-e1f2087a048b" /> Hover: <img width="309" height="92" alt="Screenshot 2026-02-06 at 4 07 25 PM" src="https://github.com/user-attachments/assets/49523791-0c02-49b9-baf9-9784d3e417ab" /> Light Mode: <img width="1707" height="870" alt="Screenshot 2026-02-06 at 4 10 41 PM" src="https://github.com/user-attachments/assets/e0ea1f7b-0b35-4aba-95d7-76a174f9e6c2" /> Mobile: <img width="368" height="800" alt="Screenshot 2026-02-06 at 4 06 49 PM" src="https://github.com/user-attachments/assets/db7244d4-bc71-43f2-9521-45d94b305619" /> --------- Co-authored-by: Uma Anand <63426041+uma-anand@users.noreply.github.com>
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.