@clickview/lite 0.0.18-dev.2 → 0.0.18-rc.1

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 (418) hide show
  1. package/dist/css/0.chunk.css.map +1 -0
  2. package/dist/css/1.chunk.css +144 -2
  3. package/dist/css/1.chunk.css.map +1 -0
  4. package/dist/css/10.chunk.css +10 -12
  5. package/dist/css/10.chunk.css.map +1 -0
  6. package/dist/css/11.chunk.css +5 -9
  7. package/dist/css/11.chunk.css.map +1 -0
  8. package/dist/css/12.chunk.css.map +1 -0
  9. package/dist/css/13.chunk.css.map +1 -0
  10. package/dist/css/14.chunk.css.map +1 -0
  11. package/dist/css/16.chunk.css.map +1 -0
  12. package/dist/css/18.chunk.css.map +1 -0
  13. package/dist/css/19.chunk.css +6 -2
  14. package/dist/css/19.chunk.css.map +1 -0
  15. package/dist/css/2.chunk.css +14 -0
  16. package/dist/css/20.chunk.css +2 -6
  17. package/dist/css/21.chunk.css +1 -3
  18. package/dist/css/21.chunk.css.map +1 -0
  19. package/dist/css/22.chunk.css +2 -2
  20. package/dist/css/22.chunk.css.map +1 -0
  21. package/dist/css/23.chunk.css +3 -1
  22. package/dist/css/23.chunk.css.map +1 -0
  23. package/dist/css/24.chunk.css +1 -3
  24. package/dist/css/24.chunk.css.map +1 -0
  25. package/dist/css/25.chunk.css +2 -2
  26. package/dist/css/25.chunk.css.map +1 -0
  27. package/dist/css/26.chunk.css +3 -1
  28. package/dist/css/26.chunk.css.map +1 -0
  29. package/dist/css/27.chunk.css +66 -2
  30. package/dist/css/27.chunk.css.map +1 -0
  31. package/dist/css/28.chunk.css +48 -2
  32. package/dist/css/28.chunk.css.map +1 -0
  33. package/dist/css/29.chunk.css +43 -4
  34. package/dist/css/29.chunk.css.map +1 -0
  35. package/dist/css/3.chunk.css +13 -7
  36. package/dist/css/3.chunk.css.map +1 -0
  37. package/dist/css/30.chunk.css +1 -3
  38. package/dist/css/30.chunk.css.map +1 -0
  39. package/dist/css/31.chunk.css +5 -2
  40. package/dist/css/31.chunk.css.map +1 -0
  41. package/dist/css/32.chunk.css +4 -1
  42. package/dist/css/32.chunk.css.map +1 -0
  43. package/dist/css/34.chunk.css +4 -2
  44. package/dist/css/34.chunk.css.map +1 -0
  45. package/dist/css/35.chunk.css +7 -0
  46. package/dist/css/35.chunk.css.map +1 -0
  47. package/dist/css/36.chunk.css +4 -0
  48. package/dist/css/36.chunk.css.map +1 -0
  49. package/dist/css/37.chunk.css +3 -1
  50. package/dist/css/37.chunk.css.map +1 -0
  51. package/dist/css/38.chunk.css +36 -2
  52. package/dist/css/38.chunk.css.map +1 -0
  53. package/dist/css/4.chunk.css +5 -13
  54. package/dist/css/4.chunk.css.map +1 -0
  55. package/dist/css/44.chunk.css +1 -1
  56. package/dist/css/45.chunk.css +9 -0
  57. package/dist/css/45.chunk.css.map +1 -0
  58. package/dist/css/5.chunk.css +2 -8
  59. package/dist/css/5.chunk.css.map +1 -0
  60. package/dist/css/9.chunk.css +15 -7
  61. package/dist/css/lite-app.css.map +1 -0
  62. package/dist/libs/analytics/src/AnalyticsService.d.ts +52 -0
  63. package/dist/libs/analytics/src/clients/BaseAnalyticsClient.d.ts +24 -0
  64. package/dist/libs/analytics/src/clients/CollectionApiClient.d.ts +48 -0
  65. package/dist/libs/analytics/src/clients/DebuggerClient.d.ts +7 -0
  66. package/dist/libs/analytics/src/constants/ApplicationOptionsKey.d.ts +1 -0
  67. package/dist/libs/analytics/src/constants/CountryRegionMapping.d.ts +7 -0
  68. package/dist/libs/analytics/src/constants/Regions.d.ts +6 -0
  69. package/dist/libs/analytics/src/enrichers/BaseAnalyticsEnricher.d.ts +19 -0
  70. package/dist/libs/analytics/src/enrichers/CoreContextEnricher.d.ts +22 -0
  71. package/dist/libs/analytics/src/enrichers/UserDataEnricher.d.ts +10 -0
  72. package/dist/libs/analytics/src/enums/CountryCode.d.ts +5 -0
  73. package/dist/libs/analytics/src/interfaces/AnalyticsTypes.d.ts +49 -5
  74. package/dist/libs/analytics/src/interfaces/VersionData.d.ts +4 -0
  75. package/dist/libs/analytics/src/models/CollectionEvent.d.ts +55 -0
  76. package/dist/libs/analytics/src/transport/EventTransport.d.ts +39 -0
  77. package/dist/libs/analytics/src/utils/CollectionApiClientHelper.d.ts +6 -0
  78. package/dist/libs/analytics/src/utils/DataFormatHelper.d.ts +14 -0
  79. package/dist/libs/analytics/src/utils/EventWhitelistHelper.d.ts +19 -0
  80. package/dist/libs/analytics/src/utils/TypeHelper.d.ts +4 -0
  81. package/dist/libs/analytics/src/utils/UploadDataFormatHelper.d.ts +10 -0
  82. package/dist/libs/analytics/src/utils/UserAgentHelper.d.ts +10 -0
  83. package/dist/libs/analytics/src/utils/VideoDataFormatHelper.d.ts +42 -0
  84. package/dist/libs/common/src/backbone/core/BaseAppRouter.d.ts +5 -1
  85. package/dist/libs/common/src/react/constants/ViewModelActions.d.ts +3 -0
  86. package/dist/libs/common/src/react/hooks/useViewModel.d.ts +4 -0
  87. package/dist/libs/common/src/react/interfaces/ApplicationState.d.ts +3 -1
  88. package/dist/libs/common/src/react/interfaces/ViewModelAction.d.ts +5 -0
  89. package/dist/libs/common/src/react/interfaces/ViewModelPayload.d.ts +5 -0
  90. package/dist/libs/common/src/react/reducers/ViewModelReducer.d.ts +3 -0
  91. package/dist/libs/common/src/react/utils/ArrayHelper.d.ts +1 -1
  92. package/dist/libs/shared/src/apps/content-updates/interfaces/VideoClassificationMapping.d.ts +2 -1
  93. package/dist/libs/shared/src/apps/upload/services/UploadService.d.ts +3 -2
  94. package/dist/libs/shared/src/components/lazy-image/LazyImage.d.ts +1 -1
  95. package/dist/libs/shared/src/components/search-bar/SearchBar.d.ts +5 -0
  96. package/dist/libs/shared/src/components/widgets/fixed-widget/FixedWidget.d.ts +4 -2
  97. package/dist/libs/shared/src/components/widgets/items/subject-widget-item/SubjectWidgetItem.d.ts +4 -3
  98. package/dist/libs/shared/src/constants/BootstrapKeys.d.ts +1 -0
  99. package/dist/libs/shared/src/constants/WithStatements.d.ts +1 -1
  100. package/dist/libs/shared/src/enums/CountryCode.d.ts +5 -0
  101. package/dist/libs/shared/src/enums/SubtitleExtractionOptions.d.ts +4 -0
  102. package/dist/libs/shared/src/enums/WidgetContents.d.ts +2 -1
  103. package/dist/libs/shared/src/flight-requests/FavouriteVideoRequests.d.ts +1 -1
  104. package/dist/libs/shared/src/flight-requests/PreferenceRequests.d.ts +4 -4
  105. package/dist/libs/shared/src/hooks/UseReorderedItems.d.ts +9 -0
  106. package/dist/libs/shared/src/interfaces/models/Config.d.ts +3 -1
  107. package/dist/libs/shared/src/interfaces/models/Group.d.ts +3 -0
  108. package/dist/libs/shared/src/interfaces/models/User.d.ts +2 -1
  109. package/dist/libs/shared/src/interfaces/models/UserChannel.d.ts +7 -0
  110. package/dist/libs/shared/src/interfaces/models/index.d.ts +2 -0
  111. package/dist/libs/shared/src/services/ConfigDataService.d.ts +1 -0
  112. package/dist/libs/shared/src/utils/AudienceHelper.d.ts +5 -1
  113. package/dist/projects/lite/src/apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown.d.ts +3 -2
  114. package/dist/projects/lite/src/apps/classrooms/components/tile-actions/TileActions.d.ts +1 -0
  115. package/dist/projects/lite/src/apps/classrooms/flight-requests/ClassroomRequests.d.ts +1 -1
  116. package/dist/projects/lite/src/apps/classrooms/views/add-students-to-classroom/AddStudentsToClassroomView.d.ts +3 -3
  117. package/dist/projects/lite/src/apps/classrooms/views/create-classroom/CreateClassroomView.d.ts +3 -4
  118. package/dist/projects/lite/src/apps/classrooms/views/create-classroom-group/CreateClassroomGroupView.d.ts +3 -3
  119. package/dist/projects/lite/src/apps/classrooms/views/delete-classroom/DeleteClassroomView.d.ts +4 -4
  120. package/dist/projects/lite/src/apps/classrooms/views/delete-classroom-group/DeleteClassroomGroupView.d.ts +3 -3
  121. package/dist/projects/lite/src/apps/classrooms/views/edit-classroom/EditClassroomView.d.ts +3 -3
  122. package/dist/projects/lite/src/apps/classrooms/views/edit-classroom-group/EditClassroomGroupView.d.ts +3 -3
  123. package/dist/projects/lite/src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.d.ts +3 -3
  124. package/dist/projects/lite/src/apps/content-updates/LiteContentUpdatesApplication.d.ts +1 -1
  125. package/dist/projects/lite/src/apps/default/LiteDefaultApplication.d.ts +2 -2
  126. package/dist/projects/lite/src/apps/playlists/LitePlaylistsApplication.d.ts +2 -1
  127. package/dist/projects/lite/src/apps/playlists/views/delete-playlist/DeletePlaylistView.d.ts +2 -2
  128. package/dist/projects/lite/src/apps/playlists/views/edit-playlist/EditPlaylistView.d.ts +2 -2
  129. package/dist/projects/lite/src/apps/playlists/views/new-playlist/NewPlaylistView.d.ts +2 -2
  130. package/dist/projects/lite/src/apps/playlists/views/playlist/PlaylistViewUtils.d.ts +0 -8
  131. package/dist/projects/lite/src/apps/playlists/views/remove-video-from-playlist/RemoveVideoFromPlaylistView.d.ts +2 -2
  132. package/dist/projects/lite/src/apps/search/components/filter-actions/FilterActions.d.ts +3 -2
  133. package/dist/projects/lite/src/apps/search/components/filter-button/FilterButton.d.ts +3 -2
  134. package/dist/projects/lite/src/apps/search/components/filter-types/checkbox-filter/CheckboxFilter.d.ts +3 -2
  135. package/dist/projects/lite/src/apps/search/components/filter-types/dropdown-filter/DropdownFilter.d.ts +3 -2
  136. package/dist/projects/lite/src/apps/search/components/filter-types/radio-filter/RadioFilter.d.ts +3 -2
  137. package/dist/projects/lite/src/apps/search/components/filter-types/radio-filter/year-level/YearLevelRadioFilter.d.ts +3 -2
  138. package/dist/projects/lite/src/apps/search/components/reset-button/ResetButton.d.ts +3 -2
  139. package/dist/projects/lite/src/apps/search/components/search-filters/SearchFilters.d.ts +3 -2
  140. package/dist/projects/lite/src/apps/search/interfaces/FilterProps.d.ts +3 -2
  141. package/dist/projects/lite/src/apps/search/utils/FilterHelper.d.ts +4 -2
  142. package/dist/projects/lite/src/apps/subjects/LiteSubjectApplication.d.ts +2 -2
  143. package/dist/projects/lite/src/apps/upload/services/FlightVideoUploadDataService.d.ts +5 -0
  144. package/dist/projects/lite/src/apps/user-manager/components/delete-uploaded-student-popup/DeleteUploadedStudentPopup.d.ts +4 -4
  145. package/dist/projects/lite/src/apps/user-manager/components/delete-uploaded-teacher-popup/DeleteUploadedTeacherPopup.d.ts +4 -4
  146. package/dist/projects/lite/src/apps/user-manager/components/edit-uploaded-user-popup/EditUploadedUserPopup.d.ts +4 -4
  147. package/dist/projects/lite/src/apps/user-manager/components/manage-users-list/ManageUsersList.d.ts +3 -2
  148. package/dist/projects/lite/src/apps/user-manager/flight-requests/SchoolUserRequests.d.ts +3 -3
  149. package/dist/projects/lite/src/apps/user-manager/views/create-student/CreateStudentView.d.ts +3 -4
  150. package/dist/projects/lite/src/apps/user-manager/views/create-teacher/CreateTeacherView.d.ts +3 -4
  151. package/dist/projects/lite/src/apps/user-manager/views/edit-student/EditStudentView.d.ts +4 -4
  152. package/dist/projects/lite/src/apps/user-manager/views/edit-teacher/EditTeacherView.d.ts +4 -4
  153. package/dist/projects/lite/src/apps/user-manager/views/remove-user/RemoveUserView.d.ts +4 -4
  154. package/dist/projects/lite/src/apps/user-manager/views/student-upload-review/StudentUploadReviewView.d.ts +4 -2
  155. package/dist/projects/lite/src/apps/user-manager/views/teacher-upload-review/TeacherUploadReviewView.d.ts +4 -2
  156. package/dist/projects/lite/src/shared/components/immersive-reader/ImmersiveReader.d.ts +7 -2
  157. package/dist/projects/lite/src/shared/components/share/copy-embed-html/CopyEmbedHtml.d.ts +4 -2
  158. package/dist/projects/lite/src/shared/constants/LiteViewModels.d.ts +6 -0
  159. package/dist/projects/lite/src/shared/{contexts/player/PlayerContext.d.ts → hooks/useInitPlayerContext.d.ts} +4 -10
  160. package/dist/projects/lite/src/shared/hooks/useNavLock.d.ts +1 -0
  161. package/dist/projects/lite/src/shared/views/share/main-view/MainShareView.d.ts +3 -3
  162. package/dist/projects/lite/src/shared/views/share/settings-view/ShareSettingsView.d.ts +4 -3
  163. package/dist/projects/lite/src/startup/RegisterAnalytics.d.ts +3 -0
  164. package/dist/projects/lite/src/startup/index.d.ts +1 -0
  165. package/dist/scripts/0-525bd75473.chunk.js +1 -0
  166. package/dist/scripts/0.chunk.js +478 -1
  167. package/dist/scripts/0.chunk.js.map +1 -0
  168. package/dist/scripts/1-f6fa17226d.chunk.js +17 -0
  169. package/dist/scripts/1.chunk.js +621 -17
  170. package/dist/scripts/1.chunk.js.map +1 -0
  171. package/dist/scripts/10-f3b34b2d35.chunk.js +1 -0
  172. package/dist/scripts/10.chunk.js +400 -7
  173. package/dist/scripts/10.chunk.js.map +1 -0
  174. package/dist/scripts/11-a698af3f1c.chunk.js +1 -0
  175. package/dist/scripts/11.chunk.js +1289 -7
  176. package/dist/scripts/11.chunk.js.map +1 -0
  177. package/dist/scripts/12-9ace90fcbc.chunk.js +1 -0
  178. package/dist/scripts/12.chunk.js +1059 -7
  179. package/dist/scripts/12.chunk.js.map +1 -0
  180. package/dist/scripts/13-3a4f103546.chunk.js +1 -0
  181. package/dist/scripts/13.chunk.js +751 -7
  182. package/dist/scripts/13.chunk.js.map +1 -0
  183. package/dist/scripts/14-11868e2868.chunk.js +1 -0
  184. package/dist/scripts/14.chunk.js +425 -7
  185. package/dist/scripts/14.chunk.js.map +1 -0
  186. package/dist/scripts/15-78ff5e8be2.chunk.js +1 -0
  187. package/dist/scripts/15.chunk.js +609 -7
  188. package/dist/scripts/15.chunk.js.map +1 -0
  189. package/dist/scripts/16-22f6224811.chunk.js +1 -0
  190. package/dist/scripts/16.chunk.js +648 -7
  191. package/dist/scripts/16.chunk.js.map +1 -0
  192. package/dist/scripts/17-afe6281dd5.chunk.js +1 -0
  193. package/dist/scripts/17.chunk.js +541 -7
  194. package/dist/scripts/17.chunk.js.map +1 -0
  195. package/dist/scripts/18-47be31c0b6.chunk.js +1 -0
  196. package/dist/scripts/18.chunk.js +766 -7
  197. package/dist/scripts/18.chunk.js.map +1 -0
  198. package/dist/scripts/19-89c0b2c20e.chunk.js +1 -0
  199. package/dist/scripts/19.chunk.js +647 -7
  200. package/dist/scripts/19.chunk.js.map +1 -0
  201. package/dist/scripts/2-3b37480a80.chunk.js +7 -0
  202. package/dist/scripts/2.chunk.js +8259 -1
  203. package/dist/scripts/2.chunk.js.map +1 -0
  204. package/dist/scripts/20-32ac3fe0b9.chunk.js +1 -0
  205. package/dist/scripts/20.chunk.js +122 -7
  206. package/dist/scripts/20.chunk.js.map +1 -0
  207. package/dist/scripts/21-891207049a.chunk.js +1 -0
  208. package/dist/scripts/21.chunk.js +1571 -1
  209. package/dist/scripts/21.chunk.js.map +1 -0
  210. package/dist/scripts/22-24236e6723.chunk.js +1 -0
  211. package/dist/scripts/22.chunk.js +1387 -1
  212. package/dist/scripts/22.chunk.js.map +1 -0
  213. package/dist/scripts/23-7b425169bc.chunk.js +1 -0
  214. package/dist/scripts/23.chunk.js +1121 -1
  215. package/dist/scripts/23.chunk.js.map +1 -0
  216. package/dist/scripts/24-40edd30087.chunk.js +1 -0
  217. package/dist/scripts/24.chunk.js +1348 -1
  218. package/dist/scripts/24.chunk.js.map +1 -0
  219. package/dist/scripts/25-887b9ef587.chunk.js +1 -0
  220. package/dist/scripts/25.chunk.js +1137 -1
  221. package/dist/scripts/25.chunk.js.map +1 -0
  222. package/dist/scripts/26-cbe0ff0f77.chunk.js +1 -0
  223. package/dist/scripts/26.chunk.js +906 -1
  224. package/dist/scripts/26.chunk.js.map +1 -0
  225. package/dist/scripts/27-f26afdae78.chunk.js +1 -0
  226. package/dist/scripts/27.chunk.js +1143 -1
  227. package/dist/scripts/27.chunk.js.map +1 -0
  228. package/dist/scripts/28-70414fd373.chunk.js +1 -0
  229. package/dist/scripts/28.chunk.js +656 -1
  230. package/dist/scripts/28.chunk.js.map +1 -0
  231. package/dist/scripts/29-944b5c01a7.chunk.js +1 -0
  232. package/dist/scripts/29.chunk.js +616 -1
  233. package/dist/scripts/29.chunk.js.map +1 -0
  234. package/dist/scripts/3-233f573a92.chunk.js +1 -0
  235. package/dist/scripts/3.chunk.js +585 -1
  236. package/dist/scripts/3.chunk.js.map +1 -0
  237. package/dist/scripts/30-3a229887e9.chunk.js +1 -0
  238. package/dist/scripts/30.chunk.js +557 -1
  239. package/dist/scripts/30.chunk.js.map +1 -0
  240. package/dist/scripts/31-ab038bfc0c.chunk.js +1 -0
  241. package/dist/scripts/31.chunk.js +731 -1
  242. package/dist/scripts/31.chunk.js.map +1 -0
  243. package/dist/scripts/32-8bd6703eef.chunk.js +1 -0
  244. package/dist/scripts/32.chunk.js +957 -1
  245. package/dist/scripts/32.chunk.js.map +1 -0
  246. package/dist/scripts/{35-8b4ce9fc27.chunk.js → 33-4579af9cf9.chunk.js} +1 -1
  247. package/dist/scripts/33.chunk.js +938 -1
  248. package/dist/scripts/33.chunk.js.map +1 -0
  249. package/dist/scripts/{36-cbd8837f89.chunk.js → 34-d8b96d9f9f.chunk.js} +1 -1
  250. package/dist/scripts/34.chunk.js +523 -1
  251. package/dist/scripts/34.chunk.js.map +1 -0
  252. package/dist/scripts/35-666d815525.chunk.js +1 -0
  253. package/dist/scripts/35.chunk.js +414 -1
  254. package/dist/scripts/35.chunk.js.map +1 -0
  255. package/dist/scripts/36-02ce5f3538.chunk.js +1 -0
  256. package/dist/scripts/36.chunk.js +404 -1
  257. package/dist/scripts/36.chunk.js.map +1 -0
  258. package/dist/scripts/37-afd3d321e3.chunk.js +1 -0
  259. package/dist/scripts/37.chunk.js +245 -1
  260. package/dist/scripts/37.chunk.js.map +1 -0
  261. package/dist/scripts/{39-e2aa1689e2.chunk.js → 38-6ad53aa15b.chunk.js} +1 -1
  262. package/dist/scripts/38.chunk.js +343 -1
  263. package/dist/scripts/38.chunk.js.map +1 -0
  264. package/dist/scripts/{40-53d132e3b4.chunk.js → 39-46c747b1d9.chunk.js} +1 -1
  265. package/dist/scripts/39.chunk.js +318 -1
  266. package/dist/scripts/39.chunk.js.map +1 -0
  267. package/dist/scripts/4-6942fee782.chunk.js +1 -0
  268. package/dist/scripts/4.chunk.js +1030 -1
  269. package/dist/scripts/4.chunk.js.map +1 -0
  270. package/dist/scripts/{41-023d613070.chunk.js → 40-c1b8806b1c.chunk.js} +1 -1
  271. package/dist/scripts/40.chunk.js +236 -1
  272. package/dist/scripts/40.chunk.js.map +1 -0
  273. package/dist/scripts/{42-ba3779218d.chunk.js → 41-f4c23477e3.chunk.js} +1 -1
  274. package/dist/scripts/41.chunk.js +231 -1
  275. package/dist/scripts/41.chunk.js.map +1 -0
  276. package/dist/scripts/42-7a5b92d70b.chunk.js +1 -0
  277. package/dist/scripts/42.chunk.js +350 -1
  278. package/dist/scripts/42.chunk.js.map +1 -0
  279. package/dist/scripts/43-97193a87df.chunk.js +1 -0
  280. package/dist/scripts/43.chunk.js +225 -1
  281. package/dist/scripts/43.chunk.js.map +1 -0
  282. package/dist/scripts/{46-6501968ace.chunk.js → 44-7f92272274.chunk.js} +1 -1
  283. package/dist/scripts/44.chunk.js +318 -1
  284. package/dist/scripts/44.chunk.js.map +1 -0
  285. package/dist/scripts/45-265f1a7a42.chunk.js +1 -0
  286. package/dist/scripts/45.chunk.js +64 -1
  287. package/dist/scripts/45.chunk.js.map +1 -0
  288. package/dist/scripts/46-a594ad7eba.chunk.js +1 -0
  289. package/dist/scripts/46.chunk.js +108 -1
  290. package/dist/scripts/46.chunk.js.map +1 -0
  291. package/dist/scripts/47-99777c20cf.chunk.js +1 -0
  292. package/dist/scripts/47.chunk.js +110 -1
  293. package/dist/scripts/47.chunk.js.map +1 -0
  294. package/dist/scripts/48-9880523c82.chunk.js +1 -0
  295. package/dist/scripts/48.chunk.js +148 -1
  296. package/dist/scripts/48.chunk.js.map +1 -0
  297. package/dist/scripts/{50-00ffd5d7c6.chunk.js → 49-5e718594e5.chunk.js} +1 -1
  298. package/dist/scripts/49.chunk.js +142 -1
  299. package/dist/scripts/49.chunk.js.map +1 -0
  300. package/dist/scripts/5-2f631dcd74.chunk.js +1 -0
  301. package/dist/scripts/5.chunk.js +3262 -1
  302. package/dist/scripts/5.chunk.js.map +1 -0
  303. package/dist/scripts/50-8cb0d9cd7d.chunk.js +1 -0
  304. package/dist/scripts/50.chunk.js +145 -1
  305. package/dist/scripts/50.chunk.js.map +1 -0
  306. package/dist/scripts/{52-e5dfa5a640.chunk.js → 51-211b643ca5.chunk.js} +1 -1
  307. package/dist/scripts/51.chunk.js +176 -1
  308. package/dist/scripts/51.chunk.js.map +1 -0
  309. package/dist/scripts/{53-79d5905fc6.chunk.js → 52-bfb2683b5d.chunk.js} +1 -1
  310. package/dist/scripts/52.chunk.js +160 -1
  311. package/dist/scripts/52.chunk.js.map +1 -0
  312. package/dist/scripts/{54-4950ec1d52.chunk.js → 53-3cf5cd5f69.chunk.js} +1 -1
  313. package/dist/scripts/53.chunk.js +98 -1
  314. package/dist/scripts/53.chunk.js.map +1 -0
  315. package/dist/scripts/{55-accb81090d.chunk.js → 54-26807e3e49.chunk.js} +1 -1
  316. package/dist/scripts/54.chunk.js +48 -1
  317. package/dist/scripts/54.chunk.js.map +1 -0
  318. package/dist/scripts/55-d38be4860b.chunk.js +1 -0
  319. package/dist/scripts/55.chunk.js +99 -1
  320. package/dist/scripts/55.chunk.js.map +1 -0
  321. package/dist/scripts/56-d4abc25ec3.chunk.js +1 -0
  322. package/dist/scripts/56.chunk.js +64 -1
  323. package/dist/scripts/56.chunk.js.map +1 -0
  324. package/dist/scripts/57.chunk.js +72 -0
  325. package/dist/scripts/57.chunk.js.map +1 -0
  326. package/dist/scripts/58.chunk.js +73 -0
  327. package/dist/scripts/58.chunk.js.map +1 -0
  328. package/dist/scripts/59.chunk.js +70 -0
  329. package/dist/scripts/59.chunk.js.map +1 -0
  330. package/dist/scripts/6-4d72a3c3fc.chunk.js +1 -0
  331. package/dist/scripts/6.chunk.js +24 -1
  332. package/dist/scripts/6.chunk.js.map +1 -0
  333. package/dist/scripts/60.chunk.js +32 -0
  334. package/dist/scripts/60.chunk.js.map +1 -0
  335. package/dist/scripts/61.chunk.js +29 -0
  336. package/dist/scripts/61.chunk.js.map +1 -0
  337. package/dist/scripts/62.chunk.js +27 -0
  338. package/dist/scripts/62.chunk.js.map +1 -0
  339. package/dist/scripts/63.chunk.js +67 -0
  340. package/dist/scripts/63.chunk.js.map +1 -0
  341. package/dist/scripts/64.chunk.js +80 -0
  342. package/dist/scripts/64.chunk.js.map +1 -0
  343. package/dist/scripts/65.chunk.js +65 -0
  344. package/dist/scripts/65.chunk.js.map +1 -0
  345. package/dist/scripts/66.chunk.js +67 -0
  346. package/dist/scripts/66.chunk.js.map +1 -0
  347. package/dist/scripts/67.chunk.js +104 -0
  348. package/dist/scripts/67.chunk.js.map +1 -0
  349. package/dist/scripts/68.chunk.js +69 -0
  350. package/dist/scripts/68.chunk.js.map +1 -0
  351. package/dist/scripts/69.chunk.js +89 -0
  352. package/dist/scripts/69.chunk.js.map +1 -0
  353. package/dist/scripts/7-90ad392b55.chunk.js +1 -0
  354. package/dist/scripts/7.chunk.js +327 -1
  355. package/dist/scripts/7.chunk.js.map +1 -0
  356. package/dist/scripts/70.chunk.js +36 -0
  357. package/dist/scripts/70.chunk.js.map +1 -0
  358. package/dist/scripts/8.chunk.js +470 -0
  359. package/dist/scripts/8.chunk.js.map +1 -0
  360. package/dist/scripts/9-52877087ef.chunk.js +1 -0
  361. package/dist/scripts/9.chunk.js +471 -7
  362. package/dist/scripts/9.chunk.js.map +1 -0
  363. package/dist/scripts/bundle-99976c17a2.min.js +1 -0
  364. package/dist/scripts/bundle-9f5ad50596.min.js +1 -0
  365. package/dist/scripts/bundle.js +34769 -1
  366. package/dist/scripts/bundle.js.map +1 -0
  367. package/dist/scripts/bundles.json +1 -1
  368. package/package.json +50 -49
  369. package/typings/libs/Trackers.d.ts +10 -0
  370. package/dist/css/33.chunk.css +0 -4
  371. package/dist/css/41.chunk.css +0 -4
  372. package/dist/css/46.chunk.css +0 -2
  373. package/dist/libs/shared/src/context/SearchAppContext.d.ts +0 -9
  374. package/dist/scripts/0-7ab5925809.chunk.js +0 -1
  375. package/dist/scripts/1-08c7a79a47.chunk.js +0 -1
  376. package/dist/scripts/10-20d3430ce2.chunk.js +0 -1
  377. package/dist/scripts/11-7a25650335.chunk.js +0 -1
  378. package/dist/scripts/12-6609af3add.chunk.js +0 -1
  379. package/dist/scripts/13-5adebd80b3.chunk.js +0 -1
  380. package/dist/scripts/14-dbd27fa3a5.chunk.js +0 -1
  381. package/dist/scripts/15-5a0e1ed526.chunk.js +0 -1
  382. package/dist/scripts/16-3adc733311.chunk.js +0 -1
  383. package/dist/scripts/17-a942a8ff32.chunk.js +0 -1
  384. package/dist/scripts/18-ab78fe1ad4.chunk.js +0 -1
  385. package/dist/scripts/19-04ba4906ea.chunk.js +0 -1
  386. package/dist/scripts/2-41fe2d7e77.chunk.js +0 -1
  387. package/dist/scripts/20-f0dcfc47a9.chunk.js +0 -1
  388. package/dist/scripts/21-33e50c0d6b.chunk.js +0 -1
  389. package/dist/scripts/22-d85dfba692.chunk.js +0 -1
  390. package/dist/scripts/23-90201310df.chunk.js +0 -1
  391. package/dist/scripts/24-bc8f0f5709.chunk.js +0 -1
  392. package/dist/scripts/25-317106a5da.chunk.js +0 -1
  393. package/dist/scripts/26-4a3372406a.chunk.js +0 -1
  394. package/dist/scripts/27-074f7ed617.chunk.js +0 -1
  395. package/dist/scripts/28-3f552efb1d.chunk.js +0 -1
  396. package/dist/scripts/29-3b0fed6546.chunk.js +0 -1
  397. package/dist/scripts/3-4c7cdc97d7.chunk.js +0 -7
  398. package/dist/scripts/30-efc1720b45.chunk.js +0 -1
  399. package/dist/scripts/31-fd10b2d2e3.chunk.js +0 -1
  400. package/dist/scripts/32-77df1d4c39.chunk.js +0 -1
  401. package/dist/scripts/33-7c092bbe19.chunk.js +0 -1
  402. package/dist/scripts/34-3c94a6fffe.chunk.js +0 -1
  403. package/dist/scripts/37-ecd001861c.chunk.js +0 -1
  404. package/dist/scripts/38-a42dc5fd6c.chunk.js +0 -1
  405. package/dist/scripts/4-9b843edce7.chunk.js +0 -1
  406. package/dist/scripts/43-9b84379d80.chunk.js +0 -1
  407. package/dist/scripts/44-1bedb97d4b.chunk.js +0 -1
  408. package/dist/scripts/45-b004111b2b.chunk.js +0 -1
  409. package/dist/scripts/47-cece788594.chunk.js +0 -1
  410. package/dist/scripts/48-722f37b837.chunk.js +0 -1
  411. package/dist/scripts/49-cb04b28057.chunk.js +0 -1
  412. package/dist/scripts/5-841e3d083b.chunk.js +0 -1
  413. package/dist/scripts/51-ed260ddadd.chunk.js +0 -1
  414. package/dist/scripts/56-83e51af2a6.chunk.js +0 -1
  415. package/dist/scripts/6-c429467dba.chunk.js +0 -1
  416. package/dist/scripts/7-3c52b41cbf.chunk.js +0 -1
  417. package/dist/scripts/9-fef5ef0698.chunk.js +0 -1
  418. package/dist/scripts/bundle-7782a79aa5.min.js +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["file://C:/ClickView Projects/@clickview/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/apps/playlists/components/playlist-list/playlist.scss?dd51","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/audience-label/AudienceLabel.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/audience-label/audience-label.scss?93bd","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-checkbox/Checkbox.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/playlist-widget-item/PlaylistWidgetItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/playlist-widget-item/playlist-widget-item.scss?2861","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/series-widget-item/SeriesWidgetItem.tsx","webpack://@clickview/lite/C:/ClickView Projects/@clickview/packages/libs/shared/src/components/widgets/items/series-widget-item/series-widget-item.scss?8475","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseCanSubmitForm.ts","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/utils/AudienceHelper.ts","file://C:/ClickView Projects/@clickview/packages/libs/shared/src/utils/FormHelper.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-actions/FilterActions.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-button/FilterButton.tsx","webpack://@clickview/lite/./src/apps/search/components/filter-button/filter-button.scss?2197","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/checkbox-filter/CheckboxFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/dropdown-filter/DropdownFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/more-filters/MoreFilters.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/radio-filter/RadioFilter.tsx","webpack://@clickview/lite/./src/apps/search/components/filter-types/radio-filter/radio-filter.scss?30e5","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/radio-filter/year-level/YearLevelRadioFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/filter-types/switch-filter/SwitchFilter.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/reset-button/ResetButton.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/search-filters/PartialSearchFilters.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/components/search-filters/SearchFilters.tsx","webpack://@clickview/lite/./src/apps/search/components/search-filters/search-filters.scss?d75c","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/reducers/FilterReducer.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/reducers/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/FilterHelper.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/SearchHelper.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/search/utils/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/bulk-upload-file-select/BulkUploadFileSelect.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/edit-student-details/EditStudentDetails.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/edit-teacher-details/EditTeacherDetails.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/user-details-form/UserDetailsForm.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/components/year-level-select/YearLevelSelect.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/enums/index.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/enums/mocks/MockUserType.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/user-manager/validation/user-validation/UserValidationSchema.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/shared/components/toggle-switch/ToggleSwitch.tsx","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/shared/hooks/useBulkCheckboxManager.tsx"],"names":[],"mappings":"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","file":"scripts/5.chunk.js","sourcesContent":["import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\n\r\nimport { Playlist, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\r\nimport { AudienceHelper } from 'libs/shared/utils/AudienceHelper';\r\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\r\nimport { BaseThumbnail } from 'libs/shared/components/thumbnails/base/BaseThumbnail';\r\nimport { ThumbnailFallback, ThumbnailFallbackType } from 'libs/shared/components/thumbnails/base/ThumbnailFallback';\r\nimport { AudienceLabelList, AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\r\n\r\nimport styles from './playlist.scss';\r\n\r\ninterface PlaylistItemProps {\r\n data: Playlist;\r\n appLink: Core.AppLink;\r\n presentationAudiences: PresentationAudience[];\r\n className?: string;\r\n showCount?: boolean;\r\n}\r\n\r\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\r\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\r\n size: ImageSize.Medium,\r\n resizeType: ResizeType.Cover\r\n });\r\n\r\n const audiences = props.data.subjectPresentationAudiences &&\r\n props.data.subjectPresentationAudiences.data;\r\n\r\n const filteredAudiences = AudienceHelper.getSortedPresentationAudiences(audiences, props.presentationAudiences);\r\n const mergedAudience = AudienceHelper.getMergedPresentationAudienceString(filteredAudiences);\r\n\r\n const count = !!props.showCount && !!props.data.videos && props.data.videos.count;\r\n\r\n return (\r\n <AppLink appLink={props.appLink}>\r\n <BaseThumbnail data={imageUrl} className={styles.playlistItem}>\r\n <ThumbnailFallback type={ThumbnailFallbackType.Playlist} />\r\n <div className={`text-white ${styles.playlistMetadata}`}>\r\n {Number.isInteger(count) &&\r\n <Text namespace='shared.playlistItem' phrase='videos' options={{ smartCount: count }} />\r\n }\r\n <h5 className='text-shadow mb-0'>{props.data.name}</h5>\r\n {!!audiences && !!audiences.length &&\r\n <AudienceLabel\r\n audience={mergedAudience}\r\n border='white'\r\n />\r\n }\r\n </div>\r\n </BaseThumbnail>\r\n </AppLink>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"basePlaylistItem\":\"cv--basePlaylistItem--2nvrp\",\"playlistItem\":\"cv--playlistItem--6o0Z2\",\"playlistMetadata\":\"cv--playlistMetadata--3MCKL\",\"partialHeading\":\"cv--partialHeading--13tO6\"};","import * as React from 'react';\r\nimport { Audience } from 'libs/shared/interfaces';\r\n\r\nimport styles from './audience-label.scss';\r\n\r\ntype AudienceBorderColour = 'dark' | 'white';\r\n\r\ninterface AudienceLabelProps {\r\n audience: Audience;\r\n border: AudienceBorderColour;\r\n}\r\n\r\nexport function AudienceLabel(props: AudienceLabelProps): JSX.Element {\r\n if (!props.audience)\r\n return <></>;\r\n\r\n return (\r\n <div className={`border rounded-pill d-inline-block px-2 mt-1 ${'border-' + props.border}`}>\r\n {props.audience.name}\r\n </div>\r\n );\r\n}\r\n\r\ninterface AudienceLabelListProps {\r\n audiences: Audience[];\r\n border: AudienceBorderColour;\r\n}\r\n\r\nexport function AudienceLabelList(props: AudienceLabelListProps): JSX.Element {\r\n if (!props.audiences || !props.audiences.length)\r\n return <></>;\r\n\r\n return (\r\n <>\r\n {props.audiences.map((a, idx) => (\r\n <span key={idx} className={styles.audienceLabelListItem}>\r\n <AudienceLabel audience={a} border={props.border} />\r\n </span>\r\n ))}\r\n </>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"audienceLabelListItem\":\"cv--audienceLabelListItem--2YGVO\"};","import * as React from 'react';\r\nimport { useFormikContext } from 'formik';\r\n\r\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\r\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nconst namespace = 'shared.formButtons';\r\n\r\nconst ENTER_KEY_CODE = 13;\r\n\r\ninterface FormButtonsProps {\r\n isNew: boolean;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function FormButtons<Values extends object>(props: FormButtonsProps): JSX.Element {\r\n const formikProps = useFormikContext<Values>();\r\n\r\n const canSubmit = useCanSubmitForm(formikProps);\r\n\r\n /**\r\n * This hook listens to \"Enter\" keypress events, and submits the form if there\r\n * are no errors. This prevents any edge cases where submitting doesn't work on\r\n * Enter normally, such as when a custom component is in focus.\r\n */\r\n React.useEffect(() => {\r\n function onKeyPress(e: KeyboardEvent): void {\r\n if (e.keyCode !== ENTER_KEY_CODE || !canSubmit)\r\n return;\r\n\r\n formikProps.validateForm().then(errors => {\r\n if (!Object.keys(errors).length)\r\n formikProps.submitForm();\r\n });\r\n }\r\n\r\n window.addEventListener('keypress', onKeyPress);\r\n return () => window.removeEventListener('keypress', onKeyPress);\r\n }, [canSubmit]);\r\n\r\n let phraseKey = 'save';\r\n if (props.isNew)\r\n phraseKey = 'create';\r\n if (props.hasNext)\r\n phraseKey = 'next';\r\n\r\n return (\r\n <SpinnerButton showSpinner={formikProps.isSubmitting} type='submit' disabled={!canSubmit}>\r\n <Text namespace={namespace} phrase={phraseKey} />\r\n </SpinnerButton>\r\n );\r\n}","import * as React from 'react';\r\n\r\ninterface CheckboxProps {\r\n id: string;\r\n checked: boolean;\r\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\r\n label?: string;\r\n name?: string;\r\n className?: string;\r\n}\r\n\r\nCheckbox.defaultProps = {\r\n checked: false,\r\n label: '',\r\n className: ''\r\n};\r\n\r\n/**\r\n * Use this checkbox outside of Formik contexts\r\n */\r\nexport function Checkbox(props: CheckboxProps): JSX.Element {\r\n return (\r\n <div className={`custom-control custom-checkbox ${props.className}`}>\r\n <input\r\n type='checkbox'\r\n className='custom-control-input'\r\n id={props.id}\r\n name={props.name}\r\n checked={props.checked}\r\n onChange={props.onChange}\r\n />\r\n <label className='custom-control-label cursor-pointer' htmlFor={props.id}>{props.label}</label>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { FieldAttributes } from 'formik';\r\nimport { Form } from 'react-bootstrap';\r\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\r\n\r\n/**\r\n * Use this checkbox within Formik contexts\r\n */\r\nexport function FormCheckbox<Values extends object>(props: FieldAttributes<FormFieldProps<Values>>): JSX.Element {\r\n const { label, ...fieldProps } = props;\r\n\r\n return (\r\n <Form.Group>\r\n <div className='custom-control custom-checkbox'>\r\n <FieldWrapper<Values> className='custom-control-input' {...fieldProps} />\r\n <Form.Label className='custom-control-label' htmlFor={fieldProps.id}>{label}</Form.Label>\r\n </div>\r\n </Form.Group>\r\n );\r\n}\r\n\r\n","import * as React from 'react';\r\nimport { useFormikContext } from 'formik';\r\n\r\ninterface CharacterCounterProps<Values extends object> {\r\n fieldName: keyof Values;\r\n limit: number;\r\n}\r\n\r\nexport function CharacterCounter<Values extends object>(props: CharacterCounterProps<Values>): JSX.Element {\r\n const { values } = useFormikContext<Values>();\r\n\r\n const field = values[props.fieldName];\r\n\r\n if (typeof field !== 'string')\r\n return <></>;\r\n\r\n return (\r\n <div className='float-right text-muted'>\r\n {field.length}/{props.limit}\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\nimport { Field, FieldAttributes, useFormikContext, ErrorMessage, FieldProps } from 'formik';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\r\n\r\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\r\n\r\nimport { CharacterCounter } from './CharacterCounter';\r\nimport { FormCheckbox } from '../form-checkbox/FormCheckbox';\r\n\r\nexport interface FormFieldProps<Values extends object> {\r\n /**\r\n * The name prop MUST be the same as the attribute\r\n * name of the value that the field is bound to.\r\n */\r\n name: string;\r\n label?: string;\r\n children?: ((props: FieldProps) => React.ReactNode) | React.ReactNode;\r\n showCharacterCounter?: boolean;\r\n}\r\n\r\nexport function FieldWrapper<Values extends object>(\r\n props: FieldAttributes<FormFieldProps<Values>> & { className: string }\r\n): React.ReactElement {\r\n const { children, ...fieldProps } = props;\r\n\r\n return (\r\n <Field {...fieldProps}>\r\n {FunctionHelper.isFunction(children)\r\n ? (f: FieldProps) => children(f)\r\n : React.Children.count(children) ? children : null\r\n }\r\n </Field>\r\n );\r\n}\r\n\r\nexport function FormField<Values extends object>(props: FieldAttributes<FormFieldProps<Values>>): React.ReactElement {\r\n const { label, className, showCharacterCounter, ...fieldProps } = props;\r\n\r\n const { errors, touched } = useFormikContext<Values>();\r\n\r\n if (fieldProps.type === 'checkbox')\r\n return <FormCheckbox<Values> {...props} />;\r\n\r\n return (\r\n <Form.Group>\r\n {!!label && <Form.Label htmlFor={fieldProps.id}>{label}</Form.Label>}\r\n <FieldWrapper<Values>\r\n className={FormHelper.getCustomFormControlClassName(errors, touched, fieldProps.name, className)}\r\n {...fieldProps}\r\n />\r\n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\r\n <CharacterCounter\r\n fieldName={(fieldProps.name as keyof Values)}\r\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\r\n />\r\n }\r\n <ErrorMessage name={fieldProps.name}>\r\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\r\n </ErrorMessage>\r\n </Form.Group>\r\n );\r\n}","import * as React from 'react';\r\nimport { Formik, FormikValues, FormikConfig, FormikProps, FormikHelpers, useFormikContext, FormikContextType } from 'formik';\r\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\n\r\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\r\n const values = ObjectHelper.deepClone(initialValues);\r\n\r\n Object.keys(values).forEach((key: keyof Values) => {\r\n if (!values.hasOwnProperty(key))\r\n return;\r\n\r\n if (ObjectHelper.isObject(values[key]))\r\n values[key] = omitNullInitialValues(values[key]);\r\n else if (values[key] === null)\r\n delete values[key];\r\n });\r\n\r\n return values;\r\n}\r\n\r\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\r\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\r\n\r\ninterface InitialStatus {\r\n allowInitialSubmit: boolean;\r\n}\r\n\r\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\r\n initialValues: FormValues | ApiValues;\r\n onSubmit: (data: FormValues, onDone: () => void) => void;\r\n castInitialValues?: boolean; // cast to validationSchema\r\n castValuesOnSubmit?: boolean; // cast to validationSchema\r\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\r\n resetOnSubmit?: boolean;\r\n}\r\n\r\nFormWrapper.defaultProps = {\r\n castInitialValues: true,\r\n castValuesOnSubmit: true\r\n};\r\n\r\nexport function FormWrapper<\r\n FormValues extends FormikValues = FormikValues,\r\n ApiValues extends FormikValues = FormikValues,\r\n ExtraProps = {}\r\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\r\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, resetOnSubmit, ...formikProps } = props;\r\n\r\n /**\r\n * If castInitialValues is true, cast initialValues to the validationSchema.\r\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\r\n */\r\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\r\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\r\n : initialValues;\r\n\r\n const onSubmitHandler = (\r\n values: FormValues,\r\n { setSubmitting, resetForm }: FormikHelpers<FormValues>\r\n ) => {\r\n /**\r\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\r\n * This is useful for trimming inputs:\r\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\r\n */\r\n const formattedData = castValuesOnSubmit && props.validationSchema\r\n ? props.validationSchema.cast(values)\r\n : values;\r\n\r\n onSubmit(formattedData, () => {\r\n resetOnSubmit && resetForm();\r\n setSubmitting(false);\r\n });\r\n };\r\n\r\n const initialStatus: InitialStatus = {\r\n allowInitialSubmit: props.allowInitialSubmit\r\n };\r\n\r\n return (\r\n <Formik<FormValues, ExtraProps>\r\n enableReinitialize\r\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\r\n initialValues={formattedInitialValues}\r\n onSubmit={onSubmitHandler}\r\n initialStatus={initialStatus}\r\n >\r\n {FunctionHelper.isFunction(props.children)\r\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\r\n : React.Children.count(props.children) ? props.children : null\r\n }\r\n </Formik>\r\n );\r\n}\r\n\r\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\r\n return useFormikContext<T>();\r\n}","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\n\r\nimport { Playlist, PresentationAudience, WidgetContext } from 'libs/shared/interfaces';\r\nimport { PlaylistItem } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistItem';\r\n\r\nimport styles from './playlist-widget-item.scss';\r\n\r\nexport interface PlaylistWidgetItemProps {\r\n data: Playlist;\r\n appLink: Core.AppLink;\r\n presentationAudiences: PresentationAudience[];\r\n context: WidgetContext;\r\n}\r\n\r\nexport function PlaylistWidgetItem(props : PlaylistWidgetItemProps): JSX.Element {\r\n const { context, ...otherProps } = props;\r\n\r\n return (\r\n <div className={`position-relative p-1 flex-shrink-0 ${styles.width}`}>\r\n <PlaylistItem {...otherProps} />\r\n </div>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"width\":\"cv--width--wNWEd\"};","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\r\n\r\nimport { useHoverIntent } from 'libs/shared/hooks/UseHover';\r\nimport { Series, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { AudienceHelper } from 'libs/shared/utils/AudienceHelper';\r\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\r\nimport { BaseThumbnail, AspectRatio } from 'libs/shared/components/thumbnails/base/BaseThumbnail';\r\nimport { ThumbnailFallback, ThumbnailFallbackType } from 'libs/shared/components/thumbnails/base/ThumbnailFallback';\r\nimport { ThumbnailSize } from 'libs/shared/enums/ThumbnailSize';\r\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\r\nimport { BadgeType, Badge } from 'libs/shared/components/badges/Badge';\r\n\r\nimport styles from './series-widget-item.scss';\r\n\r\nexport interface SeriesWidgetItemProps {\r\n data: Series;\r\n appLink: Core.AppLink;\r\n audiences: PresentationAudience[];\r\n preloadImage?: boolean;\r\n}\r\n\r\nexport function SeriesWidgetItem(props : SeriesWidgetItemProps): JSX.Element {\r\n const { data: series, appLink, preloadImage } = props;\r\n\r\n const seriesAppLink: Core.AppLink = {\r\n ...appLink,\r\n args: [ series.id, TextHelper.slugify(series.name) ]\r\n };\r\n\r\n /**\r\n * Subject audiences currently take render precedence over rating.\r\n * \r\n * This means that until we properly add productionCompanies to series, we\r\n * should expect only CV series to have a subject audience. Any TV series\r\n * from the Exchange should only have a rating. \r\n */\r\n\r\n let audiences = series && series.subjectPresentationAudiences &&\r\n series.subjectPresentationAudiences.data || [];\r\n\r\n const filteredAudiences = AudienceHelper.getSortedPresentationAudiences(audiences, props.audiences);\r\n const mergedAudience = AudienceHelper.getMergedPresentationAudienceString(filteredAudiences);\r\n\r\n const [ hoverRef, isHovering ] = useHoverIntent<HTMLDivElement>(styles.hoverActive);\r\n\r\n return (\r\n <AppLink\r\n key={series.id}\r\n appLink={seriesAppLink}\r\n className={`position-relative p-1 flex-shrink-0 ${styles.width}`}\r\n >\r\n <div ref={hoverRef}>\r\n {isHovering &&\r\n <div className={`p-3 text-white text-center ${styles.mask}`}>\r\n <h3 className='h4'>{series.name}</h3>\r\n <p>{series.description}</p>\r\n </div>\r\n }\r\n <BaseThumbnail\r\n data={series.tallPoster}\r\n aspectRatio={AspectRatio.NineBySixteen}\r\n preload={preloadImage}\r\n size={ThumbnailSize.Large}>\r\n <ThumbnailFallback type={ThumbnailFallbackType.Series} />\r\n <div className={`position-absolute text-white ${styles.labelContainer}`}>\r\n {!!audiences && audiences.length\r\n ? <AudienceLabel audience={ mergedAudience } border='white' />\r\n : <Badge type={BadgeType.Rating} data={series.rating} />\r\n }\r\n </div>\r\n </BaseThumbnail>\r\n </div>\r\n </AppLink>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"partialLoadingHeading\":\"cv--partialLoadingHeading--1RLPq\",\"partialLoading\":\"cv--partialLoading--oArG4\",\"labelContainer\":\"cv--labelContainer--QLCgm\",\"hoverActive\":\"cv--hoverActive--3Aleb\",\"mask\":\"cv--mask--2M2Zz\",\"width\":\"cv--width--TQg2K\"};","import * as React from 'react';\r\nimport { FormikValues, FormikProps } from 'formik';\r\n\r\n/**\r\n * useCanSubmitForm determines if a form can be submitted.\r\n * \r\n * It will return true if a form is valid and has been changed from it's initial state.\r\n * \r\n * A common use case for this is determining whether or not to enable\r\n * a submit button in a form.\r\n */\r\nexport function useCanSubmitForm<Values extends FormikValues>(formikProps: FormikProps<Values>): boolean {\r\n const [ canSubmit, setCanSubmit ] = React.useState(false);\r\n\r\n React.useEffect(() => {\r\n if (!formikProps.isValid) {\r\n setCanSubmit(false);\r\n return;\r\n }\r\n\r\n // If the form values have changed of if allowInitialSubmit is true, set canSubmit to true.\r\n if (formikProps.dirty || formikProps.initialStatus?.allowInitialSubmit)\r\n setCanSubmit(true);\r\n else\r\n setCanSubmit(false);\r\n\r\n }, [ formikProps.isValid, formikProps.initialStatus?.allowInitialSubmit, formikProps.dirty, formikProps.values ]);\r\n\r\n React.useEffect(() => {\r\n if (formikProps.isSubmitting)\r\n setCanSubmit(false);\r\n }, [formikProps.isSubmitting]);\r\n\r\n return canSubmit;\r\n}\r\n","import { HashObject } from 'libs/common/react/interfaces';\r\nimport { Audience, PresentationAudience, BaseObject } from 'libs/shared/interfaces';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nconst DIGIT_REGEX = /([0-9]+)/ig;\r\nconst NAME_REGEX = /(^\\w+)/ig;\r\nconst COUNT_OFFSET = 1;\r\n\r\nfunction processAudienceRanges(audienceValues: number[]): string[] {\r\n /**\r\n * Lookahead by increments of offset\r\n */\r\n let offset = COUNT_OFFSET;\r\n\r\n let initialVal, nextVal;\r\n let isContinguous: boolean = false;\r\n\r\n const ranges: string[] = [];\r\n\r\n // Audience values need to be in ascending order\r\n audienceValues = audienceValues.sort((a, b) => a - b);\r\n\r\n let i, j;\r\n\r\n for (i = 0; i < audienceValues.length; i++) {\r\n j = i + 1;\r\n\r\n // Set our lower boundary to compare against\r\n if (!isContinguous)\r\n initialVal = audienceValues[i];\r\n\r\n nextVal = audienceValues[j];\r\n\r\n /**\r\n * Where the next number is also the next incremental value\r\n * we're going to continue iterating until the next value\r\n * is no longer contiguos.\r\n */\r\n if (audienceValues[i] + offset === nextVal) {\r\n isContinguous = true;\r\n\r\n } else if (isContinguous) {\r\n\r\n /**\r\n * Where we were tracking a contiguous set, format appropriately \r\n * and store the vals\r\n */\r\n\r\n ranges.push(`${initialVal} - ${audienceValues[i]}`);\r\n isContinguous = false;\r\n\r\n } else {\r\n\r\n /**\r\n * Where the values arent contiguous, just store the current value\r\n */\r\n\r\n ranges.push(`${audienceValues[i]}`);\r\n isContinguous = false;\r\n }\r\n\r\n }\r\n\r\n return ranges;\r\n}\r\n\r\nexport const AudienceHelper = {\r\n /**\r\n * This is needed to sort an object's audiences, as they are not sorted by the backend.\r\n * To do this, we take the presentation audiences (sorted) and filter them by the object's\r\n * audiences, leaving behind a sorted array of object audiences.\r\n */\r\n getSortedPresentationAudiences(\r\n objectAudiences: Audience[],\r\n presentationAudiences: PresentationAudience[]\r\n ): PresentationAudience[] {\r\n const objectAudienceIds = objectAudiences.map(audience => audience.id.toString());\r\n\r\n /**\r\n * Remove audiences that aren't relevant for the user's current presentation\r\n */\r\n const filteredAudiences = presentationAudiences.filter(presAudience => {\r\n return objectAudienceIds.includes(presAudience.masterId.toString());\r\n });\r\n\r\n return filteredAudiences;\r\n },\r\n\r\n getMergedPresentationAudienceString(presentationAudiences: PresentationAudience[]): PresentationAudience {\r\n if (presentationAudiences.length === 1)\r\n return presentationAudiences[0];\r\n\r\n /**\r\n * Create a string with all of the audiences\r\n */\r\n const valuesStr = presentationAudiences.map(a => a.name).join(',');\r\n\r\n /**\r\n * Extract all the numbers and matches from the string\r\n * Where there aren't matches, just return the first Audience.\r\n */\r\n const valMatches = valuesStr.match(DIGIT_REGEX);\r\n const nameMatches = valuesStr.match(NAME_REGEX);\r\n\r\n if (!valMatches || !nameMatches) return presentationAudiences[0];\r\n\r\n const audienceValues = valMatches\r\n .map(l => +l) || [];\r\n\r\n /**\r\n * Build set of logical audience ranges\r\n */\r\n const audienceRange = processAudienceRanges(audienceValues);\r\n\r\n /**\r\n * Get matches name\r\n */\r\n const audienceName = nameMatches[0];\r\n\r\n return {\r\n name: `${audienceName} ${audienceRange.join(' , ')}`\r\n } as PresentationAudience;\r\n },\r\n\r\n /**\r\n * This function assumes the members array passed in is ordered by `name`.\r\n */\r\n sortMembersWithDuplicateNamesByAudience(members: BaseObject[]): BaseObject[] {\r\n // Returns the lowest level audience out of an array of audience objects by looking at the name\r\n const getLowestAudience = (audiences: Audience[]) => {\r\n let lowestAudience: Audience;\r\n let lowestAudienceDigit: number;\r\n\r\n audiences.forEach(audience => {\r\n const digit = +ArrayHelper.first(audience.name.match(DIGIT_REGEX));\r\n\r\n if (!lowestAudience) {\r\n lowestAudience = audience;\r\n lowestAudienceDigit = digit;\r\n return;\r\n }\r\n\r\n if (digit > lowestAudienceDigit)\r\n lowestAudience = audience;\r\n });\r\n\r\n return lowestAudience;\r\n };\r\n\r\n // This is used to track how many times a member's name appears in the collection\r\n const nameCountMap: HashObject<number> = {};\r\n\r\n let sorted: BaseObject[] = [];\r\n\r\n members.forEach(member => {\r\n if (!nameCountMap[member.name]) {\r\n nameCountMap[member.name] = 1;\r\n sorted.push(member);\r\n return;\r\n }\r\n\r\n sorted.push(member);\r\n nameCountMap[member.name]++;\r\n\r\n // Take the slice of duplicates that we want to sort by audience\r\n const slice = sorted.splice(sorted.length - nameCountMap[member.name]);\r\n\r\n // Sort the slice by lowest audience\r\n const sortedSlice = slice.sort((a: any, b: any) => {\r\n const firstObjLowestAudience = getLowestAudience(a.subjectPresentationAudiences.data);\r\n const secondObjLowestAudience = getLowestAudience(b.subjectPresentationAudiences.data);\r\n\r\n return firstObjLowestAudience.name.localeCompare(secondObjLowestAudience.name);\r\n });\r\n\r\n sorted = sorted.concat(sortedSlice);\r\n });\r\n\r\n return sorted;\r\n }\r\n};","import { FormikErrors, FormikTouched, getIn } from 'formik';\r\n\r\nexport const FormHelper = {\r\n getCustomFormControlClassName<T>(\r\n errors: FormikErrors<T>,\r\n touched: FormikTouched<T>,\r\n attribute: string,\r\n additionalClassName?: string\r\n ): string {\r\n let className = 'form-control';\r\n\r\n // Using getIn as it supports dot notation\r\n if (getIn(touched, attribute) && getIn(errors, attribute))\r\n className += ' is-invalid';\r\n\r\n if (additionalClassName)\r\n className += ` ${additionalClassName}`;\r\n\r\n return className;\r\n }\r\n};","import * as React from 'react';\r\nimport * as ReactIntersectionObserver from 'react-intersection-observer';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { ContextService } from 'libs/shared/services/ContextService';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\n\r\nimport { FilterContext, FilterPayloadType } from 'apps/search/reducers';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\nimport { WorkflowPhase, UserAction, FilterDescriptor } from 'libs/analytics/interfaces';\r\n\r\nconst namespace = 'search.filterActions';\r\n\r\nconst triggerAppLink = (stateChange: FilterPayloadType) => {\r\n const currentQueryParams = Core.LocationUtils.GetQuery();\r\n\r\n const currentAppLink = ContextService.getCurrentRoute().appLink;\r\n\r\n Core.AppLinkHelper.trigger({\r\n application: currentAppLink.application,\r\n action: currentAppLink.action,\r\n params: FilterHelper.buildQueryParams(currentQueryParams, stateChange)\r\n });\r\n};\r\n\r\ntype FilterActionsProps = FilterPayloadType & PropsWithAnalyticsOptions<{\r\n className?: string;\r\n}>;\r\n\r\nFilterActions.defaultProps = {\r\n active: false,\r\n className: ''\r\n};\r\n\r\nexport function FilterActions(props: FilterActionsProps): JSX.Element {\r\n const { dispatch } = React.useContext(FilterContext);\r\n\r\n const [ triggerOnClose, setTriggerOnClose ] = React.useState(false);\r\n let [ ref, inView ] = ReactIntersectionObserver.useInView();\r\n\r\n React.useEffect(() => {\r\n if (typeof (window as any).IntersectionObserver === 'undefined')\r\n return;\r\n\r\n if (inView) {\r\n setTriggerOnClose(true);\r\n return;\r\n }\r\n\r\n if (!inView && triggerOnClose) {\r\n setTriggerOnClose(false);\r\n applyFilter(false);\r\n }\r\n }, [inView]);\r\n\r\n function applyFilter(applyClicked: boolean): void {\r\n // The default value should not be set as a query param\r\n const isDefaultValue = props.selection?.length === 1 && ArrayHelper.first(props.selection)?.default;\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: props.filter.name,\r\n selection: (props.selection && !isDefaultValue) ? props.selection : [],\r\n isActive: props.active && !isDefaultValue,\r\n applyClicked\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n workflowPhase: WorkflowPhase.Complete,\r\n actionType: UserAction.Filter\r\n }));\r\n\r\n const payload: FilterPayloadType = {\r\n filter: props.filter,\r\n active: props.active && !isDefaultValue,\r\n selection: (props.selection && !isDefaultValue) ? props.selection : []\r\n };\r\n\r\n dispatch({ type: 'apply', payload });\r\n triggerAppLink(payload);\r\n }\r\n\r\n function onClickReset(e: React.MouseEvent): void {\r\n e.preventDefault();\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: props.filter.name\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n workflowPhase: WorkflowPhase.Complete,\r\n actionType: UserAction.Filter,\r\n descriptor: FilterDescriptor.Reset\r\n }));\r\n\r\n const payload: FilterPayloadType = {\r\n filter: props.filter,\r\n active: false,\r\n selection: null\r\n };\r\n\r\n dispatch({ type: 'reset', payload });\r\n triggerAppLink(payload);\r\n }\r\n\r\n function onClickApply(e: React.MouseEvent): void {\r\n e.preventDefault();\r\n\r\n applyFilter(true);\r\n }\r\n\r\n return (\r\n <div ref={ref} className={`d-flex justify-content-between ${props.className}`}>\r\n <DivButton className='text-muted hover-text-underline cursor-pointer' onClick={onClickReset}>\r\n <Text namespace={namespace} phrase='reset' />\r\n </DivButton>\r\n\r\n <DivButton className='info-link' onClick={onClickApply}>\r\n <Text namespace={namespace} phrase='apply' />\r\n </DivButton>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\nimport { Dropdown } from 'react-bootstrap';\r\n\r\nimport { SearchFilter, MoreFilters } from 'apps/search/interfaces';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nimport styles from './filter-button.scss';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype FilterButtonProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter | MoreFilters;\r\n}>;\r\n\r\nexport function FilterButton(props: FilterButtonProps): JSX.Element {\r\n const [ label, setLabel ] = React.useState(props.filter.name);\r\n\r\n const FilterComponent = props.filter.customComponent\r\n ? props.filter.customComponent\r\n : FilterHelper.mapTypeToComponent(props.filter.type);\r\n\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n React.useEffect(() => {\r\n setLabel(FilterHelper.getLabel(props.filter, filterState));\r\n }, [ props.filter, filterState.selection ]);\r\n\r\n const baseClass = `${styles.filterButton} mx-1 btn`;\r\n const colorClass = filterState.active ? 'btn-info' : 'btn-light';\r\n const caretClass = props.filter.type !== 'dropdown' ? styles.hideCaret : '';\r\n\r\n return (\r\n <Dropdown>\r\n <Dropdown.Toggle id={props.filter.id} className={`${baseClass} ${colorClass} ${caretClass}`}>\r\n {label}\r\n </Dropdown.Toggle>\r\n\r\n <Dropdown.Menu onClick={(e: React.MouseEvent) => e.stopPropagation()}>\r\n <div className={`${styles.filterItem} mx-1 ${props.filter.type !== 'dropdown' ? 'px-2 py-1' : ''}`}>\r\n <FilterComponent analyticsOptions={props.analyticsOptions} filter={props.filter} />\r\n </div>\r\n </Dropdown.Menu>\r\n </Dropdown>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"filterButton\":\"cv--filterButton--2LJ1G\",\"hideCaret\":\"cv--hideCaret--2OStB\",\"filterItem\":\"cv--filterItem--13K5j\"};","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\r\n\r\nimport { useBulkCheckboxManager } from 'shared/hooks/useBulkCheckboxManager';\r\n\r\nimport { SearchFilter } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nimport { FilterActions } from '../../filter-actions/FilterActions';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype CheckboxFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function CheckboxFilter(props: CheckboxFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const { onToggleItem, isChecked, getSelected } = useBulkCheckboxManager(props.filter.options, {\r\n preselectedIds: filterState.selection?.map(s => s.id) || []\r\n });\r\n\r\n const selections = getSelected().map(optionName => props.filter.options.find(o => o.id === optionName));\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n {props.filter.options.map(option => {\r\n return (\r\n <Checkbox\r\n key={option.id}\r\n label={option.name}\r\n name={option.id}\r\n id={option.id}\r\n onChange={() => onToggleItem(option.id)}\r\n checked={isChecked(option.id)}\r\n className='my-1'\r\n />\r\n );\r\n })}\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!selections.length}\r\n filter={props.filter}\r\n selection={selections}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","import React from 'react';\r\n\r\nimport { Dropdown } from 'react-bootstrap';\r\n\r\nimport { SearchFilter, FilterOption } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from '../../filter-actions/FilterActions';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype DropdownFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function DropdownFilter(props: DropdownFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n\r\n return (\r\n <>\r\n {props.filter.options.map(option => (\r\n <Dropdown.Item\r\n key={option.id}\r\n onClick={() => setCurrentSelection([option])}\r\n >\r\n {option.name}\r\n </Dropdown.Item>\r\n ))}\r\n\r\n <FilterActions\r\n active={!!currentSelection}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n className='pt-1 px-2'\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","export * from './checkbox-filter/CheckboxFilter';\r\nexport * from './more-filters/MoreFilters';\r\nexport * from './switch-filter/SwitchFilter';\r\nexport * from './dropdown-filter/DropdownFilter';\r\nexport * from './radio-filter/RadioFilter';\r\nexport * from './radio-filter/year-level/YearLevelRadioFilter';","import * as React from 'react';\r\n\r\ninterface MoreFiltersProps {}\r\n\r\nexport function MoreFilters(props: MoreFiltersProps): JSX.Element {\r\n return (\r\n <></>\r\n );\r\n}","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nimport { SearchFilter } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from 'apps/search/components';\r\n\r\nimport styles from './radio-filter.scss';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype RadioFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function RadioFilter(props: RadioFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n React.useEffect(() => setCurrentSelection(filterState.selection), [filterState.selection]);\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n {props.filter.options.map(option => {\r\n const isSelected = currentSelection?.length && option.id === ArrayHelper.first(currentSelection).id;\r\n\r\n return (\r\n <Form.Check\r\n key={option.id}\r\n custom\r\n type='radio'\r\n label={option.name}\r\n name={option.id}\r\n id={option.id}\r\n value={option.id}\r\n onChange={() => setCurrentSelection([option])}\r\n checked={isSelected}\r\n className={styles.radioFilter}\r\n />\r\n );\r\n })}\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!currentSelection?.length}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"radioFilter\":\"cv--radioFilter--3srm_\"};","import * as React from 'react';\r\nimport { Form } from 'react-bootstrap';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\n\r\nimport { SearchFilter, FilterOption } from 'apps/search/interfaces';\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { FilterActions } from 'apps/search/components';\r\n\r\nimport { YearLevelSelect } from 'apps/user-manager/components';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype YearLevelRadioFilterProps = PropsWithAnalyticsOptions<{\r\n filter: SearchFilter;\r\n}>;\r\n\r\nexport function YearLevelRadioFilter(props: YearLevelRadioFilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ currentSelection, setCurrentSelection ] = React.useState(filterState.selection);\r\n\r\n React.useEffect(() => setCurrentSelection(filterState.selection), [filterState.selection]);\r\n\r\n function onSelect(yearLevel: FilterOption): void {\r\n setCurrentSelection([yearLevel]);\r\n }\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n\r\n <Form className='mb-3'>\r\n <YearLevelSelect\r\n yearLevels={props.filter.options}\r\n onSelect={onSelect}\r\n selected={ArrayHelper.first(currentSelection)}\r\n />\r\n </Form>\r\n\r\n <FilterActions\r\n active={!!currentSelection?.length}\r\n filter={props.filter}\r\n selection={currentSelection}\r\n analyticsOptions={props.analyticsOptions}\r\n />\r\n </>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { ToggleSwitch } from 'shared/components/toggle-switch/ToggleSwitch';\r\n\r\nimport { FilterProps } from 'apps/search/interfaces';\r\nimport { FilterActions } from 'apps/search/components';\r\nimport { FilterContext } from 'apps/search/reducers';\r\n\r\nexport function SwitchFilter(props: FilterProps): JSX.Element {\r\n const { state } = React.useContext(FilterContext);\r\n const filterState = state[props.filter.id];\r\n\r\n const [ active, setActive ] = React.useState<boolean>(filterState.active);\r\n\r\n return (\r\n <>\r\n <h3 className='h6 mb-2'>{props.filter.name}</h3>\r\n <p className='d-inline-block w-75 mr-auto'>{props.filter.description}</p>\r\n\r\n <ToggleSwitch onClick={() => setActive(!active)} on={active} />\r\n\r\n <FilterActions active={active} filter={props.filter} analyticsOptions={props.analyticsOptions} />\r\n </>\r\n );\r\n}","export * from './search-filters/SearchFilters';\r\nexport * from './search-filters/PartialSearchFilters';\r\nexport * from './filter-button/FilterButton';\r\nexport * from './filter-actions/FilterActions';\r\nexport * from './reset-button/ResetButton';\r\nexport * from './filter-types';","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { ContextService } from 'libs/shared/services/ContextService';\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { FilterContext } from 'apps/search/reducers';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { UserAction, FilterDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype ResetButtonProps = PropsWithAnalyticsOptions<{\r\n currentQueryParam: string;\r\n}>;\r\n\r\nexport function ResetButton(props: ResetButtonProps): JSX.Element {\r\n const { dispatch } = React.useContext(FilterContext);\r\n\r\n const onClickReset = () => {\r\n const currentAppLink = ContextService.getCurrentRoute().appLink;\r\n\r\n const nextAppLink: Core.AppLink = {\r\n application: currentAppLink.application,\r\n action: currentAppLink.action\r\n };\r\n\r\n AnalyticsHelper.logUserAction({\r\n filter: 'All'\r\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\r\n actionType: UserAction.Filter,\r\n descriptor: FilterDescriptor.Reset,\r\n workflowPhase: WorkflowPhase.Complete\r\n }));\r\n\r\n if (props.currentQueryParam)\r\n nextAppLink.params = { query: props.currentQueryParam };\r\n\r\n Core.AppLinkHelper.trigger(nextAppLink);\r\n\r\n dispatch({\r\n type: 'trigger-reset',\r\n payload: {}\r\n });\r\n };\r\n\r\n return (\r\n <DivButton\r\n onClick={onClickReset}\r\n className='hover-text-underline cursor-pointer d-flex align-items-center ml-2'\r\n >\r\n <Text namespace='search.resetButton' phrase='reset' />\r\n </DivButton>\r\n );\r\n}","import * as React from 'react';\r\nimport styles from './search-filters.scss';\r\n\r\ninterface PartialSearchFiltersProps {\r\n count?: number;\r\n hideHeading?: boolean;\r\n}\r\n\r\nexport function PartialSearchFilters({ count = 6, hideHeading }: PartialSearchFiltersProps): JSX.Element {\r\n return (\r\n <div className='d-flex'>\r\n {!hideHeading && (\r\n <div className={`\r\n ${styles.partialFilterHeading}\r\n partial-loading-background\r\n d-inline-block\r\n pr-2\r\n border-right\r\n d-flex\r\n align-items-center\r\n my-auto\r\n `} />\r\n )}\r\n\r\n <div className='d-flex pl-1'>\r\n {Array(count).fill(null).map((item, index) => (\r\n <div key={index} className={`${styles.partialButton} partial-loading-background mx-1`} />\r\n ))}\r\n </div>\r\n </div>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\r\n\r\nimport { FilterButton, ResetButton } from 'apps/search/components';\r\nimport { FilterHelper } from 'apps/search/utils';\r\nimport { FilterReducer, FilterContext } from 'apps/search/reducers';\r\nimport { SearchFilter, MoreFilters } from 'apps/search/interfaces';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\nimport { PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\n\r\ntype SearchFiltersProps = PropsWithAnalyticsOptions<{\r\n queryParams: HashObject;\r\n mainFilters: SearchFilter[];\r\n moreFilters?: MoreFilters;\r\n hideHeading?: boolean;\r\n}>;\r\n\r\nexport function SearchFilters(props: SearchFiltersProps): JSX.Element {\r\n const { queryParams, mainFilters, moreFilters, hideHeading } = props;\r\n\r\n const initialState = React.useMemo(() => {\r\n return FilterHelper.deriveInitialStateFromQuery(queryParams, mainFilters, moreFilters);\r\n }, [queryParams]);\r\n\r\n const [ state, dispatch ] = React.useReducer(FilterReducer, initialState);\r\n\r\n React.useEffect(() => {\r\n if (!state.bulkReset)\r\n return;\r\n\r\n dispatch({\r\n type: 'bulk-reset',\r\n payload: FilterHelper.deriveInitialStateFromQuery({}, mainFilters, moreFilters) as any\r\n });\r\n }, [state]);\r\n\r\n return (\r\n <FilterContext.Provider value={{ state, dispatch }}>\r\n <LanguageNamespaceContext.Provider value='search.searchFilters'>\r\n <section className='d-flex'>\r\n {!hideHeading && (\r\n <h2 className='h5 mb-0 d-inline-block pr-2 border-right d-flex align-items-center'><Text phrase='heading' /></h2>\r\n )}\r\n\r\n <div className='d-flex'>\r\n {mainFilters.map(f => <FilterButton key={f.id} filter={f} analyticsOptions={props.analyticsOptions} />)}\r\n\r\n {moreFilters && (\r\n <FilterButton key={moreFilters.id} filter={moreFilters} analyticsOptions={props.analyticsOptions} />\r\n )}\r\n\r\n {FilterHelper.hasActiveFilters(queryParams) &&\r\n <ResetButton currentQueryParam={queryParams.query} analyticsOptions={props.analyticsOptions} />\r\n }\r\n </div>\r\n </section>\r\n </LanguageNamespaceContext.Provider>\r\n </FilterContext.Provider>\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"partialFilterHeading\":\"cv--partialFilterHeading--2zHGT\",\"partialButton\":\"cv--partialButton--3Gy7Y\"};","import { createContext } from 'react';\r\n\r\nimport { ReducerActions } from 'libs/common/react/interfaces';\r\nimport { SearchFilter, FilterIds, FilterOption } from 'apps/search/interfaces';\r\n\r\nexport type FilterState = {\r\n active: boolean;\r\n selection?: FilterOption[];\r\n};\r\n\r\ntype FilterStateHashFilters = {\r\n [key in FilterIds]: FilterState\r\n};\r\n\r\nexport type FilterStateHash = FilterStateHashFilters & {\r\n bulkReset?: boolean;\r\n};\r\n\r\nexport type FilterActionType = 'apply' | 'reset' | 'bulk-reset' | 'trigger-reset';\r\n\r\nexport interface FilterPayloadType {\r\n filter: SearchFilter;\r\n active: boolean;\r\n selection?: FilterOption[];\r\n}\r\n\r\n/**\r\n * Context\r\n */\r\ninterface FilterContextType {\r\n state: FilterStateHash;\r\n dispatch: React.Dispatch<ReducerActions<FilterActionType>>;\r\n}\r\n\r\nexport const FilterContext = createContext<FilterContextType>(null);\r\n\r\n/**\r\n * Reducer - root level keys should match the filter object's corresponding \"id\" field\r\n */\r\nexport function FilterReducer(\r\n state: FilterStateHash,\r\n action: ReducerActions<FilterActionType, FilterPayloadType>\r\n): FilterStateHash {\r\n switch (action.type) {\r\n case 'apply':\r\n return {\r\n ...state,\r\n [action.payload.filter.id]: {\r\n active: action.payload.active,\r\n selection: action.payload.selection\r\n }\r\n };\r\n\r\n case 'reset':\r\n return {\r\n ...state,\r\n [action.payload.filter.id]: {\r\n active: action.payload.active,\r\n selection: action.payload.selection\r\n }\r\n };\r\n\r\n case 'trigger-reset':\r\n return {\r\n ...state,\r\n bulkReset: true\r\n };\r\n\r\n case 'bulk-reset':\r\n return {\r\n ...state,\r\n ...action.payload,\r\n bulkReset: false\r\n };\r\n\r\n default:\r\n return state;\r\n }\r\n}","export * from './FilterReducer';","import * as React from 'react';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\n\r\nimport { SearchFilter, MoreFilters, FilterType, FilterProps, FilterOption, FilterIds } from 'apps/search/interfaces';\r\nimport { FilterStateHash, FilterPayloadType, FilterState } from 'apps/search/reducers';\r\nimport { SwitchFilter, RadioFilter, CheckboxFilter, DropdownFilter, YearLevelRadioFilter, MoreFilters as MoreFiltersComponent } from 'apps/search/components/filter-types';\r\nimport { MockYearLevel, MockClassroom } from 'apps/user-manager/interfaces';\r\n\r\nconst getPhrase = LanguageService.encloseNamespace('search.utils');\r\n\r\ninterface WithStatementObject {\r\n sortKey?: string;\r\n sortValue?: string;\r\n assocs?: string[];\r\n}\r\n\r\ntype FiltersDictionary = {\r\n [key: string]: (options?: any) => SearchFilter;\r\n};\r\n\r\nexport const Filters: FiltersDictionary = {\r\n SortByName: (options: FilterOption[]) => ({\r\n id: 'sortName',\r\n name: getPhrase('firstNameAToZ'),\r\n type: 'dropdown',\r\n options\r\n }),\r\n YearLevel: (options: FilterOption[]) => ({\r\n id: 'yearLevel', // \"name\" should match the state keys in `FilterReducer`\r\n name: getPhrase('yearLevel'),\r\n type: 'radio',\r\n customComponent: YearLevelRadioFilter,\r\n options\r\n }),\r\n ObjectType: (options: FilterOption[]) => ({\r\n id: 'objectType',\r\n name: getPhrase('objectTypes'),\r\n type: 'radio',\r\n options\r\n }),\r\n Ratings: (options: FilterOption[]) => ({\r\n id: 'ratings',\r\n name: getPhrase('ratings'),\r\n type: 'rating',\r\n options\r\n }),\r\n Interactives: () => ({\r\n id: 'interactives',\r\n name: getPhrase('interactives'),\r\n type: 'switch',\r\n description: getPhrase('interactivesDescription')\r\n }),\r\n Clips: () => ({\r\n id: 'clips',\r\n name: getPhrase('clips'),\r\n type: 'switch',\r\n description: getPhrase('clipsDescription')\r\n }),\r\n Classroom: (options: FilterOption[]) => ({\r\n id: 'classroom',\r\n name: getPhrase('classroom'),\r\n type: 'checkbox',\r\n options\r\n })\r\n};\r\n\r\nexport const FilterHelper = {\r\n getMoreFilters(): MoreFilters {\r\n return {\r\n id: 'moreFilters',\r\n name: getPhrase('moreFilters'),\r\n type: 'more-filters',\r\n filters: []\r\n };\r\n },\r\n\r\n mapTypeToComponent(type: FilterType): (props: FilterProps) => JSX.Element {\r\n switch (type) {\r\n case 'switch':\r\n return (props: any) => <SwitchFilter key={props.id} {...props} />;\r\n case 'checkbox':\r\n return (props: any) => <CheckboxFilter key={props.id} {...props} />;\r\n case 'radio':\r\n return (props: any) => <RadioFilter key={props.id} {...props} />;\r\n case 'rating':\r\n return (props: any) => <SwitchFilter key={props.id} {...props} />;\r\n case 'dropdown':\r\n return (props: any) => <DropdownFilter key={props.id} {...props} />;\r\n case 'more-filters':\r\n return (props: any) => <MoreFiltersComponent key={props.id} {...props} />;\r\n }\r\n },\r\n\r\n deriveInitialStateFromQuery(\r\n queryParams: HashObject = {},\r\n mainFilters: SearchFilter[] = null,\r\n moreFilters: MoreFilters = null\r\n ): FilterStateHash {\r\n const initialStates: FilterStateHash = {\r\n sortName: {\r\n active: !!queryParams.sortName,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'sortName')\r\n },\r\n\r\n objectType: {\r\n active: !!queryParams.objectType,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'objectType')\r\n },\r\n\r\n ratings: {\r\n active: !!queryParams.ratings,\r\n selection: queryParams.ratings || null\r\n },\r\n\r\n interactives: {\r\n active: queryParams.interactives\r\n },\r\n\r\n clips: {\r\n active: queryParams.clips\r\n },\r\n\r\n yearLevel: {\r\n active: !!queryParams.yearLevel,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'yearLevel')\r\n },\r\n\r\n classroom: {\r\n active: !!queryParams.classroom,\r\n selection: getFilterSelectionsFromQueryParams(queryParams, mainFilters, 'classroom')\r\n },\r\n\r\n moreFilters: {\r\n active: false // TODO: figure this shit out eventually\r\n }\r\n };\r\n\r\n const derivedState = mainFilters.reduce<FilterStateHash>((state: FilterStateHash, filter) => {\r\n state[filter.id] = initialStates[filter.id];\r\n return state;\r\n }, {} as FilterStateHash);\r\n\r\n if (moreFilters)\r\n derivedState.moreFilters = initialStates.moreFilters;\r\n\r\n return derivedState;\r\n },\r\n\r\n hasActiveFilters(queryParams: HashObject): boolean {\r\n const paramKeys = Object.keys(queryParams);\r\n\r\n if (!paramKeys.length)\r\n return false;\r\n\r\n const activeFilters = paramKeys.filter(q => {\r\n // 'query', 'cursor', and 'page' don't count as filters\r\n if (q === 'query' || q === 'cursor' || q === 'page')\r\n return false;\r\n\r\n // Filters that can have multiple selections (e.g. checkbox types) do not count as active if they are empty\r\n if (Array.isArray(queryParams[q]) && !queryParams[q].length)\r\n return false;\r\n\r\n return true;\r\n });\r\n\r\n return !!activeFilters.length;\r\n },\r\n\r\n getLabel(filter: SearchFilter, filterState: FilterState): string {\r\n if (!filterState.selection?.length)\r\n return filter.name;\r\n\r\n if (filter.type === 'dropdown')\r\n return ArrayHelper.first(filterState.selection).name;\r\n\r\n if (filter.type === 'radio') {\r\n const selection = ArrayHelper.first(filterState.selection);\r\n if (!selection || selection.default)\r\n return filter.name;\r\n\r\n return selection.name;\r\n }\r\n\r\n if (filter.type === 'checkbox')\r\n return `${filter.name} - ${filterState.selection.length}`;\r\n },\r\n\r\n buildQueryParams(queryParams: HashObject, state: FilterPayloadType): HashObject {\r\n const { id: param, type } = state.filter;\r\n\r\n const updatedParams = { ...queryParams };\r\n\r\n switch (type) {\r\n case 'switch':\r\n updatedParams[param] = state.active ? 'true' : '';\r\n break;\r\n\r\n case 'radio':\r\n case 'dropdown':\r\n updatedParams[param] = getRadioParamValue(state.selection);\r\n break;\r\n\r\n case 'checkbox':\r\n updatedParams[param] = state.active ? state.selection.map(option => option.id) : [];\r\n }\r\n\r\n if (!updatedParams[param]) // If the param is empty, delete it\r\n delete updatedParams[param];\r\n\r\n return updatedParams;\r\n },\r\n\r\n /**\r\n * This returns an object of all of the query params our search requests will pass to the backend endpoint.\r\n * This usually consists of:\r\n * q = the query string e.g. 'shakespeare'\r\n * filter = the filter string e.g. '{interactives:true,classroom:classroom-2-a,classroom:classroom-2-b}'\r\n * query = the with statement e.g. '{orderbydesc:name}series,season,interactives,resources,subtitles'\r\n * cursor = the cursor e.g. 's-sf3r9o32f-0vd'\r\n */\r\n getBackendQueryParams(queryParams: HashObject): HashObject {\r\n const q = queryParams.query;\r\n const query = getWithStatement(queryParams);\r\n const filter = getFilterString(queryParams);\r\n\r\n const backendQueryParams: HashObject = {};\r\n\r\n if (q)\r\n backendQueryParams.q = q;\r\n\r\n if (query)\r\n backendQueryParams.query = query;\r\n\r\n if (filter)\r\n backendQueryParams.filter = `{${filter}}`;\r\n\r\n if (queryParams.cursor)\r\n backendQueryParams.cursor = queryParams.cursor;\r\n\r\n return backendQueryParams;\r\n },\r\n\r\n /**\r\n * This functions purpose is to convert a with statement string into an object that is easy to use\r\n * in mock backends for sorting/filtering mock data. It doesn't need to be efficient, as it should\r\n * never ever be used in production\r\n */\r\n convertWithStatementToObject(withStatement: string): WithStatementObject {\r\n if (!withStatement)\r\n return {};\r\n\r\n // Remove any angle brackets with commas, which we use in `.split` just below\r\n withStatement = withStatement.replace('{', ',').replace('}', ',');\r\n\r\n const withStatements = withStatement.split(',');\r\n\r\n let sortingStatement: string = '';\r\n let assocStatements: string[] = [];\r\n\r\n withStatements.forEach(statement => {\r\n if (statement.includes(':'))\r\n sortingStatement = statement;\r\n else\r\n assocStatements.push(statement);\r\n });\r\n\r\n const [ sortKey, sortValue ] = sortingStatement.split(':');\r\n\r\n return {\r\n assocs: assocStatements,\r\n sortKey,\r\n sortValue\r\n };\r\n },\r\n\r\n // This is used for filtering data in mock flight requests. It shouldn't be used in production code\r\n revertFilterString(filterString: string): HashObject {\r\n if (!filterString)\r\n return {};\r\n\r\n // Remove \"{\" and \"}\" from both ends\r\n filterString = filterString.slice(1, -1);\r\n\r\n // Get an array of all of our filter values:\r\n // E.g. [ 'yearLevel:year-2', 'classroom:classroom-2-a', 'classroom-2-b', 'classroom-2-c' ]\r\n const filterValues = filterString.split(',');\r\n\r\n const keyValueFilterStrings: string[] = [];\r\n\r\n let currentFilterKey = '';\r\n filterValues.forEach(filterStr => {\r\n // Here we're building an array that looks like `filterValues`, but where every value has its key attached\r\n // E.g. [ 'yearLevel:year-2', 'classroom:classroom-2-a', 'classroom:classroom-2-b', 'classroom:classroom-2-c' ]\r\n\r\n if (filterStr.includes(':')) {\r\n currentFilterKey = filterStr.split(':')[0];\r\n keyValueFilterStrings.push(filterStr);\r\n return;\r\n }\r\n\r\n const fullFilterString = `${currentFilterKey}:${filterStr}`;\r\n keyValueFilterStrings.push(fullFilterString);\r\n });\r\n\r\n // Convert the array into an object.\r\n // E.g. { yearLevel: 'year-2', classroom: [ 'classroom-2-a', 'classroom-2-b', 'classroom-2-c' ] }\r\n return keyValueFilterStrings.reduce((filterObj: HashObject, filterStr) => {\r\n const [ key, value ] = filterStr.split(':');\r\n\r\n if (filterObj[key] && !Array.isArray(filterObj[key])) {\r\n const temp = filterObj[key];\r\n filterObj[key] = [temp];\r\n }\r\n\r\n if (Array.isArray(filterObj[key]))\r\n filterObj[key].push(value);\r\n else\r\n filterObj[key] = value;\r\n\r\n return filterObj;\r\n }, {});\r\n },\r\n\r\n /**\r\n * Helpers below this comment return hard coded filter options for a particular filter.\r\n * If you are adding a new filter with hard coded options, add a new function here.\r\n */\r\n getObjectTypeOptions(): FilterOption[] {\r\n return [\r\n {\r\n id: 'allTypes',\r\n name: getPhrase('allTypes'),\r\n default: true\r\n },\r\n {\r\n id: 'topics',\r\n name: getPhrase('topics')\r\n },\r\n {\r\n id: 'playlists',\r\n name: getPhrase('playlists')\r\n },\r\n {\r\n id: 'series',\r\n name: getPhrase('series')\r\n },\r\n {\r\n id: 'videos',\r\n name: getPhrase('videos')\r\n }\r\n ];\r\n },\r\n\r\n getNameSortOptions(): FilterOption[] {\r\n return [\r\n {\r\n id: 'first-name-atoz',\r\n name: getPhrase('firstNameAToZ'),\r\n default: true\r\n },\r\n {\r\n id: 'first-name-ztoa',\r\n name: getPhrase('firstNameZToA')\r\n },\r\n {\r\n id: 'surname-atoz',\r\n name: getPhrase('surnameAToZ')\r\n },\r\n {\r\n id: 'surname-ztoa',\r\n name: getPhrase('surnameZToA')\r\n }\r\n ];\r\n },\r\n\r\n getYearLevelOptions(yearLevels: MockYearLevel[]): FilterOption[] {\r\n if (!yearLevels?.length)\r\n return [];\r\n\r\n return yearLevels.map(level => ({\r\n id: level.name.toLowerCase().replace(' ', '-'),\r\n name: level.name\r\n }));\r\n },\r\n\r\n getClassroomOptions(classrooms: MockClassroom[]): FilterOption[] {\r\n if (!classrooms?.length)\r\n return [];\r\n\r\n return classrooms.map(classroom => ({\r\n id: classroom.name.toLowerCase().replace(' ', '-'),\r\n name: classroom.name\r\n }));\r\n }\r\n};\r\n\r\n// This allows us to determine which filters should be applied based on the query params set on first load\r\nfunction getFilterSelectionsFromQueryParams(\r\n queryParams: HashObject,\r\n filters: SearchFilter[],\r\n filterName: FilterIds\r\n): FilterOption[] {\r\n const filter = filters.find(f => f.id === filterName);\r\n\r\n if (!filter)\r\n return [];\r\n\r\n if (!queryParams[filterName])\r\n return filter.options.filter(option => option.default);\r\n\r\n let selections = queryParams[filterName];\r\n if (!Array.isArray(selections))\r\n selections = [selections];\r\n\r\n return filter.options.filter(option => selections.includes(option.id));\r\n}\r\n\r\nfunction getRadioParamValue(selection: FilterOption[]): string {\r\n if (!selection?.length)\r\n return '';\r\n\r\n return ArrayHelper.first(selection).id;\r\n}\r\n\r\n/**\r\n * This is massively under developed, and only does what it's needed for at this time.\r\n * Please update if you need extra functionality\r\n */\r\nfunction getWithStatement(queryParams: HashObject): string {\r\n let withStatement = '';\r\n\r\n if (queryParams['sortName']) {\r\n switch (queryParams['sortName']) {\r\n case 'first-name-atoz':\r\n withStatement += '{orderby:name}';\r\n break;\r\n\r\n case 'first-name-ztoa':\r\n withStatement += '{orderbydesc:name}';\r\n break;\r\n\r\n case 'surname-atoz':\r\n withStatement += '{orderby:surname}';\r\n break;\r\n\r\n case 'surname-ztoa':\r\n withStatement += '{orderbydesc:surname}';\r\n break;\r\n\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n return withStatement;\r\n}\r\n\r\n/**\r\n * Private functions\r\n */\r\n\r\nfunction getFilterString(queryParams: HashObject): string {\r\n // Add any potential query params here that are not supposed to be in the filter string\r\n const omitKeys = [ 'query', 'sortName', 'cursor', 'page' ];\r\n\r\n const filterQueryParams = ObjectHelper.omit(queryParams, omitKeys);\r\n\r\n const filterStrings = Object.keys(filterQueryParams).map(filter => {\r\n return `${filter}:${filterQueryParams[filter]}`;\r\n });\r\n\r\n return filterStrings.join(',');\r\n}","import * as React from 'react';\r\nimport * as _ from 'underscore';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { Core } from 'libs/common/core';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\r\n\r\nimport { Video, Series, Playlist, PresentationAudience } from 'libs/shared/interfaces';\r\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\r\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\r\nimport { FixedWidget } from 'libs/shared/components/widgets/fixed-widget/FixedWidget';\r\nimport { PlaylistWidgetItem } from 'libs/shared/components/widgets/items/playlist-widget-item/PlaylistWidgetItem';\r\nimport { SeriesWidgetItem } from 'libs/shared/components/widgets/items/series-widget-item/SeriesWidgetItem';\r\n\r\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\r\nimport { Actions } from 'shared/constants/LiteActions';\r\nimport { SearchResults, MainSearchResults, OtherSearchResultSet, OtherSearchResults } from 'apps/search/interfaces';\r\n\r\nconst Capacities = {\r\n MainResults: {\r\n SUBJECTS: 10,\r\n PLAYLISTS: 5,\r\n SERIES: 4\r\n },\r\n\r\n OtherResults: {\r\n VIDEOS: 6,\r\n PLAYLISTS: 10,\r\n SERIES: 10\r\n }\r\n};\r\n\r\nexport const SearchHelper = {\r\n /**\r\n * These are the results that appear at the very top of the page\r\n */\r\n filterMainResults(results: SearchResults): MainSearchResults {\r\n const { MainResults } = Capacities;\r\n\r\n const subjects = ArrayHelper.firstFew(results.subjects, MainResults.SUBJECTS);\r\n const firstVideo = ArrayHelper.first(results.videos);\r\n const playlists = ArrayHelper.firstFew(results.playlists, MainResults.PLAYLISTS);\r\n const series = ArrayHelper.firstFew(results.series, MainResults.SERIES);\r\n\r\n return {\r\n subjects,\r\n firstVideo,\r\n playlists,\r\n series,\r\n otherResults: { // All excess results are displayed in a different format defined below\r\n videos: ArrayHelper.lastFew(results.videos, results.videos.length - 1),\r\n playlists: ArrayHelper.lastFew(results.playlists, results.playlists.length - MainResults.PLAYLISTS),\r\n series: ArrayHelper.lastFew(results.series, results.series.length - MainResults.SERIES)\r\n }\r\n };\r\n },\r\n\r\n structureOtherResults(results: OtherSearchResults): OtherSearchResultSet[] {\r\n const { OtherResults } = Capacities;\r\n\r\n const videoSets = ArrayHelper.chunk<Video>(results.videos, OtherResults.VIDEOS);\r\n const playlistSets = ArrayHelper.chunk<Playlist>(results.playlists, OtherResults.PLAYLISTS);\r\n const seriesSets = ArrayHelper.chunk<Series>(results.series, OtherResults.SERIES);\r\n\r\n return SearchHelper.buildResultStructure(videoSets, playlistSets, seriesSets);\r\n },\r\n\r\n // For every 6 videos, there should be either a row of playlists or a row of series (alternating)\r\n buildResultStructure(\r\n videoSets: Video[][],\r\n playlistSets: Playlist[][],\r\n seriesSets: Series[][]\r\n ): OtherSearchResultSet[] {\r\n const structure: OtherSearchResultSet[] = [];\r\n\r\n // Clone each set as we need to use a mutable structure, but don't want to mutate the inputs directly\r\n const videosClone = [...videoSets];\r\n const playlistsClone = [...playlistSets];\r\n const seriesClone = [...seriesSets];\r\n\r\n // We set the iterations here instead of in the for-loop args because `videoSets` gets mutated\r\n const iterations = videoSets.length;\r\n for (let index = 0; index < iterations; index++) {\r\n const nextVideoSet = videosClone.shift();\r\n\r\n // After every video set will come a set of playlists or series\r\n const seriesOrPlaylistSet = SearchHelper.getSeriesOrPlaylistSet(playlistsClone, seriesClone, index);\r\n\r\n nextVideoSet && structure.push({ type: 'video', data: nextVideoSet });\r\n seriesOrPlaylistSet && structure.push(seriesOrPlaylistSet);\r\n }\r\n\r\n // In edge cases where there may be more playlists or series result sets than video sets, add them to the end\r\n if (playlistsClone.length) {\r\n playlistsClone.forEach(data => structure.push({ type: 'playlist', data }));\r\n }\r\n\r\n if (seriesClone.length) {\r\n seriesClone.forEach(data => structure.push({ type: 'series', data }));\r\n }\r\n\r\n // Remove any empty sets\r\n return structure.filter(set => set.data && !!set.data.length);\r\n },\r\n\r\n /**\r\n * Determines whether or not a playlist or series set should be added to the results structure next.\r\n */\r\n getSeriesOrPlaylistSet(playlists: Playlist[][], series: Series[][], videoSetIndex: number): OtherSearchResultSet {\r\n const isOdd = videoSetIndex % 2 === 0; // If odd, add a series set. If even, add a playlist set.\r\n\r\n if ((isOdd && series.length) || !playlists.length)\r\n return { type: 'series', data: series.shift() };\r\n\r\n if ((!isOdd && playlists.length) || !series.length)\r\n return { type: 'playlist', data: playlists.shift() };\r\n\r\n // We will only reach this point once we have run out of series and playlist results\r\n return null;\r\n },\r\n\r\n getResultSetComponent(\r\n set: OtherSearchResultSet,\r\n audiences: PresentationAudience[],\r\n setFavourite?: (videoId: string, shouldFavourite: boolean, onError?: () => void) => void\r\n ): JSX.Element {\r\n switch (set.type) {\r\n case 'video':\r\n return (\r\n <div className='pb-3'>\r\n <VideoList\r\n videos={set.data as Video[]}\r\n getVideoAppLink={SearchHelper.getVideoAppLink}\r\n getSeriesAppLink={SearchHelper.getSeriesAppLink}\r\n setFavourite={setFavourite}\r\n />\r\n </div>\r\n );\r\n\r\n case 'playlist':\r\n return (\r\n <div className='mx-n1'>\r\n <FixedWidget\r\n name={LanguageService.getPhrase('search.searchResults', 'relatedPlaylists')}\r\n collection={set.data as Playlist[]}\r\n childAppLink={SearchHelper.getPlaylistAppLink()}\r\n childComponent={(childProps: any) => (\r\n <PlaylistWidgetItem\r\n {...childProps}\r\n presentationAudiences={audiences}\r\n />\r\n )}\r\n contents={WidgetContents.Playlists}\r\n />\r\n </div>\r\n );\r\n\r\n case 'series':\r\n return (\r\n <div className='mx-n1'>\r\n <FixedWidget\r\n name={LanguageService.getPhrase('search.searchResults', 'relatedSeries')}\r\n collection={set.data}\r\n childAppLink={SearchHelper.getSeriesAppLink()}\r\n childComponent={(childProps: any) => (\r\n <SeriesWidgetItem\r\n {...childProps}\r\n audiences={audiences}\r\n />\r\n )}\r\n contents={WidgetContents.Series}\r\n />\r\n </div>\r\n );\r\n }\r\n },\r\n\r\n getVideoAppLink(video: Video): Core.AppLink {\r\n return {\r\n application: AppChannels.DEFAULT,\r\n action: 'play:video', // TODO: Change to constant\r\n args: [video.id]\r\n };\r\n },\r\n\r\n getSeriesAppLink(series?: Series): Core.AppLink {\r\n return {\r\n application: AppChannels.DEFAULT,\r\n action: Actions.Default.SERIES,\r\n args: series ? [ series.id, TextHelper.slugify(series.name) ] : []\r\n };\r\n },\r\n\r\n getPlaylistAppLink(playlist?: Playlist): Core.AppLink {\r\n return {\r\n application: AppChannels.PLAYLISTS,\r\n action: Actions.Playlists.PLAYLIST,\r\n args: playlist ? [ playlist.id, TextHelper.slugify(playlist.name) ] : []\r\n };\r\n },\r\n};","export * from './FilterHelper';\r\nexport * from './SearchHelper';","import React from 'react';\r\nimport { parse, ParseResult } from 'papaparse';\r\n\r\nimport { useViewModel } from 'libs/common/react/hooks/useViewModel';\r\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\r\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\nimport { Core } from 'libs/common/core';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\n\r\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\r\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\r\n\r\nimport { MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\nconst namespace = 'userManager.bulkUploadFileSelect';\r\n\r\ninterface BulkUploadFileSelectProps {\r\n action: string;\r\n userType: MockUserType;\r\n userRoles?: MockUserRole[];\r\n yearLevels?: MockYearLevel[];\r\n}\r\n\r\nexport function BulkUploadFileSelect(props: BulkUploadFileSelectProps): React.ReactElement {\r\n const ref = React.useRef(null);\r\n const useRef = React.useCallback(node => {\r\n if (!node)\r\n return;\r\n\r\n ref.current = node;\r\n }, []);\r\n\r\n const viewModelKey = props.userType === MockUserType.Student\r\n ? ViewModelKeys.BULK_STUDENT_UPLOAD\r\n : ViewModelKeys.BULK_TEACHER_UPLOAD;\r\n\r\n const [ , setUsers ] = useViewModel(viewModelKey);\r\n\r\n const alerts = useAlerts();\r\n\r\n const buildStudent = (r: HashObject, index: number): HashObject => {\r\n const yearLevel = props.yearLevels.find(y => y.name === r[2]);\r\n\r\n return {\r\n lookupId: index.toString(),\r\n name: r[0],\r\n surname: r[1],\r\n yearLevel,\r\n email: r[3]\r\n };\r\n };\r\n\r\n const buildTeacher = (r: HashObject, index: number): HashObject => {\r\n const userRole = props.userRoles.find(y => y.name === r[2]);\r\n\r\n // TODO: Change to actually work\r\n return {\r\n lookupId: index.toString(),\r\n name: r[0],\r\n surname: r[1],\r\n userRole,\r\n email: r[3]\r\n };\r\n };\r\n\r\n const onClick = (e: React.MouseEvent) => {\r\n ref.current.value = null;\r\n ref.current.click(null);\r\n };\r\n\r\n const onChange = (file: File) => {\r\n parse(file, {\r\n complete: (result: ParseResult) => {\r\n const data = result.data;\r\n\r\n if (!data.length || data.length === 1) {\r\n alerts.warning(LanguageService.getPhrase(namespace, 'emptyCsvWarning'));\r\n return;\r\n }\r\n\r\n data.shift();\r\n\r\n setUsers(data.map(props.userType === MockUserType.Student ? buildStudent : buildTeacher));\r\n\r\n Core.AppLinkHelper.trigger({\r\n application: AppChannels.USER_MANAGER,\r\n action: props.action\r\n });\r\n }\r\n });\r\n };\r\n\r\n return (\r\n <>\r\n <IconButton\r\n svgName={cvSvgLibrary.Upload}\r\n className='btn btn-outline-dark'\r\n onClick={onClick}\r\n >\r\n <Text namespace={namespace} phrase='button' />\r\n </IconButton>\r\n\r\n <input\r\n type='file'\r\n autoComplete='off'\r\n className='file-select d-none'\r\n accept='text/csv'\r\n ref={useRef}\r\n onChange={e => onChange(e.target.files[0])}\r\n />\r\n </>\r\n );\r\n}","import React from 'react';\r\nimport { FormikErrors, FormikTouched } from 'formik';\r\n\r\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\n\r\nimport { EditUserRequest, MockYearLevel, MockStudent } from 'apps/user-manager/interfaces';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\nimport { getStudentValidationSchema } from 'apps/user-manager/validation/user-validation/UserValidationSchema';\r\nimport { UserDetailsForm } from 'apps/user-manager/components/user-details-form/UserDetailsForm';\r\n\r\nexport interface EditStudentDetailsProps {\r\n user?: MockStudent;\r\n saveUser: (data: EditUserRequest) => void;\r\n onClickCancel: () => void;\r\n yearLevels: MockYearLevel[];\r\n initialErrors?: FormikErrors<EditUserRequest>;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function EditStudentDetails(props: EditStudentDetailsProps): React.ReactElement {\r\n const { user, saveUser, onClickCancel, yearLevels, hasNext = false, initialErrors = {} } = props;\r\n\r\n const initialValues: EditUserRequest = {\r\n id: user?.id,\r\n name: user?.name,\r\n email: user?.email,\r\n surname: user?.surname,\r\n yearLevel: {\r\n id: user?.yearLevel?.id,\r\n name: user?.yearLevel?.name\r\n }\r\n };\r\n\r\n const initialTouched: FormikTouched<EditUserRequest> = {};\r\n Object.keys(initialErrors).forEach((err: keyof EditUserRequest) => {\r\n initialTouched[err] = true;\r\n });\r\n\r\n const StudentValidationSchema = getStudentValidationSchema(yearLevels);\r\n\r\n return (\r\n <FormWrapper<EditUserRequest>\r\n initialValues={initialValues}\r\n initialErrors={initialErrors}\r\n initialTouched={initialTouched}\r\n validationSchema={StudentValidationSchema}\r\n onSubmit={saveUser}\r\n >\r\n <UserDetailsForm\r\n onClickCancel={onClickCancel}\r\n yearLevels={yearLevels}\r\n userType={MockUserType.Student}\r\n hasNext={hasNext}\r\n />\r\n </FormWrapper>\r\n );\r\n}","import React from 'react';\r\nimport { FormikErrors, FormikTouched } from 'formik';\r\n\r\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\nimport { EditUserRequest, MockUserRole, MockTeacher } from 'apps/user-manager/interfaces';\r\nimport { getTeacherValidationSchema } from 'apps/user-manager/validation/user-validation/UserValidationSchema';\r\nimport { UserDetailsForm } from 'apps/user-manager/components/user-details-form/UserDetailsForm';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\nexport interface EditTeacherDetailsProps {\r\n user?: MockTeacher;\r\n saveUser: (data: EditUserRequest) => void;\r\n onClickCancel: () => void;\r\n userRoles: MockUserRole[];\r\n initialErrors?: FormikErrors<EditUserRequest>;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function EditTeacherDetails(props: EditTeacherDetailsProps): React.ReactElement {\r\n const { user, saveUser, onClickCancel, userRoles, hasNext = false, initialErrors = {} } = props;\r\n\r\n const initialValues: EditUserRequest = {\r\n id: user?.id,\r\n name: user?.name,\r\n email: user?.email,\r\n surname: user?.surname,\r\n userRole: {\r\n id: user?.userRole?.id,\r\n name: user?.userRole?.name\r\n }\r\n };\r\n\r\n const initialTouched: FormikTouched<EditUserRequest> = {};\r\n Object.keys(initialErrors).forEach((err: keyof EditUserRequest) => {\r\n initialTouched[err] = true;\r\n });\r\n\r\n const TeacherValidationSchema = getTeacherValidationSchema(userRoles);\r\n\r\n return (\r\n <FormWrapper<EditUserRequest>\r\n initialValues={initialValues}\r\n initialErrors={initialErrors}\r\n initialTouched={initialTouched}\r\n validationSchema={TeacherValidationSchema}\r\n onSubmit={saveUser}\r\n >\r\n <UserDetailsForm\r\n onClickCancel={onClickCancel}\r\n userRoles={userRoles}\r\n userType={MockUserType.Teacher}\r\n hasNext={hasNext}\r\n />\r\n </FormWrapper>\r\n );\r\n}","export * from './user-details-form/UserDetailsForm';\r\nexport * from './year-level-select/YearLevelSelect';\r\nexport * from './edit-student-details/EditStudentDetails';\r\nexport * from './edit-teacher-details/EditTeacherDetails';\r\nexport * from './bulk-upload-file-select/BulkUploadFileSelect';","import * as React from 'react';\r\nimport { Form } from 'formik';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\r\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\r\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\r\nimport { EditUserRequest, MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\nimport { YearLevelSelect } from 'apps/user-manager/components/year-level-select/YearLevelSelect';\r\nimport { MockUserType } from 'apps/user-manager/enums';\r\n\r\n/**\r\n * This file uses 3 *.lang.json files.\r\n * - One for generic values\r\n * - One for student specific values\r\n * - One for teacher specific values\r\n */\r\nconst namespace = 'userManager.userDetailsForm';\r\nconst getPhrase = LanguageService.encloseNamespace(namespace);\r\n\r\ninterface UserDetailsFormProps {\r\n onClickCancel: () => void;\r\n yearLevels?: MockYearLevel[];\r\n userRoles?: MockUserRole[];\r\n userType: MockUserType;\r\n hasNext?: boolean;\r\n}\r\n\r\nexport function UserDetailsForm(props: UserDetailsFormProps): React.ReactElement {\r\n const { onClickCancel, yearLevels, userRoles, userType } = props;\r\n\r\n const formikProps = useFormikContextWrapper<EditUserRequest>();\r\n\r\n const getTreeSelectClassName = (field: keyof EditUserRequest) => FormHelper.getCustomFormControlClassName(\r\n formikProps.errors,\r\n formikProps.touched,\r\n field,\r\n 'revert-form-control h-auto'\r\n );\r\n\r\n const getTypePhrase = LanguageService.encloseNamespace(\r\n userType === MockUserType.Teacher ? 'userManager.teacherDetailsForm' : 'userManager.studentDetailsForm'\r\n );\r\n\r\n return (\r\n <Form>\r\n <FormField\r\n label={getPhrase('firstName')}\r\n type='text'\r\n name='name'\r\n id='name'\r\n placeholder={getTypePhrase('firstNamePlaceholder')}\r\n autoFocus\r\n value={formikProps.values.name}\r\n />\r\n <FormField\r\n label={getPhrase('lastName')}\r\n type='text'\r\n name='surname'\r\n id='surname'\r\n placeholder={getTypePhrase('lastNamePlaceholder')}\r\n value={formikProps.values.surname}\r\n />\r\n {yearLevels &&\r\n <FormField\r\n name='yearLevel'\r\n label={getPhrase('yearLevel')}\r\n >\r\n {() => (\r\n <div className={getTreeSelectClassName('yearLevel')}>\r\n <YearLevelSelect\r\n yearLevels={yearLevels}\r\n selected={formikProps.values.yearLevel}\r\n onSelect={(yearLevel: MockYearLevel) => formikProps.setFieldValue('yearLevel', yearLevel)}\r\n />\r\n </div>\r\n )}\r\n </FormField>\r\n }\r\n {userRoles &&\r\n <FormField\r\n label={getPhrase('userRole')}\r\n name='userRole'\r\n as='select'\r\n onChange={(e: any) => {\r\n const roleObj = props.userRoles.find(r => r.id === e.target.value);\r\n formikProps.setFieldValue('userRole', roleObj);\r\n }}\r\n value={formikProps.values.userRole.id}\r\n >\r\n {userRoles.map(r => <option key={r.id} value={r.id}>{r.name}</option>)}\r\n </FormField>\r\n }\r\n <FormField\r\n label={getPhrase('emailAddress')}\r\n type='text'\r\n name='email'\r\n id='email'\r\n placeholder={getTypePhrase('emailAddressPlaceholder')}\r\n value={formikProps.values.email}\r\n />\r\n <div className='btn-container d-flex justify-content-end'>\r\n <button type='button' className={`btn btn-link mr-2`} onClick={onClickCancel}>\r\n <Text namespace={namespace} phrase='cancel' />\r\n </button>\r\n <FormButtons isNew={false} hasNext={props.hasNext} />\r\n </div>\r\n </Form>\r\n );\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { MockYearLevel } from 'apps/user-manager/interfaces';\r\n\r\ninterface YearLevelProps {\r\n yearLevel: MockYearLevel;\r\n selected: boolean;\r\n onSelect: (yearLevel: MockYearLevel) => void;\r\n}\r\n\r\nfunction YearLevel(props: YearLevelProps): React.ReactElement {\r\n const { yearLevel, selected, onSelect } = props;\r\n\r\n const className = selected ? 'badge-info' : 'badge-light';\r\n\r\n return (\r\n <span\r\n className={`badge-pill d-inline-block mr-1 mb-1 cursor-pointer ${className}`}\r\n role='radio'\r\n aria-checked={selected}\r\n onClick={() => onSelect(yearLevel)}\r\n >\r\n {yearLevel.name}\r\n </span>\r\n );\r\n}\r\n\r\ninterface YearLevelSelectProps {\r\n yearLevels: MockYearLevel[];\r\n onSelect: (yearLevel: MockYearLevel) => void;\r\n selected?: MockYearLevel;\r\n}\r\n\r\nexport function YearLevelSelect(props: YearLevelSelectProps): React.ReactElement {\r\n const { yearLevels, selected, onSelect } = props;\r\n\r\n return (\r\n <div role='radiogroup'>\r\n {yearLevels.map(y =>\r\n <YearLevel\r\n key={y.id}\r\n yearLevel={y}\r\n selected={y.id.toString() === selected?.id?.toString()}\r\n onSelect={onSelect}\r\n />\r\n )}\r\n </div>\r\n );\r\n}","export * from './mocks/MockUserType';","export enum MockUserType {\r\n Student = 'student',\r\n Teacher = 'teacher'\r\n}","import { object, string } from 'yup';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { MockYearLevel, MockUserRole } from 'apps/user-manager/interfaces';\r\n\r\nconst getPhrase = LanguageService.encloseNamespace('userManager.userValidation');\r\n\r\nconst UserValidationSchema = object().shape({\r\n name: string()\r\n .max(255, () => getPhrase('nameExceeds'))\r\n .required(() => getPhrase('nameRequired'))\r\n .default(''),\r\n surname: string()\r\n .max(255, () => getPhrase('surnameExceeds'))\r\n .required(() => getPhrase('surnameRequired'))\r\n .default(''),\r\n email: string()\r\n .max(255, () => getPhrase('emailExceeds'))\r\n .required(() => getPhrase('emailRequired'))\r\n .email(() => getPhrase('emailValid'))\r\n .default('')\r\n});\r\n\r\nexport const getTeacherValidationSchema = (userRoles: MockUserRole[]) => UserValidationSchema.shape({\r\n userRole: object().shape({\r\n name: string()\r\n .required(() => getPhrase('userRoleRequired'))\r\n .oneOf(userRoles.map(r => r.name), () => getPhrase('userRoleInvalid'))\r\n .default('')\r\n })\r\n});\r\n\r\nexport const getStudentValidationSchema = (yearLevels: MockYearLevel[]) => UserValidationSchema.shape({\r\n yearLevel: object().shape({\r\n name: string()\r\n .required(() => getPhrase('yearLevelRequired'))\r\n .oneOf(yearLevels.map(y => y.name), () => getPhrase('yearLevelInvalid'))\r\n .default('')\r\n })\r\n});","import React from 'react';\r\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\r\n\r\ninterface ToggleSwitchProps {\r\n onClick: (...args: any) => any;\r\n on: boolean;\r\n disabled?: boolean;\r\n}\r\n\r\nexport function ToggleSwitch(props: ToggleSwitchProps): JSX.Element {\r\n function onClick(...args: any): void {\r\n if (props.disabled)\r\n return;\r\n\r\n props.onClick(...args);\r\n }\r\n\r\n const bootstrapClasses = 'd-inline-block float-right align-top custom-toggle toggle-option';\r\n const onClass = (props.on && !props.disabled) ? 'on' : '';\r\n const disabledClass = props.disabled ? 'disabled' : '';\r\n\r\n return (\r\n <DivButton\r\n onClick={onClick}\r\n className={`${bootstrapClasses} ${onClass} ${disabledClass}`}\r\n >\r\n <span className='handle' />\r\n </DivButton>\r\n );\r\n}","import React from 'react';\r\n\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\ninterface CheckboxItemsState {\r\n [id: string]: boolean;\r\n}\r\n\r\ninterface BulkCheckboxManagerOptions {\r\n preselectedIds?: string[]; // An array of ids of objects whose checkboxes are checked by default\r\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\r\n}\r\n\r\n/**\r\n * @param collection - The collection you are keeping track of with checkboxes\r\n * @param options - See interface above\r\n */\r\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\r\n const [ bulkChecked, setBulkChecked ] = React.useState(false);\r\n const [ items, setItems ] = React.useState<CheckboxItemsState>({});\r\n\r\n const { idField = 'id' } = options;\r\n\r\n React.useEffect(() => {\r\n if (!collection?.length)\r\n return;\r\n\r\n const newItemState = collection.reduce<CheckboxItemsState>((stateObj: CheckboxItemsState, item: HashObject) => {\r\n let checkboxState = false;\r\n\r\n if (options?.preselectedIds?.includes(item[idField]))\r\n checkboxState = true;\r\n\r\n const id = item[idField];\r\n stateObj[id] = checkboxState;\r\n\r\n return stateObj;\r\n }, {});\r\n\r\n setItems(newItemState);\r\n }, [collection]);\r\n\r\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\r\n function onToggleBulk(): void {\r\n const nextState = !bulkChecked;\r\n\r\n setBulkChecked(nextState);\r\n\r\n const newItemsState = collection.reduce<CheckboxItemsState>((stateObj: CheckboxItemsState, item: HashObject) => {\r\n stateObj[item[idField]] = nextState;\r\n return stateObj;\r\n }, {});\r\n\r\n setItems(newItemsState);\r\n }\r\n\r\n // Toggles a single item\r\n function onToggleItem(id: string): void {\r\n const nextItemState = !items[id];\r\n\r\n const nextState = {\r\n ...items,\r\n [id]: nextItemState\r\n };\r\n setItems(nextState);\r\n\r\n /**\r\n * Keep the bulk checkbox in sync with all of the other checkboxes\r\n */\r\n const totalItemsSelected = Object.keys(nextState).filter(i => nextState[i]).length;\r\n if (totalItemsSelected === collection.length) {\r\n setBulkChecked(true);\r\n return;\r\n }\r\n\r\n if (!nextItemState && bulkChecked)\r\n setBulkChecked(false);\r\n }\r\n\r\n // Returns the state of the item passed in\r\n function isChecked(item: string | HashObject<string>): boolean {\r\n if (bulkChecked)\r\n return true;\r\n\r\n if (typeof item !== 'string')\r\n item = item[idField];\r\n\r\n return items[item];\r\n }\r\n\r\n function getSelected(): string[] {\r\n if (bulkChecked)\r\n return Object.keys(items);\r\n\r\n return Object.keys(items).filter(item => items[item]);\r\n }\r\n\r\n return { onToggleBulk, onToggleItem, getSelected, isChecked, bulkChecked };\r\n};"],"sourceRoot":""}
