@clickview/lite 0.75.0-rc.2 → 0.75.0-rc.4

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 (193) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{119-lite-a1f592f602.chunk.css → 1243-lite-13eda8f6a0.chunk.css} +2 -4
  3. package/dist/css/{7230-lite-36ff6e6d53.chunk.css → 1867-lite-8baa8af02b.chunk.css} +3 -5
  4. package/dist/css/{5241-lite-baab687563.chunk.css → 4203-lite-9ffab89741.chunk.css} +3 -5
  5. package/dist/css/{8364-lite-99938dea56.chunk.css → 5193-lite-d434056013.chunk.css} +1 -0
  6. package/dist/css/{7339-lite-05c396fed3.chunk.css → 6756-lite-839687d3d7.chunk.css} +1 -0
  7. package/dist/css/{9527-lite-1d2221b6a8.chunk.css → 7103-lite-fef3024f61.chunk.css} +2 -4
  8. package/dist/css/{8856-lite-827b34aed7.chunk.css → 8856-lite-c114ab5c89.chunk.css} +1 -1
  9. package/dist/languages/en.json +1 -1
  10. package/dist/scripts/104-0c03791b45-lite.chunk.js +2 -0
  11. package/dist/scripts/104-0c03791b45-lite.chunk.js.map +1 -0
  12. package/dist/scripts/1074-4f6b136f9a-lite.chunk.js +2 -0
  13. package/dist/scripts/1074-4f6b136f9a-lite.chunk.js.map +1 -0
  14. package/dist/scripts/1087-861be5211f-lite.chunk.js +2 -0
  15. package/dist/scripts/1087-861be5211f-lite.chunk.js.map +1 -0
  16. package/dist/scripts/1192-d409863a3c-lite.chunk.js +2 -0
  17. package/dist/scripts/1192-d409863a3c-lite.chunk.js.map +1 -0
  18. package/dist/scripts/1199-d2fcbb547e-lite.chunk.js +2 -0
  19. package/dist/scripts/1199-d2fcbb547e-lite.chunk.js.map +1 -0
  20. package/dist/scripts/121-1b744469ee-lite.chunk.js +2 -0
  21. package/dist/scripts/121-1b744469ee-lite.chunk.js.map +1 -0
  22. package/dist/scripts/{1221-502395e693-lite.chunk.js → 1221-1109d5379d-lite.chunk.js} +3 -3
  23. package/dist/scripts/1221-1109d5379d-lite.chunk.js.map +1 -0
  24. package/dist/scripts/1243-ede924125c-lite.chunk.js +2 -0
  25. package/dist/scripts/1243-ede924125c-lite.chunk.js.map +1 -0
  26. package/dist/scripts/147-44ee7e9a78-lite.chunk.js +2 -0
  27. package/dist/scripts/147-44ee7e9a78-lite.chunk.js.map +1 -0
  28. package/dist/scripts/1491-ab92a040e5-lite.chunk.js +2 -0
  29. package/dist/scripts/1491-ab92a040e5-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{1610-7f58bb25a9-lite.chunk.js → 1610-bb6eff2ff1-lite.chunk.js} +2 -2
  31. package/dist/scripts/1610-bb6eff2ff1-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js → 1867-3b447a1b85-lite.chunk.js} +2 -2
  33. package/dist/scripts/{7230-71f8d6d1bd-lite.chunk.js.map → 1867-3b447a1b85-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{218-297de74688-lite.chunk.js → 218-f6cc4a3b6a-lite.chunk.js} +2 -2
  35. package/dist/scripts/218-f6cc4a3b6a-lite.chunk.js.map +1 -0
  36. package/dist/scripts/2258-ed7383502f-lite.chunk.js +3 -0
  37. package/dist/scripts/2258-ed7383502f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{2968-c4c0114915-lite.chunk.js → 2968-13e56eeff8-lite.chunk.js} +1 -1
  39. package/dist/scripts/2968-13e56eeff8-lite.chunk.js.map +1 -0
  40. package/dist/scripts/3268-2736356687-lite.chunk.js +2 -0
  41. package/dist/scripts/{3268-faca1bf46e-lite.chunk.js.map → 3268-2736356687-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/3597-eaae787997-lite.chunk.js +3 -0
  43. package/dist/scripts/3597-eaae787997-lite.chunk.js.map +1 -0
  44. package/dist/scripts/3836-425334ab13-lite.chunk.js +2 -0
  45. package/dist/scripts/{3836-f2a0c9f713-lite.chunk.js.map → 3836-425334ab13-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js +2 -0
  47. package/dist/scripts/3837-e4c5bb738b-lite.chunk.js.map +1 -0
  48. package/dist/scripts/4185-7178e5a716-lite.chunk.js +2 -0
  49. package/dist/scripts/4185-7178e5a716-lite.chunk.js.map +1 -0
  50. package/dist/scripts/4203-ee50e89841-lite.chunk.js +3 -0
  51. package/dist/scripts/4203-ee50e89841-lite.chunk.js.map +1 -0
  52. package/dist/scripts/4598-bcd3f6f8a7-lite.chunk.js +2 -0
  53. package/dist/scripts/{4598-2b1daca7ae-lite.chunk.js.map → 4598-bcd3f6f8a7-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{4722-d96da2a258-lite.chunk.js → 4722-9eb591621a-lite.chunk.js} +3 -3
  55. package/dist/scripts/4722-9eb591621a-lite.chunk.js.map +1 -0
  56. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js +2 -0
  57. package/dist/scripts/4948-f21dad2ca1-lite.chunk.js.map +1 -0
  58. package/dist/scripts/{5153-079b4125ae-lite.chunk.js → 5153-cf62a95421-lite.chunk.js} +3 -3
  59. package/dist/scripts/5153-cf62a95421-lite.chunk.js.map +1 -0
  60. package/dist/scripts/6137-bc8b193237-lite.chunk.js +2 -0
  61. package/dist/scripts/6137-bc8b193237-lite.chunk.js.map +1 -0
  62. package/dist/scripts/6756-cfd00009e4-lite.chunk.js +3 -0
  63. package/dist/scripts/6756-cfd00009e4-lite.chunk.js.map +1 -0
  64. package/dist/scripts/6790-36ce6dda04-lite.chunk.js +2 -0
  65. package/dist/scripts/6790-36ce6dda04-lite.chunk.js.map +1 -0
  66. package/dist/scripts/705-10a85bae7a-lite.chunk.js +2 -0
  67. package/dist/scripts/705-10a85bae7a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/7103-14bd3771d2-lite.chunk.js +2 -0
  69. package/dist/scripts/7103-14bd3771d2-lite.chunk.js.map +1 -0
  70. package/dist/scripts/7148-d966512e45-lite.chunk.js +2 -0
  71. package/dist/scripts/7148-d966512e45-lite.chunk.js.map +1 -0
  72. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js +2 -0
  73. package/dist/scripts/7205-12a6b2ac55-lite.chunk.js.map +1 -0
  74. package/dist/scripts/7438-38f60d3e8e-lite.chunk.js +2 -0
  75. package/dist/scripts/7438-38f60d3e8e-lite.chunk.js.map +1 -0
  76. package/dist/scripts/7480-e0749592fc-lite.chunk.js +2 -0
  77. package/dist/scripts/7480-e0749592fc-lite.chunk.js.map +1 -0
  78. package/dist/scripts/8010-e9163f5bee-lite.chunk.js +2 -0
  79. package/dist/scripts/8010-e9163f5bee-lite.chunk.js.map +1 -0
  80. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js +3 -0
  81. package/dist/scripts/8410-1f1fd5ccf0-lite.chunk.js.map +1 -0
  82. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js +2 -0
  83. package/dist/scripts/8705-ecd20ef6cb-lite.chunk.js.map +1 -0
  84. package/dist/scripts/8856-4da691f96f-lite.chunk.js +2 -0
  85. package/dist/scripts/8856-4da691f96f-lite.chunk.js.map +1 -0
  86. package/dist/scripts/9003-fc8e674468-lite.chunk.js +2 -0
  87. package/dist/scripts/9003-fc8e674468-lite.chunk.js.map +1 -0
  88. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js +2 -0
  89. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js.map +1 -0
  90. package/dist/scripts/9103-4eec16d73b-lite.chunk.js +2 -0
  91. package/dist/scripts/9103-4eec16d73b-lite.chunk.js.map +1 -0
  92. package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js +2 -0
  93. package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js.map +1 -0
  94. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js +2 -0
  95. package/dist/scripts/9266-f0ad8d5cb3-lite.chunk.js.map +1 -0
  96. package/dist/scripts/9620-3746c84350-lite.chunk.js +3 -0
  97. package/dist/scripts/9620-3746c84350-lite.chunk.js.map +1 -0
  98. package/dist/scripts/9740-9d50d31b72-lite.chunk.js +2 -0
  99. package/dist/scripts/9740-9d50d31b72-lite.chunk.js.map +1 -0
  100. package/dist/scripts/{bundle-95a6fc2722.min.js → bundle-fc60888464.min.js} +3 -3
  101. package/dist/scripts/{bundle-95a6fc2722.min.js.map → bundle-fc60888464.min.js.map} +1 -1
  102. package/package.json +1 -1
  103. package/dist/scripts/104-b62a8447f0-lite.chunk.js +0 -2
  104. package/dist/scripts/104-b62a8447f0-lite.chunk.js.map +0 -1
  105. package/dist/scripts/107-989ac2dc47-lite.chunk.js +0 -2
  106. package/dist/scripts/107-989ac2dc47-lite.chunk.js.map +0 -1
  107. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js +0 -2
  108. package/dist/scripts/119-e3a8bd94dd-lite.chunk.js.map +0 -1
  109. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js +0 -2
  110. package/dist/scripts/1199-a2ac2338d0-lite.chunk.js.map +0 -1
  111. package/dist/scripts/121-bf7a153eb8-lite.chunk.js +0 -2
  112. package/dist/scripts/121-bf7a153eb8-lite.chunk.js.map +0 -1
  113. package/dist/scripts/1221-502395e693-lite.chunk.js.map +0 -1
  114. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js +0 -2
  115. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js.map +0 -1
  116. package/dist/scripts/1610-7f58bb25a9-lite.chunk.js.map +0 -1
  117. package/dist/scripts/218-297de74688-lite.chunk.js.map +0 -1
  118. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js +0 -3
  119. package/dist/scripts/2258-4d0639c9fe-lite.chunk.js.map +0 -1
  120. package/dist/scripts/2968-c4c0114915-lite.chunk.js.map +0 -1
  121. package/dist/scripts/3268-faca1bf46e-lite.chunk.js +0 -2
  122. package/dist/scripts/3836-f2a0c9f713-lite.chunk.js +0 -2
  123. package/dist/scripts/3837-fe321e8deb-lite.chunk.js +0 -2
  124. package/dist/scripts/3837-fe321e8deb-lite.chunk.js.map +0 -1
  125. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js +0 -2
  126. package/dist/scripts/4025-306e0fbdd5-lite.chunk.js.map +0 -1
  127. package/dist/scripts/4164-5d3af57b67-lite.chunk.js +0 -2
  128. package/dist/scripts/4164-5d3af57b67-lite.chunk.js.map +0 -1
  129. package/dist/scripts/4185-e8e40dab72-lite.chunk.js +0 -2
  130. package/dist/scripts/4185-e8e40dab72-lite.chunk.js.map +0 -1
  131. package/dist/scripts/4562-545f04c53f-lite.chunk.js +0 -2
  132. package/dist/scripts/4562-545f04c53f-lite.chunk.js.map +0 -1
  133. package/dist/scripts/4598-2b1daca7ae-lite.chunk.js +0 -2
  134. package/dist/scripts/4722-d96da2a258-lite.chunk.js.map +0 -1
  135. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js +0 -2
  136. package/dist/scripts/4948-66ba60c8e3-lite.chunk.js.map +0 -1
  137. package/dist/scripts/5153-079b4125ae-lite.chunk.js.map +0 -1
  138. package/dist/scripts/5241-163f5ac64c-lite.chunk.js +0 -3
  139. package/dist/scripts/5241-163f5ac64c-lite.chunk.js.map +0 -1
  140. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js +0 -2
  141. package/dist/scripts/5349-bc0fcb4083-lite.chunk.js.map +0 -1
  142. package/dist/scripts/6135-a878a9cff0-lite.chunk.js +0 -3
  143. package/dist/scripts/6135-a878a9cff0-lite.chunk.js.map +0 -1
  144. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js +0 -2
  145. package/dist/scripts/6509-23fdb20a4b-lite.chunk.js.map +0 -1
  146. package/dist/scripts/6790-5086b72662-lite.chunk.js +0 -2
  147. package/dist/scripts/6790-5086b72662-lite.chunk.js.map +0 -1
  148. package/dist/scripts/7148-432ab72091-lite.chunk.js +0 -2
  149. package/dist/scripts/7148-432ab72091-lite.chunk.js.map +0 -1
  150. package/dist/scripts/7205-2428f775a5-lite.chunk.js +0 -2
  151. package/dist/scripts/7205-2428f775a5-lite.chunk.js.map +0 -1
  152. package/dist/scripts/7339-5793c921bb-lite.chunk.js +0 -3
  153. package/dist/scripts/7339-5793c921bb-lite.chunk.js.map +0 -1
  154. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js +0 -2
  155. package/dist/scripts/7438-a5f96e58fc-lite.chunk.js.map +0 -1
  156. package/dist/scripts/7926-6b040931aa-lite.chunk.js +0 -2
  157. package/dist/scripts/7926-6b040931aa-lite.chunk.js.map +0 -1
  158. package/dist/scripts/8536-f75009dd87-lite.chunk.js +0 -2
  159. package/dist/scripts/8536-f75009dd87-lite.chunk.js.map +0 -1
  160. package/dist/scripts/8687-549a2d9278-lite.chunk.js +0 -3
  161. package/dist/scripts/8687-549a2d9278-lite.chunk.js.map +0 -1
  162. package/dist/scripts/8856-df102acdff-lite.chunk.js +0 -2
  163. package/dist/scripts/8856-df102acdff-lite.chunk.js.map +0 -1
  164. package/dist/scripts/9134-42dc2390ce-lite.chunk.js +0 -2
  165. package/dist/scripts/9134-42dc2390ce-lite.chunk.js.map +0 -1
  166. package/dist/scripts/9266-c5d6705147-lite.chunk.js +0 -2
  167. package/dist/scripts/9266-c5d6705147-lite.chunk.js.map +0 -1
  168. package/dist/scripts/9284-402a14d41c-lite.chunk.js +0 -2
  169. package/dist/scripts/9284-402a14d41c-lite.chunk.js.map +0 -1
  170. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js +0 -2
  171. package/dist/scripts/9470-11c8c2ca71-lite.chunk.js.map +0 -1
  172. package/dist/scripts/9527-111c8586a7-lite.chunk.js +0 -2
  173. package/dist/scripts/9527-111c8586a7-lite.chunk.js.map +0 -1
  174. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js +0 -3
  175. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js.map +0 -1
  176. package/dist/scripts/9591-230bcf0935-lite.chunk.js +0 -2
  177. package/dist/scripts/9591-230bcf0935-lite.chunk.js.map +0 -1
  178. /package/dist/css/{8687-lite-6787cc731a.chunk.css → 3597-lite-6787cc731a.chunk.css} +0 -0
  179. /package/dist/css/{5349-lite-829df3b4e7.chunk.css → 6137-lite-829df3b4e7.chunk.css} +0 -0
  180. /package/dist/css/{9470-lite-edb2d29928.chunk.css → 8010-lite-edb2d29928.chunk.css} +0 -0
  181. /package/dist/css/{6135-lite-41bdd1c5a3.chunk.css → 8410-lite-41bdd1c5a3.chunk.css} +0 -0
  182. /package/dist/css/{121-lite-1337d9acf0.chunk.css → 9042-lite-1337d9acf0.chunk.css} +0 -0
  183. /package/dist/css/{9528-lite-6787cc731a.chunk.css → 9620-lite-6787cc731a.chunk.css} +0 -0
  184. /package/dist/scripts/{1221-502395e693-lite.chunk.js.LICENSE.txt → 1221-1109d5379d-lite.chunk.js.LICENSE.txt} +0 -0
  185. /package/dist/scripts/{2258-4d0639c9fe-lite.chunk.js.LICENSE.txt → 2258-ed7383502f-lite.chunk.js.LICENSE.txt} +0 -0
  186. /package/dist/scripts/{4722-d96da2a258-lite.chunk.js.LICENSE.txt → 3597-eaae787997-lite.chunk.js.LICENSE.txt} +0 -0
  187. /package/dist/scripts/{5153-079b4125ae-lite.chunk.js.LICENSE.txt → 4203-ee50e89841-lite.chunk.js.LICENSE.txt} +0 -0
  188. /package/dist/scripts/{5241-163f5ac64c-lite.chunk.js.LICENSE.txt → 4722-9eb591621a-lite.chunk.js.LICENSE.txt} +0 -0
  189. /package/dist/scripts/{6135-a878a9cff0-lite.chunk.js.LICENSE.txt → 5153-cf62a95421-lite.chunk.js.LICENSE.txt} +0 -0
  190. /package/dist/scripts/{7339-5793c921bb-lite.chunk.js.LICENSE.txt → 6756-cfd00009e4-lite.chunk.js.LICENSE.txt} +0 -0
  191. /package/dist/scripts/{8687-549a2d9278-lite.chunk.js.LICENSE.txt → 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt} +0 -0
  192. /package/dist/scripts/{9528-2b478f4ca8-lite.chunk.js.LICENSE.txt → 9620-3746c84350-lite.chunk.js.LICENSE.txt} +0 -0
  193. /package/dist/scripts/{bundle-95a6fc2722.min.js.LICENSE.txt → bundle-fc60888464.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8010],{14604:(e,t,r)=>{r.d(t,{W:()=>i});var n=r(32735),l=r(83914),o=r(35223);const a={icon:"eCi4v"};function i(e){return n.createElement("div",{className:"alert alert-warning d-flex align-items-center px-2 mb-3 ".concat(e.className||"")},n.createElement(l.x,{svgName:o.vn.WarningOutline,className:"svg-container me-2 ".concat(a.icon)}),n.createElement("div",null,e.children))}},6748:(e,t,r)=>{r.d(t,{i:()=>O});var n=r(32735),l=r(42648),o=r(35509),a=r(91967),i=r(15611),c=r(17808),s=r(1287),u=r(83914),d=r(90281),m={opacity:"0.8",cursor:"grabbing"},f=r(35223);function v(e){return function(e){if(Array.isArray(e))return p(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||g(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e,t){if(e){if("string"==typeof e)return p(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function h(e){var t,r,n,l;return{canScrollLeft:(null===(t=e.current)||void 0===t?void 0:t.scrollLeft)>0,canScrollRight:(null===(r=e.current)||void 0===r?void 0:r.scrollLeft)+1<(null===(n=e.current)||void 0===n?void 0:n.scrollWidth)-(null===(l=e.current)||void 0===l?void 0:l.clientWidth)}}const b={sortIndicator:"gFhu0",scrollContainer:"sWUp9",scrollbarTrack:"Vn2qM"};function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var y=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var l=0;for(n=Object.getOwnPropertySymbols(e);l<n.length;l++)t.indexOf(n[l])<0&&Object.prototype.propertyIsEnumerable.call(e,n[l])&&(r[n[l]]=e[n[l]])}return r};function E(e){var t,r;return e.column.canSort?n.createElement("span",{className:"".concat(b.sortIndicator,"\n ").concat(e.column.isSorted?"":"text-secondary","\n ").concat(null!==(r=null===(t=e.theme)||void 0===t?void 0:t.sortIndicator)&&void 0!==r?r:"")},n.createElement(u.x,{svgName:e.column.isSortedDesc||!e.column.isSorted?f.vn.ArrowRight:f.vn.ArrowLeft,size:u.S.Small})):n.createElement(n.Fragment,null)}function w(e){var t,r,l,u,d,f,g,p,h={columns:e.columns,data:e.data,disableSortBy:!e.enableSort,manualSortBy:e.manualSort,autoResetHiddenColumns:e.autoResetHiddenColumns,autoResetSortBy:e.autoResetSortBy,initialState:{sortBy:e.initialSortBy||[]}};e.initialSelectedRowIds&&(h.initialState={selectedRowIds:(g=e.initialSelectedRowIds,p={},g.forEach((function(e){return p[e]=!0})),p)}),e.getRowId&&(h.getRowId=e.getRowId);var b,y=o.useTable.apply(void 0,[h].concat((b=function(e){var t=[o.useSortBy,o.useRowSelect,"flex"===e.layout?o.useFlexLayout:o.useBlockLayout];return e.allowFiltering&&(t=[].concat(v(t),[o.useFilters])),e.allowGlobalFiltering&&(t=[].concat(v(t),[o.useGlobalFilter])),t}(Object.assign({},e)),function(e){if(Array.isArray(e))return S(e)}(b)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(b)||function(e,t){if(e){if("string"==typeof e)return S(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?S(e,t):void 0}}(b)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))),w=y.getTableProps,O=y.getTableBodyProps,C=y.headerGroups,R=y.rows,A=y.prepareRow,I=y.toggleAllRowsSelected,N=y.setGlobalFilter,L=y.setHiddenColumns,k=y.state.sortBy;function j(){return!R.length&&e.emptyState?e.emptyState:R.map((function(t){A(t);var r=function(t){var r,n,l,o,i,c=a.q.isFunction(null===(r=e.theme)||void 0===r?void 0:r.row)?e.theme.row(t):null!==(l=null===(n=e.theme)||void 0===n?void 0:n.row)&&void 0!==l?l:"";return t.isSelected&&(null===(o=e.theme)||void 0===o?void 0:o.selectedRow)&&(c+=" ".concat(null===(i=e.theme)||void 0===i?void 0:i.selectedRow)),e.onSelectRow&&(c+=" cursor-pointer"),e.enableSortableRows&&(c+=" cursor-grab"),c}(t),l=!!e.getRowAppLink&&e.getRowAppLink(t);function o(){e.onSelectRow&&(e.allowSelectMultipleRows||I(!1),e.onSelectRow(t),t.toggleRowSelected(!0))}function c(e,a){var c=function(e,t){return"dragAttributes"in e&&"dragListeners"in e?Object.assign(Object.assign(Object.assign({},e.dragAttributes),e.dragListeners),{"aria-roledescription":"Sortable row",ref:t}):{}}(e,a);return l?n.createElement("div",{role:"row",key:t.id},n.createElement(i.F,Object.assign({},e,c,{className:r,appLink:l}),T(t))):n.createElement("div",Object.assign({},e,c,{key:t.id,role:"row",className:r,onClick:o}),T(t))}var u=t.getRowProps();return e.enableSortableRows?n.createElement(s.W,{id:t.original.id,key:t.id,childProps:u,childComponent:n.forwardRef((function(e,t){return c(e,t)}))}):c(u)}))}function T(t){return t.cells.map((function(r){var l=function(t,r){var n,l,o="";return"function"==typeof(null===(n=e.theme)||void 0===n?void 0:n.cell)&&(o=e.theme.cell(t,r)),"string"==typeof(null===(l=e.theme)||void 0===l?void 0:l.cell)&&(o=e.theme.cell),e.onSelectCell&&(o+=" cursor-pointer"),o}(t,r);return n.createElement("div",Object.assign({key:r.column.id},r.getCellProps(),{className:l,onClick:function(){e.onSelectCell&&e.onSelectCell(r)}}),r.render("Cell"))}))}return n.useEffect((function(){e.onSort&&e.onSort(k)}),[k]),n.useEffect((function(){e.globalFilter&&N(e.globalFilter)}),[e.globalFilter]),n.useEffect((function(){e.hiddenColumns&&L(e.hiddenColumns)}),[e.hiddenColumns&&e.hiddenColumns.length]),n.createElement("div",Object.assign({},w(),{className:null!==(r=null===(t=e.theme)||void 0===t?void 0:t.table)&&void 0!==r?r:""}),n.createElement("div",{className:null!==(u=null===(l=e.theme)||void 0===l?void 0:l.header)&&void 0!==u?u:""},C.map((function(t){var r,l;return n.createElement("div",Object.assign({},t.getHeaderGroupProps(),{className:null!==(l=null===(r=e.theme)||void 0===r?void 0:r.headerRow)&&void 0!==l?l:""}),t.headers.map((function(t){var r,l;return n.createElement("div",Object.assign({},t.getHeaderProps(t.getSortByToggleProps()),{className:null!==(l=null===(r=e.theme)||void 0===r?void 0:r.headerCell)&&void 0!==l?l:""}),t.render("Header",{renderSortIndicator:function(){return n.createElement(E,{column:t,theme:e.theme})}}),!t.hideSortIndicator&&n.createElement(E,{column:t,theme:e.theme}))})))}))),n.createElement("div",Object.assign({},O(),{className:null!==(f=null===(d=e.theme)||void 0===d?void 0:d.body)&&void 0!==f?f:""}),e.enableSortableRows?n.createElement(c.Q,{ids:R.map((function(e){return e.original.id})),getDragOverlay:function(t){var r,l,o=R.findIndex((function(e){return e.original.id===t})),a=R[o];return n.createElement("div",Object.assign({},e,{className:(r=e.theme,l="g-0 ",r&&(l+=r.row),l),style:m}),T(a))},onSortEnd:e.onSortingRowsEnd},j()):j()))}function O(e){var t=e.enableSlider,r=e.scrollIncrement,o=e.scrollable,i=y(e,["enableSlider","scrollIncrement","scrollable"]),c=function(){var e,t,r=n.useRef(null),l=(e=n.useState(h(r)),t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,l,o,a,i=[],c=!0,s=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=o.call(r)).done)&&(i.push(n.value),i.length!==t);c=!0);}catch(e){s=!0,l=e}finally{try{if(!c&&null!=r.return&&(a=r.return(),Object(a)!==a))return}finally{if(s)throw l}}return i}}(e,t)||g(e,t)||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.")}()),o=l[0],i=l[1],c=a.q.throttle((function(){i(h(r))}),200),s=n.useCallback((function(e){var t;r.current&&(null===(t=r.current)||void 0===t||t.removeEventListener("scroll",c)),e&&(i(h(r)),e.addEventListener("scroll",c)),r.current=e}),[]);return n.useEffect((function(){(null==r?void 0:r.current)&&i(h(r))}),[r]),{ref:s,scrollState:o,scroll:function(e){var t;null===(t=r.current)||void 0===t||t.scrollBy({left:e,top:0,behavior:"smooth"})}}}(),s=c.ref,u=c.scrollState,m=c.scroll;if(o)return n.createElement(l.$B,{renderTrackHorizontal:function(){return n.createElement("div",{className:b.scrollbarTrack})},autoHeightMax:1e4,autoHeight:!0},n.createElement(w,Object.assign({},i)));if(!t)return n.createElement(w,Object.assign({},i));function f(e){m(r*("right"===e?1:-1))}return n.createElement("div",{className:"mx-n4 overflow-x-hidden overflow-y-hidden"},n.createElement("div",{className:"px-4"},n.createElement("div",{className:"position-relative"},n.createElement(d.W,{direction:d.f.Left,onClick:function(){return f("left")},hide:!u.canScrollLeft}),n.createElement("div",{className:"".concat(b.scrollContainer," ").concat(e.scrollContainerClassName),ref:s},n.createElement(w,Object.assign({},i))),n.createElement(d.W,{direction:d.f.Right,onClick:function(){return f("right")},hide:!u.canScrollRight}))))}O.defaultProps={scrollIncrement:250,scrollable:!1,layout:"flex"}},81803:(e,t,r)=>{r.d(t,{d:()=>v});var n=r(32735),l=r(81886),o=r(23481),a=r(49935),i=r(22902),c=r(14070),s=r(97291),u=r(96368);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var m="settings.settingsLayout",f=function(e){var t=(0,i.T)().hasPermissions,r=(0,u.e)();if(e)return t(e);var n=l.Q.C$.getCurrentAppLink();return n.application!==s.O.SETTINGS||r.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===n.action}))}))};function v(e){var t,r=f(e.requiredPermissions);if(n.useEffect((function(){r||l.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})}),[r]),!r)return n.createElement(n.Fragment,null);var i,u=e.breadcrumbs.map((function(t,r){return{name:t,appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME},active:r===e.breadcrumbs.length-1}}));return n.createElement("div",{className:"px-3"},n.createElement("div",{className:"d-flex align-items-center justify-content-between"},n.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),n.createElement("div",{className:"pb-3"},n.createElement(a.Oo,{breadcrumbs:[{name:o.T.getPhrase(m,"settingsBreadcrumb"),appLink:{application:s.O.SETTINGS,action:c.e.Settings.HOME}}].concat((i=u,function(e){if(Array.isArray(e))return d(e)}(i)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?d(e,t):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&n.createElement(n.Fragment,null,n.createElement("p",null,e.description),n.createElement("hr",null)),e.children)}},28875:(e,t,r)=>{r.r(t),r.d(t,{ArchivedClassroomsView:()=>L});var n=r(32735),l=r(70680),o=r(23481),a=r(20354),i=r(14604),c=r(87801),s=r(83345),u=r(94644),d=r(39151),m=r(31949),f=r(69883),v=r(60115),g=r(79612),p=r(14070),h=r(97291),b=r(90681),S=r(19948),y=r(88630),E=r(81803),w=r(97958),O=r(99742),C="settings.archivedClassroomsEmptyState";function R(){return n.createElement(s.D.Provider,{value:C},n.createElement(w.u,null,n.createElement(w.u.Image,{src:O.W.EmptyStates.Classrooms.CLASSROOMS}),n.createElement(w.u.Heading,null,n.createElement(s.x,{phrase:"heading"})),n.createElement(w.u.Info,null,n.createElement(s.x,{phrase:"info"})),n.createElement(w.u.Cta,{appLink:{application:h.O.CLASSROOMS,action:p.e.Classrooms.HOME},className:"btn btn-dark",text:o.T.getPhrase(C,"cta")})))}var A="settings.archivedClassrooms",I=o.T.encloseNamespace(A),N={delete:{application:h.O.CLASSROOMS,action:p.e.Classrooms.DELETE_CLASSROOM},retrieve:{application:h.O.CLASSROOMS,action:p.e.Classrooms.RETRIEVE_CLASSROOM}};function L(){(0,g.M)({title:I("pageTitle")});var e=(0,f.Z)(),t=(0,l.I0)(),r=function(e){return y.F.getArchived(e)},p=function(e){return a.a.getFetch(t)(r(e))},h=a.a.useBasicFetch(d.L.config()),w=a.a.useBasicFetch(m.N.currentUser()),O=(0,v.K)(r,p,(function(t,r){if(1===t)return(0,u.r)(r);e.error(o.T.getPhrase(A,"error"))})),C=O.items,L=O.hasMore,k=O.isFetching,j=O.nextCursor;return n.createElement(E.d,{heading:I("heading"),breadcrumbs:[I("breadcrumb")]},!!(null==C?void 0:C.length)&&n.createElement(i.W,null,n.createElement(s.x,{namespace:A,phrase:"note"})),C&&h.hasCompleted?C.length?n.createElement(n.Fragment,null,n.createElement(b.D,{allClassrooms:C,imageCdnUrl:h.data.imageCdnUrl,appLinks:N,refreshTable:k,currentUser:w.data}),(L||k)&&n.createElement(c._,{isFetching:k,fetchNext:p,nextCursor:j})):n.createElement(R,null):n.createElement(S.I,null))}}}]);
2
+ //# sourceMappingURL=8010-e9163f5bee-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8010-e9163f5bee-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/warning-alert.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/WarningAlert.tsx","file:///app/packages/libs/shared/src/constants/DragOverlayStyles.ts","file:///app/packages/libs/shared/src/components/table/TableUtils.ts","file:///app/packages/libs/shared/src/components/table/table.scss","file:///app/packages/libs/shared/src/components/table/Table.tsx","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/views/archived-classrooms/empty-state/ArchivedClassroomsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/settings/views/archived-classrooms/ArchivedClassroomsView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"eCi4v\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './warning-alert.scss';\n\ninterface Props extends HashObject {\n className?: string;\n}\n\ntype WarningAlertProps = React.PropsWithChildren<Props>;\n\nexport function WarningAlert(props: WarningAlertProps): JSX.Element {\n return (\n <div className={`alert alert-warning d-flex align-items-center px-2 mb-3 ${props.className || ''}`}>\n <SvgContainer\n svgName={cvSvgLibrary.WarningOutline}\n className={`svg-container me-2 ${styles.icon}`}\n />\n <div>\n {props.children}\n </div>\n </div>\n );\n}","export const DragOverlayStyles = { opacity: '0.8', cursor: 'grabbing' };","import React from 'react';\nimport { PluginHook, useBlockLayout, useFilters, useFlexLayout, useGlobalFilter, useRowSelect, useSortBy } from 'react-table';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface PluginOptions {\n allowFiltering?: boolean;\n allowGlobalFiltering?: boolean;\n layout?: 'flex' | 'block';\n}\n\nexport function getPlugins<T extends HashObject>(props: PluginOptions): PluginHook<T>[] {\n let plugins: PluginHook<T>[] = [\n useSortBy,\n useRowSelect,\n props.layout === 'flex' ? useFlexLayout : useBlockLayout\n ];\n\n if (props.allowFiltering)\n plugins = [\n ...plugins,\n useFilters\n ];\n\n if (props.allowGlobalFiltering)\n plugins = [\n ...plugins,\n useGlobalFilter\n ];\n\n return plugins;\n}\n\nexport function getSelectedRowIds(ids: string[]): Record<string, boolean> {\n const idHash: Record<string, boolean> = {};\n\n ids.forEach(id => idHash[id] = true);\n\n return idHash;\n}\n\ninterface TableScrollState {\n canScrollLeft: boolean;\n canScrollRight: boolean;\n}\n\nfunction calculateScrollState(ref: React.MutableRefObject<HTMLDivElement>): TableScrollState {\n const canScrollLeft = ref.current?.scrollLeft > 0;\n const canScrollRight = (ref.current?.scrollLeft + 1) < ref.current?.scrollWidth - ref.current?.clientWidth;\n\n return { canScrollLeft, canScrollRight };\n}\n\ninterface UseTableScroll {\n ref: (el: HTMLDivElement) => void;\n scrollState: TableScrollState;\n scroll: (scrollBy: number) => void;\n}\n\nexport function useTableScroll(): UseTableScroll {\n const elRef = React.useRef<HTMLDivElement>(null);\n const [ scrollState, setScrollState ] = React.useState<TableScrollState>(calculateScrollState(elRef));\n\n function onScroll(): void {\n setScrollState(calculateScrollState(elRef));\n }\n\n function scroll(scrollBy: number): void {\n elRef.current?.scrollBy({ left: scrollBy, top: 0, behavior: 'smooth' });\n }\n\n const throttledOnScroll = FunctionHelper.throttle(onScroll, 200);\n\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (elRef.current) {\n elRef.current?.removeEventListener('scroll', throttledOnScroll);\n }\n\n if (el) {\n setScrollState(calculateScrollState(elRef));\n el.addEventListener('scroll', throttledOnScroll);\n }\n\n elRef.current = el;\n }, []);\n\n React.useEffect(() => {\n if (elRef?.current) {\n setScrollState(calculateScrollState(elRef));\n }\n }, [elRef]);\n\n return { ref, scrollState, scroll };\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortIndicator\":\"gFhu0\",\"scrollContainer\":\"sWUp9\",\"scrollbarTrack\":\"Vn2qM\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\nimport {\n Cell,\n Column as BaseColumn,\n HeaderGroup,\n HeaderProps as BaseHeaderProps,\n IdType,\n Row,\n SortingRule,\n TableOptions,\n TableRowProps,\n useTable } from 'react-table';\nimport { DragEndEvent } from '@dnd-kit/core';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { PropsWithSortableItemProps, SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { DragOverlayStyles } from 'libs/shared/constants/DragOverlayStyles';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getPlugins, getSelectedRowIds, useTableScroll } from './TableUtils';\n\nimport styles from './table.scss';\n\nexport interface TableTheme {\n table?: string;\n header?: string;\n headerRow?: string;\n headerCell?: string;\n body?: string;\n row?: string | ((row: Row<any>) => string);\n selectedRow?: string;\n cell?: string | ((row?: Row<any>, cell?: Cell<any, any>) => string);\n sortIndicator?: string;\n}\n\nexport type HeaderProps<T extends HashObject> = BaseHeaderProps<T> & {\n renderSortIndicator: () => void;\n}\n\nexport type Column<T extends HashObject> = BaseColumn<T> & {\n hideSortIndicator?: boolean;\n}\n\ninterface SortIndicatorProps<T extends HashObject> {\n column: HeaderGroup<T>;\n theme?: TableTheme;\n}\n\nfunction SortIndicator<T extends HashObject>(props: SortIndicatorProps<T>): JSX.Element {\n if (!props.column.canSort)\n return <></>;\n\n return (\n <span\n className={\n `${styles.sortIndicator}\n ${!props.column.isSorted ? 'text-secondary' : ''}\n ${props.theme?.sortIndicator ?? ''}`\n }\n >\n <SvgContainer\n svgName={(props.column.isSortedDesc || !props.column.isSorted)\n ? cvSvgLibrary.ArrowRight\n : cvSvgLibrary.ArrowLeft\n }\n size={SvgContainerSize.Small}\n />\n </span>\n );\n}\n\ninterface BaseTableProps<T extends HashObject> {\n /**\n * Must be memoized.\n */\n data: T[];\n\n /**\n * Must be memoized.\n * \n * For documentation on Column Options, see https://react-table.tanstack.com/docs/api/useTable#column-options\n */\n columns: Column<T>[];\n\n theme?: TableTheme;\n\n onSelectRow?: (row: Row<T>) => void;\n\n onSelectCell?: (cell: Cell<T>) => void;\n\n onRowMouseOver?: (row: Row<T>) => void;\n\n onRowMouseLeave?: (row: Row<T>) => void;\n\n allowSelectMultipleRows?: boolean;\n\n initialSelectedRowIds?: string[];\n\n getRowId?: (row: T) => string;\n\n getRowAppLink?: (row: Row<T>) => Core.AppLink;\n\n enableSort?: boolean;\n\n manualSort?: boolean;\n\n onSort?: (sortingRule: SortingRule<T>[]) => void;\n \n // Opt-in to utilise react-table's useFilter hook.\n allowFiltering?: boolean;\n\n // Opt-in to utilise react-table's useGlobalFilter hook.\n allowGlobalFiltering?: boolean;\n\n // Use either a flex layout or a block layout. Default is flex.\n layout?: 'flex' | 'block';\n\n // Used by useGlobalFilter hook, needs to be enabled by prop above.\n globalFilter?: string;\n\n // Set initial state of hidden columns in react-table.\n hiddenColumns?: IdType<T>[];\n\n // Determine whether hidden columns should be preserved on a table update event.\n autoResetHiddenColumns?: boolean;\n\n // Determine whether sort order state should be preserved on a table update event.\n autoResetSortBy?: boolean;\n\n // Determine whether rows are sortable by drag and drop\n enableSortableRows?: boolean;\n\n onSortingRowsEnd?: (event: DragEndEvent) => void;\n\n // Set initial state of sorting in react-table\n initialSortBy?: SortingRule<T>[];\n\n emptyState?: JSX.Element;\n}\n \ntype SortableRowProps = PropsWithSortableItemProps<TableRowProps>;\n\nfunction BaseTable<T extends HashObject>(props: BaseTableProps<T>): JSX.Element {\n const tableOptions: TableOptions<T> = {\n columns: props.columns,\n data: props.data,\n disableSortBy: !props.enableSort,\n manualSortBy: props.manualSort,\n autoResetHiddenColumns: props.autoResetHiddenColumns,\n autoResetSortBy: props.autoResetSortBy,\n initialState: {\n sortBy: props.initialSortBy || []\n }\n };\n\n if (props.initialSelectedRowIds)\n tableOptions.initialState = { selectedRowIds: getSelectedRowIds(props.initialSelectedRowIds) };\n\n if (props.getRowId)\n tableOptions.getRowId = props.getRowId;\n\n const {\n getTableProps,\n getTableBodyProps,\n headerGroups,\n rows,\n prepareRow,\n toggleAllRowsSelected,\n setGlobalFilter,\n setHiddenColumns,\n state: { sortBy }\n } = useTable<T>(tableOptions, ...getPlugins<T>({ ...props }));\n\n function getTableRowsClass(row: Row<T>) {\n let className = FunctionHelper.isFunction(props.theme?.row)\n ? props.theme.row(row)\n : props.theme?.row ?? '';\n\n if (row.isSelected && props.theme?.selectedRow)\n className += ` ${props.theme?.selectedRow}`;\n\n if (props.onSelectRow)\n className += ' cursor-pointer';\n\n if (props.enableSortableRows)\n className += ' cursor-grab';\n\n return className;\n }\n\n function renderTableRows() {\n if (!rows.length && props.emptyState)\n return props.emptyState;\n \n return rows.map(row => {\n prepareRow(row);\n \n const className = getTableRowsClass(row);\n const rowAppLink = !!props.getRowAppLink && props.getRowAppLink(row);\n\n function onClickRow(): void {\n if (!props.onSelectRow)\n return;\n\n if (!props.allowSelectMultipleRows)\n toggleAllRowsSelected(false);\n \n props.onSelectRow(row);\n row.toggleRowSelected(true);\n }\n\n function getSortableProps(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any) {\n if ('dragAttributes' in props && 'dragListeners' in props) {\n return {\n ...props.dragAttributes,\n ...props.dragListeners,\n 'aria-roledescription': 'Sortable row',\n ref\n };\n }\n\n return {};\n }\n\n function renderRow(props: TableRowProps | PropsWithSortableItemProps<TableRowProps>, ref?: any): JSX.Element {\n const sortableProps = getSortableProps(props, ref);\n\n if (rowAppLink) {\n return (\n <div\n role='row'\n key={row.id}\n >\n <AppLink\n {...props}\n {...sortableProps}\n className={className}\n appLink={rowAppLink}\n >\n {renderCells(row)}\n </AppLink>\n </div>\n );\n }\n\n return (\n <div\n {...props}\n {...sortableProps}\n key={row.id}\n role='row'\n className={className}\n onClick={onClickRow}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n const rowProps = row.getRowProps();\n\n if (props.enableSortableRows) {\n return (\n <SortableItemWrapper\n id={row.original.id}\n key={row.id}\n childProps={rowProps}\n childComponent={React.forwardRef(\n (props: SortableRowProps, ref: React.LegacyRef<HTMLDivElement>) => (renderRow(props, ref))\n )}\n />\n );\n }\n\n return renderRow(rowProps);\n });\n }\n\n function getDragOverlayClassName(theme: TableTheme): string {\n let className = 'g-0 ';\n\n if (theme)\n className += theme.row;\n\n return className;\n }\n\n function getDragOverlay(id: string) {\n const rowIndex = rows.findIndex(item => item.original.id === id);\n const row = rows[rowIndex];\n \n return (\n <div\n {...props}\n className={getDragOverlayClassName(props.theme)}\n style={DragOverlayStyles}\n >\n {renderCells(row)}\n </div>\n );\n }\n\n function getCellClassName(row: Row<T>, cell: Cell<T>): string {\n let cellClassName = '';\n\n if (typeof props.theme?.cell === 'function')\n cellClassName = props.theme.cell(row, cell);\n\n if (typeof props.theme?.cell === 'string')\n cellClassName = props.theme.cell;\n\n if (props.onSelectCell)\n cellClassName += ' cursor-pointer';\n\n return cellClassName;\n }\n\n function renderCells(row: Row<T>): JSX.Element[] {\n return row.cells.map(cell => {\n const cellClassName = getCellClassName(row, cell);\n\n function onClickCell(): void {\n props.onSelectCell && props.onSelectCell(cell);\n }\n\n return (\n <div key={cell.column.id} {...cell.getCellProps()} className={cellClassName} onClick={onClickCell} >\n {cell.render('Cell')}\n </div>\n );\n });\n }\n\n React.useEffect(() => {\n if (!props.onSort)\n return;\n\n props.onSort(sortBy);\n }, [sortBy]);\n\n React.useEffect(() => {\n if (!props.globalFilter)\n return;\n\n setGlobalFilter(props.globalFilter);\n }, [props.globalFilter]);\n\n React.useEffect(() => {\n if (!props.hiddenColumns)\n return;\n\n setHiddenColumns(props.hiddenColumns);\n }, [props.hiddenColumns && props.hiddenColumns.length]);\n\n return (\n <div {...getTableProps()} className={props.theme?.table ?? ''}>\n <div className={props.theme?.header ?? ''}>\n {headerGroups.map(headerGroup => (\n <div {...headerGroup.getHeaderGroupProps()} className={props.theme?.headerRow ?? ''}>\n {headerGroup.headers.map(column => (\n <div {...column.getHeaderProps(column.getSortByToggleProps())} className={props.theme?.headerCell ?? ''}>\n {column.render('Header', { renderSortIndicator: () => <SortIndicator column={column} theme={props.theme} /> })}\n {!(column as Column<T>).hideSortIndicator &&\n <SortIndicator column={column} theme={props.theme} />\n }\n </div>\n ))}\n </div>\n ))}\n </div>\n <div {...getTableBodyProps()} className={props.theme?.body ?? ''}>\n { props.enableSortableRows ? (\n <SortableContainerWrapper\n ids={rows.map(row => row.original.id)}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortingRowsEnd}\n >\n {renderTableRows()}\n </SortableContainerWrapper>\n ) : (\n renderTableRows()\n )}\n </div>\n </div>\n );\n}\n\ninterface TableProps<T extends HashObject> extends BaseTableProps<T> {\n enableSlider?: boolean;\n scrollIncrement?: number;\n scrollContainerClassName?: string;\n scrollable?: boolean;\n initialSortBy?: SortingRule<T>[];\n}\n\nTable.defaultProps = {\n scrollIncrement: 250,\n scrollable: false,\n layout: 'flex'\n};\n\nexport function Table<T extends HashObject>(props: TableProps<T>): JSX.Element {\n const { enableSlider, scrollIncrement, scrollable, ...tableProps } = props;\n\n const { ref, scrollState, scroll } = useTableScroll();\n\n if (scrollable) {\n return (\n <Scrollbars\n renderTrackHorizontal={() => <div className={styles.scrollbarTrack} />}\n autoHeightMax={10000}\n autoHeight\n >\n <BaseTable {...tableProps} />\n </Scrollbars>\n );\n }\n\n if (!enableSlider)\n return <BaseTable {...tableProps} />;\n\n function onClickScroll(direction: 'left' | 'right'): void {\n scroll(scrollIncrement * (direction === 'right' ? 1 : -1));\n }\n\n return (\n <div className='mx-n4 overflow-x-hidden overflow-y-hidden'>\n <div className='px-4'>\n <div className='position-relative'>\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => onClickScroll('left')}\n hide={!scrollState.canScrollLeft}\n />\n <div className={`${styles.scrollContainer} ${props.scrollContainerClassName}`} ref={ref}>\n <BaseTable {...tableProps } />\n </div>\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => onClickScroll('right')}\n hide={!scrollState.canScrollRight}\n />\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'settings.archivedClassroomsEmptyState';\n\nexport function ArchivedClassroomsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.CLASSROOMS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }}\n className='btn btn-dark'\n text={LanguageService.getPhrase(namespace, 'cta')}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsTable } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { PartialClassroomsTable } from 'apps/classrooms/components/classrooms-table/partial-classrooms-table/PartialClassroomsTable';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { ArchivedClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport { ArchivedClassroomsEmptyState } from './empty-state/ArchivedClassroomsEmptyState';\n\nconst namespace = 'settings.archivedClassrooms';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst applinks: ArchivedClassroomsTableApplinks = {\n delete: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.DELETE_CLASSROOM\n },\n retrieve: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.RETRIEVE_CLASSROOM\n }\n};\n\nexport function ArchivedClassroomsView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n\n const getClassroomsRequest = (cursor?: string) => ClassroomRequests.getArchived(cursor);\n const fetchNext = (cursor?: string) => Flight.getFetch(dispatch)(getClassroomsRequest(cursor));\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const {\n items,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Classroom>(getClassroomsRequest, fetchNext, onError);\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('breadcrumb')]}\n >\n {!!items?.length && (\n <WarningAlert><Text namespace={namespace} phrase='note'/></WarningAlert>\n )}\n\n {(() => {\n if (!items || !config.hasCompleted)\n return <PartialClassroomsTable />;\n \n if (!items.length)\n return <ArchivedClassroomsEmptyState />;\n\n return (\n <>\n <ClassroomsTable\n allClassrooms={items}\n imageCdnUrl={config.data.imageCdnUrl}\n appLinks={applinks}\n refreshTable={isFetching}\n currentUser={currentUser.data}\n />\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n )}\n </>\n );\n })()}\n </SettingsLayout>\n );\n}"],"names":["WarningAlert","props","className","SvgContainer","svgName","children","DragOverlayStyles","opacity","cursor","calculateScrollState","ref","canScrollLeft","current","scrollLeft","canScrollRight","scrollWidth","clientWidth","SortIndicator","column","canSort","isSorted","theme","sortIndicator","isSortedDesc","size","S","BaseTable","ids","idHash","tableOptions","columns","data","disableSortBy","enableSort","manualSortBy","manualSort","autoResetHiddenColumns","autoResetSortBy","initialState","sortBy","initialSortBy","initialSelectedRowIds","selectedRowIds","forEach","id","getRowId","useTable","plugins","useSortBy","useRowSelect","layout","useFlexLayout","useBlockLayout","allowFiltering","useFilters","allowGlobalFiltering","useGlobalFilter","getPlugins","getTableProps","getTableBodyProps","headerGroups","rows","prepareRow","toggleAllRowsSelected","setGlobalFilter","setHiddenColumns","state","renderTableRows","length","emptyState","map","row","FunctionHelper","isSelected","selectedRow","onSelectRow","enableSortableRows","getTableRowsClass","rowAppLink","getRowAppLink","onClickRow","allowSelectMultipleRows","toggleRowSelected","renderRow","sortableProps","dragAttributes","dragListeners","getSortableProps","role","key","AppLink","appLink","renderCells","onClick","rowProps","getRowProps","SortableItemWrapper","original","childProps","childComponent","cells","cell","cellClassName","onSelectCell","getCellClassName","getCellProps","render","onSort","globalFilter","hiddenColumns","table","header","headerGroup","getHeaderGroupProps","headerRow","headers","getHeaderProps","getSortByToggleProps","headerCell","renderSortIndicator","hideSortIndicator","body","SortableContainerWrapper","getDragOverlay","rowIndex","findIndex","item","style","onSortEnd","onSortingRowsEnd","Table","enableSlider","scrollIncrement","scrollable","tableProps","elRef","scrollState","setScrollState","throttledOnScroll","el","removeEventListener","addEventListener","scroll","scrollBy","left","top","behavior","useTableScroll","renderTrackHorizontal","autoHeightMax","autoHeight","onClickScroll","direction","WidgetButton","W","hide","scrollContainerClassName","defaultProps","namespace","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","breadcrumbs","name","i","active","heading","headingButton","description","ArchivedClassroomsEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","text","LanguageService","getPhrase","applinks","delete","retrieve","ArchivedClassroomsView","useSetPageMetadata","title","alerts","dispatch","getClassroomsRequest","ClassroomRequests","fetchNext","config","ConfigRequests","currentUser","UserRequests","pageNumber","httpStatus","error","items","hasMore","isFetching","nextCursor","hasCompleted","ClassroomsTable","allClassrooms","imageCdnUrl","appLinks","refreshTable","InfiniteScrollFooter","PartialClassroomsTable"],"sourceRoot":""}
@@ -0,0 +1,3 @@
1
+ /*! For license information please see 8410-1f1fd5ccf0-lite.chunk.js.LICENSE.txt */
2
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8410],{38502:(e,t,r)=>{r.d(t,{r:()=>m});var n=r(32735),a=r(49985),o=r(15611),i=r(18559),c=r(11607),s=r(83914),l=r(22771);function u(e){return n.createElement(n.Fragment,null,!!e.tab.svgName&&n.createElement("div",{className:e.tab.name?"pe-1":""},n.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&n.createElement("div",{className:"ps-2"},n.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function m(e){var t;return n.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},n.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return n.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?n.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},n.createElement(u,{tab:e})):n.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},n.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},59278:(e,t,r)=>{r.d(t,{d:()=>d});var n=r(32735),a=r(23481),o=r(83657),i=r(38502),c=r(28469),s=r(83345),l=r(79967),u=r(14070),m=r(97291);const h={searchContainer:"rwTB7"};var f="classrooms.classroomsHeader",p=a.T.encloseNamespace(f);function d(e){var t,r=(0,l.k)(),a=r.xs||r.sm,d=[{name:p("classroomsTab"),appLink:{application:m.O.CLASSROOMS,action:u.e.Classrooms.HOME},active:"classrooms"===e.activeTab}];return e.hasShareFlowV2&&d.push({name:p("openClassroomsTab"),appLink:{application:m.O.CLASSROOMS,action:u.e.Classrooms.OPEN_CLASSROOMS},active:"open-classrooms"===e.activeTab}),n.createElement("div",null,!!e.hasRostering&&n.createElement("div",{className:"my-3"},n.createElement(c.P,{type:"general"})),n.createElement("div",{className:"d-flex align-items-center mb-3"},n.createElement("h1",{className:"flex-fill h2 me-3 my-1"},n.createElement(s.x,{namespace:f,phrase:"heading"})),e.searchBar&&n.createElement("div",{className:"d-flex"},!a&&n.createElement("div",{className:"".concat(h.searchContainer," d-flex mb-2 mb-sm-0 me-2")},e.searchBar),n.createElement(o.e,{actions:null!==(t=e.actions)&&void 0!==t?t:[],actionsDropdownClassName:"btn btn-outline-dark"}))),d.length>1&&n.createElement("div",{className:"mb-3"},n.createElement(i.r,{tabs:d})),a&&e.searchBar?n.createElement("div",{className:"mb-3"},e.searchBar):null)}},63578:(e,t,r)=>{r.d(t,{Y:()=>h});var n=r(70680),a=r(23481),o=r(20354),i=r(94644),c=r(31949),s=r(69883),l=r(60115),u=r(88630),m=r(1211),h=function(e,t){var r=o.a.useBasicFetch(c.N.currentUser()),h=(0,s.Z)(),f=(0,n.I0)(),p=function(n){return e?(null==t?void 0:t.withStudentsCount)?m.J.searchClassroomsV4(e,n):m.J.searchClassrooms(e,r.data.customerId,n):(null==t?void 0:t.withStudentsCount)?u.F.getPublishedWithStudents(r.data.id,n):u.F.getPublished(r.data.id,n)},d=function(e){return o.a.getFetch(f)(p(e))},v=(0,l.K)(!!r.data&&p,d,(function(e,t){if(1===e)return(0,i.r)(t);h.error(a.T.getPhrase("classrooms.hooks","error"))}),(function(t){return e?t.results:t.data}));return Object.assign(Object.assign({},v),{fetchNext:d})}},86828:(e,t,r)=>{r.r(t),r.d(t,{ClassroomsView:()=>V});var n=r(32735),a=r(23481),o=r(81886),i=r(20354),c=r(65858),s=r(34055),l=r(87801),u=r(83345),m=r(16714),h=r(67058),f=r(39151),p=r(44538),d=r(31949),v=r(79967),y=r(91286),g=r(22902),E=r(79612),b=r(37802),w=r(35223),S=r(14070),C=r(97291),L=r(59278),x=r(90681),O=r(19948),N=r(88630),k=r(63578),F=r(97958),_=r(99742),P="classrooms.classroomsEmptyState";function T(e){var t=e.query;return n.createElement(u.D.Provider,{value:P},n.createElement(F.u,null,n.createElement(F.u.Image,{src:_.W.EmptyStates.Classrooms.CLASSROOMS}),n.createElement(F.u.Heading,null,n.createElement(u.x,{phrase:"empty",options:{query:t}}))))}var R="classrooms.classroomsEmptyState";function A(){return n.createElement(u.D.Provider,{value:R},n.createElement(F.u,null,n.createElement(F.u.Image,{src:_.W.EmptyStates.Classrooms.CLASSROOMS}),n.createElement(F.u.Heading,null,n.createElement(u.x,{phrase:"heading"})),n.createElement(F.u.Info,null,n.createElement(u.x,{phrase:"info"})),n.createElement(F.u.Cta,{text:a.T.getPhrase(R,"cta"),icon:w.vn.Plus,appLink:{application:C.O.CLASSROOMS,action:S.e.Classrooms.NEW_CLASSROOM}})))}function j(e){return j="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},j(e)}function M(){M=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",s=o.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function u(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),c=new _(n||[]);return a(i,"_invoke",{value:O(e,r,c)}),i}function m(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=u;var h="suspendedStart",f="suspendedYield",p="executing",d="completed",v={};function y(){}function g(){}function E(){}var b={};l(b,i,(function(){return this}));var w=Object.getPrototypeOf,S=w&&w(w(P([])));S&&S!==r&&n.call(S,i)&&(b=S);var C=E.prototype=y.prototype=Object.create(b);function L(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function x(e,t){function r(a,o,i,c){var s=m(e[a],e,o);if("throw"!==s.type){var l=s.arg,u=l.value;return u&&"object"==j(u)&&n.call(u,"__await")?t.resolve(u.__await).then((function(e){r("next",e,i,c)}),(function(e){r("throw",e,i,c)})):t.resolve(u).then((function(e){l.value=e,i(l)}),(function(e){return r("throw",e,i,c)}))}c(s.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===p)throw Error("Generator is already running");if(a===d){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var c=n.delegate;if(c){var s=N(c,n);if(s){if(s===v)continue;return s}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=d,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=p;var l=m(t,r,n);if("normal"===l.type){if(a=n.done?d:f,l.arg===v)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(a=d,n.method="throw",n.arg=l.arg)}}}function N(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,N(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=m(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function k(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function F(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function _(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(k,this),this.reset(!0)}function P(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(j(t)+" is not iterable")}return g.prototype=E,a(C,"constructor",{value:E,configurable:!0}),a(E,"constructor",{value:g,configurable:!0}),g.displayName=l(E,s,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,E):(e.__proto__=E,l(e,s,"GeneratorFunction")),e.prototype=Object.create(C),e},t.awrap=function(e){return{__await:e}},L(x.prototype),l(x.prototype,c,(function(){return this})),t.AsyncIterator=x,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new x(u(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},L(C),l(C,s,"Generator"),l(C,i,(function(){return this})),l(C,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=P,_.prototype={constructor:_,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(F),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return c.type="throw",c.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var s=n.call(i,"catchLoc"),l=n.call(i,"finallyLoc");if(s&&l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),F(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;F(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:P(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}var I=function(e,t,r,n){return new(r||(r=Promise))((function(a,o){function i(e){try{s(n.next(e))}catch(e){o(e)}}function c(e){try{s(n.throw(e))}catch(e){o(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}s((n=n.apply(e,t||[])).next())}))},B="classrooms.classrooms",G=a.T.encloseNamespace(B),q=C.O.CLASSROOMS,D={application:q,action:S.e.Classrooms.NEW_CLASSROOM},Z={link:{application:q,action:S.e.Classrooms.GENERATE_JOIN_LINK},archive:{application:q,action:S.e.Classrooms.ARCHIVE_CLASSROOM},edit:{application:q,action:S.e.Classrooms.EDIT_CLASSROOM},classroom:{application:q,action:S.e.Classrooms.CLASSROOM_HOME}};function H(){return n.createElement(s.W,{id:"classroom-search",searchAppLink:{application:C.O.CLASSROOMS,action:S.e.Classrooms.HOME},searchIndices:["classroom"],analyticsOptions:{entity:c.py.Classroom,location:c.LZ.ClassroomsList},placeholder:G("searchBarPlaceholder")})}function V(e){var t,r,s,S,C=(0,b.r)(null).hasShareFlowV2,F=(0,g.T)().hasPermissions,_=(0,v.k)();(0,E.M)({title:G("pageTitle")});var P=i.a.useGetFetchAsync(),R=i.a.useBasicFetch(d.N.currentUser()),j=i.a.useBasicFetch(f.L.config()),q=i.a.useBasicFetch(p.K.getRostering()),V=(null===(t=q.data)||void 0===t?void 0:t.status)&&"None"!==q.data.status,W=i.a.useBasicFetch(N.F.getPinnedClassrooms(null===(r=R.data)||void 0===r?void 0:r.id,null===(s=R.data)||void 0===s?void 0:s.customerId)),U=(0,k.Y)(e.query);function J(e,t,r,n){return I(this,void 0,void 0,M().mark((function a(){var o;return M().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:return o=t?N.F.pinClassroom:N.F.unpinClassroom,a.prev=1,a.next=4,P(o(e));case 4:r(),a.next=10;break;case 7:a.prev=7,a.t0=a.catch(1),n();case 10:case"end":return a.stop()}}),a,null,[[1,7]])})))}if((0,y.v)(W),!F(m.C.ViewClassrooms))return o.Q.Ry.throw(new h.d),n.createElement(n.Fragment,null);var Y=!!(null===(S=null==U?void 0:U.items)||void 0===S?void 0:S.length);return n.createElement(u.D.Provider,{value:B},n.createElement("div",{className:"px-3"},n.createElement(L.d,{searchBar:Y||e.query?n.createElement(H,null):null,actions:[{label:a.T.getPhrase(B,"newClassroom"),appLink:D,svgName:w.vn.Plus,className:"btn btn-outline-dark",disabled:V,tooltip:V?G("disabledByRostering"):"",analyticsOptions:{actionType:c.Vw.Create,entity:c.py.Classroom,workflowPhase:c.eu.Start,location:c.LZ.ClassroomsList},button:!_.xs}],activeTab:"classrooms",hasRostering:V,hasShareFlowV2:C}),function(){var t,r;return U.items&&W.hasCompleted&&q.hasCompleted?Y||e.query?!Y&&e.query?n.createElement(T,{query:e.query}):n.createElement(n.Fragment,null,n.createElement(x.D,{pinnedClassrooms:null!==(r=null===(t=W.data)||void 0===t?void 0:t.data)&&void 0!==r?r:[],allClassrooms:U.items,query:e.query,imageCdnUrl:j.data.imageCdnUrl,appLinks:Z,onTogglePin:J,refreshTable:U.isFetching,currentUser:R.data,hasRostering:V}),(U.isFetching||U.nextCursor)&&n.createElement(l._,{isFetching:U.isFetching,fetchNext:U.fetchNext,nextCursor:U.nextCursor})):n.createElement(A,null):n.createElement(O.I,null)}()))}},22771:(e,t,r)=>{r.d(t,{Z:()=>n});const n={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
3
+ //# sourceMappingURL=8410-1f1fd5ccf0-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8410-1f1fd5ccf0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-header/classrooms-header.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-header/ClassroomsHeader.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useFetchClassrooms.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms/empty-state/ClassroomsEmptySearchState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms/empty-state/ClassroomsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classrooms/ClassroomsView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"searchContainer\":\"rwTB7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionOptions, Actions as ActionButton } from 'libs/shared/components/actions/Actions';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './classrooms-header.scss';\n\nconst namespace = 'classrooms.classroomsHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomsHeaderProps {\n activeTab: 'classrooms' | 'open-classrooms';\n actions?: ActionOptions[];\n searchBar?: React.ReactNode;\n hasRostering: boolean;\n hasShareFlowV2: boolean;\n}\n\nexport function ClassroomsHeader(props: ClassroomsHeaderProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const isMobile = breakpoints.xs || breakpoints.sm;\n \n const tabs: PillTab[] = [{\n name: getPhrase('classroomsTab'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n },\n active: props.activeTab === 'classrooms'\n }];\n\n if (props.hasShareFlowV2) {\n tabs.push({\n name: getPhrase('openClassroomsTab'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOMS\n },\n active: props.activeTab === 'open-classrooms'\n });\n }\n\n return (\n <div>\n {!!props.hasRostering && (\n <div className='my-3'>\n <RosteringAlert type='general' />\n </div>\n )}\n\n <div className='d-flex align-items-center mb-3'>\n <h1 className='flex-fill h2 me-3 my-1'><Text namespace={namespace} phrase='heading' /></h1>\n\n {props.searchBar && (\n <div className='d-flex'>\n {!isMobile && (\n <div className={`${styles.searchContainer} d-flex mb-2 mb-sm-0 me-2`}>\n {props.searchBar}\n </div>\n )}\n\n <ActionButton\n actions={props.actions ?? []}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n )}\n </div>\n\n {tabs.length > 1 && (\n <div className='mb-3'>\n <PillTabSelector tabs={tabs} />\n </div>\n )}\n\n {isMobile && props.searchBar ? (\n <div className='mb-3'>\n {props.searchBar}\n </div>\n ) : null}\n </div>\n );\n}","import { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList, UseInfiniteListResult } from 'libs/shared/hooks/UseInfiniteList';\nimport { BasePaginatedCollection, Classroom, CurrentUser } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { SearchRequests } from 'apps/search/flight-requests/SearchRequests';\n\nconst namespace = 'classrooms.hooks';\n\nexport type GetClassroomsResponse = UseInfiniteListResult<Classroom> & {\n fetchNext: (cursor?: string) => void;\n};\n\ninterface UseFetchClassroomOptions {\n withStudentsCount?: boolean;\n}\n\nexport const useFetchClassrooms = (query?: string, options?: UseFetchClassroomOptions): GetClassroomsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const alerts = useAlerts();\n const dispatch = useDispatch();\n\n const getClassroomsRequest = (cursor?: string) => {\n if (!query) {\n if (options?.withStudentsCount) {\n return ClassroomRequests.getPublishedWithStudents(currentUser.data.id, cursor);\n }\n\n return ClassroomRequests.getPublished(currentUser.data.id, cursor);\n }\n \n if (options?.withStudentsCount) {\n return SearchRequests.searchClassroomsV4(query, cursor);\n }\n \n return SearchRequests.searchClassrooms(query, currentUser.data.customerId, cursor);\n };\n\n const fetchNextPage = (cursor?: string) => Flight.getFetch(dispatch)(getClassroomsRequest(cursor));\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n }\n\n const response = useInfiniteList<Classroom, SearchResults<Classroom> | BasePaginatedCollection<Classroom>>(\n currentUser.data ? getClassroomsRequest : false,\n fetchNextPage,\n onError,\n response => {\n if (query)\n return (response as SearchResults<Classroom>).results;\n\n return (response as BasePaginatedCollection<Classroom>).data;\n }\n );\n\n return {\n ...response,\n fetchNext: fetchNextPage\n };\n};","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\ninterface ClassroomsEmptySearchStateProps {\n query: string;\n}\n\nexport function ClassroomsEmptySearchState({ query }: ClassroomsEmptySearchStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.CLASSROOMS} />\n\n <EmptyState.Heading><Text phrase='empty' options={{ query }} /></EmptyState.Heading>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\nexport function ClassroomsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.CLASSROOMS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_CLASSROOM\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ScopedSearchBar } from 'libs/shared/apps/search/components/scoped-search-bar/ScopedSearchBar';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LanguageNamespaceContext } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, ClassroomCollection, Config, CurrentUser, RosteringResponse } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomsHeader } from 'apps/classrooms/components/classrooms-header/ClassroomsHeader';\nimport { ClassroomsTable } from 'apps/classrooms/components/classrooms-table/ClassroomsTable';\nimport { PartialClassroomsTable } from 'apps/classrooms/components/classrooms-table/partial-classrooms-table/PartialClassroomsTable';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useFetchClassrooms } from 'apps/classrooms/hooks/useFetchClassrooms';\nimport { ActiveClassroomsTableApplinks } from 'apps/classrooms/interfaces/ClassroomsTableApplinks';\nimport { ClassroomsEmptySearchState } from 'apps/classrooms/views/classrooms/empty-state/ClassroomsEmptySearchState';\n\nimport { ClassroomsEmptyState } from './empty-state/ClassroomsEmptyState';\n\nconst namespace = 'classrooms.classrooms';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst CLASSROOM_APPLICATION = AppChannels.CLASSROOMS;\n\nconst newClassroomAppLink = {\n application: CLASSROOM_APPLICATION,\n action: Actions.Classrooms.NEW_CLASSROOM\n};\n\nconst classroomsTableApplinks: ActiveClassroomsTableApplinks = {\n link: {\n application: CLASSROOM_APPLICATION,\n action: Actions.Classrooms.GENERATE_JOIN_LINK\n },\n archive: {\n application: CLASSROOM_APPLICATION,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM\n },\n edit: {\n application: CLASSROOM_APPLICATION,\n action: Actions.Classrooms.EDIT_CLASSROOM\n },\n classroom: {\n application: CLASSROOM_APPLICATION,\n action: Actions.Classrooms.CLASSROOM_HOME\n }\n};\n\nfunction ClassroomSearchBar() {\n return (\n <ScopedSearchBar\n id='classroom-search'\n searchAppLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }}\n searchIndices={['classroom']}\n analyticsOptions={{ entity: EntityType.Classroom, location: LocationContext.ClassroomsList }}\n placeholder={getPhrase('searchBarPlaceholder')}\n />\n );\n}\n\ninterface ClassroomsViewProps {\n query: string;\n}\n\nexport function ClassroomsView(props: ClassroomsViewProps): JSX.Element {\n const { hasShareFlowV2 } = useSettings(null);\n const { hasPermissions } = usePermissions();\n const breakpoints = useBreakpoints();\n\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n const fetchAsync = Flight.useGetFetchAsync();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n\n const pinnedClassrooms = Flight.useBasicFetch<ClassroomCollection>(\n ClassroomRequests.getPinnedClassrooms(currentUser.data?.id, currentUser.data?.customerId)\n );\n\n const classroomsResponse = useFetchClassrooms(props.query);\n\n useHandleObjectError(pinnedClassrooms);\n\n async function onTogglePin(\n classroom: Classroom,\n shouldPin: boolean,\n onSuccess: () => void,\n onError: () => void\n ): Promise<void> {\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n try {\n await fetchAsync(request(classroom));\n \n onSuccess();\n } catch (ex) {\n onError();\n }\n }\n\n if (!hasPermissions(PermissionName.ViewClassrooms)) {\n Core.ErrorHelper.throw(new NotFoundError());\n return <></>;\n }\n\n function getActions(): ActionOptions[] {\n return [{\n label: LanguageService.getPhrase(namespace, 'newClassroom'),\n appLink: newClassroomAppLink,\n svgName: cvSvgLibrary.Plus,\n className: 'btn btn-outline-dark',\n disabled: hasRostering,\n tooltip: hasRostering ? getPhrase('disabledByRostering') : '',\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ClassroomsList\n },\n button: !breakpoints.xs\n }];\n }\n\n const hasClassrooms = !!classroomsResponse?.items?.length;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='px-3'>\n <ClassroomsHeader\n searchBar={hasClassrooms || props.query ? <ClassroomSearchBar /> : null}\n actions={getActions()}\n activeTab='classrooms'\n hasRostering={hasRostering}\n hasShareFlowV2={hasShareFlowV2}\n />\n\n {(() => {\n const isFetchingClassrooms = !classroomsResponse.items\n || !pinnedClassrooms.hasCompleted\n || !rostering.hasCompleted;\n\n if (isFetchingClassrooms)\n return <PartialClassroomsTable />;\n\n if (!hasClassrooms && !props.query)\n return <ClassroomsEmptyState />;\n\n if (!hasClassrooms && props.query)\n return <ClassroomsEmptySearchState query={props.query} />;\n\n return (\n <>\n <ClassroomsTable\n pinnedClassrooms={pinnedClassrooms.data?.data ?? []}\n allClassrooms={classroomsResponse.items}\n query={props.query}\n imageCdnUrl={config.data.imageCdnUrl}\n appLinks={classroomsTableApplinks}\n onTogglePin={onTogglePin}\n refreshTable={classroomsResponse.isFetching}\n currentUser={currentUser.data}\n hasRostering={hasRostering}\n />\n {(classroomsResponse.isFetching || classroomsResponse.nextCursor) && (\n <InfiniteScrollFooter\n isFetching={classroomsResponse.isFetching}\n fetchNext={classroomsResponse.fetchNext}\n nextCursor={classroomsResponse.nextCursor}\n />\n )}\n </>\n );\n })()}\n\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","namespace","getPhrase","LanguageService","ClassroomsHeader","breakpoints","useBreakpoints","isMobile","xs","sm","application","action","activeTab","hasShareFlowV2","push","hasRostering","RosteringAlert","Text","phrase","searchBar","actions","actionsDropdownClassName","length","useFetchClassrooms","query","options","currentUser","alerts","dispatch","getClassroomsRequest","cursor","withStudentsCount","customerId","id","fetchNextPage","response","pageNumber","httpStatus","error","results","fetchNext","ClassroomsEmptySearchState","value","EmptyState","src","ImageUrls","ClassroomsEmptyState","text","icon","CLASSROOM_APPLICATION","newClassroomAppLink","classroomsTableApplinks","link","archive","edit","classroom","ClassroomSearchBar","ScopedSearchBar","searchAppLink","searchIndices","entity","location","placeholder","ClassroomsView","useSettings","hasPermissions","usePermissions","useSetPageMetadata","title","fetchAsync","UserRequests","config","ConfigRequests","rostering","RosteringRequests","status","pinnedClassrooms","ClassroomRequests","classroomsResponse","onTogglePin","shouldPin","onSuccess","onError","request","PermissionName","NotFoundError","hasClassrooms","items","label","disabled","tooltip","actionType","workflowPhase","button","hasCompleted","ClassroomsTable","allClassrooms","imageCdnUrl","appLinks","refreshTable","isFetching","nextCursor","InfiniteScrollFooter","PartialClassroomsTable"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8705],{1704:(e,t,r)=>{r.d(t,{l:()=>s});var n=r(32735),a=r(23481),i=r(9111),l=r(13876);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var o=a.T.encloseNamespace("shared.confirmationPopup");function s(e){var t,r,a=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(t,r)||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.")}()),s=a[0],u=a[1];return n.createElement(i.G,{title:e.title,closePopup:e.closePopup},n.createElement(n.Fragment,null,e.children,n.createElement(l.u,null,n.createElement(l.u.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||o("cancel")}),n.createElement(l.u.Submit,{onClick:function(){u(!0),e.onClickConfirm()},text:e.confirmButtonText||o("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton}))))}s.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"}},57266:(e,t,r)=>{r.d(t,{e:()=>l});var n=r(81886),a=r(1048),i=r(75795),l={updateParams:function(e,t){var r=i.O.getCurrentRoute().appLink,l="string"==typeof r.params?n.Q.Ab.DeserializeQueryParams(r.params):r.params;t.keysToRemove&&(l=a.t.omit(l,t.keysToRemove));var c=(null==t?void 0:t.merge)?Object.assign(Object.assign({},l),e):e,o=Object.assign(Object.assign({},r),{params:c});a.t.isEqual(r,o)||n.Q.C$.trigger(o,a.t.omit(t,["merge","keysToRemove"]))}}},48705:(e,t,r)=>{r.d(t,{x:()=>we});var n=r(32735),a=r(23481),i=r(92869),l=r(75896),c=r(97958),o=a.T.encloseNamespace("shared.interactionQuestionsEmptyState");function s(e){return n.createElement(c.u,{className:"rounded h-100 bg-white justify-content-center py-4"},n.createElement(c.u.Image,{src:e.emptyStateImageUrl,size:"small"}),n.createElement(c.u.Info,{className:"w-100"},o("emptyStateText")))}var u=r(69087),m=r(83345),d="shared.interactionResponseList";function f(e){return n.createElement(n.Fragment,null,n.createElement(c.u,{className:"m-4"},n.createElement(c.u.Image,{src:function(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}(),className:"w-25 h-auto"}),n.createElement(c.u.Info,null,n.createElement(m.x,{namespace:d,phrase:function(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}()}))))}function p(e){function t(t){return"rounded-pill bg-light ".concat(function(t){return t===e.filter}(t)?"bg-dark text-white":"")}return n.createElement("div",{className:"d-flex gap-2 m-3"},n.createElement("button",{className:t("marking_required"),onClick:function(){return e.toggleFilter("marking_required")}},n.createElement(m.x,{namespace:d,phrase:"markingRequired"})),n.createElement("button",{className:t("correct"),onClick:function(){return e.toggleFilter("correct")}},n.createElement(m.x,{namespace:d,phrase:"correct"})),n.createElement("button",{className:t("incorrect"),onClick:function(){return e.toggleFilter("incorrect")}},n.createElement(m.x,{namespace:d,phrase:"incorrect"})),n.createElement("button",{className:t("skipped"),onClick:function(){return e.toggleFilter("skipped")}},n.createElement(m.x,{namespace:d,phrase:"skipped"})))}var g=r(86572),b=a.T.encloseNamespace("interactives.interactionResponseListHeader");function y(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return n.createElement("div",{className:"rounded bg-white"},n.createElement("div",{className:"p-2 position-relative"},n.createElement("div",{className:"d-flex"},n.createElement(g.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),!!r&&n.createElement("div",{className:"mt-2"},n.createElement("strong",null,b("suggestedResponse")),n.createElement("p",{className:"m-0"},r))))}var v=a.T.encloseNamespace("shared.submitMarkedAnswers");function h(e){return n.createElement("div",{className:"d-flex justify-content-end"},n.createElement("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled},v("submitAnswers")))}var E=r(26136),w=r(39157),I=r(69186),S=r(36532),k=r(28972),N=r(83140),A=r(80845);const C={awaitingMarking:"PPNkp"};function x(e){return x="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},x(e)}function U(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var j="shared.interactionResponseList",T=a.T.encloseNamespace(j);function O(e){var t,r,a,i,l=(a=n.useState(),i=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(a,i)||function(e,t){if(e){if("string"==typeof e)return U(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?U(e,t):void 0}}(a,i)||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.")}()),o=l[0],s=l[1],d=(r=e.interaction,e.results.students.filter((function(e){return N.A.isInteractionCorrect(r,(0,A.j_)(e))===k.w.AwaitingMarking})).reduce((function(e,t){var r,n;return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=x(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=x(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==x(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(null===(r=t.user)||void 0===r?void 0:r.id)||(null===(n=t.user)||void 0===n?void 0:n.sessionId),!0))}),{})),g=Object.keys(e.markedAnswers).length;if(!(null===(t=e.results.students)||void 0===t?void 0:t.length))return n.createElement("div",{className:"d-flex flex-column h-100"},n.createElement(c.u,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center"},n.createElement(c.u.Image,{src:e.emptyStateImageUrl,size:"small"}),n.createElement(c.u.Heading,null,T("emptyStateHeading")),n.createElement(c.u.Info,{className:"w-100"},T("emptyStateDescription"))));var b=e.results.students.filter((function(t){var r=(0,A.j_)(t),n=N.A.isInteractionCorrect(e.interaction,r),a={correct:k.w.Correct,incorrect:k.w.Incorrect,marking_required:k.w.AwaitingMarking,skipped:k.w.UnAnswered};return!o||o in a&&n===a[o]}));return n.createElement(n.Fragment,null,e.reportsStyling&&n.createElement(y,{interaction:e.interaction}),n.createElement("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom px-3 py-2"},!e.reportsStyling&&n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(m.x,{namespace:j,phrase:"studentAnswers"})),!!Object.keys(d).length&&n.createElement(S.u,{id:"submitAnswers",title:T("demoOnly"),spanHack:e.isDemo},n.createElement("div",{className:"".concat(e.isDemo?"pointer-events-none":""," ").concat(e.reportsStyling?"mt-2":"")},n.createElement(h,{submit:e.submitMarkedAnswers,disabled:!g})))),n.createElement(n.Fragment,null,!e.reportsStyling&&n.createElement(p,{filter:o,toggleFilter:function(e){s(o===e?null:e)}}),!e.reportsStyling&&!b.length&&o&&n.createElement(f,{filter:o,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),b&&n.createElement("ul",{className:"list-unstyled mb-0"},b.map((function(t,r){var a,i,l=(0,E.B)(t.user,e.anonymiseUsers),c=d[(null===(a=t.user)||void 0===a?void 0:a.id)||(null===(i=t.user)||void 0===i?void 0:i.sessionId)],o=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return c&&(o+=" ".concat(C.awaitingMarking," my-1")),n.createElement("li",{key:r,className:e.reportsStyling?"":"border-bottom"},e.reportsStyling?n.createElement(I.O,{interaction:e.interaction,studentResults:t,markedStatus:(0,w.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:o,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):n.createElement(u.d,{interaction:e.interaction,studentResults:t,markedStatus:(0,w.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:o,showFeedback:!0}))}))),e.reportsStyling&&!!d.length&&n.createElement("div",{className:"mt-2"},n.createElement(h,{submit:e.submitMarkedAnswers,disabled:!g}))))}var R=r(34079);function M(e){var t;return n.createElement("div",null,n.createElement("p",{className:"mb-0"},(t=e.interaction.data.sentence)?t.split(/({\d+})/).map((function(t,r){var a=t.match(/{(\d+)}/);if(a){var i=a[1],l=e.interaction.actionableItems.find((function(e){return+e.order==+i}));if(l)return n.createElement("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",key:r},l.name)}return t})):""))}var W=r(7730);const q={row:"fXno_",answerImage:"pDAuW",answerWidth:"YHK27"};function P(e){var t,r;return(null===(r=l.m.first(null===(t=e.interaction)||void 0===t?void 0:t.actionableItems).data)||void 0===r?void 0:r.imageUrl)?n.createElement("div",{className:q.answerWidth},n.createElement(W.n,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})):n.createElement("ul",{className:"".concat(q.answerWidth," list-unstyled row g-2")},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"col-12"},n.createElement("div",{className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border py-1 px-2 m-0")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name)))})))}var B="shared.questionTable";function D(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return r?n.createElement("div",{className:"".concat(q.answerWidth," bg-light-blue rounded p-2 mb-2")},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("p",{className:"fw-semibold mb-2"},n.createElement(m.x,{namespace:B,phrase:"suggestedResponse"}))),n.createElement("p",{className:"mb-0"},r)):n.createElement(n.Fragment,null)}function F(e){return n.createElement("ul",{className:"list-unstyled d-flex gap-2"},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border px-2 py-1 mb-2 w-50")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name))})))}var _=r(38129);function L(e){var t=function(){switch(e.interaction.typeId){case _.Z9.MultipleChoice:return n.createElement(P,{interaction:e.interaction,indexToLetter:$});case _.Z9.TrueOrFalse:return n.createElement(F,{interaction:e.interaction,indexToLetter:$});case _.Z9.ShortAnswer:return n.createElement(D,{interaction:e.interaction});case _.Z9.MissingWord:return n.createElement(M,{interaction:e.interaction});default:return null}}();return t?n.createElement("div",{className:"w-100 mt-3"},t):n.createElement(n.Fragment,null)}var Q=r(40782);function Z(e){return Z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Z(e)}var H=a.T.encloseNamespace("shared.questionTable");function z(e,t,r){var n=e.cells.find((function(e){return e.column.id===r})).value,a=t.cells.find((function(e){return e.column.id===r})).value;return n.awaitingMarking?-1:a.awaitingMarking||n.percentCorrect>=a.percentCorrect?1:-1}function K(e){var t;return n.createElement("div",{className:"d-flex ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function V(e){return n.createElement(K,{className:e.column.isSorted&&"fw-bold"},H(e.phraseKey))}function $(e){return String.fromCharCode(e+"A".charCodeAt(0))}var G=r(8246),J=a.T.encloseNamespace("shared.questionTable");function X(e,t){var r=e.actionableItems.map((function(t,r){return{id:t.id,label:e.typeId===_.Z9.MultipleChoice?$(r):t.name,isCorrect:t.isCorrect,count:0}}));return t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(r,{id:e.id});t&&t.count++}))})),r}function Y(e,t){var r=e.actionableItems.map((function(e){return{id:e.id,label:e.name,isCorrect:e.isCorrect,count:0}}));return r.push({label:J("incorrect"),count:0,isCorrect:!1}),t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(r,{id:e.id});t&&e.status===G.N.Correct?t.count++:l.m.findWhere(r,{label:J("incorrect")}).count++}))})),r}function ee(e,t){var r=[{label:J("correct"),isCorrect:!0,count:0},{label:J("incorrect"),isCorrect:!1,count:0}];return t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){if(e.status===G.N.Correct&&l.m.findWhere(r,{label:J("correct")}).count++,e.status===G.N.Incorrect&&l.m.findWhere(r,{label:J("incorrect")}).count++,e.status===G.N.PendingReview){var t=l.m.findWhere(r,{label:J("pending")});t||(r.push({label:J("pending"),count:0,isCorrect:!1}),t=l.m.findWhere(r,{label:J("pending")})),t.count++}}))})),r}var te=r(83914),re=r(35223),ne="shared.questionTable",ae=a.T.encloseNamespace(ne);function ie(e){var t=function(){if(e.interaction&&e.results){var t;switch(e.interaction.typeId){case _.Z9.ShortAnswer:case _.Z9.Illustration:t=ee;break;case _.Z9.MissingWord:t=Y;break;case _.Z9.MultipleChoice:case _.Z9.TrueOrFalse:t=X}return t(e.interaction,e.results)}}(),r=null==t?void 0:t.reduce((function(e,t){return t.count>e?t.count:e}),0);function a(e){var t="border rounded me-2";return e.count?e.label===ae("pending")?"".concat(t," border-blue bg-light-blue"):e.isCorrect?"".concat(t," border-green bg-light-green"):"".concat(t," border-red bg-light-red"):"".concat(t," border bg-light px-1")}return n.createElement("div",{className:"border border rounded p-3 mb-3"},n.createElement("div",{className:"d-flex align-items-center gap-2 mb-3"},n.createElement("div",{className:"rounded-circle bg-light-teal text-teal"},n.createElement(te.x,{svgName:re.vn.Lightbulb,size:te.S.Large})),n.createElement("h2",{className:"h6 mb-0"},n.createElement("span",null,n.createElement(m.x,{namespace:ne,phrase:"questionSummary"})))),n.createElement("div",{className:"d-flex gap-2"},n.createElement("div",{className:"max-w-25"},null==t?void 0:t.map((function(e){return n.createElement("p",{key:e.label,className:"text-truncate mb-2"},e.label)}))),n.createElement("div",{className:"flex-grow-1"},null==t?void 0:t.map((function(t,i){return n.createElement("div",{key:"".concat(e.interaction.id).concat(i),className:"d-flex mb-2"},n.createElement("div",{className:a(t),style:{width:"".concat(t.count/r*100,"%"),height:20}}),n.createElement("span",null,t.count))})))))}var le=a.T.encloseNamespace("shared.selectedInteractionEmptyState");function ce(e){return n.createElement(c.u,{className:"rounded h-100 bg-white justify-content-center py-4"},n.createElement(c.u.Image,{src:e.emptyStateUrl,size:"small"}),n.createElement(c.u.Info,{className:"w-100"},le("emptyStateText")))}var oe=r(97364),se=r(6748),ue=r(57266);function me(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function de(e){var t,r,a,c,o=(a=n.useState((0,oe.P)(e.sortBy,"correctlyAnswered")),c=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(a,c)||function(e,t){if(e){if("string"==typeof e)return me(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?me(e,t):void 0}}(a,c)||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.")}()),u=o[0],m=o[1],d=function(e,t,r,a){return n.useMemo((function(){var r=(0,A.Q)(e),n=r.reduce((function(e,t,r){return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=Z(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=Z(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Z(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},t.id,r))}),{}),i=r.map((function(e){return Object.assign(Object.assign({},e),{questionNumber:n[e.id],resultsSummary:(0,w.nq)(e,t)})}));if("correctlyAnswered"===(null==a?void 0:a.id)){var c=l.m.sortBy(i,(function(e){return e.resultsSummary.awaitingMarking?-1:e.resultsSummary.percentCorrect}));return a.desc?c.reverse():c}return i}),[r,a])}(e.interactive,e.results,e.refreshTable,l.m.first(u)),f=e.selectedInteractionId&&(0,w.Zs)(e.interactive,e.selectedInteractionId);return n.createElement("div",{className:"row"},n.createElement("div",{className:"col-6 flex-grow-1"},n.createElement(se.i,{key:e.selectedInteractionId,columns:(r=e.showAnswersInTable,[{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"#"})},accessor:"questionNumber",id:"index",Cell:function(e){var t=e.row.original.questionNumber;return n.createElement(K,null,t+1,".")},width:15,disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"question"})},accessor:"data",Cell:function(e){var t=e.row.original,a=e.initialState.selectedRowIds,i=null==a?void 0:a[null==t?void 0:t.id];return n.createElement(K,{className:"flex-column"},n.createElement("div",{className:"".concat(i?"":"clamp-1"," pe-2")},n.createElement(g.y,{interaction:t,containerClassName:"d-flex"})),r&&i&&n.createElement(L,{interaction:t}))},disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"score"})},accessor:"resultsSummary",id:"correctlyAnswered",Cell:function(e){var t=e.value,r=t.percentCorrect;return t.awaitingMarking?n.createElement(R.O,{title:H("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):n.createElement(Q.O,{percentage:r,layout:Q.I.LabelBefore})},width:60,sortDescFirst:!0,sortType:z}]),data:d,theme:e.theme,onSelectRow:function(e){var t=e.original;i.t.preventScrollTop(),ue.e.updateParams({interactionId:t.id},{merge:!0})},initialSelectedRowIds:f?[f.id]:null,getRowId:function(e){return e.id},enableSort:!0,manualSort:!0,onSort:m,initialSortBy:u,emptyState:n.createElement(s,{emptyStateImageUrl:e.emptyQuestionsStateImageUrl})})),n.createElement("div",{className:"col-6 d-flex flex-column"},!e.reportsStyling&&e.selectedInteractionId&&!!(null===(t=e.results.students)||void 0===t?void 0:t.length)&&n.createElement(ie,{interaction:f,results:e.results}),n.createElement("div",{className:"rounded flex-grow-1 ".concat(e.reportsStyling?"":"border")},!!f&&n.createElement(O,{interaction:f,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyResponseStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo}),!f&&n.createElement(ce,{emptyStateUrl:e.selectQuestionImageUrl}))))}var fe=r(9193),pe=r(1704),ge=r(99742);const be={partialInsights:"mhxg4"};function ye(){return n.createElement("div",null,n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(be.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(be.partialInsights," rounded partial-loading-background")}))))}function ve(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var he=a.T.encloseNamespace("shared.interactiveInsightsQuestions"),Ee={table:"bg-white rounded border h-100 pb-2",header:"border-bottom px-3 py-2 mb-2",headerCell:"d-flex align-items-center",cell:"",row:"px-3 py-2 bg-light-blue-hover",selectedRow:"bg-gray-100",sortIndicator:"ms-2"};function we(e){var t,r,a,i,l,c=(i=n.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(i,l)||function(e,t){if(e){if("string"==typeof e)return ve(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?ve(e,t):void 0}}(i,l)||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.")}()),o=c[0],s=c[1],u=(0,fe.D)(null===(t=e.interactive)||void 0===t?void 0:t.id,null===(r=e.interactiveMetadata)||void 0===r?void 0:r.id,(function(){return s(!1)})),m=u.markedAnswers,d=u.addMarkedAnswers,f=u.submitMarkedAnswers;return n.createElement(n.Fragment,null,!e.hasDataLoaded&&n.createElement(ye,null),e.hasDataLoaded&&n.createElement(de,{interactive:e.interactive,results:e.results,markedAnswers:m,addMarkedAnswers:d,submitMarkedAnswers:function(){return s(!0)},imageCdnUrl:e.config.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:e.isFetching,emptyResponseStateImageUrl:ge.W.Insights.NO_RESPONSES,emptyQuestionsStateImageUrl:ge.W.Insights.NO_QUESTIONS,selectQuestionImageUrl:ge.W.Insights.NO_DATA,anonymiseUsers:e.anonymiseUsers,sortBy:e.sortBy,showAnswersInTable:!0,theme:Ee,correctImageUrl:ge.W.Insights.JIGSAW,incorrectImageUrl:ge.W.Insights.RED_JIGSAW,skippedImageUrl:ge.W.Insights.SKIPPED,markingRequiredImageUrl:ge.W.Insights.CLIPBOARD,isDemo:e.isDemo}),o&&n.createElement(pe.l,{title:he("markPopupTitle",{smartCount:null!==(a=Object.keys(m).length)&&void 0!==a?a:0}),closePopup:function(){return s(!1)},confirmButtonText:he("submit"),confirmButtonVariant:"dark",onClickConfirm:f},n.createElement("p",null,he("markPopupBody"))))}}}]);
2
+ //# sourceMappingURL=8705-ecd20ef6cb-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8705-ecd20ef6cb-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/confirmation-popup/ConfirmationPopup.tsx","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/interaction-response-list.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/question-table-answers.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/question-table/QuestionTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/partial-loading/partial-interactive-insights-questions.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/partial-loading/PartialInteractiveInsightsQuestions.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/interactive-insights-questions/InteractiveInsightsQuestions.tsx"],"sourcesContent":["import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.confirmationPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ConfirmationPopupProps {\n title: string;\n onClickConfirm: () => void;\n confirmButtonText?: string;\n cancelButtonText?: string;\n confirmButtonVariant?: ButtonProps['variant'];\n cancelButtonVariant?: ButtonProps['variant'];\n disabledConfirmButton?: boolean;\n}\n\nConfirmationPopup.defaultProps = {\n confirmButtonVariant: 'primary',\n cancelButtonVariant: 'link'\n};\n\ntype PropTypes = React.PropsWithChildren<ConfirmationPopupProps & PopupViewProps>;\n\nexport function ConfirmationPopup(props: PropTypes): React.ReactElement {\n const [ showButtonSpinner, setShowButtonSpinner ] = React.useState(false);\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <>\n {props.children}\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.closePopup}\n variant={props.cancelButtonVariant}\n text={props.cancelButtonText || getPhrase('cancel')}\n />\n <PopupButtons.Submit\n onClick={() => { setShowButtonSpinner(true); props.onClickConfirm(); }}\n text={props.confirmButtonText || getPhrase('confirm')}\n variant={props.confirmButtonVariant}\n showSpinner={showButtonSpinner}\n disabled={props.disabledConfirmButton}\n />\n </PopupButtons>\n </>\n </Popup>\n );\n}","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.interactionQuestionsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionQuestionsEmptyStateProps {\n emptyStateImageUrl: string;\n}\n\nexport function InteractionQuestionsEmptyState(props: InteractionQuestionsEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateImageUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.interactionResponseList';\n\nexport type InteractionResponseFilterType = 'marking_required' | 'correct' | 'incorrect' | 'skipped';\n\ninterface InteractionResponseListFiltersEmptyStatesProps {\n filter: InteractionResponseFilterType;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n}\n\nexport function InteractionResponseListFiltersEmptyStates(props: InteractionResponseListFiltersEmptyStatesProps) {\n function getFilterEmptyStateImageUrl() {\n switch (props.filter) {\n case 'correct': return props.correctImageUrl;\n case 'incorrect': return props.incorrectImageUrl;\n case 'marking_required': return props.markingRequiredImageUrl;\n case 'skipped': return props.skippedImageUrl;\n }\n }\n\n function getFilterEmptyStatePhrase() {\n switch (props.filter) {\n case 'correct': return 'correctEmptyState';\n case 'incorrect': return 'incorrectEmptyState';\n case 'marking_required': return 'markingRequiredEmptyState';\n case 'skipped': return 'skippedEmptyState';\n }\n }\n\n return (\n <>\n <EmptyState className='m-4'>\n <EmptyState.Image src={getFilterEmptyStateImageUrl()} className='w-25 h-auto' />\n <EmptyState.Info>\n <Text namespace={namespace} phrase={getFilterEmptyStatePhrase()} />\n </EmptyState.Info>\n </EmptyState>\n </>\n );\n}\n\ninterface InteractionResponseListFiltersProps {\n filter: InteractionResponseFilterType;\n toggleFilter: (filter: InteractionResponseFilterType) => void\n}\n\nexport function InteractionResponseListFilters(props: InteractionResponseListFiltersProps) {\n function isFilterSelected(filterButton: InteractionResponseFilterType) {\n return filterButton === props.filter;\n }\n\n function getFilterClassName(filterButton: InteractionResponseFilterType) {\n return `rounded-pill bg-light ${isFilterSelected(filterButton) ? 'bg-dark text-white' : ''}`;\n }\n\n return (\n\n <div className='d-flex gap-2 m-3'>\n <button className={getFilterClassName('marking_required')} onClick={() => props.toggleFilter('marking_required')}>\n <Text namespace={namespace} phrase='markingRequired' />\n </button>\n <button className={getFilterClassName('correct')} onClick={() => props.toggleFilter('correct')}>\n <Text namespace={namespace} phrase='correct' />\n </button>\n <button className={getFilterClassName('incorrect')} onClick={() => props.toggleFilter('incorrect')}>\n <Text namespace={namespace} phrase='incorrect' />\n </button>\n <button className={getFilterClassName('skipped')} onClick={() => props.toggleFilter('skipped')}>\n <Text namespace={namespace} phrase='skipped' />\n </button>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { Interaction } from 'libs/shared/interfaces';\n\nconst namespace = 'interactives.interactionResponseListHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InteractionResponseListHeaderProps {\n interaction: Interaction;\n}\n\nexport function InteractionResponseListHeader(props: InteractionResponseListHeaderProps): JSX.Element {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n return (\n <div className='rounded bg-white'>\n <div className='p-2 position-relative'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n {!!suggestedResponse &&\n <div className='mt-2'>\n <strong>{getPhrase('suggestedResponse')}</strong>\n <p className='m-0'>{suggestedResponse}</p>\n </div>\n }\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.submitMarkedAnswers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SubmitMarkedAnswersProps {\n submit: () => void;\n disabled: boolean\n}\n\nexport function SubmitMarkedAnswers(props: SubmitMarkedAnswersProps): JSX.Element {\n return (\n <div className='d-flex justify-content-end'>\n <button\n className='btn btn-outline-dark'\n onClick={props.submit}\n disabled={props.disabled}\n >\n {getPhrase('submitAnswers')}\n </button>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"awaitingMarking\":\"PPNkp\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { InteractionResponseItem } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem';\nimport { InteractionResponseFilterType, InteractionResponseListFilters, InteractionResponseListFiltersEmptyStates } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListFilters';\nimport { InteractionResponseListHeader } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseListHeader';\nimport { SubmitMarkedAnswers } from 'libs/shared/apps/analytics/components/questions-list/submit-marked-answers/SubmitMarkedAnswers';\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getMarkedStatus } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { InteractionResponse } from 'libs/shared/components/interaction-response/InteractionResponse';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractiveResultSet, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\nimport styles from './interaction-response-list.scss';\n\nconst namespace = 'shared.interactionResponseList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getResponsesToMark(\n interaction: Interaction,\n studentResults: StudentResults[]\n): HashObject {\n const responsesToMark = studentResults.filter(s => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n interaction,\n getStudentResult(s)\n );\n return correctness === InteractionCorrectness.AwaitingMarking;\n });\n\n return responsesToMark.reduce((acc, s) => ({\n ...acc,\n [s.user?.id || s.user?.sessionId]: true\n }), {});\n}\n\ninterface InteractionResponseListProps {\n interaction: Interaction\n results: InteractiveResultSet;\n markedAnswers: MarkedAnswerHash;\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n imageCdnUrl: string;\n anonymiseUsers: boolean;\n reportsStyling?: boolean;\n emptyStateImageUrl: string;\n markingRequiredImageUrl: string;\n correctImageUrl: string;\n incorrectImageUrl: string;\n skippedImageUrl: string;\n isDemo?: boolean;\n}\n\nexport function InteractionResponseList(props: InteractionResponseListProps): JSX.Element {\n const [ filter, setFilter ] = React.useState<InteractionResponseFilterType>();\n\n const responsesToMark = getResponsesToMark(props.interaction, props.results.students);\n const numMarkedAnswers = Object.keys(props.markedAnswers).length;\n\n if (!props.results.students?.length)\n return (\n <div className='d-flex flex-column h-100'>\n <EmptyState className='bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center'>\n <EmptyState.Image src={props.emptyStateImageUrl} size='small' />\n <EmptyState.Heading>\n {getPhrase('emptyStateHeading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateDescription')}\n </EmptyState.Info>\n </EmptyState>\n </div>\n );\n\n\n function toggleFilter(selectedFilter: InteractionResponseFilterType) {\n setFilter(filter === selectedFilter ? null : selectedFilter);\n }\n\n function filterStudentResults() {\n return props.results.students.filter(s => {\n const result = getStudentResult(s);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n const filterMap = {\n correct: InteractionCorrectness.Correct,\n incorrect: InteractionCorrectness.Incorrect,\n marking_required: InteractionCorrectness.AwaitingMarking,\n skipped: InteractionCorrectness.UnAnswered\n };\n\n return !filter || (filter in filterMap && correctness === filterMap[filter]);\n });\n }\n\n const filteredStudentResults = filterStudentResults();\n\n return (\n <>\n {props.reportsStyling && <InteractionResponseListHeader interaction={props.interaction} />}\n <div className={props.reportsStyling\n ? 'd-flex justify-content-end'\n : 'd-flex align-items-center justify-content-between border-bottom px-3 py-2'\n }>\n {!props.reportsStyling && <p className='fw-semibold mb-0'><Text namespace={namespace} phrase='studentAnswers' /></p>}\n {!!Object.keys(responsesToMark).length &&\n <Tooltip id='submitAnswers' title={getPhrase('demoOnly')} spanHack={props.isDemo}>\n <div className={`${props.isDemo ? 'pointer-events-none' : ''} ${props.reportsStyling ? 'mt-2' : ''}`}>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n </Tooltip>\n }\n </div>\n <>\n {!props.reportsStyling && <InteractionResponseListFilters filter={filter} toggleFilter={toggleFilter} />}\n\n {!props.reportsStyling && !filteredStudentResults.length && filter && (\n <InteractionResponseListFiltersEmptyStates\n filter={filter}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n />\n )}\n \n {filteredStudentResults && (\n <ul className='list-unstyled mb-0'>\n {filteredStudentResults.map((s, idx) => {\n const anonymisedUserName = anonymiseUserName(s.user, props.anonymiseUsers);\n const markingRequired = responsesToMark[s.user?.id || s.user?.sessionId];\n\n let className = props.reportsStyling ? 'bg-white p-2' : 'bg-white px-3 pt-3 pb-2';\n\n if (markingRequired)\n className += ` ${styles.awaitingMarking} my-1`;\n\n return (\n <li key={idx} className={props.reportsStyling ? '' : 'border-bottom'}>\n {props.reportsStyling ? (\n <InteractionResponse\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n reportsStyling\n responseComponentClass='mx-n2'\n />\n ) : (\n <InteractionResponseItem\n interaction={props.interaction}\n studentResults={s}\n markedStatus={getMarkedStatus(props.interaction.id, s, props.markedAnswers)}\n markInteraction={props.addMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n showStudentDetails\n anonymisedUserName={anonymisedUserName}\n className={className}\n showFeedback\n />\n )}\n </li>\n );\n })}\n </ul>\n )}\n {props.reportsStyling && !!responsesToMark.length &&\n <div className='mt-2'>\n <SubmitMarkedAnswers submit={props.submitMarkedAnswers} disabled={!numMarkedAnswers} />\n </div>\n }\n </>\n </>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\nexport function QuestionTableMissingWord(props: QuestionTableAnswersProps) {\n const replacePlaceholders = (str: string) => {\n if (!str) return '';\n\n return str.split(/({\\d+})/).map((part, index) => {\n const match = part.match(/{(\\d+)}/);\n\n if (match) {\n const key = match[1];\n\n const replacement = props.interaction.actionableItems.find(answer => +answer.order === +key);\n\n\n if (replacement) {\n return <span className='bg-white border border-gray-300 rounded p-1 lh-lg' key={index}>{replacement.name}</span>;\n }\n }\n\n return part;\n });\n };\n\n return (\n <div>\n <p className='mb-0'>{replacePlaceholders(props.interaction.data.sentence)}</p>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"row\":\"fXno_\",\"answerImage\":\"pDAuW\",\"answerWidth\":\"YHK27\"};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { MultipleChoiceInteractionAnswers } from 'libs/shared/components/interaction-answers/multiple-choice/MultipleChoiceInteractionAnswers';\n\nimport styles from './question-table-answers.scss';\n\nexport function QuestionTableMultipleChoice(props: QuestionTableAnswersProps) {\n const hasImages = !!ArrayHelper.first(props.interaction?.actionableItems).data?.imageUrl;\n\n if (!hasImages) {\n return (\n <ul className={`${styles.answerWidth} list-unstyled row g-2`}>\n {props.interaction.actionableItems.map(option => {\n return (\n <li key={option.id} className='col-12'>\n <div className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border py-1 px-2 m-0`}>\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </div>\n </li>\n );\n })}\n </ul>\n );\n }\n\n return (\n <div className={styles.answerWidth}>\n <MultipleChoiceInteractionAnswers\n interaction={props.interaction}\n size='sm'\n showFeedback={false}\n showCorrectnessIcons\n isDisplayOnly\n />\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './question-table-answers.scss';\n\nconst namespace = 'shared.questionTable';\n\nexport function QuestionTableShortAnswer(props: QuestionTableAnswersProps) {\n const suggestedResponse = props.interaction.data?.suggestedResponse;\n\n if (!suggestedResponse) return <></>;\n\n return (\n <div className={`${styles.answerWidth} bg-light-blue rounded p-2 mb-2`}>\n <div className='d-flex justify-content-between'>\n <p className='fw-semibold mb-2'>\n <Text namespace={namespace} phrase='suggestedResponse' />\n </p>\n </div>\n\n <p className='mb-0'>{suggestedResponse}</p>\n </div>\n );\n}","import React from 'react';\n\nimport { QuestionTableAnswersProps } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\n\n\nexport function QuestionTableTrueOrFalse(props: QuestionTableAnswersProps) {\n return (\n <ul className='list-unstyled d-flex gap-2'>\n {props.interaction.actionableItems.map(option => {\n return (\n <li\n key={option.id}\n className={`${option.isCorrect ? 'bg-light-green border-green' : 'bg-light-red border-red'} rounded border px-2 py-1 mb-2 w-50`}\n >\n <span className='fw-semibold'>{props.indexToLetter(option.order)}. </span>\n <span>{option.name}</span>\n </li>\n );\n })}\n </ul>\n );\n}","import React from 'react';\n\nimport { QuestionTableMissingWord } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMissingWord';\nimport { QuestionTableMultipleChoice } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableMultipleChoice';\nimport { QuestionTableShortAnswer } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableShortAnswer';\nimport { QuestionTableTrueOrFalse } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableTrueOrFalse';\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { Interaction, InteractionTypeId } from 'libs/shared/interfaces';\n\nexport interface QuestionTableAnswersProps {\n interaction: Interaction;\n indexToLetter?: (index: number) => string;\n}\n\nexport function QuestionTableAnswers(props: QuestionTableAnswersProps) {\n function getQuestionTableAnswerComponent(): JSX.Element {\n switch (props.interaction.typeId) {\n case InteractionTypeId.MultipleChoice:\n return <QuestionTableMultipleChoice interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.TrueOrFalse:\n return <QuestionTableTrueOrFalse interaction={props.interaction} indexToLetter={indexToLetter} />;\n case InteractionTypeId.ShortAnswer:\n return <QuestionTableShortAnswer interaction={props.interaction} />;\n case InteractionTypeId.MissingWord:\n return <QuestionTableMissingWord interaction={props.interaction} />;\n default: return null;\n }\n }\n\n const QuestionTableAnswerComponent = getQuestionTableAnswerComponent();\n\n if (!QuestionTableAnswerComponent) return <></>;\n\n return (\n <div className='w-100 mt-3'>\n {QuestionTableAnswerComponent}\n </div>\n );\n}","import React from 'react';\nimport { Column, ColumnInstance, Row, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { QuestionTableAnswers } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-table-answers/QuestionTableAnswers';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractionLabel } from 'libs/shared/components/interactive-questions/InteractionLabel';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction sortScore(\n rowA: Row<InteractionWithResultsSummary>,\n rowB: Row<InteractionWithResultsSummary>,\n columnId: string\n): 1 | -1 {\n const cellA = rowA.cells.find(cell => cell.column.id === columnId).value;\n const cellB = rowB.cells.find(cell => cell.column.id === columnId).value;\n\n if (cellA.awaitingMarking)\n return -1;\n\n if (cellB.awaitingMarking)\n return 1;\n\n return cellA.percentCorrect >= cellB.percentCorrect\n ? 1\n : -1;\n}\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<InteractionWithResultsSummary>;\n phraseKey: string;\n}\n\nfunction HeaderCell(props: HeaderCellProps): JSX.Element {\n return (\n <CellWrapper className={props.column.isSorted && 'fw-bold'}>\n {getPhrase(props.phraseKey)}\n </CellWrapper>\n );\n}\n\nexport function getColumns(\n showAnswersInTable: boolean\n): Column<InteractionWithResultsSummary>[] {\n return [\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='#' />,\n accessor: 'questionNumber',\n id: 'index',\n Cell: ({ row: { original: { questionNumber } } }) => {\n return <CellWrapper>{questionNumber + 1}.</CellWrapper>;\n },\n width: 15,\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='question' />,\n accessor: 'data', // This isn't used but it's needed for the typings on row,\n Cell: ({ row: { original: interaction }, initialState: { selectedRowIds } }) => {\n const selectedRow = selectedRowIds?.[interaction?.id];\n\n return (\n <CellWrapper className='flex-column'>\n <div className={`${!selectedRow ? 'clamp-1' : ''} pe-2`}>\n <InteractionLabel interaction={interaction} containerClassName='d-flex' />\n </div>\n\n {showAnswersInTable && selectedRow && (\n <QuestionTableAnswers interaction={interaction} />\n )}\n </CellWrapper>\n );\n },\n disableSortBy: true\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'resultsSummary',\n id: 'correctlyAnswered',\n Cell: ({ value: { percentCorrect, awaitingMarking } }) => {\n if (awaitingMarking) {\n return (\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n tooltipClassName='d-block'\n showLabel\n />\n );\n }\n\n return (\n <PercentageIndicator\n percentage={percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n />\n );\n },\n width: 60,\n sortDescFirst: true,\n sortType: sortScore\n }\n ];\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n sortBy?: SortingRule<InteractionWithResultsSummary>\n): InteractionWithResultsSummary[] {\n return React.useMemo(() => {\n const flattenedInteractions = getInteractions(interactive);\n const questionNumbers: HashObject = flattenedInteractions.reduce((acc, interaction, index) => ({\n ...acc, [interaction.id]: index\n }), {});\n\n const interactions = flattenedInteractions.map(i => ({\n ...i,\n questionNumber: questionNumbers[i.id],\n resultsSummary: getInteractionResultsSummary(i, results)\n }));\n\n if (sortBy?.id === 'correctlyAnswered') {\n const sorted = ArrayHelper.sortBy(interactions, interaction => {\n if (interaction.resultsSummary.awaitingMarking)\n return -1;\n\n return interaction.resultsSummary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return interactions;\n }, [ refreshData, sortBy ]);\n}\n\nexport function indexToLetter(index: number) {\n return String.fromCharCode(index + 'A'.charCodeAt(0));\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { indexToLetter } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTableUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface QuestionSummary {\n id?: string;\n count: number;\n isCorrect: boolean;\n label?: string | number;\n}\n\nexport function multipleChoiceSummary(\n interaction: Interaction,\n studentResults: InteractiveResultSet\n): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map((item, i) => {\n return {\n id: item.id,\n label: interaction.typeId === InteractionTypeId.MultipleChoice ? indexToLetter(i) : item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary)\n questionSummary.count++;\n });\n });\n\n return questionsSummary;\n}\n\nexport function missingWordSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = interaction.actionableItems.map(item => {\n return {\n id: item.id,\n label: item.name,\n isCorrect: item.isCorrect,\n count: 0\n };\n });\n\n questionsSummary.push({\n label: getPhrase('incorrect'),\n count: 0,\n isCorrect: false\n });\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n const questionSummary = ArrayHelper.findWhere(questionsSummary, { id: answer.id });\n\n if (questionSummary && answer.status === InteractiveAnswerStatus.Correct) {\n questionSummary.count++;\n } else {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n\n incorrectSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}\n\nexport function markedSummary(interaction: Interaction, studentResults: InteractiveResultSet): QuestionSummary[] {\n const questionsSummary: QuestionSummary[] = [\n {\n label: getPhrase('correct'),\n isCorrect: true,\n count: 0\n },\n {\n label: getPhrase('incorrect'),\n isCorrect: false,\n count: 0\n }\n ];\n\n studentResults.students.forEach(student => {\n const latestAttempts = ArrayHelper.last(student.results).attempts;\n const response = ArrayHelper.findWhere(latestAttempts, { id: interaction.id });\n\n if (!response) return;\n\n response.answers.forEach(answer => {\n if (answer.status === InteractiveAnswerStatus.Correct) {\n const correctSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('correct') });\n correctSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.Incorrect) {\n const incorrectSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('incorrect') });\n incorrectSummary.count++;\n }\n if (answer.status === InteractiveAnswerStatus.PendingReview) {\n let pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n\n if (!pendingSummary) {\n questionsSummary.push({\n label: getPhrase('pending'),\n count: 0,\n isCorrect: false\n });\n pendingSummary = ArrayHelper.findWhere(questionsSummary, { label: getPhrase('pending') });\n }\n\n pendingSummary.count++;\n }\n });\n });\n\n return questionsSummary;\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { markedSummary, missingWordSummary, multipleChoiceSummary, QuestionSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummaryUtils';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Interaction, InteractionTypeId, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.questionTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface QuestionResultsSummaryProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n}\n\nexport function QuestionResultsSummary(props: QuestionResultsSummaryProps) {\n const questionSummary = getQuestionSummary();\n const maxResponseCount = getMaxResponseCount();\n\n function getQuestionSummary(): QuestionSummary[] {\n if (!props.interaction || !props.results) return;\n\n let summaryMethod: (\n interaction: Interaction,\n results: InteractiveResultSet,\n interactionTypeId?: InteractionTypeId\n ) => QuestionSummary[];\n\n switch (props.interaction.typeId) {\n case InteractionTypeId.ShortAnswer:\n case InteractionTypeId.Illustration:\n summaryMethod = markedSummary;\n break;\n case InteractionTypeId.MissingWord:\n summaryMethod = missingWordSummary;\n break;\n case InteractionTypeId.MultipleChoice:\n case InteractionTypeId.TrueOrFalse:\n summaryMethod = multipleChoiceSummary;\n break;\n }\n\n return summaryMethod(props.interaction, props.results);\n }\n\n function getMaxResponseCount() {\n return questionSummary?.reduce((acc, summary) => summary.count > acc ? summary.count : acc, 0);\n }\n\n function getBarClassName(summary: QuestionSummary) {\n const className = 'border rounded me-2';\n\n if (!summary.count)\n return `${className} border bg-light px-1`;\n\n if (summary.label === getPhrase('pending'))\n return `${className} border-blue bg-light-blue`;\n\n if (summary.isCorrect)\n return `${className} border-green bg-light-green`;\n\n return `${className} border-red bg-light-red`;\n }\n\n return (\n <div className='border border rounded p-3 mb-3'>\n <div className='d-flex align-items-center gap-2 mb-3'>\n <div className='rounded-circle bg-light-teal text-teal'>\n <SvgContainer svgName={cvSvgLibrary.Lightbulb} size={SvgContainerSize.Large} />\n </div>\n <h2 className='h6 mb-0'>\n <span><Text namespace={namespace} phrase='questionSummary' /></span>\n </h2>\n </div>\n <div className='d-flex gap-2'>\n <div className='max-w-25'>\n {questionSummary?.map(summary => {\n return (\n <p key={summary.label} className='text-truncate mb-2'>{summary.label}</p>\n );\n })}\n </div>\n <div className='flex-grow-1'>\n {questionSummary?.map((summary, i) => {\n return (\n <div key={`${props.interaction.id}${i}`} className='d-flex mb-2'>\n <div\n className={getBarClassName(summary)}\n style={{ width: `${(summary.count / maxResponseCount) * 100}%`, height: 20 }}>\n </div>\n <span>{summary.count}</span>\n </div>\n );\n })}\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'shared.selectedInteractionEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SelectedInteractionEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function SelectedInteractionEmptyState(props: SelectedInteractionEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='rounded h-100 bg-white justify-content-center py-4'>\n <EmptyState.Image\n src={props.emptyStateUrl}\n size='small'\n />\n <EmptyState.Info className='w-100'>\n {getPhrase('emptyStateText')}\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\nimport { Row, SortingRule } from 'react-table';\n\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractionQuestionsEmptyState } from 'libs/shared/apps/analytics/components/questions-list/interaction-questions-empty-state/InteractionQuestionsEmptyState';\nimport { InteractionResponseList } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-list/InteractionResponseList';\nimport { QuestionResultsSummary } from 'libs/shared/apps/analytics/components/questions-list/question-table/question-results-summary/QuestionResultsSummary';\nimport { SelectedInteractionEmptyState } from 'libs/shared/apps/analytics/components/questions-list/selected-interaction-empty-state/SelectedInteractionEmptyState';\nimport { InteractionWithResultsSummary } from 'libs/shared/apps/analytics/interfaces/InteractionWithResultsSummary';\nimport { getInteractionById } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { getSortStudents, SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interactive, InteractiveResultSet, StudentAnswer } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport { getColumns, useGetTableData } from './QuestionTableUtils';\n\ninterface QuestionTableProps {\n interactive: Interactive;\n results: InteractiveResultSet;\n markedAnswers: { [id: string]: StudentAnswer };\n addMarkedAnswers: (answer: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n submitMarkedAnswers: () => void;\n editSuggestedResponse?: () => void;\n imageCdnUrl: string;\n selectQuestionImageUrl: string;\n anonymiseUsers: boolean;\n sortBy?: SortStudentsBy;\n emptyResponseStateImageUrl: string;\n emptyQuestionsStateImageUrl: string;\n markingRequiredImageUrl?: string;\n correctImageUrl?: string;\n incorrectImageUrl?: string;\n skippedImageUrl?: string;\n\n /**\n * As the table data is memoized, it must be prompted to recalculate.\n * Toggle `refreshTable` to do so.\n */\n refreshTable: boolean;\n selectedInteractionId?: string;\n showAnswersInTable?: boolean;\n theme: TableTheme;\n reportsStyling?: boolean;\n isDemo?: boolean;\n}\n\nexport function QuestionTable(props: QuestionTableProps): JSX.Element {\n const [ sortBy, setSortBy ] = React.useState<SortingRule<InteractionWithResultsSummary>[]>(\n getSortStudents(props.sortBy, 'correctlyAnswered')\n );\n const data = useGetTableData(props.interactive, props.results, props.refreshTable, ArrayHelper.first(sortBy));\n\n const selectedInteraction = props.selectedInteractionId &&\n getInteractionById(props.interactive, props.selectedInteractionId);\n\n function onSelectRow({ original: interaction }: Row<InteractionWithResultsSummary>): void {\n ScrollHelper.preventScrollTop();\n\n AppRouteHelper.updateParams(\n { interactionId: interaction.id },\n { merge: true }\n );\n }\n\n return (\n <div className='row'>\n <div className='col-6 flex-grow-1'>\n <Table\n key={props.selectedInteractionId}\n columns={getColumns(props.showAnswersInTable)}\n data={data}\n theme={props.theme}\n onSelectRow={onSelectRow}\n initialSelectedRowIds={selectedInteraction ? [selectedInteraction.id] : null}\n getRowId={(row: InteractionWithResultsSummary) => row.id}\n enableSort\n manualSort\n onSort={setSortBy}\n initialSortBy={sortBy}\n emptyState={<InteractionQuestionsEmptyState emptyStateImageUrl={props.emptyQuestionsStateImageUrl} />}\n />\n </div>\n <div className='col-6 d-flex flex-column'>\n {!props.reportsStyling && props.selectedInteractionId && !!props.results.students?.length && (\n <QuestionResultsSummary\n interaction={selectedInteraction}\n results={props.results}\n />\n )}\n\n <div className={`rounded flex-grow-1 ${props.reportsStyling ? '' : 'border'}`}>\n {!!selectedInteraction &&\n <InteractionResponseList\n interaction={selectedInteraction}\n results={props.results}\n markedAnswers={props.markedAnswers}\n addMarkedAnswers={props.addMarkedAnswers}\n submitMarkedAnswers={props.submitMarkedAnswers}\n imageCdnUrl={props.imageCdnUrl}\n anonymiseUsers={props.anonymiseUsers}\n emptyStateImageUrl={props.emptyResponseStateImageUrl}\n markingRequiredImageUrl={props.markingRequiredImageUrl}\n correctImageUrl={props.correctImageUrl}\n incorrectImageUrl={props.incorrectImageUrl}\n skippedImageUrl={props.skippedImageUrl}\n reportsStyling={props.reportsStyling}\n isDemo={props.isDemo}\n />\n }\n {!selectedInteraction && <SelectedInteractionEmptyState emptyStateUrl={props.selectQuestionImageUrl} />}\n </div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"mhxg4\"};","import React from 'react';\n\nimport styles from './partial-interactive-insights-questions.scss';\n\nexport function PartialInteractiveInsightsQuestions() {\n return (\n <div>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { QuestionTable } from 'libs/shared/apps/analytics/components/questions-list/question-table/QuestionTable';\nimport { useMarkAnswers } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { SortStudentsBy } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { ConfirmationPopup } from 'libs/shared/components/confirmation-popup/ConfirmationPopup';\nimport { TableTheme } from 'libs/shared/components/table/Table';\nimport { Config, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { PartialInteractiveInsightsQuestions } from 'apps/my-shares/components/interactive-insights-questions/partial-loading/PartialInteractiveInsightsQuestions';\n\n\nconst namespace = 'shared.interactiveInsightsQuestions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst theme: TableTheme = {\n table: 'bg-white rounded border h-100 pb-2',\n header: 'border-bottom px-3 py-2 mb-2',\n headerCell: 'd-flex align-items-center',\n cell: '',\n row: `px-3 py-2 bg-light-blue-hover`,\n selectedRow: 'bg-gray-100',\n sortIndicator: 'ms-2'\n};\n\ninterface InteractiveInsightsQuestionsProps {\n interactionId: string;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n isFetching: boolean;\n config: Config;\n hasDataLoaded: boolean;\n anonymiseUsers: boolean;\n sortBy: SortStudentsBy;\n isDemo?: boolean;\n}\n\nexport function InteractiveInsightsQuestions(props: InteractiveInsightsQuestionsProps) {\n const [ showMarkConfirmationPopup, setShowMarkConfirmationPopup ] = React.useState(false);\n\n const { markedAnswers, addMarkedAnswers, submitMarkedAnswers } = useMarkAnswers(\n props.interactive?.id,\n props.interactiveMetadata?.id,\n () => setShowMarkConfirmationPopup(false)\n );\n\n return (\n <>\n {!props.hasDataLoaded && <PartialInteractiveInsightsQuestions />}\n\n {props.hasDataLoaded &&\n <QuestionTable\n interactive={props.interactive}\n results={props.results}\n markedAnswers={markedAnswers}\n addMarkedAnswers={addMarkedAnswers}\n submitMarkedAnswers={() => setShowMarkConfirmationPopup(true)}\n imageCdnUrl={props.config.imageCdnUrl}\n selectedInteractionId={props.interactionId}\n refreshTable={props.isFetching}\n emptyResponseStateImageUrl={ImageUrls.Insights.NO_RESPONSES}\n emptyQuestionsStateImageUrl={ImageUrls.Insights.NO_QUESTIONS}\n selectQuestionImageUrl={ImageUrls.Insights.NO_DATA}\n anonymiseUsers={props.anonymiseUsers}\n sortBy={props.sortBy}\n showAnswersInTable\n theme={theme}\n correctImageUrl={ImageUrls.Insights.JIGSAW}\n incorrectImageUrl={ImageUrls.Insights.RED_JIGSAW}\n skippedImageUrl={ImageUrls.Insights.SKIPPED}\n markingRequiredImageUrl={ImageUrls.Insights.CLIPBOARD}\n isDemo={props.isDemo}\n />\n }\n\n {showMarkConfirmationPopup &&\n <ConfirmationPopup\n title={getPhrase('markPopupTitle', { smartCount: Object.keys(markedAnswers).length ?? 0 })}\n closePopup={() => setShowMarkConfirmationPopup(false)}\n confirmButtonText={getPhrase('submit')}\n confirmButtonVariant='dark'\n onClickConfirm={submitMarkedAnswers}\n >\n <p>{getPhrase('markPopupBody')}</p>\n </ConfirmationPopup>\n }\n </>\n );\n}"],"names":["getPhrase","ConfirmationPopup","props","showButtonSpinner","setShowButtonSpinner","title","closePopup","children","onClick","variant","cancelButtonVariant","text","cancelButtonText","onClickConfirm","confirmButtonText","confirmButtonVariant","showSpinner","disabled","disabledConfirmButton","defaultProps","AppRouteHelper","updateParams","params","options","appLink","currentParams","keysToRemove","updatedParams","merge","updatedAppLink","LanguageService","InteractionQuestionsEmptyState","EmptyState","className","src","emptyStateImageUrl","size","InteractionResponseListFiltersEmptyStates","filter","correctImageUrl","incorrectImageUrl","markingRequiredImageUrl","skippedImageUrl","getFilterEmptyStateImageUrl","Text","namespace","phrase","getFilterEmptyStatePhrase","InteractionResponseListFilters","getFilterClassName","filterButton","isFilterSelected","toggleFilter","InteractionResponseListHeader","suggestedResponse","interaction","data","InteractionLabel","iconClassName","SubmitMarkedAnswers","submit","InteractionResponseList","setFilter","responsesToMark","results","students","s","InteractiveCorrectnessHelper","InteractionCorrectness","reduce","acc","user","id","sessionId","numMarkedAnswers","Object","keys","markedAnswers","length","filteredStudentResults","result","correctness","filterMap","correct","incorrect","marking_required","skipped","reportsStyling","Tooltip","spanHack","isDemo","submitMarkedAnswers","selectedFilter","map","idx","anonymisedUserName","anonymiseUsers","markingRequired","key","InteractionResponse","studentResults","markedStatus","markInteraction","addMarkedAnswers","imageCdnUrl","showStudentDetails","showFeedback","responseComponentClass","InteractionResponseItem","QuestionTableMissingWord","str","sentence","split","part","index","match","replacement","actionableItems","find","answer","order","name","QuestionTableMultipleChoice","ArrayHelper","imageUrl","MultipleChoiceInteractionAnswers","showCorrectnessIcons","isDisplayOnly","option","isCorrect","indexToLetter","QuestionTableShortAnswer","QuestionTableTrueOrFalse","QuestionTableAnswers","QuestionTableAnswerComponent","typeId","getQuestionTableAnswerComponent","sortScore","rowA","rowB","columnId","cellA","cells","cell","column","value","cellB","awaitingMarking","percentCorrect","CellWrapper","HeaderCell","isSorted","phraseKey","String","fromCharCode","charCodeAt","multipleChoiceSummary","questionsSummary","item","i","label","count","forEach","student","latestAttempts","attempts","response","answers","questionSummary","missingWordSummary","push","status","InteractiveAnswerStatus","markedSummary","pendingSummary","QuestionResultsSummary","summaryMethod","getQuestionSummary","maxResponseCount","summary","getBarClassName","SvgContainer","svgName","S","style","width","height","SelectedInteractionEmptyState","emptyStateUrl","QuestionTable","showAnswersInTable","sortBy","setSortBy","interactive","refreshData","flattenedInteractions","questionNumbers","interactions","questionNumber","resultsSummary","sorted","desc","reverse","useGetTableData","refreshTable","selectedInteraction","selectedInteractionId","Table","columns","Header","accessor","Cell","row","original","disableSortBy","selectedRowIds","initialState","selectedRow","containerClassName","PendingIndicator","tooltipClassName","showLabel","PercentageIndicator","percentage","layout","sortDescFirst","sortType","theme","onSelectRow","ScrollHelper","interactionId","initialSelectedRowIds","getRowId","enableSort","manualSort","onSort","initialSortBy","emptyState","emptyQuestionsStateImageUrl","emptyResponseStateImageUrl","selectQuestionImageUrl","PartialInteractiveInsightsQuestions","table","header","headerCell","sortIndicator","InteractiveInsightsQuestions","showMarkConfirmationPopup","setShowMarkConfirmationPopup","interactiveMetadata","hasDataLoaded","config","isFetching","ImageUrls","smartCount"],"sourceRoot":""}