From 4bc053959075785390cae627eaae6b8f293a8691 Mon Sep 17 00:00:00 2001 From: Vihan Date: Mon, 5 Apr 2021 23:45:54 -0700 Subject: [PATCH] Bring back old scheduler Signed-off-by: Vihan --- .graphqlrc.yml | 4 + .../graphql/fragments/SchedulerCourse.graphql | 23 ++ frontend/src/graphql/graphql.ts | 389 ++++++++++++++++-- .../queries/GetSchedulerCourseForId.graphql | 5 + 4 files changed, 391 insertions(+), 30 deletions(-) create mode 100644 .graphqlrc.yml create mode 100644 frontend/src/graphql/fragments/SchedulerCourse.graphql create mode 100644 frontend/src/graphql/queries/GetSchedulerCourseForId.graphql diff --git a/.graphqlrc.yml b/.graphqlrc.yml new file mode 100644 index 000000000..1891e3923 --- /dev/null +++ b/.graphqlrc.yml @@ -0,0 +1,4 @@ +schema: + - ./frontend/schema.graphql + - ./frontend/client.graphql +documents: "frontend/src/**/*.{graphql,js,ts,jsx,tsx}" diff --git a/frontend/src/graphql/fragments/SchedulerCourse.graphql b/frontend/src/graphql/fragments/SchedulerCourse.graphql new file mode 100644 index 000000000..a3b2553b2 --- /dev/null +++ b/frontend/src/graphql/fragments/SchedulerCourse.graphql @@ -0,0 +1,23 @@ +fragment SchedulerCourse on CourseType { + title + units + waitlisted + openSeats + enrolled + enrolledMax + id + hasEnrollment + courseNumber + department + description + abbreviation + schedulerSections { + edges { + node { + primary { + + } + } + } + } +} \ No newline at end of file diff --git a/frontend/src/graphql/graphql.ts b/frontend/src/graphql/graphql.ts index f150f809e..4e96fdc9c 100644 --- a/frontend/src/graphql/graphql.ts +++ b/frontend/src/graphql/graphql.ts @@ -34,6 +34,12 @@ export interface Scalars { * schema (one of the key benefits of GraphQL). */ JSONString: any; + /** + * The `Time` scalar type represents a Time value as + * specified by + * [iso8601](https://en.wikipedia.org/wiki/ISO_8601). + */ + Time: any; } export interface BerkeleytimeUserType { @@ -46,6 +52,15 @@ export interface BerkeleytimeUserType { emailGradeUpdate: Scalars['Boolean']; emailEnrollmentOpening: Scalars['Boolean']; emailBerkeleytimeUpdate: Scalars['Boolean']; + schedules: ScheduleTypeConnection; +} + + +export interface BerkeleytimeUserTypeSchedulesArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; } export interface CourseType extends Node { @@ -73,6 +88,7 @@ export interface CourseType extends Node { gradeSet: GradeTypeConnection; playlistSet: PlaylistTypeConnection; berkeleytimeuserSet: Array; + schedulerSections: SectionSelectionTypeConnection; } @@ -98,6 +114,9 @@ export interface CourseTypeCrossListingArgs { waitlisted?: Maybe; openSeats?: Maybe; lastUpdated?: Maybe; + hasGrades?: Maybe; + inPlaylists?: Maybe; + idIn?: Maybe; } @@ -116,6 +135,7 @@ export interface CourseTypeSectionSetArgs { ccn?: Maybe; kind?: Maybe; isPrimary?: Maybe; + associatedSections?: Maybe>>; days?: Maybe; startTime?: Maybe; endTime?: Maybe; @@ -139,6 +159,15 @@ export interface CourseTypeGradeSetArgs { after?: Maybe; first?: Maybe; last?: Maybe; + course?: Maybe; + semester?: Maybe; + year?: Maybe; + abbreviation?: Maybe; + courseNumber?: Maybe; + sectionNumber?: Maybe; + instructor?: Maybe; + gradedTotal?: Maybe; + average?: Maybe; } @@ -154,6 +183,14 @@ export interface CourseTypePlaylistSetArgs { courses?: Maybe>>; } + +export interface CourseTypeSchedulerSectionsArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; +} + export interface CourseTypeConnection { __typename?: 'CourseTypeConnection'; /** Pagination data for this connection. */ @@ -171,6 +208,11 @@ export interface CourseTypeEdge { cursor: Scalars['String']; } +export interface CreateSchedule { + __typename?: 'CreateSchedule'; + schedule?: Maybe; +} + export interface DeleteUser { @@ -227,23 +269,12 @@ export interface GradeType extends Node { sectionNumber: Scalars['String']; instructor: Scalars['String']; instructors: Array; - a1: Scalars['Int']; - a2: Scalars['Int']; - a3: Scalars['Int']; - b1: Scalars['Int']; - b2: Scalars['Int']; - b3: Scalars['Int']; - c1: Scalars['Int']; - c2: Scalars['Int']; - c3: Scalars['Int']; - d1: Scalars['Int']; - d2: Scalars['Int']; - d3: Scalars['Int']; - f: Scalars['Int']; gradedTotal: Scalars['Int']; - p?: Maybe; - np?: Maybe; average: Scalars['Float']; + distribution?: Maybe>>; + sectionGpa?: Maybe; + sectionLetter?: Maybe; + denominator?: Maybe; } export interface GradeTypeConnection { @@ -264,6 +295,15 @@ export interface GradeTypeEdge { } +export interface LetterGradeType { + __typename?: 'LetterGradeType'; + letter?: Maybe; + numerator?: Maybe; + percent?: Maybe; + percentileHigh?: Maybe; + percentileLow?: Maybe; +} + export interface Logout { __typename?: 'Logout'; success?: Maybe; @@ -271,6 +311,8 @@ export interface Logout { export interface Mutation { __typename?: 'Mutation'; + createSchedule?: Maybe; + updateSchedule?: Maybe; updateUser?: Maybe; saveClass?: Maybe; removeClass?: Maybe; @@ -283,6 +325,23 @@ export interface Mutation { } +export interface MutationCreateScheduleArgs { + name?: Maybe; + selectedSections?: Maybe>>; + semester?: Maybe; + timeblocks?: Maybe>>; + year?: Maybe; +} + + +export interface MutationUpdateScheduleArgs { + name?: Maybe; + scheduleId?: Maybe; + selectedSections?: Maybe>>; + timeblocks?: Maybe>>; +} + + export interface MutationUpdateUserArgs { emailBerkeleytimeUpdate?: Maybe; emailClassUpdate?: Maybe; @@ -378,6 +437,9 @@ export interface PlaylistTypeCoursesArgs { waitlisted?: Maybe; openSeats?: Maybe; lastUpdated?: Maybe; + hasGrades?: Maybe; + inPlaylists?: Maybe; + idIn?: Maybe; } export interface PlaylistTypeConnection { @@ -399,6 +461,7 @@ export interface PlaylistTypeEdge { export interface Query { __typename?: 'Query'; + schedules?: Maybe>>; user?: Maybe; allPlaylists?: Maybe; /** The ID of the object */ @@ -448,22 +511,7 @@ export interface QueryAllGradesArgs { courseNumber?: Maybe; sectionNumber?: Maybe; instructor?: Maybe; - a1?: Maybe; - a2?: Maybe; - a3?: Maybe; - b1?: Maybe; - b2?: Maybe; - b3?: Maybe; - c1?: Maybe; - c2?: Maybe; - c3?: Maybe; - d1?: Maybe; - d2?: Maybe; - d3?: Maybe; - f?: Maybe; gradedTotal?: Maybe; - p?: Maybe; - np?: Maybe; average?: Maybe; } @@ -538,6 +586,7 @@ export interface QueryAllSectionsArgs { ccn?: Maybe; kind?: Maybe; isPrimary?: Maybe; + associatedSections?: Maybe>>; days?: Maybe; startTime?: Maybe; endTime?: Maybe; @@ -571,6 +620,121 @@ export interface SaveClass { user?: Maybe; } +export interface ScheduleType extends Node { + __typename?: 'ScheduleType'; + /** The ID of the object. */ + id: Scalars['ID']; + user: BerkeleytimeUserType; + name: Scalars['String']; + year: Scalars['String']; + semester: Scalars['String']; + dateCreated: Scalars['DateTime']; + dateModified: Scalars['DateTime']; + totalUnits: Scalars['Int']; + selectedSections: SectionSelectionTypeConnection; + timeblocks: TimeBlockTypeConnection; +} + + +export interface ScheduleTypeSelectedSectionsArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; +} + + +export interface ScheduleTypeTimeblocksArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; +} + +export interface ScheduleTypeConnection { + __typename?: 'ScheduleTypeConnection'; + /** Pagination data for this connection. */ + pageInfo: PageInfo; + /** Contains the nodes in this connection. */ + edges: Array>; +} + +/** A Relay edge containing a `ScheduleType` and its cursor. */ +export interface ScheduleTypeEdge { + __typename?: 'ScheduleTypeEdge'; + /** The item at the end of the edge */ + node?: Maybe; + /** A cursor for use in pagination */ + cursor: Scalars['String']; +} + +export interface SectionSelectionInput { + course: Scalars['ID']; + primary?: Maybe; + secondary?: Maybe>>; +} + +export interface SectionSelectionType extends Node { + __typename?: 'SectionSelectionType'; + /** The ID of the object. */ + id: Scalars['ID']; + schedule: ScheduleType; + course: CourseType; + primary?: Maybe; + secondary: SectionTypeConnection; +} + + +export interface SectionSelectionTypeSecondaryArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; + course?: Maybe; + abbreviation?: Maybe; + courseNumber?: Maybe; + year?: Maybe; + semester?: Maybe; + courseTitle?: Maybe; + sectionNumber?: Maybe; + ccn?: Maybe; + kind?: Maybe; + isPrimary?: Maybe; + associatedSections?: Maybe>>; + days?: Maybe; + startTime?: Maybe; + endTime?: Maybe; + finalDay?: Maybe; + finalEnd?: Maybe; + finalStart?: Maybe; + instructor?: Maybe; + disabled?: Maybe; + locationName?: Maybe; + instructionMode?: Maybe; + lastUpdated?: Maybe; + enrolled?: Maybe; + enrolledMax?: Maybe; + waitlisted?: Maybe; + waitlistedMax?: Maybe; +} + +export interface SectionSelectionTypeConnection { + __typename?: 'SectionSelectionTypeConnection'; + /** Pagination data for this connection. */ + pageInfo: PageInfo; + /** Contains the nodes in this connection. */ + edges: Array>; +} + +/** A Relay edge containing a `SectionSelectionType` and its cursor. */ +export interface SectionSelectionTypeEdge { + __typename?: 'SectionSelectionTypeEdge'; + /** The item at the end of the edge */ + node?: Maybe; + /** A cursor for use in pagination */ + cursor: Scalars['String']; +} + export interface SectionType extends Node { __typename?: 'SectionType'; /** The ID of the object. */ @@ -585,6 +749,7 @@ export interface SectionType extends Node { ccn: Scalars['String']; kind: Scalars['String']; isPrimary: Scalars['Boolean']; + associatedSections: SectionTypeConnection; days: Scalars['String']; startTime?: Maybe; endTime?: Maybe; @@ -600,9 +765,61 @@ export interface SectionType extends Node { enrolledMax?: Maybe; waitlisted?: Maybe; waitlistedMax?: Maybe; + schedulerPrimarySections: SectionSelectionTypeConnection; + schedulerSecondarySections: SectionSelectionTypeConnection; wordDays?: Maybe; } + +export interface SectionTypeAssociatedSectionsArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; + course?: Maybe; + abbreviation?: Maybe; + courseNumber?: Maybe; + year?: Maybe; + semester?: Maybe; + courseTitle?: Maybe; + sectionNumber?: Maybe; + ccn?: Maybe; + kind?: Maybe; + isPrimary?: Maybe; + associatedSections?: Maybe>>; + days?: Maybe; + startTime?: Maybe; + endTime?: Maybe; + finalDay?: Maybe; + finalEnd?: Maybe; + finalStart?: Maybe; + instructor?: Maybe; + disabled?: Maybe; + locationName?: Maybe; + instructionMode?: Maybe; + lastUpdated?: Maybe; + enrolled?: Maybe; + enrolledMax?: Maybe; + waitlisted?: Maybe; + waitlistedMax?: Maybe; +} + + +export interface SectionTypeSchedulerPrimarySectionsArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; +} + + +export interface SectionTypeSchedulerSecondarySectionsArgs { + before?: Maybe; + after?: Maybe; + first?: Maybe; + last?: Maybe; +} + export interface SectionTypeConnection { __typename?: 'SectionTypeConnection'; /** Pagination data for this connection. */ @@ -630,6 +847,47 @@ export interface TelebearData { adjStart?: Maybe; } + +export interface TimeBlockInput { + name: Scalars['String']; + startTime: Scalars['Time']; + endTime: Scalars['Time']; + days: Scalars['String']; +} + +export interface TimeBlockType extends Node { + __typename?: 'TimeBlockType'; + /** The ID of the object. */ + id: Scalars['ID']; + name: Scalars['String']; + startTime: Scalars['Time']; + endTime: Scalars['Time']; + days: Scalars['String']; + schedule: ScheduleType; +} + +export interface TimeBlockTypeConnection { + __typename?: 'TimeBlockTypeConnection'; + /** Pagination data for this connection. */ + pageInfo: PageInfo; + /** Contains the nodes in this connection. */ + edges: Array>; +} + +/** A Relay edge containing a `TimeBlockType` and its cursor. */ +export interface TimeBlockTypeEdge { + __typename?: 'TimeBlockTypeEdge'; + /** The item at the end of the edge */ + node?: Maybe; + /** A cursor for use in pagination */ + cursor: Scalars['String']; +} + +export interface UpdateSchedule { + __typename?: 'UpdateSchedule'; + schedule?: Maybe; +} + export interface UpdateUser { __typename?: 'UpdateUser'; user?: Maybe; @@ -694,6 +952,11 @@ export type FilterFragment = ( & Pick ); +export type SchedulerCourseFragment = ( + { __typename?: 'CourseType' } + & Pick +); + export type SectionFragment = ( { __typename?: 'SectionType' } & Pick @@ -883,6 +1146,21 @@ export type GetFiltersQuery = ( )> } ); +export type GetSchedulerCourseForIdQueryVariables = Exact<{ + id: Scalars['ID']; + year?: Maybe; + semester?: Maybe; +}>; + + +export type GetSchedulerCourseForIdQuery = ( + { __typename?: 'Query' } + & { course?: Maybe<( + { __typename?: 'CourseType' } + & SchedulerCourseFragment + )> } +); + export type GetSemestersQueryVariables = Exact<{ [key: string]: never; }>; @@ -981,6 +1259,22 @@ export const FilterFragmentDoc = gql` category } `; +export const SchedulerCourseFragmentDoc = gql` + fragment SchedulerCourse on CourseType { + title + units + waitlisted + openSeats + enrolled + enrolledMax + id + hasEnrollment + courseNumber + department + description + abbreviation +} + `; export const CourseOverviewFragmentDoc = gql` fragment CourseOverview on CourseType { id @@ -1386,6 +1680,41 @@ export function useGetFiltersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions export type GetFiltersQueryHookResult = ReturnType; export type GetFiltersLazyQueryHookResult = ReturnType; export type GetFiltersQueryResult = Apollo.QueryResult; +export const GetSchedulerCourseForIdDocument = gql` + query GetSchedulerCourseForId($id: ID!, $year: String, $semester: String) { + course(id: $id) { + ...SchedulerCourse + } +} + ${SchedulerCourseFragmentDoc}`; + +/** + * __useGetSchedulerCourseForIdQuery__ + * + * To run a query within a React component, call `useGetSchedulerCourseForIdQuery` and pass it any options that fit your needs. + * When your component renders, `useGetSchedulerCourseForIdQuery` returns an object from Apollo Client that contains loading, error, and data properties + * you can use to render your UI. + * + * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; + * + * @example + * const { data, loading, error } = useGetSchedulerCourseForIdQuery({ + * variables: { + * id: // value for 'id' + * year: // value for 'year' + * semester: // value for 'semester' + * }, + * }); + */ +export function useGetSchedulerCourseForIdQuery(baseOptions: Apollo.QueryHookOptions) { + return Apollo.useQuery(GetSchedulerCourseForIdDocument, baseOptions); + } +export function useGetSchedulerCourseForIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { + return Apollo.useLazyQuery(GetSchedulerCourseForIdDocument, baseOptions); + } +export type GetSchedulerCourseForIdQueryHookResult = ReturnType; +export type GetSchedulerCourseForIdLazyQueryHookResult = ReturnType; +export type GetSchedulerCourseForIdQueryResult = Apollo.QueryResult; export const GetSemestersDocument = gql` query GetSemesters { allPlaylists(category: "semester") { diff --git a/frontend/src/graphql/queries/GetSchedulerCourseForId.graphql b/frontend/src/graphql/queries/GetSchedulerCourseForId.graphql new file mode 100644 index 000000000..010a070c8 --- /dev/null +++ b/frontend/src/graphql/queries/GetSchedulerCourseForId.graphql @@ -0,0 +1,5 @@ +query GetSchedulerCourseForId($id: ID!) { + course(id: $id) { + ...SchedulerCourse + } +}