@openedx/frontend-app-learner-dashboard 1.0.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (351) hide show
  1. package/LICENSE +661 -0
  2. package/README.rst +86 -0
  3. package/package.json +84 -0
  4. package/src/Main.jsx +20 -0
  5. package/src/__mocks__/file.js +1 -0
  6. package/src/__mocks__/svg.js +1 -0
  7. package/src/__snapshots__/App.test.jsx.snap +83 -0
  8. package/src/__snapshots__/index.test.jsx.snap +43 -0
  9. package/src/app.scss +41 -0
  10. package/src/app.ts +23 -0
  11. package/src/assets/empty-course.svg +49 -0
  12. package/src/assets/more-courses-sidewidget.svg +52 -0
  13. package/src/assets/verified-ribbon.png +0 -0
  14. package/src/components/Banner.jsx +26 -0
  15. package/src/components/Banner.test.jsx +27 -0
  16. package/src/components/__snapshots__/Banner.test.jsx.snap +31 -0
  17. package/src/constants.ts +1 -0
  18. package/src/containers/CourseCard/CourseCard.scss +75 -0
  19. package/src/containers/CourseCard/__snapshots__/index.test.jsx.snap +111 -0
  20. package/src/containers/CourseCard/components/CourseCardActions/ActionButton/__snapshots__/index.test.jsx.snap +14 -0
  21. package/src/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.js +8 -0
  22. package/src/containers/CourseCard/components/CourseCardActions/ActionButton/hooks.test.js +21 -0
  23. package/src/containers/CourseCard/components/CourseCardActions/ActionButton/index.jsx +16 -0
  24. package/src/containers/CourseCard/components/CourseCardActions/ActionButton/index.test.jsx +25 -0
  25. package/src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.jsx +38 -0
  26. package/src/containers/CourseCard/components/CourseCardActions/BeginCourseButton.test.jsx +86 -0
  27. package/src/containers/CourseCard/components/CourseCardActions/ResumeButton.jsx +38 -0
  28. package/src/containers/CourseCard/components/CourseCardActions/ResumeButton.test.jsx +84 -0
  29. package/src/containers/CourseCard/components/CourseCardActions/SelectSessionButton.jsx +28 -0
  30. package/src/containers/CourseCard/components/CourseCardActions/SelectSessionButton.test.jsx +34 -0
  31. package/src/containers/CourseCard/components/CourseCardActions/ViewCourseButton.jsx +37 -0
  32. package/src/containers/CourseCard/components/CourseCardActions/ViewCourseButton.test.jsx +45 -0
  33. package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/BeginCourseButton.test.jsx.snap +39 -0
  34. package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/ResumeButton.test.jsx.snap +39 -0
  35. package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/SelectSessionButton.test.jsx.snap +19 -0
  36. package/src/containers/CourseCard/components/CourseCardActions/__snapshots__/ViewCourseButton.test.jsx.snap +39 -0
  37. package/src/containers/CourseCard/components/CourseCardActions/index.jsx +42 -0
  38. package/src/containers/CourseCard/components/CourseCardActions/index.test.jsx +97 -0
  39. package/src/containers/CourseCard/components/CourseCardActions/messages.js +26 -0
  40. package/src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.jsx +95 -0
  41. package/src/containers/CourseCard/components/CourseCardBanners/CertificateBanner.test.jsx +227 -0
  42. package/src/containers/CourseCard/components/CourseCardBanners/CourseBanner.jsx +57 -0
  43. package/src/containers/CourseCard/components/CourseCardBanners/CourseBanner.test.jsx +131 -0
  44. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/__snapshots__/index.test.jsx.snap +58 -0
  45. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.js +42 -0
  46. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/hooks.test.js +90 -0
  47. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.jsx +36 -0
  48. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/index.test.jsx +95 -0
  49. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/messages.js +16 -0
  50. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.jsx +35 -0
  51. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/ApprovedContent.test.jsx +64 -0
  52. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.jsx +34 -0
  53. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/EligibleContent.test.jsx +82 -0
  54. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.jsx +36 -0
  55. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/MustRequestContent.test.jsx +74 -0
  56. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.jsx +30 -0
  57. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/PendingContent.test.jsx +63 -0
  58. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.jsx +27 -0
  59. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/RejectedContent.test.jsx +54 -0
  60. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.jsx +51 -0
  61. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditContent.test.jsx +60 -0
  62. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/__snapshots__/index.test.jsx.snap +32 -0
  63. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.js +13 -0
  64. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/hooks.test.js +45 -0
  65. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.jsx +43 -0
  66. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/index.test.jsx +65 -0
  67. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/CreditRequestForm/ref.test.jsx +34 -0
  68. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.jsx +24 -0
  69. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/ProviderLink.test.jsx +42 -0
  70. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/__snapshots__/CreditContent.test.jsx.snap +60 -0
  71. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/components/__snapshots__/ProviderLink.test.jsx.snap +11 -0
  72. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.js +27 -0
  73. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/hooks.test.js +56 -0
  74. package/src/containers/CourseCard/components/CourseCardBanners/CreditBanner/views/messages.js +61 -0
  75. package/src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.jsx +66 -0
  76. package/src/containers/CourseCard/components/CourseCardBanners/EntitlementBanner.test.jsx +63 -0
  77. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.jsx +23 -0
  78. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/ProgramsList.test.jsx +23 -0
  79. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/__snapshots__/ProgramsList.test.jsx.snap +28 -0
  80. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/__snapshots__/index.test.jsx.snap +29 -0
  81. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.jsx +38 -0
  82. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/index.test.jsx +42 -0
  83. package/src/containers/CourseCard/components/CourseCardBanners/RelatedProgramsBanner/messages.js +31 -0
  84. package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/CertificateBanner.test.jsx.snap +205 -0
  85. package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/CourseBanner.test.jsx.snap +38 -0
  86. package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/EntitlementBanner.test.jsx.snap +53 -0
  87. package/src/containers/CourseCard/components/CourseCardBanners/__snapshots__/index.test.jsx.snap +41 -0
  88. package/src/containers/CourseCard/components/CourseCardBanners/index.jsx +28 -0
  89. package/src/containers/CourseCard/components/CourseCardBanners/index.test.jsx +32 -0
  90. package/src/containers/CourseCard/components/CourseCardBanners/messages.js +106 -0
  91. package/src/containers/CourseCard/components/CourseCardDetails/__snapshots__/index.test.jsx.snap +56 -0
  92. package/src/containers/CourseCard/components/CourseCardDetails/hooks.js +67 -0
  93. package/src/containers/CourseCard/components/CourseCardDetails/hooks.test.js +186 -0
  94. package/src/containers/CourseCard/components/CourseCardDetails/index.jsx +45 -0
  95. package/src/containers/CourseCard/components/CourseCardDetails/index.scss +7 -0
  96. package/src/containers/CourseCard/components/CourseCardDetails/index.test.jsx +71 -0
  97. package/src/containers/CourseCard/components/CourseCardDetails/messages.js +41 -0
  98. package/src/containers/CourseCard/components/CourseCardImage.jsx +68 -0
  99. package/src/containers/CourseCard/components/CourseCardImage.test.jsx +66 -0
  100. package/src/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.jsx +83 -0
  101. package/src/containers/CourseCard/components/CourseCardMenu/SocialShareMenu.test.jsx +236 -0
  102. package/src/containers/CourseCard/components/CourseCardMenu/__snapshots__/index.test.jsx.snap +81 -0
  103. package/src/containers/CourseCard/components/CourseCardMenu/hooks.js +58 -0
  104. package/src/containers/CourseCard/components/CourseCardMenu/hooks.test.js +153 -0
  105. package/src/containers/CourseCard/components/CourseCardMenu/index.jsx +85 -0
  106. package/src/containers/CourseCard/components/CourseCardMenu/index.test.jsx +214 -0
  107. package/src/containers/CourseCard/components/CourseCardMenu/messages.js +36 -0
  108. package/src/containers/CourseCard/components/CourseCardTitle.jsx +43 -0
  109. package/src/containers/CourseCard/components/CourseCardTitle.test.jsx +67 -0
  110. package/src/containers/CourseCard/components/RelatedProgramsBadge/__snapshots__/index.test.jsx.snap +25 -0
  111. package/src/containers/CourseCard/components/RelatedProgramsBadge/hooks.jsx +35 -0
  112. package/src/containers/CourseCard/components/RelatedProgramsBadge/hooks.test.js +76 -0
  113. package/src/containers/CourseCard/components/RelatedProgramsBadge/index.jsx +39 -0
  114. package/src/containers/CourseCard/components/RelatedProgramsBadge/index.test.jsx +30 -0
  115. package/src/containers/CourseCard/components/RelatedProgramsBadge/messages.js +13 -0
  116. package/src/containers/CourseCard/components/__snapshots__/CourseCardImage.test.jsx.snap +72 -0
  117. package/src/containers/CourseCard/components/__snapshots__/CourseCardTitle.test.jsx.snap +33 -0
  118. package/src/containers/CourseCard/components/hooks.js +33 -0
  119. package/src/containers/CourseCard/components/hooks.test.js +165 -0
  120. package/src/containers/CourseCard/hooks.js +23 -0
  121. package/src/containers/CourseCard/hooks.test.js +48 -0
  122. package/src/containers/CourseCard/index.jsx +50 -0
  123. package/src/containers/CourseCard/index.test.jsx +29 -0
  124. package/src/containers/CourseCard/messages.js +26 -0
  125. package/src/containers/CourseFilterControls/ActiveCourseFilters.jsx +40 -0
  126. package/src/containers/CourseFilterControls/ActiveCourseFilters.test.jsx +17 -0
  127. package/src/containers/CourseFilterControls/CourseFilterControls.jsx +115 -0
  128. package/src/containers/CourseFilterControls/CourseFilterControls.test.jsx +60 -0
  129. package/src/containers/CourseFilterControls/__snapshots__/ActiveCourseFilters.test.jsx.snap +39 -0
  130. package/src/containers/CourseFilterControls/__snapshots__/CourseFilterControls.test.jsx.snap +169 -0
  131. package/src/containers/CourseFilterControls/components/Checkbox.jsx +21 -0
  132. package/src/containers/CourseFilterControls/components/Checkbox.test.jsx +15 -0
  133. package/src/containers/CourseFilterControls/components/FilterForm.jsx +45 -0
  134. package/src/containers/CourseFilterControls/components/FilterForm.test.jsx +29 -0
  135. package/src/containers/CourseFilterControls/components/SortForm.jsx +39 -0
  136. package/src/containers/CourseFilterControls/components/SortForm.test.jsx +19 -0
  137. package/src/containers/CourseFilterControls/components/__snapshots__/Checkbox.test.jsx.snap +46 -0
  138. package/src/containers/CourseFilterControls/components/__snapshots__/FilterForm.test.jsx.snap +41 -0
  139. package/src/containers/CourseFilterControls/components/__snapshots__/SortForm.test.jsx.snap +29 -0
  140. package/src/containers/CourseFilterControls/hooks.js +60 -0
  141. package/src/containers/CourseFilterControls/hooks.test.js +113 -0
  142. package/src/containers/CourseFilterControls/index.jsx +6 -0
  143. package/src/containers/CourseFilterControls/index.scss +29 -0
  144. package/src/containers/CourseFilterControls/messages.js +61 -0
  145. package/src/containers/CoursesPanel/CourseList/__snapshots__/index.test.jsx.snap +70 -0
  146. package/src/containers/CoursesPanel/CourseList/hooks.js +8 -0
  147. package/src/containers/CoursesPanel/CourseList/index.jsx +54 -0
  148. package/src/containers/CoursesPanel/CourseList/index.test.jsx +64 -0
  149. package/src/containers/CoursesPanel/NoCoursesView/__snapshots__/index.test.jsx.snap +29 -0
  150. package/src/containers/CoursesPanel/NoCoursesView/index.jsx +40 -0
  151. package/src/containers/CoursesPanel/NoCoursesView/index.scss +15 -0
  152. package/src/containers/CoursesPanel/NoCoursesView/index.test.jsx +18 -0
  153. package/src/containers/CoursesPanel/NoCoursesView/messages.js +26 -0
  154. package/src/containers/CoursesPanel/__snapshots__/index.test.jsx.snap +55 -0
  155. package/src/containers/CoursesPanel/hooks.js +54 -0
  156. package/src/containers/CoursesPanel/hooks.test.js +115 -0
  157. package/src/containers/CoursesPanel/index.jsx +40 -0
  158. package/src/containers/CoursesPanel/index.scss +42 -0
  159. package/src/containers/CoursesPanel/index.test.jsx +58 -0
  160. package/src/containers/CoursesPanel/messages.js +11 -0
  161. package/src/containers/Dashboard/DashboardLayout.jsx +54 -0
  162. package/src/containers/Dashboard/DashboardLayout.test.jsx +115 -0
  163. package/src/containers/Dashboard/LoadingView.jsx +20 -0
  164. package/src/containers/Dashboard/LoadingView.test.jsx +23 -0
  165. package/src/containers/Dashboard/__snapshots__/DashboardLayout.test.jsx.snap +197 -0
  166. package/src/containers/Dashboard/__snapshots__/LoadingView.test.jsx.snap +13 -0
  167. package/src/containers/Dashboard/__snapshots__/index.test.jsx.snap +69 -0
  168. package/src/containers/Dashboard/hooks.js +34 -0
  169. package/src/containers/Dashboard/hooks.test.js +88 -0
  170. package/src/containers/Dashboard/index.jsx +43 -0
  171. package/src/containers/Dashboard/index.scss +29 -0
  172. package/src/containers/Dashboard/index.test.jsx +122 -0
  173. package/src/containers/EmailSettingsModal/__snapshots__/index.test.jsx.snap +133 -0
  174. package/src/containers/EmailSettingsModal/hooks.js +32 -0
  175. package/src/containers/EmailSettingsModal/hooks.test.js +71 -0
  176. package/src/containers/EmailSettingsModal/index.jsx +58 -0
  177. package/src/containers/EmailSettingsModal/index.test.jsx +57 -0
  178. package/src/containers/EmailSettingsModal/messages.js +37 -0
  179. package/src/containers/RelatedProgramsModal/__snapshots__/index.test.jsx.snap +169 -0
  180. package/src/containers/RelatedProgramsModal/components/ProgramCard.jsx +66 -0
  181. package/src/containers/RelatedProgramsModal/components/ProgramCard.test.jsx +23 -0
  182. package/src/containers/RelatedProgramsModal/components/__snapshots__/ProgramCard.test.jsx.snap +60 -0
  183. package/src/containers/RelatedProgramsModal/components/index.scss +23 -0
  184. package/src/containers/RelatedProgramsModal/components/messages.js +24 -0
  185. package/src/containers/RelatedProgramsModal/hooks.js +10 -0
  186. package/src/containers/RelatedProgramsModal/index.jsx +62 -0
  187. package/src/containers/RelatedProgramsModal/index.scss +5 -0
  188. package/src/containers/RelatedProgramsModal/index.test.jsx +60 -0
  189. package/src/containers/RelatedProgramsModal/messages.js +16 -0
  190. package/src/containers/SelectSessionModal/__snapshots__/index.test.jsx.snap +176 -0
  191. package/src/containers/SelectSessionModal/constants.js +2 -0
  192. package/src/containers/SelectSessionModal/hooks.js +77 -0
  193. package/src/containers/SelectSessionModal/hooks.test.js +194 -0
  194. package/src/containers/SelectSessionModal/index.jsx +75 -0
  195. package/src/containers/SelectSessionModal/index.test.jsx +53 -0
  196. package/src/containers/SelectSessionModal/messages.js +41 -0
  197. package/src/containers/UnenrollConfirmModal/__snapshots__/index.test.jsx.snap +101 -0
  198. package/src/containers/UnenrollConfirmModal/components/ConfirmPane.jsx +36 -0
  199. package/src/containers/UnenrollConfirmModal/components/ConfirmPane.test.jsx +14 -0
  200. package/src/containers/UnenrollConfirmModal/components/FinishedPane.jsx +35 -0
  201. package/src/containers/UnenrollConfirmModal/components/FinishedPane.test.jsx +21 -0
  202. package/src/containers/UnenrollConfirmModal/components/ReasonPane.jsx +65 -0
  203. package/src/containers/UnenrollConfirmModal/components/ReasonPane.test.jsx +26 -0
  204. package/src/containers/UnenrollConfirmModal/components/__snapshots__/ConfirmPane.test.jsx.snap +22 -0
  205. package/src/containers/UnenrollConfirmModal/components/__snapshots__/FinishedPane.test.jsx.snap +38 -0
  206. package/src/containers/UnenrollConfirmModal/components/__snapshots__/ReasonPane.test.jsx.snap +183 -0
  207. package/src/containers/UnenrollConfirmModal/components/messages.js +56 -0
  208. package/src/containers/UnenrollConfirmModal/constants.js +86 -0
  209. package/src/containers/UnenrollConfirmModal/hooks/index.js +55 -0
  210. package/src/containers/UnenrollConfirmModal/hooks/index.test.js +101 -0
  211. package/src/containers/UnenrollConfirmModal/hooks/reasons.js +79 -0
  212. package/src/containers/UnenrollConfirmModal/hooks/reasons.test.js +192 -0
  213. package/src/containers/UnenrollConfirmModal/index.jsx +59 -0
  214. package/src/containers/UnenrollConfirmModal/index.test.jsx +61 -0
  215. package/src/data/constants/app.js +20 -0
  216. package/src/data/constants/app.test.js +24 -0
  217. package/src/data/constants/course.js +17 -0
  218. package/src/data/constants/credit.js +9 -0
  219. package/src/data/constants/files.js +20 -0
  220. package/src/data/constants/htmlKeys.js +21 -0
  221. package/src/data/constants/requests.js +34 -0
  222. package/src/data/contexts/GlobalDataContext.jsx +15 -0
  223. package/src/data/contexts/GlobalDataProvider.jsx +23 -0
  224. package/src/data/contexts/MasqueradeUserContext.jsx +16 -0
  225. package/src/data/contexts/MasqueradeUserProvider.jsx +31 -0
  226. package/src/data/redux/app/index.js +2 -0
  227. package/src/data/redux/app/reducer.js +81 -0
  228. package/src/data/redux/app/reducer.test.js +124 -0
  229. package/src/data/redux/app/selectors/appSelectors.js +23 -0
  230. package/src/data/redux/app/selectors/appSelectors.test.js +28 -0
  231. package/src/data/redux/app/selectors/courseCard.js +155 -0
  232. package/src/data/redux/app/selectors/courseCard.test.js +398 -0
  233. package/src/data/redux/app/selectors/currentList.js +60 -0
  234. package/src/data/redux/app/selectors/currentList.test.js +185 -0
  235. package/src/data/redux/app/selectors/index.js +13 -0
  236. package/src/data/redux/app/selectors/simpleSelectors.js +38 -0
  237. package/src/data/redux/app/selectors/simpleSelectors.test.js +75 -0
  238. package/src/data/redux/hooks/app.js +106 -0
  239. package/src/data/redux/hooks/index.js +2 -0
  240. package/src/data/redux/hooks/requests.js +47 -0
  241. package/src/data/redux/index.js +37 -0
  242. package/src/data/redux/requests/index.js +2 -0
  243. package/src/data/redux/requests/reducer.js +53 -0
  244. package/src/data/redux/requests/reducer.test.js +62 -0
  245. package/src/data/redux/requests/selectors.js +29 -0
  246. package/src/data/redux/requests/selectors.test.js +110 -0
  247. package/src/data/services/lms/api.js +77 -0
  248. package/src/data/services/lms/api.test.js +156 -0
  249. package/src/data/services/lms/constants.js +18 -0
  250. package/src/data/services/lms/fakeData/courses.js +828 -0
  251. package/src/data/services/lms/fakeData/testUtils.js +40 -0
  252. package/src/data/services/lms/index.js +8 -0
  253. package/src/data/services/lms/urls.js +43 -0
  254. package/src/data/services/lms/urls.test.js +51 -0
  255. package/src/data/services/lms/utils.js +60 -0
  256. package/src/data/services/lms/utils.test.js +40 -0
  257. package/src/data/services/segment/utils.js +17 -0
  258. package/src/data/services/segment/utils.test.js +36 -0
  259. package/src/data/store.js +25 -0
  260. package/src/data/store.test.js +47 -0
  261. package/src/data/utils.js +19 -0
  262. package/src/data/utils.test.js +29 -0
  263. package/src/hooks/api.js +123 -0
  264. package/src/hooks/api.test.js +273 -0
  265. package/src/hooks/index.js +7 -0
  266. package/src/hooks/utils.js +17 -0
  267. package/src/hooks/utils.test.js +16 -0
  268. package/src/i18n/index.js +25 -0
  269. package/src/index.ts +3 -0
  270. package/src/messages.js +16 -0
  271. package/src/providers.ts +11 -0
  272. package/src/routes.jsx +14 -0
  273. package/src/segment.js +85 -0
  274. package/src/setupTest.jsx +251 -0
  275. package/src/slots/CourseBannerSlot/README.md +44 -0
  276. package/src/slots/CourseBannerSlot/images/course_banner_slot_default.png +0 -0
  277. package/src/slots/CourseBannerSlot/images/custom_course_banner.png +0 -0
  278. package/src/slots/CourseBannerSlot/index.jsx +18 -0
  279. package/src/slots/CourseCardActionSlot/README.md +53 -0
  280. package/src/slots/CourseCardActionSlot/images/post_course_card_action.png +0 -0
  281. package/src/slots/CourseCardActionSlot/index.jsx +15 -0
  282. package/src/slots/CourseListSlot/README.md +54 -0
  283. package/src/slots/CourseListSlot/images/course_list_slot.png +0 -0
  284. package/src/slots/CourseListSlot/images/readme_custom_course_list.png +0 -0
  285. package/src/slots/CourseListSlot/index.jsx +17 -0
  286. package/src/slots/DashboardModalSlot/README.md +30 -0
  287. package/src/slots/DashboardModalSlot/images/dashboard_modal_slot.png +0 -0
  288. package/src/slots/DashboardModalSlot/index.jsx +7 -0
  289. package/src/slots/NoCoursesViewSlot/README.md +34 -0
  290. package/src/slots/NoCoursesViewSlot/images/no_course_view_slot.png +0 -0
  291. package/src/slots/NoCoursesViewSlot/images/readme_custom_no_courses.png +0 -0
  292. package/src/slots/NoCoursesViewSlot/index.jsx +11 -0
  293. package/src/slots/README.md +8 -0
  294. package/src/slots/WidgetSidebarSlot/README.md +51 -0
  295. package/src/slots/WidgetSidebarSlot/__snapshots__/index.test.jsx.snap +14 -0
  296. package/src/slots/WidgetSidebarSlot/images/readme_custom_sidebar.png +0 -0
  297. package/src/slots/WidgetSidebarSlot/images/widget_sidebar_slot.png +0 -0
  298. package/src/slots/WidgetSidebarSlot/index.jsx +10 -0
  299. package/src/slots/WidgetSidebarSlot/index.test.jsx +18 -0
  300. package/src/slots.tsx +9 -0
  301. package/src/test/app.test.jsx +255 -0
  302. package/src/test/inspector.js +50 -0
  303. package/src/test/messages.js +29 -0
  304. package/src/test/utils.js +3 -0
  305. package/src/testUtils.js +211 -0
  306. package/src/tracking/constants.js +50 -0
  307. package/src/tracking/index.js +17 -0
  308. package/src/tracking/trackers/course.js +44 -0
  309. package/src/tracking/trackers/course.test.js +80 -0
  310. package/src/tracking/trackers/credit.js +20 -0
  311. package/src/tracking/trackers/credit.test.js +38 -0
  312. package/src/tracking/trackers/engagement.js +23 -0
  313. package/src/tracking/trackers/engagement.test.js +31 -0
  314. package/src/tracking/trackers/entitlements.js +34 -0
  315. package/src/tracking/trackers/entitlements.test.js +34 -0
  316. package/src/tracking/trackers/filter.js +21 -0
  317. package/src/tracking/trackers/filter.test.js +45 -0
  318. package/src/tracking/trackers/findCourses.js +16 -0
  319. package/src/tracking/trackers/findCourses.test.js +45 -0
  320. package/src/tracking/trackers/socialShare.js +11 -0
  321. package/src/tracking/trackers/socialShare.test.js +17 -0
  322. package/src/utils/StrictDict.js +19 -0
  323. package/src/utils/StrictDict.test.js +66 -0
  324. package/src/utils/dateFormatter.js +9 -0
  325. package/src/utils/hooks.js +12 -0
  326. package/src/utils/index.js +5 -0
  327. package/src/utils/keyStore.js +10 -0
  328. package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/ConfirmEmailBanner.scss +3 -0
  329. package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/assets/confirm-email.svg +76 -0
  330. package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/hooks.js +45 -0
  331. package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/index.jsx +66 -0
  332. package/src/widgets/LearnerDashboardHeader/ConfirmEmailBanner/messages.js +36 -0
  333. package/src/widgets/LearnerDashboardHeader/CoursesLink.jsx +14 -0
  334. package/src/widgets/LearnerDashboardHeader/DiscoverLinkMenuItem.jsx +30 -0
  335. package/src/widgets/LearnerDashboardHeader/MasqueradeBar/hooks.js +69 -0
  336. package/src/widgets/LearnerDashboardHeader/MasqueradeBar/index.jsx +92 -0
  337. package/src/widgets/LearnerDashboardHeader/MasqueradeBar/index.scss +38 -0
  338. package/src/widgets/LearnerDashboardHeader/MasqueradeBar/messages.js +36 -0
  339. package/src/widgets/LearnerDashboardHeader/OrderHistoryLinkMenuItem.jsx +29 -0
  340. package/src/widgets/LearnerDashboardHeader/ProgramsLinkMenuItem.jsx +26 -0
  341. package/src/widgets/LearnerDashboardHeader/SupportLinkMenuItem.jsx +29 -0
  342. package/src/widgets/LearnerDashboardHeader/app.tsx +93 -0
  343. package/src/widgets/LearnerDashboardHeader/hooks.js +20 -0
  344. package/src/widgets/LearnerDashboardHeader/index.ts +1 -0
  345. package/src/widgets/LearnerDashboardHeader/messages.js +91 -0
  346. package/src/widgets/LookingForChallengeWidget/__snapshots__/index.test.jsx.snap +45 -0
  347. package/src/widgets/LookingForChallengeWidget/index.jsx +47 -0
  348. package/src/widgets/LookingForChallengeWidget/index.scss +6 -0
  349. package/src/widgets/LookingForChallengeWidget/index.test.jsx +24 -0
  350. package/src/widgets/LookingForChallengeWidget/messages.js +16 -0
  351. package/src/widgets/LookingForChallengeWidget/track.js +15 -0
