{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./app/react/courses/components/CoursesGrid.js","webpack:///./app/react/courses/components/CourseCard.js","webpack:///./app/react/courses/components/Filters.js","webpack:///./app/react/courses/components/EmptyState.js","webpack:///./app/react/courses/Courses.js","webpack:///./app/react/courses/App.js","webpack:///./app/react/jsPacks/courses.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","exports","module","l","e","Promise","resolve","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","CoursesGrid","children","props","display","justifyContent","gridTemplateColumns","gridGap","propTypes","PropTypes","node","isRequired","StyledLink","styled","Link","theme","colors","blue500","radii","rounded","shadows","CardContent","Box","attrs","borderRadius","color","width","height","bg","CourseCard","slug","thumbnail","levels","courseType","title","position","href","routes","basePath","reset","flexDirection","src","alt","small","style","objectFit","py","px","alignItems","mb","fontSize","fontWeight","COURSE_TYPE_LABELS","as","textAlign","pr","icon","string","oneOf","keys","ALL_OPTION","label","MATERIAL_TYPES","Filters","categories","selectedCategory","onFilterCategory","selectedLevel","onFilterLevel","selectedMaterialType","onFilterMaterialType","courseLevels","materialTypes","options","find","mt","getOptionText","getOptionValue","onChange","val","lv","id","cat","defaultProps","arrayOf","shape","oneOfType","number","func","EmptyState","onClick","EmptyPlane","Courses","useState","isTutorialOpen","setIsTutorialOpen","useQueryParams","page","NumberParam","level","StringParam","material","category","query","setQuery","materialType","categoryId","useGetCourses","limit","loadingCourses","coursesData","refetchCourses","levelPreference","getInitialState","useGetCoursesCategories","loadingCategories","handleUpdateFilter","updatedQuery","handlePageNav","newPage","setTimeout","scrollTo","top","behavior","useEffect","parameteredMaterialType","URLSearchParams","location","search","levelsList","getLevelsByType","cefrLevels","cefr","clbLevels","clb","eldLevels","eld","nrsLevels","nrs","none","pb","measure","courses","map","elliiLevels","levelsByType","currentPage","totalPages","onPageButtonClicked","TutorialVideo","videoId","open","onOpenChange","zIndex","queryClient","QueryClient","defaultOptions","queries","refetchOnWindowFocus","refetchOnMount","refetchOnReconnect","retry","staleTime","TWENTY_FOUR_HOURS_IN_MS","App","WebFont","load","google","families","basename","ReactRouterRoute","Route","QueryClientProvider","client","ElliiThemeProvider","document","addEventListener","mountPoint","getElementById","ReactDOM","render"],"mappings":"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","file":"courses.9cde2514e0b296545850.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t\"courses\": 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// The chunk loading function for additional chunks\n \t// Since all referenced chunks are already included\n \t// in this file, this function is empty here.\n \t__webpack_require__.e = function requireEnsure() {\n \t\treturn Promise.resolve();\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"//d3uk5h2fsqai9v.cloudfront.net/js-packs/\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1552,\"vendor\",\"package-common\",\"ellii\",\"react\",\"courses~interactiveSets~teacher/myclasses~teacher/studentProfile\",\"course~courses\"]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import PropTypes from 'prop-types'\n\nimport { Box } from '@redriverpress/system'\n\nexport default function CoursesGrid({ children, ...props }) {\n return (\n \n {children}\n \n )\n}\n\nCoursesGrid.propTypes = {\n children: PropTypes.node.isRequired,\n}\n","import PropTypes from 'prop-types'\nimport styled from 'styled-components'\nimport {\n Box,\n Icon,\n Heading,\n Image,\n Link,\n theme,\n Text,\n} from '@redriverpress/system'\n\nimport { COURSE_TYPE_LABELS } from 'Common/constants/contentTypes'\nimport { routes } from '../common/constants'\n\nconst StyledLink = styled(Link)`\n &:focus {\n outline: none;\n }\n\n &:focus,\n &:focus-visible {\n box-shadow: 0 0 0 2px ${props => props.theme.colors.blue500};\n }\n\n &:after {\n content: '';\n position: absolute;\n inset: 0;\n border-radius: ${props => props.theme.radii.rounded};\n box-shadow: ${props => props.theme.shadows[3]};\n opacity: 0;\n transition: 0.15s ease-in;\n }\n\n &:hover:after,\n &:focus:after {\n opacity: 1;\n }\n`\n\nconst CardContent = styled(Box).attrs({\n borderRadius: 'small',\n color: 'black',\n p: 0,\n width: 1,\n height: '100%',\n bg: 'white',\n})``\n\nexport default function CourseCard({\n slug,\n thumbnail,\n levels,\n courseType,\n title,\n}) {\n return (\n \n \n \n \n \n \n \n {COURSE_TYPE_LABELS[courseType]}\n \n \n \n {title}\n \n \n \n {levels}\n \n \n \n \n \n )\n}\n\nCourseCard.propTypes = {\n slug: PropTypes.string.isRequired,\n title: PropTypes.string.isRequired,\n thumbnail: PropTypes.string.isRequired,\n levels: PropTypes.string.isRequired,\n courseType: PropTypes.oneOf(Object.keys(COURSE_TYPE_LABELS)).isRequired,\n}\n","import PropTypes from 'prop-types'\nimport { Box, Select } from '@redriverpress/system'\n\nconst ALL_OPTION = { label: 'All', value: '' }\nconst MATERIAL_TYPES = [\n { label: 'Courses', value: 'courses' },\n { label: 'Packs', value: 'packs' },\n]\n\nexport default function Filters({\n categories,\n levels,\n selectedCategory,\n onFilterCategory,\n selectedLevel,\n onFilterLevel,\n selectedMaterialType,\n onFilterMaterialType,\n}) {\n const courseLevels = [ALL_OPTION, ...levels]\n const materialTypes = [ALL_OPTION, ...MATERIAL_TYPES]\n\n return (\n \n \n )\n}\n\nFilters.defaultProps = {\n selectedCategory: '',\n selectedLevel: '',\n selectedMaterialType: '',\n}\n\nFilters.propTypes = {\n categories: PropTypes.arrayOf(\n PropTypes.shape({\n id: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n name: PropTypes.string,\n })\n ).isRequired,\n levels: PropTypes.arrayOf(\n PropTypes.shape({\n value: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),\n label: PropTypes.string,\n })\n ).isRequired,\n selectedCategory: PropTypes.string,\n onFilterCategory: PropTypes.func.isRequired,\n selectedLevel: PropTypes.string,\n onFilterLevel: PropTypes.func.isRequired,\n selectedMaterialType: PropTypes.string,\n onFilterMaterialType: PropTypes.func.isRequired,\n}\n","import PropTypes from 'prop-types'\n\nimport { Box, Button, Heading, Icon, Image, Text } from '@redriverpress/system'\nimport EmptyPlane from 'Images/empty_state_exclamation_plane.svg'\n\nexport default function EmptyState({ onClick }) {\n return (\n \n \n {/* For some reason `my` doesn't work on Heading */}\n \n No available content\n \n Please try updating your filters.\n \n \n )\n}\n\nEmptyState.propTypes = {\n onClick: PropTypes.func.isRequired,\n}\n","import { useState, useEffect } from 'react'\n\nimport {\n Box,\n Container,\n Heading,\n Icon,\n Loading,\n Pagination,\n Text,\n TransparentButton,\n} from '@redriverpress/system'\nimport { NumberParam, StringParam, useQueryParams } from 'use-query-params'\nimport { levels } from 'Common/constants/levels'\n\nimport TutorialVideo from 'Common/components/TutorialVideo'\nimport getInitialState from 'Common/utils/getInitialState'\nimport getLevelsByType from 'Common/utils/getLevelsByType'\nimport { useGetCourses, useGetCoursesCategories } from './hooks/useGetCourses'\nimport CoursesGrid from './components/CoursesGrid'\nimport CourseCard from './components/CourseCard'\nimport Filters from './components/Filters'\nimport EmptyState from './components/EmptyState'\n\nconst scrollToTop = () => {\n const scrolly = () =>\n window.scrollTo({\n top: 0,\n behavior: 'smooth',\n })\n setTimeout(scrolly, 300)\n}\n\nexport default function Courses() {\n const [isTutorialOpen, setIsTutorialOpen] = useState(false)\n const [query, setQuery] = useQueryParams({\n page: NumberParam,\n level: StringParam,\n material: StringParam,\n category: NumberParam,\n })\n\n const { page = 1, level, material: materialType, category: categoryId } =\n query || {}\n const { loadingCourses, coursesData, refetchCourses } = useGetCourses({\n page,\n level,\n categoryId,\n materialType,\n limit: 48,\n })\n\n const { levelPreference } = getInitialState()\n const { loadingCategories, categories } = useGetCoursesCategories()\n\n const handleUpdateFilter = (key, value) => {\n const updatedQuery = {\n page,\n level,\n material: materialType,\n category: categoryId,\n [key]: value,\n }\n setQuery(updatedQuery)\n }\n\n const handlePageNav = newPage => {\n handleUpdateFilter('page', newPage)\n refetchCourses()\n scrollToTop()\n }\n\n const resetFilters = () => {\n const updatedQuery = {\n page: 1,\n level: null,\n material: null,\n category: null,\n }\n setQuery(updatedQuery)\n }\n\n useEffect(() => {\n // reset to page 1 if one of the filters change\n handlePageNav(1)\n }, [level, categoryId, materialType])\n\n useEffect(() => {\n const searchParams = new URLSearchParams(window.location.search)\n const parameteredMaterialType = searchParams.get('materialType')\n // if (!parameteredMaterialType) return\n // setMaterialType(parameteredMaterialType)\n\n if (parameteredMaterialType) {\n const updatedQuery = {\n level,\n material: parameteredMaterialType,\n category: categoryId,\n }\n setQuery(updatedQuery)\n }\n }, [])\n\n const levelsList = getLevelsByType(levelPreference, {\n cefrLevels: levels.cefr,\n clbLevels: levels.clb,\n eldLevels: levels.eld,\n nrsLevels: levels.nrs,\n levels: levels.none,\n })\n\n return (\n <>\n \n \n {/* HEADER */}\n \n Courses & Study Packs\n \n \n Here you'll find bundles of lessons in a suggested sequence.\n Study Packs contain 3–6 lessons related by theme, skill, or\n target structure. Courses are more comprehensive and may include\n assessment. You can assign students access to all of the content at\n once or release items one at a time.\n \n setIsTutorialOpen(true)}\n display='flex'\n alignItems='center'\n justifyContent='space-between'\n >\n \n Watch tutorial\n \n {/* FILTERS */}\n {!loadingCategories && (\n handleUpdateFilter('level', value)}\n selectedCategory={categoryId}\n onFilterCategory={value => handleUpdateFilter('category', value)}\n selectedMaterialType={materialType}\n onFilterMaterialType={value =>\n handleUpdateFilter('material', value)\n }\n />\n )}\n {/* COURSES LIST */}\n \n {loadingCourses && }\n {!loadingCourses &&\n coursesData.courses.map(\n ({\n id,\n title,\n slug,\n levels: elliiLevels,\n clbLevels,\n eldLevels,\n cefrLevels,\n nrsLevels,\n thumbnail,\n courseType,\n }) => {\n const levelsByType = getLevelsByType(levelPreference, {\n levels: elliiLevels,\n clbLevels,\n eldLevels,\n cefrLevels,\n nrsLevels,\n })\n\n return (\n \n )\n }\n )}\n \n {!loadingCourses && !coursesData.courses.length && (\n \n )}\n {!loadingCourses && !!coursesData.courses.length && (\n handlePageNav(newPage)}\n mt={4}\n mb={[4, null, null, 0]}\n />\n )}\n \n \n \n >\n )\n}\n","import WebFont from 'webfontloader'\nimport { BrowserRouter as Router, Route } from 'react-router-dom'\nimport { QueryClient, QueryClientProvider } from 'react-query'\nimport ElliiThemeProvider from 'Common/components/ElliiThemeProvider'\nimport { TWENTY_FOUR_HOURS_IN_MS } from 'Common/utils/datetime'\n\nimport { QueryParamProvider } from 'use-query-params'\nimport Courses from './Courses'\nimport { routes } from './common/constants'\n\nconst queryClient = new QueryClient({\n defaultOptions: {\n queries: {\n refetchOnWindowFocus: false,\n refetchOnMount: false,\n refetchOnReconnect: false,\n retry: false,\n staleTime: TWENTY_FOUR_HOURS_IN_MS,\n },\n },\n})\n\nexport default function App() {\n WebFont.load({\n google: {\n families: ['Open Sans:400,400italic,600,700,800', 'Quicksand:700'],\n },\n })\n\n return (\n \n \n \n \n \n \n \n \n \n )\n}\n","import ReactDOM from 'react-dom'\n\nimport App from '../courses/App'\n\ndocument.addEventListener('DOMContentLoaded', () => {\n const mountPoint = document.getElementById('root')\n\n ReactDOM.render(, mountPoint)\n})\n"],"sourceRoot":""}