{"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","PageHeader","description","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":"aACE,SAASA,EAAqBC,GAQ7B,IAPA,IAMIC,EAAUC,EANVC,EAAWH,EAAK,GAChBI,EAAcJ,EAAK,GACnBK,EAAiBL,EAAK,GAIHM,EAAI,EAAGC,EAAW,GACpCD,EAAIH,EAASK,OAAQF,IACzBJ,EAAUC,EAASG,GAChBG,OAAOC,UAAUC,eAAeC,KAAKC,EAAiBX,IAAYW,EAAgBX,IACpFK,EAASO,KAAKD,EAAgBX,GAAS,IAExCW,EAAgBX,GAAW,EAE5B,IAAID,KAAYG,EACZK,OAAOC,UAAUC,eAAeC,KAAKR,EAAaH,KACpDc,EAAQd,GAAYG,EAAYH,IAKlC,IAFGe,GAAqBA,EAAoBhB,GAEtCO,EAASC,QACdD,EAASU,OAATV,GAOD,OAHAW,EAAgBJ,KAAKK,MAAMD,EAAiBb,GAAkB,IAGvDe,IAER,SAASA,IAER,IADA,IAAIC,EACIf,EAAI,EAAGA,EAAIY,EAAgBV,OAAQF,IAAK,CAG/C,IAFA,IAAIgB,EAAiBJ,EAAgBZ,GACjCiB,GAAY,EACRC,EAAI,EAAGA,EAAIF,EAAed,OAAQgB,IAAK,CAC9C,IAAIC,EAAQH,EAAeE,GACG,IAA3BX,EAAgBY,KAAcF,GAAY,GAE3CA,IACFL,EAAgBQ,OAAOpB,IAAK,GAC5Be,EAASM,EAAoBA,EAAoBC,EAAIN,EAAe,KAItE,OAAOD,EAIR,IAAIQ,EAAmB,GAKnBhB,EAAkB,CACrB,QAAW,GAGRK,EAAkB,GAGtB,SAASS,EAAoB1B,GAG5B,GAAG4B,EAAiB5B,GACnB,OAAO4B,EAAiB5B,GAAU6B,QAGnC,IAAIC,EAASF,EAAiB5B,GAAY,CACzCK,EAAGL,EACH+B,GAAG,EACHF,QAAS,IAUV,OANAf,EAAQd,GAAUW,KAAKmB,EAAOD,QAASC,EAAQA,EAAOD,QAASH,GAG/DI,EAAOC,GAAI,EAGJD,EAAOD,QAMfH,EAAoBM,EAAI,WACvB,OAAOC,QAAQC,WAIhBR,EAAoBS,EAAIrB,EAGxBY,EAAoBU,EAAIR,EAGxBF,EAAoBW,EAAI,SAASR,EAASS,EAAMC,GAC3Cb,EAAoBc,EAAEX,EAASS,IAClC9B,OAAOiC,eAAeZ,EAASS,EAAM,CAAEI,YAAY,EAAMC,IAAKJ,KAKhEb,EAAoBkB,EAAI,SAASf,GACX,qBAAXgB,QAA0BA,OAAOC,aAC1CtC,OAAOiC,eAAeZ,EAASgB,OAAOC,YAAa,CAAEC,MAAO,WAE7DvC,OAAOiC,eAAeZ,EAAS,aAAc,CAAEkB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,kBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAK3C,OAAO4C,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtB3C,OAAOiC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBW,EAAEc,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAASzB,GAChC,IAAIS,EAAST,GAAUA,EAAOoB,WAC7B,WAAwB,OAAOpB,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAJ,EAAoBW,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRb,EAAoBc,EAAI,SAASgB,EAAQC,GAAY,OAAOjD,OAAOC,UAAUC,eAAeC,KAAK6C,EAAQC,IAGzG/B,EAAoBgC,EAAI,4CAExB,IAAIC,EAAaC,OAAqB,aAAIA,OAAqB,cAAK,GAChEC,EAAmBF,EAAW9C,KAAKyC,KAAKK,GAC5CA,EAAW9C,KAAOf,EAClB6D,EAAaA,EAAWG,QACxB,IAAI,IAAIzD,EAAI,EAAGA,EAAIsD,EAAWpD,OAAQF,IAAKP,EAAqB6D,EAAWtD,IAC3E,IAAIU,EAAsB8C,EAI1B5C,EAAgBJ,KAAK,CAAC,KAAK,SAAS,iBAAiB,QAAQ,QAAQ,mEAAmE,mBAEjIM,I,u7CCzJM,SAAS4C,EAAT,GAA8C,IAAvBC,EAAsB,EAAtBA,SAAaC,EAAS,OAC1D,OACE,cAAC,MAAD,KACEC,QAAQ,OACRC,eAAe,SACfC,oBAAqB,CACnB,uBACA,KACA,UACA,eAEFC,QAAQ,QACJJ,GAVN,aAYGD,KAKPD,EAAYO,UAAY,CACtBN,SAAUO,IAAUC,KAAKC,Y,0CCTrBC,EAAaC,kBAAOC,QAAV,kDAAGD,CAAH,uOAOY,SAAAV,GAAK,OAAIA,EAAMY,MAAMC,OAAOC,WAOnC,SAAAd,GAAK,OAAIA,EAAMY,MAAMG,MAAMC,WAC9B,SAAAhB,GAAK,OAAIA,EAAMY,MAAMK,QAAQ,MAWzCC,EAAcR,kBAAOS,OAAKC,MAAM,CACpCC,aAAc,QACdC,MAAO,QACP7B,EAAG,EACH8B,MAAO,EACPC,OAAQ,OACRC,GAAI,UANW,mDAAGf,CAAH,MASF,SAASgB,EAAT,GAMX,IALFC,EAKC,EALDA,KACAC,EAIC,EAJDA,UACAC,EAGC,EAHDA,OACAC,EAEC,EAFDA,WACAC,EACC,EADDA,MAEA,OACE,cAACtB,EAAD,CAAYuB,SAAS,WAAWC,KAAI,UAAKC,IAAOC,SAAZ,YAAwBR,GAAQS,OAAK,EAAzE,SACE,cAAClB,EAAD,UACE,eAAC,MAAD,CAAKjB,QAAQ,OAAOoC,cAAc,SAAlC,UACE,cAAC,QAAD,CACEC,IAAKV,EACLW,IAAI,GACJhB,MAAO,EACPC,OAAQ,IACRH,aAAY,UAAKT,QAAMG,MAAMyB,MAAjB,YAA0B5B,QAAMG,MAAMyB,MAAtC,QACZC,MAAO,CACLC,UAAW,WAGf,eAAC,MAAD,CACEC,GAAI,EACJC,GAAI,EACJ3C,QAAQ,OACRoC,cAAc,SACdQ,WAAW,aALb,UAOE,cAAC,MAAD,CACE5C,QAAQ,OACR4C,WAAW,SACX3C,eAAe,gBACfqB,MAAM,OACNuB,GAAI,EALN,SAOE,cAAC,OAAD,CAAMC,SAAU,EAAGzB,MAAM,UAAU0B,WAAW,MAA9C,SACGC,IAAmBnB,OAGxB,cAAC,UAAD,CAASoB,GAAG,KAAKJ,GAAI,EAAGK,UAAU,OAAlC,SACGpB,IAEH,eAAC,MAAD,CACEiB,WAAW,MACXD,SAAU,EACV9C,QAAQ,OACR4C,WAAW,WAJb,UAME,cAAC,OAAD,CAAMO,GAAI,EAAGC,KAAK,cACjBxB,eASfH,EAAWrB,UAAY,CACrBsB,KAAMrB,IAAUgD,OAAO9C,WACvBuB,MAAOzB,IAAUgD,OAAO9C,WACxBoB,UAAWtB,IAAUgD,OAAO9C,WAC5BqB,OAAQvB,IAAUgD,OAAO9C,WACzBsB,WAAYxB,IAAUiD,MAAMhH,OAAOiH,KAAKP,MAAqBzC,Y,swBC9G/D,IAAMiD,EAAa,CAAEC,MAAO,MAAO5E,MAAO,IACpC6E,EAAiB,CACrB,CAAED,MAAO,UAAW5E,MAAO,WAC3B,CAAE4E,MAAO,QAAS5E,MAAO,UAGZ,SAAS8E,EAAT,GASX,IARFC,EAQC,EARDA,WACAhC,EAOC,EAPDA,OACAiC,EAMC,EANDA,iBACAC,EAKC,EALDA,iBACAC,EAIC,EAJDA,cACAC,EAGC,EAHDA,cACAC,EAEC,EAFDA,qBACAC,EACC,EADDA,qBAEMC,EAAY,CAAIX,GAAJ,SAAmB5B,IAC/BwC,EAAa,CAAIZ,GAAJ,OAAmBE,GAEtC,OACE,eAAC,MAAD,CACE1D,QAAQ,OACRC,eAAe,SACfC,oBAAqB,CAAC,MAAO,KAAM,KAAM,eACzCC,QAAS,CAAC,SAAU,KAAM,QAJ5B,UAME,cAAC,SAAD,CACEiD,KAAK,YACLK,MAAM,gBACNY,QAASD,EACTvF,MAGEuF,EAAcE,MAAK,SAAAC,GAAE,OAAIA,EAAG1F,QAAUoF,MACtCT,EAEFgB,cAAe,SAAAD,GAAE,OAAIA,EAAGd,OACxBgB,eAAgB,SAAAF,GAAE,OAAIA,EAAG1F,OACzB6F,SAAU,SAAAC,GAAG,OAAIT,EAAqBS,EAAI9F,UAE5C,cAAC,SAAD,CACEuE,KAAK,YACLK,MAAM,QACNY,QAASF,EACTtF,MACEkF,EACII,EAAaG,MAAK,SAAAnI,GAChB,OAAOA,EAAE0C,QAAUkF,KAErBP,EAENgB,cAAe,SAAAI,GAAE,OAAIA,EAAGnB,OACxBgB,eAAgB,SAAAG,GAAE,OAAIA,EAAG/F,OACzB6F,SAAU,SAAAC,GAAG,OAAIX,EAAcW,EAAI9F,UAErC,cAAC,SAAD,CACEuE,KAAK,QACLK,MAAM,WACNY,QAAST,EACT/E,MACEgF,EACID,EAAWU,MAAK,SAAAnI,GACd,OAAOA,EAAE0I,KAAOhB,KAElBL,EAENgB,cAAe,SAAAM,GAAG,OAAIA,EAAI1G,MAC1BqG,eAAgB,SAAAK,GAAG,OAAIA,EAAID,IAC3BH,SAAU,SAAAC,GAAG,OAAIb,EAAiBa,EAAIE,UAM9ClB,EAAQoB,aAAe,CACrBlB,iBAAkB,GAClBE,cAAe,GACfE,qBAAsB,IAGxBN,EAAQvD,UAAY,CAClBwD,WAAYvD,IAAU2E,QACpB3E,IAAU4E,MAAM,CACdJ,GAAIxE,IAAU6E,UAAU,CAAC7E,IAAUgD,OAAQhD,IAAU8E,SACrD/G,KAAMiC,IAAUgD,UAElB9C,WACFqB,OAAQvB,IAAU2E,QAChB3E,IAAU4E,MAAM,CACdpG,MAAOwB,IAAU6E,UAAU,CAAC7E,IAAUgD,OAAQhD,IAAU8E,SACxD1B,MAAOpD,IAAUgD,UAEnB9C,WACFsD,iBAAkBxD,IAAUgD,OAC5BS,iBAAkBzD,IAAU+E,KAAK7E,WACjCwD,cAAe1D,IAAUgD,OACzBW,cAAe3D,IAAU+E,KAAK7E,WAC9B0D,qBAAsB5D,IAAUgD,OAChCa,qBAAsB7D,IAAU+E,KAAK7E,Y,sBChGxB,SAAS8E,EAAT,GAAkC,IAAZC,EAAW,EAAXA,QACnC,OACE,eAAC,MAAD,CACElE,aAAa,QACbpB,QAAQ,OACRoC,cAAc,SACdQ,WAAW,SACXM,UAAU,SACV1D,EAAG,EACHgC,GAAG,QACHF,MAAO,EART,UAUE,cAAC,QAAD,CAAOe,IAAKkD,IAAYjD,IAAI,cAAcf,OAAQ,IAAKD,MAAO,MAE9D,cAAC,UAAD,CAAS2B,GAAG,KAAKJ,GAAI,EAAG0B,GAAI,EAA5B,kCAGA,cAAC,OAAD,mDACA,eAAC,SAAD,CAAQe,QAASA,EAASf,GAAI,EAAGhC,OAAK,EAAtC,UACE,cAAC,OAAD,CAAMa,KAAK,OAAOD,GAAI,IADxB,sB,k9BAQNkC,EAAWjF,UAAY,CACrBkF,QAASjF,IAAU+E,KAAK7E,YCCX,SAASiF,IACtB,QAA4CC,oBAAS,GAArD,GAAOC,EAAP,KAAuBC,EAAvB,KACA,IAA0BC,YAAe,CACvCC,KAAMC,IACNC,MAAOC,IACPC,SAAUD,IACVE,SAAUJ,MAJZ,GAAOK,EAAP,KAAcC,EAAd,KAOA,EACED,GAAS,GADX,IAAQN,YAAR,MAAe,EAAf,EAAkBE,EAAlB,EAAkBA,MAAiBM,EAAnC,EAAyBJ,SAAkCK,EAA3D,EAAiDJ,SAEjD,EAAwDK,YAAc,CACpEV,OACAE,QACAO,aACAD,eACAG,MAAO,KALDC,EAAR,EAAQA,eAAgBC,EAAxB,EAAwBA,YAAaC,EAArC,EAAqCA,eAQ7BC,EAAoBC,cAApBD,gBACR,EAA0CE,cAAlCC,EAAR,EAAQA,kBAAmBnD,EAA3B,EAA2BA,WAErBoD,EAAqB,SAAC7H,EAAKN,GAC/B,IAAMoI,E,sHAAY,EAChBpB,OACAE,QACAE,SAAUI,EACVH,SAAUI,GACTnH,EAAMN,GAETuH,EAASa,IAGLC,EAAgB,SAAAC,GACpBH,EAAmB,OAAQG,GAC3BR,IAtCFS,YALgB,kBACd1H,OAAO2H,SAAS,CACdC,IAAK,EACLC,SAAU,aAEM,MAoDpBC,qBAAU,WAERN,EAAc,KACb,CAACnB,EAAOO,EAAYD,IAEvBmB,qBAAU,WACR,IACMC,EADe,IAAIC,gBAAgBhI,OAAOiI,SAASC,QACZnJ,IAAI,gBAI7CgJ,GAMFrB,EALqB,CACnBL,QACAE,SAAUwB,EACVvB,SAAUI,MAIb,IAEH,IAAMuB,EAAaC,YAAgBlB,EAAiB,CAClDmB,WAAYnG,IAAOoG,KACnBC,UAAWrG,IAAOsG,IAClBC,UAAWvG,IAAOwG,IAClBC,UAAWzG,IAAO0G,IAClB1G,OAAQA,IAAO2G,OAGjB,OACE,qCACE,cAAC,MAAD,CAAK7F,GAAI,CAAC,EAAG,KAAM,KAAM,GAAI8F,GAAI,CAAC,EAAG,KAAM,KAAM,GAAIhH,GAAG,UAAxD,SACE,eAAC,YAAD,WAGE,cAACiH,EAAA,EAAD,CACE3G,MAAM,wBACN4G,YAAW,sWAMb,eAAC,oBAAD,CACEnE,GAAI,EACJ1B,GAAI,EACJyC,QAAS,kBAAMK,GAAkB,IACjC3F,QAAQ,OACR4C,WAAW,SACX3C,eAAe,gBANjB,UAQE,cAAC,OAAD,CAAMkD,GAAI,EAAGC,KAAK,UAClB,cAAC,OAAD,CAAML,WAAW,MAAjB,gCAGAgE,GACA,cAACpD,EAAD,CACEC,WAAYA,EACZhC,OAAQiG,EACR9D,cAAegC,EACf/B,cAAe,SAAAnF,GAAK,OAAImI,EAAmB,QAASnI,IACpDgF,iBAAkByC,EAClBxC,iBAAkB,SAAAjF,GAAK,OAAImI,EAAmB,WAAYnI,IAC1DoF,qBAAsBoC,EACtBnC,qBAAsB,SAAArF,GAAK,OACzBmI,EAAmB,WAAYnI,MAKrC,eAACgB,EAAD,CAAa0E,GAAI,EAAjB,UACGkC,GAAkB,cAAC,UAAD,KACjBA,GACAC,EAAYiC,QAAQC,KAClB,YAWO,IAVL/D,EAUI,EAVJA,GACA/C,EASI,EATJA,MACAJ,EAQI,EARJA,KACQmH,EAOJ,EAPJjH,OACAqG,EAMI,EANJA,UACAE,EAKI,EALJA,UACAJ,EAII,EAJJA,WACAM,EAGI,EAHJA,UACA1G,EAEI,EAFJA,UACAE,EACI,EADJA,WAEMiH,EAAehB,YAAgBlB,EAAiB,CACpDhF,OAAQiH,EACRZ,YACAE,YACAJ,aACAM,cAGF,OACE,cAAC5G,EAAD,CAEEK,MAAOA,EACPJ,KAAMA,EACNE,OAAQkH,EACRnH,UAAWA,EACXE,WAAYA,GALPgD,UAWf4B,IAAmBC,EAAYiC,QAAQtM,QACvC,cAACgJ,EAAD,CAAYC,QAtHD,WAOnBc,EANqB,CACnBP,KAAM,EACNE,MAAO,KACPE,SAAU,KACVC,SAAU,WAmHJO,KAAoBC,EAAYiC,QAAQtM,QACxC,cAAC,aAAD,CACE0M,YAAalD,GAAQ,EACrBmD,WAAU,OAAEtC,QAAF,IAAEA,OAAF,EAAEA,EAAasC,WACzBC,oBAAqB,SAAA9B,GAAO,OAAID,EAAcC,IAC9C5C,GAAI,EACJ1B,GAAI,CAAC,EAAG,KAAM,KAAM,UAK5B,cAACqG,EAAA,EAAD,CACEC,QAAS,UACTC,KAAM1D,EACN2D,aAAc1D,EACd2D,OAAQ,EACRtJ,QAAS0F,EAAiB,QAAU,YCtM5C,IAAM6D,EAAc,IAAIC,IAAY,CAClCC,eAAgB,CACdC,QAAS,CACPC,sBAAsB,EACtBC,gBAAgB,EAChBC,oBAAoB,EACpBC,OAAO,EACPC,UAAWC,QAKF,SAASC,IAOtB,OANAC,IAAQC,KAAK,CACXC,OAAQ,CACNC,SAAU,CAAC,sCAAuC,oBAKpD,cAAC,IAAD,CAAQC,SAAUrI,IAAOC,SAAzB,SACE,cAAC,IAAD,CAAoBqI,iBAAkBC,IAAtC,SACE,cAACC,EAAA,EAAD,CAAqBC,OAAQnB,EAA7B,SACE,cAACoB,EAAA,EAAD,UACE,cAACnF,EAAD,YC9BZoF,SAASC,iBAAiB,oBAAoB,WAC5C,IAAMC,EAAaF,SAASG,eAAe,QAE3CC,IAASC,OAAO,cAAChB,EAAD,IAASa","file":"courses.e6743b987c6214a403d3.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([1559,\"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 mt.value === selectedMaterialType) ||\n ALL_OPTION\n }\n getOptionText={mt => mt.label}\n getOptionValue={mt => mt.value}\n onChange={val => onFilterMaterialType(val.value)}\n />\n {\n return i.value === selectedLevel\n })\n : ALL_OPTION\n }\n getOptionText={lv => lv.label}\n getOptionValue={lv => lv.value}\n onChange={val => onFilterLevel(val.value)}\n />\n {\n return i.id === selectedCategory\n })\n : ALL_OPTION\n }\n getOptionText={cat => cat.name}\n getOptionValue={cat => cat.id}\n onChange={val => onFilterCategory(val.id)}\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 Plane image\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 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 PageHeader from 'Common/components/PageHeader'\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 \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":""}