diff --git a/RELEASE.rst b/RELEASE.rst index b6480089f1..6494d62df4 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,6 +1,17 @@ Release Notes ============= +Version 0.47.11 +--------------- + +- set h5 on the welcome message (#2682) +- Avoid errors caused by None tags (#2680) +- org contract welcome message display (#2677) +- Add periodic topic collection sync task (#2673) +- Resource card headings for screen reader navigation (#2658) +- fix CTA text logic (#2675) +- Fix OpenAPI Client Generation for multivalue query params (#2669) + Version 0.47.9 (Released November 05, 2025) -------------- diff --git a/frontends/api/package.json b/frontends/api/package.json index e74ccebcf9..504c139b55 100644 --- a/frontends/api/package.json +++ b/frontends/api/package.json @@ -28,7 +28,7 @@ "ol-test-utilities": "0.0.0" }, "dependencies": { - "@mitodl/mitxonline-api-axios": "^2025.10.21", + "@mitodl/mitxonline-api-axios": "^2025.11.5", "@tanstack/react-query": "^5.66.0", "axios": "^1.12.2", "tiny-invariant": "^1.3.3" diff --git a/frontends/api/src/generated/v1/api.ts b/frontends/api/src/generated/v1/api.ts index e5e3e4e069..ce9ce600b1 100644 --- a/frontends/api/src/generated/v1/api.ts +++ b/frontends/api/src/generated/v1/api.ts @@ -9849,14 +9849,14 @@ export const ContentfilesApiAxiosParamCreator = function ( * Viewset for ContentFiles * @summary List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -9898,14 +9898,11 @@ export const ContentfilesApiAxiosParamCreator = function ( const localVarQueryParameter = {} as any if (content_feature_type) { - localVarQueryParameter["content_feature_type"] = - content_feature_type.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["content_feature_type"] = content_feature_type } if (edx_module_id) { - localVarQueryParameter["edx_module_id"] = edx_module_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["edx_module_id"] = edx_module_id } if (limit !== undefined) { @@ -9925,13 +9922,11 @@ export const ContentfilesApiAxiosParamCreator = function ( } if (resource_id) { - localVarQueryParameter["resource_id"] = resource_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["resource_id"] = resource_id } if (run_id) { - localVarQueryParameter["run_id"] = run_id.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["run_id"] = run_id } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -10019,14 +10014,14 @@ export const ContentfilesApiFp = function (configuration?: Configuration) { * Viewset for ContentFiles * @summary List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -10179,14 +10174,14 @@ export interface ContentfilesApiContentfilesListRequest { readonly learning_resource_id: number /** - * Multiple values may be separated by commas. + * Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof ContentfilesApiContentfilesList */ readonly content_feature_type?: Array /** - * Multiple values may be separated by commas. + * The edx module id of the content file * @type {Array} * @memberof ContentfilesApiContentfilesList */ @@ -10221,14 +10216,14 @@ export interface ContentfilesApiContentfilesListRequest { readonly platform?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource the content file belongs to * @type {Array} * @memberof ContentfilesApiContentfilesList */ readonly resource_id?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource run the content file belongs to * @type {Array} * @memberof ContentfilesApiContentfilesList */ @@ -10680,14 +10675,14 @@ export const CoursesApiAxiosParamCreator = function ( * Show content files for a learning resource * @summary Learning Resource Content File List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -10730,14 +10725,11 @@ export const CoursesApiAxiosParamCreator = function ( const localVarQueryParameter = {} as any if (content_feature_type) { - localVarQueryParameter["content_feature_type"] = - content_feature_type.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["content_feature_type"] = content_feature_type } if (edx_module_id) { - localVarQueryParameter["edx_module_id"] = edx_module_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["edx_module_id"] = edx_module_id } if (limit !== undefined) { @@ -10757,13 +10749,11 @@ export const CoursesApiAxiosParamCreator = function ( } if (resource_id) { - localVarQueryParameter["resource_id"] = resource_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["resource_id"] = resource_id } if (run_id) { - localVarQueryParameter["run_id"] = run_id.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["run_id"] = run_id } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -10842,7 +10832,7 @@ export const CoursesApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -10852,11 +10842,11 @@ export const CoursesApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {CoursesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -10905,9 +10895,7 @@ export const CoursesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -10947,9 +10935,7 @@ export const CoursesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -10965,7 +10951,7 @@ export const CoursesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -11042,14 +11028,14 @@ export const CoursesApiFp = function (configuration?: Configuration) { * Show content files for a learning resource * @summary Learning Resource Content File List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -11132,7 +11118,7 @@ export const CoursesApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -11142,11 +11128,11 @@ export const CoursesApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {CoursesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -11359,14 +11345,14 @@ export interface CoursesApiCoursesContentfilesListRequest { readonly learning_resource_id: number /** - * Multiple values may be separated by commas. + * Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof CoursesApiCoursesContentfilesList */ readonly content_feature_type?: Array /** - * Multiple values may be separated by commas. + * The edx module id of the content file * @type {Array} * @memberof CoursesApiCoursesContentfilesList */ @@ -11401,14 +11387,14 @@ export interface CoursesApiCoursesContentfilesListRequest { readonly platform?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource the content file belongs to * @type {Array} * @memberof CoursesApiCoursesContentfilesList */ readonly resource_id?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource run the content file belongs to * @type {Array} * @memberof CoursesApiCoursesContentfilesList */ @@ -11457,7 +11443,7 @@ export interface CoursesApiCoursesListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof CoursesApiCoursesList */ @@ -11527,7 +11513,7 @@ export interface CoursesApiCoursesListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof CoursesApiCoursesList */ @@ -11555,7 +11541,7 @@ export interface CoursesApiCoursesListRequest { readonly sortby?: CoursesListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof CoursesApiCoursesList */ @@ -12222,7 +12208,7 @@ export const FeaturedApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -12232,11 +12218,11 @@ export const FeaturedApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {FeaturedListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -12285,9 +12271,7 @@ export const FeaturedApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -12327,9 +12311,7 @@ export const FeaturedApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -12345,7 +12327,7 @@ export const FeaturedApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -12423,7 +12405,7 @@ export const FeaturedApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -12433,11 +12415,11 @@ export const FeaturedApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {FeaturedListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -12613,7 +12595,7 @@ export interface FeaturedApiFeaturedListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof FeaturedApiFeaturedList */ @@ -12683,7 +12665,7 @@ export interface FeaturedApiFeaturedListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof FeaturedApiFeaturedList */ @@ -12711,7 +12693,7 @@ export interface FeaturedApiFeaturedListRequest { readonly sortby?: FeaturedListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof FeaturedApiFeaturedList */ @@ -12974,7 +12956,7 @@ export const LearningResourceDisplayInfoApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -12984,11 +12966,11 @@ export const LearningResourceDisplayInfoApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourceDisplayInfoListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -13037,9 +13019,7 @@ export const LearningResourceDisplayInfoApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -13079,9 +13059,7 @@ export const LearningResourceDisplayInfoApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -13097,7 +13075,7 @@ export const LearningResourceDisplayInfoApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -13179,7 +13157,7 @@ export const LearningResourceDisplayInfoApiFp = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -13189,11 +13167,11 @@ export const LearningResourceDisplayInfoApiFp = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourceDisplayInfoListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -13377,7 +13355,7 @@ export interface LearningResourceDisplayInfoApiLearningResourceDisplayInfoListRe readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourceDisplayInfoApiLearningResourceDisplayInfoList */ @@ -13447,7 +13425,7 @@ export interface LearningResourceDisplayInfoApiLearningResourceDisplayInfoListRe readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningResourceDisplayInfoApiLearningResourceDisplayInfoList */ @@ -13475,7 +13453,7 @@ export interface LearningResourceDisplayInfoApiLearningResourceDisplayInfoListRe readonly sortby?: LearningResourceDisplayInfoListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningResourceDisplayInfoApiLearningResourceDisplayInfoList */ @@ -13737,14 +13715,14 @@ export const LearningResourcesApiAxiosParamCreator = function ( * Show content files for a learning resource * @summary Learning Resource Content File List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -13787,14 +13765,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( const localVarQueryParameter = {} as any if (content_feature_type) { - localVarQueryParameter["content_feature_type"] = - content_feature_type.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["content_feature_type"] = content_feature_type } if (edx_module_id) { - localVarQueryParameter["edx_module_id"] = edx_module_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["edx_module_id"] = edx_module_id } if (limit !== undefined) { @@ -13814,13 +13789,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (resource_id) { - localVarQueryParameter["resource_id"] = resource_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["resource_id"] = resource_id } if (run_id) { - localVarQueryParameter["run_id"] = run_id.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["run_id"] = run_id } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -14087,7 +14060,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -14097,11 +14070,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -14150,9 +14123,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -14192,9 +14163,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -14210,7 +14179,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -14279,7 +14248,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {number} id * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -14288,11 +14257,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesSimilarListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -14346,9 +14315,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -14384,9 +14351,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -14402,7 +14367,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -14424,7 +14389,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @summary Get learning resources summary * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -14434,11 +14399,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesSummaryListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -14487,9 +14452,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -14529,9 +14492,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -14547,7 +14508,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -14631,7 +14592,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {number} id * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -14640,11 +14601,11 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesVectorSimilarListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -14699,9 +14660,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -14737,9 +14696,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -14755,7 +14712,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -14787,14 +14744,14 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * Show content files for a learning resource * @summary Learning Resource Content File List * @param {number} learning_resource_id id of the parent learning resource - * @param {Array} [content_feature_type] Multiple values may be separated by commas. - * @param {Array} [edx_module_id] Multiple values may be separated by commas. + * @param {Array} [content_feature_type] Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features + * @param {Array} [edx_module_id] The edx module id of the content file * @param {number} [limit] Number of results to return per page. * @param {Array} [offered_by] The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate - * @param {Array} [resource_id] Multiple values may be separated by commas. - * @param {Array} [run_id] Multiple values may be separated by commas. + * @param {Array} [resource_id] The id of the learning resource the content file belongs to + * @param {Array} [run_id] The id of the learning resource run the content file belongs to * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -15000,7 +14957,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -15010,11 +14967,11 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -15114,7 +15071,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {number} id * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -15123,11 +15080,11 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesSimilarListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -15195,7 +15152,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @summary Get learning resources summary * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -15205,11 +15162,11 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesSummaryListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -15318,7 +15275,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {number} id * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -15327,11 +15284,11 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `climate` - MIT Climate * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningResourcesVectorSimilarListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -15701,14 +15658,14 @@ export interface LearningResourcesApiLearningResourcesContentfilesListRequest { readonly learning_resource_id: number /** - * Multiple values may be separated by commas. + * Content feature type for the content file. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ readonly content_feature_type?: Array /** - * Multiple values may be separated by commas. + * The edx module id of the content file * @type {Array} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ @@ -15743,14 +15700,14 @@ export interface LearningResourcesApiLearningResourcesContentfilesListRequest { readonly platform?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource the content file belongs to * @type {Array} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ readonly resource_id?: Array /** - * Multiple values may be separated by commas. + * The id of the learning resource run the content file belongs to * @type {Array} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ @@ -15883,7 +15840,7 @@ export interface LearningResourcesApiLearningResourcesListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourcesApiLearningResourcesList */ @@ -15953,7 +15910,7 @@ export interface LearningResourcesApiLearningResourcesListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningResourcesApiLearningResourcesList */ @@ -15981,7 +15938,7 @@ export interface LearningResourcesApiLearningResourcesListRequest { readonly sortby?: LearningResourcesListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningResourcesApiLearningResourcesList */ @@ -16030,7 +15987,7 @@ export interface LearningResourcesApiLearningResourcesSimilarListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourcesApiLearningResourcesSimilarList */ @@ -16093,7 +16050,7 @@ export interface LearningResourcesApiLearningResourcesSimilarListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningResourcesApiLearningResourcesSimilarList */ @@ -16121,7 +16078,7 @@ export interface LearningResourcesApiLearningResourcesSimilarListRequest { readonly sortby?: LearningResourcesSimilarListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningResourcesApiLearningResourcesSimilarList */ @@ -16149,7 +16106,7 @@ export interface LearningResourcesApiLearningResourcesSummaryListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourcesApiLearningResourcesSummaryList */ @@ -16219,7 +16176,7 @@ export interface LearningResourcesApiLearningResourcesSummaryListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningResourcesApiLearningResourcesSummaryList */ @@ -16247,7 +16204,7 @@ export interface LearningResourcesApiLearningResourcesSummaryListRequest { readonly sortby?: LearningResourcesSummaryListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningResourcesApiLearningResourcesSummaryList */ @@ -16310,7 +16267,7 @@ export interface LearningResourcesApiLearningResourcesVectorSimilarListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningResourcesApiLearningResourcesVectorSimilarList */ @@ -16375,7 +16332,7 @@ export interface LearningResourcesApiLearningResourcesVectorSimilarListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningResourcesApiLearningResourcesVectorSimilarList */ @@ -16403,7 +16360,7 @@ export interface LearningResourcesApiLearningResourcesVectorSimilarListRequest { readonly sortby?: LearningResourcesVectorSimilarListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningResourcesApiLearningResourcesVectorSimilarList */ @@ -21353,7 +21310,7 @@ export const LearningpathsApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -21363,11 +21320,11 @@ export const LearningpathsApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningpathsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -21416,9 +21373,7 @@ export const LearningpathsApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -21458,9 +21413,7 @@ export const LearningpathsApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -21476,7 +21429,7 @@ export const LearningpathsApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -21896,7 +21849,7 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -21906,11 +21859,11 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {LearningpathsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -22470,7 +22423,7 @@ export interface LearningpathsApiLearningpathsListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof LearningpathsApiLearningpathsList */ @@ -22540,7 +22493,7 @@ export interface LearningpathsApiLearningpathsListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof LearningpathsApiLearningpathsList */ @@ -22568,7 +22521,7 @@ export interface LearningpathsApiLearningpathsListRequest { readonly sortby?: LearningpathsListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof LearningpathsApiLearningpathsList */ @@ -23642,7 +23595,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -23652,11 +23605,11 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {PodcastEpisodesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -23705,9 +23658,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -23747,9 +23698,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -23765,7 +23714,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -23844,7 +23793,7 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -23854,11 +23803,11 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {PodcastEpisodesListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -24038,7 +23987,7 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof PodcastEpisodesApiPodcastEpisodesList */ @@ -24108,7 +24057,7 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof PodcastEpisodesApiPodcastEpisodesList */ @@ -24136,7 +24085,7 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { readonly sortby?: PodcastEpisodesListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof PodcastEpisodesApiPodcastEpisodesList */ @@ -24524,7 +24473,7 @@ export const PodcastsApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -24534,11 +24483,11 @@ export const PodcastsApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {PodcastsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -24587,9 +24536,7 @@ export const PodcastsApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -24629,9 +24576,7 @@ export const PodcastsApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -24647,7 +24592,7 @@ export const PodcastsApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -24801,7 +24746,7 @@ export const PodcastsApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -24811,11 +24756,11 @@ export const PodcastsApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {PodcastsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -25087,7 +25032,7 @@ export interface PodcastsApiPodcastsListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof PodcastsApiPodcastsList */ @@ -25157,7 +25102,7 @@ export interface PodcastsApiPodcastsListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof PodcastsApiPodcastsList */ @@ -25185,7 +25130,7 @@ export interface PodcastsApiPodcastsListRequest { readonly sortby?: PodcastsListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof PodcastsApiPodcastsList */ @@ -25651,7 +25596,7 @@ export const ProgramsApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -25661,11 +25606,11 @@ export const ProgramsApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {ProgramsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -25714,9 +25659,7 @@ export const ProgramsApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -25756,9 +25699,7 @@ export const ProgramsApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -25774,7 +25715,7 @@ export const ProgramsApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -25852,7 +25793,7 @@ export const ProgramsApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -25862,11 +25803,11 @@ export const ProgramsApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {ProgramsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -26042,7 +25983,7 @@ export interface ProgramsApiProgramsListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof ProgramsApiProgramsList */ @@ -26112,7 +26053,7 @@ export interface ProgramsApiProgramsListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof ProgramsApiProgramsList */ @@ -26140,7 +26081,7 @@ export interface ProgramsApiProgramsListRequest { readonly sortby?: ProgramsListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof ProgramsApiProgramsList */ @@ -26707,9 +26648,9 @@ export const TopicsApiAxiosParamCreator = function ( * @summary List * @param {boolean} [is_toplevel] Filter top-level topics * @param {number} [limit] Number of results to return per page. - * @param {Array} [name] Multiple values may be separated by commas. + * @param {Array} [name] Topic name * @param {number} [offset] The initial index from which to return the results. - * @param {Array} [parent_topic_id] Multiple values may be separated by commas. + * @param {Array} [parent_topic_id] Parent topic ID * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -26746,7 +26687,7 @@ export const TopicsApiAxiosParamCreator = function ( } if (name) { - localVarQueryParameter["name"] = name.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["name"] = name } if (offset !== undefined) { @@ -26754,9 +26695,7 @@ export const TopicsApiAxiosParamCreator = function ( } if (parent_topic_id) { - localVarQueryParameter["parent_topic_id"] = parent_topic_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["parent_topic_id"] = parent_topic_id } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -26834,9 +26773,9 @@ export const TopicsApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [is_toplevel] Filter top-level topics * @param {number} [limit] Number of results to return per page. - * @param {Array} [name] Multiple values may be separated by commas. + * @param {Array} [name] Topic name * @param {number} [offset] The initial index from which to return the results. - * @param {Array} [parent_topic_id] Multiple values may be separated by commas. + * @param {Array} [parent_topic_id] Parent topic ID * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -26978,7 +26917,7 @@ export interface TopicsApiTopicsListRequest { readonly limit?: number /** - * Multiple values may be separated by commas. + * Topic name * @type {Array} * @memberof TopicsApiTopicsList */ @@ -26992,7 +26931,7 @@ export interface TopicsApiTopicsListRequest { readonly offset?: number /** - * Multiple values may be separated by commas. + * Parent topic ID * @type {Array} * @memberof TopicsApiTopicsList */ @@ -28767,7 +28706,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -28777,11 +28716,11 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {VideoPlaylistsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -28830,9 +28769,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -28872,9 +28809,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -28890,7 +28825,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -29048,7 +28983,7 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -29058,11 +28993,11 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {VideoPlaylistsListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -29336,7 +29271,7 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof VideoPlaylistsApiVideoPlaylistsList */ @@ -29406,7 +29341,7 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof VideoPlaylistsApiVideoPlaylistsList */ @@ -29434,7 +29369,7 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { readonly sortby?: VideoPlaylistsListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof VideoPlaylistsApiVideoPlaylistsList */ @@ -29741,7 +29676,7 @@ export const VideosApiAxiosParamCreator = function ( * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -29751,11 +29686,11 @@ export const VideosApiAxiosParamCreator = function ( * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {VideosListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -29804,9 +29739,7 @@ export const VideosApiAxiosParamCreator = function ( } if (course_feature) { - localVarQueryParameter["course_feature"] = course_feature.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["course_feature"] = course_feature } if (delivery) { @@ -29846,9 +29779,7 @@ export const VideosApiAxiosParamCreator = function ( } if (readable_id) { - localVarQueryParameter["readable_id"] = readable_id.join( - COLLECTION_FORMATS.csv, - ) + localVarQueryParameter["readable_id"] = readable_id } if (resource_category) { @@ -29864,7 +29795,7 @@ export const VideosApiAxiosParamCreator = function ( } if (topic) { - localVarQueryParameter["topic"] = topic.join(COLLECTION_FORMATS.csv) + localVarQueryParameter["topic"] = topic } setSearchParams(localVarUrlObj, localVarQueryParameter) @@ -29942,7 +29873,7 @@ export const VideosApiFp = function (configuration?: Configuration) { * @summary List * @param {boolean} [certification] * @param {Array} [certification_type] The type of certification offered * `micromasters` - MicroMasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate - * @param {Array} [course_feature] Multiple values may be separated by commas. + * @param {Array} [course_feature] Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @param {Array>} [delivery] The delivery of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * `offline` - Offline * @param {Array} [department] The department that offers learning resources * `1` - Civil and Environmental Engineering * `2` - Mechanical Engineering * `3` - Materials Science and Engineering * `4` - Architecture * `5` - Chemistry * `6` - Electrical Engineering and Computer Science * `7` - Biology * `8` - Physics * `9` - Brain and Cognitive Sciences * `10` - Chemical Engineering * `11` - Urban Studies and Planning * `12` - Earth, Atmospheric, and Planetary Sciences * `14` - Economics * `15` - Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Languages * `21H` - History * `21L` - Literature * `21M` - Music and Theater Arts * `22` - Nuclear Science and Engineering * `24` - Linguistics and Philosophy * `CC` - Concourse * `CMS-W` - Comparative Media Studies/Writing * `EC` - Edgerton Center * `ES` - Experimental Study Group * `ESD` - Engineering Systems Division * `HST` - Medical Engineering and Science * `IDS` - Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `SP` - Special Programs * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean} [free] The course/program is offered for free @@ -29952,11 +29883,11 @@ export const VideosApiFp = function (configuration?: Configuration) { * @param {number} [offset] The initial index from which to return the results. * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `csail` - CSAIL * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU * `susskind` - Susskind * `globalalumni` - Global Alumni * `simplilearn` - Simplilearn * `emeritus` - Emeritus * `podcast` - Podcast * `youtube` - YouTube * `canvas` - Canvas * `climate` - MIT Climate * @param {boolean} [professional] - * @param {Array} [readable_id] Multiple values may be separated by commas. + * @param {Array} [readable_id] A unique text identifier for the resources * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material * @param {Array} [resource_type] The type of learning resource * `course` - Course * `program` - Program * `learning_path` - Learning Path * `podcast` - Podcast * `podcast_episode` - Podcast Episode * `video` - Video * `video_playlist` - Video Playlist * `article` - Article * @param {VideosListSortbyEnum} [sortby] Sort By * `id` - Object ID ascending * `-id` - Object ID descending * `readable_id` - Readable ID ascending * `-readable_id` - Readable ID descending * `last_modified` - Last Modified Date ascending * `-last_modified` - Last Modified Date descending * `new` - Newest resources first * `start_date` - Start Date ascending * `-start_date` - Start Date descending * `mitcoursenumber` - MIT course number ascending * `-mitcoursenumber` - MIT course number descending * `views` - Popularity ascending * `-views` - Popularity descending * `upcoming` - Next start date ascending - * @param {Array} [topic] Multiple values may be separated by commas. + * @param {Array} [topic] Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @param {*} [options] Override http request option. * @throws {RequiredError} */ @@ -30131,7 +30062,7 @@ export interface VideosApiVideosListRequest { readonly certification_type?: Array /** - * Multiple values may be separated by commas. + * Content feature for the resources. Load the \'api/v1/course_features\' endpoint for a list of course features * @type {Array} * @memberof VideosApiVideosList */ @@ -30201,7 +30132,7 @@ export interface VideosApiVideosListRequest { readonly professional?: boolean /** - * Multiple values may be separated by commas. + * A unique text identifier for the resources * @type {Array} * @memberof VideosApiVideosList */ @@ -30229,7 +30160,7 @@ export interface VideosApiVideosListRequest { readonly sortby?: VideosListSortbyEnum /** - * Multiple values may be separated by commas. + * Topics covered by the resources. Load the \'/api/v1/topics\' endpoint for a list of topics * @type {Array} * @memberof VideosApiVideosList */ diff --git a/frontends/api/src/mitxonline/test-utils/factories/contracts.ts b/frontends/api/src/mitxonline/test-utils/factories/contracts.ts index 18f54391bb..9227408e97 100644 --- a/frontends/api/src/mitxonline/test-utils/factories/contracts.ts +++ b/frontends/api/src/mitxonline/test-utils/factories/contracts.ts @@ -13,6 +13,8 @@ const contract = (overrides: Partial = {}): ContractPage => ({ organization: faker.number.int(), slug: faker.lorem.slug(), membership_type: faker.helpers.arrayElement(["managed", "unmanaged"]), + welcome_message: faker.lorem.sentence(), + welcome_message_extra: `

${faker.lorem.paragraph()}

`, ...overrides, }) diff --git a/frontends/api/src/mitxonline/test-utils/factories/user.ts b/frontends/api/src/mitxonline/test-utils/factories/user.ts index 9c147ca07d..96e246d285 100644 --- a/frontends/api/src/mitxonline/test-utils/factories/user.ts +++ b/frontends/api/src/mitxonline/test-utils/factories/user.ts @@ -11,8 +11,6 @@ import { UniqueEnforcer } from "enforce-unique" const enforcerId = new UniqueEnforcer() const legalAddress = (): LegalAddress => ({ - first_name: faker.person.firstName(), - last_name: faker.person.lastName(), country: faker.location.countryCode(), state: faker.datatype.boolean() ? faker.location.state() : null, }) diff --git a/frontends/main/package.json b/frontends/main/package.json index d2df5e29cb..cfc7859b40 100644 --- a/frontends/main/package.json +++ b/frontends/main/package.json @@ -14,7 +14,7 @@ "@emotion/cache": "^11.13.1", "@emotion/styled": "^11.11.0", "@mitodl/course-search-utils": "^3.5.0", - "@mitodl/mitxonline-api-axios": "^2025.10.21", + "@mitodl/mitxonline-api-axios": "^2025.11.5", "@mitodl/smoot-design": "^6.17.1", "@next/bundle-analyzer": "^14.2.15", "@react-pdf/renderer": "^4.3.0", diff --git a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.test.tsx b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.test.tsx index 1b8841fb19..a5aaf796c7 100644 --- a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.test.tsx +++ b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.test.tsx @@ -176,17 +176,23 @@ describe.each([ test.each([ { - course: pastDashboardCourse(), + course: pastDashboardCourse({ + enrollment: { status: EnrollmentStatus.Enrolled }, + }), expected: { labelPrefix: "View" }, case: "past", }, { - course: currentDashboardCourse(), + course: currentDashboardCourse({ + enrollment: { status: EnrollmentStatus.Enrolled }, + }), expected: { labelPrefix: "Continue" }, case: "current", }, { - course: futureDashboardCourse(), + course: futureDashboardCourse({ + enrollment: { status: EnrollmentStatus.Enrolled }, + }), expected: { labelPrefix: "Continue" }, label: "future", }, @@ -515,12 +521,12 @@ describe.each([ ) test.each([ - { status: EnrollmentStatus.Completed }, - { status: EnrollmentStatus.Enrolled }, - { status: EnrollmentStatus.NotEnrolled }, + { status: EnrollmentStatus.Completed, expectedText: "View Course" }, + { status: EnrollmentStatus.Enrolled, expectedText: "Continue Course" }, + { status: EnrollmentStatus.NotEnrolled, expectedText: "Start Course" }, ])( - "CoursewareButton switches to Enroll functionality when enrollment status is not enrolled or undefined", - ({ status }) => { + "CoursewareButton shows correct text based on enrollment status ($status)", + ({ status, expectedText }) => { setupUserApis() const course = dashboardCourse() course.enrollment = { @@ -534,18 +540,31 @@ describe.each([ const card = getCard() const coursewareButton = within(card).getByTestId("courseware-button") - if ( - status === EnrollmentStatus.NotEnrolled || - status === undefined || - !course.enrollment - ) { - expect(coursewareButton).toHaveTextContent("Start Course") - } else { - expect(coursewareButton).toHaveTextContent("Continue Course") - } + expect(coursewareButton).toHaveTextContent(expectedText) }, ) + test("CoursewareButton shows 'View Course' when course has ended even if not completed", () => { + setupUserApis() + const course = dashboardCourse({ + run: { + startDate: faker.date.past().toISOString(), + endDate: faker.date.past().toISOString(), // Course has ended + }, + enrollment: { + status: EnrollmentStatus.Enrolled, // User is enrolled but not completed + mode: EnrollmentMode.Audit, + }, + }) + renderWithProviders( + , + ) + const card = getCard() + const coursewareButton = within(card).getByTestId("courseware-button") + + expect(coursewareButton).toHaveTextContent("View Course") + }) + const setupEnrollmentApis = (opts: { user: ReturnType course: ReturnType diff --git a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.tsx b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.tsx index a15ee01b27..c3e3d0cd59 100644 --- a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.tsx +++ b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/DashboardCard.tsx @@ -170,8 +170,10 @@ const getCoursewareText = ({ if (!enrollmentStatus || enrollmentStatus === EnrollmentStatus.NotEnrolled) { return `Start ${courseNoun}` } - if (!endDate) return `Continue ${courseNoun}` - if (isInPast(endDate)) { + if ( + (endDate && isInPast(endDate)) || + enrollmentStatus === EnrollmentStatus.Completed + ) { return `View ${courseNoun}` } return `Continue ${courseNoun}` diff --git a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/test-utils.ts b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/test-utils.ts index 617ddb1d65..8921fcf653 100644 --- a/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/test-utils.ts +++ b/frontends/main/src/app-pages/DashboardPage/CoursewareDisplay/test-utils.ts @@ -159,11 +159,11 @@ const setupProgramsAndCourses = () => { results: [programCollection], }) setMockResponse.get( - urls.programs.programsList({ id: programA.id, org_id: orgX.id }), + urls.programs.programsList({ id: [programA.id], org_id: orgX.id }), { results: [programA] }, ) setMockResponse.get( - urls.programs.programsList({ id: programB.id, org_id: orgX.id }), + urls.programs.programsList({ id: [programB.id], org_id: orgX.id }), { results: [programB] }, ) setMockResponse.get( @@ -310,6 +310,8 @@ const createTestContracts = ( organization: orgId, slug: faker.lorem.slug(), membership_type: faker.helpers.arrayElement(["managed", "unmanaged"]), + welcome_message: faker.lorem.sentence(), + welcome_message_extra: faker.lorem.sentence(), })) } diff --git a/frontends/main/src/app-pages/DashboardPage/OrganizationContent.test.tsx b/frontends/main/src/app-pages/DashboardPage/OrganizationContent.test.tsx index 08b63060d7..b5c28eb72f 100644 --- a/frontends/main/src/app-pages/DashboardPage/OrganizationContent.test.tsx +++ b/frontends/main/src/app-pages/DashboardPage/OrganizationContent.test.tsx @@ -1,5 +1,11 @@ import React from "react" -import { renderWithProviders, screen, within, waitFor } from "@/test-utils" +import { + renderWithProviders, + screen, + within, + waitFor, + user, +} from "@/test-utils" import OrganizationContent from "./OrganizationContent" import { setMockResponse } from "api/test-utils" import { urls, factories } from "api/mitxonline-test-utils" @@ -154,14 +160,11 @@ describe("OrganizationContent", () => { results: [programCollection], }) - // Mock individual program API calls for the collection + // Mock the new bulk programs API call with array of IDs + const programIds = [programB.id, programA.id] // B first, then A to match collection order setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programA.id}`), - { results: [programA] }, - ) - setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programB.id}`), - { results: [programB] }, + expect.stringContaining(`/api/v2/programs/?id=${programIds.join("%2C")}`), + { results: [programB, programA] }, // Return in same order as requested ) // Mock the bulk course API call with first course from each program @@ -169,11 +172,13 @@ describe("OrganizationContent", () => { const firstCourseB = coursesB.find((c) => c.id === programB.courses[0]) const firstCourseIds = [programB.courses[0], programA.courses[0]] // B first, then A to match collection order + // Mock the program collection courses query setMockResponse.get( - expect.stringContaining( - `/api/v2/courses/?id=${firstCourseIds.join("%2C")}`, - ), - { results: [firstCourseB, firstCourseA] }, // Response order should match request order + urls.courses.coursesList({ + id: firstCourseIds, + org_id: orgX.id, + }), + { results: [firstCourseB, firstCourseA] }, ) renderWithProviders() @@ -182,23 +187,24 @@ describe("OrganizationContent", () => { name: programCollection.title, }) expect(collectionHeader).toBeInTheDocument() + const collectionItems = await screen.findAllByTestId( "org-program-collection-root", ) expect(collectionItems.length).toBe(1) + const collection = within(collectionItems[0]) expect(collection.getByText(programCollection.title)).toBeInTheDocument() - // Wait for program cards to be rendered - await waitFor(() => { - const programCards = collection.getAllByTestId("enrollment-card-desktop") - expect(programCards.length).toBe(2) - }) + // Wait for and verify the actual course cards are displayed + const courseCards = await collection.findAllByTestId( + "enrollment-card-desktop", + ) + expect(courseCards.length).toBe(2) - // Verify the order matches the programCollection.programs array [programB.id, programA.id] - const programCards = collection.getAllByTestId("enrollment-card-desktop") - expect(programCards[0]).toHaveTextContent(firstCourseB!.title) - expect(programCards[1]).toHaveTextContent(firstCourseA!.title) + // Verify the first course from each program is displayed in collection order + expect(courseCards[0]).toHaveTextContent(firstCourseB!.title) + expect(courseCards[1]).toHaveTextContent(firstCourseA!.title) }) test("Program collection displays the first course from each program", async () => { @@ -216,6 +222,7 @@ describe("OrganizationContent", () => { results: [programCollection], }) + // Mock the new bulk programs API call with array of IDs setMockResponse.get( expect.stringContaining(`/api/v2/programs/?id=${programA.id}`), { results: [programA] }, @@ -225,29 +232,31 @@ describe("OrganizationContent", () => { const firstCourseId = programA.courses[0] const firstCourse = coursesA.find((c) => c.id === firstCourseId) setMockResponse.get( - expect.stringContaining(`/api/v2/courses/?id=${firstCourseId}`), + urls.courses.coursesList({ + id: [firstCourseId], + org_id: orgX.id, + }), { results: [firstCourse] }, ) renderWithProviders() const collection = await screen.findByTestId("org-program-collection-root") + const collectionWrapper = within(collection) - // Wait for program cards to be rendered - const programCards = await waitFor(() => { - const programCards = within(collection).getAllByTestId( - "enrollment-card-desktop", - ) - expect(programCards.length).toBeGreaterThan(0) - return programCards - }) + expect( + collectionWrapper.getByRole("heading", { name: programCollection.title }), + ).toBeInTheDocument() - // Should display the first course by program.courseIds order - expect(programCards[0]).toHaveTextContent(firstCourse!.title) + // Wait for and verify the first course from the program is displayed + const courseCard = await collectionWrapper.findByTestId( + "enrollment-card-desktop", + ) + expect(courseCard).toHaveTextContent(firstCourse!.title) }) test("Does not render a program separately if it is part of a collection", async () => { - const { orgX, programA, programB, programCollection } = + const { orgX, programA, programB, programCollection, coursesA, coursesB } = setupProgramsAndCourses() // Set up the collection to include both programs @@ -267,14 +276,23 @@ describe("OrganizationContent", () => { results: [programCollection], }) - // Mock individual program API calls for the collection + // Mock the bulk programs API call for the collection + const programIds = [programB.id, programA.id] setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programA.id}`), - { results: [programA] }, + expect.stringContaining(`/api/v2/programs/?id=${programIds.join("%2C")}`), + { results: [programB, programA] }, ) + + // Mock course API calls for program collection (first courses) + const firstCourseIds = [programB.courses[0], programA.courses[0]] + const firstCourseA = coursesA.find((c) => c.id === programA.courses[0]) + const firstCourseB = coursesB.find((c) => c.id === programB.courses[0]) setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programB.id}`), - { results: [programB] }, + urls.courses.coursesList({ + id: firstCourseIds, + org_id: orgX.id, + }), + { results: [firstCourseB, firstCourseA] }, ) renderWithProviders() @@ -372,14 +390,11 @@ describe("OrganizationContent", () => { results: [programCollection], }) - // Mock individual program API calls for the collection - setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programANoCourses.id}`), - { results: [programANoCourses] }, - ) + // Mock the bulk programs API call for the collection + const programIds = [programANoCourses.id, programB.id] setMockResponse.get( - expect.stringContaining(`/api/v2/programs/?id=${programB.id}`), - { results: [programB] }, + expect.stringContaining(`/api/v2/programs/?id=${programIds.join("%2C")}`), + { results: [programANoCourses, programB] }, ) // Mock bulk course API call - only programB has courses, so only its first course should be included @@ -387,7 +402,10 @@ describe("OrganizationContent", () => { const firstCourseB = coursesB.find((c) => c.id === firstCourseBId) setMockResponse.get( - expect.stringContaining(`/api/v2/courses/?id=${firstCourseBId}`), + urls.courses.coursesList({ + id: [firstCourseBId], // Only programB's first course since programA has no courses + org_id: orgX.id, + }), { results: [firstCourseB] }, ) @@ -403,12 +421,9 @@ describe("OrganizationContent", () => { // Should see the collection header expect(collection.getByText(programCollection.title)).toBeInTheDocument() - // Should see programB's course - await waitFor(() => { - expect( - collection.getAllByText(firstCourseB!.title).length, - ).toBeGreaterThan(0) - }) + // Wait for and verify the course from programB is displayed + const courseCard = await collection.findByTestId("enrollment-card-desktop") + expect(courseCard).toHaveTextContent(firstCourseB!.title) }) test("Shows the program certificate link button if the program has a certificate", async () => { @@ -776,4 +791,136 @@ describe("OrganizationContent", () => { await screen.findByRole("heading", { name: "Organization not found" }) }) + + test("displays welcome message when contract has welcome_message and welcome_message_extra", async () => { + const { orgX } = setupProgramsAndCourses() + + orgX.contracts[0].welcome_message = "Welcome to our program!" + orgX.contracts[0].welcome_message_extra = + "

