From 38eb61cab98a96a904167fec315b82fd0f70dc6c Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Fri, 28 Jun 2024 14:26:02 +0200 Subject: [PATCH 01/20] Updates to ChoiceBox; Checkbox, Radio components (#1174) * Refactor out ChoiceBoxField * Positioning styles * ChoiceBox stories * Field stories * Default grid spacing * Update hover styles * Checkbox ol-component. Reuse in ChoiceBox and styles for SearchDisplay/course-search-utils * Upgrade storybook * Radio input ol-component * Name prop optional * Fixes issue with hover styled on inner input while checked * Fixes inner input losing hover state while out label hovered * Revert to using mui radio input here * Lint complaint * Convert styles to @emotion/css objects * Styled form label * Re-style for top right anchored input control * Stylelint vs prettier --- frontends/mit-open/package.json | 2 +- .../Dialogs/AddToListDialog.tsx | 6 +- .../Profile/CertificateChoice.tsx | 2 +- .../page-components/Profile/GoalsChoice.tsx | 4 +- .../SearchDisplay/SearchDisplay.tsx | 21 +- .../pages/OnboardingPage/OnboardingPage.tsx | 2 +- frontends/ol-components/package.json | 1 + .../components/Checkbox/Checkbox.stories.tsx | 37 +++ .../src/components/Checkbox/Checkbox.tsx | 98 ++++++ .../ChoiceBox/ChoiceBox.stories.tsx | 60 ++++ .../src/components/ChoiceBox/ChoiceBox.tsx | 232 +++----------- .../components/ChoiceBox/ChoiceBoxField.tsx | 119 +++++++ .../ChoiceBoxFieldCheckbox.stories.tsx | 88 +++++ .../ChoiceBox/ChoiceBoxFieldRadio.stories.tsx | 70 ++++ .../src/components/Radio/Radio.stories.tsx | 37 +++ .../src/components/Radio/Radio.tsx | 101 ++++++ frontends/ol-components/src/index.ts | 11 +- yarn.lock | 302 ++++++++++++++---- 18 files changed, 923 insertions(+), 270 deletions(-) create mode 100644 frontends/ol-components/src/components/Checkbox/Checkbox.stories.tsx create mode 100644 frontends/ol-components/src/components/Checkbox/Checkbox.tsx create mode 100644 frontends/ol-components/src/components/ChoiceBox/ChoiceBox.stories.tsx create mode 100644 frontends/ol-components/src/components/ChoiceBox/ChoiceBoxField.tsx create mode 100644 frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldCheckbox.stories.tsx create mode 100644 frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldRadio.stories.tsx create mode 100644 frontends/ol-components/src/components/Radio/Radio.stories.tsx create mode 100644 frontends/ol-components/src/components/Radio/Radio.tsx diff --git a/frontends/mit-open/package.json b/frontends/mit-open/package.json index 16957214b8..da54eb16d7 100644 --- a/frontends/mit-open/package.json +++ b/frontends/mit-open/package.json @@ -42,7 +42,7 @@ "html-webpack-plugin": "^5.6.0", "mini-css-extract-plugin": "^2.6.1", "ol-test-utilities": "0.0.0", - "storybook": "^8.0.9", + "storybook": "^8.1.10", "swc-loader": "^0.2.6", "tsconfig-paths-webpack-plugin": "^4.1.0", "webpack": "^5.91.0", diff --git a/frontends/mit-open/src/page-components/Dialogs/AddToListDialog.tsx b/frontends/mit-open/src/page-components/Dialogs/AddToListDialog.tsx index d44b7413e1..5e9dcb9371 100644 --- a/frontends/mit-open/src/page-components/Dialogs/AddToListDialog.tsx +++ b/frontends/mit-open/src/page-components/Dialogs/AddToListDialog.tsx @@ -2,7 +2,7 @@ import React, { useState } from "react" import { BasicDialog, Chip, - Checkbox, + MuiCheckbox, List, ListItem, ListItemButton, @@ -312,7 +312,7 @@ const LearningPathToggleList: React.FC = ({ aria-disabled={disabled} onClick={disabled ? undefined : handleToggle(list)} > - = ({ aria-disabled={disabled} onClick={disabled ? undefined : handleToggle(list)} > - = ({ { return ( ) } @@ -141,106 +112,5 @@ interface ChoiceBoxGridProps { gridItemProps?: FieldGridProps } -interface BaseChoiceBoxFieldProps extends ChoiceBoxGridProps { - label: React.ReactNode - choices: ChoiceBoxChoice[] - onChange: ChoiceBoxProps["onChange"] - className?: string -} - -interface ChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { - type: ChoiceBoxProps["type"] - isChecked: (choice: ChoiceBoxChoice) => boolean -} - -const ChoiceBoxField: React.FC = ({ - label, - choices, - type, - isChecked, - onChange, - className, - gridProps, - gridItemProps, -}: ChoiceBoxFieldProps) => { - const fieldGridProps: GridProps = { - spacing: 2, - justifyContent: "center", - columns: { - lg: 12, - xs: 4, - }, - ...gridProps, - } - const fieldGridItemProps = { - ...gridItemProps, - } - return ( - - - {label} - - - - {choices.map((choice, index) => ( - - - - ))} - - - - ) -} - -interface CheckboxChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { - values?: string[] -} - -const CheckboxChoiceBoxField: React.FC = ({ - values, - ...props -}) => { - return ( - values?.indexOf(choice.value) !== -1} - {...props} - /> - ) -} - -interface RadioChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { - value?: string -} - -const RadioChoiceBoxField: React.FC = ({ - value, - ...props -}) => { - return ( - choice.value === value} - {...props} - /> - ) -} - -export { ChoiceBox, CheckboxChoiceBoxField, RadioChoiceBoxField } -export type { - ChoiceBoxProps, - ChoiceBoxChoice, - ChoiceBoxGridProps, - CheckboxChoiceBoxFieldProps, - RadioChoiceBoxFieldProps, -} +export { ChoiceBox } +export type { ChoiceBoxProps, ChoiceBoxChoice, ChoiceBoxGridProps } diff --git a/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxField.tsx b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxField.tsx new file mode 100644 index 0000000000..636c547f5e --- /dev/null +++ b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxField.tsx @@ -0,0 +1,119 @@ +import React from "react" +import styled from "@emotion/styled" +import FormControl from "@mui/material/FormControl" +import FormGroup from "@mui/material/FormGroup" +import FormLabel from "@mui/material/FormLabel" +import Grid, { type GridProps } from "@mui/material/Grid" +import { theme } from "../ThemeProvider/ThemeProvider" +import { ChoiceBox } from "./ChoiceBox" +import type { + ChoiceBoxGridProps, + ChoiceBoxChoice, + ChoiceBoxProps, +} from "./ChoiceBox" + +const Label = styled.div` + width: 100%; + ${{ ...theme.typography.subtitle2 }} + color: ${theme.custom.colors.darkGray2}; + margin-bottom: 8px; +` + +interface BaseChoiceBoxFieldProps extends ChoiceBoxGridProps { + label: React.ReactNode + choices: ChoiceBoxChoice[] + onChange: ChoiceBoxProps["onChange"] + className?: string +} + +interface ChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { + type: ChoiceBoxProps["type"] + name?: string + isChecked: (choice: ChoiceBoxChoice) => boolean +} + +const ChoiceBoxField: React.FC = ({ + label, + name, + choices, + type, + isChecked, + onChange, + className, + gridProps, + gridItemProps, +}: ChoiceBoxFieldProps) => { + const fieldGridProps: GridProps = { + spacing: "12px", + justifyContent: "center", + columns: { + lg: 12, + xs: 4, + }, + ...gridProps, + } + return ( + + + + + + + {choices.map((choice, index) => ( + + + + ))} + + + + ) +} + +interface CheckboxChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { + values?: string[] +} + +const CheckboxChoiceBoxField: React.FC = ({ + values, + ...props +}) => { + return ( + !!values?.includes(choice.value)} + {...props} + /> + ) +} + +interface RadioChoiceBoxFieldProps extends BaseChoiceBoxFieldProps { + value?: string + name?: string +} + +const RadioChoiceBoxField: React.FC = ({ + value, + ...props +}) => { + return ( + choice.value === value} + {...props} + /> + ) +} + +export { CheckboxChoiceBoxField, RadioChoiceBoxField } +export type { CheckboxChoiceBoxFieldProps, RadioChoiceBoxFieldProps } diff --git a/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldCheckbox.stories.tsx b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldCheckbox.stories.tsx new file mode 100644 index 0000000000..c0a12525e1 --- /dev/null +++ b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldCheckbox.stories.tsx @@ -0,0 +1,88 @@ +import React, { useState } from "react" +import type { Meta, StoryObj } from "@storybook/react" +import { faker } from "@faker-js/faker/locale/en" +import { CheckboxChoiceBoxField } from "./ChoiceBoxField" +import type { CheckboxChoiceBoxFieldProps } from "./ChoiceBoxField" + +const sentence = (count?: number) => + faker.lorem.sentence(count ?? { min: 1, max: 3 }).slice(0, -1) + +const CHOICES = [ + { label: sentence(), value: "item1" }, + { label: sentence(), value: "item2" }, + { label: sentence(), value: "item3" }, + { label: sentence(), value: "item4" }, + { label: sentence(), value: "item5" }, + { label: sentence(), value: "item6" }, + { label: sentence(), value: "item7" }, + { label: sentence(), value: "item8" }, + { label: sentence(), value: "item9" }, + { label: sentence(), value: "item10" }, +] + +const StateWrapper = (props: CheckboxChoiceBoxFieldProps) => { + const [values, setValues] = useState([]) + + const handleChange = (event: React.SyntheticEvent) => { + setValues((prev: string[]) => { + const target = event.target as HTMLInputElement + if (target.checked) { + return [...prev, target.value] + } else { + return prev.filter((value) => value !== target.value) + } + }) + } + + return ( + + ) +} + +const meta: Meta = { + title: "ol-components/ChoiceBoxField", + component: StateWrapper, +} + +export default meta + +type Story = StoryObj + +export const Checkbox: Story = { + args: { + label: "Choice Box Field", + choices: CHOICES, + }, +} + +export const CheckboxVaryingLength: Story = { + args: { + label: "Choice Box Field", + choices: CHOICES.map((choices) => ({ + ...choices, + label: sentence(Math.random() * 30), + })), + }, +} + +export const CheckboxDescriptions: Story = { + args: { + label: "Choice Box Field", + choices: CHOICES.map((choice) => ({ + ...choice, + description: faker.lorem.paragraph(2), + })), + }, +} diff --git a/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldRadio.stories.tsx b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldRadio.stories.tsx new file mode 100644 index 0000000000..fc8df86839 --- /dev/null +++ b/frontends/ol-components/src/components/ChoiceBox/ChoiceBoxFieldRadio.stories.tsx @@ -0,0 +1,70 @@ +import React, { useState, ChangeEvent } from "react" +import type { Meta, StoryObj } from "@storybook/react" +import { faker } from "@faker-js/faker/locale/en" +import { RadioChoiceBoxField } from "./ChoiceBoxField" +import type { RadioChoiceBoxFieldProps } from "./ChoiceBoxField" + +const sentence = () => faker.lorem.sentence({ min: 1, max: 3 }).slice(0, -1) + +const CHOICES = [ + { label: sentence(), value: "item1" }, + { label: sentence(), value: "item2" }, + { label: sentence(), value: "item3" }, + { label: sentence(), value: "item4" }, + { label: sentence(), value: "item5" }, + { label: sentence(), value: "item6" }, + { label: sentence(), value: "item7" }, + { label: sentence(), value: "item8" }, + { label: sentence(), value: "item9" }, + { label: sentence(), value: "item10" }, +] + +const StateWrapper = (props: RadioChoiceBoxFieldProps) => { + const [value, setValue] = useState("") + + const handleChange = (event: ChangeEvent) => { + setValue(event.target.value) + } + + return ( + + ) +} + +const meta: Meta = { + title: "ol-components/ChoiceBoxField", + component: StateWrapper, +} + +export default meta + +type Story = StoryObj + +export const Radio: Story = { + args: { + label: "Choice Box Field Label", + choices: CHOICES, + }, +} + +export const RadioDescriptions: Story = { + args: { + label: "Choice Box Field Label", + choices: CHOICES.map((choice) => ({ + ...choice, + description: faker.lorem.paragraph(2), + })), + }, +} diff --git a/frontends/ol-components/src/components/Radio/Radio.stories.tsx b/frontends/ol-components/src/components/Radio/Radio.stories.tsx new file mode 100644 index 0000000000..d54413e056 --- /dev/null +++ b/frontends/ol-components/src/components/Radio/Radio.stories.tsx @@ -0,0 +1,37 @@ +import React, { useState, ChangeEvent } from "react" +import type { Meta, StoryObj } from "@storybook/react" +import { Radio } from "./Radio" +import type { RadioProps } from "./Radio" + +const StateWrapper = (props: RadioProps) => { + const [checked, setChecked] = useState(!!props.checked) + + const handleChange = (event: ChangeEvent) => { + setChecked(event.target.checked) + props.onChange?.(event) + } + + return +} + +const meta: Meta = { + title: "ol-components/Radio", + component: StateWrapper, + argTypes: { + onChange: { + action: "change", + }, + }, +} + +export default meta + +type Story = StoryObj + +export const Simple: Story = {} + +export const WithLabel: Story = { + args: { + label: "Radio", + }, +} diff --git a/frontends/ol-components/src/components/Radio/Radio.tsx b/frontends/ol-components/src/components/Radio/Radio.tsx new file mode 100644 index 0000000000..153eb21f53 --- /dev/null +++ b/frontends/ol-components/src/components/Radio/Radio.tsx @@ -0,0 +1,101 @@ +import React from "react" +import styled from "@emotion/styled" +import { css } from "@emotion/react" +import { theme } from "../ThemeProvider/ThemeProvider" + +// prettier-ignore +const hoverStyles = css`background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20Z' fill='${encodeURIComponent(theme.custom.colors.silverGrayDark)}'/%3E%3C/svg%3E%0A");` + +// prettier-ignore +const checkedStyles = css`background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20ZM12 17C9.23858 17 7 14.7614 7 12C7 9.23858 9.23858 7 12 7C14.7614 7 17 9.23858 17 12C17 14.7614 14.7614 17 12 17Z' fill='${encodeURIComponent(theme.custom.colors.red)}'/%3E%3C/svg%3E%0A");` + +// prettier-ignore +const containerStyles = css` + input[type="radio"] { + margin-left: 0; + margin-right: 0; + height: 24px; + width: 24px; + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg width='24' height='24' viewBox='0 0 24 24' fill='none' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M12 22C6.47715 22 2 17.5228 2 12C2 6.47715 6.47715 2 12 2C17.5228 2 22 6.47715 22 12C22 17.5228 17.5228 22 12 22ZM12 20C16.4183 20 20 16.4183 20 12C20 7.58172 16.4183 4 12 4C7.58172 4 4 7.58172 4 12C4 16.4183 7.58172 20 12 20Z' fill='${encodeURIComponent(theme.custom.colors.silverGrayLight)}'/%3E%3C/svg%3E%0A"); + background-repeat: no-repeat; + flex-shrink: 0; + cursor: pointer; + } + + input[type="radio"]:hover { + ${hoverStyles} + } + + input[type="radio"]:checked { + ${checkedStyles} + } +` + +const Container = styled.div` + height: 24px; + + label { + display: flex; + align-items: center; + cursor: pointer; + } + + && input[type="radio"] { + margin: 0; + } + + ${containerStyles} + + &:hover input[type="radio"]:not(:checked), + label:hover & input[type="radio"]:not(:checked) { + ${hoverStyles} + } +` + +export type RadioProps = { + label?: string + value?: string + name?: string + checked?: boolean + onChange?: (event: React.ChangeEvent) => void + className?: string +} + +const Radio = ({ + label, + value, + name, + checked, + onChange, + className, +}: RadioProps) => { + return ( + + {label ? ( + + ) : ( + + )} + + ) +} + +Radio.styles = containerStyles + +export { Radio } diff --git a/frontends/ol-components/src/index.ts b/frontends/ol-components/src/index.ts index f8107a07b7..3485640599 100644 --- a/frontends/ol-components/src/index.ts +++ b/frontends/ol-components/src/index.ts @@ -46,8 +46,8 @@ export type { CardContentProps } from "@mui/material/CardContent" export { default as CardMedia } from "@mui/material/CardMedia" export type { CardMediaProps } from "@mui/material/CardMedia" -export { default as Checkbox } from "@mui/material/Checkbox" -export type { CheckboxProps } from "@mui/material/Checkbox" +export { default as MuiCheckbox } from "@mui/material/Checkbox" +export type { CheckboxProps as MuiCheckboxProps } from "@mui/material/Checkbox" export { default as Chip } from "@mui/material/Chip" export type { ChipProps } from "@mui/material/Chip" @@ -119,8 +119,8 @@ export type { ToolbarProps } from "@mui/material/Toolbar" // Mui Form Inputs export { default as Autocomplete } from "@mui/material/Autocomplete" export type { AutocompleteProps } from "@mui/material/Autocomplete" -export { default as Radio } from "@mui/material/Radio" -export type { RadioProps } from "@mui/material/Radio" +export { default as MuiRadio } from "@mui/material/Radio" +export type { RadioProps as MuiRadioProps } from "@mui/material/Radio" export { default as RadioGroup } from "@mui/material/RadioGroup" export type { RadioGroupProps } from "@mui/material/RadioGroup" export { default as ToggleButton } from "@mui/material/ToggleButton" @@ -161,6 +161,7 @@ export * from "./components/BannerPage/BannerPage" export * from "./components/Breadcrumbs/Breadcrumbs" export * from "./components/Card/Card" export * from "./components/Carousel/Carousel" +export * from "./components/Checkbox/Checkbox" export * from "./components/Chips/ChipLink" export * from "./components/EmbedlyCard/EmbedlyCard" export * from "./components/FormDialog/FormDialog" @@ -177,8 +178,10 @@ export * from "./components/ShareTooltip/ShareTooltip" export * from "./components/PlainList/PlainList" export * from "./components/TruncateText/TruncateText" export * from "./components/ThemeProvider/ThemeProvider" +export * from "./components/Radio/Radio" export * from "./components/RadioChoiceField/RadioChoiceField" export * from "./components/ChoiceBox/ChoiceBox" +export * from "./components/ChoiceBox/ChoiceBoxField" export * from "./components/Popover/Popover" export * from "./constants/imgConfigs" diff --git a/yarn.lock b/yarn.lock index ea5d1cfefa..29cb8e7766 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5281,14 +5281,14 @@ __metadata: languageName: node linkType: hard -"@storybook/builder-manager@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/builder-manager@npm:8.1.6" +"@storybook/builder-manager@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/builder-manager@npm:8.1.10" dependencies: "@fal-works/esbuild-plugin-global-externals": "npm:^2.1.2" - "@storybook/core-common": "npm:8.1.6" - "@storybook/manager": "npm:8.1.6" - "@storybook/node-logger": "npm:8.1.6" + "@storybook/core-common": "npm:8.1.10" + "@storybook/manager": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.10" "@types/ejs": "npm:^3.1.1" "@yarnpkg/esbuild-plugin-pnp": "npm:^3.0.0-rc.10" browser-assert: "npm:^1.2.1" @@ -5299,7 +5299,7 @@ __metadata: fs-extra: "npm:^11.1.0" process: "npm:^0.11.10" util: "npm:^0.12.4" - checksum: 10/b4b74a5eebe8db6712c873663c04602056c97c9bd2261b90d4f068eb6e0b98bf3f7e3a4a87aaa151a77a0e06536e163eab81dbfa8e08f47f8e66addb59e65957 + checksum: 10/c1a9a2d9878f601c6b77fb55891df12626a3dc51f11a99f576f3a749dd2c5b53804b7f079aa1d387994fcdfb681a9b50f37ce8c4657858dc49217bb2352e8880 languageName: node linkType: hard @@ -5348,6 +5348,19 @@ __metadata: languageName: node linkType: hard +"@storybook/channels@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/channels@npm:8.1.10" + dependencies: + "@storybook/client-logger": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.10" + "@storybook/global": "npm:^5.0.0" + telejson: "npm:^7.2.0" + tiny-invariant: "npm:^1.3.1" + checksum: 10/7b75ed2cd2185d3207a775e3a4beac1e546b021cce8c23751f783adb22696523c65abc09a37ba76f6f06bedee8a89464bfe6419dddb0b652aa00847bf4237e95 + languageName: node + linkType: hard + "@storybook/channels@npm:8.1.6": version: 8.1.6 resolution: "@storybook/channels@npm:8.1.6" @@ -5361,21 +5374,21 @@ __metadata: languageName: node linkType: hard -"@storybook/cli@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/cli@npm:8.1.6" +"@storybook/cli@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/cli@npm:8.1.10" dependencies: "@babel/core": "npm:^7.24.4" "@babel/types": "npm:^7.24.0" "@ndelangen/get-tarball": "npm:^3.0.7" - "@storybook/codemod": "npm:8.1.6" - "@storybook/core-common": "npm:8.1.6" - "@storybook/core-events": "npm:8.1.6" - "@storybook/core-server": "npm:8.1.6" - "@storybook/csf-tools": "npm:8.1.6" - "@storybook/node-logger": "npm:8.1.6" - "@storybook/telemetry": "npm:8.1.6" - "@storybook/types": "npm:8.1.6" + "@storybook/codemod": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.10" + "@storybook/core-server": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.10" + "@storybook/telemetry": "npm:8.1.10" + "@storybook/types": "npm:8.1.10" "@types/semver": "npm:^7.3.4" "@yarnpkg/fslib": "npm:2.10.3" "@yarnpkg/libzip": "npm:2.3.0" @@ -5404,7 +5417,16 @@ __metadata: bin: getstorybook: ./bin/index.js sb: ./bin/index.js - checksum: 10/4cea556d444cfeb75ad367c81df5e00bc0ed21de2add52689fd0407b86fa7c989c520ab640a4a1117672f0084ea5730b0e1c086e4e4262385d4785f9ca724f25 + checksum: 10/22b586a628d4b91e12652aac4a0103a362e312329be07e563eb435b5d66f812b920fe38fab4db71d6d9c87826f213870d104e6867a5ea351d2a004b8315f08dd + languageName: node + linkType: hard + +"@storybook/client-logger@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/client-logger@npm:8.1.10" + dependencies: + "@storybook/global": "npm:^5.0.0" + checksum: 10/42de7b0a74846376d9183b1e266efce8cf0237532905a0c7c0591c2ed5ab9f357f35e3997cc84ef15d5bd0224ba1c79642b8a5205edeb22c6907a3b427aca52d languageName: node linkType: hard @@ -5417,17 +5439,17 @@ __metadata: languageName: node linkType: hard -"@storybook/codemod@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/codemod@npm:8.1.6" +"@storybook/codemod@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/codemod@npm:8.1.10" dependencies: "@babel/core": "npm:^7.24.4" "@babel/preset-env": "npm:^7.24.4" "@babel/types": "npm:^7.24.0" "@storybook/csf": "npm:^0.1.7" - "@storybook/csf-tools": "npm:8.1.6" - "@storybook/node-logger": "npm:8.1.6" - "@storybook/types": "npm:8.1.6" + "@storybook/csf-tools": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.10" + "@storybook/types": "npm:8.1.10" "@types/cross-spawn": "npm:^6.0.2" cross-spawn: "npm:^7.0.3" globby: "npm:^14.0.1" @@ -5436,7 +5458,7 @@ __metadata: prettier: "npm:^3.1.1" recast: "npm:^0.23.5" tiny-invariant: "npm:^1.3.1" - checksum: 10/8ac1680f0f6a426df9169144fc7a1877ee3c4b3046bf9206405a0b76850d50f05858f3490214656916bd9057a689c6e4a25a4da00fccf7b67aaebdbe722b2a4f + checksum: 10/d79a1901e99b81cf397e96f498a5b213e0a0727294134d9a5720865059f2a5eea64902178c483cc5aed92d8e941e7aff8291b532a87d4b7846655d002ecf9cd0 languageName: node linkType: hard @@ -5461,6 +5483,48 @@ __metadata: languageName: node linkType: hard +"@storybook/core-common@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/core-common@npm:8.1.10" + dependencies: + "@storybook/core-events": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.10" + "@storybook/types": "npm:8.1.10" + "@yarnpkg/fslib": "npm:2.10.3" + "@yarnpkg/libzip": "npm:2.3.0" + chalk: "npm:^4.1.0" + cross-spawn: "npm:^7.0.3" + esbuild: "npm:^0.18.0 || ^0.19.0 || ^0.20.0" + esbuild-register: "npm:^3.5.0" + execa: "npm:^5.0.0" + file-system-cache: "npm:2.3.0" + find-cache-dir: "npm:^3.0.0" + find-up: "npm:^5.0.0" + fs-extra: "npm:^11.1.0" + glob: "npm:^10.0.0" + handlebars: "npm:^4.7.7" + lazy-universal-dotenv: "npm:^4.0.0" + node-fetch: "npm:^2.0.0" + picomatch: "npm:^2.3.0" + pkg-dir: "npm:^5.0.0" + prettier-fallback: "npm:prettier@^3" + pretty-hrtime: "npm:^1.0.3" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.3.7" + tempy: "npm:^3.1.0" + tiny-invariant: "npm:^1.3.1" + ts-dedent: "npm:^2.0.0" + util: "npm:^0.12.4" + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + checksum: 10/fa739c9495b92581c18becbaf64dc02ea32f3e51dd82f4dfc9ba22f2fde63fb3e7564ea1d0c9217dc0c1d168d9cbf8e2e8b7bc0207e3cc8d961149013e383a4b + languageName: node + linkType: hard + "@storybook/core-common@npm:8.1.6": version: 8.1.6 resolution: "@storybook/core-common@npm:8.1.6" @@ -5503,6 +5567,16 @@ __metadata: languageName: node linkType: hard +"@storybook/core-events@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/core-events@npm:8.1.10" + dependencies: + "@storybook/csf": "npm:^0.1.7" + ts-dedent: "npm:^2.0.0" + checksum: 10/2f8b27f1dc14ba33ee80e629b230ba094537b383c49999ec07cf2e21d524e0a522a59978ce559f7e78c03c41112b90408c17e1e7655c031adcb4e36a4ee550d4 + languageName: node + linkType: hard + "@storybook/core-events@npm:8.1.6": version: 8.1.6 resolution: "@storybook/core-events@npm:8.1.6" @@ -5513,28 +5587,28 @@ __metadata: languageName: node linkType: hard -"@storybook/core-server@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/core-server@npm:8.1.6" +"@storybook/core-server@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/core-server@npm:8.1.10" dependencies: "@aw-web-design/x-default-browser": "npm:1.4.126" "@babel/core": "npm:^7.24.4" "@babel/parser": "npm:^7.24.4" "@discoveryjs/json-ext": "npm:^0.5.3" - "@storybook/builder-manager": "npm:8.1.6" - "@storybook/channels": "npm:8.1.6" - "@storybook/core-common": "npm:8.1.6" - "@storybook/core-events": "npm:8.1.6" + "@storybook/builder-manager": "npm:8.1.10" + "@storybook/channels": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.10" "@storybook/csf": "npm:^0.1.7" - "@storybook/csf-tools": "npm:8.1.6" + "@storybook/csf-tools": "npm:8.1.10" "@storybook/docs-mdx": "npm:3.1.0-next.0" "@storybook/global": "npm:^5.0.0" - "@storybook/manager": "npm:8.1.6" - "@storybook/manager-api": "npm:8.1.6" - "@storybook/node-logger": "npm:8.1.6" - "@storybook/preview-api": "npm:8.1.6" - "@storybook/telemetry": "npm:8.1.6" - "@storybook/types": "npm:8.1.6" + "@storybook/manager": "npm:8.1.10" + "@storybook/manager-api": "npm:8.1.10" + "@storybook/node-logger": "npm:8.1.10" + "@storybook/preview-api": "npm:8.1.10" + "@storybook/telemetry": "npm:8.1.10" + "@storybook/types": "npm:8.1.10" "@types/detect-port": "npm:^1.3.0" "@types/diff": "npm:^5.0.9" "@types/node": "npm:^18.0.0" @@ -5562,7 +5636,7 @@ __metadata: util-deprecate: "npm:^1.0.2" watchpack: "npm:^2.2.0" ws: "npm:^8.2.3" - checksum: 10/24121816f2e5c49caa4b42855c3896816e4302a7059c9cbac739e6f997723491d0a60589731c39bd28b71aeff45517bf07f6a306dc6db24f7d5803f73c23e477 + checksum: 10/59713dbc5039747856d123507a1aa0c75d2aca581ce2d63faa5ade3b31be3375c96e86e21e559798b92f4514c163c31da11c23fc7ed91844a99f5ad6c02d45c1 languageName: node linkType: hard @@ -5589,6 +5663,23 @@ __metadata: languageName: node linkType: hard +"@storybook/csf-tools@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/csf-tools@npm:8.1.10" + dependencies: + "@babel/generator": "npm:^7.24.4" + "@babel/parser": "npm:^7.24.4" + "@babel/traverse": "npm:^7.24.1" + "@babel/types": "npm:^7.24.0" + "@storybook/csf": "npm:^0.1.7" + "@storybook/types": "npm:8.1.10" + fs-extra: "npm:^11.1.0" + recast: "npm:^0.23.5" + ts-dedent: "npm:^2.0.0" + checksum: 10/26a8d82b251d6305a1c88d736674386bdc4ed2ffdd2dd8a73ddcd75677dce1e79c9042c7c12b55335744a2453d4e73cd368e503593d763094519ecef8418f596 + languageName: node + linkType: hard + "@storybook/csf-tools@npm:8.1.6": version: 8.1.6 resolution: "@storybook/csf-tools@npm:8.1.6" @@ -5670,6 +5761,29 @@ __metadata: languageName: node linkType: hard +"@storybook/manager-api@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/manager-api@npm:8.1.10" + dependencies: + "@storybook/channels": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.10" + "@storybook/csf": "npm:^0.1.7" + "@storybook/global": "npm:^5.0.0" + "@storybook/icons": "npm:^1.2.5" + "@storybook/router": "npm:8.1.10" + "@storybook/theming": "npm:8.1.10" + "@storybook/types": "npm:8.1.10" + dequal: "npm:^2.0.2" + lodash: "npm:^4.17.21" + memoizerific: "npm:^1.11.3" + store2: "npm:^2.14.2" + telejson: "npm:^7.2.0" + ts-dedent: "npm:^2.0.0" + checksum: 10/60ecc60e2796f3e6d529b7b3ff178b8fc3bedb10582ba20924c4613eccf185d95f3a6f1f58773faa52ca0ad4efc6ea4cf31c1a3f8026b529a57bf1eea4d4288a + languageName: node + linkType: hard + "@storybook/manager-api@npm:8.1.6": version: 8.1.6 resolution: "@storybook/manager-api@npm:8.1.6" @@ -5693,10 +5807,17 @@ __metadata: languageName: node linkType: hard -"@storybook/manager@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/manager@npm:8.1.6" - checksum: 10/307108027f7b3c0a8d79c9c49084c319bd8e5a603cf7af9939dd94b9e53766806f17194c474f06ee7821e8404190c044092e05a08d64dcc2a0a7695329719152 +"@storybook/manager@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/manager@npm:8.1.10" + checksum: 10/e8b08c41a3191c6964e45fbc46bf96db1af1d5e46ad3e77e17024c447ff321fbff317416a3d3c14f2871e2b466f1555d0060314c54b803a1ded511f1734e6b79 + languageName: node + linkType: hard + +"@storybook/node-logger@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/node-logger@npm:8.1.10" + checksum: 10/47321d0c24420c5f3e6938d7a8d69a9080ba0960bd9deb163d088aac81a308abf15dd9ee1ff0c70f5a8a5b304acf417f46bbc18c86c172ab4983eb1404b47ae0 languageName: node linkType: hard @@ -5736,6 +5857,28 @@ __metadata: languageName: node linkType: hard +"@storybook/preview-api@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/preview-api@npm:8.1.10" + dependencies: + "@storybook/channels": "npm:8.1.10" + "@storybook/client-logger": "npm:8.1.10" + "@storybook/core-events": "npm:8.1.10" + "@storybook/csf": "npm:^0.1.7" + "@storybook/global": "npm:^5.0.0" + "@storybook/types": "npm:8.1.10" + "@types/qs": "npm:^6.9.5" + dequal: "npm:^2.0.2" + lodash: "npm:^4.17.21" + memoizerific: "npm:^1.11.3" + qs: "npm:^6.10.0" + tiny-invariant: "npm:^1.3.1" + ts-dedent: "npm:^2.0.0" + util-deprecate: "npm:^1.0.2" + checksum: 10/37f8512fa208181cac4b9a59475ec5687b61b5ce78053c62bfba42074ff2b3fc75b15e81a56d5b0f15b85229baec0c8c699926ce4c27c629a436d66f5cb8fd0f + languageName: node + linkType: hard + "@storybook/preview-api@npm:8.1.6, @storybook/preview-api@npm:^8.0.9": version: 8.1.6 resolution: "@storybook/preview-api@npm:8.1.6" @@ -5849,6 +5992,17 @@ __metadata: languageName: node linkType: hard +"@storybook/router@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/router@npm:8.1.10" + dependencies: + "@storybook/client-logger": "npm:8.1.10" + memoizerific: "npm:^1.11.3" + qs: "npm:^6.10.0" + checksum: 10/c7f28daccf077b9692a34b15e91837e30face2ddbf7c2255da26fc0ef2f40ff9c63a2b6b81eebe50616a222967502e00dcea0689970fb9b1b266e02ba8311ba7 + languageName: node + linkType: hard + "@storybook/router@npm:8.1.6": version: 8.1.6 resolution: "@storybook/router@npm:8.1.6" @@ -5860,19 +6014,19 @@ __metadata: languageName: node linkType: hard -"@storybook/telemetry@npm:8.1.6": - version: 8.1.6 - resolution: "@storybook/telemetry@npm:8.1.6" +"@storybook/telemetry@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/telemetry@npm:8.1.10" dependencies: - "@storybook/client-logger": "npm:8.1.6" - "@storybook/core-common": "npm:8.1.6" - "@storybook/csf-tools": "npm:8.1.6" + "@storybook/client-logger": "npm:8.1.10" + "@storybook/core-common": "npm:8.1.10" + "@storybook/csf-tools": "npm:8.1.10" chalk: "npm:^4.1.0" detect-package-manager: "npm:^2.0.1" fetch-retry: "npm:^5.0.2" fs-extra: "npm:^11.1.0" read-pkg-up: "npm:^7.0.1" - checksum: 10/a38035fae2f09cb9caeaaeae0734e8f807c70ff280c109f825d1121aaa0d8967e95a83539853703f6c5ad4cc26b35eb9c935626b6a08e61ecfaeeb322c478939 + checksum: 10/ab9aa3c4a992236781b2c18f2df37ec60441132a9800c98a2e0139231c19c4672be8d21ce2e07de00eb4360d119fdc45c6c7e416f08e6d79b4bf22d21edfefb3 languageName: node linkType: hard @@ -5894,6 +6048,26 @@ __metadata: languageName: node linkType: hard +"@storybook/theming@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/theming@npm:8.1.10" + dependencies: + "@emotion/use-insertion-effect-with-fallbacks": "npm:^1.0.1" + "@storybook/client-logger": "npm:8.1.10" + "@storybook/global": "npm:^5.0.0" + memoizerific: "npm:^1.11.3" + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 10/009267495e497ee082c30aad85650a7735f6dcc6631e9d305c32c25251204ec3786251f665d034ff745c7add9bb341e79118df7c8cbac33dbd2f4d1ed8f5ee7f + languageName: node + linkType: hard + "@storybook/theming@npm:8.1.6": version: 8.1.6 resolution: "@storybook/theming@npm:8.1.6" @@ -5914,6 +6088,17 @@ __metadata: languageName: node linkType: hard +"@storybook/types@npm:8.1.10": + version: 8.1.10 + resolution: "@storybook/types@npm:8.1.10" + dependencies: + "@storybook/channels": "npm:8.1.10" + "@types/express": "npm:^4.7.0" + file-system-cache: "npm:2.3.0" + checksum: 10/98de62ae9759b4a5b47fd64217fba4335d5e9586c362b530c6fa31328b114ea4664d4632d22d57b99410708ecfc72344ffb67e11f2c3e28d6a4edd4cc97a57d0 + languageName: node + linkType: hard + "@storybook/types@npm:8.1.6": version: 8.1.6 resolution: "@storybook/types@npm:8.1.6" @@ -18467,7 +18652,7 @@ __metadata: react-router-dom: "npm:^6.22.2" react-slick: "npm:^0.30.2" slick-carousel: "npm:^1.8.1" - storybook: "npm:^8.0.9" + storybook: "npm:^8.1.10" swc-loader: "npm:^0.2.6" tiny-invariant: "npm:^1.3.1" tsconfig-paths-webpack-plugin: "npm:^4.1.0" @@ -19114,6 +19299,7 @@ __metadata: react-select: "npm:^5.7.7" react-share: "npm:^5.0.3" react-slick: "npm:^0.30.2" + storybook: "npm:^8.1.10" storybook-addon-react-router-v6: "npm:^2.0.15" tiny-invariant: "npm:^1.3.1" tinycolor2: "npm:^1.6.0" @@ -23554,15 +23740,15 @@ __metadata: languageName: node linkType: hard -"storybook@npm:^8.0.9": - version: 8.1.6 - resolution: "storybook@npm:8.1.6" +"storybook@npm:^8.1.10": + version: 8.1.10 + resolution: "storybook@npm:8.1.10" dependencies: - "@storybook/cli": "npm:8.1.6" + "@storybook/cli": "npm:8.1.10" bin: sb: ./index.js storybook: ./index.js - checksum: 10/08b8ad898272b6a82e24c8c9b8c4b53ba1ca475b9c778671fa03ef7b80f08ece2e88c8ed054894297f9d11bf4c4038bfab2e2c511d66f895384b81976ac474c4 + checksum: 10/c568bd07d124f7232c328dea14ea908c77398f2543b93cd1bb508c95331a0d9355b27b8d067218c63a5aed59a4bfd008f3c279ec0cca7c68903c5c1870418327 languageName: node linkType: hard From 990fd768bc60e676d320174c42d1c1800bbdad42 Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Fri, 28 Jun 2024 13:16:42 -0400 Subject: [PATCH 02/20] Drawer CSS fixes (#1190) * fix drawer close button color * fix drawer width (and hence scrollbars) * restore erroneous deleted image * pre-commit please re-run yourself --- .../LearningResourceExpanded/LearningResourceExpanded.tsx | 5 +---- .../src/components/RoutedDrawer/RoutedDrawer.tsx | 1 - 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx index 238ab875ea..1a64331dcb 100644 --- a/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx +++ b/frontends/ol-components/src/components/LearningResourceExpanded/LearningResourceExpanded.tsx @@ -27,10 +27,7 @@ const Container = styled.div<{ padTop?: boolean }>` padding: 18px 32px 160px; gap: 20px; ${({ padTop }) => (padTop ? "padding-top: 64px;" : "")} - width: 600px; - ${({ theme }) => theme.breakpoints.down("md")} { - width: 550px; - } + width: 516px; ${({ theme }) => theme.breakpoints.down("sm")} { width: auto; } diff --git a/frontends/ol-components/src/components/RoutedDrawer/RoutedDrawer.tsx b/frontends/ol-components/src/components/RoutedDrawer/RoutedDrawer.tsx index 94d1f89753..7248b33ebd 100644 --- a/frontends/ol-components/src/components/RoutedDrawer/RoutedDrawer.tsx +++ b/frontends/ol-components/src/components/RoutedDrawer/RoutedDrawer.tsx @@ -86,7 +86,6 @@ const RoutedDrawer = ( Date: Fri, 28 Jun 2024 19:46:40 +0200 Subject: [PATCH 03/20] Scroll results into view when paginating (#1189) * Scroll into view on paginate * Scroll top of results to center page * Move scroll hook to top of results * Provide scrollIntoView function for tests * Correct ref type --- frontends/jest-shared-setup.ts | 2 ++ .../SearchDisplay/SearchDisplay.tsx | 15 ++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/frontends/jest-shared-setup.ts b/frontends/jest-shared-setup.ts index 4c77acf745..aa53284fc4 100644 --- a/frontends/jest-shared-setup.ts +++ b/frontends/jest-shared-setup.ts @@ -23,6 +23,8 @@ Object.defineProperty(window, "matchMedia", { })), }) +Element.prototype.scrollIntoView = jest.fn() + /* * This used to live in ol-ckeditor but we also need it now for NukaCarousel, * so it's now here so it's available across the board. diff --git a/frontends/mit-open/src/page-components/SearchDisplay/SearchDisplay.tsx b/frontends/mit-open/src/page-components/SearchDisplay/SearchDisplay.tsx index a8822f3506..94ea6772bc 100644 --- a/frontends/mit-open/src/page-components/SearchDisplay/SearchDisplay.tsx +++ b/frontends/mit-open/src/page-components/SearchDisplay/SearchDisplay.tsx @@ -1,4 +1,4 @@ -import React, { useMemo } from "react" +import React, { useMemo, useRef } from "react" import { styled, Pagination, @@ -503,6 +503,7 @@ const SearchDisplay: React.FC = ({ setSearchParams, }) => { const [searchParams] = useSearchParams() + const scrollHook = useRef(null) const activeTab = TABS.find((t) => t.name === searchParams.get("tab")) ?? TABS.find((t) => t.defaultTab) ?? @@ -650,8 +651,8 @@ const SearchDisplay: React.FC = ({ {sortDropdown} - +
{isLoading ? ( {Array(PAGE_SIZE) @@ -680,7 +681,15 @@ const SearchDisplay: React.FC = ({ setPage(newPage)} + onChange={(_, newPage) => { + setPage(newPage) + setTimeout(() => { + scrollHook.current?.scrollIntoView({ + block: "center", + behavior: "smooth", + }) + }, 0) + }} renderItem={(item) => ( Date: Fri, 28 Jun 2024 14:07:19 -0400 Subject: [PATCH 04/20] Add resource category to apis (#1188) --- frontends/api/src/generated/v1/api.ts | 545 +++++++++++++++--- learning_resources/constants.py | 8 + learning_resources/filters.py | 30 + learning_resources/filters_test.py | 31 +- learning_resources/serializers.py | 13 + learning_resources/serializers_test.py | 10 + learning_resources_search/constants.py | 4 +- learning_resources_search/serializers.py | 32 +- learning_resources_search/serializers_test.py | 8 +- openapi/specs/v1.yaml | 336 +++++++++-- 10 files changed, 853 insertions(+), 164 deletions(-) diff --git a/frontends/api/src/generated/v1/api.ts b/frontends/api/src/generated/v1/api.ts index 383eb257ef..0e62fb09ed 100644 --- a/frontends/api/src/generated/v1/api.ts +++ b/frontends/api/src/generated/v1/api.ts @@ -40,7 +40,7 @@ import { } from "./base" /** - * * `resource_type` - resource_type * `certification` - certification * `certification_type` - certification_type * `offered_by` - offered_by * `platform` - platform * `topic` - topic * `department` - department * `level` - level * `course_feature` - course_feature * `professional` - professional * `free` - free * `learning_format` - learning_format * `is_learning_material` - is_learning_material + * * `resource_type` - resource_type * `certification` - certification * `certification_type` - certification_type * `offered_by` - offered_by * `platform` - platform * `topic` - topic * `department` - department * `level` - level * `course_feature` - course_feature * `professional` - professional * `free` - free * `learning_format` - learning_format * `resource_category` - resource_category * @export * @enum {string} */ @@ -58,7 +58,7 @@ export const AggregationsEnumDescriptions = { professional: "professional", free: "free", learning_format: "learning_format", - is_learning_material: "is_learning_material", + resource_category: "resource_category", } as const export const AggregationsEnum = { @@ -111,9 +111,9 @@ export const AggregationsEnum = { */ LearningFormat: "learning_format", /** - * is_learning_material + * resource_category */ - IsLearningMaterial: "is_learning_material", + ResourceCategory: "resource_category", } as const export type AggregationsEnum = @@ -655,6 +655,12 @@ export interface CourseResource { * @memberof CourseResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof CourseResource + */ + resource_category: string /** * * @type {CourseResourceResourceTypeEnum} @@ -1285,6 +1291,12 @@ export interface LearningPathResource { * @memberof LearningPathResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof LearningPathResource + */ + resource_category: string /** * * @type {LearningPathResourceResourceTypeEnum} @@ -3357,12 +3369,6 @@ export interface PercolateQuerySubscriptionRequestRequest { * @memberof PercolateQuerySubscriptionRequestRequest */ certification?: boolean | null - /** - * True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path - * @type {boolean} - * @memberof PercolateQuerySubscriptionRequestRequest - */ - is_learning_material?: boolean | null /** * The type of certificate * `micromasters` - Micromasters Credential * `professional` - Professional Certificate * `completion` - Certificate of Completion * `none` - No Certificate * @type {Array} @@ -3399,6 +3405,12 @@ export interface PercolateQuerySubscriptionRequestRequest { * @memberof PercolateQuerySubscriptionRequestRequest */ learning_format?: Array + /** + * The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array} + * @memberof PercolateQuerySubscriptionRequestRequest + */ + resource_category?: Array /** * * @type {SourceTypeEnum} @@ -3768,6 +3780,12 @@ export interface PodcastEpisodeResource { * @memberof PodcastEpisodeResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof PodcastEpisodeResource + */ + resource_category: string /** * * @type {PodcastEpisodeResourceResourceTypeEnum} @@ -4053,6 +4071,12 @@ export interface PodcastResource { * @memberof PodcastResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof PodcastResource + */ + resource_category: string /** * * @type {PodcastResourceResourceTypeEnum} @@ -4576,6 +4600,12 @@ export interface ProgramResource { * @memberof ProgramResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof ProgramResource + */ + resource_category: string /** * * @type {ProgramResourceResourceTypeEnum} @@ -4769,6 +4799,36 @@ export const RelationTypeEnum = { export type RelationTypeEnum = (typeof RelationTypeEnum)[keyof typeof RelationTypeEnum] +/** + * * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @export + * @enum {string} + */ + +export const ResourceCategoryEnumDescriptions = { + course: "Course", + program: "Program", + learning_material: "Learning Material", +} as const + +export const ResourceCategoryEnum = { + /** + * Course + */ + Course: "course", + /** + * Program + */ + Program: "program", + /** + * Learning Material + */ + LearningMaterial: "learning_material", +} as const + +export type ResourceCategoryEnum = + (typeof ResourceCategoryEnum)[keyof typeof ResourceCategoryEnum] + /** * * `course` - course * `program` - program * `learning_path` - learning_path * `podcast` - podcast * `podcast_episode` - podcast_episode * `video` - video * `video_playlist` - video_playlist * @export @@ -5268,6 +5328,12 @@ export interface VideoPlaylistResource { * @memberof VideoPlaylistResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof VideoPlaylistResource + */ + resource_category: string /** * * @type {VideoPlaylistResourceResourceTypeEnum} @@ -5547,6 +5613,12 @@ export interface VideoResource { * @memberof VideoResource */ free: boolean + /** + * Return the resource category of the resource + * @type {string} + * @memberof VideoResource + */ + resource_category: string /** * * @type {VideoResourceResourceTypeEnum} @@ -7819,6 +7891,7 @@ export const CoursesApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -7839,6 +7912,7 @@ export const CoursesApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: CoursesListSortbyEnum, topic?: Array, @@ -7916,6 +7990,10 @@ export const CoursesApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -8100,6 +8178,7 @@ export const CoursesApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -8120,6 +8199,7 @@ export const CoursesApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: CoursesListSortbyEnum, topic?: Array, @@ -8144,6 +8224,7 @@ export const CoursesApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -8272,6 +8353,7 @@ export const CoursesApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -8478,6 +8560,13 @@ export interface CoursesApiCoursesListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof CoursesApiCoursesList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -8596,6 +8685,7 @@ export class CoursesApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -8770,6 +8860,16 @@ export type CoursesListPlatformEnum = /** * @export */ +export const CoursesListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type CoursesListResourceCategoryEnum = + (typeof CoursesListResourceCategoryEnum)[keyof typeof CoursesListResourceCategoryEnum] +/** + * @export + */ export const CoursesListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -9141,6 +9241,7 @@ export const FeaturedApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -9161,6 +9262,7 @@ export const FeaturedApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: FeaturedListSortbyEnum, topic?: Array, @@ -9238,6 +9340,10 @@ export const FeaturedApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -9336,6 +9442,7 @@ export const FeaturedApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -9356,6 +9463,7 @@ export const FeaturedApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: FeaturedListSortbyEnum, topic?: Array, @@ -9380,6 +9488,7 @@ export const FeaturedApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -9465,6 +9574,7 @@ export const FeaturedApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -9587,6 +9697,13 @@ export interface FeaturedApiFeaturedListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof FeaturedApiFeaturedList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -9657,6 +9774,7 @@ export class FeaturedApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -9793,6 +9911,16 @@ export type FeaturedListPlatformEnum = /** * @export */ +export const FeaturedListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type FeaturedListResourceCategoryEnum = + (typeof FeaturedListResourceCategoryEnum)[keyof typeof FeaturedListResourceCategoryEnum] +/** + * @export + */ export const FeaturedListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -10129,6 +10257,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -10149,6 +10278,7 @@ export const LearningResourcesApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesListSortbyEnum, topic?: Array, @@ -10226,6 +10356,10 @@ export const LearningResourcesApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -10494,6 +10628,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -10514,6 +10649,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesListSortbyEnum, topic?: Array, @@ -10539,6 +10675,7 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -10712,6 +10849,7 @@ export const LearningResourcesApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -10974,6 +11112,13 @@ export interface LearningResourcesApiLearningResourcesListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof LearningResourcesApiLearningResourcesList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -11136,6 +11281,7 @@ export class LearningResourcesApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -11310,6 +11456,16 @@ export type LearningResourcesListPlatformEnum = /** * @export */ +export const LearningResourcesListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type LearningResourcesListResourceCategoryEnum = + (typeof LearningResourcesListResourceCategoryEnum)[keyof typeof LearningResourcesListResourceCategoryEnum] +/** + * @export + */ export const LearningResourcesListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -11361,7 +11517,6 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -11370,6 +11525,7 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesSearchRetrieveSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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] The topic name. To see a list of options go to api/v1/topics/ @@ -11384,7 +11540,6 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -11393,6 +11548,7 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesSearchRetrieveSortbyEnum, topic?: Array, @@ -11442,10 +11598,6 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( localVarQueryParameter["id"] = id } - if (is_learning_material !== undefined) { - localVarQueryParameter["is_learning_material"] = is_learning_material - } - if (learning_format) { localVarQueryParameter["learning_format"] = learning_format } @@ -11478,6 +11630,10 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( localVarQueryParameter["q"] = q } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -11527,7 +11683,6 @@ export const LearningResourcesSearchApiFp = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -11536,6 +11691,7 @@ export const LearningResourcesSearchApiFp = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesSearchRetrieveSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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] The topic name. To see a list of options go to api/v1/topics/ @@ -11550,7 +11706,6 @@ export const LearningResourcesSearchApiFp = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -11559,6 +11714,7 @@ export const LearningResourcesSearchApiFp = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesSearchRetrieveSortbyEnum, topic?: Array, @@ -11578,7 +11734,6 @@ export const LearningResourcesSearchApiFp = function ( department, free, id, - is_learning_material, learning_format, level, limit, @@ -11587,6 +11742,7 @@ export const LearningResourcesSearchApiFp = function ( platform, professional, q, + resource_category, resource_type, sortby, topic, @@ -11639,7 +11795,6 @@ export const LearningResourcesSearchApiFactory = function ( requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -11648,6 +11803,7 @@ export const LearningResourcesSearchApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -11666,7 +11822,7 @@ export const LearningResourcesSearchApiFactory = function ( export interface LearningResourcesSearchApiLearningResourcesSearchRetrieveRequest { /** * Show resource counts by category - * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'is_learning_material'>} + * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'resource_category'>} * @memberof LearningResourcesSearchApiLearningResourcesSearchRetrieve */ readonly aggregations?: Array @@ -11713,13 +11869,6 @@ export interface LearningResourcesSearchApiLearningResourcesSearchRetrieveReques */ readonly id?: Array - /** - * True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path - * @type {boolean} - * @memberof LearningResourcesSearchApiLearningResourcesSearchRetrieve - */ - readonly is_learning_material?: boolean | null - /** * The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @type {Array<'online' | 'hybrid' | 'in_person'>} @@ -11776,6 +11925,13 @@ export interface LearningResourcesSearchApiLearningResourcesSearchRetrieveReques */ readonly q?: string + /** + * The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'program' | 'learning_material'>} + * @memberof LearningResourcesSearchApiLearningResourcesSearchRetrieve + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'program' | 'learning_path' | 'podcast' | 'podcast_episode' | 'video' | 'video_playlist'>} @@ -11826,7 +11982,6 @@ export class LearningResourcesSearchApi extends BaseAPI { requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -11835,6 +11990,7 @@ export class LearningResourcesSearchApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -11860,7 +12016,7 @@ export const LearningResourcesSearchRetrieveAggregationsEnum = { Professional: "professional", Free: "free", LearningFormat: "learning_format", - IsLearningMaterial: "is_learning_material", + ResourceCategory: "resource_category", } as const export type LearningResourcesSearchRetrieveAggregationsEnum = (typeof LearningResourcesSearchRetrieveAggregationsEnum)[keyof typeof LearningResourcesSearchRetrieveAggregationsEnum] @@ -11984,6 +12140,16 @@ export type LearningResourcesSearchRetrievePlatformEnum = /** * @export */ +export const LearningResourcesSearchRetrieveResourceCategoryEnum = { + Course: "course", + Program: "program", + LearningMaterial: "learning_material", +} as const +export type LearningResourcesSearchRetrieveResourceCategoryEnum = + (typeof LearningResourcesSearchRetrieveResourceCategoryEnum)[keyof typeof LearningResourcesSearchRetrieveResourceCategoryEnum] +/** + * @export + */ export const LearningResourcesSearchRetrieveResourceTypeEnum = { Course: "course", Program: "program", @@ -12035,7 +12201,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12044,6 +12209,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionCheckListSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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 {LearningResourcesUserSubscriptionCheckListSourceTypeEnum} [source_type] The subscription type * `search_subscription_type` - search_subscription_type * `channel_subscription_type` - channel_subscription_type @@ -12059,7 +12225,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12068,6 +12233,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionCheckListSortbyEnum, source_type?: LearningResourcesUserSubscriptionCheckListSourceTypeEnum, @@ -12118,10 +12284,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["id"] = id } - if (is_learning_material !== undefined) { - localVarQueryParameter["is_learning_material"] = is_learning_material - } - if (learning_format) { localVarQueryParameter["learning_format"] = learning_format } @@ -12154,6 +12316,10 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["q"] = q } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -12194,7 +12360,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12203,6 +12368,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionListSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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] The topic name. To see a list of options go to api/v1/topics/ @@ -12217,7 +12383,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12226,6 +12391,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionListSortbyEnum, topic?: Array, @@ -12275,10 +12441,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["id"] = id } - if (is_learning_material !== undefined) { - localVarQueryParameter["is_learning_material"] = is_learning_material - } - if (learning_format) { localVarQueryParameter["learning_format"] = learning_format } @@ -12311,6 +12473,10 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["q"] = q } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -12347,7 +12513,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12356,6 +12521,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionSubscribeCreateSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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 {LearningResourcesUserSubscriptionSubscribeCreateSourceTypeEnum} [source_type] The subscription type * `search_subscription_type` - search_subscription_type * `channel_subscription_type` - channel_subscription_type @@ -12372,7 +12538,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12381,6 +12546,7 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionSubscribeCreateSortbyEnum, source_type?: LearningResourcesUserSubscriptionSubscribeCreateSourceTypeEnum, @@ -12432,10 +12598,6 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["id"] = id } - if (is_learning_material !== undefined) { - localVarQueryParameter["is_learning_material"] = is_learning_material - } - if (learning_format) { localVarQueryParameter["learning_format"] = learning_format } @@ -12468,6 +12630,10 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( localVarQueryParameter["q"] = q } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -12579,7 +12745,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12588,6 +12753,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionCheckListSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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 {LearningResourcesUserSubscriptionCheckListSourceTypeEnum} [source_type] The subscription type * `search_subscription_type` - search_subscription_type * `channel_subscription_type` - channel_subscription_type @@ -12603,7 +12769,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12612,6 +12777,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionCheckListSortbyEnum, source_type?: LearningResourcesUserSubscriptionCheckListSourceTypeEnum, @@ -12632,7 +12798,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department, free, id, - is_learning_material, learning_format, level, limit, @@ -12641,6 +12806,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform, professional, q, + resource_category, resource_type, sortby, source_type, @@ -12670,7 +12836,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12679,6 +12844,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionListSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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] The topic name. To see a list of options go to api/v1/topics/ @@ -12693,7 +12859,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12702,6 +12867,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionListSortbyEnum, topic?: Array, @@ -12721,7 +12887,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department, free, id, - is_learning_material, learning_format, level, limit, @@ -12730,6 +12895,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform, professional, q, + resource_category, resource_type, sortby, topic, @@ -12758,7 +12924,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [department] The department that offers the learning resource * `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` - Sloan School of Management * `16` - Aeronautics and Astronautics * `17` - Political Science * `18` - Mathematics * `20` - Biological Engineering * `21A` - Anthropology * `21G` - Global Studies and 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` - Health Sciences and Technology * `IDS` - Institute for Data, Systems, and Society * `MAS` - Media Arts and Sciences * `PE` - Athletics, Physical Education and Recreation * `RES` - Supplemental Resources * `STS` - Science, Technology, and Society * `WGS` - Women\'s and Gender Studies * @param {boolean | null} [free] * @param {Array} [id] The id value for the learning resource - * @param {boolean | null} [is_learning_material] True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page @@ -12767,6 +12932,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean | null} [professional] * @param {string} [q] The search text + * @param {Array} [resource_category] The category of learning resource * `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 * @param {LearningResourcesUserSubscriptionSubscribeCreateSortbyEnum} [sortby] If the parameter starts with \'-\' the sort is in descending order * `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 {LearningResourcesUserSubscriptionSubscribeCreateSourceTypeEnum} [source_type] The subscription type * `search_subscription_type` - search_subscription_type * `channel_subscription_type` - channel_subscription_type @@ -12783,7 +12949,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department?: Array, free?: boolean | null, id?: Array, - is_learning_material?: boolean | null, learning_format?: Array, level?: Array, limit?: number, @@ -12792,6 +12957,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform?: Array, professional?: boolean | null, q?: string, + resource_category?: Array, resource_type?: Array, sortby?: LearningResourcesUserSubscriptionSubscribeCreateSortbyEnum, source_type?: LearningResourcesUserSubscriptionSubscribeCreateSourceTypeEnum, @@ -12810,7 +12976,6 @@ export const LearningResourcesUserSubscriptionApiFp = function ( department, free, id, - is_learning_material, learning_format, level, limit, @@ -12819,6 +12984,7 @@ export const LearningResourcesUserSubscriptionApiFp = function ( platform, professional, q, + resource_category, resource_type, sortby, source_type, @@ -12904,7 +13070,6 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -12913,6 +13078,7 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.source_type, @@ -12941,7 +13107,6 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -12950,6 +13115,7 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -12977,7 +13143,6 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -12986,6 +13151,7 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.source_type, @@ -13024,7 +13190,7 @@ export const LearningResourcesUserSubscriptionApiFactory = function ( export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckListRequest { /** * Show resource counts by category - * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'is_learning_material'>} + * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'resource_category'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckList */ readonly aggregations?: Array @@ -13071,13 +13237,6 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly id?: Array - /** - * True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path - * @type {boolean} - * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckList - */ - readonly is_learning_material?: boolean | null - /** * The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @type {Array<'online' | 'hybrid' | 'in_person'>} @@ -13134,6 +13293,13 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly q?: string + /** + * The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'program' | 'learning_material'>} + * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'program' | 'learning_path' | 'podcast' | 'podcast_episode' | 'video' | 'video_playlist'>} @@ -13171,7 +13337,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionListRequest { /** * Show resource counts by category - * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'is_learning_material'>} + * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'resource_category'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionList */ readonly aggregations?: Array @@ -13218,13 +13384,6 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly id?: Array - /** - * True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path - * @type {boolean} - * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionList - */ - readonly is_learning_material?: boolean | null - /** * The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @type {Array<'online' | 'hybrid' | 'in_person'>} @@ -13281,6 +13440,13 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly q?: string + /** + * The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'program' | 'learning_material'>} + * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'program' | 'learning_path' | 'podcast' | 'podcast_episode' | 'video' | 'video_playlist'>} @@ -13311,7 +13477,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreateRequest { /** * Show resource counts by category - * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'is_learning_material'>} + * @type {Array<'resource_type' | 'certification' | 'certification_type' | 'offered_by' | 'platform' | 'topic' | 'department' | 'level' | 'course_feature' | 'professional' | 'free' | 'learning_format' | 'resource_category'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreate */ readonly aggregations?: Array @@ -13358,13 +13524,6 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly id?: Array - /** - * True if the learning resource is a podcast, podcast episode, video, video playlist, or learning path - * @type {boolean} - * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreate - */ - readonly is_learning_material?: boolean | null - /** * The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @type {Array<'online' | 'hybrid' | 'in_person'>} @@ -13421,6 +13580,13 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr */ readonly q?: string + /** + * The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'program' | 'learning_material'>} + * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreate + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'program' | 'learning_path' | 'podcast' | 'podcast_episode' | 'video' | 'video_playlist'>} @@ -13499,7 +13665,6 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -13508,6 +13673,7 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.source_type, @@ -13538,7 +13704,6 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -13547,6 +13712,7 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -13576,7 +13742,6 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.department, requestParameters.free, requestParameters.id, - requestParameters.is_learning_material, requestParameters.learning_format, requestParameters.level, requestParameters.limit, @@ -13585,6 +13750,7 @@ export class LearningResourcesUserSubscriptionApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.q, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.source_type, @@ -13632,7 +13798,7 @@ export const LearningResourcesUserSubscriptionCheckListAggregationsEnum = { Professional: "professional", Free: "free", LearningFormat: "learning_format", - IsLearningMaterial: "is_learning_material", + ResourceCategory: "resource_category", } as const export type LearningResourcesUserSubscriptionCheckListAggregationsEnum = (typeof LearningResourcesUserSubscriptionCheckListAggregationsEnum)[keyof typeof LearningResourcesUserSubscriptionCheckListAggregationsEnum] @@ -13756,6 +13922,16 @@ export type LearningResourcesUserSubscriptionCheckListPlatformEnum = /** * @export */ +export const LearningResourcesUserSubscriptionCheckListResourceCategoryEnum = { + Course: "course", + Program: "program", + LearningMaterial: "learning_material", +} as const +export type LearningResourcesUserSubscriptionCheckListResourceCategoryEnum = + (typeof LearningResourcesUserSubscriptionCheckListResourceCategoryEnum)[keyof typeof LearningResourcesUserSubscriptionCheckListResourceCategoryEnum] +/** + * @export + */ export const LearningResourcesUserSubscriptionCheckListResourceTypeEnum = { Course: "course", Program: "program", @@ -13813,7 +13989,7 @@ export const LearningResourcesUserSubscriptionListAggregationsEnum = { Professional: "professional", Free: "free", LearningFormat: "learning_format", - IsLearningMaterial: "is_learning_material", + ResourceCategory: "resource_category", } as const export type LearningResourcesUserSubscriptionListAggregationsEnum = (typeof LearningResourcesUserSubscriptionListAggregationsEnum)[keyof typeof LearningResourcesUserSubscriptionListAggregationsEnum] @@ -13937,6 +14113,16 @@ export type LearningResourcesUserSubscriptionListPlatformEnum = /** * @export */ +export const LearningResourcesUserSubscriptionListResourceCategoryEnum = { + Course: "course", + Program: "program", + LearningMaterial: "learning_material", +} as const +export type LearningResourcesUserSubscriptionListResourceCategoryEnum = + (typeof LearningResourcesUserSubscriptionListResourceCategoryEnum)[keyof typeof LearningResourcesUserSubscriptionListResourceCategoryEnum] +/** + * @export + */ export const LearningResourcesUserSubscriptionListResourceTypeEnum = { Course: "course", Program: "program", @@ -13986,7 +14172,7 @@ export const LearningResourcesUserSubscriptionSubscribeCreateAggregationsEnum = Professional: "professional", Free: "free", LearningFormat: "learning_format", - IsLearningMaterial: "is_learning_material", + ResourceCategory: "resource_category", } as const export type LearningResourcesUserSubscriptionSubscribeCreateAggregationsEnum = (typeof LearningResourcesUserSubscriptionSubscribeCreateAggregationsEnum)[keyof typeof LearningResourcesUserSubscriptionSubscribeCreateAggregationsEnum] @@ -14112,6 +14298,17 @@ export type LearningResourcesUserSubscriptionSubscribeCreatePlatformEnum = /** * @export */ +export const LearningResourcesUserSubscriptionSubscribeCreateResourceCategoryEnum = + { + Course: "course", + Program: "program", + LearningMaterial: "learning_material", + } as const +export type LearningResourcesUserSubscriptionSubscribeCreateResourceCategoryEnum = + (typeof LearningResourcesUserSubscriptionSubscribeCreateResourceCategoryEnum)[keyof typeof LearningResourcesUserSubscriptionSubscribeCreateResourceCategoryEnum] +/** + * @export + */ export const LearningResourcesUserSubscriptionSubscribeCreateResourceTypeEnum = { Course: "course", @@ -14594,6 +14791,7 @@ export const LearningpathsApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -14614,6 +14812,7 @@ export const LearningpathsApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: LearningpathsListSortbyEnum, topic?: Array, @@ -14691,6 +14890,10 @@ export const LearningpathsApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -15093,6 +15296,7 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -15113,6 +15317,7 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: LearningpathsListSortbyEnum, topic?: Array, @@ -15138,6 +15343,7 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -15392,6 +15598,7 @@ export const LearningpathsApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -15687,6 +15894,13 @@ export interface LearningpathsApiLearningpathsListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof LearningpathsApiLearningpathsList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -15923,6 +16137,7 @@ export class LearningpathsApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -16080,6 +16295,16 @@ export type LearningpathsListPlatformEnum = /** * @export */ +export const LearningpathsListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type LearningpathsListResourceCategoryEnum = + (typeof LearningpathsListResourceCategoryEnum)[keyof typeof LearningpathsListResourceCategoryEnum] +/** + * @export + */ export const LearningpathsListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -16749,6 +16974,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -16769,6 +16995,7 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: PodcastEpisodesListSortbyEnum, topic?: Array, @@ -16846,6 +17073,10 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -16945,6 +17176,7 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -16965,6 +17197,7 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: PodcastEpisodesListSortbyEnum, topic?: Array, @@ -16990,6 +17223,7 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -17078,6 +17312,7 @@ export const PodcastEpisodesApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -17200,6 +17435,13 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof PodcastEpisodesApiPodcastEpisodesList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -17270,6 +17512,7 @@ export class PodcastEpisodesApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -17406,6 +17649,16 @@ export type PodcastEpisodesListPlatformEnum = /** * @export */ +export const PodcastEpisodesListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type PodcastEpisodesListResourceCategoryEnum = + (typeof PodcastEpisodesListResourceCategoryEnum)[keyof typeof PodcastEpisodesListResourceCategoryEnum] +/** + * @export + */ export const PodcastEpisodesListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -17588,6 +17841,7 @@ export const PodcastsApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -17608,6 +17862,7 @@ export const PodcastsApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: PodcastsListSortbyEnum, topic?: Array, @@ -17685,6 +17940,10 @@ export const PodcastsApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -17859,6 +18118,7 @@ export const PodcastsApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -17879,6 +18139,7 @@ export const PodcastsApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: PodcastsListSortbyEnum, topic?: Array, @@ -17903,6 +18164,7 @@ export const PodcastsApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -18028,6 +18290,7 @@ export const PodcastsApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -18206,6 +18469,13 @@ export interface PodcastsApiPodcastsListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof PodcastsApiPodcastsList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -18320,6 +18590,7 @@ export class PodcastsApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -18456,6 +18727,16 @@ export type PodcastsListPlatformEnum = /** * @export */ +export const PodcastsListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type PodcastsListResourceCategoryEnum = + (typeof PodcastsListResourceCategoryEnum)[keyof typeof PodcastsListResourceCategoryEnum] +/** + * @export + */ export const PodcastsListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -18672,6 +18953,7 @@ export const ProgramsApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -18692,6 +18974,7 @@ export const ProgramsApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: ProgramsListSortbyEnum, topic?: Array, @@ -18769,6 +19052,10 @@ export const ProgramsApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -18867,6 +19154,7 @@ export const ProgramsApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -18887,6 +19175,7 @@ export const ProgramsApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: ProgramsListSortbyEnum, topic?: Array, @@ -18911,6 +19200,7 @@ export const ProgramsApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -18996,6 +19286,7 @@ export const ProgramsApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -19118,6 +19409,13 @@ export interface ProgramsApiProgramsListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof ProgramsApiProgramsList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -19188,6 +19486,7 @@ export class ProgramsApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -19324,6 +19623,16 @@ export type ProgramsListPlatformEnum = /** * @export */ +export const ProgramsListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type ProgramsListResourceCategoryEnum = + (typeof ProgramsListResourceCategoryEnum)[keyof typeof ProgramsListResourceCategoryEnum] +/** + * @export + */ export const ProgramsListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -21653,6 +21962,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -21673,6 +21983,7 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: VideoPlaylistsListSortbyEnum, topic?: Array, @@ -21750,6 +22061,10 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -21928,6 +22243,7 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -21948,6 +22264,7 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: VideoPlaylistsListSortbyEnum, topic?: Array, @@ -21973,6 +22290,7 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -22099,6 +22417,7 @@ export const VideoPlaylistsApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -22277,6 +22596,13 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof VideoPlaylistsApiVideoPlaylistsList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -22391,6 +22717,7 @@ export class VideoPlaylistsApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -22527,6 +22854,16 @@ export type VideoPlaylistsListPlatformEnum = /** * @export */ +export const VideoPlaylistsListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type VideoPlaylistsListResourceCategoryEnum = + (typeof VideoPlaylistsListResourceCategoryEnum)[keyof typeof VideoPlaylistsListResourceCategoryEnum] +/** + * @export + */ export const VideoPlaylistsListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", @@ -22584,6 +22921,7 @@ export const VideosApiAxiosParamCreator = function ( * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -22604,6 +22942,7 @@ export const VideosApiAxiosParamCreator = function ( platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: VideosListSortbyEnum, topic?: Array, @@ -22681,6 +23020,10 @@ export const VideosApiAxiosParamCreator = function ( ) } + if (resource_category) { + localVarQueryParameter["resource_category"] = resource_category + } + if (resource_type) { localVarQueryParameter["resource_type"] = resource_type } @@ -22779,6 +23122,7 @@ export const VideosApiFp = function (configuration?: Configuration) { * @param {Array} [platform] The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. + * @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 * @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. @@ -22799,6 +23143,7 @@ export const VideosApiFp = function (configuration?: Configuration) { platform?: Array, professional?: boolean, readable_id?: Array, + resource_category?: Array, resource_type?: Array, sortby?: VideosListSortbyEnum, topic?: Array, @@ -22823,6 +23168,7 @@ export const VideosApiFp = function (configuration?: Configuration) { platform, professional, readable_id, + resource_category, resource_type, sortby, topic, @@ -22907,6 +23253,7 @@ export const VideosApiFactory = function ( requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -23029,6 +23376,13 @@ export interface VideosApiVideosListRequest { */ readonly readable_id?: Array + /** + * The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material + * @type {Array<'course' | 'learning_material' | 'program'>} + * @memberof VideosApiVideosList + */ + readonly resource_category?: Array + /** * 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 * @type {Array<'course' | 'learning_path' | 'podcast' | 'podcast_episode' | 'program' | 'video' | 'video_playlist'>} @@ -23099,6 +23453,7 @@ export class VideosApi extends BaseAPI { requestParameters.platform, requestParameters.professional, requestParameters.readable_id, + requestParameters.resource_category, requestParameters.resource_type, requestParameters.sortby, requestParameters.topic, @@ -23235,6 +23590,16 @@ export type VideosListPlatformEnum = /** * @export */ +export const VideosListResourceCategoryEnum = { + Course: "course", + LearningMaterial: "learning_material", + Program: "program", +} as const +export type VideosListResourceCategoryEnum = + (typeof VideosListResourceCategoryEnum)[keyof typeof VideosListResourceCategoryEnum] +/** + * @export + */ export const VideosListResourceTypeEnum = { Course: "course", LearningPath: "learning_path", diff --git a/learning_resources/constants.py b/learning_resources/constants.py index 346275bcce..ef0f234e3e 100644 --- a/learning_resources/constants.py +++ b/learning_resources/constants.py @@ -34,6 +34,14 @@ class LearningResourceType(ExtendedEnum): video_playlist = "Video Playlist" +LEARNING_MATERIAL_RESOURCE_CATEGORY = "learning_material" +RESOURCE_CATEGORY_VALUES = [ + LearningResourceType.course.name, + LearningResourceType.program.name, + LEARNING_MATERIAL_RESOURCE_CATEGORY, +] + + class OfferedBy(ExtendedEnum): """ Enum for our Offered By labels. They are our MIT "brands" for LearningResources diff --git a/learning_resources/filters.py b/learning_resources/filters.py index 2845ae5648..45c362283b 100644 --- a/learning_resources/filters.py +++ b/learning_resources/filters.py @@ -14,6 +14,7 @@ from learning_resources.constants import ( DEPARTMENTS, LEARNING_RESOURCE_SORTBY_OPTIONS, + RESOURCE_CATEGORY_VALUES, CertificationType, LearningResourceFormat, LearningResourceType, @@ -115,6 +116,17 @@ class LearningResourceFilter(FilterSet): lookup_expr="iexact", ) + resource_category = MultipleChoiceFilter( + label="The resource category of the learning resources", + method="filter_resource_category", + choices=( + [ + (value, value.replace("_", " ").title()) + for value in RESOURCE_CATEGORY_VALUES + ] + ), + ) + def filter_free(self, queryset, _, value): """Free cost filter for learning resources""" free_filter = ( @@ -130,6 +142,24 @@ def filter_free(self, queryset, _, value): # Resources that are not offered for free return queryset.exclude(free_filter) + def filter_resource_category(self, queryset, _, value): + """Filter by resource category""" + query_or_filters = Q() + for val in value: + if val in [ + LearningResourceType.course.name, + LearningResourceType.program.name, + ]: + query_or_filters |= Q(resource_type=val) + else: + query_or_filters |= ~Q( + resource_type__in=[ + LearningResourceType.course.name, + LearningResourceType.program.name, + ] + ) + 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) diff --git a/learning_resources/filters_test.py b/learning_resources/filters_test.py index 0cf661f8b3..9b05d4fa81 100644 --- a/learning_resources/filters_test.py +++ b/learning_resources/filters_test.py @@ -6,6 +6,7 @@ from django.utils.http import urlencode from learning_resources.constants import ( + LEARNING_MATERIAL_RESOURCE_CATEGORY, LEARNING_RESOURCE_SORTBY_OPTIONS, CertificationType, LearningResourceFormat, @@ -17,7 +18,6 @@ from learning_resources.factories import ( ContentFileFactory, CourseFactory, - LearningPathFactory, LearningResourceContentTagFactory, LearningResourceFactory, LearningResourceOfferorFactory, @@ -266,24 +266,29 @@ def test_learning_resource_filter_free(client): assert resource.id in [result["id"] for result in results] -def test_learning_resource_filter_resource_type(client): +def test_learning_resource_filter_resource_category(client): """Test that the resource type filter works""" - ProgramFactory.create() - podcast = PodcastFactory.create().learning_resource - learning_path = LearningPathFactory.create().learning_resource + program = ProgramFactory.create().learning_resource + CourseFactory.create() + + podcast = PodcastEpisodeFactory.create().learning_resource + video = VideoFactory.create().learning_resource results = client.get( - f"{RESOURCE_API_URL}?resource_type={LearningResourceType.podcast.name}" + f"{RESOURCE_API_URL}?resource_category={LEARNING_MATERIAL_RESOURCE_CATEGORY}" ).json()["results"] - assert len(results) == 1 - assert results[0]["id"] == podcast.id + assert len(results) == 2 + ids = (res["id"] for res in results) + assert podcast.id in ids + assert video.id in ids - resource_filter = f"resource_type={LearningResourceType.podcast.name}&resource_type={LearningResourceType.learning_path.name}" + resource_filter = f"resource_category={LearningResourceType.program.name}&resource_category={LEARNING_MATERIAL_RESOURCE_CATEGORY}" results = client.get(f"{RESOURCE_API_URL}?{resource_filter}").json()["results"] - assert len(results) == 2 - assert sorted([result["readable_id"] for result in results]) == sorted( - [podcast.readable_id, learning_path.readable_id] - ) + assert len(results) == 3 + ids = (res["id"] for res in results) + assert program.id in ids + assert podcast.id in ids + assert video.id in ids def test_learning_resource_filter_readable_id(client): diff --git a/learning_resources/serializers.py b/learning_resources/serializers.py index 73fa067ed3..5822713078 100644 --- a/learning_resources/serializers.py +++ b/learning_resources/serializers.py @@ -15,6 +15,7 @@ from channels.models import Channel from learning_resources import constants, models from learning_resources.constants import ( + LEARNING_MATERIAL_RESOURCE_CATEGORY, CertificationType, LearningResourceFormat, LearningResourceType, @@ -454,6 +455,17 @@ class LearningResourceBaseSerializer(serializers.ModelSerializer, WriteableTopic child=LearningResourceFormatSerializer(), read_only=True ) free = serializers.SerializerMethodField() + resource_category = serializers.SerializerMethodField() + + def get_resource_category(self, instance) -> str: + """Return the resource category of the resource""" + if instance.resource_type in [ + LearningResourceType.course.name, + LearningResourceType.program.name, + ]: + return instance.resource_type + else: + return LEARNING_MATERIAL_RESOURCE_CATEGORY def get_free(self, instance) -> bool: """Return true if the resource is free/has a free option""" @@ -549,6 +561,7 @@ class Meta: model = models.LearningResource read_only_fields = [ "free", + "resource_category", "certification", "certification_type", "professional", diff --git a/learning_resources/serializers_test.py b/learning_resources/serializers_test.py index e05dc94d05..565937694b 100644 --- a/learning_resources/serializers_test.py +++ b/learning_resources/serializers_test.py @@ -13,6 +13,7 @@ from channels.models import Channel from learning_resources import factories, serializers, utils from learning_resources.constants import ( + LEARNING_MATERIAL_RESOURCE_CATEGORY, CertificationType, LearningResourceFormat, LearningResourceRelationTypes, @@ -190,6 +191,14 @@ def test_learning_resource_serializer( # noqa: PLR0913 ).data expected = specific_serializer_cls(instance=resource, context=context).data + if resource.resource_type in [ + LearningResourceType.course.name, + LearningResourceType.program.name, + ]: + resource_category = resource.resource_type + else: + resource_category = LEARNING_MATERIAL_RESOURCE_CATEGORY + assert result == expected assert result == { @@ -223,6 +232,7 @@ def test_learning_resource_serializer( # noqa: PLR0913 ) ) ), + "resource_category": resource_category, "published": resource.published, "readable_id": resource.readable_id, "course_feature": sorted([tag.name for tag in resource.content_tags.all()]), diff --git a/learning_resources_search/constants.py b/learning_resources_search/constants.py index b136ae9b92..0eb0986120 100644 --- a/learning_resources_search/constants.py +++ b/learning_resources_search/constants.py @@ -74,7 +74,7 @@ class FilterConfig: "platform": FilterConfig("platform.code"), "offered_by": FilterConfig("offered_by.code"), "learning_format": FilterConfig("learning_format.code"), - "is_learning_material": FilterConfig("is_learning_material"), + "resource_category": FilterConfig("resource_category"), } SEARCH_NESTED_FILTERS = { @@ -111,6 +111,7 @@ class FilterConfig: }, }, "free": {"type": "boolean"}, + "is_learning_material": {"type": "boolean"}, "learning_format": { "type": "nested", "properties": { @@ -158,6 +159,7 @@ class FilterConfig: }, "professional": {"type": "boolean"}, "resource_type": {"type": "keyword"}, + "resource_category": {"type": "keyword"}, "topics": { "type": "nested", "properties": { diff --git a/learning_resources_search/serializers.py b/learning_resources_search/serializers.py index cde4451506..9aa6281c91 100644 --- a/learning_resources_search/serializers.py +++ b/learning_resources_search/serializers.py @@ -14,7 +14,9 @@ from learning_resources.constants import ( DEPARTMENTS, GROUP_STAFF_LISTS_EDITORS, + LEARNING_MATERIAL_RESOURCE_CATEGORY, LEARNING_RESOURCE_SORTBY_OPTIONS, + RESOURCE_CATEGORY_VALUES, CertificationType, LearningResourceFormat, LearningResourceRelationTypes, @@ -38,8 +40,6 @@ from learning_resources_search.api import gen_content_file_id from learning_resources_search.constants import ( CONTENT_FILE_TYPE, - COURSE_TYPE, - PROGRAM_TYPE, ) from learning_resources_search.models import PercolateQuery from learning_resources_search.utils import remove_child_queries @@ -81,8 +81,8 @@ def serialize_learning_resource_for_update( return { "resource_relations": {"name": "resource"}, "created_on": learning_resource_obj.created_on, - "is_learning_material": learning_resource_obj.resource_type - not in [COURSE_TYPE, PROGRAM_TYPE], + "is_learning_material": serialized_data["resource_category"] + == LEARNING_MATERIAL_RESOURCE_CATEGORY, **serialized_data, } @@ -93,6 +93,8 @@ def extract_values(obj, key): Args: obj(dict): The JSON object + + key(str): The JSON key to search for and extract Returns: @@ -165,7 +167,7 @@ def to_representation(self, obj): "professional", "free", "learning_format", - "is_learning_material", + "resource_category", ] CONTENT_FILE_AGGREGATIONS = ["topic", "content_feature_type", "platform", "offered_by"] @@ -252,13 +254,6 @@ class LearningResourcesSearchRequestSerializer(SearchRequestSerializer): default=None, help_text="True if the learning resource offers a certificate", ) - is_learning_material = ArrayWrappedBoolean( - required=False, - allow_null=True, - default=None, - help_text="True if the learning resource is a podcast, podcast episode, video, " - "video playlist, or learning path", - ) certification_choices = CertificationType.as_tuple() certification_type = serializers.ListField( required=False, @@ -304,6 +299,19 @@ class LearningResourcesSearchRequestSerializer(SearchRequestSerializer): \n\n{build_choice_description_list(learning_format_choices)}" ), ) + resource_category_choices = [ + (value, value.replace("_", " ").title()) for value in RESOURCE_CATEGORY_VALUES + ] + resource_category = serializers.ListField( + required=False, + child=serializers.ChoiceField( + choices=resource_category_choices, + ), + help_text=( + f"The category of learning resource \ + \n\n{build_choice_description_list(resource_category_choices)}" + ), + ) class ContentFileSearchRequestSerializer(SearchRequestSerializer): diff --git a/learning_resources_search/serializers_test.py b/learning_resources_search/serializers_test.py index eb710fb2de..b97e41597b 100644 --- a/learning_resources_search/serializers_test.py +++ b/learning_resources_search/serializers_test.py @@ -718,14 +718,14 @@ def test_learning_resources_search_request_serializer(): "certification": "false", "certification_type": [CertificationType.none.name], "free": True, - "is_learning_material": True, + "resource_category": ["course", "program"], "topic": ["Math", "Atoms,Molecules,and Ions"], "offered_by": ["xpro", "ocw"], "platform": ["xpro", "edx", "ocw"], "department": ["18", "5"], "level": ["high_school", "undergraduate"], "course_feature": ["Lecture Videos"], - "aggregations": ["resource_type", "platform", "level"], + "aggregations": ["resource_type", "platform", "level", "resource_category"], } cleaned = { @@ -736,7 +736,7 @@ def test_learning_resources_search_request_serializer(): "sortby": "-start_date", "professional": [True], "certification": [False], - "is_learning_material": [True], + "resource_category": ["course", "program"], "certification_type": [CertificationType.none.name], "free": [True], "offered_by": ["xpro", "ocw"], @@ -745,7 +745,7 @@ def test_learning_resources_search_request_serializer(): "department": ["18", "5"], "level": ["high_school", "undergraduate"], "course_feature": ["Lecture Videos"], - "aggregations": ["resource_type", "platform", "level"], + "aggregations": ["resource_type", "platform", "level", "resource_category"], } serialized = LearningResourcesSearchRequestSerializer(data=data) diff --git a/openapi/specs/v1.yaml b/openapi/specs/v1.yaml index 2dad1fd7ea..f24e53d500 100644 --- a/openapi/specs/v1.yaml +++ b/openapi/specs/v1.yaml @@ -786,6 +786,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -1368,6 +1386,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -1743,6 +1779,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -2093,7 +2147,7 @@ paths: - professional - free - learning_format - - is_learning_material + - resource_category type: string description: |- * `resource_type` - resource_type @@ -2108,7 +2162,7 @@ paths: * `professional` - professional * `free` - free * `learning_format` - learning_format - * `is_learning_material` - is_learning_material + * `resource_category` - resource_category description: Show resource counts by category - in: query name: certification @@ -2256,13 +2310,6 @@ paths: items: type: integer description: The id value for the learning resource - - in: query - name: is_learning_material - schema: - type: boolean - nullable: true - description: True if the learning resource is a podcast, podcast episode, - video, video playlist, or learning path - in: query name: learning_format schema: @@ -2399,6 +2446,22 @@ paths: type: string minLength: 1 description: The search text + - in: query + name: resource_category + schema: + type: array + items: + enum: + - course + - program + - learning_material + type: string + description: |- + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + description: "The category of learning resource \n\n* `course`\ + \ - Course\n* `program` - Program\n* `learning_material` - Learning Material" - in: query name: resource_type schema: @@ -2503,7 +2566,7 @@ paths: - professional - free - learning_format - - is_learning_material + - resource_category type: string description: |- * `resource_type` - resource_type @@ -2518,7 +2581,7 @@ paths: * `professional` - professional * `free` - free * `learning_format` - learning_format - * `is_learning_material` - is_learning_material + * `resource_category` - resource_category description: Show resource counts by category - in: query name: certification @@ -2666,13 +2729,6 @@ paths: items: type: integer description: The id value for the learning resource - - in: query - name: is_learning_material - schema: - type: boolean - nullable: true - description: True if the learning resource is a podcast, podcast episode, - video, video playlist, or learning path - in: query name: learning_format schema: @@ -2809,6 +2865,22 @@ paths: type: string minLength: 1 description: The search text + - in: query + name: resource_category + schema: + type: array + items: + enum: + - course + - program + - learning_material + type: string + description: |- + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + description: "The category of learning resource \n\n* `course`\ + \ - Course\n* `program` - Program\n* `learning_material` - Learning Material" - in: query name: resource_type schema: @@ -2938,7 +3010,7 @@ paths: - professional - free - learning_format - - is_learning_material + - resource_category type: string description: |- * `resource_type` - resource_type @@ -2953,7 +3025,7 @@ paths: * `professional` - professional * `free` - free * `learning_format` - learning_format - * `is_learning_material` - is_learning_material + * `resource_category` - resource_category description: Show resource counts by category - in: query name: certification @@ -3101,13 +3173,6 @@ paths: items: type: integer description: The id value for the learning resource - - in: query - name: is_learning_material - schema: - type: boolean - nullable: true - description: True if the learning resource is a podcast, podcast episode, - video, video playlist, or learning path - in: query name: learning_format schema: @@ -3244,6 +3309,22 @@ paths: type: string minLength: 1 description: The search text + - in: query + name: resource_category + schema: + type: array + items: + enum: + - course + - program + - learning_material + type: string + description: |- + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + description: "The category of learning resource \n\n* `course`\ + \ - Course\n* `program` - Program\n* `learning_material` - Learning Material" - in: query name: resource_type schema: @@ -3364,7 +3445,7 @@ paths: - professional - free - learning_format - - is_learning_material + - resource_category type: string description: |- * `resource_type` - resource_type @@ -3379,7 +3460,7 @@ paths: * `professional` - professional * `free` - free * `learning_format` - learning_format - * `is_learning_material` - is_learning_material + * `resource_category` - resource_category description: Show resource counts by category - in: query name: certification @@ -3527,13 +3608,6 @@ paths: items: type: integer description: The id value for the learning resource - - in: query - name: is_learning_material - schema: - type: boolean - nullable: true - description: True if the learning resource is a podcast, podcast episode, - video, video playlist, or learning path - in: query name: learning_format schema: @@ -3670,6 +3744,22 @@ paths: type: string minLength: 1 description: The search text + - in: query + name: resource_category + schema: + type: array + items: + enum: + - course + - program + - learning_material + type: string + description: |- + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + description: "The category of learning resource \n\n* `course`\ + \ - Course\n* `program` - Program\n* `learning_material` - Learning Material" - in: query name: resource_type schema: @@ -4049,6 +4139,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -4749,6 +4857,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -5124,6 +5250,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -5586,6 +5730,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -6351,6 +6513,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -6792,6 +6972,24 @@ paths: description: Multiple values may be separated by commas. explode: false style: form + - in: query + name: resource_category + schema: + type: array + items: + type: string + enum: + - course + - learning_material + - program + description: |- + The resource category of the learning resources + + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + explode: true + style: form - in: query name: resource_type schema: @@ -6909,7 +7107,7 @@ components: - professional - free - learning_format - - is_learning_material + - resource_category type: string description: |- * `resource_type` - resource_type @@ -6924,7 +7122,7 @@ components: * `professional` - professional * `free` - free * `learning_format` - learning_format - * `is_learning_material` - is_learning_material + * `resource_category` - resource_category x-enum-descriptions: - resource_type - certification @@ -6938,7 +7136,7 @@ components: - professional - free - learning_format - - is_learning_material + - resource_category Article: type: object description: Serializer for LearningResourceInstructor model @@ -7313,6 +7511,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/CourseResourceResourceTypeEnum' @@ -7374,6 +7576,7 @@ components: - prices - professional - readable_id + - resource_category - resource_type - runs - title @@ -7719,6 +7922,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/LearningPathResourceResourceTypeEnum' @@ -7778,6 +7985,7 @@ components: - platform - prices - readable_id + - resource_category - resource_type - runs - title @@ -9258,11 +9466,6 @@ components: type: boolean nullable: true description: True if the learning resource offers a certificate - is_learning_material: - type: boolean - nullable: true - description: True if the learning resource is a podcast, podcast episode, - video, video playlist, or learning path certification_type: type: array items: @@ -9315,6 +9518,12 @@ components: description: "The format(s) in which the learning resource is offered \ \ \n\n* `online` - Online\n* `hybrid` - Hybrid\n* `in_person`\ \ - In person" + resource_category: + type: array + items: + $ref: '#/components/schemas/ResourceCategoryEnum' + description: "The category of learning resource \n\n* `course`\ + \ - Course\n* `program` - Program\n* `learning_material` - Learning Material" source_type: allOf: - $ref: '#/components/schemas/SourceTypeEnum' @@ -9585,6 +9794,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/PodcastEpisodeResourceResourceTypeEnum' @@ -9646,6 +9859,7 @@ components: - prices - professional - readable_id + - resource_category - resource_type - runs - title @@ -9830,6 +10044,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/PodcastResourceResourceTypeEnum' @@ -9891,6 +10109,7 @@ components: - prices - professional - readable_id + - resource_category - resource_type - runs - title @@ -10220,6 +10439,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/ProgramResourceResourceTypeEnum' @@ -10281,6 +10504,7 @@ components: - professional - program - readable_id + - resource_category - resource_type - runs - title @@ -10355,6 +10579,20 @@ components: - Learning Path Items - Podcast Episodes - Playlist Videos + ResourceCategoryEnum: + enum: + - course + - program + - learning_material + type: string + description: |- + * `course` - Course + * `program` - Program + * `learning_material` - Learning Material + x-enum-descriptions: + - Course + - Program + - Learning Material ResourceTypeEnum: enum: - course @@ -10700,6 +10938,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/VideoPlaylistResourceResourceTypeEnum' @@ -10760,6 +11002,7 @@ components: - prices - professional - readable_id + - resource_category - resource_type - runs - title @@ -10935,6 +11178,10 @@ components: type: boolean description: Return true if the resource is free/has a free option readOnly: true + resource_category: + type: string + description: Return the resource category of the resource + readOnly: true resource_type: allOf: - $ref: '#/components/schemas/VideoResourceResourceTypeEnum' @@ -10995,6 +11242,7 @@ components: - prices - professional - readable_id + - resource_category - resource_type - runs - title From 00895b968b763163efb562eebfaafc2829d19289 Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Fri, 28 Jun 2024 21:37:24 +0200 Subject: [PATCH 05/20] Square aspect ratio for media resource images (#1183) --- .../page-components/ResourceCarousel/types.ts | 7 ++----- .../mit-open/src/pages/HomePage/HomePage.tsx | 2 ++ .../mit-open/src/pages/HomePage/carousels.ts | 6 +++--- .../ol-components/src/components/Card/Card.tsx | 7 +++++-- .../LearningResourceCard.tsx | 18 +++++++++++++----- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/frontends/mit-open/src/page-components/ResourceCarousel/types.ts b/frontends/mit-open/src/page-components/ResourceCarousel/types.ts index 765d95056d..85d750ae26 100644 --- a/frontends/mit-open/src/page-components/ResourceCarousel/types.ts +++ b/frontends/mit-open/src/page-components/ResourceCarousel/types.ts @@ -3,10 +3,7 @@ import type { LearningResourcesSearchApiLearningResourcesSearchRetrieveRequest as SearchRequest, FeaturedApiFeaturedListRequest as FeaturedListParams, } from "api" - -type CardProps = { - size?: "small" | "medium" -} +import type { LearningResourceCardProps } from "ol-components" interface ResourceDataSource { type: "resources" @@ -27,7 +24,7 @@ type DataSource = ResourceDataSource | SearchDataSource | FeaturedDataSource type TabConfig = { label: React.ReactNode - cardProps?: CardProps + cardProps?: Pick data: D } diff --git a/frontends/mit-open/src/pages/HomePage/HomePage.tsx b/frontends/mit-open/src/pages/HomePage/HomePage.tsx index bf90af1250..dfb8c23fcf 100644 --- a/frontends/mit-open/src/pages/HomePage/HomePage.tsx +++ b/frontends/mit-open/src/pages/HomePage/HomePage.tsx @@ -28,8 +28,10 @@ const FeaturedCoursesCarousel = styled(ResourceCarousel)(({ theme }) => ({ })) const MediaCarousel = styled(ResourceCarousel)(({ theme }) => ({ margin: "80px 0", + minHeight: "388px", [theme.breakpoints.down("md")]: { margin: "40px 0", + minHeight: "418px", }, })) diff --git a/frontends/mit-open/src/pages/HomePage/carousels.ts b/frontends/mit-open/src/pages/HomePage/carousels.ts index fd7c461c12..5bdc786f00 100644 --- a/frontends/mit-open/src/pages/HomePage/carousels.ts +++ b/frontends/mit-open/src/pages/HomePage/carousels.ts @@ -46,7 +46,7 @@ const FEATURED_RESOURCES_CAROUSEL: ResourceCarouselProps["config"] = [ const MEDIA_CAROUSEL: ResourceCarouselProps["config"] = [ { label: "All", - cardProps: { size: "small" }, + cardProps: { size: "small", isMedia: true }, data: { type: "resources", params: { @@ -58,7 +58,7 @@ const MEDIA_CAROUSEL: ResourceCarouselProps["config"] = [ }, { label: "Videos", - cardProps: { size: "small" }, + cardProps: { size: "small", isMedia: true }, data: { type: "resources", params: { resource_type: ["video"], limit: 12, sortby: "new" }, @@ -66,7 +66,7 @@ const MEDIA_CAROUSEL: ResourceCarouselProps["config"] = [ }, { label: "Podcasts", - cardProps: { size: "small" }, + cardProps: { size: "small", isMedia: true }, data: { type: "resources", params: { resource_type: ["podcast_episode"], limit: 12, sortby: "new" }, diff --git a/frontends/ol-components/src/components/Card/Card.tsx b/frontends/ol-components/src/components/Card/Card.tsx index 25ab02700a..27f2634339 100644 --- a/frontends/ol-components/src/components/Card/Card.tsx +++ b/frontends/ol-components/src/components/Card/Card.tsx @@ -66,10 +66,11 @@ const Body = styled.div` margin: 16px; ` -const Image = styled.img<{ size?: Size }>` +const Image = styled.img<{ height?: number | string; size?: Size }>` display: block; width: 100%; - height: ${({ size }) => (size === "small" ? 120 : 170)}px; + height: ${({ height, size }) => + height ?? (size === "small" ? "120px" : "170px")}; background-color: ${theme.custom.colors.lightGray1}; object-fit: cover; ` @@ -147,6 +148,7 @@ type CardProps = { type ImageProps = ImgHTMLAttributes & { size?: Size + height?: number | string style?: CSSProperties } type TitleProps = { @@ -214,6 +216,7 @@ const Card: Card = ({ children, className, size, href }) => { {image && ( )} /> )} diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index b37d9dbf79..87da3a7975 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -25,10 +25,14 @@ const SkeletonImage = styled(Skeleton)<{ aspect: number }>` padding-bottom: ${({ aspect }) => 100 / aspect}%; ` -const getEmbedlyUrl = (resource: LearningResource, size: Size) => { +const getEmbedlyUrl = ( + resource: LearningResource, + size: Size, + isMedia: boolean, +) => { const dimensions = { - small: { width: 190, height: 120 }, - medium: { width: 298, height: 170 }, + small: { width: 190, height: isMedia ? 190 : 120 }, + medium: { width: 298, height: isMedia ? 298 : 170 }, } return embedlyCroppedImage(resource.image!.url!, { key: APP_SETTINGS.embedlyKey || process.env.EMBEDLY_KEY!, @@ -116,6 +120,7 @@ interface LearningResourceCardProps { resource?: LearningResource | null className?: string size?: Size + isMedia?: boolean href?: string onAddToLearningPathClick?: ResourceIdCallback | null onAddToUserListClick?: ResourceIdCallback | null @@ -126,16 +131,18 @@ const LearningResourceCard: React.FC = ({ resource, className, size = "medium", + isMedia = false, href, onAddToLearningPathClick, onAddToUserListClick, }) => { if (isLoading) { const { width, height } = imgConfigs["column"] + const aspect = isMedia ? 1 : width / height return ( - + @@ -151,10 +158,11 @@ const LearningResourceCard: React.FC = ({ From 859c808bd1fc147b0e859dbc8fc77ac3b44eff55 Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Fri, 28 Jun 2024 15:43:36 -0400 Subject: [PATCH 06/20] Filled vs Unfilled Bookmarks (#1180) * Add inUserList, inLearningPath to card props * update instead of invalidate featured results * another test, remove console.log * DO invalidate featured lists when learningpath membership changes * position card action buttons a bit better --- .../src/hooks/learningResources/index.test.ts | 331 ++++++++++++++---- .../api/src/hooks/learningResources/index.ts | 84 ++--- .../src/hooks/learningResources/keyFactory.ts | 109 ++++-- .../ResourceCard/ResourceCard.test.tsx | 63 +++- .../ResourceCard/ResourceCard.tsx | 20 +- .../LearningPathListingPage.tsx | 16 +- .../src/components/Card/ListCard.tsx | 26 +- .../LearningResourceCard.tsx | 50 ++- .../LearningResourceListCard.tsx | 60 ++-- frontends/ol-components/src/index.ts | 1 + 10 files changed, 570 insertions(+), 190 deletions(-) diff --git a/frontends/api/src/hooks/learningResources/index.test.ts b/frontends/api/src/hooks/learningResources/index.test.ts index 4e5939efa7..f9785a3266 100644 --- a/frontends/api/src/hooks/learningResources/index.test.ts +++ b/frontends/api/src/hooks/learningResources/index.test.ts @@ -2,7 +2,10 @@ import { renderHook, waitFor } from "@testing-library/react" import { faker } from "@faker-js/faker/locale/en" import { setupReactQueryTest } from "../test-utils" -import keyFactory, { invalidateResourceQueries } from "./keyFactory" +import keyFactory, { + invalidateResourceQueries, + invalidateUserListQueries, +} from "./keyFactory" import { useLearningResourcesDetail, useLearningResourcesList, @@ -16,10 +19,16 @@ import { useLearningpathRelationshipMove, useLearningpathRelationshipCreate, useLearningpathRelationshipDestroy, + useFeaturedLearningResourcesList, + useUserListRelationshipCreate, + useUserListRelationshipDestroy, } from "./index" import { setMockResponse, urls, makeRequest } from "../../test-utils" -import * as factory from "../../test-utils/factories/learningResources" +import * as factories from "../../test-utils/factories" import { UseQueryResult } from "@tanstack/react-query" +import { LearningResource } from "../../generated/v1" + +const factory = factories.learningResources jest.mock("./keyFactory", () => { const actual = jest.requireActual("./keyFactory") @@ -27,6 +36,7 @@ jest.mock("./keyFactory", () => { __esModule: true, ...actual, invalidateResourceQueries: jest.fn(), + invalidateUserListQueries: jest.fn(), } }) @@ -41,7 +51,12 @@ const assertApiCalled = async ( data: unknown, ) => { await waitFor(() => expect(result.current.isLoading).toBe(false)) - expect(makeRequest).toHaveBeenCalledWith(method, url, expect.anything()) + expect( + makeRequest.mock.calls.some((args) => { + // Don't use toHaveBeenCalledWith. It doesn't handle undefined 3rd arg. + return args[0].toUpperCase() === method && args[1] === url + }), + ).toBe(true) expect(result.current.data).toEqual(data) } @@ -55,7 +70,7 @@ describe("useLearningResourcesList", () => { setMockResponse.get(url, data) const useTestHook = () => useLearningResourcesList(params) const { result } = renderHook(useTestHook, { wrapper }) - assertApiCalled(result, url, "GET", data) + await assertApiCalled(result, url, "GET", data) }, ) }) @@ -71,7 +86,7 @@ describe("useLearningResourcesRetrieve", () => { const useTestHook = () => useLearningResourcesDetail(params.id) const { result } = renderHook(useTestHook, { wrapper }) - assertApiCalled(result, url, "GET", data) + await assertApiCalled(result, url, "GET", data) }) }) @@ -87,7 +102,7 @@ describe("useLearningPathsList", () => { const useTestHook = () => useLearningPathsList(params) const { result } = renderHook(useTestHook, { wrapper }) - assertApiCalled(result, url, "GET", data) + await assertApiCalled(result, url, "GET", data) }, ) }) @@ -103,7 +118,7 @@ describe("useLearningPathsRetrieve", () => { const useTestHook = () => useLearningPathsDetail(params.id) const { result } = renderHook(useTestHook, { wrapper }) - assertApiCalled(result, url, "GET", data) + await assertApiCalled(result, url, "GET", data) }) }) @@ -119,7 +134,7 @@ describe("useLearningResourceTopics", () => { const useTestHook = () => useLearningResourceTopics(params) const { result } = renderHook(useTestHook, { wrapper }) - assertApiCalled(result, url, "GET", data) + await assertApiCalled(result, url, "GET", data) }, ) }) @@ -170,7 +185,6 @@ describe("LearningPath CRUD", () => { const relationship = factory.learningPathRelationship({ parent: path.id }) const keys = { learningResources: keyFactory._def, - childResource: keyFactory.detail(relationship.child).queryKey, relationshipListing: keyFactory.learningpaths._ctx.detail(path.id)._ctx .infiniteItems._def, } @@ -185,7 +199,15 @@ describe("LearningPath CRUD", () => { learning_resource_id: path.id, }), } - return { path, relationship, pathUrls, keys } + + const resourceWithoutList: LearningResource = { + ...relationship.resource, + learning_path_parents: + relationship.resource.learning_path_parents?.filter( + (m) => m.id !== relationship.id, + ) ?? null, + } + return { path, relationship, pathUrls, keys, resourceWithoutList } } test("useLearningpathCreate calls correct API", async () => { @@ -262,68 +284,241 @@ describe("LearningPath CRUD", () => { ) }) - test("useLearningpathRelationshipCreate calls correct API and patches child resource cache", async () => { - const { relationship, pathUrls, keys } = makeData() - const url = pathUrls.relationshipList - const requestData = { - child: relationship.child, - parent: relationship.parent, - position: relationship.position, - } - setMockResponse.post(url, relationship) - - const { wrapper, queryClient } = setupReactQueryTest() - const { result } = renderHook(useLearningpathRelationshipCreate, { - wrapper, - }) - result.current.mutate(requestData) - - await waitFor(() => expect(result.current.isSuccess).toBe(true)) - expect(makeRequest).toHaveBeenCalledWith("post", url, requestData) - - expect(invalidateResourceQueries).toHaveBeenCalledWith( - queryClient, - relationship.child, - ) - expect(invalidateResourceQueries).toHaveBeenCalledWith( - queryClient, - relationship.parent, - ) - - // Check patches cached result - expect(queryClient.getQueryData(keys.childResource)).toEqual( - relationship.resource, - ) - }) + test.each([{ isChildFeatured: false }, { isChildFeatured: true }])( + "useLearningpathRelationshipCreate calls correct API and patches featured resources", + async ({ isChildFeatured }) => { + const { relationship, pathUrls, resourceWithoutList } = makeData() + + const featured = factory.resources({ count: 3 }) + if (isChildFeatured) { + featured.results[0] = resourceWithoutList + } + setMockResponse.get(urls.learningResources.featured(), featured) + + const url = pathUrls.relationshipList + const requestData = { + child: relationship.child, + parent: relationship.parent, + position: relationship.position, + } + setMockResponse.post(url, relationship) + + const { wrapper, queryClient } = setupReactQueryTest() + const { result } = renderHook(useLearningpathRelationshipCreate, { + wrapper, + }) + const { result: featuredResult } = renderHook( + useFeaturedLearningResourcesList, + { wrapper }, + ) + await waitFor(() => expect(featuredResult.current.data).toBe(featured)) + + result.current.mutate(requestData) + + await waitFor(() => expect(result.current.isSuccess).toBe(true)) + expect(makeRequest).toHaveBeenCalledWith("post", url, requestData) + + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.child, + { skipFeatured: false }, + ) + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.parent, + ) + }, + ) - test("useLearningpathRelationshipDestroy calls correct API and patches child resource cache", async () => { - const { relationship, pathUrls, keys } = makeData() - const url = pathUrls.relationshipDetails + test.each([{ isChildFeatured: false }, { isChildFeatured: true }])( + "useLearningpathRelationshipDestroy calls correct API and patches child resource cache (isChildFeatured=$isChildFeatured)", + async ({ isChildFeatured }) => { + const { relationship, pathUrls } = makeData() + const url = pathUrls.relationshipDetails + + const featured = factory.resources({ count: 3 }) + if (isChildFeatured) { + featured.results[0] = relationship.resource + } + setMockResponse.get(urls.learningResources.featured(), featured) + + setMockResponse.delete(url, null) + const { wrapper, queryClient } = setupReactQueryTest() + + const { result } = renderHook(useLearningpathRelationshipDestroy, { + wrapper, + }) + const { result: featuredResult } = renderHook( + useFeaturedLearningResourcesList, + { wrapper }, + ) + + await waitFor(() => expect(featuredResult.current.data).toBe(featured)) + result.current.mutate(relationship) + await waitFor(() => expect(result.current.isSuccess).toBe(true)) + + expect(makeRequest).toHaveBeenCalledWith("delete", url, undefined) + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.child, + { skipFeatured: false }, + ) + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.parent, + ) + }, + ) +}) - setMockResponse.delete(url, null) - const { wrapper, queryClient } = setupReactQueryTest() - queryClient.setQueryData(keys.childResource, relationship.resource) - const { result } = renderHook(useLearningpathRelationshipDestroy, { - wrapper, +describe("userlist CRUD", () => { + const makeData = () => { + const list = factories.userLists.userList() + const relationship = factories.userLists.userListRelationship({ + parent: list.id, }) + const keys = { + learningResources: keyFactory._def, + relationshipListing: keyFactory.userlists._ctx.detail(list.id)._ctx + .infiniteItems._def, + } + const listUrls = { + list: urls.userLists.list(), + details: urls.userLists.details({ id: list.id }), + relationshipList: urls.userLists.resources({ + userlist_id: list.id, + }), + relationshipDetails: urls.userLists.resourceDetails({ + id: relationship.id, + userlist_id: list.id, + }), + } - result.current.mutate(relationship) - await waitFor(() => expect(result.current.isSuccess).toBe(true)) + const resourceWithoutList: LearningResource = { + ...relationship.resource, + user_list_parents: + relationship.resource.user_list_parents?.filter( + (m) => m.id !== relationship.id, + ) ?? null, + } + return { path: list, relationship, listUrls, keys, resourceWithoutList } + } - expect(makeRequest).toHaveBeenCalledWith("delete", url, undefined) - expect(invalidateResourceQueries).toHaveBeenCalledWith( - queryClient, - relationship.child, - ) - expect(invalidateResourceQueries).toHaveBeenCalledWith( - queryClient, - relationship.parent, - ) + test.each([{ isChildFeatured: false }, { isChildFeatured: true }])( + "useUserListRelationshipCreate calls correct API and patches featured resources", + async ({ isChildFeatured }) => { + const { relationship, listUrls, resourceWithoutList } = makeData() + + const featured = factory.resources({ count: 3 }) + if (isChildFeatured) { + featured.results[0] = resourceWithoutList + } + setMockResponse.get(urls.learningResources.featured(), featured) + + const url = listUrls.relationshipList + const requestData = { + child: relationship.child, + parent: relationship.parent, + position: relationship.position, + } + setMockResponse.post(url, relationship) + + const { wrapper, queryClient } = setupReactQueryTest() + const { result } = renderHook(useUserListRelationshipCreate, { + wrapper, + }) + const { result: featuredResult } = renderHook( + useFeaturedLearningResourcesList, + { wrapper }, + ) + await waitFor(() => expect(featuredResult.current.data).toBe(featured)) + + result.current.mutate(requestData) + + await waitFor(() => expect(result.current.isSuccess).toBe(true)) + expect(makeRequest).toHaveBeenCalledWith("post", url, requestData) + + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.child, + { skipFeatured: true }, + ) + expect(invalidateUserListQueries).toHaveBeenCalledWith( + queryClient, + relationship.parent, + ) + + // Assert featured API called only once and that the result has been + // patched correctly. When the child is featured, we do NOT want to make + // a new API call to /featured, because the results of that API are randomly + // ordered. + expect( + makeRequest.mock.calls.filter((call) => call[0] === "get").length, + ).toEqual(1) + if (isChildFeatured) { + expect(featuredResult.current.data?.results).toEqual([ + relationship.resource, + ...featured.results.slice(1), + ]) + } else { + expect(featuredResult.current.data).toEqual(featured) + } + }, + ) - // Patched existing resource - expect(queryClient.getQueryData(keys.childResource)).toEqual({ - ...relationship.resource, - learning_path_parents: [], - }) - }) + test.each([{ isChildFeatured: false }, { isChildFeatured: true }])( + "useUserListRelationshipDestroy calls correct API and patches child resource cache (isChildFeatured=$isChildFeatured)", + async ({ isChildFeatured }) => { + const { relationship, listUrls, resourceWithoutList } = makeData() + const url = listUrls.relationshipDetails + + const featured = factory.resources({ count: 3 }) + if (isChildFeatured) { + featured.results[0] = relationship.resource + } + setMockResponse.get(urls.learningResources.featured(), featured) + + setMockResponse.delete(url, null) + const { wrapper, queryClient } = setupReactQueryTest() + + const { result } = renderHook(useUserListRelationshipDestroy, { + wrapper, + }) + const { result: featuredResult } = renderHook( + useFeaturedLearningResourcesList, + { wrapper }, + ) + + await waitFor(() => expect(featuredResult.current.data).toBe(featured)) + result.current.mutate(relationship) + await waitFor(() => expect(result.current.isSuccess).toBe(true)) + + expect(makeRequest).toHaveBeenCalledWith("delete", url, undefined) + expect(invalidateResourceQueries).toHaveBeenCalledWith( + queryClient, + relationship.child, + { skipFeatured: true }, + ) + expect(invalidateUserListQueries).toHaveBeenCalledWith( + queryClient, + relationship.parent, + ) + + // Assert featured API called only once and that the result has been + // patched correctly. When the child is featured, we do NOT want to make + // a new API call to /featured, because the results of that API are randomly + // ordered. + expect( + makeRequest.mock.calls.filter((call) => call[0] === "get").length, + ).toEqual(1) + if (isChildFeatured) { + expect(featuredResult.current.data?.results).toEqual([ + resourceWithoutList, + ...featured.results.slice(1), + ]) + } else { + expect(featuredResult.current.data).toEqual(featured) + } + }, + ) }) diff --git a/frontends/api/src/hooks/learningResources/index.ts b/frontends/api/src/hooks/learningResources/index.ts index dadbc54775..a97bc4509c 100644 --- a/frontends/api/src/hooks/learningResources/index.ts +++ b/frontends/api/src/hooks/learningResources/index.ts @@ -16,7 +16,6 @@ import type { LearningPathResource, LearningPathRelationshipRequest, MicroLearningPathRelationship, - LearningResource, LearningResourcesSearchApiLearningResourcesSearchRetrieveRequest as LRSearchRequest, UserlistsApiUserlistsListRequest as ULListRequest, UserlistsApiUserlistsCreateRequest as ULCreateRequest, @@ -28,10 +27,13 @@ import type { MicroUserListRelationship, PlatformsApiPlatformsListRequest, FeaturedApiFeaturedListRequest as FeaturedListParams, + PaginatedLearningResourceList, } from "../../generated/v1" import learningResources, { invalidateResourceQueries, invalidateUserListQueries, + updateListParentsOnAdd, + updateListParentsOnDestroy, } from "./keyFactory" import { ListType } from "../../common/constants" @@ -168,14 +170,15 @@ const useLearningpathRelationshipCreate = () => { learning_resource_id: params.parent, LearningPathRelationshipRequest: params, }), - onSuccess: (response, _vars) => { - queryClient.setQueryData( - learningResources.detail(response.data.child).queryKey, - response.data.resource, + onSettled: (_response, _err, vars) => { + invalidateResourceQueries( + queryClient, + vars.child, + // do NOT skip invalidating the /featured/ lists, + // Changing a learning path might change the members of the featured + // lists. + { skipFeatured: false }, ) - }, - onSettled: (response, _err, vars) => { - invalidateResourceQueries(queryClient, vars.child) invalidateResourceQueries(queryClient, vars.parent) }, }) @@ -189,22 +192,15 @@ const useLearningpathRelationshipDestroy = () => { id: params.id, learning_resource_id: params.parent, }), - onSuccess: (_response, vars) => { - queryClient.setQueryData( - learningResources.detail(vars.child).queryKey, - (old: LearningResource | undefined) => { - if (!old) return - const parents = - old.learning_path_parents?.filter(({ id }) => vars.id !== id) ?? [] - return { - ...old, - learning_path_parents: parents, - } - }, - ) - }, onSettled: (_response, _err, vars) => { - invalidateResourceQueries(queryClient, vars.child) + invalidateResourceQueries( + queryClient, + vars.child, + // do NOT skip invalidating the /featured/ lists, + // Changing a learning path might change the members of the featured + // lists. + { skipFeatured: false }, + ) invalidateResourceQueries(queryClient, vars.parent) }, }) @@ -298,13 +294,21 @@ const useUserListRelationshipCreate = () => { UserListRelationshipRequest: params, }), onSuccess: (response, _vars) => { - queryClient.setQueryData( - learningResources.detail(response.data.child).queryKey, - response.data.resource, + queryClient.setQueriesData( + learningResources.featured({}).queryKey, + (old) => updateListParentsOnAdd(response.data, old), ) }, - onSettled: (response, _err, vars) => { - invalidateResourceQueries(queryClient, vars.child) + onSettled: (_response, _err, vars) => { + invalidateResourceQueries( + queryClient, + vars.child, + // Do NOT invalidate the featured lists. Re-fetching the featured list + // data will cause the order to change, since the /featured API returns + // at random order. + // Instead, `onSuccess` hook will manually update the data. + { skipFeatured: true }, + ) invalidateUserListQueries(queryClient, vars.parent) }, }) @@ -319,21 +323,21 @@ const useUserListRelationshipDestroy = () => { userlist_id: params.parent, }), onSuccess: (_response, vars) => { - queryClient.setQueryData( - learningResources.detail(vars.child).queryKey, - (old: LearningResource | undefined) => { - if (!old) return - const parents = - old.user_list_parents?.filter(({ id }) => vars.id !== id) ?? [] - return { - ...old, - user_list_parents: parents, - } - }, + queryClient.setQueriesData( + learningResources.featured({}).queryKey, + (old) => updateListParentsOnDestroy(vars, old), ) }, onSettled: (_response, _err, vars) => { - invalidateResourceQueries(queryClient, vars.child) + invalidateResourceQueries( + queryClient, + vars.child, + // Do NOT invalidate the featured lists. Re-fetching the featured list + // data will cause the order to change, since the /featured API returns + // at random order. + // Instead, `onSuccess` hook will manually update the data. + { skipFeatured: true }, + ) invalidateUserListQueries(queryClient, vars.parent) }, }) diff --git a/frontends/api/src/hooks/learningResources/keyFactory.ts b/frontends/api/src/hooks/learningResources/keyFactory.ts index 8224222542..774eb17f3e 100644 --- a/frontends/api/src/hooks/learningResources/keyFactory.ts +++ b/frontends/api/src/hooks/learningResources/keyFactory.ts @@ -27,6 +27,8 @@ import type { OfferorsApiOfferorsListRequest, PlatformsApiPlatformsListRequest, FeaturedApiFeaturedListRequest as FeaturedListParams, + UserListRelationship, + MicroUserListRelationship, } from "../../generated/v1" import { createQueryKeys } from "@lukemorales/query-key-factory" @@ -45,7 +47,7 @@ const learningResources = createQueryKeys("learningResources", { .learningResourcesList(params) .then((res) => res.data), }), - featured: (params: FeaturedListParams) => ({ + featured: (params: FeaturedListParams = {}) => ({ queryKey: [params], queryFn: () => featuredApi.featuredList(params).then((res) => res.data), }), @@ -143,25 +145,12 @@ const learningResources = createQueryKeys("learningResources", { }, }) -const learningPathHasResource = +const listHasResource = (resourceId: number) => (query: Query): boolean => { // eslint-disable-next-line @typescript-eslint/no-explicit-any const data = query.state.data as any - const resources: LearningResource[] = data.pages - ? data.pages.flatMap( - (page: PaginatedLearningResourceList) => page.results, - ) - : data.results - return resources.some((res) => res.id === resourceId) - } - -const userListHasResource = - (resourceId: number) => - (query: Query): boolean => { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const data = query.state.data as any - const resources: UserList[] = data.pages + const resources: LearningResource[] | UserList[] = data.pages ? data.pages.flatMap( (page: PaginatedLearningResourceList) => page.results, ) @@ -169,9 +158,20 @@ const userListHasResource = return resources.some((res) => res.id === resourceId) } +/** + * Invalidate Resource queries that a specific resource appears in. + * + * By default, this will invalidate featured list queries. This can result in + * odd behavior because the featured list item order is randomized: when the + * featured list cache is invalidated, the newly fetched data may be in a + * different order. To maintain the order, use skipFeatured to skip invalidation + * of featured lists and instead manually update the cached data via + * `updateListParentsOnAdd`. + */ const invalidateResourceQueries = ( queryClient: QueryClient, resourceId: LearningResource["id"], + { skipFeatured = false } = {}, ) => { /** * Invalidate details queries. @@ -191,17 +191,13 @@ const invalidateResourceQueries = ( const lists = [ learningResources.list._def, learningResources.learningpaths._ctx.list._def, - learningResources.userlists._ctx.list._def, - learningResources.featured._def, + learningResources.search._def, + ...(skipFeatured ? [] : [learningResources.featured._def]), ] lists.forEach((queryKey) => { queryClient.invalidateQueries({ queryKey, - predicate: learningPathHasResource(resourceId), - }) - queryClient.invalidateQueries({ - queryKey, - predicate: userListHasResource(resourceId), + predicate: listHasResource(resourceId), }) }) } @@ -213,7 +209,72 @@ const invalidateUserListQueries = ( queryClient.invalidateQueries( learningResources.userlists._ctx.detail(userListId).queryKey, ) + const lists = [learningResources.userlists._ctx.list._def] + lists.forEach((queryKey) => { + queryClient.invalidateQueries({ + queryKey, + predicate: listHasResource(userListId), + }) + }) +} + +/** + * Given + * - a list of learning resources L + * - a new relationship between learningpath/userlist and a resource R + * Update the list L so that it includes the updated resource R. (If the list + * did not contain R to begin with, no change is made) + */ +const updateListParentsOnAdd = ( + relationship: UserListRelationship, + oldList?: PaginatedLearningResourceList, +) => { + if (!oldList) return oldList + const matchIndex = oldList.results.findIndex( + (res) => res.id === relationship.child, + ) + if (matchIndex === -1) return oldList + const updatesResults = [...oldList.results] + updatesResults[matchIndex] = relationship.resource + return { + ...oldList, + results: updatesResults, + } +} + +/** + * Given + * - a list of learning resources L + * - a destroyed relationship between learningpath/userlist and a resource R + * Update the list L so that it includes the updated resource R. (If the list + * did not contain R to begin with, no change is made) + */ +const updateListParentsOnDestroy = ( + relationship: MicroUserListRelationship, + list?: PaginatedLearningResourceList, +) => { + if (!list) return list + if (!relationship) return list + const matchIndex = list.results.findIndex( + (res) => res.id === relationship.child, + ) + if (matchIndex === -1) return list + const updatedResults = [...list.results] + const newResource = { ...updatedResults[matchIndex] } + newResource.user_list_parents = + newResource.user_list_parents?.filter((m) => m.id !== relationship.id) ?? + null + updatedResults[matchIndex] = newResource + return { + ...list, + results: updatedResults, + } } export default learningResources -export { invalidateResourceQueries, invalidateUserListQueries } +export { + invalidateResourceQueries, + invalidateUserListQueries, + updateListParentsOnAdd, + updateListParentsOnDestroy, +} diff --git a/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.test.tsx b/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.test.tsx index 4163040d6c..eab4c6980c 100644 --- a/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.test.tsx +++ b/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.test.tsx @@ -1,6 +1,11 @@ import React from "react" import * as NiceModal from "@ebay/nice-modal-react" -import { renderWithProviders, user, screen } from "../../test-utils" +import { + renderWithProviders, + user, + screen, + expectProps, +} from "../../test-utils" import type { User } from "../../test-utils" import { ResourceCard, ResourceListCard } from "./ResourceCard" import { @@ -11,6 +16,17 @@ import type { ResourceCardProps } from "./ResourceCard" import { urls, factories, setMockResponse } from "api/test-utils" import { RESOURCE_DRAWER_QUERY_PARAM } from "@/common/urls" import invariant from "tiny-invariant" +import { LearningResourceCard, LearningResourceListCard } from "ol-components" + +jest.mock("ol-components", () => { + const actual = jest.requireActual("ol-components") + return { + __esModule: true, + ...actual, + LearningResourceCard: jest.fn(actual.LearningResourceCard), + LearningResourceListCard: jest.fn(actual.LearningResourceListCard), + } +}) jest.mock("@ebay/nice-modal-react", () => { const actual = jest.requireActual("@ebay/nice-modal-react") @@ -24,11 +40,13 @@ jest.mock("@ebay/nice-modal-react", () => { describe.each([ { CardComponent: ResourceCard, + BaseComponent: LearningResourceCard, }, { CardComponent: ResourceListCard, + BaseComponent: LearningResourceListCard, }, -])("$CardComponent", ({ CardComponent }) => { +])("$CardComponent", ({ CardComponent, BaseComponent }) => { const makeResource = factories.learningResources.resource type SetupOptions = { user?: Partial @@ -84,6 +102,47 @@ describe.each([ }, ) + test.each([ + { + userlist: { count: 1, inList: true }, + learningpath: { count: 1, inList: true }, + }, + { + userlist: { count: 0, inList: false }, + learningpath: { count: 1, inList: true }, + }, + { + userlist: { count: 1, inList: true }, + learningpath: { count: 0, inList: false }, + }, + { + userlist: { count: 0, inList: false }, + learningpath: { count: 0, inList: false }, + }, + ])( + "'Add to ...' buttons are filled based on membership in list", + ({ userlist, learningpath }) => { + const resource = makeResource() + const { microLearningPathRelationship } = factories.learningResources + const { microUserListRelationship } = factories.userLists + resource.learning_path_parents = Array.from( + { length: learningpath.count }, + () => microLearningPathRelationship({ child: resource.id }), + ) + resource.user_list_parents = Array.from({ length: userlist.count }, () => + microUserListRelationship({ child: resource.id }), + ) + + setup({ user: { is_authenticated: true }, props: { resource } }) + + expectProps(BaseComponent, { + resource, + inLearningPath: learningpath.inList, + inUserList: userlist.inList, + }) + }, + ) + test("Clicking add to list button opens AddToListDialog when authenticated", async () => { const showModal = jest.mocked(NiceModal.show) diff --git a/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.tsx b/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.tsx index 9636f5380f..ce14cb591f 100644 --- a/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.tsx +++ b/frontends/mit-open/src/page-components/ResourceCard/ResourceCard.tsx @@ -12,8 +12,9 @@ import { import { useResourceDrawerHref } from "../LearningResourceDrawer/LearningResourceDrawer" import { useUserMe } from "api/hooks/user" import { SignupPopover } from "../SignupPopover/SignupPopover" +import { LearningResource } from "api" -const useResourceCard = () => { +const useResourceCard = (resource?: LearningResource | null) => { const getDrawerHref = useResourceDrawerHref() const { data: user } = useUserMe() @@ -48,12 +49,17 @@ const useResourceCard = () => { } }, [user]) + const inUserList = !!resource?.user_list_parents?.length + const inLearningPath = !!resource?.learning_path_parents?.length + return { getDrawerHref, anchorEl, handleClosePopover, handleAddToLearningPathClick, handleAddToUserListClick, + inUserList, + inLearningPath, } } @@ -76,7 +82,9 @@ const ResourceCard: React.FC = ({ resource, ...others }) => { handleClosePopover, handleAddToLearningPathClick, handleAddToUserListClick, - } = useResourceCard() + inUserList, + inLearningPath, + } = useResourceCard(resource) return ( <> = ({ resource, ...others }) => { href={resource ? getDrawerHref(resource.id) : undefined} onAddToLearningPathClick={handleAddToLearningPathClick} onAddToUserListClick={handleAddToUserListClick} + inUserList={inUserList} + inLearningPath={inLearningPath} {...others} /> @@ -113,7 +123,9 @@ const ResourceListCard: React.FC = ({ handleClosePopover, handleAddToLearningPathClick, handleAddToUserListClick, - } = useResourceCard() + inUserList, + inLearningPath, + } = useResourceCard(resource) return ( <> = ({ href={resource ? getDrawerHref(resource.id) : undefined} onAddToLearningPathClick={handleAddToLearningPathClick} onAddToUserListClick={handleAddToUserListClick} + inUserList={inUserList} + inLearningPath={inLearningPath} {...others} /> diff --git a/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.tsx b/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.tsx index 5802a15c5e..4c2289c71e 100644 --- a/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.tsx +++ b/frontends/mit-open/src/pages/LearningPathListingPage/LearningPathListingPage.tsx @@ -2,7 +2,6 @@ import React, { useCallback, useMemo } from "react" import { Button, SimpleMenu, - ActionButton, Grid, LoadingSpinner, BannerPage, @@ -11,7 +10,7 @@ import { Typography, PlainList, LearningResourceListCard, - theme, + ListCardActionButton, } from "ol-components" import type { SimpleMenuItem } from "ol-components" import EditIcon from "@mui/icons-material/Edit" @@ -33,13 +32,6 @@ const ListHeaderGrid = styled(Grid)` margin-bottom: 1rem; ` -const StyledActionButton = styled(ActionButton)` - ${theme.breakpoints.down("md")} { - width: 16px; - height: 16px; - } -` - const EditListMenu: React.FC<{ resource: LearningPathResource }> = ({ resource, }) => { @@ -63,15 +55,15 @@ const EditListMenu: React.FC<{ resource: LearningPathResource }> = ({ return ( - + } items={items} /> diff --git a/frontends/ol-components/src/components/Card/ListCard.tsx b/frontends/ol-components/src/components/Card/ListCard.tsx index cf92ec8736..4650a944fb 100644 --- a/frontends/ol-components/src/components/Card/ListCard.tsx +++ b/frontends/ol-components/src/components/Card/ListCard.tsx @@ -10,6 +10,7 @@ import { theme } from "../ThemeProvider/ThemeProvider" import { Link } from "react-router-dom" import { Wrapper, containerStyles } from "./Card" import { TruncateText } from "../TruncateText/TruncateText" +import { ActionButton, ActionButtonProps } from "../Button/Button" const LinkContainer = styled(Link)` ${containerStyles} @@ -114,6 +115,9 @@ const Bottom = styled.div` } ` +/** + * Slot intended to contain ListCardAction buttons. + */ const Actions = styled.div<{ hasImage?: boolean }>` display: flex; gap: 8px; @@ -121,13 +125,28 @@ const Actions = styled.div<{ hasImage?: boolean }>` bottom: 24px; right: ${({ hasImage }) => (hasImage ? "284px" : "24px")}; ${theme.breakpoints.down("md")} { - bottom: 12px; - right: ${({ hasImage }) => (hasImage ? "124px" : "12px")}; + bottom: 8px; + gap: 4px; + right: ${({ hasImage }) => (hasImage ? "120px" : "8px")}; } background-color: ${theme.custom.colors.white}; ` +const ListCardActionButton = styled(ActionButton)<{ isMobile?: boolean }>( + ({ theme }) => ({ + [theme.breakpoints.down("md")]: { + borderStyle: "none", + width: "24px", + height: "24px", + svg: { + width: "16px", + height: "16px", + }, + }, + }), +) + type CardProps = { children: ReactNode[] | ReactNode className?: string @@ -140,6 +159,7 @@ type Card = FC & { Title: FC<{ children: ReactNode }> Footer: FC<{ children: ReactNode }> Actions: FC<{ children: ReactNode }> + Action: FC } const ListCard: Card = ({ children, className, href }) => { @@ -192,5 +212,7 @@ ListCard.Info = Info ListCard.Title = Title ListCard.Footer = Footer ListCard.Actions = Actions +ListCard.Action = ListCardActionButton export { ListCard } +export { ListCardActionButton } diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index 87da3a7975..88b42dc883 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -1,7 +1,12 @@ import React from "react" import styled from "@emotion/styled" import Skeleton from "@mui/material/Skeleton" -import { RiMenuAddLine, RiBookmarkLine, RiAwardFill } from "@remixicon/react" +import { + RiMenuAddLine, + RiBookmarkLine, + RiBookmarkFill, + RiAwardFill, +} from "@remixicon/react" import { LearningResource, ResourceTypeEnum, PlatformEnum } from "api" import { findBestRun, @@ -13,7 +18,7 @@ import { import { Card } from "../Card/Card" import type { Size } from "../Card/Card" import { TruncateText } from "../TruncateText/TruncateText" -import { ActionButton } from "../Button/Button" +import { ActionButton, ActionButtonProps } from "../Button/Button" import { imgConfigs } from "../../constants/imgConfigs" import { theme } from "../ThemeProvider/ThemeProvider" @@ -124,6 +129,25 @@ interface LearningResourceCardProps { href?: string onAddToLearningPathClick?: ResourceIdCallback | null onAddToUserListClick?: ResourceIdCallback | null + inUserList?: boolean + inLearningPath?: boolean +} + +const FILLED_PROPS = { variant: "primary" } as const +const UNFILLED_PROPS = { color: "secondary", variant: "secondary" } as const +const CardActionButton: React.FC< + Pick & { + filled?: boolean + } +> = ({ filled, ...props }) => { + return ( + + ) } const LearningResourceCard: React.FC = ({ @@ -135,6 +159,8 @@ const LearningResourceCard: React.FC = ({ href, onAddToLearningPathClick, onAddToUserListClick, + inLearningPath, + inUserList, }) => { if (isLoading) { const { width, height } = imgConfigs["column"] @@ -174,28 +200,22 @@ const LearningResourceCard: React.FC = ({ {onAddToLearningPathClick && ( - onAddToLearningPathClick(event, resource.id)} > - + )} {onAddToUserListClick && ( - onAddToUserListClick(event, resource.id)} > - - + {inUserList ? : } + )} diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx index 33884b704a..c16a0a09ea 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceListCard.tsx @@ -1,7 +1,12 @@ import React from "react" import styled from "@emotion/styled" import Skeleton from "@mui/material/Skeleton" -import { RiMenuAddLine, RiBookmarkLine, RiAwardFill } from "@remixicon/react" +import { + RiMenuAddLine, + RiBookmarkLine, + RiAwardFill, + RiBookmarkFill, +} from "@remixicon/react" import { LearningResource, ResourceTypeEnum, PlatformEnum } from "api" import { findBestRun, @@ -12,7 +17,7 @@ import { pluralize, } from "ol-utilities" import { ListCard } from "../Card/ListCard" -import { ActionButton } from "../Button/Button" +import { ActionButtonProps } from "../Button/Button" import { theme } from "../ThemeProvider/ThemeProvider" import { useMuiBreakpointAtLeast } from "../../hooks/useBreakpoint" @@ -80,15 +85,6 @@ const BorderSeparator = styled.div` } ` -const StyledActionButton = styled(ActionButton)<{ edge: string }>` - ${({ edge }) => - edge === "none" - ? ` - width: 16px; - height: 16px;` - : ""} -` - type ResourceIdCallback = ( event: React.MouseEvent, resourceId: number, @@ -356,6 +352,26 @@ interface LearningResourceListCardProps { onAddToLearningPathClick?: ResourceIdCallback | null onAddToUserListClick?: ResourceIdCallback | null editMenu?: React.ReactNode | null + inUserList?: boolean + inLearningPath?: boolean +} + +const FILLED_PROPS = { variant: "primary" } as const +const UNFILLED_PROPS = { color: "secondary", variant: "secondary" } as const +const CardActionButton: React.FC< + Pick & { + filled?: boolean + isMobile?: boolean + } +> = ({ filled, isMobile, ...props }) => { + return ( + + ) } const LearningResourceListCard: React.FC = ({ @@ -366,6 +382,8 @@ const LearningResourceListCard: React.FC = ({ onAddToLearningPathClick, onAddToUserListClick, editMenu, + inLearningPath, + inUserList, }) => { const isMobile = !useMuiBreakpointAtLeast("md") @@ -397,28 +415,22 @@ const LearningResourceListCard: React.FC = ({ {resource.title} {onAddToLearningPathClick && ( - onAddToLearningPathClick(event, resource.id)} > - + )} {onAddToUserListClick && ( - onAddToUserListClick(event, resource.id)} > - - + {inUserList ? : } + )} {editMenu} diff --git a/frontends/ol-components/src/index.ts b/frontends/ol-components/src/index.ts index 3485640599..9913ff4a29 100644 --- a/frontends/ol-components/src/index.ts +++ b/frontends/ol-components/src/index.ts @@ -28,6 +28,7 @@ export { ActionButtonLink, ButtonLink, } from "./components/Button/Button" +export { ListCardActionButton } from "./components/Card/ListCard" export type { ButtonProps, From ebe1dfe3cdeed3df847bbf609aa31b2968952c0d Mon Sep 17 00:00:00 2001 From: James Kachel Date: Fri, 28 Jun 2024 14:54:08 -0500 Subject: [PATCH 07/20] Don't display carousel tabs if there's no data to display (#1169) --- .../0010_alter_channel_name_regex.py | 29 ++++ channels/models.py | 2 +- .../ResourceCarousel/ResourceCarousel.tsx | 45 ++++- .../src/pages/HomePage/HomePage.test.tsx | 162 ++++++++++-------- openapi/specs/v0.yaml | 12 +- 5 files changed, 168 insertions(+), 82 deletions(-) create mode 100644 channels/migrations/0010_alter_channel_name_regex.py diff --git a/channels/migrations/0010_alter_channel_name_regex.py b/channels/migrations/0010_alter_channel_name_regex.py new file mode 100644 index 0000000000..7d03e835d7 --- /dev/null +++ b/channels/migrations/0010_alter_channel_name_regex.py @@ -0,0 +1,29 @@ +# Generated by Django 4.2.13 on 2024-06-27 14:50 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("channels", "0009_rename_field_to_channel"), + ] + + operations = [ + migrations.AlterField( + model_name="channel", + name="name", + field=models.CharField( + max_length=100, + validators=[ + django.core.validators.RegexValidator( + message=( + "Channel name can only contain the characters: A-Z," + " a-z, 0-9, _" + ), + regex="^[A-Za-z0-9_-]+$", + ) + ], + ), + ), + ] diff --git a/channels/models.py b/channels/models.py index 4605346444..c56967f5a6 100644 --- a/channels/models.py +++ b/channels/models.py @@ -33,7 +33,7 @@ class Channel(TimestampedModel): max_length=100, validators=[ RegexValidator( - regex=r"^[A-Za-z0-9_]+$", + regex=r"^[A-Za-z0-9_-]+$", message=( "Channel name can only contain the characters: A-Z, a-z, 0-9, _" ), diff --git a/frontends/mit-open/src/page-components/ResourceCarousel/ResourceCarousel.tsx b/frontends/mit-open/src/page-components/ResourceCarousel/ResourceCarousel.tsx index db7cfc8c6c..b88abefe26 100644 --- a/frontends/mit-open/src/page-components/ResourceCarousel/ResourceCarousel.tsx +++ b/frontends/mit-open/src/page-components/ResourceCarousel/ResourceCarousel.tsx @@ -52,6 +52,13 @@ type DataPanelProps = { }) => React.ReactNode } +type LoadTabButtonProps = { + config: FeaturedDataSource + label: React.ReactNode + key: number + value: string +} + const ResourcesData: React.FC> = ({ dataConfig, children, @@ -119,6 +126,21 @@ const DataPanel: React.FC = ({ }) } +/** + * Tab button that loads the resource, so we can determine if it needs to be + * displayed or not. This shouldn't cause double-loading since React Query + * should only run the thing once - when you switch into the tab, the data + * should already be in the cache. + */ + +const LoadFeaturedTabButton: React.FC = (props) => { + const { data, isLoading } = useFeaturedLearningResourcesList( + props.config.params, + ) + + return !isLoading && data && data.count > 0 ? : null +} + const HeaderRow = styled.div(({ theme }) => ({ display: "flex", flexWrap: "wrap", @@ -266,13 +288,22 @@ const ResourceCarousel: React.FC = ({ {config.length > 1 ? ( setTab(newValue)}> - {config.map(({ label }, index) => ( - - ))} + {config.map((tabConfig, index) => + tabConfig.data.type === "lr_featured" ? ( + + ) : ( + + ), + )} diff --git a/frontends/mit-open/src/pages/HomePage/HomePage.test.tsx b/frontends/mit-open/src/pages/HomePage/HomePage.test.tsx index 74a33fedba..af1a7b2475 100644 --- a/frontends/mit-open/src/pages/HomePage/HomePage.test.tsx +++ b/frontends/mit-open/src/pages/HomePage/HomePage.test.tsx @@ -45,8 +45,28 @@ const setupAPIs = () => { expect.stringContaining(urls.learningResources.list()), resources, ) + + setMockResponse.get(urls.learningResources.featured({ limit: 12 }), resources) setMockResponse.get( - expect.stringContaining(urls.learningResources.featured()), + urls.learningResources.featured({ + free: true, + limit: 12, + }), + resources, + ) + setMockResponse.get( + urls.learningResources.featured({ + certification: true, + professional: false, + limit: 12, + }), + resources, + ) + setMockResponse.get( + urls.learningResources.featured({ + professional: true, + limit: 12, + }), resources, ) @@ -111,70 +131,10 @@ describe("Home Page Hero", () => { }) }) -describe("Home Page Carousel", () => { - test.each<{ tab: string; params: FeaturedRequest }>([ - { - tab: "All", - params: { limit: 12 }, - }, - { - tab: "Free", - params: { limit: 12, free: true }, - }, - { - tab: "With Certificate", - params: { - limit: 12, - certification: true, - professional: false, - }, - }, - { - tab: "Professional & Executive Learning", - params: { limit: 12, professional: true }, - }, - ])("Featured Courses Carousel Tabs", async ({ tab, params }) => { - const resources = learningResources.resources({ count: 12 }) - setupAPIs() - - // The "All" tab is initially visible, so it needs a response. - setMockResponse.get( - urls.learningResources.featured({ limit: 12 }), - learningResources.resources({ count: 0 }), - ) - // This is for the clicked tab (which might be "All") - // We will check that its response is visible as cards. - setMockResponse.get( - urls.learningResources.featured({ ...params }), - resources, - ) - - renderWithProviders() - const [featuredTabs] = screen.getAllByRole("tablist") - await user.click(within(featuredTabs).getByRole("tab", { name: tab })) - const [featuredPanel] = screen.getAllByRole("tabpanel") - await within(featuredPanel).findByText(resources.results[0].title) - }) - - test("Tabbed Carousel sanity check", () => { - setupAPIs() - renderWithProviders() - const [featured, media] = screen.getAllByRole("tablist") - within(featured).getByRole("tab", { name: "All" }) - within(featured).getByRole("tab", { name: "Free" }) - within(featured).getByRole("tab", { name: "With Certificate" }) - within(featured).getByRole("tab", { - name: "Professional & Executive Learning", - }) - within(media).getByRole("tab", { name: "All" }) - within(media).getByRole("tab", { name: "Videos" }) - within(media).getByRole("tab", { name: "Podcasts" }) - }) -}) - describe("Home Page Browse by Topic", () => { test("Displays topics links", async () => { setupAPIs() + const response = learningResources.topics({ count: 3 }) setMockResponse.get(urls.topics.list({ is_toplevel: true }), response) setMockResponse.get(urls.userMe.get(), {}) @@ -306,6 +266,7 @@ describe("Home Page personalize section", () => { test("Links to dashboard when authenticated", async () => { setMockResponse.get(urls.userMe.get(), {}) setupAPIs() + renderWithProviders() const personalize = ( await screen.findByRole("heading", { @@ -319,6 +280,7 @@ describe("Home Page personalize section", () => { test("Links to login when not authenticated", async () => { setupAPIs() + setMockResponse.get(urls.userMe.get(), {}, { code: 403 }) renderWithProviders() const personalize = ( @@ -335,15 +297,79 @@ describe("Home Page personalize section", () => { }), ) }) +}) + +describe("Home Page Testimonials", () => { + test("Displays testimonials carousel", async () => { + setupAPIs() + + renderWithProviders() + + await waitFor(() => { + screen.getAllByText(/testable title/i) + }) + }) +}) - describe("Home Page Testimonials", () => { - test("Displays testimonials carousel", async () => { - setupAPIs() - renderWithProviders() +describe("Home Page Carousel", () => { + test.each<{ tab: string; params: FeaturedRequest }>([ + { + tab: "All", + params: { limit: 12, resource_type: ["course"] }, + }, + { + tab: "Free", + params: { limit: 12, resource_type: ["course"], free: true }, + }, + { + tab: "With Certificate", + params: { + resource_type: ["course"], + limit: 12, + certification: true, + professional: false, + }, + }, + { + tab: "Professional & Executive Learning", + params: { resource_type: ["course"], limit: 12, professional: true }, + }, + ])("Featured Courses Carousel Tabs", async ({ tab, params }) => { + const resources = learningResources.resources({ count: 12 }) + setupAPIs() + + // The tab buttons eager-load the resources so we need to set them all up. + + // This is for the clicked tab (which might be "All") + // We will check that its response is visible as cards. + setMockResponse.get( + urls.learningResources.featured({ ...params }), + resources, + ) + + renderWithProviders() + screen.findByRole("tab", { name: tab }).then(async (featuredTab) => { + await user.click(within(featuredTab).getByRole("tab", { name: tab })) + const [featuredPanel] = screen.getAllByRole("tabpanel") + await within(featuredPanel).findByText(resources.results[0].title) + }) + }) + + test("Tabbed Carousel sanity check", async () => { + setupAPIs() + + renderWithProviders() - await waitFor(() => { - screen.getAllByText(/testable title/i) + screen.findAllByRole("tablist").then(([featured, media]) => { + within(featured).getByRole("tab", { name: "All" }) + within(featured).getByRole("tab", { name: "Free" }) + within(featured).getByRole("tab", { name: "With Certificate" }) + within(featured).getByRole("tab", { + name: "Professional & Executive Learning", }) + within(media).getByRole("tab", { name: "All" }) + within(media).getByRole("tab", { name: "Videos" }) + within(media).getByRole("tab", { name: "Podcasts" }) }) }) }) diff --git a/openapi/specs/v0.yaml b/openapi/specs/v0.yaml index 65342795ce..2845cc9635 100644 --- a/openapi/specs/v0.yaml +++ b/openapi/specs/v0.yaml @@ -991,7 +991,7 @@ components: name: type: string minLength: 1 - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string @@ -1225,7 +1225,7 @@ components: readOnly: true name: type: string - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string @@ -1758,7 +1758,7 @@ components: name: type: string minLength: 1 - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string @@ -1952,7 +1952,7 @@ components: readOnly: true name: type: string - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string @@ -2386,7 +2386,7 @@ components: readOnly: true name: type: string - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string @@ -2495,7 +2495,7 @@ components: readOnly: true name: type: string - pattern: ^[A-Za-z0-9_]+$ + pattern: ^[A-Za-z0-9_-]+$ maxLength: 100 title: type: string From 939eb55b92cf487b0e9202c555fa7e676c731974 Mon Sep 17 00:00:00 2001 From: Shankar Ambady Date: Fri, 28 Jun 2024 16:22:43 -0400 Subject: [PATCH 08/20] setting 100px as default width for buttons (#1185) * setting 100px as default width for buttons * fixing action button style * fixing styles for menubutton * setting tab width to auto * removing unused prop * removing dup css * removing borderwidth and bordercolor --- .../src/page-components/Header/MenuButton.tsx | 16 ++++++++++++---- .../src/components/Button/Button.tsx | 2 ++ .../src/components/TabButtons/TabButtonList.tsx | 1 + 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/frontends/mit-open/src/page-components/Header/MenuButton.tsx b/frontends/mit-open/src/page-components/Header/MenuButton.tsx index 5897c1a43d..b0ae726e17 100644 --- a/frontends/mit-open/src/page-components/Header/MenuButton.tsx +++ b/frontends/mit-open/src/page-components/Header/MenuButton.tsx @@ -1,4 +1,4 @@ -import { Button, styled } from "ol-components" +import { styled } from "ol-components" import { RiMenuLine } from "@remixicon/react" import React from "react" @@ -23,14 +23,22 @@ const MenuButtonInner = styled.div({ alignItems: "flex-start", }) -const StyledMenuButton = styled(Button)({ +const StyledMenuButton = styled.button(({ theme }) => ({ padding: "0", background: "transparent", "&:hover:not(:disabled)": { background: "transparent", }, touchAction: "none", -}) + textAlign: "center", + display: "inline-flex", + justifyContent: "center", + alignItems: "center", + color: theme.palette.text.primary, + transition: `background ${theme.transitions.duration.short}ms`, + cursor: "pointer", + borderStyle: "none", +})) interface MenuButtonProps { text?: string @@ -38,7 +46,7 @@ interface MenuButtonProps { } const MenuButton: React.FC = ({ text, onClick }) => ( - + {text ? {text} : ""} diff --git a/frontends/ol-components/src/components/Button/Button.tsx b/frontends/ol-components/src/components/Button/Button.tsx index 21b775ec88..245987c87e 100644 --- a/frontends/ol-components/src/components/Button/Button.tsx +++ b/frontends/ol-components/src/components/Button/Button.tsx @@ -94,6 +94,7 @@ const ButtonStyled = styled.button((props) => { ":disabled": { cursor: "default", }, + minWidth: "100px", }, ...sizeStyles(size, hasBorder, theme), // responsive @@ -303,6 +304,7 @@ type ActionButtonProps = Omit & const actionStyles = (size: ButtonSize) => { return { + minWidth: "auto", padding: 0, height: { small: "32px", diff --git a/frontends/ol-components/src/components/TabButtons/TabButtonList.tsx b/frontends/ol-components/src/components/TabButtons/TabButtonList.tsx index 3e1d7554fd..7bbdbb4540 100644 --- a/frontends/ol-components/src/components/TabButtons/TabButtonList.tsx +++ b/frontends/ol-components/src/components/TabButtons/TabButtonList.tsx @@ -34,6 +34,7 @@ const TabButtonList: React.FC = styled((props: TabListProps) => ( const tabStyles = ({ theme }: { theme: Theme }) => css({ + minWidth: "auto", ":focus-visible": { outlineOffset: "-1px", }, From 4b4bcb8890cfe69b256b43cda8956c3d41a22c69 Mon Sep 17 00:00:00 2001 From: Chris Chudzicki Date: Fri, 28 Jun 2024 16:23:00 -0400 Subject: [PATCH 09/20] stop publishing github pages every pr (#1197) --- .github/workflows/ci.yml | 33 --------------------------------- 1 file changed, 33 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98b711b7a0..478ee415e9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -319,36 +319,3 @@ jobs: with: name: playwright-report path: e2e_testing/playwright-report - - publish-pages: - runs-on: ubuntu-latest - - environment: - name: github-pages - - permissions: - pages: write - id-token: write - actions: read - - needs: - - build-storybook - # - e2e-tests - - steps: - - name: Download artifacts - uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4 - with: - path: pages-site - - # - name: Move E2E test report - # run: mv playwright-report pages-site/ - - - name: Upload artifact - uses: actions/upload-pages-artifact@56afc609e74202658d3ffba0e8f6dda462b719fa # v3 - with: - path: pages-site - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4 From 294b5984e3dd861b7ee05ddaf8a7ef3d346c835f Mon Sep 17 00:00:00 2001 From: Shankar Ambady Date: Fri, 28 Jun 2024 16:23:44 -0400 Subject: [PATCH 10/20] adding post logout redirect to keycloak (#1192) --- authentication/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/authentication/views.py b/authentication/views.py index 4fcebc3392..586b19c74a 100644 --- a/authentication/views.py +++ b/authentication/views.py @@ -32,7 +32,7 @@ def _keycloak_logout_url(self, user): user, provider=OlOpenIdConnectAuth.name ).first() id_token = user_social_auth_record.extra_data.get("id_token") - return f"{settings.KEYCLOAK_BASE_URL}/realms/{settings.KEYCLOAK_REALM_NAME}/protocol/openid-connect/logout?id_token_hint={id_token}" # noqa: E501 + return f"{settings.KEYCLOAK_BASE_URL}/realms/{settings.KEYCLOAK_REALM_NAME}/protocol/openid-connect/logout?id_token_hint={id_token}&post_logout_redirect_uri={settings.LOGOUT_REDIRECT_URL}" # noqa: E501 def get( self, From bddc4221648d05097bd6da9e81e5ebf703c2ef85 Mon Sep 17 00:00:00 2001 From: Carey P Gumaer Date: Fri, 28 Jun 2024 16:23:52 -0400 Subject: [PATCH 11/20] update sloan executive education offerings (#1193) * remove enterprise or organizational accounts and custom engagements from sloan offerings * hybrid, not blended --- learning_resources/fixtures/offered_by.json | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/learning_resources/fixtures/offered_by.json b/learning_resources/fixtures/offered_by.json index 2d805a23b1..5f916ab81f 100644 --- a/learning_resources/fixtures/offered_by.json +++ b/learning_resources/fixtures/offered_by.json @@ -100,19 +100,14 @@ "name": "Sloan Executive Education", "code": "see", "professional": true, - "offerings": [ - "Courses", - "Programs", - "Enterprise or Organizational accounts", - "Custom Engagements" - ], + "offerings": ["Courses", "Programs"], "audience": [ "Global Business Professionals (all levels)", "Entrepreneurs and intrapreneurs", "Managers and executives", "Current and future business leaders" ], - "formats": ["Online", "In-Person", "Blended"], + "formats": ["Online", "In-Person", "Hybrid"], "fee": ["Paid", "Free Webinars and Blogs"], "certifications": ["Executive Certificates", "Professional Certificates"], "content_types": ["Professional"], From 197f34145bb8091c4dc79997c975100fb4929b82 Mon Sep 17 00:00:00 2001 From: Carey P Gumaer Date: Fri, 28 Jun 2024 16:23:59 -0400 Subject: [PATCH 12/20] update mitpe unit data (#1194) * update mitpe unit data * only professional certificates * hybrid, not blended --- learning_resources/fixtures/offered_by.json | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/learning_resources/fixtures/offered_by.json b/learning_resources/fixtures/offered_by.json index 5f916ab81f..84093c676e 100644 --- a/learning_resources/fixtures/offered_by.json +++ b/learning_resources/fixtures/offered_by.json @@ -78,15 +78,18 @@ "name": "Professional Education", "code": "mitpe", "professional": true, - "offerings": ["(tbd)"], + "offerings": ["Courses", "Certificates"], "audience": [ "Engineering Professionals", "Technical Professionals", "Scientists and Researchers" ], - "formats": ["(tbd)"], + "formats": ["Online", "In Person", "Hybrid"], "fee": ["Paid"], - "certifications": ["(tbd)"], + "certifications": [ + "Certificate of Completion", + "Professional Certificates" + ], "content_types": ["Academic"], "more_information": "https://professional.mit.edu/", "value_prop": "Whether online, on campus, or at your company site, MIT Professional Education offers several programs to fit your career goals and organization needs. With over 50 courses across more than 12 topic categories, and some now offered in Spanish, our programs are geared towards engineering and technology professionals across the globe.", From c6ba23b72beb5e71778d847efa37a8554ca3d614 Mon Sep 17 00:00:00 2001 From: Shankar Ambady Date: Fri, 28 Jun 2024 16:46:47 -0400 Subject: [PATCH 13/20] Shanbady/log out flow (#1199) * adding post logout redirect to keycloak * urlencoding query string --- authentication/views.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/authentication/views.py b/authentication/views.py index 586b19c74a..7e8114494f 100644 --- a/authentication/views.py +++ b/authentication/views.py @@ -1,5 +1,7 @@ """Authentication views""" +from urllib.parse import urlencode + from django.conf import settings from django.contrib.auth import views from django.http import Http404 @@ -32,7 +34,13 @@ def _keycloak_logout_url(self, user): user, provider=OlOpenIdConnectAuth.name ).first() id_token = user_social_auth_record.extra_data.get("id_token") - return f"{settings.KEYCLOAK_BASE_URL}/realms/{settings.KEYCLOAK_REALM_NAME}/protocol/openid-connect/logout?id_token_hint={id_token}&post_logout_redirect_uri={settings.LOGOUT_REDIRECT_URL}" # noqa: E501 + qs = urlencode( + { + "id_token_hint": id_token, + "post_logout_redirect_uri": settings.LOGOUT_REDIRECT_URL, + } + ) + return f"{settings.KEYCLOAK_BASE_URL}/realms/{settings.KEYCLOAK_REALM_NAME}/protocol/openid-connect/logout?{qs}" # noqa: E501 def get( self, From 6271efc837dcc9eca7a09fdc11772bf2b3eb5031 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 10:08:17 +0000 Subject: [PATCH 14/20] Update Node.js to v20.15.0 (#1201) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 104ab31a7b..9d6dffb3b9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -96,7 +96,7 @@ services: profiles: - frontend working_dir: /src - image: node:20.14 + image: node:20.15 entrypoint: ["/bin/sh", "-c"] command: - | From ea8d32c5f6acf4aab98fb86ed80d4e13f6ecac4c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 12:11:00 +0000 Subject: [PATCH 15/20] Update dependency ruff to v0.5.0 (#1202) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 39 ++++++++++++++++++++------------------- pyproject.toml | 4 ++-- 2 files changed, 22 insertions(+), 21 deletions(-) diff --git a/poetry.lock b/poetry.lock index 885cac423c..976bf68275 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3362,28 +3362,29 @@ files = [ [[package]] name = "ruff" -version = "0.4.10" +version = "0.5.0" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.4.10-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:5c2c4d0859305ac5a16310eec40e4e9a9dec5dcdfbe92697acd99624e8638dac"}, - {file = "ruff-0.4.10-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a79489607d1495685cdd911a323a35871abfb7a95d4f98fc6f85e799227ac46e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1dd1681dfa90a41b8376a61af05cc4dc5ff32c8f14f5fe20dba9ff5deb80cd6"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c75c53bb79d71310dc79fb69eb4902fba804a81f374bc86a9b117a8d077a1784"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18238c80ee3d9100d3535d8eb15a59c4a0753b45cc55f8bf38f38d6a597b9739"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d8f71885bce242da344989cae08e263de29752f094233f932d4f5cfb4ef36a81"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:330421543bd3222cdfec481e8ff3460e8702ed1e58b494cf9d9e4bf90db52b9d"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e9b6fb3a37b772628415b00c4fc892f97954275394ed611056a4b8a2631365e"}, - {file = "ruff-0.4.10-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f54c481b39a762d48f64d97351048e842861c6662d63ec599f67d515cb417f6"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:67fe086b433b965c22de0b4259ddfe6fa541c95bf418499bedb9ad5fb8d1c631"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:acfaaab59543382085f9eb51f8e87bac26bf96b164839955f244d07125a982ef"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_i686.whl", hash = "sha256:3cea07079962b2941244191569cf3a05541477286f5cafea638cd3aa94b56815"}, - {file = "ruff-0.4.10-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:338a64ef0748f8c3a80d7f05785930f7965d71ca260904a9321d13be24b79695"}, - {file = "ruff-0.4.10-py3-none-win32.whl", hash = "sha256:ffe3cd2f89cb54561c62e5fa20e8f182c0a444934bf430515a4b422f1ab7b7ca"}, - {file = "ruff-0.4.10-py3-none-win_amd64.whl", hash = "sha256:67f67cef43c55ffc8cc59e8e0b97e9e60b4837c8f21e8ab5ffd5d66e196e25f7"}, - {file = "ruff-0.4.10-py3-none-win_arm64.whl", hash = "sha256:dd1fcee327c20addac7916ca4e2653fbbf2e8388d8a6477ce5b4e986b68ae6c0"}, - {file = "ruff-0.4.10.tar.gz", hash = "sha256:3aa4f2bc388a30d346c56524f7cacca85945ba124945fe489952aadb6b5cd804"}, + {file = "ruff-0.5.0-py3-none-linux_armv6l.whl", hash = "sha256:ee770ea8ab38918f34e7560a597cc0a8c9a193aaa01bfbd879ef43cb06bd9c4c"}, + {file = "ruff-0.5.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:38f3b8327b3cb43474559d435f5fa65dacf723351c159ed0dc567f7ab735d1b6"}, + {file = "ruff-0.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:7594f8df5404a5c5c8f64b8311169879f6cf42142da644c7e0ba3c3f14130370"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:adc7012d6ec85032bc4e9065110df205752d64010bed5f958d25dbee9ce35de3"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d505fb93b0fabef974b168d9b27c3960714d2ecda24b6ffa6a87ac432905ea38"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9dc5cfd3558f14513ed0d5b70ce531e28ea81a8a3b1b07f0f48421a3d9e7d80a"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:db3ca35265de239a1176d56a464b51557fce41095c37d6c406e658cf80bbb362"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b1a321c4f68809fddd9b282fab6a8d8db796b270fff44722589a8b946925a2a8"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2c4dfcd8d34b143916994b3876b63d53f56724c03f8c1a33a253b7b1e6bf2a7d"}, + {file = "ruff-0.5.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:81e5facfc9f4a674c6a78c64d38becfbd5e4f739c31fcd9ce44c849f1fad9e4c"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e589e27971c2a3efff3fadafb16e5aef7ff93250f0134ec4b52052b673cf988d"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:d2ffbc3715a52b037bcb0f6ff524a9367f642cdc5817944f6af5479bbb2eb50e"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cd096e23c6a4f9c819525a437fa0a99d1c67a1b6bb30948d46f33afbc53596cf"}, + {file = "ruff-0.5.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:46e193b36f2255729ad34a49c9a997d506e58f08555366b2108783b3064a0e1e"}, + {file = "ruff-0.5.0-py3-none-win32.whl", hash = "sha256:49141d267100f5ceff541b4e06552e98527870eafa1acc9dec9139c9ec5af64c"}, + {file = "ruff-0.5.0-py3-none-win_amd64.whl", hash = "sha256:e9118f60091047444c1b90952736ee7b1792910cab56e9b9a9ac20af94cd0440"}, + {file = "ruff-0.5.0-py3-none-win_arm64.whl", hash = "sha256:ed5c4df5c1fb4518abcb57725b576659542bdbe93366f4f329e8f398c4b71178"}, + {file = "ruff-0.5.0.tar.gz", hash = "sha256:eb641b5873492cf9bd45bc9c5ae5320648218e04386a5f0c264ad6ccce8226a1"}, ] [[package]] @@ -4041,4 +4042,4 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", [metadata] lock-version = "2.0" python-versions = "3.12.4" -content-hash = "5a8d7f0bb6dfee6a790608de1836186acb9fff63504f216670d2778af704261d" +content-hash = "3f6b3b66c4a792b7a7b818395f7d93ba8fb9787b3e31dd7027fc0d89ca2f6563" diff --git a/pyproject.toml b/pyproject.toml index 3c164ed1cd..74ba1bb515 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -78,7 +78,7 @@ django-scim2 = "^0.19.1" django-oauth-toolkit = "^2.3.0" youtube-transcript-api = "^0.6.2" posthog = "^3.5.0" -ruff = "0.4.10" +ruff = "0.5.0" [tool.poetry.group.dev.dependencies] bpython = "^0.24" @@ -98,7 +98,7 @@ pytest-freezegun = "^0.4.2" pytest-lazy-fixture = "^0.6.3" pytest-mock = "^3.10.0" responses = "^0.25.0" -ruff = "^0.4.0" +ruff = "^0.5.0" safety = "^2.3.4" semantic-version = "^2.10.0" freezegun = "^1.4.0" From 42376c4f82c8f88d4281e17d72c6d590b70501f7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 15:06:26 +0000 Subject: [PATCH 16/20] Update mcr.microsoft.com/playwright Docker tag to v1.45.0 (#1203) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- e2e_testing/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e_testing/Dockerfile b/e2e_testing/Dockerfile index 51dcd32d5c..bbeb5ee1cc 100644 --- a/e2e_testing/Dockerfile +++ b/e2e_testing/Dockerfile @@ -1,4 +1,4 @@ -FROM mcr.microsoft.com/playwright:v1.44.1-jammy +FROM mcr.microsoft.com/playwright:v1.45.0-jammy COPY . /tests From 5ed1f60c6c191a7e8ccf48264c36f20da1e14239 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 29 Jun 2024 20:03:40 +0000 Subject: [PATCH 17/20] Update opensearchproject/opensearch Docker tag to v2.15.0 (#1205) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker-compose.yml b/docker-compose.yml index 9d6dffb3b9..ea06411db5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -35,7 +35,7 @@ services: opensearch-node-mitopen: profiles: - backend - image: opensearchproject/opensearch:2.14.0 + image: opensearchproject/opensearch:2.15.0 container_name: opensearch-node-mitopen environment: - cluster.name=opensearch-cluster From 21c02c2705a96772dd278ada4359273fb0fbe989 Mon Sep 17 00:00:00 2001 From: Carey P Gumaer Date: Mon, 1 Jul 2024 15:36:54 -0400 Subject: [PATCH 18/20] update unit names (#1198) * update titles for units * update platforms * update names in Logo.tsx * update names in constants * missed Sloan in offered_by.json * fix name in comment * regenerate openapi * correct OCW capitalization * regenerate openapi * fix tests * rename xPRO to MIT xPRO * regenerate openapi --- frontends/api/src/generated/v1/api.ts | 244 +++++----- .../src/components/Logo/Logo.tsx | 6 +- learning_resources/constants.py | 16 +- .../data/channel_templates/offerors.json | 2 +- learning_resources/etl/loaders_test.py | 2 +- learning_resources/etl/prolearn.py | 2 +- learning_resources/etl/prolearn_test.py | 6 +- learning_resources/etl/xpro.py | 2 +- learning_resources/fixtures/offered_by.json | 8 +- learning_resources/fixtures/platforms.json | 6 +- learning_resources_search/serializers_test.py | 8 +- news_events/etl/sloan_exec_news_test.py | 2 +- openapi/specs/v1.yaml | 430 +++++++++--------- test_json/xpro_courses.json | 14 +- test_json/xpro_programs.json | 18 +- 15 files changed, 386 insertions(+), 380 deletions(-) diff --git a/frontends/api/src/generated/v1/api.ts b/frontends/api/src/generated/v1/api.ts index 0e62fb09ed..273caa2827 100644 --- a/frontends/api/src/generated/v1/api.ts +++ b/frontends/api/src/generated/v1/api.ts @@ -2428,18 +2428,18 @@ export interface MicroUserListRelationship { child: number } /** - * * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @export * @enum {string} */ export const OfferedByEnumDescriptions = { mitx: "MITx", - ocw: "OCW", + ocw: "MIT OpenCourseWare", bootcamps: "Bootcamps", - xpro: "xPRO", - mitpe: "Professional Education", - see: "Sloan Executive Education", + xpro: "MIT xPRO", + mitpe: "MIT Professional Education", + see: "MIT Sloan Executive Education", } as const export const OfferedByEnum = { @@ -2448,7 +2448,7 @@ export const OfferedByEnum = { */ Mitx: "mitx", /** - * OCW + * MIT OpenCourseWare */ Ocw: "ocw", /** @@ -2456,15 +2456,15 @@ export const OfferedByEnum = { */ Bootcamps: "bootcamps", /** - * xPRO + * MIT xPRO */ Xpro: "xpro", /** - * Professional Education + * MIT Professional Education */ Mitpe: "mitpe", /** - * Sloan Executive Education + * MIT Sloan Executive Education */ See: "see", } as const @@ -3316,13 +3316,13 @@ export interface PercolateQuerySubscriptionRequestRequest { */ limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array} * @memberof PercolateQuerySubscriptionRequestRequest */ offered_by?: Array /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array} * @memberof PercolateQuerySubscriptionRequestRequest */ @@ -3470,21 +3470,21 @@ export type PercolateQuerySubscriptionRequestResourceTypeEnum = (typeof PercolateQuerySubscriptionRequestResourceTypeEnum)[keyof typeof PercolateQuerySubscriptionRequestResourceTypeEnum] /** - * * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * * `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 * @export * @enum {string} */ export const PlatformEnumDescriptions = { edx: "edX", - ocw: "OCW", + ocw: "MIT OpenCourseWare", oll: "Open Learning Library", mitxonline: "MITx Online", bootcamps: "Bootcamps", - xpro: "xPRO", + xpro: "MIT xPRO", csail: "CSAIL", - mitpe: "Professional Education", - see: "Sloan Executive Education", + mitpe: "MIT Professional Education", + see: "MIT Sloan Executive Education", scc: "Schwarzman College of Computing", ctl: "Center for Transportation & Logistics", whu: "WHU", @@ -3502,7 +3502,7 @@ export const PlatformEnum = { */ Edx: "edx", /** - * OCW + * MIT OpenCourseWare */ Ocw: "ocw", /** @@ -3518,7 +3518,7 @@ export const PlatformEnum = { */ Bootcamps: "bootcamps", /** - * xPRO + * MIT xPRO */ Xpro: "xpro", /** @@ -3526,11 +3526,11 @@ export const PlatformEnum = { */ Csail: "csail", /** - * Professional Education + * MIT Professional Education */ Mitpe: "mitpe", /** - * Sloan Executive Education + * MIT Sloan Executive Education */ See: "see", /** @@ -6487,9 +6487,9 @@ export const ContentFileSearchApiAxiosParamCreator = function ( * @param {Array} [content_feature_type] The feature type of the content file. Possible options are at api/v1/course_features/ * @param {Array} [id] The id value for the content file * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {string} [q] The search text * @param {Array} [resource_id] The id value of the parent learning resource for the content file * @param {Array} [run_id] The id value of the run that the content file belongs to @@ -6609,9 +6609,9 @@ export const ContentFileSearchApiFp = function (configuration?: Configuration) { * @param {Array} [content_feature_type] The feature type of the content file. Possible options are at api/v1/course_features/ * @param {Array} [id] The id value for the content file * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {string} [q] The search text * @param {Array} [resource_id] The id value of the parent learning resource for the content file * @param {Array} [run_id] The id value of the run that the content file belongs to @@ -6750,7 +6750,7 @@ export interface ContentFileSearchApiContentFileSearchRetrieveRequest { readonly limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array<'mitx' | 'ocw' | 'bootcamps' | 'xpro' | 'mitpe' | 'see'>} * @memberof ContentFileSearchApiContentFileSearchRetrieve */ @@ -6764,7 +6764,7 @@ export interface ContentFileSearchApiContentFileSearchRetrieveRequest { readonly offset?: number /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array<'edx' | 'ocw' | 'oll' | 'mitxonline' | 'bootcamps' | 'xpro' | 'csail' | 'mitpe' | 'see' | 'scc' | 'ctl' | 'whu' | 'susskind' | 'globalalumni' | 'simplilearn' | 'emeritus' | 'podcast' | 'youtube'>} * @memberof ContentFileSearchApiContentFileSearchRetrieve */ @@ -6920,9 +6920,9 @@ export const ContentfilesApiAxiosParamCreator = function ( * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -7082,9 +7082,9 @@ export const ContentfilesApiFp = function (configuration?: Configuration) { * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -7250,7 +7250,7 @@ export interface ContentfilesApiContentfilesListRequest { readonly limit?: number /** - * The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof ContentfilesApiContentfilesList */ @@ -7264,7 +7264,7 @@ export interface ContentfilesApiContentfilesListRequest { readonly offset?: number /** - * The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof ContentfilesApiContentfilesList */ @@ -7728,9 +7728,9 @@ export const CoursesApiAxiosParamCreator = function ( * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -7886,9 +7886,9 @@ export const CoursesApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -8082,9 +8082,9 @@ export const CoursesApiFp = function (configuration?: Configuration) { * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -8173,9 +8173,9 @@ export const CoursesApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -8407,7 +8407,7 @@ export interface CoursesApiCoursesContentfilesListRequest { readonly limit?: number /** - * The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof CoursesApiCoursesContentfilesList */ @@ -8421,7 +8421,7 @@ export interface CoursesApiCoursesContentfilesListRequest { readonly offset?: number /** - * The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof CoursesApiCoursesContentfilesList */ @@ -8526,7 +8526,7 @@ export interface CoursesApiCoursesListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof CoursesApiCoursesList */ @@ -8540,7 +8540,7 @@ export interface CoursesApiCoursesListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof CoursesApiCoursesList */ @@ -9236,9 +9236,9 @@ export const FeaturedApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -9437,9 +9437,9 @@ export const FeaturedApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -9663,7 +9663,7 @@ export interface FeaturedApiFeaturedListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof FeaturedApiFeaturedList */ @@ -9677,7 +9677,7 @@ export interface FeaturedApiFeaturedListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof FeaturedApiFeaturedList */ @@ -9968,9 +9968,9 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -10252,9 +10252,9 @@ export const LearningResourcesApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -10449,9 +10449,9 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {number} learning_resource_id id of the parent learning resource * @param {Array} [content_feature_type] Multiple values may be separated by commas. * @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` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {Array} [resource_id] Multiple values may be separated by commas. * @param {Array} [run_id] Multiple values may be separated by commas. * @param {*} [options] Override http request option. @@ -10623,9 +10623,9 @@ export const LearningResourcesApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -10903,7 +10903,7 @@ export interface LearningResourcesApiLearningResourcesContentfilesListRequest { readonly limit?: number /** - * The organization that offers a learning resource the content file belongs to * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ @@ -10917,7 +10917,7 @@ export interface LearningResourcesApiLearningResourcesContentfilesListRequest { readonly offset?: number /** - * The platform on which learning resources the content file belongs to is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof LearningResourcesApiLearningResourcesContentfilesList */ @@ -11078,7 +11078,7 @@ export interface LearningResourcesApiLearningResourcesListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof LearningResourcesApiLearningResourcesList */ @@ -11092,7 +11092,7 @@ export interface LearningResourcesApiLearningResourcesListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof LearningResourcesApiLearningResourcesList */ @@ -11520,9 +11520,9 @@ export const LearningResourcesSearchApiAxiosParamCreator = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -11686,9 +11686,9 @@ export const LearningResourcesSearchApiFp = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -11891,7 +11891,7 @@ export interface LearningResourcesSearchApiLearningResourcesSearchRetrieveReques readonly limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array<'mitx' | 'ocw' | 'bootcamps' | 'xpro' | 'mitpe' | 'see'>} * @memberof LearningResourcesSearchApiLearningResourcesSearchRetrieve */ @@ -11905,7 +11905,7 @@ export interface LearningResourcesSearchApiLearningResourcesSearchRetrieveReques readonly offset?: number /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array<'edx' | 'ocw' | 'oll' | 'mitxonline' | 'bootcamps' | 'xpro' | 'csail' | 'mitpe' | 'see' | 'scc' | 'ctl' | 'whu' | 'susskind' | 'globalalumni' | 'simplilearn' | 'emeritus' | 'podcast' | 'youtube'>} * @memberof LearningResourcesSearchApiLearningResourcesSearchRetrieve */ @@ -12204,9 +12204,9 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -12363,9 +12363,9 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -12516,9 +12516,9 @@ export const LearningResourcesUserSubscriptionApiAxiosParamCreator = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -12748,9 +12748,9 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -12839,9 +12839,9 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -12927,9 +12927,9 @@ export const LearningResourcesUserSubscriptionApiFp = function ( * @param {Array} [learning_format] The format(s) in which the learning resource is offered * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] * @param {number} [limit] Number of results to return per page - * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @param {Array} [offered_by] The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @param {number} [offset] The initial index from which to return the results - * @param {Array} [platform] The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @param {Array} [platform] The platform on which the learning resource 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 * @param {boolean | null} [professional] * @param {string} [q] The search text * @param {Array} [resource_category] The category of learning resource * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -13259,7 +13259,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array<'mitx' | 'ocw' | 'bootcamps' | 'xpro' | 'mitpe' | 'see'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckList */ @@ -13273,7 +13273,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly offset?: number /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array<'edx' | 'ocw' | 'oll' | 'mitxonline' | 'bootcamps' | 'xpro' | 'csail' | 'mitpe' | 'see' | 'scc' | 'ctl' | 'whu' | 'susskind' | 'globalalumni' | 'simplilearn' | 'emeritus' | 'podcast' | 'youtube'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionCheckList */ @@ -13406,7 +13406,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array<'mitx' | 'ocw' | 'bootcamps' | 'xpro' | 'mitpe' | 'see'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionList */ @@ -13420,7 +13420,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly offset?: number /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array<'edx' | 'ocw' | 'oll' | 'mitxonline' | 'bootcamps' | 'xpro' | 'csail' | 'mitpe' | 'see' | 'scc' | 'ctl' | 'whu' | 'susskind' | 'globalalumni' | 'simplilearn' | 'emeritus' | 'podcast' | 'youtube'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionList */ @@ -13546,7 +13546,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly limit?: number /** - * The organization that offers the learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * The organization that offers the learning resource * `mitx` - MITx * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps * `xpro` - MIT xPRO * `mitpe` - MIT Professional Education * `see` - MIT Sloan Executive Education * @type {Array<'mitx' | 'ocw' | 'bootcamps' | 'xpro' | 'mitpe' | 'see'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreate */ @@ -13560,7 +13560,7 @@ export interface LearningResourcesUserSubscriptionApiLearningResourcesUserSubscr readonly offset?: number /** - * The platform on which the learning resource is offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * The platform on which the learning resource 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 * @type {Array<'edx' | 'ocw' | 'oll' | 'mitxonline' | 'bootcamps' | 'xpro' | 'csail' | 'mitpe' | 'see' | 'scc' | 'ctl' | 'whu' | 'susskind' | 'globalalumni' | 'simplilearn' | 'emeritus' | 'podcast' | 'youtube'>} * @memberof LearningResourcesUserSubscriptionApiLearningResourcesUserSubscriptionSubscribeCreate */ @@ -14786,9 +14786,9 @@ export const LearningpathsApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -15291,9 +15291,9 @@ export const LearningpathsApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -15860,7 +15860,7 @@ export interface LearningpathsApiLearningpathsListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof LearningpathsApiLearningpathsList */ @@ -15874,7 +15874,7 @@ export interface LearningpathsApiLearningpathsListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof LearningpathsApiLearningpathsList */ @@ -16969,9 +16969,9 @@ export const PodcastEpisodesApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -17171,9 +17171,9 @@ export const PodcastEpisodesApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -17401,7 +17401,7 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof PodcastEpisodesApiPodcastEpisodesList */ @@ -17415,7 +17415,7 @@ export interface PodcastEpisodesApiPodcastEpisodesListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof PodcastEpisodesApiPodcastEpisodesList */ @@ -17836,9 +17836,9 @@ export const PodcastsApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -18113,9 +18113,9 @@ export const PodcastsApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -18435,7 +18435,7 @@ export interface PodcastsApiPodcastsListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof PodcastsApiPodcastsList */ @@ -18449,7 +18449,7 @@ export interface PodcastsApiPodcastsListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof PodcastsApiPodcastsList */ @@ -18948,9 +18948,9 @@ export const ProgramsApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -19149,9 +19149,9 @@ export const ProgramsApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -19375,7 +19375,7 @@ export interface ProgramsApiProgramsListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof ProgramsApiProgramsList */ @@ -19389,7 +19389,7 @@ export interface ProgramsApiProgramsListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof ProgramsApiProgramsList */ @@ -21957,9 +21957,9 @@ export const VideoPlaylistsApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -22238,9 +22238,9 @@ export const VideoPlaylistsApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -22562,7 +22562,7 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof VideoPlaylistsApiVideoPlaylistsList */ @@ -22576,7 +22576,7 @@ export interface VideoPlaylistsApiVideoPlaylistsListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof VideoPlaylistsApiVideoPlaylistsList */ @@ -22916,9 +22916,9 @@ export const VideosApiAxiosParamCreator = function ( * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -23117,9 +23117,9 @@ export const VideosApiFp = function (configuration?: Configuration) { * @param {Array>} [learning_format] The learning format of course/program resources * `online` - Online * `hybrid` - Hybrid * `in_person` - In person * @param {Array} [level] The academic level of the resources * `undergraduate` - Undergraduate * `graduate` - Graduate * `high_school` - High School * `noncredit` - Non-Credit * `advanced` - Advanced * `intermediate` - Intermediate * `introductory` - Introductory * @param {number} [limit] Number of results to return per page. - * @param {Array} [offered_by] The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * @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 * @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` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * @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 * @param {boolean} [professional] * @param {Array} [readable_id] Multiple values may be separated by commas. * @param {Array} [resource_category] The resource category of the learning resources * `course` - Course * `program` - Program * `learning_material` - Learning Material @@ -23342,7 +23342,7 @@ export interface VideosApiVideosListRequest { readonly limit?: number /** - * The organization that offers a learning resource * `mitx` - MITx * `ocw` - OCW * `bootcamps` - Bootcamps * `xpro` - xPRO * `mitpe` - Professional Education * `see` - Sloan Executive Education + * 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 * @type {Array<'bootcamps' | 'mitpe' | 'mitx' | 'ocw' | 'see' | 'xpro'>} * @memberof VideosApiVideosList */ @@ -23356,7 +23356,7 @@ export interface VideosApiVideosListRequest { readonly offset?: number /** - * The platform on which learning resources are offered * `edx` - edX * `ocw` - OCW * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps * `xpro` - xPRO * `csail` - CSAIL * `mitpe` - Professional Education * `see` - 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 + * 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 * @type {Array<'bootcamps' | 'csail' | 'ctl' | 'edx' | 'emeritus' | 'globalalumni' | 'mitpe' | 'mitxonline' | 'ocw' | 'oll' | 'podcast' | 'scc' | 'see' | 'simplilearn' | 'susskind' | 'whu' | 'xpro' | 'youtube'>} * @memberof VideosApiVideosList */ diff --git a/frontends/ol-components/src/components/Logo/Logo.tsx b/frontends/ol-components/src/components/Logo/Logo.tsx index 577f5b93ea..9637e0c34f 100644 --- a/frontends/ol-components/src/components/Logo/Logo.tsx +++ b/frontends/ol-components/src/components/Logo/Logo.tsx @@ -8,7 +8,7 @@ type PlatformObject = { export const PLATFORMS: Record = { [PlatformEnum.Ocw]: { - name: "OCW", + name: "MIT OpenCourseWare", image: "mit-ocw-logo-square.png", }, [PlatformEnum.Edx]: { @@ -24,7 +24,7 @@ export const PLATFORMS: Record = { image: null, }, [PlatformEnum.Xpro]: { - name: "xPRO", + name: "MIT xPRO", image: "mit-xpro-logo.png", }, [PlatformEnum.Podcast]: { @@ -40,7 +40,7 @@ export const PLATFORMS: Record = { image: null, }, [PlatformEnum.See]: { - name: "Sloan Executive Education", + name: "MIT Sloan Executive Education", image: "sloan-logo.png", }, [PlatformEnum.Scc]: { diff --git a/learning_resources/constants.py b/learning_resources/constants.py index ef0f234e3e..fadbd288db 100644 --- a/learning_resources/constants.py +++ b/learning_resources/constants.py @@ -52,11 +52,11 @@ class OfferedBy(ExtendedEnum): """ mitx = "MITx" - ocw = "OCW" + ocw = "MIT OpenCourseWare" bootcamps = "Bootcamps" - xpro = "xPRO" - mitpe = "Professional Education" - see = "Sloan Executive Education" + xpro = "MIT xPRO" + mitpe = "MIT Professional Education" + see = "MIT Sloan Executive Education" class PlatformType(ExtendedEnum): @@ -66,14 +66,14 @@ class PlatformType(ExtendedEnum): """ edx = "edX" - ocw = "OCW" + ocw = "MIT OpenCourseWare" oll = "Open Learning Library" mitxonline = "MITx Online" bootcamps = "Bootcamps" - xpro = "xPRO" + xpro = "MIT xPRO" csail = "CSAIL" - mitpe = "Professional Education" - see = "Sloan Executive Education" + mitpe = "MIT Professional Education" + see = "MIT Sloan Executive Education" scc = "Schwarzman College of Computing" ctl = "Center for Transportation & Logistics" whu = "WHU" diff --git a/learning_resources/data/channel_templates/offerors.json b/learning_resources/data/channel_templates/offerors.json index 4e3193ab60..3d11071390 100644 --- a/learning_resources/data/channel_templates/offerors.json +++ b/learning_resources/data/channel_templates/offerors.json @@ -21,7 +21,7 @@ "sub_heading": "For a global community of innovators and entrepreneurs, MIT Bootcamps provide intensive learning-by-doing experiences, virtually or in person to help participants advance a new venture while receiving real-time feedback. Bootcamps are immersive and participants work alongside MIT-trained coaches and other entrepreneurs selected from around the world." }, "xpro": { - "name": "xPRO", + "name": "MIT xPRO", "logo": "/static/images/unit_logos/xpro.svg", "banner_background": "/static/images/unit_banners/xpro.jpg", "heading": "Developing the workforce of tomorrow with a balance of technical and leadership excellence.", diff --git a/learning_resources/etl/loaders_test.py b/learning_resources/etl/loaders_test.py index d33cd3a9bc..00db1bd972 100644 --- a/learning_resources/etl/loaders_test.py +++ b/learning_resources/etl/loaders_test.py @@ -704,7 +704,7 @@ def test_load_offered_bys( if offeror_exists and not null_data: expected = ocw_offeror - load_offered_by(resource, None if null_data else {"name": "OCW"}) + load_offered_by(resource, None if null_data else {"name": "MIT OpenCourseWare"}) assert resource.offered_by == expected diff --git a/learning_resources/etl/prolearn.py b/learning_resources/etl/prolearn.py index f1e2be9c9a..a01cdc008f 100644 --- a/learning_resources/etl/prolearn.py +++ b/learning_resources/etl/prolearn.py @@ -68,7 +68,7 @@ def parse_offered_by(document: dict) -> LearningResourceOfferor: LearningResourceOfferor: offeror or None """ return LearningResourceOfferor.objects.filter( - name=document["department"].lstrip("MIT").strip() + name=document["department"].strip() ).first() diff --git a/learning_resources/etl/prolearn_test.py b/learning_resources/etl/prolearn_test.py index a8efa458eb..6c1266de60 100644 --- a/learning_resources/etl/prolearn_test.py +++ b/learning_resources/etl/prolearn_test.py @@ -45,7 +45,7 @@ def _mock_offerors_platforms(): """Make sure necessary platforms and offerors exist""" LearningResourcePlatformFactory.create(code="csail") LearningResourceOfferorFactory.create( - name="Professional Education", code="mitpe", professional=True + name="MIT Professional Education", code="mitpe", professional=True ) LearningResourcePlatformFactory.create( code="mitpe", name="MIT Professional Education" @@ -67,7 +67,7 @@ def mock_csail_programs_data(): @pytest.fixture() def mock_mitpe_courses_data(): - """Mock prolearn Professional Education courses data""" + """Mock prolearn MIT Professional Education courses data""" with open("./test_json/prolearn_mitpe_courses.json") as f: # noqa: PTH123 return json.loads(f.read()) @@ -300,7 +300,7 @@ def test_parse_topic(topic, expected): @pytest.mark.parametrize( ("department", "offered_by"), [ - ("MIT Professional Education", "Professional Education"), + ("MIT Professional Education", "MIT Professional Education"), ("MIT Other", None), ], ) diff --git a/learning_resources/etl/xpro.py b/learning_resources/etl/xpro.py index ebb705da0b..88c515e458 100644 --- a/learning_resources/etl/xpro.py +++ b/learning_resources/etl/xpro.py @@ -33,7 +33,7 @@ "Simplilearn": PlatformType.simplilearn.name, "Susskind": PlatformType.susskind.name, "WHU": PlatformType.whu.name, - "xPRO": PlatformType.xpro.name, + "MIT xPRO": PlatformType.xpro.name, } diff --git a/learning_resources/fixtures/offered_by.json b/learning_resources/fixtures/offered_by.json index 84093c676e..012cd53e81 100644 --- a/learning_resources/fixtures/offered_by.json +++ b/learning_resources/fixtures/offered_by.json @@ -22,7 +22,7 @@ { "model": "learning_resources.LearningResourceOfferor", "fields": { - "name": "OCW", + "name": "MIT OpenCourseWare", "code": "ocw", "professional": false, "offerings": ["Learning Materials"], @@ -57,7 +57,7 @@ { "model": "learning_resources.LearningResourceOfferor", "fields": { - "name": "xPRO", + "name": "MIT xPRO", "code": "xpro", "professional": true, "offerings": ["Courses", "Programs"], @@ -75,7 +75,7 @@ { "model": "learning_resources.LearningResourceOfferor", "fields": { - "name": "Professional Education", + "name": "MIT Professional Education", "code": "mitpe", "professional": true, "offerings": ["Courses", "Certificates"], @@ -100,7 +100,7 @@ { "model": "learning_resources.LearningResourceOfferor", "fields": { - "name": "Sloan Executive Education", + "name": "MIT Sloan Executive Education", "code": "see", "professional": true, "offerings": ["Courses", "Programs"], diff --git a/learning_resources/fixtures/platforms.json b/learning_resources/fixtures/platforms.json index 8900a46f88..60bd4e8ebf 100644 --- a/learning_resources/fixtures/platforms.json +++ b/learning_resources/fixtures/platforms.json @@ -3,7 +3,7 @@ "model": "learning_resources.LearningResourcePlatform", "fields": { "code": "ocw", - "name": "OCW", + "name": "MIT OpenCourseWare", "is_edx": false, "has_content_files": true, "url": "https://ocw.mit.edu/", @@ -51,7 +51,7 @@ "model": "learning_resources.LearningResourcePlatform", "fields": { "code": "xpro", - "name": "xPRO", + "name": "MIT xPRO", "is_edx": true, "has_content_files": true, "url": "https://xpro.mit.edu/", @@ -99,7 +99,7 @@ "model": "learning_resources.LearningResourcePlatform", "fields": { "code": "see", - "name": "Sloan Executive Education", + "name": "MIT Sloan Executive Education", "is_edx": false, "has_content_files": false, "url": "https://executive.mit.edu/", diff --git a/learning_resources_search/serializers_test.py b/learning_resources_search/serializers_test.py index b97e41597b..8bb0cb7254 100644 --- a/learning_resources_search/serializers_test.py +++ b/learning_resources_search/serializers_test.py @@ -64,7 +64,7 @@ {"id": 5, "name": "Management"}, {"id": 6, "name": "Innovation"}, ], - "offered_by": "xPRO", + "offered_by": "MIT xPRO", "course_feature": [], "department": None, "learning_format": [ @@ -163,7 +163,7 @@ "offered_by": { "doc_count_error_upper_bound": 0, "sum_other_doc_count": 0, - "buckets": [{"key": "xPRO", "doc_count": 9}], + "buckets": [{"key": "MIT xPRO", "doc_count": 9}], }, }, }, @@ -206,7 +206,7 @@ {"id": 5, "name": "Management"}, {"id": 6, "name": "Innovation"}, ], - "offered_by": "xPRO", + "offered_by": "MIT xPRO", "course_feature": [], "department": None, "learning_format": [ @@ -284,7 +284,7 @@ "metadata": { "aggregations": { "level": [], - "offered_by": [{"key": "xPRO", "doc_count": 9}], + "offered_by": [{"key": "MIT xPRO", "doc_count": 9}], }, "suggest": ["manage"], }, diff --git a/news_events/etl/sloan_exec_news_test.py b/news_events/etl/sloan_exec_news_test.py index 871cc7c1f2..7a8bf06951 100644 --- a/news_events/etl/sloan_exec_news_test.py +++ b/news_events/etl/sloan_exec_news_test.py @@ -1,4 +1,4 @@ -"""Tests for Sloan Executive Education news ETL pipeline""" +"""Tests for MIT Sloan Executive Education news ETL pipeline""" import json from pathlib import Path diff --git a/openapi/specs/v1.yaml b/openapi/specs/v1.yaml index f24e53d500..9574a562a5 100644 --- a/openapi/specs/v1.yaml +++ b/openapi/specs/v1.yaml @@ -183,15 +183,15 @@ paths: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n* `xpro`\ - \ - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" - in: query name: offset schema: @@ -224,14 +224,14 @@ paths: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -242,13 +242,14 @@ paths: * `podcast` - Podcast * `youtube` - YouTube description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education\n* `scc` - Schwarzman College of Computing\n* `ctl` - Center\ - \ for Transportation & Logistics\n* `whu` - WHU\n* `susskind` - Susskind\n\ - * `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n* `emeritus`\ - \ - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` - Open\ + \ Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n\ + * `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman College of\ + \ Computing\n* `ctl` - Center for Transportation & Logistics\n* `whu` -\ + \ WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn`\ + \ - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube`\ + \ - YouTube" - in: query name: q schema: @@ -348,11 +349,11 @@ paths: The organization that offers a learning resource the content file belongs to * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -390,14 +391,14 @@ paths: The platform on which learning resources the content file belongs to is offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -712,11 +713,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -754,14 +755,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -949,11 +950,11 @@ paths: The organization that offers a learning resource the content file belongs to * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -991,14 +992,14 @@ paths: The platform on which learning resources the content file belongs to is offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -1312,11 +1313,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -1354,14 +1355,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -1705,11 +1706,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -1747,14 +1748,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -1942,11 +1943,11 @@ paths: The organization that offers a learning resource the content file belongs to * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -1984,14 +1985,14 @@ paths: The platform on which learning resources the content file belongs to is offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -2369,15 +2370,15 @@ paths: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n* `xpro`\ - \ - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" - in: query name: offset schema: @@ -2410,14 +2411,14 @@ paths: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -2428,13 +2429,14 @@ paths: * `podcast` - Podcast * `youtube` - YouTube description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education\n* `scc` - Schwarzman College of Computing\n* `ctl` - Center\ - \ for Transportation & Logistics\n* `whu` - WHU\n* `susskind` - Susskind\n\ - * `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n* `emeritus`\ - \ - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` - Open\ + \ Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n\ + * `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman College of\ + \ Computing\n* `ctl` - Center for Transportation & Logistics\n* `whu` -\ + \ WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn`\ + \ - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube`\ + \ - YouTube" - in: query name: professional schema: @@ -2788,15 +2790,15 @@ paths: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n* `xpro`\ - \ - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" - in: query name: offset schema: @@ -2829,14 +2831,14 @@ paths: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -2847,13 +2849,14 @@ paths: * `podcast` - Podcast * `youtube` - YouTube description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education\n* `scc` - Schwarzman College of Computing\n* `ctl` - Center\ - \ for Transportation & Logistics\n* `whu` - WHU\n* `susskind` - Susskind\n\ - * `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n* `emeritus`\ - \ - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` - Open\ + \ Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n\ + * `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman College of\ + \ Computing\n* `ctl` - Center for Transportation & Logistics\n* `whu` -\ + \ WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn`\ + \ - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube`\ + \ - YouTube" - in: query name: professional schema: @@ -3232,15 +3235,15 @@ paths: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n* `xpro`\ - \ - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" - in: query name: offset schema: @@ -3273,14 +3276,14 @@ paths: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -3291,13 +3294,14 @@ paths: * `podcast` - Podcast * `youtube` - YouTube description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education\n* `scc` - Schwarzman College of Computing\n* `ctl` - Center\ - \ for Transportation & Logistics\n* `whu` - WHU\n* `susskind` - Susskind\n\ - * `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n* `emeritus`\ - \ - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` - Open\ + \ Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n\ + * `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman College of\ + \ Computing\n* `ctl` - Center for Transportation & Logistics\n* `whu` -\ + \ WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn`\ + \ - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube`\ + \ - YouTube" - in: query name: professional schema: @@ -3667,15 +3671,15 @@ paths: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n* `xpro`\ - \ - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" - in: query name: offset schema: @@ -3708,14 +3712,14 @@ paths: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -3726,13 +3730,14 @@ paths: * `podcast` - Podcast * `youtube` - YouTube description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education\n* `scc` - Schwarzman College of Computing\n* `ctl` - Center\ - \ for Transportation & Logistics\n* `whu` - WHU\n* `susskind` - Susskind\n\ - * `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n* `emeritus`\ - \ - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` - Open\ + \ Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n\ + * `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman College of\ + \ Computing\n* `ctl` - Center for Transportation & Logistics\n* `whu` -\ + \ WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn`\ + \ - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube`\ + \ - YouTube" - in: query name: professional schema: @@ -4065,11 +4070,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -4107,14 +4112,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -4783,11 +4788,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -4825,14 +4830,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -5176,11 +5181,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -5218,14 +5223,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -5656,11 +5661,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -5698,14 +5703,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -6439,11 +6444,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -6481,14 +6486,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -6898,11 +6903,11 @@ paths: The organization that offers a learning resource * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education explode: true style: form - name: offset @@ -6940,14 +6945,14 @@ paths: The platform on which learning resources are offered * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -8800,18 +8805,18 @@ components: type: string description: |- * `mitx` - MITx - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `bootcamps` - Bootcamps - * `xpro` - xPRO - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `xpro` - MIT xPRO + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education x-enum-descriptions: - MITx - - OCW + - MIT OpenCourseWare - Bootcamps - - xPRO - - Professional Education - - Sloan Executive Education + - MIT xPRO + - MIT Professional Education + - MIT Sloan Executive Education PaginatedArticleList: type: object required: @@ -9402,21 +9407,22 @@ components: items: $ref: '#/components/schemas/OfferedByEnum' description: "The organization that offers the learning resource \ - \ \n\n* `mitx` - MITx\n* `ocw` - OCW\n* `bootcamps` - Bootcamps\n\ - * `xpro` - xPRO\n* `mitpe` - Professional Education\n* `see` - Sloan Executive\ - \ Education" + \ \n\n* `mitx` - MITx\n* `ocw` - MIT OpenCourseWare\n* `bootcamps`\ + \ - Bootcamps\n* `xpro` - MIT xPRO\n* `mitpe` - MIT Professional Education\n\ + * `see` - MIT Sloan Executive Education" platform: type: array items: $ref: '#/components/schemas/PlatformEnum' description: "The platform on which the learning resource is offered \ - \ \n\n* `edx` - edX\n* `ocw` - OCW\n* `oll` - Open Learning Library\n\ - * `mitxonline` - MITx Online\n* `bootcamps` - Bootcamps\n* `xpro` - xPRO\n\ - * `csail` - CSAIL\n* `mitpe` - Professional Education\n* `see` - Sloan\ - \ Executive Education\n* `scc` - Schwarzman College of Computing\n* `ctl`\ - \ - Center for Transportation & Logistics\n* `whu` - WHU\n* `susskind`\ - \ - Susskind\n* `globalalumni` - Global Alumni\n* `simplilearn` - Simplilearn\n\ - * `emeritus` - Emeritus\n* `podcast` - Podcast\n* `youtube` - YouTube" + \ \n\n* `edx` - edX\n* `ocw` - MIT OpenCourseWare\n* `oll` -\ + \ Open Learning Library\n* `mitxonline` - MITx Online\n* `bootcamps` -\ + \ Bootcamps\n* `xpro` - MIT xPRO\n* `csail` - CSAIL\n* `mitpe` - MIT Professional\ + \ Education\n* `see` - MIT Sloan Executive Education\n* `scc` - Schwarzman\ + \ College of Computing\n* `ctl` - Center for Transportation & Logistics\n\ + * `whu` - WHU\n* `susskind` - Susskind\n* `globalalumni` - Global Alumni\n\ + * `simplilearn` - Simplilearn\n* `emeritus` - Emeritus\n* `podcast` -\ + \ Podcast\n* `youtube` - YouTube" topic: type: array items: @@ -9582,14 +9588,14 @@ components: type: string description: |- * `edx` - edX - * `ocw` - OCW + * `ocw` - MIT OpenCourseWare * `oll` - Open Learning Library * `mitxonline` - MITx Online * `bootcamps` - Bootcamps - * `xpro` - xPRO + * `xpro` - MIT xPRO * `csail` - CSAIL - * `mitpe` - Professional Education - * `see` - Sloan Executive Education + * `mitpe` - MIT Professional Education + * `see` - MIT Sloan Executive Education * `scc` - Schwarzman College of Computing * `ctl` - Center for Transportation & Logistics * `whu` - WHU @@ -9601,14 +9607,14 @@ components: * `youtube` - YouTube x-enum-descriptions: - edX - - OCW + - MIT OpenCourseWare - Open Learning Library - MITx Online - Bootcamps - - xPRO + - MIT xPRO - CSAIL - - Professional Education - - Sloan Executive Education + - MIT Professional Education + - MIT Sloan Executive Education - Schwarzman College of Computing - Center for Transportation & Logistics - WHU diff --git a/test_json/xpro_courses.json b/test_json/xpro_courses.json index 8d55cf2924..87f6f924d2 100644 --- a/test_json/xpro_courses.json +++ b/test_json/xpro_courses.json @@ -8,7 +8,7 @@ "readable_id": "course-v1:xPRO+SysEngxB1", "courseruns": [], "next_run_id": null, - "platform": "xPRO", + "platform": "MIT xPRO", "topics": [{ "name": "Business:Leadership & Organizations" }], "format": "Online" }, @@ -18,7 +18,7 @@ "description": "

Course 3 of 4 that comprises the Architecture and Systems Engineering Professional Certificate Program. This course may be taken individually, without enrolling in the professional certificate program.

", "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+SysEngxB3", - "platform": "xPRO", + "platform": "MIT xPRO", "courseruns": [ { "title": "SEED Model-Based Systems Engineering: Documentation and Analysis - Fall 2020", @@ -46,7 +46,7 @@ "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+SysEngxB2", "url": "https://xpro.mit.edu/courses/course-v1:xPRO+SysEngxB2", - "platform": "xPRO", + "platform": "MIT xPRO", "courseruns": [ { "title": "SEED Models in Engineering - Spring 2020", @@ -76,7 +76,7 @@ "courseruns": [], "next_run_id": null, "topics": [{ "name": "Business:Leadership & Organizations" }], - "platform": "xPRO", + "platform": "MIT xPRO", "format": "Online" }, { @@ -85,7 +85,7 @@ "description": "

An introductory course to Digital Learning

", "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+DgtlLearn1", - "platform": "xPRO", + "platform": "MIT xPRO", "format": "Online", "courseruns": [ { @@ -138,7 +138,7 @@ "next_run_id": null, "topics": [{ "name": "Business:Leadership & Organizations" }], "format": "Online", - "platform": "xPRO" + "platform": "MIT xPRO" }, { "id": 32, @@ -150,6 +150,6 @@ "next_run_id": null, "topics": [{ "name": "Business:Leadership & Organizations" }], "format": "Online", - "platform": "xPRO" + "platform": "MIT xPRO" } ] diff --git a/test_json/xpro_programs.json b/test_json/xpro_programs.json index e1492d28a0..efbbdcc62e 100644 --- a/test_json/xpro_programs.json +++ b/test_json/xpro_programs.json @@ -15,7 +15,7 @@ { "name": "Planning" } ], "format": "Online", - "platform": "xPRO", + "platform": "MIT xPRO", "courses": [ { "id": 18, @@ -26,7 +26,7 @@ "courseruns": [], "next_run_id": null, "topics": [{ "name": "Business:Leadership & Organizations" }], - "platform": "xPRO", + "platform": "MIT xPRO", "format": "Online" }, { @@ -36,7 +36,7 @@ "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+SysEngxB3", "topics": [], - "platform": "xPRO", + "platform": "MIT xPRO", "format": "Online", "courseruns": [ { @@ -63,7 +63,7 @@ "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+SysEngxB2", "topics": [{ "name": "Business:Leadership & Organizations" }], - "platform": "xPRO", + "platform": "MIT xPRO", "format": "Online", "courseruns": [ { @@ -92,7 +92,7 @@ "courseruns": [], "next_run_id": null, "topics": [], - "platform": "xPRO" + "platform": "MIT xPRO" } ] }, @@ -109,7 +109,7 @@ "enrollment_start": null, "topics": [{ "name": "Business:Leadership & Organizations" }], "format": "In person", - "platform": "xPRO", + "platform": "MIT xPRO", "courses": [ { "id": 30, @@ -118,7 +118,7 @@ "thumbnail_url": "/static/images/mit-dome.png", "readable_id": "course-v1:xPRO+DgtlLearn1", "topics": [{ "name": "Business:Leadership & Organizations" }], - "platform": "xPRO", + "platform": "MIT xPRO", "courseruns": [ { "title": "SEED Digital Learning 100 - August 2020", @@ -168,7 +168,7 @@ "courseruns": [], "next_run_id": null, "topics": [{ "name": "Business:Leadership & Organizations" }], - "platform": "xPRO" + "platform": "MIT xPRO" }, { "id": 32, @@ -179,7 +179,7 @@ "courseruns": [], "next_run_id": null, "topics": [], - "platform": "xPRO" + "platform": "MIT xPRO" } ] } From c812c793201594077fd2df348af60bed6e71734f Mon Sep 17 00:00:00 2001 From: Jon Kafton <939376+jonkafton@users.noreply.github.com> Date: Mon, 1 Jul 2024 22:36:40 +0200 Subject: [PATCH 19/20] Fix default image height in resource cards (#1212) * Provide image height explicity * Revert overlapping date fix (should fix, but not for this PR) --- .../LearningResourceCard.tsx | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx index 88b42dc883..817c8503d0 100644 --- a/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx +++ b/frontends/ol-components/src/components/LearningResourceCard/LearningResourceCard.tsx @@ -30,18 +30,22 @@ const SkeletonImage = styled(Skeleton)<{ aspect: number }>` padding-bottom: ${({ aspect }) => 100 / aspect}%; ` +const getImageDimensions = (size: Size, isMedia: boolean) => { + const dimensions = { + small: { width: 190, height: isMedia ? 190 : 120 }, + medium: { width: 298, height: isMedia ? 298 : 170 }, + } + return dimensions[size] +} + const getEmbedlyUrl = ( resource: LearningResource, size: Size, isMedia: boolean, ) => { - const dimensions = { - small: { width: 190, height: isMedia ? 190 : 120 }, - medium: { width: 298, height: isMedia ? 298 : 170 }, - } return embedlyCroppedImage(resource.image!.url!, { key: APP_SETTINGS.embedlyKey || process.env.EMBEDLY_KEY!, - ...dimensions[size], + ...getImageDimensions(size, isMedia), }) } @@ -188,7 +192,7 @@ const LearningResourceCard: React.FC = ({ : DEFAULT_RESOURCE_IMG } alt={resource.image?.alt ?? ""} - height="auto" + height={getImageDimensions(size, isMedia).height} /> From ea46bbbdaeabb3b401c2c6a410b8d4b8edfaca09 Mon Sep 17 00:00:00 2001 From: Doof Date: Mon, 1 Jul 2024 20:41:09 +0000 Subject: [PATCH 20/20] Release 0.13.17 --- RELEASE.rst | 23 +++++++++++++++++++++++ main/settings.py | 2 +- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/RELEASE.rst b/RELEASE.rst index 9744cddc89..e74d0d04ba 100644 --- a/RELEASE.rst +++ b/RELEASE.rst @@ -1,6 +1,29 @@ Release Notes ============= +Version 0.13.17 +--------------- + +- Fix default image height in resource cards (#1212) +- update unit names (#1198) +- Update opensearchproject/opensearch Docker tag to v2.15.0 (#1205) +- Update mcr.microsoft.com/playwright Docker tag to v1.45.0 (#1203) +- Update dependency ruff to v0.5.0 (#1202) +- Update Node.js to v20.15.0 (#1201) +- Shanbady/log out flow (#1199) +- update mitpe unit data (#1194) +- update sloan executive education offerings (#1193) +- adding post logout redirect to keycloak (#1192) +- stop publishing github pages every pr (#1197) +- setting 100px as default width for buttons (#1185) +- Don't display carousel tabs if there's no data to display (#1169) +- Filled vs Unfilled Bookmarks (#1180) +- Square aspect ratio for media resource images (#1183) +- Add resource category to apis (#1188) +- Scroll results into view when paginating (#1189) +- Drawer CSS fixes (#1190) +- Updates to ChoiceBox; Checkbox, Radio components (#1174) + Version 0.13.16 (Released June 28, 2024) --------------- diff --git a/main/settings.py b/main/settings.py index 9d5862565b..910e0c3242 100644 --- a/main/settings.py +++ b/main/settings.py @@ -33,7 +33,7 @@ from main.settings_pluggy import * # noqa: F403 from openapi.settings_spectacular import open_spectacular_settings -VERSION = "0.13.16" +VERSION = "0.13.17" log = logging.getLogger()