@@ -0,0 +1 @@
1
+ (window.webpackJsonp_clickview_lite=window.webpackJsonp_clickview_lite||[]).push([[50],{525:function(t,e,r){"use strict";r.d(e,"a",(function(){return o}));var n=r(16),a=r(110),o={getShareData:function(t){if(t)return{url:"/api/domain/v1/share",key:"share:".concat(t),type:n.a.POST,data:{id:t,privacy:null}}},sharedResource:function(t){return{url:"/api/domain/v2/share/".concat(t,"?query=").concat(a.a.VIDEO),key:"shared:resource:".concat(t)}}}},630:function(t,e,r){"use strict";r.r(e),r.d(e,"PlaySharedView",(function(){return f}));var n=r(0),a=r(12),o=r(51),i=r(421),u=r(557),c=r(525),l=r(52);function s(t,e){return function(t){if(Array.isArray(t))return t}(t)||function(t,e){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(t)))return;var r=[],n=!0,a=!1,o=void 0;try{for(var i,u=t[Symbol.iterator]();!(n=(i=u.next()).done)&&(r.push(i.value),!e||r.length!==e);n=!0);}catch(t){a=!0,o=t}finally{try{n||null==u.return||u.return()}finally{if(a)throw o}}return r}(t,e)||function(t,e){if(!t)return;if("string"==typeof t)return d(t,e);var r=Object.prototype.toString.call(t).slice(8,-1);"Object"===r&&t.constructor&&(r=t.constructor.name);if("Map"===r||"Set"===r)return Array.from(t);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return d(t,e)}(t,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function d(t,e){(null==e||e>t.length)&&(e=t.length);for(var r=0,n=new Array(e);r<e;r++)n[r]=t[r];return n}function f(t){var e=s(Object(o.a)(l.a.WEB_PLAYER_DATA),2)[1],r=a.a.useBasicFetch(c.a.sharedResource(t.shortCode)),d=a.a.useBasicFetch(i.a.favouriteVideos(null));return n.useEffect((function(){r.data&&e("video",r.data)}),[!!r.data]),r.data?n.createElement(u.a,{video:r.data,relatedVideos:d.data?d.data.data:null}):n.createElement(n.Fragment,null)}}}]);
@@ -1 +1,145 @@
1
- (window.webpackJsonp_clickview_lite=window.webpackJsonp_clickview_lite||[]).push([[50],{401:function(e,n,t){"use strict";t.d(n,"a",(function(){return o}));var r=t(75),a=t(28),c=t(35);const o=()=>{const e=Object(r.a)(c.a.ALERT);return{success(n){e.success(n)()},error(n){e.error(n)()},warning(n){e.createAlert({type:a.a.Warning,heading:a.c.Warning,message:n})}}}},637:function(e,n,t){"use strict";t.r(n),t.d(n,"CancelUploadView",(function(){return h}));var r=t(0),a=t(4),c=t(75),o=t(5),i=t(28),l=t(12),s=t(112),u=t(119),p=t(401),d=t(24),f=t(44),g=t(30),b=t(3),m=t(127);function y(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){if("undefined"==typeof Symbol||!(Symbol.iterator in Object(e)))return;var t=[],r=!0,a=!1,c=void 0;try{for(var o,i=e[Symbol.iterator]();!(r=(o=i.next()).done)&&(t.push(o.value),!n||t.length!==n);r=!0);}catch(e){a=!0,c=e}finally{try{r||null==i.return||i.return()}finally{if(a)throw c}}return t}(e,n)||function(e,n){if(!e)return;if("string"==typeof e)return v(e,n);var t=Object.prototype.toString.call(e).slice(8,-1);"Object"===t&&e.constructor&&(t=e.constructor.name);if("Map"===t||"Set"===t)return Array.from(e);if("Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t))return v(e,n)}(e,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function v(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,r=new Array(n);t<n;t++)r[t]=e[t];return r}var A=o.a.encloseNamespace("upload.cancelUpload");function h(e){var n=e.id,t=e.status,o=e.name,v=y(r.useState(!1),2),h=v[0],w=v[1],P=Object(c.a)(g.b.CombineUploads),U=Object(p.a)(),E=t===m.b.Uploading,S=function(){var n=E?"cancelUploadingAlertHeading":"cancelProcessingAlertHeading",t=E?"cancelUploadingAlertMessage":"cancelProcessingAlertMessage";U.success({type:i.a.Success,heading:A(n),message:A(t,{videoName:o})}),e.closePopup()},O=[{variant:"link",onClick:function(){return e.closePopup()},buttonText:"No"},{variant:"primary",onClick:function(){(w(!0),E)?(P.cancelUpload(n),a.Radio.channel(l.c.VIDEO_UPLOAD).on(d.a.UPLOAD_CANCELLED,(function(){return S()}))):(P.cancelProcessing(n),a.Radio.channel(b.b.COMBINE_UPLOADS).on(d.a.PROCESSING_CANCELLED,(function(){return S()})))},buttonText:"Yes",isSpinnerButton:!0,showSpinner:h}],C=t===m.b.Processing?"cancelProcessingTitle":"cancelUploadingTitle",L=t===m.b.Processing?"cancelProcessingMessage":"cancelUploadingMessage";return r.createElement(s.a,{title:A(C),closePopup:function(){return e.closePopup()}},r.createElement("p",null,r.createElement(f.b,{namespace:"upload.cancelUpload",phrase:L,options:{videoName:o}})),r.createElement(u.a,{buttons:O}))}}}]);
1
+ (window["webpackJsonp_clickview_lite"] = window["webpackJsonp_clickview_lite"] || []).push([[50],{
2
+
3
+ /***/ "../../libs/shared/src/hooks/UseAlerts.ts":
4
+ /*!************************************************************************************!*\
5
+ !*** C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseAlerts.ts ***!
6
+ \************************************************************************************/
7
+ /*! exports provided: useAlerts */
8
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
9
+
10
+ "use strict";
11
+ __webpack_require__.r(__webpack_exports__);
12
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "useAlerts", function() { return useAlerts; });
13
+ /* harmony import */ var _common_src_react_hooks_UseService__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../common/src/react/hooks/UseService */ "../../libs/common/src/react/hooks/UseService.ts");
14
+ /* harmony import */ var _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../common/src/backbone/services/BaseAlertService */ "../../libs/common/src/backbone/services/BaseAlertService.ts");
15
+ /* harmony import */ var _common_src_backbone_constants_CommonServices__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../common/src/backbone/constants/CommonServices */ "../../libs/common/src/backbone/constants/CommonServices.ts");
16
+
17
+
18
+
19
+ const useAlerts = () => {
20
+ const alertService = Object(_common_src_react_hooks_UseService__WEBPACK_IMPORTED_MODULE_0__["useService"])(_common_src_backbone_constants_CommonServices__WEBPACK_IMPORTED_MODULE_2__["CommonServices"].ALERT);
21
+ return {
22
+ success(alertContent) {
23
+ alertService.success(alertContent)();
24
+ },
25
+
26
+ error(alertContent) {
27
+ alertService.error(alertContent)();
28
+ },
29
+
30
+ warning(alertContent) {
31
+ alertService.createAlert({
32
+ type: _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__["AlertType"].Warning,
33
+ heading: _common_src_backbone_services_BaseAlertService__WEBPACK_IMPORTED_MODULE_1__["DefaultAlertHeading"].Warning,
34
+ message: alertContent
35
+ });
36
+ }
37
+
38
+ };
39
+ };
40
+
41
+ /***/ }),
42
+
43
+ /***/ "./src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx":
44
+ /*!******************************************************************************************************!*\
45
+ !*** ./src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx ***!
46
+ \******************************************************************************************************/
47
+ /*! exports provided: RemoveStudentsFromClassroomView */
48
+ /***/ (function(module, __webpack_exports__, __webpack_require__) {
49
+
50
+ "use strict";
51
+ __webpack_require__.r(__webpack_exports__);
52
+ /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RemoveStudentsFromClassroomView", function() { return RemoveStudentsFromClassroomView; });
53
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
54
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
55
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-redux */ "react-redux");
56
+ /* harmony import */ var react_redux__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_redux__WEBPACK_IMPORTED_MODULE_1__);
57
+ /* harmony import */ var _libs_common_src_backbone_services_LanguageService__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../../../../libs/common/src/backbone/services/LanguageService */ "../../libs/common/src/backbone/services/LanguageService.tsx");
58
+ /* harmony import */ var _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../../../../../../../libs/common/src/react */ "../../libs/common/src/react/index.ts");
59
+ /* harmony import */ var _libs_shared_src_components_popup_Popup__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/popup/Popup */ "../../libs/shared/src/components/popup/Popup.tsx");
60
+ /* harmony import */ var _libs_shared_src_components_popup_PopupButtons__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/popup/PopupButtons */ "../../libs/shared/src/components/popup/PopupButtons.tsx");
61
+ /* harmony import */ var _libs_shared_src_components_text_Text__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/components/text/Text */ "../../libs/shared/src/components/text/Text.tsx");
62
+ /* harmony import */ var _libs_shared_src_hooks_UseAlerts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../../../../../../../libs/shared/src/hooks/UseAlerts */ "../../libs/shared/src/hooks/UseAlerts.ts");
63
+ /* harmony import */ var apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! apps/classrooms/flight-requests/ClassroomRequests */ "./src/apps/classrooms/flight-requests/ClassroomRequests.ts");
64
+ /* harmony import */ var _libs_analytics_src_AnalyticsHelper__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../../../../../../../libs/analytics/src/AnalyticsHelper */ "../../libs/analytics/src/AnalyticsHelper.ts");
65
+ function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
66
+
67
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
68
+
69
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
70
+
71
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
72
+
73
+ function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
74
+
75
+ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
76
+
77
+
78
+
79
+
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+ var namespace = 'classrooms.removeStudentsFromClassroom';
88
+ var getPhrase = _libs_common_src_backbone_services_LanguageService__WEBPACK_IMPORTED_MODULE_2__["LanguageService"].encloseNamespace(namespace);
89
+ function RemoveStudentsFromClassroomView(props) {
90
+ var _a;
91
+
92
+ var _React$useState = react__WEBPACK_IMPORTED_MODULE_0___default.a.useState(false),
93
+ _React$useState2 = _slicedToArray(_React$useState, 2),
94
+ showButtonSpinner = _React$useState2[0],
95
+ setShowButtonSpinner = _React$useState2[1];
96
+
97
+ var classroom = _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__["Flight"].useBasicFetch(apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__["ClassroomRequests"].getClassroom(props.classroomId));
98
+ var dispatch = Object(react_redux__WEBPACK_IMPORTED_MODULE_1__["useDispatch"])();
99
+ var alerts = Object(_libs_shared_src_hooks_UseAlerts__WEBPACK_IMPORTED_MODULE_7__["useAlerts"])();
100
+ var langOptions = {
101
+ smartCount: props.studentIds.length,
102
+ classroomName: (_a = classroom.data) === null || _a === void 0 ? void 0 : _a.name
103
+ };
104
+
105
+ function removeStudents() {
106
+ setShowButtonSpinner(true);
107
+ _libs_common_src_react__WEBPACK_IMPORTED_MODULE_3__["Flight"].fetch(dispatch, apps_classrooms_flight_requests_ClassroomRequests__WEBPACK_IMPORTED_MODULE_8__["ClassroomRequests"].removeStudents(props.studentIds, props.classroomId, function () {
108
+ setShowButtonSpinner(false);
109
+ _libs_analytics_src_AnalyticsHelper__WEBPACK_IMPORTED_MODULE_9__["AnalyticsHelper"].logUserAction({
110
+ id: props.classroomId,
111
+ studentCount: props.studentIds.length
112
+ }, props.analyticsOptions);
113
+ alerts.success(getPhrase('success', langOptions));
114
+ props.closePopup();
115
+ }));
116
+ }
117
+
118
+ var title = classroom.data ? getPhrase('title', langOptions) : '';
119
+ return react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_popup_Popup__WEBPACK_IMPORTED_MODULE_4__["Popup"], {
120
+ title: title,
121
+ closePopup: props.closePopup,
122
+ showLoadingSpinner: !classroom.data
123
+ }, classroom.data && react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(react__WEBPACK_IMPORTED_MODULE_0___default.a.Fragment, null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement("p", null, react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_text_Text__WEBPACK_IMPORTED_MODULE_6__["Text"], {
124
+ namespace: namespace,
125
+ phrase: 'confirm',
126
+ options: langOptions
127
+ })), react__WEBPACK_IMPORTED_MODULE_0___default.a.createElement(_libs_shared_src_components_popup_PopupButtons__WEBPACK_IMPORTED_MODULE_5__["PopupButtons"], {
128
+ buttons: [{
129
+ variant: 'link',
130
+ onClick: props.closePopup,
131
+ buttonText: getPhrase('cancel')
132
+ }, {
133
+ variant: 'danger',
134
+ onClick: removeStudents,
135
+ buttonText: getPhrase('remove'),
136
+ isSpinnerButton: true,
137
+ showSpinner: showButtonSpinner
138
+ }]
139
+ })));
140
+ }
141
+
142
+ /***/ })
143
+
144
+ }]);
145
+ //# sourceMappingURL=50.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["file://C:/ClickView Projects/@clickview/packages/libs/shared/src/hooks/UseAlerts.ts","file://C:/ClickView Projects/@clickview/packages/projects/lite/src/apps/classrooms/views/remove-students-from-classroom/RemoveStudentsFromClassroomView.tsx"],"names":[],"mappings":"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","file":"scripts/50.chunk.js","sourcesContent":["import { useService } from 'libs/common/react/hooks/UseService';\r\nimport { BaseAlertService, BaseAlert, BaseAlertOptions, AlertType, DefaultAlertHeading } from 'libs/common/backbone/services/BaseAlertService';\r\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\r\n\r\nexport const useAlerts = () => {\r\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\r\n\r\n return {\r\n success(alertContent: string | BaseAlert | BaseAlertOptions): void {\r\n alertService.success(alertContent)();\r\n },\r\n error(alertContent: string | BaseAlert | BaseAlertOptions): void {\r\n alertService.error(alertContent)();\r\n },\r\n warning(alertContent: string): void {\r\n alertService.createAlert({\r\n type: AlertType.Warning,\r\n heading: DefaultAlertHeading.Warning,\r\n message: alertContent\r\n });\r\n }\r\n };\r\n};","import React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { Flight } from 'libs/common/flight';\r\n\r\nimport { Popup } from 'libs/shared/components/popup/Popup';\r\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { PopupViewProps, PropsWithPopupViewProps, PropsWithAnalyticsOptions } from 'libs/shared/interfaces';\r\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\r\n\r\nimport { MockClassroom } from 'apps/user-manager/interfaces/mocks/MockClassroom';\r\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\n\r\nconst namespace = 'classrooms.removeStudentsFromClassroom';\r\nconst getPhrase = LanguageService.encloseNamespace(namespace);\r\n\r\ntype RemoveStudentsFromClassroomViewProps = PropsWithPopupViewProps<PropsWithAnalyticsOptions<{\r\n classroomId: string;\r\n studentIds: string[];\r\n}>>;\r\n\r\nexport function RemoveStudentsFromClassroomView(props: RemoveStudentsFromClassroomViewProps): JSX.Element {\r\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\r\n\r\n const classroom = Flight.useBasicFetch<MockClassroom>(ClassroomRequests.getClassroom(props.classroomId));\r\n\r\n const dispatch = useDispatch();\r\n const alerts = useAlerts();\r\n\r\n const langOptions = { smartCount: props.studentIds.length, classroomName: classroom.data?.name };\r\n\r\n function removeStudents(): void {\r\n setShowButtonSpinner(true);\r\n\r\n Flight.fetch(dispatch, ClassroomRequests.removeStudents(props.studentIds, props.classroomId, () => {\r\n setShowButtonSpinner(false);\r\n\r\n AnalyticsHelper.logUserAction({\r\n id: props.classroomId,\r\n studentCount: props.studentIds.length\r\n }, props.analyticsOptions);\r\n\r\n alerts.success(getPhrase('success', langOptions));\r\n\r\n props.closePopup();\r\n }));\r\n }\r\n\r\n const title = classroom.data ? getPhrase('title', langOptions) : '';\r\n\r\n return (\r\n <Popup title={title} closePopup={props.closePopup} showLoadingSpinner={!classroom.data}>\r\n {classroom.data &&\r\n <>\r\n <p>\r\n <Text namespace={namespace} phrase='confirm' options={langOptions} />\r\n </p>\r\n\r\n <PopupButtons buttons={\r\n [\r\n {\r\n variant: 'link',\r\n onClick: props.closePopup,\r\n buttonText: getPhrase('cancel')\r\n },\r\n {\r\n variant: 'danger',\r\n onClick: removeStudents,\r\n buttonText: getPhrase('remove'),\r\n isSpinnerButton: true,\r\n showSpinner: showButtonSpinner\r\n }\r\n ]\r\n }/>\r\n </>\r\n }\r\n </Popup>\r\n );\r\n}"],"sourceRoot":""}
@@ -1 +1 @@
1
- (window.webpackJsonp_clickview_lite=window.webpackJsonp_clickview_lite||[]).push([[52],{615:function(e,t,n){"use strict";n.r(t),n.d(t,"DialogView",(function(){return s}));var o=n(0),c=n(32),i=n(118),l=n(111);function s(e){const t=e.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?c.a.isFunction(e.onDone)&&e.onDone():c.a.isFunction(e.onFail)&&e.onFail(),t.close&&e.closePopup()},type:t.type}));return o.createElement(l.a,{title:e.title,closePopup:e.closePopup},o.createElement("p",null,e.text),o.createElement(i.a,{buttons:t}))}}}]);
1
+ (window.webpackJsonp_clickview_lite=window.webpackJsonp_clickview_lite||[]).push([[51],{636:function(e,t,n){"use strict";n.r(t),n.d(t,"DialogView",(function(){return s}));var o=n(0),c=n(26),i=n(125),l=n(118);function s(e){const t=e.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?c.a.isFunction(e.onDone)&&e.onDone():c.a.isFunction(e.onFail)&&e.onFail(),t.close&&e.closePopup()},type:t.type}));return o.createElement(l.a,{title:e.title,closePopup:e.closePopup},o.createElement("p",null,e.text),o.createElement(i.a,{buttons:t}))}}}]);