@@ -0,0 +1,828 @@
1
+ import { StrictDict } from '../../../../utils';
2
+ import creditVals from '../../../../data/constants/credit';
3
+
4
+ export const providers = StrictDict({
5
+ edx: { name: 'edX Course Provider' },
6
+ mit: { name: 'MIT' },
7
+ });
8
+
9
+ export const relatedPrograms = [
10
+ {
11
+ provider: 'HarvardX',
12
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg',
13
+ logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png',
14
+ title: 'Relativity in Modern Mechanics',
15
+ programUrl: 'www.edx/my-program',
16
+ programType: 'MicroBachelors Program',
17
+ numberOfCourses: 3,
18
+ },
19
+ {
20
+ provider: 'University of Maryland',
21
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
22
+ logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png',
23
+ title: 'Pandering for Modern Professionals',
24
+ programUrl: 'www.edx/my-program-2',
25
+ programType: 'MicroBachelors Program',
26
+ programTypeUrl: 'www.edx/my-program-type',
27
+ numberOfCourses: 3,
28
+ },
29
+ {
30
+ provider: 'HarvardX',
31
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/course/image/327c8e4f-315a-417b-9857-046dfc90c243-677b97464958.small.jpg',
32
+ logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/44022f13-20df-4666-9111-cede3e5dc5b6-770e00385e7e.png',
33
+ title: 'Relativity in Modern Mechanics',
34
+ programUrl: 'www.edx/my-program-3',
35
+ programType: 'MicroBachelors Program',
36
+ numberOfCourses: 3,
37
+ },
38
+ {
39
+ provider: 'University of Maryland',
40
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
41
+ logoImgSrc: 'https://prod-discovery.edx-cdn.org/organization/certificate_logos/b9dc96da-b3fc-45a6-b6b7-b8e12eb79335-ac60112330e3.png',
42
+ title: 'Pandering for Modern Professionals',
43
+ programUrl: 'www.edx/my-program-4',
44
+ programType: 'MicroBachelors Program',
45
+ programTypeUrl: 'www.edx/my-program-type',
46
+ numberOfCourses: 3,
47
+ },
48
+ ];
49
+
50
+ export const genCardId = (index) => `card-id${index}`;
51
+ export const genCourseId = (index) => `course-number${index}-course-id${index}`;
52
+ export const genCourseNumber = (index) => `course-number${index}`;
53
+ export const genCourseShareUrl = (index) => `home.edx.org?social-share-url/${index}`;
54
+ export const genEntitlementUUID = (index) => `entitlement-course-uuid-${index}`;
55
+
56
+ const bannerImgSrc = '/asset-v1:edX+DemoX+Demo_Course+type@asset+block@images_course_image.jpg';
57
+
58
+ export const farPastDate = '1900-11-11T00:00:00Z';
59
+ export const pastDate = '2000-11-11T00:00:00Z';
60
+ export const futureDate = '3030-11-11T00:00:00Z';
61
+ export const farFutureDate = '4040-11-11T00:00:00Z';
62
+ export const soonDate = new Date();
63
+ soonDate.setDate(soonDate.getDate() + 60);
64
+ export const soonDateStr = soonDate.toDateString();
65
+
66
+ export const globalData = {
67
+ emailConfirmation: {
68
+ isNeeded: true,
69
+ sendEmailUrl: 'sendConfirmation@edx.org',
70
+ },
71
+ enterpriseDashboard: { label: 'edX, Inc.', url: '/edx-dashboard' },
72
+ platformSettings: {
73
+ supportEmail: 'support@example.com',
74
+ billingEmail: 'billing@email.com',
75
+ courseSearchUrl: 'edx.com/course-search',
76
+ },
77
+ suggestedCourses: [
78
+ {
79
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
80
+ courseName: 'Suggested course 1',
81
+ courseUrl: 'www.edx/suggested-course',
82
+ },
83
+ {
84
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
85
+ courseName: 'Suggested course 2 with a really really really long name for some reason',
86
+ courseUrl: 'www.edx/suggested-course',
87
+ },
88
+ {
89
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
90
+ courseName: 'Suggested course 3',
91
+ courseUrl: 'www.edx/suggested-course',
92
+ },
93
+ {
94
+ bannerImgSrc: 'https://prod-discovery.edx-cdn.org/media/programs/banner_images/9a310b98-8f27-439e-be85-12d6460245c9-f2efca129273.small.jpg',
95
+ courseName: 'Suggested course 4',
96
+ courseUrl: 'www.edx/suggested-course',
97
+ },
98
+ ],
99
+ socialShareSettings: {
100
+ facebook: {
101
+ isEnabled: true,
102
+ socialBrand: 'edx.org',
103
+ utmParams: 'utm_campaign=social-sharing-db&utm_medium=social&utm_source=facebook',
104
+ },
105
+ twitter: {
106
+ isEnabled: true,
107
+ socialBrand: 'edx.org',
108
+ utmParams: 'utm_campaign=social-sharing-db&utm_medium=social&utm_source=twitter',
109
+ },
110
+ },
111
+ };
112
+
113
+ export const genCourseRunData = (data = {}) => ({
114
+ isStarted: false,
115
+ isArchived: false,
116
+ startDate: data.isStarted ? farPastDate : futureDate,
117
+ endDate: farFutureDate,
118
+ minPassingGrade: '0.70',
119
+ homeUrl: 'edx.com/courses/my-course-url/home',
120
+ marketingUrl: 'edx.com/courses/my-course-url/marketing',
121
+ progressUrl: 'edx.com/courses/my-course-url/progress',
122
+ unenrollUrl: 'edx.com/courses/my-course-url/unenroll',
123
+ resumeUrl: 'edx.com/courses/my-course-url/resume',
124
+ ...data,
125
+ });
126
+
127
+ export const creditData = {
128
+ providerStatusUrl: 'test-provider-status-url',
129
+ providerName: 'Credit Provider Name',
130
+ providerId: 'credit-provider-id',
131
+ error: false,
132
+ purchased: false,
133
+ requestStatus: null,
134
+ };
135
+
136
+ export const genEnrollmentData = (data = {}) => ({
137
+ coursewareAccess: {
138
+ isTooEarly: false,
139
+ hasUnmetPrerequisites: false,
140
+ isStaff: false,
141
+ },
142
+ accessExpirationDate: ((data.isEnrolled === false) ? null : futureDate),
143
+ canUpgrade: (data.isVerified ? null : true),
144
+ hasStarted: false,
145
+ isAudit: !data.isVerified && (data.isEnrolled !== false),
146
+ isAuditAccessExpired: data.isVerified ? null : false,
147
+ isEmailEnabled: false,
148
+ hasOptedOutOfEmail: false,
149
+ isEnrolled: true,
150
+ isVerified: false,
151
+ ...data,
152
+ });
153
+
154
+ export const genCertificateData = (data = {}) => ({
155
+ availableDate: null,
156
+ isRestricted: false,
157
+ isEarned: false,
158
+ isDownloadable: false,
159
+ certPreviewUrl: 'edx.com/courses/my-course-url/cert-preview',
160
+ ...data,
161
+ });
162
+
163
+ export const availableSessions = [
164
+ {
165
+ startDate: '2000-01-02T00:00:00Z',
166
+ endDate: '2020-01-02T00:00:00Z',
167
+ courseId: genCourseId(1000),
168
+ },
169
+ {
170
+ startDate: '2000-02-03T00:00:00Z',
171
+ endDate: '2020-02-03T00:00:00Z',
172
+ courseId: genCourseId(1001),
173
+ },
174
+ {
175
+ startDate: '2000-03-04T00:00:00Z',
176
+ endDate: '2020-03-04T00:00:00Z',
177
+ courseId: genCourseId(1002),
178
+ },
179
+ {
180
+ startDate: '2000-04-05T00:00:00Z',
181
+ endDate: '2020-04-05T00:00:00Z',
182
+ courseId: genCourseId(1003),
183
+ },
184
+ {
185
+ startDate: '2000-05-06T00:00:00Z',
186
+ endDate: '2020-05-06T00:00:00Z',
187
+ courseId: genCourseId(1004),
188
+ },
189
+ ];
190
+
191
+ const auditCourses = [
192
+ // audit, course run not started
193
+ {
194
+ courseName: 'Audit Course, Course run not started',
195
+ },
196
+ // audit, course run not started, too early to view
197
+ {
198
+ courseName: 'Audit Course, Course run not started, Too early to view',
199
+ enrollment: {
200
+ coursewareAccess: {
201
+ isTooEarly: true,
202
+ hasUnmetPrerequisites: false,
203
+ isStaff: false,
204
+ },
205
+ },
206
+ },
207
+ // audit, course run not started, too early to view and unmet prereqs
208
+ {
209
+ courseName: 'Audit Course, Course run not started, Too early to view, Has unmet prereqs.',
210
+ enrollment: {
211
+ coursewareAccess: {
212
+ isTooEarly: true,
213
+ hasUnmetPrerequisites: true,
214
+ isStaff: false,
215
+ },
216
+ },
217
+ },
218
+ // audit, course run started
219
+ {
220
+ courseName: 'Audit Course, Course run not started',
221
+ courseRun: { isStarted: true },
222
+ },
223
+ // audit, course run started, unmet prereqs
224
+ {
225
+ courseName: 'Audit Course, Course run not started, Has unmet prereqs',
226
+ enrollment: {
227
+ coursewareAccess: {
228
+ isTooEarly: true,
229
+ hasUnmetPrerequisites: true,
230
+ isStaff: false,
231
+ },
232
+ },
233
+ courseRun: { isStarted: true },
234
+ },
235
+ // audit, course run started, access expired, learner not started
236
+ {
237
+ courseName: 'Audit Course, Course run started, Audit ccess expired, Learner not started',
238
+ courseRun: { isStarted: true },
239
+ enrollment: {
240
+ accessExpirationDate: pastDate,
241
+ isAuditAccessExpired: true,
242
+ },
243
+ },
244
+ // audit, course run started, access expired, cannot upgrade, learner not started
245
+ {
246
+ courseName: 'Audit course, Course run not started, Audit access expired, Cannot upgrade, Learner not started',
247
+ courseRun: { isStarted: true },
248
+ enrollment: {
249
+ accessExpirationDate: pastDate,
250
+ canUpgrade: false,
251
+ isAuditAccessExpired: true,
252
+ },
253
+ },
254
+ // audit, course run ended, access expired, cannot upgrade, learner not started
255
+ {
256
+ courseName: 'Audit Course, Course run ended, Audit access expired, Cannot upgrade, Learner not started',
257
+ courseRun: {
258
+ endDate: pastDate,
259
+ isStarted: true,
260
+ },
261
+ enrollment: {
262
+ accessExpirationDate: pastDate,
263
+ isAuditAccessExpired: true,
264
+ },
265
+ },
266
+ // audit, course run archived, access expired, cannot upgrade, learner not started
267
+ {
268
+ courseName: 'Audit Course, Course run archived, Audit access expired, Cannot upgrade, Learner not started',
269
+ courseRun: {
270
+ endDate: pastDate,
271
+ isArchived: true,
272
+ isStarted: true,
273
+ },
274
+ enrollment: {
275
+ accessExpirationDate: pastDate,
276
+ isAuditAccessExpired: true,
277
+ },
278
+ },
279
+ // audit, course run and learner started, passing
280
+ {
281
+ courseName: 'Audit Course, Course run and learner started, Passing',
282
+ courseRun: { isStarted: true },
283
+ enrollment: { hasStarted: true },
284
+ },
285
+ // audit, course run and learner started, access expired
286
+ {
287
+ courseName: 'Audit Course, Course run and learner started, Audit access expired',
288
+ courseRun: { isStarted: true },
289
+ enrollment: {
290
+ accessExpirationDate: pastDate,
291
+ isAuditAccessExpired: true,
292
+ hasStarted: true,
293
+ },
294
+ },
295
+ // audit, course run and learner started, access expired, cannot upgrade
296
+ {
297
+ courseName: 'Audit Course, Course run and learner started, Audit access expired, Cannot upgrade',
298
+ courseRun: { isStarted: true },
299
+ enrollment: {
300
+ accessExpirationDate: pastDate,
301
+ canUpgrade: false,
302
+ isAuditAccessExpired: true,
303
+ hasStarted: true,
304
+ },
305
+ },
306
+ // audit, course run ended, learner started, expired, cannot upgraded, not passing
307
+ {
308
+ courseName: 'Audit Course, Course run ended, Learner started, Access expired, Cannot upgrade, Not passing',
309
+ courseRun: {
310
+ isStarted: true,
311
+ endDate: pastDate,
312
+ },
313
+ enrollment: {
314
+ accessExpirationDate: pastDate,
315
+ canUpgrade: false,
316
+ isAuditAccessExpired: true,
317
+ hasStarted: true,
318
+ },
319
+ grade: { isPassing: false },
320
+ },
321
+ // audit, course run archived, learner started, expired, cannot upgrade, not passing
322
+ {
323
+ courseName: 'Audit Course, Course run archived, Learner started, Access expired, Cannot upgrade, Not passing',
324
+ courseRun: {
325
+ isStarted: true,
326
+ isArchived: true,
327
+ endDate: pastDate,
328
+ },
329
+ enrollment: {
330
+ accessExpirationDate: pastDate,
331
+ canUpgrade: false,
332
+ isAuditAccessExpired: true,
333
+ hasStarted: true,
334
+ },
335
+ grade: { isPassing: false },
336
+ },
337
+ ];
338
+ const verifiedCourses = [
339
+ // verified, course not started, learner not started
340
+ {
341
+ courseName: 'Verified Course, Course and learner not started',
342
+ enrollment: { isVerified: true },
343
+ },
344
+ // verified, course started, learner not started
345
+ {
346
+ courseName: 'Verified Course, Course started, Learner not started',
347
+ courseRun: { isStarted: true },
348
+ enrollment: { isVerified: true },
349
+ },
350
+ // verified, course started, learner started, passing
351
+ {
352
+ courseName: 'Verified Course, Course and learner started, Passing',
353
+ courseRun: { isStarted: true },
354
+ enrollment: { hasStarted: true, isVerified: true },
355
+ },
356
+ // verified, course started, learner started, not passing
357
+ {
358
+ courseName: 'Verified Course, Course and learner started, not passing',
359
+ courseRun: { isStarted: true },
360
+ gradeData: { isPassing: false },
361
+ enrollment: { hasStarted: true, isVerified: true },
362
+ },
363
+ // verified, learner finished, not passing, cert not earned
364
+ {
365
+ courseName: 'Verified Course, Learner finished, cert not earned',
366
+ enrollment: {
367
+ hasStarted: true,
368
+ isVerified: true,
369
+ },
370
+ courseRun: { isStarted: true, isArchived: true },
371
+ gradeData: { isPassing: false },
372
+ certificate: {
373
+ isEarned: false,
374
+ },
375
+ },
376
+ // verified, learner finished, passing, cert earned but not available
377
+ {
378
+ courseName: 'Verified Course, Learner finished, Cert earned but not available',
379
+ enrollment: {
380
+ hasStarted: true,
381
+ isVerified: true,
382
+ },
383
+ courseRun: { isStarted: true, isArchived: true },
384
+ certificate: {
385
+ isEarned: true,
386
+ availableDate: futureDate,
387
+ },
388
+ },
389
+ // verified, learner finished, passing, restricted
390
+ {
391
+ courseName: 'Verified Course, Learner finished, Passing, Certificate restricted',
392
+ enrollment: {
393
+ hasStarted: true,
394
+ isVerified: true,
395
+ },
396
+ courseRun: { isStarted: true, isArchived: true },
397
+ certificate: { isRestricted: true },
398
+ },
399
+ // verified, learner finished, cert earned, downloadable (web + link)
400
+ {
401
+ courseName: 'Verified Course, Learner finished, Passing, Certificate downloadable and viewable',
402
+ enrollment: {
403
+ hasStarted: true,
404
+ isVerified: true,
405
+ },
406
+ courseRun: { isStarted: true, isArchived: true },
407
+ certificate: {
408
+ isEarned: true,
409
+ isDownloadable: true,
410
+ availableDate: pastDate,
411
+ certPreviewUrl: bannerImgSrc,
412
+ },
413
+ },
414
+ // verified, course ended, learner finished, cert earned, downloadable (link only),
415
+ {
416
+ courseName: 'Verified Course, Course ended, Learner finished, Passing, Certificate downloadable',
417
+ enrollment: {
418
+ hasStarted: true,
419
+ isVerified: true,
420
+ },
421
+ courseRun: {
422
+ isStarted: true,
423
+ isArchived: true,
424
+ endDate: pastDate,
425
+ },
426
+ certificate: {
427
+ isEarned: true,
428
+ isDownloadable: true,
429
+ availableDate: pastDate,
430
+ },
431
+ },
432
+ // verified, course ended, learner finished, cert earned, downloadable (web + link)
433
+ {
434
+ courseName: 'Verified Course, Course ended, Learner finished, Passing, Certificate downloadable and viewable',
435
+ enrollment: {
436
+ hasStarted: true,
437
+ isVerified: true,
438
+ },
439
+ courseRun: {
440
+ isStarted: true,
441
+ isArchived: true,
442
+ endDate: pastDate,
443
+ },
444
+ certificate: {
445
+ isEarned: true,
446
+ isDownloadable: true,
447
+ availableDate: pastDate,
448
+ certPreviewUrl: bannerImgSrc,
449
+ },
450
+ },
451
+ ];
452
+ const fulfilledEntitlementCourses = [
453
+ // Entitlement - not started
454
+ {
455
+ courseName: 'Entitlement Course, not started',
456
+ enrollment: {
457
+ isVerified: true,
458
+ coursewareAccess: {
459
+ isTooEarly: true,
460
+ hasUnmetPrerequisites: false,
461
+ isStaff: false,
462
+ },
463
+ },
464
+ courseRun: { isStarted: false },
465
+ entitlement: {
466
+ uuid: genEntitlementUUID(0),
467
+ availableSessions,
468
+ changeDeadline: futureDate,
469
+ enrollmentUrl: '/entitlement-enrollment',
470
+ isExpired: false,
471
+ isFulfilled: true,
472
+ isRefundable: true,
473
+ },
474
+ },
475
+ // Entitlement - Course run started, learner not started, unmet prereqs
476
+ {
477
+ courseName: 'Entitlement Course, Course run started, Learner not started, Has unmet prereqs',
478
+ enrollment: {
479
+ isVerified: true,
480
+ coursewareAccess: {
481
+ },
482
+ },
483
+ courseRun: { isStarted: true },
484
+ entitlement: {
485
+ uuid: genEntitlementUUID(1),
486
+ availableSessions,
487
+ changeDeadline: futureDate,
488
+ enrollmentUrl: '/entitlement-enrollment',
489
+ isExpired: false,
490
+ isFulfilled: true,
491
+ isRefundable: true,
492
+ },
493
+ },
494
+ // Entitlement - Course run started, learner started, not passing
495
+ {
496
+ courseName: 'Entitlement Course, Course run started, Learner started, Not passing',
497
+ enrollment: {
498
+ isVerified: true,
499
+ hasStarted: true,
500
+ },
501
+ courseRun: { isStarted: true },
502
+ entitlement: {
503
+ uuid: genEntitlementUUID(2),
504
+ availableSessions,
505
+ changeDeadline: futureDate,
506
+ enrollmentUrl: '/entitlement-enrollment',
507
+ isExpired: false,
508
+ isFulfilled: true,
509
+ isRefundable: true,
510
+ },
511
+ gradeData: { isPassing: false },
512
+ },
513
+ // Entitlement - Course run started, learner started, passing, cannot change
514
+ {
515
+ courseName: 'Entitlement Course, Course run and learner started, Passing, Cannot change sessions',
516
+ enrollment: {
517
+ isVerified: true,
518
+ hasStarted: true,
519
+ },
520
+ courseRun: { isStarted: true },
521
+ entitlement: {
522
+ uuid: genEntitlementUUID(3),
523
+ availableSessions,
524
+ changeDeadline: pastDate,
525
+ enrollmentUrl: '/entitlement-enrollment',
526
+ isExpired: false,
527
+ isFulfilled: true,
528
+ isRefundable: true,
529
+ },
530
+ },
531
+ // Entitlement - Learner finished, but did not pass
532
+ {
533
+ courseName: 'Entitlement Course, Learner finished but did not pass',
534
+ enrollment: {
535
+ isVerified: true,
536
+ },
537
+ courseRun: { isStarted: true, isArchived: false },
538
+ entitlement: {
539
+ uuid: genEntitlementUUID(4),
540
+ availableSessions: null,
541
+ changeDeadline: pastDate,
542
+ enrollmentUrl: '/entitlement-enrollment',
543
+ isExpired: false,
544
+ isFulfilled: true,
545
+ isRefundable: false,
546
+ },
547
+ gradeData: { isPassing: false },
548
+ },
549
+ // Entitlement - Learner finished, and passed. cannot refund. previewable cert.
550
+ {
551
+ courseName: 'Entitlement course, Learner finished and passed, Cannot refund, Previewable Cert',
552
+ enrollment: {
553
+ isVerified: true,
554
+ },
555
+ courseRun: { isStarted: true, isArchived: false },
556
+ entitlement: {
557
+ uuid: genEntitlementUUID(5),
558
+ availableSessions: null,
559
+ changeDeadline: pastDate,
560
+ enrollmentUrl: '/entitlement-enrollment',
561
+ isExpired: false,
562
+ isFulfilled: true,
563
+ isRefundable: false,
564
+ },
565
+ certificate: {
566
+ isEarned: true,
567
+ isDownloadable: true,
568
+ availableDate: pastDate,
569
+ certPreviewUrl: bannerImgSrc,
570
+ },
571
+ },
572
+ // Entitlement - Learner finished and failed. cannot refund. course ended.
573
+ {
574
+ courseName: 'Entitlement Course, Learner finished and failed, Cannot refund, Course ended',
575
+ enrollment: {
576
+ isVerified: true,
577
+ },
578
+ courseRun: {
579
+ isStarted: true,
580
+ isArchived: false,
581
+ endDate: pastDate,
582
+ },
583
+ entitlement: {
584
+ uuid: genEntitlementUUID(6),
585
+ availableSessions: null,
586
+ enrollmentUrl: '/entitlement-enrollment',
587
+ isFulfilled: true,
588
+ isRefundable: false,
589
+ changeDeadline: pastDate,
590
+ isExpired: false,
591
+ },
592
+ gradeData: { isPassing: false },
593
+ },
594
+ // Entitlement - Learner finished and passed. cannot refund. cert downloadable
595
+ {
596
+ courseName: 'Entitlement Course, Learner finished and passed, Cannot refund, Cert downloadable',
597
+ enrollment: {
598
+ isVerified: true,
599
+ },
600
+ courseRun: {
601
+ isArchived: true,
602
+ isStarted: true,
603
+ endDate: pastDate,
604
+ },
605
+ entitlement: {
606
+ uuid: genEntitlementUUID(7),
607
+ availableSessions: null,
608
+ changeDeadline: pastDate,
609
+ enrollmentUrl: '/entitlement-enrollment',
610
+ isExpired: false,
611
+ isRefundable: false,
612
+ isFulfilled: true,
613
+ },
614
+ certificate: {
615
+ isEarned: true,
616
+ isDownloadable: true,
617
+ availableDate: pastDate,
618
+ certPreviewUrl: bannerImgSrc,
619
+ },
620
+ },
621
+ ];
622
+ const creditCourses = [
623
+ {
624
+ courseName: 'Credit - Eligible for credit from unknown provider',
625
+ credit: {
626
+ ...creditData,
627
+ providerName: null,
628
+ providerId: null,
629
+ },
630
+ enrollment: { isEnrolled: true },
631
+ },
632
+ {
633
+ courseName: 'Credit - Eligible for credit from known provider',
634
+ credit: creditData,
635
+ enrollment: { isEnrolled: true },
636
+ },
637
+ {
638
+ courseName: 'Credit - Purchased but must request',
639
+ credit: { ...creditData, purchased: true },
640
+ enrollment: { isEnrolled: true },
641
+ },
642
+ {
643
+ courseName: 'Credit - Credit Request Pending',
644
+ credit: {
645
+ ...creditData,
646
+ purchased: true,
647
+ requestStatus: creditVals.requestStatuses.pending,
648
+ },
649
+ enrollment: { isEnrolled: true },
650
+ },
651
+ {
652
+ courseName: 'Credit - Credit Request Approved',
653
+ credit: {
654
+ ...creditData,
655
+ purchased: true,
656
+ requestStatus: creditVals.requestStatuses.approved,
657
+ },
658
+ enrollment: { isEnrolled: true },
659
+ },
660
+ {
661
+ courseName: 'Credit - Credit Request Rejected, Error thrown',
662
+ credit: {
663
+ ...creditData,
664
+ purchased: true,
665
+ requestStatus: creditVals.requestStatuses.rejected,
666
+ error: true,
667
+ },
668
+ enrollment: { isEnrolled: true },
669
+ },
670
+ ];
671
+
672
+ export const courseRuns = [
673
+ ...auditCourses,
674
+ ...verifiedCourses,
675
+ ...fulfilledEntitlementCourses,
676
+ ...creditCourses,
677
+ ];
678
+
679
+ // unfulfilled entitlement select session
680
+ // unfulfilled entitlement select session with deadline
681
+ // unfulfilled entitlement select session pass deadline with available session {banner different from 4th}
682
+ // unfulfilled entitlement select session pass deadline without available session
683
+ export const entitlementCourses = [
684
+ {
685
+ courseName: 'Unfulfilled Entitlement select session',
686
+ entitlement: {
687
+ uuid: genEntitlementUUID(10),
688
+ availableSessions,
689
+ changeDeadline: futureDate,
690
+ enrollmentUrl: '/entitlement-enrollment',
691
+ isExpired: false,
692
+ isFulfilled: false,
693
+ isRefundable: true,
694
+ },
695
+ }, {
696
+ courseName: 'Unfulfilled Entitlement select session with upcoming deadline',
697
+ entitlement: {
698
+ uuid: genEntitlementUUID(11),
699
+ availableSessions,
700
+ changeDeadline: soonDateStr,
701
+ enrollmentUrl: '/entitlement-enrollment',
702
+ isExpired: false,
703
+ isFulfilled: false,
704
+ isRefundable: true,
705
+ },
706
+ }, {
707
+ courseName: 'Unfulfilled Entitlement select session past deadline, With available session',
708
+ entitlement: {
709
+ uuid: genEntitlementUUID(12),
710
+ availableSessions,
711
+ changeDeadline: pastDate,
712
+ enrollmentUrl: '/entitlement-enrollment',
713
+ isExpired: false,
714
+ isFulfilled: false,
715
+ isRefundable: true,
716
+ },
717
+ }, {
718
+ courseName: 'Unfulfilled Entitlement select session past deadline, With available no session',
719
+ entitlement: {
720
+ uuid: genEntitlementUUID(13),
721
+ availableSessions: [],
722
+ changeDeadline: pastDate,
723
+ enrollmentUrl: '/entitlement-enrollment',
724
+ isExpired: true,
725
+ isFulfilled: false,
726
+ isRefundable: true,
727
+ },
728
+ },
729
+ ];
730
+
731
+ const providerOptions = [
732
+ providers.edx,
733
+ providers.mit,
734
+ null,
735
+ ];
736
+
737
+ const emailOptions = [
738
+ { isEmailEnabled: false, hasOptedOutOfEmail: false },
739
+ { isEmailEnabled: true, hasOptedOutOfEmail: false },
740
+ { isEmailEnabled: true, hasOptedOutOfEmail: true },
741
+ ];
742
+
743
+ const programsOptions = [
744
+ { relatedPrograms },
745
+ { relatedPrograms: [relatedPrograms[0]] },
746
+ { relatedPrograms: [] },
747
+ ];
748
+
749
+ const getOption = (options, index) => options[index % options.length];
750
+
751
+ export const compileCourseRunData = ({ courseName, ...data }, index) => {
752
+ const courseId = genCourseId(index);
753
+ const courseNumber = genCourseNumber(index);
754
+ const socialShareUrl = genCourseShareUrl(index);
755
+ const lastEnrolledDate = new Date();
756
+ lastEnrolledDate.setDate(lastEnrolledDate.getDate() - index - 1);
757
+ const lastEnrolled = lastEnrolledDate.toISOString();
758
+ const out = {
759
+ gradeData: { isPassing: true },
760
+ entitlement: null,
761
+ credit: {},
762
+ ...data,
763
+ certificate: genCertificateData(data.certificate),
764
+ enrollment: genEnrollmentData({
765
+ lastEnrolled,
766
+ ...getOption(emailOptions, index),
767
+ ...data.enrollment,
768
+ }),
769
+ courseRun: genCourseRunData({
770
+ ...data.courseRun,
771
+ courseId,
772
+ }),
773
+ course: {
774
+ courseName,
775
+ bannerImgSrc,
776
+ courseNumber,
777
+ socialShareUrl,
778
+ },
779
+ courseProvider: getOption(providerOptions, index),
780
+ programs: getOption(programsOptions, index),
781
+ };
782
+ return out;
783
+ };
784
+
785
+ export const compileEntitlementData = ({ courseName, ...data }, index) => {
786
+ const courseNumber = genCourseNumber(100 + index);
787
+ const socialShareUrl = genCourseShareUrl(100 + index);
788
+ return {
789
+ enrollment: genEnrollmentData({
790
+ isEnrolled: false,
791
+ lastEnrolled: null,
792
+ accessExpirationDate: null,
793
+ canUpgrade: false,
794
+ hasStarted: false,
795
+ isAudit: false,
796
+ isAuditAccessExpired: false,
797
+ isEmailEnabled: false,
798
+ isVerified: false,
799
+ }),
800
+ gradeData: null,
801
+ certificate: null,
802
+ courseRun: null,
803
+ ...data,
804
+ course: {
805
+ courseName,
806
+ courseNumber,
807
+ bannerImgSrc,
808
+ socialShareUrl,
809
+ },
810
+ courseProvider: getOption(providerOptions, index),
811
+ programs: getOption(programsOptions, index),
812
+ };
813
+ };
814
+
815
+ // Entitlement Course - refundable
816
+ // Entitlement Course - cannot view yet
817
+ // Entitlement Course - can view and change
818
+ // Entitlement Course - expired
819
+ export const courseRunData = courseRuns.map(compileCourseRunData);
820
+ export const entitlementData = entitlementCourses.map(compileEntitlementData);
821
+
822
+ export default {
823
+ compileEntitlementData,
824
+ compileCourseRunData,
825
+ courseRunData,
826
+ entitlementData,
827
+ globalData,
828
+ };