This is additional information with HTML formatting.

" + + renderWithProviders() + + await screen.findByText("Welcome to our program!") + + expect(screen.getByText("Show more")).toBeInTheDocument() + + expect(screen.queryByText("This is additional information with")).toBeNull() + }) + + test("shows and hides extra welcome message content when clicking show more/less", async () => { + const { orgX } = setupProgramsAndCourses() + + orgX.contracts[0].welcome_message = "Welcome message" + orgX.contracts[0].welcome_message_extra = + "

Extra content with emphasis

" + + renderWithProviders() + + const showMoreLink = await screen.findByText("Show more") + + await user.click(showMoreLink) + + expect(screen.getByText("Extra content with")).toBeInTheDocument() + expect(screen.getByText("emphasis")).toBeInTheDocument() + + expect(screen.getByText("Show less")).toBeInTheDocument() + expect(screen.queryByText("Show more")).toBeNull() + + await user.click(screen.getByText("Show less")) + + expect(screen.queryByText("Extra content with")).toBeNull() + + expect(screen.getByText("Show more")).toBeInTheDocument() + expect(screen.queryByText("Show less")).toBeNull() + }) + + test("does not display welcome message when welcome_message is missing", async () => { + const { orgX } = setupProgramsAndCourses() + + const contractWithoutWelcome = { ...orgX.contracts[0] } + delete (contractWithoutWelcome as Partial) + .welcome_message + contractWithoutWelcome.welcome_message_extra = "

