Skip to content

Release 0.40.0 #2432

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Aug 13, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions RELEASE.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,16 @@
Release Notes
=============

Version 0.40.0
--------------

- Append UTM query params (#2430)
- Ability to group ContentFile vector search results (#2426)
- better bad data handling for the org dashboard (#2427)
- org dashboard design updates (#2425)
- Assign urls to edx contentfiles when possible (#2420)
- add mitxonline certificate api (#2410)

Version 0.39.3 (Released August 11, 2025)
--------------

Expand Down
2 changes: 1 addition & 1 deletion frontends/api/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"ol-test-utilities": "0.0.0"
},
"dependencies": {
"@mitodl/mitxonline-api-axios": "2025.7.28",
"@mitodl/mitxonline-api-axios": "2025.8.6",
"@tanstack/react-query": "^5.66.0",
"axios": "^1.6.3"
}
Expand Down
36 changes: 36 additions & 0 deletions frontends/api/src/generated/v0/api.ts

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 25 additions & 3 deletions frontends/api/src/mitxonline/clients.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import {
B2bApi,
CoursesApi,
CourseCertificatesApi,
EnrollmentsApi,
ProgramCollectionsApi,
ProgramsApi,
ProgramCertificatesApi,
UsersApi,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"
import axios from "axios"

const axiosInstance = axios.create({
Expand All @@ -22,21 +24,41 @@ const BASE_PATH =

const usersApi = new UsersApi(undefined, BASE_PATH, axiosInstance)
const b2bApi = new B2bApi(undefined, BASE_PATH, axiosInstance)
const enrollmentsApi = new EnrollmentsApi(undefined, BASE_PATH, axiosInstance)
const programsApi = new ProgramsApi(undefined, BASE_PATH, axiosInstance)
const programCollectionsApi = new ProgramCollectionsApi(
undefined,
BASE_PATH,
axiosInstance,
)

const programCertificatesApi = new ProgramCertificatesApi(
undefined,
BASE_PATH,
axiosInstance,
)

const coursesApi = new CoursesApi(undefined, BASE_PATH, axiosInstance)

const courseCertificatesApi = new CourseCertificatesApi(
undefined,
BASE_PATH,
axiosInstance,
)

const courseRunEnrollmentsApi = new EnrollmentsApi(
undefined,
BASE_PATH,
axiosInstance,
)

export {
usersApi,
b2bApi,
enrollmentsApi,
courseRunEnrollmentsApi,
programsApi,
programCollectionsApi,
coursesApi,
programCertificatesApi,
courseCertificatesApi,
axiosInstance,
}
3 changes: 3 additions & 0 deletions frontends/api/src/mitxonline/hooks/certificates/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { certificateQueries } from "./queries"

export { certificateQueries }
46 changes: 46 additions & 0 deletions frontends/api/src/mitxonline/hooks/certificates/queries.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
import { queryOptions } from "@tanstack/react-query"
import type {
CourseCertificatesApiCourseCertificatesRetrieveRequest,
ProgramCertificatesApiProgramCertificatesRetrieveRequest,
V2CourseRunCertificate,
V2ProgramCertificate,
} from "@mitodl/mitxonline-api-axios/v2"
import { courseCertificatesApi, programCertificatesApi } from "../../clients"

const certificateKeys = {
root: ["mitxonline", "certificates"],
courseCertificatesRetrieve: (
opts?: CourseCertificatesApiCourseCertificatesRetrieveRequest,
) => [...certificateKeys.root, "retrieve", opts],
programCertificatesRetrieve: (
opts?: ProgramCertificatesApiProgramCertificatesRetrieveRequest,
) => [...certificateKeys.root, "retrieve", opts],
}

const certificateQueries = {
courseCertificatesRetrieve: (
opts: CourseCertificatesApiCourseCertificatesRetrieveRequest,
) =>
queryOptions({
queryKey: certificateKeys.courseCertificatesRetrieve(opts),
queryFn: async (): Promise<V2CourseRunCertificate> => {
return courseCertificatesApi
.courseCertificatesRetrieve(opts)
.then((res) => res.data)
},
enabled: !!opts.cert_uuid,
}),
programCertificatesRetrieve: (
opts: ProgramCertificatesApiProgramCertificatesRetrieveRequest,
) =>
queryOptions({
queryKey: certificateKeys.programCertificatesRetrieve(opts),
queryFn: async (): Promise<V2ProgramCertificate> => {
return programCertificatesApi
.programCertificatesRetrieve(opts)
.then((res) => res.data)
},
}),
}

export { certificateQueries, certificateKeys }
2 changes: 1 addition & 1 deletion frontends/api/src/mitxonline/hooks/courses/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { queryOptions } from "@tanstack/react-query"
import type {
CoursesApiApiV2CoursesListRequest,
PaginatedV2CourseWithCourseRunsList,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"
import { coursesApi } from "../../clients"

const coursesKeys = {
Expand Down
15 changes: 8 additions & 7 deletions frontends/api/src/mitxonline/hooks/enrollment/index.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
import { enrollmentQueries, enrollmentKeys } from "./queries"
import { useMutation, useQueryClient } from "@tanstack/react-query"
import { b2bApi, enrollmentsApi } from "../../clients"
import { b2bApi, courseRunEnrollmentsApi } from "../../clients"
import {
B2bApiB2bEnrollCreateRequest,
EnrollmentsApiEnrollmentsPartialUpdateRequest,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"

const useCreateEnrollment = (opts: B2bApiB2bEnrollCreateRequest) => {
const queryClient = useQueryClient()
return useMutation({
mutationFn: () => b2bApi.b2bEnrollCreate(opts),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: enrollmentKeys.enrollmentsList(),
queryKey: enrollmentKeys.courseRunEnrollmentsList(),
})
},
})
Expand All @@ -23,10 +23,10 @@ const useUpdateEnrollment = (
) => {
const queryClient = useQueryClient()
return useMutation({
mutationFn: () => enrollmentsApi.enrollmentsPartialUpdate(opts),
mutationFn: () => courseRunEnrollmentsApi.enrollmentsPartialUpdate(opts),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: enrollmentKeys.enrollmentsList(),
queryKey: enrollmentKeys.courseRunEnrollmentsList(),
})
},
})
Expand All @@ -35,10 +35,11 @@ const useUpdateEnrollment = (
const useDestroyEnrollment = (enrollmentId: number) => {
const queryClient = useQueryClient()
return useMutation({
mutationFn: () => enrollmentsApi.enrollmentsDestroy({ id: enrollmentId }),
mutationFn: () =>
courseRunEnrollmentsApi.enrollmentsDestroy({ id: enrollmentId }),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: enrollmentKeys.enrollmentsList(),
queryKey: enrollmentKeys.courseRunEnrollmentsList(),
})
},
})
Expand Down
21 changes: 15 additions & 6 deletions frontends/api/src/mitxonline/hooks/enrollment/queries.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
import { queryOptions } from "@tanstack/react-query"
import type { CourseRunEnrollment } from "@mitodl/mitxonline-api-axios/v1"
import type { CourseRunEnrollment } from "@mitodl/mitxonline-api-axios/v2"

import { enrollmentsApi } from "../../clients"
import { courseRunEnrollmentsApi } from "../../clients"

const enrollmentKeys = {
root: ["mitxonline", "enrollments"],
enrollmentsList: () => [...enrollmentKeys.root, "programEnrollments", "list"],
courseRunEnrollmentsList: () => [
...enrollmentKeys.root,
"courseRunEnrollments",
"list",
],
programEnrollmentsList: () => [
...enrollmentKeys.root,
"programEnrollments",
"list",
],
}

const enrollmentQueries = {
enrollmentsList: () =>
courseRunEnrollmentsList: () =>
queryOptions({
queryKey: enrollmentKeys.enrollmentsList(),
queryKey: enrollmentKeys.courseRunEnrollmentsList(),
queryFn: async (): Promise<CourseRunEnrollment[]> => {
return enrollmentsApi.enrollmentsList().then((res) => res.data)
return courseRunEnrollmentsApi.enrollmentsList().then((res) => res.data)
},
}),
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { B2bApiB2bOrganizationsRetrieveRequest } from "@mitodl/mitxonline-api-axios/v0"
import { OrganizationPage } from "@mitodl/mitxonline-api-axios/v1"
import { OrganizationPage } from "@mitodl/mitxonline-api-axios/v2"
import { queryOptions } from "@tanstack/react-query"
import { b2bApi } from "../../clients"

Expand Down
2 changes: 1 addition & 1 deletion frontends/api/src/mitxonline/hooks/programs/queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import type {
ProgramsApiProgramsListV2Request,
ProgramsApiProgramsRetrieveV2Request,
V2Program,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"
import { programCollectionsApi, programsApi } from "../../clients"

const programsKeys = {
Expand Down
2 changes: 1 addition & 1 deletion frontends/api/src/mitxonline/hooks/user/index.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useQuery } from "@tanstack/react-query"
import { usersApi } from "../../clients"
import type { User } from "@mitodl/mitxonline-api-axios/v1"
import type { User } from "@mitodl/mitxonline-api-axios/v2"

const useMitxOnlineCurrentUser = (opts: { enabled?: boolean } = {}) =>
useQuery({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { mergeOverrides, makePaginatedFactory } from "ol-test-utilities"
import type { PartialFactory } from "ol-test-utilities"
import type { V2CourseWithCourseRuns } from "@mitodl/mitxonline-api-axios/v1"
import type { V2CourseWithCourseRuns } from "@mitodl/mitxonline-api-axios/v2"
import { faker } from "@faker-js/faker/locale/en"
import { UniqueEnforcer } from "enforce-unique"

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import type { PartialFactory } from "ol-test-utilities"
import type {
CourseRunEnrollment,
CourseRunGrade,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"
import { UniqueEnforcer } from "enforce-unique"

const uniqueEnrollmentId = new UniqueEnforcer()
Expand Down Expand Up @@ -34,7 +34,10 @@ const courseEnrollment: PartialFactory<CourseRunEnrollment> = (

const defaults: CourseRunEnrollment = {
id: uniqueEnrollmentId.enforce(() => faker.number.int()),
certificate: null,
certificate: {
uuid: faker.string.uuid(),
link: faker.internet.url(),
},
approved_flexible_price_exists: faker.datatype.boolean(),
grades: [],
enrollment_mode: faker.helpers.arrayElement(["audit", "verified"]),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { faker } from "@faker-js/faker/locale/en"
import { OrganizationPage } from "@mitodl/mitxonline-api-axios/v1"
import { OrganizationPage } from "@mitodl/mitxonline-api-axios/v2"
import { mergeOverrides } from "ol-test-utilities"

const organization = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import type { PartialFactory } from "ol-test-utilities"
import type {
V2Program,
V2ProgramCollection,
} from "@mitodl/mitxonline-api-axios/v1"
} from "@mitodl/mitxonline-api-axios/v2"
import { faker } from "@faker-js/faker/locale/en"
import { UniqueEnforcer } from "enforce-unique"

Expand Down
Loading
Loading