Extra content

" + orgX.contracts[0] = contractWithoutWelcome + + renderWithProviders() + + expect(screen.queryByText("Show more")).toBeNull() + expect(screen.queryByText("Extra content")).toBeNull() + }) + + test("does not display welcome message when welcome_message_extra is missing", async () => { + const { orgX } = setupProgramsAndCourses() + + const contractWithoutExtra = { ...orgX.contracts[0] } + contractWithoutExtra.welcome_message = "Welcome message" + delete (contractWithoutExtra as Partial) + .welcome_message_extra + orgX.contracts[0] = contractWithoutExtra + + renderWithProviders() + + expect(screen.queryByText("Welcome message")).toBeNull() + expect(screen.queryByText("Show more")).toBeNull() + }) + + test("does not display welcome message when organization has no contracts", async () => { + const { orgX } = setupProgramsAndCourses() + + orgX.contracts = [] + + renderWithProviders() + + expect(screen.queryByText("Show more")).toBeNull() + }) + + test("sanitizes HTML content in welcome_message_extra", async () => { + const { orgX } = setupProgramsAndCourses() + + orgX.contracts[0].welcome_message = "Welcome message" + orgX.contracts[0].welcome_message_extra = + '

Safe content

' + + renderWithProviders() + + const showMoreLink = await screen.findByText("Show more") + await user.click(showMoreLink) + + expect(screen.getByText("Safe content")).toBeInTheDocument() + + expect(document.querySelector("script")).toBeNull() + }) + + test("uses the first contract for welcome message when multiple contracts exist", async () => { + const { orgX } = setupProgramsAndCourses() + + const secondContract = factories.contracts.contract({ + organization: orgX.id, + name: "Second Contract", + welcome_message: "Second welcome message", + welcome_message_extra: "

Second extra content

", + }) + + orgX.contracts = [ + { + ...orgX.contracts[0], + welcome_message: "First welcome message", + welcome_message_extra: "

First extra content

", + }, + secondContract, + ] + + renderWithProviders() + + await screen.findByText("First welcome message") + + expect(screen.queryByText("Second welcome message")).toBeNull() + + const showMoreLink = screen.getByText("Show more") + await user.click(showMoreLink) + + expect(screen.getByText("First extra content")).toBeInTheDocument() + expect(screen.queryByText("Second extra content")).toBeNull() + }) }) diff --git a/frontends/main/src/app-pages/DashboardPage/OrganizationContent.tsx b/frontends/main/src/app-pages/DashboardPage/OrganizationContent.tsx index e15bc040ef..ec7516dcd5 100644 --- a/frontends/main/src/app-pages/DashboardPage/OrganizationContent.tsx +++ b/frontends/main/src/app-pages/DashboardPage/OrganizationContent.tsx @@ -3,7 +3,7 @@ import React, { useEffect } from "react" import DOMPurify from "isomorphic-dompurify" import Image from "next/image" -import { useQueries, useQuery } from "@tanstack/react-query" +import { useQuery } from "@tanstack/react-query" import { programsQueries, programCollectionQueries, @@ -13,7 +13,14 @@ import { contractQueries } from "api/mitxonline-hooks/contracts" import * as transform from "./CoursewareDisplay/transform" import { enrollmentQueries } from "api/mitxonline-hooks/enrollment" import { DashboardCard } from "./CoursewareDisplay/DashboardCard" -import { PlainList, Skeleton, Stack, styled, Typography } from "ol-components" +import { + Link, + PlainList, + Skeleton, + Stack, + styled, + Typography, +} from "ol-components" import { DashboardProgram, DashboardProgramCollection, @@ -36,6 +43,7 @@ const HeaderRoot = styled.div({ alignItems: "center", gap: "24px", }) + const ImageContainer = styled.div(({ theme }) => ({ width: "120px", height: "118px", @@ -50,6 +58,7 @@ const ImageContainer = styled.div(({ theme }) => ({ height: "auto", }, })) + const OrganizationHeader: React.FC<{ org?: OrganizationPage }> = ({ org }) => { return ( @@ -77,6 +86,48 @@ const OrganizationHeader: React.FC<{ org?: OrganizationPage }> = ({ org }) => { ) } +const WelcomeMessageExtra = styled(Typography)({ + margin: 0, + p: { + margin: 0, + }, +}) + +const WelcomeMessage: React.FC<{ org?: OrganizationPage }> = ({ org }) => { + const empty = + const [showingMore, setShowingMore] = React.useState(false) + if (!org?.contracts?.length) { + return empty + } + const contract = org.contracts[0] + const welcomeMessage = contract.welcome_message + const welcomeMessageExtra = DOMPurify.sanitize(contract.welcome_message_extra) + if (!welcomeMessage || !welcomeMessageExtra) { + return empty + } + return ( + + + {welcomeMessage} + setShowingMore(!showingMore)} + > + {showingMore ? "Show less" : "Show more"} + + + {showingMore && ( + + )} + + ) +} + const DashboardCardStyled = styled(DashboardCard)({ borderRadius: "0px", borderTop: "none", @@ -140,32 +191,30 @@ const useProgramCollectionCourses = ( programs: DashboardProgramCollectionProgram[], orgId: number, ) => { - const programQueries = useQueries({ - queries: programs - .sort((a, b) => (a.order ?? 0) - (b.order ?? 0)) - .map((program) => - programsQueries.programsList({ id: program.id, org_id: orgId }), - ), + const programIds = programs + .map((program) => program.id) + .filter((id) => id !== undefined) + const programsQuery = useQuery({ + ...programsQueries.programsList({ id: programIds, org_id: orgId }), + enabled: programIds.length > 0, }) + const isLoading = programsQuery.isLoading - const isLoading = programQueries.some((query) => query.isLoading) - - const programsWithCourses = programQueries - .map((query) => { - if (!query.data?.results?.length) { + const programsWithCourses = programsQuery.data?.results + .map((program) => { + if (!program) { return null } - const program = query.data.results[0] const transformedProgram = transform.mitxonlineProgram(program) return { - programId: query.data.results[0].id, + programId: program.id, program: transformedProgram, hasCourses: program.courses && program.courses.length > 0, } }) .filter(Boolean) - const hasAnyCourses = programsWithCourses.some((p) => p?.hasCourses) + const hasAnyCourses = programsWithCourses?.some((p) => p?.hasCourses) return { isLoading, @@ -184,18 +233,21 @@ const OrgProgramCollectionDisplay: React.FC<{ const { isLoading, programsWithCourses, hasAnyCourses } = useProgramCollectionCourses(collection.programs, orgId) const firstCourseIds = programsWithCourses - .map((p) => p?.program.courseIds[0]) + ?.map((p) => p?.program.courseIds[0]) .filter((id): id is number => id !== undefined) const courses = useQuery({ ...coursesQueries.coursesList({ id: firstCourseIds, org_id: orgId, }), - enabled: firstCourseIds.length > 0, + enabled: firstCourseIds !== undefined && firstCourseIds.length > 0, }) const rawCourses = courses.data?.results.sort((a, b) => { - return firstCourseIds.indexOf(a.id) - firstCourseIds.indexOf(b.id) + return ( + (firstCourseIds?.indexOf(a.id) ?? -1) - + (firstCourseIds?.indexOf(b.id) ?? -1) + ) }) ?? [] const transformedCourses = transform.organizationCoursesWithContracts({ courses: rawCourses, @@ -242,7 +294,7 @@ const OrgProgramCollectionDisplay: React.FC<{ {header} {courses.isLoading && - programsWithCourses.map((item, index) => ( + programsWithCourses?.map((item, index) => ( - - {programs.isLoading || !transformedPrograms - ? skeleton - : transformedPrograms.map((program) => ( - - ))} - {programCollections.isLoading ? ( - skeleton - ) : ( - - {programCollections.data?.results.map((collection) => { - const transformedCollection = - transform.mitxonlineProgramCollection(collection) - return ( - + + + + + + {programs.isLoading || !transformedPrograms + ? skeleton + : transformedPrograms.map((program) => ( + - ) - })} - - )} - {programs.data?.results.length === 0 && ( - - - No programs found - - - )} - + ))} + {programCollections.isLoading ? ( + skeleton + ) : ( + + {programCollections.data?.results.map((collection) => { + const transformedCollection = + transform.mitxonlineProgramCollection(collection) + return ( + + ) + })} + + )} + {programs.data?.results.length === 0 && ( + + + No programs found + + + )} + + ) } diff --git a/frontends/main/src/app-pages/HomePage/HomePage.test.tsx b/frontends/main/src/app-pages/HomePage/HomePage.test.tsx index 1ea97356d7..39bfdc8aeb 100644 --- a/frontends/main/src/app-pages/HomePage/HomePage.test.tsx +++ b/frontends/main/src/app-pages/HomePage/HomePage.test.tsx @@ -340,6 +340,15 @@ describe("Home Page Carousel", () => { test("Headings", async () => { setupAPIs() + setMockResponse.get( + expect.stringContaining(urls.learningResources.list()), + [], + ) + setMockResponse.get( + expect.stringContaining(urls.learningResources.featured()), + [], + ) + renderWithProviders() await waitFor(() => { assertHeadings([ diff --git a/frontends/main/src/page-components/ResourceCard/ResourceCard.tsx b/frontends/main/src/page-components/ResourceCard/ResourceCard.tsx index cba791275e..da86987e7c 100644 --- a/frontends/main/src/page-components/ResourceCard/ResourceCard.tsx +++ b/frontends/main/src/page-components/ResourceCard/ResourceCard.tsx @@ -69,12 +69,25 @@ const useResourceCard = (resource?: LearningResource | null) => { } } +type HeadingElement = "h1" | "h2" | "h3" | "h4" | "h5" | "h6" + +const subheadingMap: Record = { + h1: 2, + h2: 3, + h3: 4, + h4: 5, + h5: 6, + h6: 6, +} + type ResourceCardProps = Omit< LearningResourceCardProps, "href" | "onAddToLearningPathClick" | "onAddToUserListClick" > & { condensed?: boolean list?: boolean + headingLevel?: number + parentHeadingEl?: HeadingElement } /** @@ -88,6 +101,7 @@ const ResourceCard: React.FC = ({ resource, condensed, list, + parentHeadingEl, ...others }) => { const { @@ -106,6 +120,8 @@ const ResourceCard: React.FC = ({ : list ? LearningResourceListCard : LearningResourceCard + + const headingLevel = parentHeadingEl ? subheadingMap[parentHeadingEl] : 6 return ( <> = ({ onAddToUserListClick={handleAddToUserListClick} inUserList={inUserList} inLearningPath={inLearningPath} + headingLevel={headingLevel} {...others} /> diff --git a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.test.tsx b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.test.tsx index f0dbcf8ca4..cd976834b3 100644 --- a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.test.tsx +++ b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.test.tsx @@ -291,4 +291,41 @@ describe("ResourceCarousel", () => { await screen.findByText(resources.list.results[2].title) expect(screen.queryByText(resources.list.results[1].title)).toBeNull() }) + + it.each([ + { titleComponent: "h1", expectedLevel: 2 }, + { titleComponent: "h2", expectedLevel: 3 }, + { titleComponent: "h3", expectedLevel: 4 }, + { titleComponent: "h4", expectedLevel: 5 }, + { titleComponent: "h5", expectedLevel: 6 }, + { titleComponent: "h6", expectedLevel: 6 }, + ] as const)( + "Resource cards have headingLevel set to next level down for screen reader navigation", + async ({ titleComponent, expectedLevel }) => { + const config: ResourceCarouselProps["config"] = [ + { + label: "Resources", + data: { + type: "resources", + params: { resource_type: ["course"] }, + }, + }, + ] + const { resources } = setupApis() + renderWithProviders( + , + ) + + const titleHeading = await screen.findByRole("heading", { + name: resources.list.results[0].title, + }) + expect(titleHeading.getAttribute("aria-level")).toBe( + String(expectedLevel), + ) + }, + ) }) diff --git a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx index a7ea37a1f9..f41bd9e4be 100644 --- a/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx +++ b/frontends/main/src/page-components/ResourceCarousel/ResourceCarousel.tsx @@ -176,7 +176,7 @@ type ResourceCarouselProps = { /** * Element type for the carousel title */ - titleComponent?: React.ElementType + titleComponent?: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" titleVariant?: TypographyProps["variant"] excludeResourceId?: number } @@ -302,28 +302,32 @@ const ResourceCarousel: React.FC = ({ >[] } > - {({ resources, childrenLoading, tabConfig }) => ( - - {isLoading || childrenLoading - ? Array.from({ length: 6 }).map((_, index) => ( - - )) - : resources - .filter((resource) => resource.id !== excludeResourceId) - .map((resource) => ( + {({ resources, childrenLoading, tabConfig }) => { + return ( + + {isLoading || childrenLoading + ? Array.from({ length: 6 }).map((_, index) => ( - ))} - - )} + )) + : resources + .filter((resource) => resource.id !== excludeResourceId) + .map((resource) => ( + + ))} + + ) + }} diff --git a/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx b/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx index 061a5cbc7b..95018492b1 100644 --- a/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx +++ b/frontends/main/src/page-components/SearchDisplay/SearchDisplay.tsx @@ -516,7 +516,7 @@ interface SearchDisplayProps { toggleParamValue: UseResourceSearchParamsResult["toggleParamValue"] showProfessionalToggle?: boolean setSearchParams: UseResourceSearchParamsProps["setSearchParams"] - resultsHeadingEl: React.ElementType + resultsHeadingEl: "h1" | "h2" | "h3" | "h4" | "h5" | "h6" filterHeadingEl: React.ElementType } @@ -914,7 +914,11 @@ const SearchDisplay: React.FC = ({ .fill(null) .map((a, index) => (
  • - +
  • ))}
    @@ -922,7 +926,11 @@ const SearchDisplay: React.FC = ({ {data.results.map((resource) => (
  • - +
  • ))}
    diff --git a/frontends/ol-components/src/components/Card/Card.test.tsx b/frontends/ol-components/src/components/Card/Card.test.tsx index 9cb8c1b74e..21d63ff41c 100644 --- a/frontends/ol-components/src/components/Card/Card.test.tsx +++ b/frontends/ol-components/src/components/Card/Card.test.tsx @@ -131,4 +131,18 @@ describe("Card", () => { expect(divOnClick).toHaveBeenCalled() expect(window.location.hash).toBe("#two") }) + + test("Card title has heading role and aria-level set for screen reader navigation", async () => { + renderWithTheme( + + + Title + + , + ) + const titleHeading = screen.getByRole("heading", { + name: "Title", + }) + expect(titleHeading.getAttribute("aria-level")).toBe("2") + }) }) diff --git a/frontends/ol-components/src/components/Card/Card.tsx b/frontends/ol-components/src/components/Card/Card.tsx index 4b4c214ecf..f98a2d803f 100644 --- a/frontends/ol-components/src/components/Card/Card.tsx +++ b/frontends/ol-components/src/components/Card/Card.tsx @@ -5,9 +5,9 @@ import React, { isValidElement, CSSProperties, useCallback, - AriaAttributes, ReactElement, } from "react" +import type { AriaRole, AriaAttributes } from "react" import styled from "@emotion/styled" import { theme } from "../ThemeProvider/ThemeProvider" import { pxToRem } from "../ThemeProvider/typography" @@ -135,6 +135,35 @@ const Title = styled( ] }) +const LinkableTitle = ({ + title, + size, +}: { + title: TitleProps + size: Size | undefined +}) => { + const { role, "aria-level": ariaLevel, href, children, ...rest } = title + + return ( + + {/* + * The card titles are links, but we also want them to be visible as headings for accessibility. + * Setting the role on the Title component would make it invisible as a link to screen readers, + * so we include a span to set the role on instead. + */} + <span role={role} aria-level={ariaLevel}> + {children} + </span> + + ) +} + const Footer = styled.span` display: block; height: ${pxToRem(16)}; @@ -218,6 +247,7 @@ type CardProps = { forwardClicksToLink?: boolean onClick?: React.MouseEventHandler as?: React.ElementType + role?: AriaRole } & AriaAttributes export type ImageProps = NextImageProps & { @@ -231,7 +261,8 @@ type TitleProps = { lines?: number style?: CSSProperties lang?: string -} + role?: AriaRole +} & AriaAttributes type SlotProps = { children?: ReactNode; style?: CSSProperties } @@ -270,6 +301,7 @@ const Card: Card = ({ size, onClick, forwardClicksToLink = false, + role, ...others }) => { let content, @@ -315,6 +347,7 @@ const Card: Card = ({ className={allClassNames} size={size} onClick={handleClick} + role={role} > {content} @@ -327,6 +360,7 @@ const Card: Card = ({ className={allClassNames} size={size} onClick={handleClick} + role={role} > {image && ( // alt text will be checked on Card.Image @@ -345,12 +379,7 @@ const Card: Card = ({ {info.children} )} - + <LinkableTitle title={title} size={size} /> </Body> <Bottom> <Footer className="MitCard-footer" {...footer}> diff --git a/frontends/ol-components/src/components/Card/ListCard.test.tsx b/frontends/ol-components/src/components/Card/ListCard.test.tsx index 25389725e3..3f775e1fae 100644 --- a/frontends/ol-components/src/components/Card/ListCard.test.tsx +++ b/frontends/ol-components/src/components/Card/ListCard.test.tsx @@ -107,4 +107,18 @@ describe("ListCard", () => { expect(divOnClick).toHaveBeenCalled() expect(window.location.hash).toBe("#two") }) + + test("Card title has heading role and aria-level set for screen reader navigation", async () => { + renderWithTheme( + <ListCard> + <ListCard.Title role="heading" aria-level={2}> + Title + </ListCard.Title> + </ListCard>, + ) + const titleHeading = screen.getByRole("heading", { + name: "Title", + }) + expect(titleHeading.getAttribute("aria-level")).toBe("2") + }) }) diff --git a/frontends/ol-components/src/components/Card/ListCard.tsx b/frontends/ol-components/src/components/Card/ListCard.tsx index 6eeb2c4846..e2f2cdb6ce 100644 --- a/frontends/ol-components/src/components/Card/ListCard.tsx +++ b/frontends/ol-components/src/components/Card/ListCard.tsx @@ -3,9 +3,9 @@ import React, { ReactNode, Children, isValidElement, - AriaAttributes, ReactElement, } from "react" +import type { AriaRole, AriaAttributes } from "react" import styled from "@emotion/styled" import { RiDraggable } from "@remixicon/react" import { theme } from "../ThemeProvider/ThemeProvider" @@ -90,21 +90,42 @@ export type TitleProps = { children?: ReactNode href?: string lang?: string -} + role?: AriaRole +} & AriaAttributes + export const Title: React.FC<TitleProps> = styled(Linkable)` flex-grow: 1; color: ${theme.custom.colors.darkGray2}; text-overflow: ellipsis; ${{ ...theme.typography.subtitle1 }} height: ${theme.typography.pxToRem(40)}; + margin: 0; ${theme.breakpoints.down("md")} { ${{ ...theme.typography.subtitle3 }} height: ${theme.typography.pxToRem(32)}; } - - margin: 0; ` +export const LinkableTitle = ({ + title, + lineClamp = 2, +}: { + title: TitleProps + lineClamp?: number +}) => { + const { href, role, "aria-level": ariaLevel, lang, children, ...rest } = title + + return ( + <Title data-card-link={!!href} href={href} {...rest}> + <span role={role} aria-level={ariaLevel}> + <TruncateText lineClamp={lineClamp} lang={lang}> + {children} + </TruncateText> + </span> + + ) +} + export const Footer = styled.span` display: block; ${{ ...theme.typography.body3 }} @@ -209,8 +230,12 @@ const ListCard: Card = ({ onClick, ...others }) => { - let content, imageProps, info, footer, actions - let title: TitleProps = {} + let content, + imageProps, + info, + footer, + actions, + title: TitleProps = {} const handleHrefClick = useClickChildLink(onClick) const handleClick = forwardClicksToLink ? handleHrefClick : onClick @@ -248,13 +273,7 @@ const ListCard: Card = ({ )} {info} - {title && ( - - <TruncateText lineClamp={2} lang={title.lang}> - {title.children} - </TruncateText> - - )} + {title && }
    {footer}
    {actions && {actions}} diff --git a/frontends/ol-components/src/components/Card/ListCardCondensed.tsx b/frontends/ol-components/src/components/Card/ListCardCondensed.tsx index 38ffe25a69..63159b29fe 100644 --- a/frontends/ol-components/src/components/Card/ListCardCondensed.tsx +++ b/frontends/ol-components/src/components/Card/ListCardCondensed.tsx @@ -10,7 +10,6 @@ import styled from "@emotion/styled" import { RiDraggable } from "@remixicon/react" import { theme } from "../ThemeProvider/ThemeProvider" import { BaseContainer, useClickChildLink } from "./Card" -import { TruncateText } from "../TruncateText/TruncateText" import { ListCard, Body as BaseBody, @@ -18,6 +17,7 @@ import { Info as BaseInfo, Title as BaseTitle, Footer, + LinkableTitle, } from "./ListCard" import type { Card as BaseCard, TitleProps } from "./ListCard" @@ -158,11 +158,7 @@ const ListCardCondensed: Card = ({ )} {info} - - <TruncateText lineClamp={4} lang={title.lang}> - {title.children} - </TruncateText> - +
    {footer}
    {actions && {actions}} diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx index 8e2db80b2d..83176b0652 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.test.tsx @@ -51,7 +51,7 @@ describe("Learning Resource Card", () => { setup({ resource }) const title = screen.getByText(resource.title) - expect(title).toHaveAttribute("lang", "en-us") + expect(title.parentElement).toHaveAttribute("lang", "en-us") }) test("Displays run start date", () => { @@ -121,10 +121,12 @@ describe("Learning Resource Card", () => { setup({ resource, href: "/path/to/thing" }) - const link = screen.getByRole("link", { + const titleHeading = screen.getByRole("heading", { name: resource.title, }) - expect(new URL(link.href).pathname).toBe("/path/to/thing") + expect( + new URL((titleHeading.parentElement as HTMLAnchorElement).href).pathname, + ).toBe("/path/to/thing") }) test("Click action buttons", async () => { @@ -214,4 +216,15 @@ describe("Learning Resource Card", () => { expect(imageEl).toHaveAttribute("alt", expected.alt) }) + + test("Resource cards have headingLevel set for screen reader navigation", async () => { + const resource = factories.learningResources.resource({}) + + setup({ resource, headingLevel: 2 }) + + const titleHeading = screen.getByRole("heading", { + name: resource.title, + }) + expect(titleHeading.getAttribute("aria-level")).toBe("2") + }) }) diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index 909aaa4dc4..6e31b21d08 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -1,4 +1,5 @@ import React from "react" +import type { AriaAttributes } from "react" import styled from "@emotion/styled" import Skeleton from "@mui/material/Skeleton" import { @@ -171,6 +172,7 @@ interface LearningResourceCardProps { inUserList?: boolean inLearningPath?: boolean onClick?: React.MouseEventHandler + headingLevel?: number } const FILLED_PROPS = { variant: "primary" } as const @@ -190,7 +192,7 @@ const CardActionButton: React.FC< ) } -const StyledCard = styled(Card)<{ size: Size }>(({ size }) => [ +const StyledCard = styled(Card)<{ size: Size } & AriaAttributes>(({ size }) => [ size === "medium" && { ".MitCard-info": { height: "18px", @@ -210,6 +212,7 @@ const LearningResourceCard: React.FC = ({ inLearningPath, inUserList, onClick, + headingLevel = 6, }) => { if (isLoading) { const { width, height } = imgConfigs["column"] @@ -228,7 +231,6 @@ const LearningResourceCard: React.FC = ({ if (!resource) { return null } - const readableType = getReadableResourceType(resource.resource_type) return ( = ({ - + {resource.title} diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx index 6c76850b99..bf02f48950 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx @@ -264,6 +264,7 @@ interface LearningResourceListCardProps { inLearningPath?: boolean draggable?: boolean onClick?: React.MouseEventHandler + headingLevel?: number } type CardActionButtonProps = Pick< @@ -304,6 +305,7 @@ const LearningResourceListCard: React.FC = ({ inUserList, draggable, onClick, + headingLevel = 6, }) => { if (isLoading) { return ( @@ -335,7 +337,12 @@ const LearningResourceListCard: React.FC = ({ - + {resource.title} diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx index 76101733ff..3dbf591cd6 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCardCondensed.tsx @@ -103,6 +103,7 @@ const LearningResourceListCardCondensed: React.FC< inLearningPath, inUserList, draggable, + headingLevel = 6, }) => { if (isLoading) { return ( @@ -129,7 +130,12 @@ const LearningResourceListCardCondensed: React.FC< - + {resource.title} diff --git a/learning_resources/etl/loaders.py b/learning_resources/etl/loaders.py index 17f88d16d5..301eeede58 100644 --- a/learning_resources/etl/loaders.py +++ b/learning_resources/etl/loaders.py @@ -741,6 +741,8 @@ def calculate_completeness( content_keys = CONTENT_TAG_CATEGORIES.values() content_tags_dict = dict(zip(content_keys, [0] * len(content_keys))) for content_file_tags in content_tags: + if content_file_tags is None: + continue for content_tag in content_file_tags: category = CONTENT_TAG_CATEGORIES.get(content_tag) if category: @@ -799,7 +801,7 @@ def load_content_files( content_files_ids = [] content_tags = [] for content_file in content_files_data: - content_tags.append(content_file.get("content_tags", [])) + content_tags.append(content_file.get("content_tags") or []) content_files_ids.append(load_content_file(course_run, content_file)) for file in ( ContentFile.objects.filter(run=course_run) diff --git a/learning_resources/etl/loaders_test.py b/learning_resources/etl/loaders_test.py index 72b074754a..2af2c9b3a2 100644 --- a/learning_resources/etl/loaders_test.py +++ b/learning_resources/etl/loaders_test.py @@ -1881,6 +1881,72 @@ def test_calculate_completeness(mocker, is_scholar_course, tag_counts, expected_ assert mock_index.call_count == (1 if resource.completeness != 1.0 else 0) +def test_calculate_completeness_with_none_content_tags(mocker): + """Test that calculate_completeness handles None values in content_tags list""" + mock_index = mocker.patch("learning_resources.etl.loaders.update_index") + resource = LearningResourceFactory.create( + is_course=True, + etl_source=ETLSource.ocw.name, + platform=LearningResourcePlatformFactory.create(code=PlatformType.ocw.name), + offered_by=LearningResourceOfferorFactory.create(is_ocw=True), + completeness=0.0, + ) + run = resource.runs.first() + + # Create some content files with tags + content_tag = LearningResourceContentTagFactory.create(name="Lecture Videos") + ContentFileFactory.create_batch(12, run=run, content_tags=[content_tag]) + + # Test with content_tags list containing None values + content_tags_with_none = [["Lecture Videos"]] * 12 + [None, None] + + # Should not raise an error and should calculate score based on non-None values + score = calculate_completeness(run, content_tags=content_tags_with_none) + assert score == 0.2 # 12 lecture videos / 24 = 0.5 * 0.4 = 0.2 + assert mock_index.call_count == 1 + + +def test_load_content_files_with_none_content_tags(mocker): + """Test that load_content_files handles None content_tags in source data""" + course = LearningResourceFactory.create(is_course=True, create_runs=False) + course_run = LearningResourceRunFactory.create( + published=True, learning_resource=course + ) + + # Content data with some files having None content_tags + content_data = [ + {"uid": "file1", "content_tags": ["Lecture Videos"]}, + {"uid": "file2", "content_tags": None}, # None value + {"uid": "file3", "content_tags": ["Lecture Notes"]}, + {"uid": "file4"}, # Missing content_tags key + ] + + mock_load_content_file = mocker.patch( + "learning_resources.etl.loaders.load_content_file", + side_effect=lambda run, _data: ContentFileFactory.create(run=run).id, + autospec=True, + ) + mocker.patch( + "learning_resources_search.plugins.tasks.index_run_content_files.si", + ) + mock_calc_score = mocker.patch( + "learning_resources.etl.loaders.calculate_completeness" + ) + + # Should not raise an error + result = load_content_files(course_run, content_data, calc_completeness=True) + + assert mock_load_content_file.call_count == len(content_data) + assert mock_calc_score.call_count == 1 + assert len(result) == len(content_data) + + # Verify content_tags passed to calculate_completeness doesn't contain None + call_args = mock_calc_score.call_args + content_tags_arg = call_args.kwargs.get("content_tags") + # All None values should have been converted to empty lists + assert all(tags == [] or isinstance(tags, list) for tags in content_tags_arg) + + def test_course_with_unpublished_force_ingest_is_test_mode(): """ Test that a course with force_ingest set to True diff --git a/learning_resources/etl/ocw.py b/learning_resources/etl/ocw.py index 8187db687e..a2c174fa78 100644 --- a/learning_resources/etl/ocw.py +++ b/learning_resources/etl/ocw.py @@ -308,8 +308,12 @@ def transform_run(course_data: dict) -> dict: return { "run_id": course_data["run_id"], "published": True, - "instructors": parse_instructors(course_data.get("instructors", [])), - "description": clean_data(course_data.get("course_description_html")), + "instructors": parse_instructors(course_data.get("instructors") or []), + "description": clean_data( + course_data.get("course_description_html") + or course_data.get("course_description ") + or "" + ), "year": year, "semester": semester, "status": RunStatus.current.value, @@ -317,18 +321,20 @@ def transform_run(course_data: dict) -> dict: "url": urljoin(settings.OCW_BASE_URL, image_src) if image_src else None, "description": course_data.get("course_image_metadata", {}).get( "description" - ), + ) + or "", "alt": ( course_data.get("course_image_metadata", {}) .get("image_metadata", {}) .get("image-alt") - ), + ) + or "", }, - "level": transform_levels(course_data.get("level", [])), + "level": transform_levels(course_data.get("level") or []), "last_modified": course_data.get("last_modified"), - "title": course_data.get("course_title"), - "slug": course_data.get("slug"), - "url": course_data["url"], + "title": course_data.get("course_title") or "", + "slug": course_data.get("slug") or "", + "url": course_data["url"] or "", "availability": Availability.anytime.name, "delivery": parse_delivery(course_data), "format": [Format.asynchronous.name], diff --git a/learning_resources/etl/ocw_test.py b/learning_resources/etl/ocw_test.py index ee14177cbf..9127cc486c 100644 --- a/learning_resources/etl/ocw_test.py +++ b/learning_resources/etl/ocw_test.py @@ -15,6 +15,7 @@ Format, LearningResourceDelivery, Pace, + RunStatus, ) from learning_resources.etl.constants import CourseNumberType, ETLSource from learning_resources.etl.ocw import ( @@ -22,6 +23,7 @@ transform_content_files, transform_contentfile, transform_course, + transform_run, ) from learning_resources.factories import ( ContentFileFactory, @@ -366,3 +368,93 @@ def test_parse_topics(mocker, has_learn_topics): {"name": "Political Science"}, {"name": "Political Science"}, ] + + +@pytest.mark.parametrize( + ("course_description_html", "course_description", "expected_description"), + [ + ( + "

    This is a course description

    ", + None, + "

    This is a course description

    ", + ), + (None, "Fallback description text", "Fallback description text"), + (None, None, ""), + ( + "

    Primary description

    ", + "Fallback description", + "

    Primary description

    ", + ), + ("", "Fallback description text", "Fallback description text"), + ("", "", ""), + ("

    Valid HTML

    ", None, "

    Valid HTML

    "), + ], +) +def test_transform_run_description_handling( + settings, course_description_html, course_description, expected_description +): + """Test that transform_run correctly handles various description field scenarios""" + settings.OCW_BASE_URL = "http://test.edu/" + + # Build minimal course_data with required fields + course_data = { + "run_id": "test-run-id", + "url": "http://test.edu/test-course", + "instructors": [], + "term": "Fall", + "year": 2024, + "level": ["Undergraduate"], # Use enum value, not name + "image_src": None, + "course_image_metadata": {}, + "course_title": "Test Course", + "slug": "test-course", + "last_modified": "2024-01-01T00:00:00Z", + } + + # Add description fields based on test parameters + if course_description_html is not None: + course_data["course_description_html"] = course_description_html + if course_description is not None: + # Note: the key has a trailing space, which seems like a typo in the original code + course_data["course_description "] = course_description + + result = transform_run(course_data) + + # Verify the description was processed correctly + assert result["description"] == clean_data(expected_description) + + # Verify other required fields are present + assert result["run_id"] == "test-run-id" + assert result["published"] is True + assert result["status"] == RunStatus.current.value + assert result["year"] == 2024 + assert result["semester"] == "Fall" + assert result["level"] == ["undergraduate"] # Output is lowercase enum name + assert result["availability"] == Availability.anytime.name + assert result["delivery"] is not None + assert result["format"] == [Format.asynchronous.name] + assert result["pace"] == [Pace.self_paced.name] + + +def test_transform_run_missing_description_fields(settings): + """Test transform_run when description fields are missing entirely""" + settings.OCW_BASE_URL = "http://test.edu/" + + course_data = { + "run_id": "test-run-id", + "url": "http://test.edu/test-course", + "instructors": [], + "term": None, + "year": None, + "level": [], + "image_src": None, + "course_image_metadata": {}, + "course_title": "Test Course", + "slug": "test-course", + "last_modified": "2024Fcontent_ta-01-01T00:00:00Z", + } + + result = transform_run(course_data) + + # Should return empty string when description fields are missing or None + assert result["description"] == "" diff --git a/learning_resources/filters.py b/learning_resources/filters.py index 51f4ffb721..64d62cad22 100644 --- a/learning_resources/filters.py +++ b/learning_resources/filters.py @@ -78,18 +78,18 @@ class LearningResourceFilter(FilterSet): topic = CharInFilter( label="Topics covered by the resources. Load the '/api/v1/topics' endpoint " "for a list of topics", - method="filter_topic", + field_name="topics__name__iexact", ) course_feature = CharInFilter( label="Content feature for the resources. Load the 'api/v1/course_features' " "endpoint for a list of course features", - method="filter_course_feature", + field_name="content_tags__name__iexact", ) readable_id = CharInFilter( label="A unique text identifier for the resources", - method="filter_readable_id", + field_name="readable_id", ) sortby = ChoiceFilter( @@ -159,23 +159,11 @@ def filter_resource_category(self, queryset, _, value): ) return queryset.filter(query_or_filters) - def filter_readable_id(self, queryset, _, value): - """Readable id filter for leaarning resources""" - return multi_or_filter(queryset, "readable_id", value) - def filter_level(self, queryset, _, value): """Level Filter for learning resources""" values = [[LevelType[val].name] for val in value] return multi_or_filter(queryset, "runs__level__contains", values) - def filter_topic(self, queryset, _, value): - """Topic Filter for learning resources""" - return multi_or_filter(queryset, "topics__name__iexact", value) - - def filter_course_feature(self, queryset, _, value): - """Course Filter for learning resources""" - return multi_or_filter(queryset, "content_tags__name__iexact", value) - def filter_sortby(self, queryset, _, value): """Sort the queryset in the order specified by the value""" sort_param = LEARNING_RESOURCE_SORTBY_OPTIONS[value]["sort"] @@ -201,23 +189,23 @@ class ContentFileFilter(FilterSet): run_id = NumberInFilter( label="The id of the learning resource run the content file belongs to", - method="filter_run_id", + field_name="run_id", ) resource_id = NumberInFilter( label="The id of the learning resource the content file belongs to", - method="filter_resource_id", + field_name="run__learning_resource__id", ) content_feature_type = CharInFilter( label="Content feature type for the content file. Load the " "'api/v1/course_features' endpoint for a list of course features", - method="filter_content_feature_type", + field_name="content_tags__name__iexact", ) edx_module_id = CharInFilter( label="The edx module id of the content file", - method="filter_edx_module_id", + field_name="edx_module_id__iexact", ) offered_by = MultipleChoiceFilter( @@ -236,30 +224,6 @@ class ContentFileFilter(FilterSet): choices=([(platform.name, platform.value) for platform in PlatformType]), ) - def filter_run_id(self, queryset, _, value): - """Run ID Filter for contentfiles""" - return multi_or_filter(queryset, "run_id", value) - - def filter_resource_id(self, queryset, _, value): - """Resource ID Filter for contentfiles""" - return multi_or_filter(queryset, "run__learning_resource__id", value) - - def filter_run_readable_id(self, queryset, _, value): - """Run Readable ID Filter for contentfiles""" - return multi_or_filter(queryset, "run__run_id", value) - - def filter_resource_readable_id(self, queryset, _, value): - """Resource Readable ID Filter for contentfiles""" - return multi_or_filter(queryset, "run__learning_resource__readable_id", value) - - def filter_content_feature_type(self, queryset, _, value): - """Content feature type filter for contentfiles""" - return multi_or_filter(queryset, "content_tags__name__iexact", value) - - def filter_edx_module_id(self, queryset, _, value): - """Edx module id Filter for contentfiles""" - return multi_or_filter(queryset, "edx_module_id__iexact", value) - class Meta: model = ContentFile fields = [] @@ -270,25 +234,17 @@ class TopicFilter(FilterSet): name = CharInFilter( label="Topic name", - method="filter_name", + field_name="name__iexact", ) parent_topic_id = NumberInFilter( label="Parent topic ID", - method="filter_parent_topic_id", + field_name="parent_id", ) is_toplevel = BooleanFilter( label="Filter top-level topics", method="filter_toplevel", ) - def filter_name(self, queryset, _, values): - """Filter by topic name""" - return multi_or_filter(queryset, "name__iexact", values) - def filter_toplevel(self, queryset, _, value): """Filter by top-level (parent == null)""" return queryset.filter(parent__isnull=value) - - def filter_parent_topic_id(self, queryset, _, values): - """Get direct children of a topic""" - return queryset.filter(parent_id__in=values) diff --git a/learning_resources/filters_test.py b/learning_resources/filters_test.py index a496d899a6..9a33a3dc1b 100644 --- a/learning_resources/filters_test.py +++ b/learning_resources/filters_test.py @@ -423,11 +423,9 @@ def test_learning_resource_sortby_new(client): def test_learning_resource_filter_topics(mock_courses, client): """Test that the topic filter works""" assert ( - list( - set(mock_courses.ocw_course.topics.all().values_list("name", flat=True)) - & set(mock_courses.mitx_course.topics.all().values_list("name", flat=True)) - ) - == [] + set(mock_courses.ocw_course.topics.all().values_list("name", flat=True)) + & set(mock_courses.mitx_course.topics.all().values_list("name", flat=True)) + == set() ) results = client.get( diff --git a/main/apps.py b/main/apps.py index e2ff1cfdda..ec45f3ad77 100644 --- a/main/apps.py +++ b/main/apps.py @@ -11,6 +11,7 @@ class MainConfig(AppConfig): def ready(self): """Initialize the app""" + import main.schema # noqa: F401 from main import features features.configure() diff --git a/main/filters.py b/main/filters.py index 2697433b42..8c18e091f9 100644 --- a/main/filters.py +++ b/main/filters.py @@ -37,18 +37,42 @@ def multi_or_filter( return queryset.filter(query_or_filters) -class CharInFilter(BaseInFilter, CharFilter): +class BaseInFilterExplode(BaseInFilter): + """BaseIn filter that provides better help text for OpenAPI docs.""" + + help_text: str = "Separate values as ?field=value1&field=value2..." + + def __init__(self, *args, **kwargs): + kwargs.setdefault("help_text", kwargs.get("label", self.help_text)) + super().__init__(*args, **kwargs) + + +class CharInFilter(BaseInFilterExplode, CharFilter): """Filter that allows for multiple character values""" + def filter(self, qs, value): + """Apply multi-OR filter logic automatically""" + if value: + return multi_or_filter(qs, self.field_name, value) + return qs + -class NumberInFilter(BaseInFilter, NumberFilter): +class NumberInFilter(BaseInFilterExplode, NumberFilter): """Filter that allows for multiple numeric values""" + def filter(self, qs, value): + """Apply multi-OR filter logic automatically""" + if value: + return multi_or_filter(qs, self.field_name, value) + return qs + class MultipleOptionsFilterBackend(DjangoFilterBackend): """ Custom filter backend that handles multiple values for the same key in various formats + - MultipleChoiceFilter supports repeated values ("explode") or commas + - CharInFilter and NumberInFilter supports only repeated values ("explode") """ def get_filterset_kwargs(self, request, queryset, view): # noqa: ARG002 diff --git a/main/schema.py b/main/schema.py new file mode 100644 index 0000000000..1bcd9d7a5d --- /dev/null +++ b/main/schema.py @@ -0,0 +1,16 @@ +from django_filters import BaseCSVFilter +from drf_spectacular.contrib.django_filters import DjangoFilterExtension + + +class CustomDjangoFilterExtension(DjangoFilterExtension): + priority = DjangoFilterExtension.priority + 1 + + def resolve_filter_field(self, *args, **kwargs): + resolved = super().resolve_filter_field(*args, **kwargs) + filter_field = args[4] + if isinstance(filter_field, BaseCSVFilter): + if len(resolved) != 1: + msg = "Expected a single resolved field for BaseCSVFilter" + raise ValueError(msg) + resolved[0]["explode"] = True + return resolved diff --git a/main/settings.py b/main/settings.py index 8a501843ed..e5f08bcce4 100644 --- a/main/settings.py +++ b/main/settings.py @@ -34,7 +34,7 @@ from main.settings_pluggy import * # noqa: F403 from openapi.settings_spectacular import open_spectacular_settings -VERSION = "0.47.9" +VERSION = "0.47.11" log = logging.getLogger() diff --git a/main/settings_celery.py b/main/settings_celery.py index 65533bc6f3..cd909c801f 100644 --- a/main/settings_celery.py +++ b/main/settings_celery.py @@ -180,6 +180,10 @@ 60 * EMBEDDING_SCHEDULE_MINUTES, ), # default is every 30 minutes }, + "daily_topic_embeddings_sync": { + "task": "vector_search.tasks.sync_topics", + "schedule": crontab(minute=0, hour="6,18,23"), # 2am 2pm and 7pm EST + }, } ) diff --git a/openapi/specs/v1.yaml b/openapi/specs/v1.yaml index fe59294e1a..a48bc94032 100644 --- a/openapi/specs/v1.yaml +++ b/openapi/specs/v1.yaml @@ -338,8 +338,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature type for the content file. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: edx_module_id @@ -347,8 +348,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: The edx module id of the content file + explode: true style: form - in: path name: learning_resource_id @@ -451,9 +452,9 @@ paths: schema: type: array items: - type: number - description: Multiple values may be separated by commas. - explode: false + type: integer + description: The id of the learning resource the content file belongs to + explode: true style: form - in: query name: run_id @@ -461,8 +462,9 @@ paths: type: array items: type: number - description: Multiple values may be separated by commas. - explode: false + description: The id of the learning resource run the content file belongs + to + explode: true style: form tags: - contentfiles @@ -585,8 +587,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -837,8 +840,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -928,8 +931,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - courses @@ -973,8 +977,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature type for the content file. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: edx_module_id @@ -982,8 +987,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: The edx module id of the content file + explode: true style: form - in: path name: learning_resource_id @@ -1086,9 +1091,9 @@ paths: schema: type: array items: - type: number - description: Multiple values may be separated by commas. - explode: false + type: integer + description: The id of the learning resource the content file belongs to + explode: true style: form - in: query name: run_id @@ -1096,8 +1101,9 @@ paths: type: array items: type: number - description: Multiple values may be separated by commas. - explode: false + description: The id of the learning resource run the content file belongs + to + explode: true style: form tags: - courses @@ -1219,8 +1225,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -1471,8 +1478,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -1562,8 +1569,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - featured @@ -1631,8 +1639,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -1883,8 +1892,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -1974,8 +1983,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learning_resource_display_info @@ -2043,8 +2053,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -2295,8 +2306,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -2386,8 +2397,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learning_resources @@ -2462,8 +2474,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -2711,8 +2724,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -2802,8 +2815,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learning_resources @@ -2859,8 +2873,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -3108,8 +3123,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -3199,8 +3214,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learning_resources @@ -3225,8 +3241,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature type for the content file. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: edx_module_id @@ -3234,8 +3251,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: The edx module id of the content file + explode: true style: form - in: path name: learning_resource_id @@ -3338,9 +3355,9 @@ paths: schema: type: array items: - type: number - description: Multiple values may be separated by commas. - explode: false + type: integer + description: The id of the learning resource the content file belongs to + explode: true style: form - in: query name: run_id @@ -3348,8 +3365,9 @@ paths: type: array items: type: number - description: Multiple values may be separated by commas. - explode: false + description: The id of the learning resource run the content file belongs + to + explode: true style: form tags: - learning_resources @@ -3571,8 +3589,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -3823,8 +3842,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -3914,8 +3933,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learning_resources @@ -6052,8 +6072,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -6304,8 +6325,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -6395,8 +6416,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - learningpaths @@ -6804,8 +6826,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -7056,8 +7079,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -7147,8 +7170,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - podcast_episodes @@ -7216,8 +7240,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -7468,8 +7493,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -7559,8 +7584,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - podcasts @@ -7715,8 +7741,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -7967,8 +7994,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -8058,8 +8085,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - programs @@ -8162,8 +8190,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topic name + explode: true style: form - name: offset required: false @@ -8177,8 +8205,8 @@ paths: type: array items: type: number - description: Multiple values may be separated by commas. - explode: false + description: Parent topic ID + explode: true style: form tags: - topics @@ -8533,8 +8561,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -8785,8 +8814,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -8876,8 +8905,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - video_playlists @@ -9011,8 +9041,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Content feature for the resources. Load the 'api/v1/course_features' + endpoint for a list of course features + explode: true style: form - in: query name: delivery @@ -9263,8 +9294,8 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: A unique text identifier for the resources + explode: true style: form - in: query name: resource_category @@ -9354,8 +9385,9 @@ paths: type: array items: type: string - description: Multiple values may be separated by commas. - explode: false + description: Topics covered by the resources. Load the '/api/v1/topics' endpoint + for a list of topics + explode: true style: form tags: - videos diff --git a/yarn.lock b/yarn.lock index 41b8652d24..889357270f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3205,13 +3205,13 @@ __metadata: languageName: node linkType: hard -"@mitodl/mitxonline-api-axios@npm:^2025.10.21": - version: 2025.10.21 - resolution: "@mitodl/mitxonline-api-axios@npm:2025.10.21" +"@mitodl/mitxonline-api-axios@npm:^2025.11.5": + version: 2025.11.5 + resolution: "@mitodl/mitxonline-api-axios@npm:2025.11.5" dependencies: "@types/node": "npm:^20.11.19" axios: "npm:^1.6.5" - checksum: 10/2285ecfb20946dabd8efcce5a0614c5370c2d7759e01417d799acab25d0e5964bdc7a5789989e075e23e180cc039ccfca4a0c03ee97904b7e2e1fafed193f448 + checksum: 10/5996696d439382e9f2862b1dc3178d3cb216a3ec86c2f133514b8d654b704b77dce2084ce28317e3e28038dacb715d2418e36ec47a4fc143c46b3cc7fcae7805 languageName: node linkType: hard @@ -7383,7 +7383,7 @@ __metadata: resolution: "api@workspace:frontends/api" dependencies: "@faker-js/faker": "npm:^10.0.0" - "@mitodl/mitxonline-api-axios": "npm:^2025.10.21" + "@mitodl/mitxonline-api-axios": "npm:^2025.11.5" "@tanstack/react-query": "npm:^5.66.0" "@testing-library/react": "npm:^16.3.0" axios: "npm:^1.12.2" @@ -14066,7 +14066,7 @@ __metadata: "@emotion/styled": "npm:^11.11.0" "@faker-js/faker": "npm:^10.0.0" "@mitodl/course-search-utils": "npm:^3.5.0" - "@mitodl/mitxonline-api-axios": "npm:^2025.10.21" + "@mitodl/mitxonline-api-axios": "npm:^2025.11.5" "@mitodl/smoot-design": "npm:^6.17.1" "@next/bundle-analyzer": "npm:^14.2.15" "@react-pdf/renderer": "npm:^4.3.0"