@clickview/lite 0.83.0-rc.0 → 0.83.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (153) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/2074-lite-ac8da6c78b.chunk.css +4 -0
  3. package/dist/languages/en.json +1 -1
  4. package/dist/scripts/{1199-01cc084886-lite.chunk.js → 1199-da55d69853-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1199-01cc084886-lite.chunk.js.map → 1199-da55d69853-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/1202-d96ad80884-lite.chunk.js +2 -0
  7. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +1 -0
  8. package/dist/scripts/{4208-0706461da6-lite.chunk.js → 1336-1826f6e582-lite.chunk.js} +2 -2
  9. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +1 -0
  10. package/dist/scripts/1938-c52383e98d-lite.chunk.js +3 -0
  11. package/dist/scripts/1938-c52383e98d-lite.chunk.js.map +1 -0
  12. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +2 -0
  13. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  14. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  15. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  16. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  17. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  18. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  19. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  20. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  21. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/3836-bf1359bed7-lite.chunk.js +3 -0
  23. package/dist/scripts/3836-bf1359bed7-lite.chunk.js.map +1 -0
  24. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  25. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  26. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  27. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  28. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  29. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  31. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  32. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  33. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  35. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  36. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  37. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  39. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  41. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  43. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  44. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  45. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  46. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  47. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  48. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  49. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  51. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7401-833bc4a088-lite.chunk.js +2 -0
  53. package/dist/scripts/7401-833bc4a088-lite.chunk.js.map +1 -0
  54. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  55. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  56. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  57. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  58. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  59. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  60. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  61. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8077-bfb3530f78-lite.chunk.js +3 -0
  63. package/dist/scripts/8077-bfb3530f78-lite.chunk.js.map +1 -0
  64. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  65. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  66. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  67. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  68. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  69. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  71. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  73. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  74. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  75. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  76. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  77. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  78. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  79. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  80. package/dist/scripts/bundle-dcea87749e.min.js +3 -0
  81. package/dist/scripts/{bundle-f926852f33.min.js.map → bundle-dcea87749e.min.js.map} +1 -1
  82. package/package.json +1 -1
  83. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  84. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  85. package/dist/scripts/1938-e067e06dac-lite.chunk.js +0 -3
  86. package/dist/scripts/1938-e067e06dac-lite.chunk.js.map +0 -1
  87. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  88. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  89. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  90. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  91. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js +0 -3
  92. package/dist/scripts/3836-2c82a9fbf7-lite.chunk.js.map +0 -1
  93. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  94. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  96. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  98. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  99. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  100. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  101. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  102. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  103. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  104. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  105. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  106. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  107. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  108. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  109. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  110. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  111. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  112. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  113. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  114. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  115. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  116. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  117. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  118. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  119. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  120. package/dist/scripts/8077-870bd8e245-lite.chunk.js +0 -3
  121. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +0 -1
  122. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  123. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  124. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  125. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  126. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  127. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  128. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  129. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  130. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  131. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  132. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  133. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  134. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  135. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  136. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  137. package/dist/scripts/bundle-f926852f33.min.js +0 -3
  138. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  140. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  141. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  142. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  143. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  144. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  145. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  146. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  147. /package/dist/scripts/{1938-e067e06dac-lite.chunk.js.LICENSE.txt → 1938-c52383e98d-lite.chunk.js.LICENSE.txt} +0 -0
  148. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 3836-bf1359bed7-lite.chunk.js.LICENSE.txt} +0 -0
  149. /package/dist/scripts/{3836-2c82a9fbf7-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  150. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8077-bfb3530f78-lite.chunk.js.LICENSE.txt} +0 -0
  151. /package/dist/scripts/{8077-870bd8e245-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  152. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  153. /package/dist/scripts/{bundle-f926852f33.min.js.LICENSE.txt → bundle-dcea87749e.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4621-7fb0a05bcb-lite.chunk.js","mappings":"yKAIMA,EAAmB,I,iHC2BnB,SAAUC,EACdC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEA,I,ID1BgCC,EAC1BC,ECyB+C,G,GAAX,IAAAC,UAAS,G,EAAE,E,o4BAA7CC,EAAY,KAAEC,EAAe,KAE/BC,EAAcV,EAcdW,GAAW,OAZjB,SAAgBC,GACd,IAAKb,EACH,OAAO,KAET,IAAMc,EAAUd,EAAWa,GAE3B,OAAKC,EAGEA,EAAQC,IAFN,IAGX,EAIEZ,EACAC,GAwCF,ODrFgCE,ECwDd,CAChBU,cATF,WACE,GAAKf,GAAcD,GAAeY,EAIlC,OADAF,EAAgB,SAAAO,GAAU,OAAIA,EAAa,CAAC,GACrCN,EAAYC,EAASM,WAC9B,EAIEC,WAAWP,aAAQ,EAARA,EAAUM,YACrBE,WAAYR,aAAQ,EAARA,EAAUQ,WACtBf,gBAAAA,GD3DIE,EAAe,WACnB,IAAID,EAAQc,WAAZ,CAGA,GAAKd,EAAQD,gBAON,CACL,IAAQA,EAAoBC,EAApBD,gBAKR,GAJ4BA,EAAgBgB,wBAAwBC,OAASjB,EAAgBkB,UAEzElB,EAAgBmB,aAAe1B,EAGjD,MACH,MAVC,GAJ4B2B,OAAOC,YAAcC,SAASC,gBAAgBL,UAEtDI,SAASC,gBAAgBJ,aAAe1B,EAG1D,OAWJQ,EAAQU,eAnBA,CAoBV,GAEA,IAAAa,WAAU,WACR,IAAMC,EAAWC,EAAA,WAAwBxB,EAAc,KAEjDF,EAAkBC,EAAQD,iBAAmBoB,OAKnD,OAHInB,EAAQa,SACVd,EAAgB2B,iBAAiB,SAAUF,GAEtC,kBAAMzB,EAAgB4B,oBAAoB,SAAUH,EAAS,CACtE,EAAG,CAAExB,EAAQa,QAASb,EAAQU,cAAeV,EAAQD,mBC6BrD,IAAAwB,WAAU,WACHjB,GAGDA,EAASsB,oBAAsBjC,IACjCU,IACAD,EAAgB,SAAAO,GAAU,OAAIA,EAAa,CAAC,GAEhD,EAAG,CAAEL,aAAQ,EAARA,EAAUsB,mBAAoBjC,KAEnC,IAAA4B,WAAU,W,QACR,IAAKjB,aAAQ,EAARA,EAAUuB,aAAeJ,EAAA,aAA0B7B,GAAxD,CAGA,IAAMkC,IAAoE,QAA/B,EAAmB,QAAnB,EAAAxB,EAASuB,kBAAU,eAAEE,kBAAU,eAAEC,OAAO,EAAG,IAElFF,IAAoBG,EAAA,eAA+BH,IAAoBG,EAAA,eAG3ErC,EAAQO,EAAcG,EAASuB,WAPvB,CAQV,EAAG,CAACvB,aAAQ,EAARA,EAAUuB,aAEP,CACLK,MAAO5B,aAAQ,EAARA,EAAU4B,MACjBrB,WAAWP,aAAQ,EAARA,EAAUM,YACrBA,WAAYN,aAAQ,EAARA,EAAUM,WACtBE,WAAYR,aAAQ,EAARA,EAAUQ,WACtBqB,WAAY7B,aAAQ,EAARA,EAAU6B,WACtBC,sBAAuB9B,aAAQ,EAARA,EAAU8B,sBAErC,C,kDCtGM,SAAUC,EAAqBC,GACnC,OAAQA,GACN,KAAK,SACH,MAAO,OACT,KAAK,WACH,MAAO,SACT,KAAK,UACH,MAAO,QACT,KAAK,SACH,MAAO,OACT,KAAK,WACH,MAAO,SACT,KAAK,WACH,MAAO,SACT,QACE,MAAO,OAEb,C,qOCTMC,EAAY,6CA0BZ,SAAUC,EAAgCC,GAC9C,OACE,gBAAC,aAAiC,CAACC,MAAOH,GACxC,gBAAC,IAAU,KACT,gBAAC,UAAgB,CAACI,IAAK,oCAEvB,gBAAC,YAAkB,KAAC,gBAAC,IAAI,CAACC,OAAO,aAEjC,gBAAC,SAAe,KAAC,gBAAC,IAAI,CAACA,OAAO,UAE9B,gBAAC,QAAc,CACbC,KAAM,cAA0BN,EAAW,aAC3CO,KAAM,UACNC,QAAS,CACPC,YAAa,eACbC,OAAQ,yBACRC,KAAM,CAACT,EAAMU,iBAOzB,C,iHC5DA,SAAgB,aAAe,QAAQ,eAAiB,SCoBxD,IAAMC,EAAY,qBAAiC,uCAO7C,SAAUC,EAAyBZ,G,MA+BvC,OACE,gCACE,uBAAKa,UAAU,uCACb,uBAAKA,UAAS,UAAK,eAAmB,wBACpC,uBAAKA,UAAS,UAAK,mBACjB,gBAACC,EAAA,EAAU,CAACC,QAAS,WAAoBC,SAAS,OAAyC,QAApB,EAAAhB,EAAMiB,MAAMC,gBAAQ,eAAEC,YAIjG,qBAAGN,UAAU,wBAAwBb,EAAMiB,MAAMG,MAEjD,gBAACC,EAAA,EAAS,CAACR,UAAU,OAAOS,QAzClC,WACEC,EAAA,gBAA8B,CAAEC,GAAIxB,EAAMiB,MAAMO,GAAIJ,KAAMpB,EAAMiB,MAAMG,MAAQ,CAC5EK,OAAQ,oBACRC,cAAe,WACfC,WAAY,UACZC,SAAU,oCAGZ,eAA2B,CACzBrB,YAAa,eACbC,OAAQ,0BACRC,KAAM,CAAET,EAAM6B,UAAUL,GAAIxB,EAAMiB,MAAMO,KAE5C,GA6BQ,gBAACM,EAAA,EAAY,CACXf,QAAS,UACTgB,MAAOpB,EAAU,aACjBqB,iBAAiB,MACjBC,iBAAe,KAInB,gBAACZ,EAAA,EAAS,CAACC,QAnCjB,WACEC,EAAA,gBAA8B,CAAEC,GAAIxB,EAAMiB,MAAMO,GAAIJ,KAAMpB,EAAMiB,MAAMG,MAAQ,CAC5EK,OAAQ,oBACRC,cAAe,WACfC,WAAY,YACZC,SAAU,oCAGZ,eAA2B,CACzBrB,YAAa,eACbC,OAAQ,4BACRC,KAAM,CAAET,EAAM6B,UAAUL,GAAIxB,EAAMiB,MAAMO,KAE5C,GAuBQ,gBAACM,EAAA,EAAY,CACXf,QAAS,YACTgB,MAAOpB,EAAU,eACjBqB,iBAAiB,MACjBC,iBAAe,MAM3B,CCzFA,SAAgB,aAAe,SCoB/B,IAAM,EAAY,mCAEZC,EAAwB,SAACV,GAAU,MAAM,CAC7CjB,YAAa,eACbC,OAAQ,yBACRC,KAAM,CAACe,GACR,EAOK,SAAUW,EAAsBnC,G,QAa9BoC,GAAgB,OAAc,YAEpC,OAAiB,QAAZ,EAAApC,EAAMqC,cAAM,eAAEC,QAIjB,gBAAC,aAAiC,CAACrC,MAAO,GACxC,uBAAKY,UAAU,QACb,uBAAKA,UAAS,yCAAqCuB,EAAyB,GAAT,SACjE,sBAAIvB,UAAS,uBAAkB,iBAAuB,gBAAC,IAAI,CAACV,OAAO,YACnE,sBAAIU,UAAU,WAAU,gBAAC,IAAI,CAACV,OAAO,eACrC,gBAACoC,EAAA,EAAU,CACTjC,QAAS4B,EAAsBlC,EAAM6B,UAAUL,IAC/CF,QAzBV,WACEC,EAAA,gBAA8B,CAC5Bb,YAAaV,EAAM6B,UAAUL,GAC7BgB,cAAexC,EAAM6B,UAAUT,MAC9B,CACDM,cAAe,WACfD,OAAQ,oBACRE,WAAY,YACZC,SAAU,4BAEd,EAgBUf,UAAU,+BACVE,QAAS,WAET,gBAAC,IAAI,CAACZ,OAAO,gBAIjB,sBAAIU,UAAU,iCACG,QAAZ,EAAAb,EAAMqC,cAAM,eAAEC,SAAUtC,EAAMqC,OAAOI,IAAI,SAAAxB,GAAK,OAC/C,sBAAIjD,IAAKiD,EAAMO,IACb,gBAACZ,EAAwB,CAACiB,UAAW7B,EAAM6B,UAAWZ,MAAOA,IAC1D,MAtBN,gBAAClB,EAA+B,CAACW,YAAaV,EAAM6B,UAAUL,IA4BzE,C,0BC7EA,SAAgB,QAAU,QAAQ,YAAc,QAAQ,cAAgB,QAAQ,SAAW,QAAQ,MAAQ,QAAQ,aAAe,QAAQ,WAAa,SCMjJ,SAAUkB,IACd,OACE,uBAAK7B,UAAU,QAEb,uBAAKA,UAAS,0CAAqC,aAGnD,uBAAKA,UAAU,QACb,gBAAC,KAAkB,CAAC8B,SAAU,KAIhC,uBAAK9B,UAAU,QACb,gBAAC+B,EAAA,EAAsB,OAGzB,uBAAK/B,UAAU,QACb,uBAAKA,UAAU,6BAEb,uBAAKA,UAAU,aACb,uBAAKA,UAAS,qCAAgC,kBAGhD,uBAAKA,UAAU,aACb,uBAAKA,UAAS,qCAAgC,oBAIhD,uBAAKA,UAAS,6CAAwC,eAIxD,sBAAIA,UAAU,iBACXgC,MAAM,GAAGC,KAAK,MAAML,IAAI,SAACxB,EAAO8B,GAAC,OAChC,sBAAI/E,IAAK+E,EAAGlC,UAAU,QACpB,uBAAKA,UAAU,6BAEb,uBAAKA,UAAU,QACb,uBAAKA,UAAS,qCAAgC,YAIhD,uBAAKA,UAAU,uBACb,uBAAKA,UAAS,qCAAgC,mBAIhD,uBAAKA,UAAS,0CAAqC,gBAEnD,uBAAKA,UAAS,qCAAgC,iBAE7C,KAMjB,C,gDC5CamC,EAA0B,SAACtC,GACtC,IAAMuC,EAAc,kBAAkCC,EAAA,iBAEhDC,GAAS,SACTC,GAAW,UAEXC,EAAuB,SAACvF,GAC5B,OAAOwF,EAAA,qBAAqC5C,EAAa5C,EAC3D,EAEMG,EAAgB,SAACH,GAAe,OAAK,aAAgBsF,EAAhB,CAA0BC,EAAqBvF,GAAQ,EAS5FD,GAAW,UACfoF,EAAYM,OAAQ7C,IAAc2C,EAClCpF,EATF,SAAiBuF,EAAoBC,GACnC,GAAmB,IAAfD,EACF,OAAO,OAAgBC,GAEzBN,EAAOO,MAAM,cAtBC,mBAsBoC,SACpD,EAME,SAAA7F,GACE,OAAQA,EAAsC0F,IAChD,GAGF,OAAO,OAAP,wBACK1F,GAAQ,CACXX,UAAWe,GAEf,E,sBC9BM,EAAY,qBADA,8BAOZ,SAAU0F,EAAoB3D,G,cAC1B4D,GAAmB,EAAAC,EAAA,GAAY,MAA/BD,eACFX,EAAc,kBAAkCC,EAAA,iBAChDrB,EAAY,kBAAgCoB,EAAYM,MAC5DD,EAAA,eAA+BtD,EAAMwB,GAAIyB,EAAYM,KAAK/B,KACtDsC,EAAW,kBAAqCR,EAAA,uBAAuCtD,EAAMwB,KAC7FuC,EAAS,kBAA6BC,EAAA,YAEtCC,EAA0BjB,EAAsC,QAAd,EAAAnB,EAAU0B,YAAI,eAAE/B,IAElE4B,GAAW,WAEjB,EAAAc,EAAA,GAAmB,CACjBnC,MAAO,EAAU,YAAa,CAAES,cAA6B,QAAd,EAAAX,EAAU0B,YAAI,eAAEnC,UAEjE,EAAA+C,EAAA,GAAyBtC,GAEzB,IAAMuC,EAA0C,QAA7B,EAAc,QAAd,EAAAvC,EAAU0B,YAAI,eAAEc,qBAAa,eAAEC,SAkBlD,OALGzC,EAAU0B,OACG,QAAb,EAAAO,EAASP,YAAI,eAAEA,OACfU,EAAwBxE,OACxBsE,EAAOR,KAMR,gBAACgB,EAAA,EAAe,CACd1C,UAAWA,EAAU0B,KACrBN,YAAaA,EAAYM,KACzBiB,YAvBJ,SAAqBC,EAAoBC,EAAuBvH,GAC9D,IAAIiH,EAAJ,CAEA,IAAMrG,EAAU0G,EACZnB,EAAA,eACAA,EAAA,iBAEJ,UAAaF,EAAUrF,EAAQ8D,EAAU0B,KAAMmB,EAAWvH,GALlD,CAMV,EAgBIwH,UAAU,SACVP,WAAYA,EACZR,eAAgBA,IAEfK,aAAuB,EAAvBA,EAAyBxE,MAAM6C,QAC9B,gCACE,gBAACH,EAAqB,CACpBN,UAAWA,EAAU0B,KACrBlB,OAAQ4B,EAAwBxE,SAEhCwE,EAAwB5F,YAAc4F,EAAwB9F,aAC9D,gBAACyG,EAAA,EAAoB,CACnBvG,WAAY4F,EAAwB5F,WACpCnB,UAAW+G,EAAwB/G,UACnCiB,WAAY8F,EAAwB9F,cAIxC,gBAAC4B,EAA+B,CAACW,YAAamB,EAAU0B,KAAK/B,MAzB5D,gBAACkB,EAA4B,KA4BxC,C,wECtFM,SAAUmC,IACd,OAA6D,OAAY,MAAjEjB,EAAc,EAAdA,eAAgBkB,EAAa,EAAbA,cAAeC,EAAiB,EAAjBA,kBACvC,GAAqC,SAA7BC,EAAc,EAAdA,eAAgBC,EAAQ,EAARA,SAaxB,MAAO,CACLC,WAXKJ,EAGDE,EAAe,oBACV,OAELpB,EACK,eADT,EALS,OAWTuB,QAASJ,IAAsBE,EAEnC,C","sources":["file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/manage-classroom-group-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/manage-classroom-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/partial-manage-classrooms-groups.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useFetchClassroomGroups.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-groups/ClassroomGroupsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\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.manageClassroomGroupsEmptyState';\n\ninterface ManageClassroomGroupsEmptyStateProps {\n classroomId: string;\n}\n\nexport function RosteredClassroomGroupsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='info' /></EmptyState.Info>\n\n {/* todo add kb link */}\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n \n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomGroupsEmptyState(props: ManageClassroomGroupsEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.GROUPS} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addGroups')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [props.classroomId]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"B2Gwz\",\"groupContainer\":\"RXaVm\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './manage-classroom-group-item.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('classrooms.manageClassroomGroupItem');\n\ninterface ManageClassroomGroupItemProps {\n classroom: Classroom;\n group: ClassroomGroup;\n}\n\nexport function ManageClassroomGroupItem(props: ManageClassroomGroupItemProps): JSX.Element {\n function onClickEdit(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Edit,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n function onClickDelete(): void {\n AnalyticsHelper.logUserAction({ id: props.group.id, name: props.group.name }, {\n entity: EntityType.ClassroomGroup,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Delete,\n location: LocationContext.ManageClassroomGroupListItem\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.DELETE_GROUP,\n args: [ props.classroom.id, props.group.id ]\n });\n }\n\n return (\n <>\n <div className='d-flex align-items-center px-3 py-1'>\n <div className={`${styles.colourColumn} flex-shrink-0 me-2`}>\n <div className={`${styles.groupContainer}`}>\n <IconCircle svgName={cvSvgLibrary.Group} variant={mapColourToBsVariant(props.group.metadata?.colour)} />\n </div>\n </div>\n\n <p className='mb-0 me-auto clamp-2'>{props.group.name}</p>\n\n <DivButton className='me-2' onClick={onClickEdit}>\n <SvgContainer\n svgName={cvSvgLibrary.Edit}\n title={getPhrase('editGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n\n <DivButton onClick={onClickDelete}>\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={getPhrase('deleteGroup')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"colourColumn\":\"TpyUA\"};","import * as React from 'react';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, ClassroomGroup } 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 { ManageClassroomGroupItem } from 'apps/classrooms/components/manage-classroom-group-item/ManageClassroomGroupItem';\n\nimport { ManageClassroomGroupsEmptyState } from './empty-state/ManageClassroomGroupsEmptyState';\n\nimport styles from './manage-classroom-groups.scss';\n\nconst namespace = 'classrooms.manageClassroomGroups';\n\nconst getCreateGroupAppLink = (id: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id]\n});\n\ninterface ManageClassroomGroupsProps {\n classroom: Classroom;\n groups: ClassroomGroup[];\n}\n\nexport function ManageClassroomGroups(props: ManageClassroomGroupsProps): JSX.Element {\n function onClickCreateGroup(): void {\n AnalyticsHelper.logUserAction({\n classroomId: props.classroom.id,\n classroomName: props.classroom.name\n }, {\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup,\n actionType: UserAction.Create,\n location: LocationContext.ManageClassroomGroups\n });\n }\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.groups?.length)\n return <ManageClassroomGroupsEmptyState classroomId={props.classroom.id} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='py-2'>\n <div className={`d-flex align-items-center mb-2 ${!isSmallScreen ? 'ps-3' : ''}`}>\n <h2 className={`h6 mb-0 me-2 ${styles.colourColumn}`}><Text phrase='colour' /></h2>\n <h2 className='h6 mb-0'><Text phrase='groupName' /></h2>\n <IconButton\n appLink={getCreateGroupAppLink(props.classroom.id)}\n onClick={onClickCreateGroup}\n className='btn btn-outline-dark ms-auto'\n svgName={cvSvgLibrary.Plus}\n >\n <Text phrase='createNew' />\n </IconButton>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {!!props.groups?.length && props.groups.map(group => (\n <li key={group.id}>\n <ManageClassroomGroupItem classroom={props.classroom} group={group} />\n </li>\n ))}\n </ul>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"bhtoZ\",\"nameHeading\":\"vytHM\",\"colourHeading\":\"yLWgp\",\"newGroup\":\"r5cCZ\",\"group\":\"ED2Tj\",\"colourPicker\":\"AYLSY\",\"actionIcon\":\"BX3vN\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classrooms-groups.scss';\n\nexport function PartialManageClassroomGroups(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='py-2'>\n <div className='d-flex align-items-center'>\n {/* Name heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.nameHeading}`} />\n </div>\n {/* Colour heading */}\n <div className='w-25 mb-2'>\n <div className={`partial-loading-background ${styles.colourHeading}`} />\n </div>\n\n {/* New group button */}\n <div className={`partial-loading-background ms-auto ${styles.newGroup}`} />\n </div>\n\n {/* List of partial group items */}\n <ul className='list-unstyled'>\n {Array(8).fill(null).map((group, i) => (\n <li key={i} className='mb-2'>\n <div className='d-flex align-items-center'>\n {/* Group name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.group}`} />\n </div>\n\n {/* Colour picker */}\n <div className='d-inline-block me-4'>\n <div className={`partial-loading-background ${styles.colourPicker}`} />\n </div>\n\n {/* Edit action */}\n <div className={`partial-loading-background me-2 ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`partial-loading-background ${styles.actionIcon}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\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 { 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 { ClassroomGroup, ClassroomGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nconst namespace = 'classrooms.hooks';\n\nexport type GetClassroomsResponse = UseInfiniteListResult<ClassroomGroup> & {\n fetchNext: (cursor?: string) => void;\n};\n\nexport const useFetchClassroomGroups = (classroomId: string): 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 return ClassroomRequests.getClassroomGroups(classroomId, 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<ClassroomGroup, ClassroomGroupCollection>(\n currentUser.data && classroomId ? getClassroomsRequest : false,\n fetchNextPage,\n onError,\n response => {\n return (response as ClassroomGroupCollection).data;\n }\n );\n\n return {\n ...response,\n fetchNext: fetchNextPage\n };\n};","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, UserCollection } from 'libs/shared/interfaces';\n\nimport { ManageClassroomGroupsEmptyState } from 'apps/classrooms/components/manage-classroom-groups/empty-state/ManageClassroomGroupsEmptyState';\nimport { ManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/ManageClassroomGroups';\nimport { PartialManageClassroomGroups } from 'apps/classrooms/components/manage-classroom-groups/partial-loading/PartialManageClassroomGroups';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useFetchClassroomGroups } from 'apps/classrooms/hooks/useFetchClassroomGroups';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomGroups';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomGroupsViewProps {\n id: string;\n}\n\nexport function ClassroomGroupsView(props: ClassroomGroupsViewProps): JSX.Element {\n const { hasShareFlowV2 } = useSettings(null);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const students = Flight.useBasicFetch<UserCollection>(ClassroomRequests.getClassroomStudents(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const classroomGroupsResponse = useFetchClassroomGroups(classroom.data?.id);\n\n const dispatch = useDispatch();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n const isFetchingClassrooms =\n !classroom.data ||\n !students.data?.data ||\n !classroomGroupsResponse.items ||\n !config.data;\n\n if (isFetchingClassrooms)\n return <PartialManageClassroomGroups />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='groups'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {classroomGroupsResponse?.items.length ? (\n <>\n <ManageClassroomGroups\n classroom={classroom.data}\n groups={classroomGroupsResponse.items}\n />\n {(classroomGroupsResponse.isFetching || classroomGroupsResponse.nextCursor) && (\n <InfiniteScrollFooter\n isFetching={classroomGroupsResponse.isFetching}\n fetchNext={classroomGroupsResponse.fetchNext}\n nextCursor={classroomGroupsResponse.nextCursor}\n />\n )}\n </>\n ) : <ManageClassroomGroupsEmptyState classroomId={classroom.data.id} />}\n </ClassroomLayout>\n );\n}\n","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ntype ClassroomExperience = 'none' | 'minimal' | 'full';\n\nexport function useClassroomExperience() {\n const { hasShareFlowV2, hasClassrooms, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (hasPermissions(PermissionName.ViewClassrooms))\n return 'full';\n \n if (hasShareFlowV2)\n return 'minimal';\n }\n\n return {\n experience: getExperience(),\n loading: isLoadingSettings || !isLoaded\n };\n}"],"names":["SCROLL_TOLERANCE","useInfiniteList","getRequest","fetchNext","onError","getItems","getCursor","scrollContainer","options","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","key","fetchNextPage","currentVal","nextCursor","hasMore","isFetching","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","statusCode","httpStatusClass","toString","substr","HttpStatus","items","totalItems","hasFirstPageCompleted","mapColourToBsVariant","groupColour","namespace","ManageClassroomGroupsEmptyState","props","value","src","phrase","text","icon","appLink","application","action","args","classroomId","getPhrase","ManageClassroomGroupItem","className","IconCircle","svgName","variant","group","metadata","colour","name","DivButton","onClick","AnalyticsHelper","id","entity","workflowPhase","actionType","location","classroom","SvgContainer","title","tooltipPlacement","tooltipSpanHack","getCreateGroupAppLink","ManageClassroomGroups","isSmallScreen","groups","length","IconButton","classroomName","map","PartialManageClassroomGroups","numItems","PartialPillTabSelector","Array","fill","i","useFetchClassroomGroups","currentUser","UserRequests","alerts","dispatch","getClassroomsRequest","ClassroomRequests","data","pageNumber","httpStatus","error","ClassroomGroupsView","hasShareFlowV2","useSettings","students","config","ConfigRequests","classroomGroupsResponse","useSetPageMetadata","useHandleClassroomErrors","isRostered","_integrations","rostered","ClassroomLayout","onTogglePin","shouldPin","onSuccess","activeTab","InfiniteScrollFooter","useClassroomExperience","hasClassrooms","isLoadingSettings","hasPermissions","isLoaded","experience","loading"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4806],{34079:(e,t,n)=>{n.d(t,{O:()=>o});var r=n(32735),a=n(23481),l=n(40782),i=n(36532),s=a.T.encloseNamespace("interactives.pendingIndicator");function c(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function o(e){var t=e.title,n=e.showLabel,a=e.tooltipClassName,o=e.showIndicator,u=void 0===o||o,m=function(){return r.createElement("div",{className:c(e)},!!n&&r.createElement("em",null,s("pending")),!!u&&r.createElement(l.O,null))};return t?r.createElement(i.u,{title:t,spanHack:!0,spanHackClassName:a||"h-100 w-100 d-flex align-items-center"},r.createElement(m,null)):r.createElement(m,null)}},84806:(e,t,n)=>{n.d(t,{Ju:()=>Z,bB:()=>F,l8:()=>q,R7:()=>j,lE:()=>A,Fx:()=>H});var r=n(32735),a=n(23481),l=n(75896),i=n(34079),s=n(26136),c=n(39157),o=n(97364),u=n(77640),m=n(97408),d=n(40782),v=n(83914),f=n(80845),g=n(64818),p=n(26378),h=n(71151),w=n(93264),E=n(84120);function y(e){return e.duration?r.createElement(r.Fragment,null,e.interactive.timepoints.map(function(t,n){if(!t.interactions.length)return r.createElement(r.Fragment,null);var a,l,i=(a=t,l=e.selectedInteraction,a.interactions.find(function(e){return e.id===l.id})||a.interactions[0]),s=i.id===e.selectedInteraction.id,c=s?E.w.getTypeInfo(i.typeId).bgClassName:"bg-gray-500",o=t.visibleAt/1e3/e.duration*100;return r.createElement("div",{key:n,className:"".concat("Wf1bl"," text-center"),style:{left:"".concat(o,"%")}},r.createElement("div",{className:"".concat("Fpm49"," ").concat(c)}),!!s&&r.createElement("div",null,w.T.ToDisplayDuration(t.visibleAt)))})):r.createElement(r.Fragment,null)}var N=n(86572);var b=a.T.encloseNamespace("shared.interactionResultsSummary");function C(e){var t,n=r.useMemo(function(){return(0,c.nq)(e.interaction,e.results)},[e.interaction,e.results]);return r.createElement("div",{className:"px-1 pt-1"},r.createElement("div",{className:"d-flex"},r.createElement(N.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),r.createElement("div",{className:"my-4 ".concat("FCXQd")},r.createElement(y,{interactive:e.interactive,duration:(t=e.interactiveMetadata,t._parentClip?t._parentClip.endTime-t._parentClip.startTime:t._parentVideo.duration?t._parentVideo.duration/1e3:0),selectedInteraction:e.interaction})),r.createElement("div",{className:"row pt-1 pb-2"},r.createElement("div",{className:"col-6 pe-1"},r.createElement("div",{className:"bg-light rounded p-2 h-100"},!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-between"},r.createElement("strong",null,b("correctlyAnswered")),r.createElement(d.O,{percentage:n.percentCorrect,layout:d.I.LabelOnly})),!!n.awaitingMarking&&r.createElement("div",{className:"d-flex align-items-center justify-content-center"},r.createElement("strong",null,r.createElement("em",null,b("pending")))))),r.createElement("div",{className:"col-6 ps-1"},r.createElement("div",{className:"bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between"},r.createElement("strong",null,b("unanswered")),r.createElement("span",null,n.unanswered)))))}var x=r.forwardRef(function(e,t){var n=e.interaction,a=e.interactive,l=e.interactiveMetadata,i=e.results,s=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n}(e,["interaction","interactive","interactiveMetadata","results"]);return r.createElement("div",{className:"popover-lg"},r.createElement(h.Z,Object.assign({id:"interaction-results-summary-".concat(n.id),ref:t},s),r.createElement(h.Z.Body,null,r.createElement(C,{interaction:n,interactive:a,interactiveMetadata:l,results:i}))))}),M=n(19912);function k(e){var t;return r.createElement(p.Z,{trigger:(null===(t=e.results.students)||void 0===t?void 0:t.length)?"click":null,placement:"bottom",overlay:r.createElement(x,{interaction:e.interaction,interactive:e.interactive,interactiveMetadata:e.interactiveMetadata,results:e.results}),rootClose:!0},r.createElement("div",{className:"text-center h-100\n d-flex align-items-center justify-content-center\n ".concat(M.Z.interactionHeaderCellInner),onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave},r.createElement("div",{className:"p-1 position-relative"},e.interactionNumber)))}var I=n(28972),S=n(83140),R=n(35223);function U(e){var t="".concat(M.Z.resultsCellInner," h-100 position-relative");return e===I.w.Correct&&(t+=" ".concat(M.Z.correct)),e===I.w.Incorrect&&(t+=" ".concat(M.Z.incorrect," text-danger")),e===I.w.AwaitingMarking&&(t+=" ".concat(M.Z.awaitingMarking)),e===I.w.UnAnswered&&(t+=" ".concat(M.Z.unanswered," text-warning")),t}function B(e){var t=S.A.isInteractionCorrect(e.interaction,(0,f.j_)(e.studentResults)),n=function(e){return e===I.w.Correct?R.vn.Check:e===I.w.Incorrect?R.vn.Close:e===I.w.UnAnswered?R.vn.Minus:void 0}(t);return r.createElement("div",{className:U(t)},!!n&&r.createElement(v.x,{svgName:n}),t===I.w.AwaitingMarking&&r.createElement(i.O,null))}var O=a.T.encloseNamespace("shared.studentResultsTable"),Z=60;function T(e,t){var n;if(e.sessionId||e.deleted||t){var r=(0,s.B)(e,t).split(" ").filter(function(e){return!!e});return{name:r[0],surname:r.slice(1).join(" ")||"",avatarUrl:null}}return{name:e.displayName||e.name,surname:e.surname||"",avatarUrl:null===(n=e.avatar)||void 0===n?void 0:n.url}}function _(e){var t;return r.createElement("div",{className:"d-flex align-items-center p-2 h-100 ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function L(e){return r.createElement(_,{className:e.column.isSorted&&"fw-bold"},O(e.phraseKey))}function j(e,t,n,a){var l,c=!!(null===(l=e.students)||void 0===l?void 0:l.length);return r.useMemo(function(){var e=[];return a?e.push({id:"firstName",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"firstName"})},accessor:function(e){return e},width:130,Cell:function(e){var a=e.value,l=T(a.user,t),i=l.name,s=l.surname,c=l.avatarUrl;return r.createElement(_,null,r.createElement("div",{className:"d-inline-block flex-shrink-0 p-1 ".concat(M.Z.avatar)},r.createElement(m.q,{imageUrl:c,imageCdnUrl:n,initials:g.l.getInitials(i,s),showAnonymousUser:!(t||!a.user.sessionId&&!a.user.deleted),anonymiseUsers:t,anonymousSvgSize:v.S.Small})),r.createElement("div",{className:"ms-2 overflow-hidden"},r.createElement("h4",{className:"font-size-normal fw-normal m-0 text-truncate"},i)))},disableSortBy:!c},{id:"surname",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"surname"})},accessor:function(e){return e},width:130,Cell:function(e){var n=T(e.value.user,t).surname;return r.createElement(_,null,r.createElement("div",{className:"overflow-hidden"},r.createElement("h5",{className:"font-size-normal fw-normal m-0 text-truncate"},n||"")))},disableSortBy:!c}):e.push({id:"name",Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"name"})},accessor:function(e){return e},width:n?175:void 0,Cell:function(e){var a=e.value;return n?r.createElement(_,null,r.createElement(u.t,{user:a.user,imageCdnUrl:n,anonymiseUsers:t,detailsClassName:"ms-2 overflow-hidden",nameClassName:"text-truncate",showDisplayName:!0,avatarClassName:"p-1",showSubText:!1})):r.createElement(_,null,r.createElement("span",{className:"text-truncate"},(0,s.B)(a.user,t)))},disableSortBy:!c}),e.push({Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"unanswered"})},accessor:"summary.unanswered",sortType:"basic",sortDescFirst:!0,disableSortBy:!c,width:a?120:130,Cell:function(e){var t=e.value;return r.createElement(_,null,t)}},{Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"score"})},accessor:"summary",id:"score",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(_,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0,showIndicator:!a})):r.createElement(_,null,"".concat(t.correct,"/").concat(t.answered+t.unanswered))},width:a?80:125,sortDescFirst:!0,disableSortBy:!c},{Header:function(e){var t=e.column;return r.createElement(L,{column:t,phraseKey:"percentage"})},accessor:"summary",id:"percentage",Cell:function(e){var t=e.value;return t.awaitingMarking?r.createElement(_,null,r.createElement(i.O,{title:O("markingRequired"),className:"flex-grow-1",showLabel:!0})):r.createElement(_,null,r.createElement(d.O,{percentage:t.percentCorrect,layout:d.I.LabelBefore,className:"flex-grow-1"}))},width:125,sortDescFirst:!0,disableSortBy:!c}),e},[t,c])}function A(e,t,n,a,l){return r.useMemo(function(){return(0,f.Q)(e).map(function(l,i){return{Header:function(){return r.createElement(k,{interaction:l,results:n,interactive:e,interactiveMetadata:t,interactionNumber:i+1,onMouseEnter:function(){return a(i)},onMouseLeave:function(){return a(null)}})},accessor:"results",id:l.id,disableSortBy:!0,width:Z,Cell:function(e){var t=e.row.original;return r.createElement(B,{interaction:l,studentResults:t})}}})},[l])}function H(e,t,n,a,i,u,m){return r.useMemo(function(){var n=[];if(null==t||t.students.forEach(function(t){var r=(0,c.Rt)(e,t);u&&(0,o.C)(u,r)||n.push(Object.assign(Object.assign({},t),{summary:r}))}),"name"===(null==i?void 0:i.id)){var r=l.m.sortBy(n,function(e){return(0,s.B)(e.user,a)});return i.desc?r.reverse():r}if("firstName"===(null==i?void 0:i.id)){var m=l.m.sortBy(n,function(e){return T(e.user,a).name||"￿"});return i.desc?m.reverse():m}if("surname"===(null==i?void 0:i.id)){var d=l.m.sortBy(n,function(e){return T(e.user,a).surname||"￿"});return i.desc?d.reverse():d}if("summary.unanswered"===(null==i?void 0:i.id)){var v=l.m.sortBy(n,function(e){return e.summary.unanswered});return i.desc?v.reverse():v}if("score"===(null==i?void 0:i.id)||"percentage"===(null==i?void 0:i.id)){var f=l.m.sortBy(n,function(e){return e.summary.awaitingMarking?-1:e.summary.percentCorrect});return i.desc?f.reverse():f}return n},[n,i,a,u,m])}function F(e,t){if(e){var n=e.querySelectorAll(".".concat(M.Z.resultsRow));null==n||n.forEach(function(e){e.childNodes.forEach(function(e,n){e.classList.remove(M.Z.highlightColumn),n===t&&e.classList.add(M.Z.highlightColumn)})})}}function q(e,t){if(e){var n=e.querySelectorAll(".".concat(M.Z.resultsRow));null==n||n.forEach(function(e,n){e.classList.remove(M.Z.highlightResultsRow),n===t&&e.classList.add(M.Z.highlightResultsRow)})}}},97364:(e,t,n)=>{n.d(t,{C:()=>l,P:()=>a});var r=n(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function l(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=r.T.HIGH||"not_completed"===e&&!t.unanswered}},77640:(e,t,n)=>{n.d(t,{t:()=>f});var r=n(32735),a=n(23481),l=n(31453),i=n(26136),s=n(97408),c=n(83914),o=n(76881),u=n(86613),m=n(64818),d=n(26521),v=a.T.encloseNamespace("shared.userRecipientItemMetadata");function f(e){var t=function(e){var t,n=e.user,r=e.anonymiseUsers,a=e.showDisplayName;if(n.sessionId||n.deleted){var l=(0,i.B)(n,r),s=l.split(" ").filter(function(e){return!!e});return{name:l,surname:s.slice(1).join(" "),avatarUrl:null}}return{name:r?(0,i.B)(n,!0):a?m.l.getDisplayName(n):m.l.getFullName(n),surname:n.surname,avatarUrl:null===(t=n.avatar)||void 0===t?void 0:t.url}}(e),n=t.name,a=t.surname,f=t.avatarUrl;return r.createElement(r.Fragment,null,r.createElement("div",{className:"".concat(d.Z.avatarContainer," ").concat(e.avatarClassName," d-inline-block flex-shrink-0")},r.createElement(s.q,{imageUrl:f,imageCdnUrl:e.imageCdnUrl,initials:m.l.getInitials(n,a),showAnonymousUser:!(e.anonymiseUsers||!e.user.sessionId&&!e.user.deleted),anonymiseUsers:e.anonymiseUsers,anonymousSvgSize:c.S.Small})),r.createElement("div",{className:e.detailsClassName},r.createElement("h4",{className:(0,l.A)("font-size-normal fw-normal m-0",e.nameClassName)},n),e.showSubText&&"id"in e.user&&r.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=m.l.getUserType(e),n=m.l.getUserRole(e);if(t===o.Y.Staff)return n===u.i.Admin?v("admin"):v("staff");var r=m.l.getYearGroup(e);return(null==r?void 0:r.name)&&"Learners"!==r.name?r.name:v("student")}(e.user))))}f.defaults={showSubText:!0}},19912:(e,t,n)=>{n.d(t,{Z:()=>r});const r={header:"hnMke",avatar:"b7JCz",row:"ILLa_",fixedTable:"_fdpt",interactionHeaderCellOuter:"kjXYB",hasResults:"M4qgr",interactionHeaderCellInner:"cnFvB",resultsCellOuter:"bdzRb",correct:"xANR6",incorrect:"_44sb",awaitingMarking:"eQ9sh",unanswered:"xRUK8",highlightColumn:"f9Zqr",resultsCellInner:"LAFwi",highlightResultsRow:"TwwLO",resultsRow:"xZ5iP"}},26521:(e,t,n)=>{n.d(t,{Z:()=>r});const r={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"}}}]);
2
- //# sourceMappingURL=4806-a6f31d703c-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4806-a6f31d703c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/pending-indicator/PendingIndicator.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/InteractionsBar.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interactions-bar/interactions-bar.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/interaction-results-summary/interaction-results-summary.scss","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/InteractionHeaderCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultCell.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/StudentResultsTableUtils.tsx","file:///app/packages/libs/shared/src/apps/analytics/utils/StudentTableUtils.ts","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/student-results/student-results-table/student-results-table.scss","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PercentageIndicator } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'interactives.pendingIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getClassName(props: PendingIndicatorProps): string {\n let className = 'd-flex align-items-center h-100';\n\n className += props.showLabel ? ' justify-content-between' : ' justify-content-center';\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface PendingIndicatorProps {\n title?: string;\n className?: string;\n showLabel?: boolean;\n tooltipClassName?: string;\n showIndicator?: boolean;\n}\n\nexport function PendingIndicator(props: PendingIndicatorProps): JSX.Element {\n const { title, showLabel, tooltipClassName, showIndicator = true } = props;\n\n const Indicator = () => (\n <div className={getClassName(props)}>\n {!!showLabel &&\n <em>{getPhrase('pending')}</em>\n }\n {!!showIndicator &&\n <PercentageIndicator />\n }\n </div>\n );\n\n if (!title)\n return <Indicator />;\n\n return (\n <Tooltip title={title} spanHack spanHackClassName={tooltipClassName || 'h-100 w-100 d-flex align-items-center'}>\n <Indicator />\n </Tooltip>\n );\n}","import React from 'react';\n\nimport { Interaction, Interactive, Timepoint } from 'libs/shared/interfaces';\nimport { DurationHelper } from 'libs/shared/utils/DurationHelper';\nimport { InteractionTypeHelper } from 'libs/shared/utils/interaction-type-helper/InteractionTypeHelper';\n\nimport styles from './interactions-bar.scss';\n\nfunction getInteraction(timepoint: Timepoint, selectedInteraction: Interaction): Interaction {\n return timepoint.interactions.find(i => i.id === selectedInteraction.id) || timepoint.interactions[0];\n}\n\ninterface InteractionBarProps {\n interactive: Interactive;\n duration: number;\n selectedInteraction: Interaction;\n}\n\nexport function InteractionsBar(props: InteractionBarProps): React.ReactElement {\n if (!props.duration)\n return <></>;\n\n return (\n <>\n {props.interactive.timepoints.map((t, i) => {\n if (!t.interactions.length)\n return <></>;\n\n const interaction = getInteraction(t, props.selectedInteraction);\n const isSelected = interaction.id === props.selectedInteraction.id;\n\n const bgClassName = isSelected ? (InteractionTypeHelper.getTypeInfo(interaction.typeId)).bgClassName : 'bg-gray-500';\n\n const left = ((t.visibleAt / 1000) / props.duration) * 100;\n\n return (\n <div\n key={i}\n className={`${styles.container} text-center`}\n style={{ left: `${left}%` }}\n >\n <div className={`${styles.interaction} ${bgClassName}`} />\n {!!isSelected &&\n <div>\n {DurationHelper.ToDisplayDuration(t.visibleAt)}\n </div>\n }\n </div>\n );\n })}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Wf1bl\",\"interaction\":\"Fpm49\"};","import React from 'react';\nimport { Popover } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InteractionsBar } from 'libs/shared/apps/analytics/components/student-results/interactions-bar/InteractionsBar';\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 { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './interaction-results-summary.scss';\n\nconst namespace = 'shared.interactionResultsSummary';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDuration(interactiveMetadata: InteractiveMetadata): number {\n if (interactiveMetadata._parentClip)\n return interactiveMetadata._parentClip.endTime - interactiveMetadata._parentClip.startTime;\n\n if (!interactiveMetadata._parentVideo.duration)\n return 0;\n\n return interactiveMetadata._parentVideo.duration / 1000;\n}\n\ninterface InteractionResultsSummaryProps {\n interaction: Interaction;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n results: InteractiveResultSet;\n}\n\nfunction InteractionResultsSummary(props: InteractionResultsSummaryProps): JSX.Element {\n const summary = React.useMemo(\n () => getInteractionResultsSummary(props.interaction, props.results),\n [ props.interaction, props.results ]\n );\n\n return (\n <div className='px-1 pt-1'>\n <div className='d-flex'>\n <InteractionLabel\n interaction={props.interaction}\n iconClassName='flex-shrink-0'\n />\n </div>\n <div className={`my-4 ${styles.bar}`}>\n <InteractionsBar\n interactive={props.interactive}\n duration={getDuration(props.interactiveMetadata)}\n selectedInteraction={props.interaction}\n />\n </div>\n <div className='row pt-1 pb-2'>\n <div className='col-6 pe-1'>\n <div className='bg-light rounded p-2 h-100'>\n {!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('correctlyAnswered')}</strong>\n <PercentageIndicator\n percentage={summary.percentCorrect}\n layout={PercentageIndicatorLayout.LabelOnly}\n />\n </div>\n }\n {!!summary.awaitingMarking &&\n <div className='d-flex align-items-center justify-content-center'>\n <strong>\n <em>{getPhrase('pending')}</em>\n </strong>\n </div>\n }\n </div>\n </div>\n <div className='col-6 ps-1'>\n <div className='bg-light rounded h-100 p-2 d-flex align-items-center justify-content-between'>\n <strong>{getPhrase('unanswered')}</strong>\n <span>{summary.unanswered}</span>\n </div>\n </div>\n </div>\n </div>\n );\n}\n\nconst InteractionResultsSummaryPopover = React.forwardRef((\n { interaction, interactive, interactiveMetadata, results, ...popoverProps }: InteractionResultsSummaryProps,\n ref: React.MutableRefObject<HTMLElement>\n) => {\n return (\n <div className='popover-lg'>\n <Popover\n id={`interaction-results-summary-${interaction.id}`}\n ref={ref as any}\n {...popoverProps}\n >\n <Popover.Body>\n <InteractionResultsSummary\n interaction={interaction}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n results={results}\n />\n </Popover.Body>\n </Popover>\n </div>\n );\n});\n\nexport { InteractionResultsSummaryPopover as InteractionResultsSummary };","// extracted by mini-css-extract-plugin\nexport default {\"bar\":\"FCXQd\"};","import React from 'react';\nimport { OverlayTrigger } from 'react-bootstrap';\n\nimport { InteractionResultsSummary } from 'libs/shared/apps/analytics/components/student-results/interaction-results-summary/InteractionResultsSummary';\nimport { Interaction, Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\n\nimport styles from './student-results-table.scss';\n\ninterface InteractionHeaderCellProps {\n interaction: Interaction;\n results: InteractiveResultSet;\n interactionNumber: number;\n interactive: Interactive;\n interactiveMetadata: InteractiveMetadata;\n onMouseEnter?: () => void;\n onMouseLeave?: () => void;\n}\n\nexport function InteractionHeaderCell(props: InteractionHeaderCellProps): JSX.Element {\n return (\n <OverlayTrigger\n trigger={props.results.students?.length ? 'click' : null}\n placement='bottom'\n overlay={\n <InteractionResultsSummary\n interaction={props.interaction}\n interactive={props.interactive}\n interactiveMetadata={props.interactiveMetadata}\n results={props.results}\n />\n }\n rootClose\n >\n <div\n className={\n `text-center h-100\n d-flex align-items-center justify-content-center\n ${styles.interactionHeaderCellInner}`\n }\n onMouseEnter={props.onMouseEnter}\n onMouseLeave={props.onMouseLeave}\n >\n <div className='p-1 position-relative'>\n {props.interactionNumber}\n </div>\n </div>\n </OverlayTrigger>\n );\n}","import React from 'react';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { Interaction, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './student-results-table.scss';\n\nfunction getSvgName(correctness: InteractionCorrectness): string {\n if (correctness === InteractionCorrectness.Correct)\n return cvSvgLibrary.Check;\n\n if (correctness === InteractionCorrectness.Incorrect)\n return cvSvgLibrary.Close;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n return cvSvgLibrary.Minus;\n\n return;\n}\n\nfunction getClassName(correctness: InteractionCorrectness): string {\n let className = `${styles.resultsCellInner} h-100 position-relative`;\n\n if (correctness === InteractionCorrectness.Correct)\n className += ` ${styles.correct}`;\n\n if (correctness === InteractionCorrectness.Incorrect)\n className += ` ${styles.incorrect} text-danger`;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n className += ` ${styles.awaitingMarking}`;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n className += ` ${styles.unanswered} text-warning`;\n\n return className;\n}\n\ninterface StudentResultCellProps {\n interaction: Interaction;\n studentResults: StudentResults;\n}\n\nexport function StudentResultCell(props: StudentResultCellProps): JSX.Element {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(\n props.interaction,\n getStudentResult(props.studentResults)\n );\n\n const svgName = getSvgName(correctness);\n\n return (\n <div className={getClassName(correctness)}>\n {!!svgName && <SvgContainer svgName={svgName} />}\n {correctness === InteractionCorrectness.AwaitingMarking &&\n <PendingIndicator />\n }\n </div>\n );\n}","import React from 'react';\nimport { CellProps, Column, ColumnInstance, SortingRule } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PendingIndicator } from 'libs/shared/apps/analytics/components/pending-indicator/PendingIndicator';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { getStudentResultsSummary } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { FilterStudentsBy, shouldFilterStudent } from 'libs/shared/apps/analytics/utils/StudentTableUtils';\nimport { UserRecipientItemMetadata } from 'libs/shared/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { PercentageIndicator, PercentageIndicatorLayout } from 'libs/shared/components/percentage-indicator/PercentageIndicator';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Interactive, InteractiveMetadata, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { getInteractions } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InteractionHeaderCell } from './InteractionHeaderCell';\nimport { StudentResultCell } from './StudentResultCell';\n\nimport styles from './student-results-table.scss';\n\nconst namespace = 'shared.studentResultsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RESULTS_COL_WIDTH = 60;\n\nfunction getUserProps(user: AnonUser, anonymiseUsers: boolean) {\n if (user.sessionId || user.deleted || anonymiseUsers) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: nameParts[0],\n surname: nameParts.slice(1).join(' ') || '',\n avatarUrl: null\n };\n }\n\n return {\n name: user.displayName || user.name,\n surname: user.surname || '',\n avatarUrl: user.avatar?.url\n };\n}\n\ninterface CellWrapperProps {\n className?: string;\n}\n\nfunction CellWrapper(props: React.PropsWithChildren<CellWrapperProps>): JSX.Element {\n return (\n <div className={`d-flex align-items-center p-2 h-100 ${props.className ?? ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderCellProps {\n column: ColumnInstance<StudentResultsWithSummary>;\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 useGetFixedColumns(\n results: InteractiveResultSet,\n anonymiseUsers: boolean,\n imageCdnUrl?: string,\n showSeparateNameColumns?: boolean\n): Column<StudentResultsWithSummary>[] {\n const hasResults = !!results.students?.length;\n\n return React.useMemo(() => {\n const cols: Column<StudentResultsWithSummary>[] = [];\n\n if (showSeparateNameColumns) {\n // Add separate name and surname columns\n cols.push(\n {\n id: 'firstName',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='firstName' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { name, surname, avatarUrl } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className={`d-inline-block flex-shrink-0 p-1 ${styles.avatar}`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!anonymiseUsers && (!!value.user.sessionId || !!value.user.deleted)}\n anonymiseUsers={anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n <div className='ms-2 overflow-hidden'>\n <h4 className='font-size-normal fw-normal m-0 text-truncate'>\n {name}\n </h4>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n },\n {\n id: 'surname',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='surname' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n const { surname } = getUserProps(value.user, anonymiseUsers);\n return (\n <CellWrapper>\n <div className='overflow-hidden'>\n <h5 className='font-size-normal fw-normal m-0 text-truncate'>\n {surname || ''}\n </h5>\n </div>\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n }\n );\n } else {\n // Add single name column (existing behavior)\n cols.push({\n id: 'name',\n Header: ({ column }) => <HeaderCell column={column} phraseKey='name' />,\n accessor: (u: StudentResultsWithSummary) => u,\n width: imageCdnUrl ? 175 : undefined,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, StudentResultsWithSummary>) => {\n if (!imageCdnUrl) {\n return (\n <CellWrapper>\n <span className='text-truncate'>{anonymiseUserName(value.user, anonymiseUsers)}</span>\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <UserRecipientItemMetadata\n user={value.user}\n imageCdnUrl={imageCdnUrl}\n anonymiseUsers={anonymiseUsers}\n detailsClassName='ms-2 overflow-hidden'\n nameClassName='text-truncate'\n showDisplayName\n avatarClassName='p-1'\n showSubText={false}\n />\n </CellWrapper>\n );\n },\n disableSortBy: !hasResults\n });\n }\n\n cols.push(\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='unanswered' />,\n accessor: 'summary.unanswered' as keyof StudentResultsWithSummary,\n sortType: 'basic', // Default is 'alphanumeric' which would treat the numbers as strings\n sortDescFirst: true,\n disableSortBy: !hasResults,\n width: showSeparateNameColumns ? 120 : 130,\n Cell: ({ value }: CellProps<StudentResultsWithSummary, any>) => <CellWrapper>{value}</CellWrapper>\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='score' />,\n accessor: 'summary',\n id: 'score',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n showIndicator={!showSeparateNameColumns}\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n {`${value.correct}/${value.answered + value.unanswered}`}\n </CellWrapper>\n );\n },\n width: showSeparateNameColumns ? 80 : 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n },\n {\n Header: ({ column }) => <HeaderCell column={column} phraseKey='percentage' />,\n accessor: 'summary',\n id: 'percentage',\n Cell: ({ value }) => {\n if (value.awaitingMarking) {\n return (\n <CellWrapper>\n <PendingIndicator\n title={getPhrase('markingRequired')}\n className='flex-grow-1'\n showLabel\n />\n </CellWrapper>\n );\n }\n\n return (\n <CellWrapper>\n <PercentageIndicator\n percentage={value.percentCorrect}\n layout={PercentageIndicatorLayout.LabelBefore}\n className='flex-grow-1'\n />\n </CellWrapper>\n );\n },\n width: 125,\n sortDescFirst: true,\n disableSortBy: !hasResults\n }\n );\n\n return cols;\n }, [ anonymiseUsers, hasResults ]);\n}\n\n/**\n * Returns memoized table columns. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultColumns(\n interactive: Interactive,\n interactiveMetadata: InteractiveMetadata,\n results: InteractiveResultSet,\n onColumnHover: (index?: number) => void,\n refreshData: boolean\n): Column<StudentResultsWithSummary>[] {\n return React.useMemo(() => {\n const interactions = getInteractions(interactive);\n\n return interactions.map((interaction, index) => {\n const col: Column<StudentResultsWithSummary> = {\n Header: () => {\n return (\n <InteractionHeaderCell\n interaction={interaction}\n results={results}\n interactive={interactive}\n interactiveMetadata={interactiveMetadata}\n interactionNumber={index + 1}\n onMouseEnter={() => onColumnHover(index)}\n onMouseLeave={() => onColumnHover(null)}\n />\n );\n },\n accessor: 'results',\n /**\n * `onSelectStudentResponse` in `StudentResultsTable` expects the column id to the interaction id\n */\n id: interaction.id,\n disableSortBy: true,\n width: RESULTS_COL_WIDTH,\n Cell: ({ row: { original: studentResults } }) => (\n <StudentResultCell interaction={interaction} studentResults={studentResults} />\n )\n };\n return col;\n });\n }, [refreshData]);\n}\n\n/**\n * Returns memoized table data. To trigger a recalculation, toggle the value of `refreshData`.\n */\nexport function useGetResultsTableData(\n interactive: Interactive,\n results: InteractiveResultSet,\n refreshData: boolean,\n anonymiseUsers: boolean,\n sortBy?: SortingRule<StudentResultsWithSummary>,\n filterBy?: FilterStudentsBy,\n showSeparateNameColumns?: boolean\n): StudentResultsWithSummary[] {\n return React.useMemo(() => {\n const students: StudentResultsWithSummary[] = [];\n\n results?.students.forEach(s => {\n const summary = getStudentResultsSummary(interactive, s);\n\n if (filterBy && shouldFilterStudent(filterBy, summary)) return;\n\n students.push({ ...s, summary });\n });\n\n if (sortBy?.id === 'name') {\n const sorted = ArrayHelper.sortBy(students, student => anonymiseUserName(student.user, anonymiseUsers));\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'firstName') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { name } = getUserProps(student.user, anonymiseUsers);\n return name || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'surname') {\n const sorted = ArrayHelper.sortBy(students, student => {\n const { surname } = getUserProps(student.user, anonymiseUsers);\n return surname || '\\uffff'; // Use high Unicode character to sort empty strings last\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'summary.unanswered') {\n const sorted = ArrayHelper.sortBy(students, student => student.summary.unanswered);\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n if (sortBy?.id === 'score' || sortBy?.id === 'percentage') {\n const sorted = ArrayHelper.sortBy(students, student => {\n if (student.summary.awaitingMarking)\n return -1;\n\n return student.summary.percentCorrect;\n });\n\n return sortBy.desc ? sorted.reverse() : sorted;\n }\n\n return students;\n }, [ refreshData, sortBy, anonymiseUsers, filterBy, showSeparateNameColumns ]);\n}\n\nexport function highlightColumns(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach(row => {\n row.childNodes.forEach((col: HTMLElement, colIdx: number) => {\n col.classList.remove(styles.highlightColumn);\n\n if (colIdx === highlightIndex)\n col.classList.add(styles.highlightColumn);\n });\n });\n}\n\nexport function highlightRows(tableEl: HTMLElement, highlightIndex?: number): void {\n if (!tableEl)\n return;\n\n const rows = tableEl.querySelectorAll(`.${styles.resultsRow}`);\n\n rows?.forEach((row, rowIdx) => {\n row.classList.remove(styles.highlightResultsRow);\n\n if (rowIdx === highlightIndex)\n row.classList.add(styles.highlightResultsRow);\n });\n}","import { SortingRule } from 'react-table';\n\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { ScoreThresholdInsights } from 'libs/shared/constants/ScoreThresholds';\n\nexport type SortStudentsBy = 'score_desc' | 'score_asc';\n\nexport function getSortStudents(sortBy: SortStudentsBy, id: string): SortingRule<any>[] {\n switch (sortBy) {\n case 'score_desc': return [{ id, desc: true }];\n case 'score_asc': return [{ id, desc: false }];\n default: return [];\n }\n}\n\nexport type FilterStudentsBy = 'not_completed' | 'marking_required' | 'helping_hand';\n\nexport function shouldFilterStudent(filter: FilterStudentsBy, summary: ResultsSummary): boolean {\n if (filter === 'marking_required' && !summary.awaitingMarking)\n return true;\n\n if (filter === 'helping_hand' && summary.percentCorrect >= ScoreThresholdInsights.HIGH)\n return true;\n\n if (filter === 'not_completed' && !summary.unanswered)\n return true;\n \n return false;\n}\n\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { anonymiseUserName } from 'libs/shared/apps/analytics/utils/AnonymiseUserUtils';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n \n /**\n * Tertiary puts all students into a single group called 'Learners'.\n * When a student is in the 'Learners' group, we don't want to display the group name,\n * but instead we want to just show \"Student\". - Sha\n */\n if (yearGroup?.name && yearGroup.name !== 'Learners')\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\nfunction getUserProps({\n user, anonymiseUsers, showDisplayName\n}: {\n user: AnonUser,\n showDisplayName: boolean;\n anonymiseUsers?: boolean;\n}) {\n if (user.sessionId || user.deleted) {\n const anonName = anonymiseUserName(user, anonymiseUsers);\n const nameParts = anonName.split(' ').filter(n => !!n);\n\n return {\n name: anonName,\n surname: nameParts.slice(1).join(' '),\n avatarUrl: null\n };\n }\n\n return {\n name: anonymiseUsers\n ? anonymiseUserName(user, true)\n : showDisplayName\n ? UserHelper.getDisplayName(user)\n : UserHelper.getFullName(user),\n surname: user.surname,\n avatarUrl: user.avatar?.url\n };\n}\n\nUserRecipientItemMetadata.defaults = {\n showSubText: true\n};\n\ninterface UserRecipientItemMetadataProps {\n user: AnonUser;\n imageCdnUrl: string;\n detailsClassName?: string;\n avatarClassName?: string;\n showDisplayName: boolean;\n nameClassName?: string;\n showSubText?: boolean;\n anonymiseUsers?: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n const { name, surname, avatarUrl } = getUserProps(props);\n\n return (\n <>\n <div className={`${styles.avatarContainer} ${props.avatarClassName} d-inline-block flex-shrink-0`}>\n <Avatar\n imageUrl={avatarUrl}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(name, surname)}\n showAnonymousUser={!props.anonymiseUsers && (!!props.user.sessionId || !!props.user.deleted)}\n anonymiseUsers={props.anonymiseUsers}\n anonymousSvgSize={SvgContainerSize.Small}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className={classNames('font-size-normal fw-normal m-0', props.nameClassName)}>\n {name}\n </h4>\n {props.showSubText && `id` in props.user && <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>}\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"hnMke\",\"avatar\":\"b7JCz\",\"row\":\"ILLa_\",\"fixedTable\":\"_fdpt\",\"interactionHeaderCellOuter\":\"kjXYB\",\"hasResults\":\"M4qgr\",\"interactionHeaderCellInner\":\"cnFvB\",\"resultsCellOuter\":\"bdzRb\",\"correct\":\"xANR6\",\"incorrect\":\"_44sb\",\"awaitingMarking\":\"eQ9sh\",\"unanswered\":\"xRUK8\",\"highlightColumn\":\"f9Zqr\",\"resultsCellInner\":\"LAFwi\",\"highlightResultsRow\":\"TwwLO\",\"resultsRow\":\"xZ5iP\"};","// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};"],"names":["getPhrase","getClassName","props","className","showLabel","PendingIndicator","title","tooltipClassName","showIndicator","Indicator","spanHack","spanHackClassName","InteractionsBar","duration","interactive","timepoints","map","t","i","interactions","length","timepoint","selectedInteraction","interaction","find","id","isSelected","bgClassName","InteractionTypeHelper","typeId","left","visibleAt","key","style","DurationHelper","LanguageService","InteractionResultsSummary","interactiveMetadata","summary","results","InteractionLabel","iconClassName","_parentClip","endTime","startTime","_parentVideo","awaitingMarking","PercentageIndicator","percentage","percentCorrect","layout","unanswered","InteractionResultsSummaryPopover","ref","popoverProps","Popover","InteractionHeaderCell","OverlayTrigger","trigger","students","placement","overlay","rootClose","onMouseEnter","onMouseLeave","interactionNumber","correctness","InteractionCorrectness","StudentResultCell","InteractiveCorrectnessHelper","studentResults","svgName","getSvgName","SvgContainer","RESULTS_COL_WIDTH","getUserProps","user","anonymiseUsers","sessionId","deleted","nameParts","split","filter","n","name","surname","slice","join","avatarUrl","displayName","avatar","url","CellWrapper","children","HeaderCell","column","isSorted","phraseKey","useGetFixedColumns","imageCdnUrl","showSeparateNameColumns","hasResults","cols","push","Header","accessor","u","width","Cell","value","Avatar","imageUrl","initials","UserHelper","showAnonymousUser","anonymousSvgSize","S","disableSortBy","undefined","UserRecipientItemMetadata","detailsClassName","nameClassName","showDisplayName","avatarClassName","showSubText","sortType","sortDescFirst","correct","answered","useGetResultColumns","onColumnHover","refreshData","index","row","original","useGetResultsTableData","sortBy","filterBy","forEach","s","sorted","ArrayHelper","student","desc","reverse","highlightColumns","tableEl","highlightIndex","rows","querySelectorAll","childNodes","col","colIdx","classList","remove","add","highlightRows","rowIdx","getSortStudents","shouldFilterStudent","anonName","getSubText","userType","role","yearGroup","defaults"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4985],{63719:(e,t,n)=>{n.d(t,{h:()=>l});var a=n(32735),i=n(77316);function r(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function l(e){var t,n,l=(t=a.useMemo(function(){return i.p.getBuilder()},[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,l=[],c=!0,s=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=r.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,i=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return l}}(t,n)||r(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=l[0],s=(0,l[1])(c);return s&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||r(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.")}()}(s),[Object.assign(Object.assign({},e),{active:!0})]):s}},67088:(e,t,n)=>{n.r(t),n.d(t,{MyVideosFolderView:()=>K});var a=n(32735),i=n(23481),r=n(81886),o=n(20354),l=n(28400),c=n(65858),s=n(43500),d=n(83657),u=n(49935),m=n(73518),p=n(39958),v=n(1302),f=n(91693),y=n(37395),g=n(4201),h=n(83345),E=n(1860),b=n(30254),k=n(3534),V=n(51365),A=n(16714),O=n(183),F=n(98064),M=n(31949),S=n(63719),w=n(299),C=n(91286),D=n(22902),L=n(79612),I=n(37802),x=n(35223),_=n(58535),B=n(14070),N=n(97291),j=n(58321),P=n(44110),R=n(10741),Y=n(22490),T=n(98860),U=n(12617),H=n(45967),Q=n(65202),X=n(74796),Z=n(18097),$=n(14305),q=n(72363);const W={uploadingList:"BrRqF"};var G="default.myVideosFolders",J=i.T.encloseNamespace(G);function K(e){var t,n,i,K,z,ee,te,ne=o.a.useGetFetch(),ae=(0,j.U)({locationContext:c.LZ.VideoThumbnail}).commonVideoProps,ie=(0,P.i)(),re=(0,H.q)().handleDragEnd,oe=(0,g.of)().focusSearchBar,le=o.a.useBasicFetch(F.D.folder(e.id)),ce=(0,T.P)(e.id),se=o.a.useBasicFetch(M.N.currentUser()),de=o.a.useBasicFetch((null===(t=se.data)||void 0===t?void 0:t.isAuthenticated)&&M.N.workspace());(0,L.M)({title:le.data?J("pageTitle",{folder:null===(n=le.data)||void 0===n?void 0:n.name}):""}),(0,C.v)(le);var ue=(0,S.h)({name:null===(i=le.data)||void 0===i?void 0:i.name}),me=(0,X.f)(),pe=(0,I.r)(null),ve=pe.myVideosFolders,fe=pe.isLoadingSettings;a.useEffect(function(){fe||ve||r.Q.C$.trigger({application:N.O.MY_VIDEOS,action:B.e.MyVideos.MY_VIDEOS},{replace:!0})},[ve,fe]);var ye=(0,q.y)(),ge=(0,q.W)(null===(K=de.data)||void 0===K?void 0:K.id,e.id),he=(0,D.T)().hasPermissions,Ee=function(t,n){return U.E.videos(e.id,t,n)},be=o.a.useBasicFetch(Ee(e.cursor,e.typeFilter));(0,C.v)(be);var ke=(0,Q.J)({onRemove:function(e,t){return ne(Ee(e,t))},categoryId:+e.id}),Ve=ke.uploadingVideos,Ae=ke.onClickAlternate,Oe=ke.onClickDelete,Fe=ke.processingIds,Me=null===(ee=null===(z=be.data)||void 0===z?void 0:z.data)||void 0===ee?void 0:ee.filter(function(e){return!Fe[e.id]}),Se=(0,w.X)(Me);if(!le.data)return a.createElement(a.Fragment,null);var we=!!(null===(te=null==ce?void 0:ce.items)||void 0===te?void 0:te.length);return a.createElement(V.M.Provider,{value:ye},a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex justify-content-between align-items-start"},a.createElement("h1",{className:"h2 mb-0"},le.data.name),a.createElement("div",{className:"d-sm-flex d-none ms-2"},a.createElement(f.h,{svgName:x.vn.Search,appLink:{application:N.O.SEARCH,action:B.e.Search.HOME,params:{source:s.fi.MyVideos}},className:"btn btn-outline-dark me-2",onClick:oe,analyticsData:{},analyticsOptions:{entity:c.py.SearchResults,location:c.LZ.MyVideos,actionType:c.Vw.Click,descriptor:c.Bk.MyVideos}},a.createElement(h.x,{namespace:G,phrase:"searchMyVideos"})),a.createElement(d.e,{actions:me("page",le.data),actionsDropdownClassName:"btn btn-outline-dark"}))),a.createElement("div",{className:"mt-3"},a.createElement(u.Oo,{breadcrumbs:ue})),a.createElement("hr",null),!(null==ce?void 0:ce.hasCompleted)&&a.createElement(v.i,null),a.createElement(m.p,{handleDragEnd:re,dragOverlayComponent:_.U,source:le.data},we&&a.createElement("div",{className:"mx-n2"},a.createElement(p.$,{folders:ce.items,getAppLink:function(e){return{application:N.O.MY_VIDEOS,action:B.e.MyVideos.MY_VIDEOS_FOLDER,args:[e.id,l.m.slugify(e.name)]}},expandFolders:!1,getFolderActions:function(e){return me("folder",e)},drag:!0,drop:!0})),a.createElement(b.X,{allowBulkAction:!0,allowFilter:!0,isVideosLoading:!be.data,checkboxHelper:Se,getVideosBulkAction:ge,locationContext:c.LZ.MyVideos,typeFilter:e.typeFilter,getAppLink:function(){var t;return{application:N.O.MY_VIDEOS,action:B.e.MyVideos.MY_VIDEOS_FOLDER,args:[e.id,l.m.slugify(null===(t=le.data)||void 0===t?void 0:t.name)]}}}),!!(null==Ve?void 0:Ve.length)&&a.createElement("div",{className:"position-relative ".concat(W.uploadingList)},Ve.map(function(t){return a.createElement(Z.X,{item:t,onClickAlternate:Ae,onClickDelete:Oe,key:t.id,allowBulkAction:!0,categoryId:e.id})})),function(){var t,n,i,r;return be.data?(null===(n=null===(t=be.data)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length)?a.createElement(a.Fragment,null,a.createElement(k.E4,{videos:Me,getVideoAppLink:function(t,n){var a;return Y.W.getAppLink(t,Object.assign(Object.assign({},n),{context:O.Q.Folder,contextId:e.id,includeContext:null===(a=se.data)||void 0===a?void 0:a.isAuthenticated}))},presentationAudiences:ie.data,canRemovePrivateVideos:!0,allowBulkAction:!0,hasPermissions:he,getVideosBulkAction:ge,typeFilter:e.typeFilter,checkboxHelper:Se,drag:we,getPreviewQuestionsAppLink:function(e){return R.j.getPreviewQuestionsAppLink(e)},commonVideoProps:ae}),!!(null===(r=null===(i=be.data)||void 0===i?void 0:i.pagination)||void 0===r?void 0:r.cursors)&&a.createElement(y.t,{appLink:{action:B.e.MyVideos.MY_VIDEOS_FOLDER,application:N.O.MY_VIDEOS,args:[e.id,l.m.slugify(le.data.name)],params:{cursor:e.cursor,previous:e.previous,type:e.typeFilter}},cursors:{next:be.data.pagination.cursors.next,previous:e.cursor},buttonVariant:"outline-dark",className:"py-2 float-end",prevHack:!0})):a.createElement($.K,{canUpload:he(A.C.UploadVideo)}):a.createElement(E.S,{allowBulkActions:!0})}())))}}}]);
2
- //# sourceMappingURL=4985-7e02d5df40-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/4985-7e02d5df40-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos-folder/my-videos-folders.scss","file:///app/packages/projects/lite/src/apps/my-videos/views/my-videos-folder/MyVideosFolderView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","// extracted by mini-css-extract-plugin\nexport default {\"uploadingList\":\"BrRqF\"};","import React from 'react';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { EntityType, Folder, LocationContext, SearchSourceDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { SearchIndices, SourceFilterOptions } from 'libs/shared/apps/search/interfaces';\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DragDropMoveContext } from 'libs/shared/components/drag-drop-move/DragDropMoveContext';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { useFocusSearchBar } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoListActions } from 'libs/shared/components/video-list/video-list-actions/VideoListActions';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { BulkCheckboxManager, useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\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 { BasePaginatedCollection, CurrentUser, Library, VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DragDropOverlay } from 'shared/components/drag-drop-overlay/DragDropOverlay';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { useFetchAllChildFolders } from 'apps/libraries/hooks/UseFetchAllChildFolders';\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\nimport { useDragDropMove } from 'apps/my-videos/hooks/useDragDropMove';\nimport { useUploadItems } from 'apps/my-videos/hooks/useUploadItems';\nimport { useGetFolderActions } from 'apps/my-videos/utils/getFolderActions';\nimport { UploadingItem } from 'apps/upload/components/uploading-item/UploadingItem';\n\nimport { MyVideosEmptyState } from '../my-videos/empty-state/MyVideosEmptyState';\nimport { useMyVideosViewActions, useMyVideosViewBulkActions } from '../my-videos/MyVideosViewUtils';\n\nimport styles from './my-videos-folders.scss';\n\nconst namespace = 'default.myVideosFolders';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MyVideosFolderViewProps {\n id: string;\n cursor?: string;\n previous?: string;\n typeFilter?: SearchIndices[];\n}\n\nexport function MyVideosFolderView(props: MyVideosFolderViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n \n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n const audiences = usePresentationAudiences();\n const { handleDragEnd } = useDragDropMove();\n const { focusSearchBar } = useFocusSearchBar();\n\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.id));\n const subfolders = useFetchAllChildFolders(props.id);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const workspace = Flight.useBasicFetch<Library>(\n currentUser.data?.isAuthenticated && UserRequests.workspace()\n );\n\n useSetPageMetadata({\n title: folder.data ? getPhrase('pageTitle', { folder: folder.data?.name }) : ''\n });\n\n useHandleObjectError(folder);\n\n const breadcrumbs = useBreadcrumbs({ name: folder.data?.name });\n const getFolderActions = useGetFolderActions();\n\n // TODO: Remove this redirect when we release my videos with folders.\n const { myVideosFolders, isLoadingSettings } = useSettings(null);\n React.useEffect(() => {\n if (isLoadingSettings || myVideosFolders)\n return;\n \n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS\n }, { replace: true });\n }, [ myVideosFolders, isLoadingSettings ]);\n\n const getVideoItemActions = useMyVideosViewActions();\n const getVideosBulkActions = useMyVideosViewBulkActions(workspace.data?.id, props.id);\n const { hasPermissions } = usePermissions();\n\n const getMyVideosRequest = (cursor?: string, typeFilter?: SearchIndices | SearchIndices[]) => {\n // Delete the above when master supports the new assoc types.\n return MyVideosRequests.videos(props.id, cursor, typeFilter);\n };\n\n const fetchNext = (cursor?: string, typeFilter?: SearchIndices | SearchIndices[]) => {\n return fetch(getMyVideosRequest(cursor, typeFilter));\n };\n\n const videos = Flight.useBasicFetch<BasePaginatedCollection<VideoTypes>>(\n getMyVideosRequest(props.cursor, props.typeFilter)\n );\n\n useHandleObjectError(videos);\n\n const {\n uploadingVideos,\n onClickAlternate,\n onClickDelete,\n processingIds\n } = useUploadItems({ onRemove: fetchNext, categoryId: +props.id });\n\n const omittedVideos = videos.data?.data?.filter(v => !processingIds[v.id]);\n\n const CheckboxHelper: BulkCheckboxManager = useBulkCheckboxManager(omittedVideos);\n\n function getMyVideosAppLink(): Core.AppLink {\n return {\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n application: AppChannels.MY_VIDEOS,\n args: [ props.id, TextHelper.slugify(folder.data.name) ],\n params: { cursor: props.cursor, previous: props.previous, type: props.typeFilter }\n };\n }\n\n function getCursors(): Cursors {\n return { next: videos.data.pagination.cursors.next, previous: props.cursor };\n }\n\n if (!folder.data)\n return <></>;\n\n const hasFolders = !!subfolders?.items?.length;\n return (\n <VideoActionsContext.Provider value={getVideoItemActions}>\n <div className='px-3'>\n <div className='d-flex justify-content-between align-items-start'>\n <h1 className='h2 mb-0'>{folder.data.name}</h1>\n <div className='d-sm-flex d-none ms-2'>\n <IconButton\n svgName={cvSvgLibrary.Search}\n appLink={{\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n source: SourceFilterOptions.MyVideos\n }\n }}\n className='btn btn-outline-dark me-2'\n onClick={focusSearchBar}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.SearchResults,\n location: LocationContext.MyVideos,\n actionType: UserAction.Click,\n descriptor: SearchSourceDescriptor.MyVideos\n }}\n >\n <Text namespace={namespace} phrase='searchMyVideos' />\n </IconButton>\n <ActionsComponent\n actions={getFolderActions('page', folder.data)}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n </div>\n <div className='mt-3'>\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </div>\n <hr />\n {!subfolders?.hasCompleted && <PartialFolderList />}\n <DragDropMoveContext\n handleDragEnd={handleDragEnd}\n dragOverlayComponent={DragDropOverlay}\n source={folder.data}\n >\n {hasFolders &&\n <div className='mx-n2'>\n <FolderList\n folders={subfolders.items}\n getAppLink={(f: Folder) => ({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ f.id, TextHelper.slugify(f.name) ]\n })}\n expandFolders={false}\n getFolderActions={f => getFolderActions('folder', f)}\n drag\n drop\n />\n </div>\n }\n <VideoListActions\n allowBulkAction\n allowFilter\n isVideosLoading={!videos.data}\n checkboxHelper={CheckboxHelper}\n getVideosBulkAction={getVideosBulkActions}\n locationContext={LocationContext.MyVideos}\n typeFilter={props.typeFilter}\n getAppLink={() => ({\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS_FOLDER,\n args: [ props.id, TextHelper.slugify(folder.data?.name) ]\n })}\n />\n {!!uploadingVideos?.length && (\n <div className={`position-relative ${styles.uploadingList}`}>\n {uploadingVideos.map(uploadingVideo => (\n <UploadingItem\n item={uploadingVideo}\n onClickAlternate={onClickAlternate}\n onClickDelete={onClickDelete}\n key={uploadingVideo.id}\n allowBulkAction\n categoryId={props.id}\n />\n ))}\n </div>\n )}\n {(() => {\n if (!videos.data)\n return <PartialVideoList allowBulkActions />;\n\n if (!videos.data?.data?.length)\n return <MyVideosEmptyState canUpload={hasPermissions(PermissionName.UploadVideo)} />;\n\n return (\n <>\n <VideoList\n videos={omittedVideos}\n getVideoAppLink={(v, opts) => VideoAppLinkHelper.getAppLink(v, {\n ...opts,\n context: RelatedVideosContext.Folder,\n contextId: props.id,\n includeContext: currentUser.data?.isAuthenticated\n })}\n presentationAudiences={audiences.data}\n canRemovePrivateVideos\n allowBulkAction\n hasPermissions={hasPermissions}\n getVideosBulkAction={getVideosBulkActions}\n typeFilter={props.typeFilter}\n checkboxHelper={CheckboxHelper}\n drag={hasFolders}\n getPreviewQuestionsAppLink={interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)}\n commonVideoProps={commonVideoProps}\n />\n {!!videos.data?.pagination?.cursors && (\n <Pagination\n appLink={getMyVideosAppLink()}\n cursors={getCursors()}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n prevHack\n />\n )}\n </>\n );\n })()}\n </DragDropMoveContext>\n </div>\n </VideoActionsContext.Provider>\n );\n}"],"names":["useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","namespace","getPhrase","LanguageService","MyVideosFolderView","props","fetch","commonVideoProps","useCommonVideoProps","locationContext","audiences","usePresentationAudiences","handleDragEnd","useDragDropMove","focusSearchBar","folder","LibraryRequests","id","subfolders","currentUser","UserRequests","workspace","data","isAuthenticated","useSetPageMetadata","title","name","useSettings","myVideosFolders","isLoadingSettings","application","action","replace","getVideoItemActions","getVideosBulkActions","hasPermissions","usePermissions","getMyVideosRequest","cursor","typeFilter","MyVideosRequests","videos","useUploadItems","onRemove","categoryId","uploadingVideos","onClickAlternate","onClickDelete","processingIds","omittedVideos","filter","v","CheckboxHelper","useBulkCheckboxManager","hasFolders","items","length","VideoActionsContext","value","className","IconButton","svgName","appLink","params","source","onClick","analyticsData","analyticsOptions","entity","location","actionType","descriptor","Text","phrase","Actions","actions","actionsDropdownClassName","Breadcrumbs","hasCompleted","PartialFolderList","DragDropMoveContext","dragOverlayComponent","DragDropOverlay","FolderList","folders","getAppLink","f","args","TextHelper","expandFolders","getFolderActions","drag","drop","VideoListActions","allowBulkAction","allowFilter","isVideosLoading","checkboxHelper","getVideosBulkAction","map","uploadingVideo","UploadingItem","item","key","VideoList","getVideoAppLink","opts","VideoAppLinkHelper","context","RelatedVideosContext","contextId","includeContext","presentationAudiences","canRemovePrivateVideos","getPreviewQuestionsAppLink","interactive","InteractiveHelper","pagination","cursors","Pagination","previous","type","next","buttonVariant","prevHack","MyVideosEmptyState","canUpload","PermissionName","PartialVideoList","allowBulkActions"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5554-f1f3baf822-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.ts","file:///app/packages/libs/shared/src/apps/playlists/utils/PlaylistHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share-v2/components/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesViewUtils.ts","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, CurrentUser, Playlist } from 'libs/shared/interfaces';\n\nexport const PlaylistHelper = {\n isPlaylist(obj: BaseObject): obj is Playlist {\n return obj?.typeId === MasterType.Playlist;\n },\n\n isOwner(playlist: Playlist, currentUser: CurrentUser): boolean {\n if (!currentUser || !playlist || ObjectHelper.isEmpty(playlist._liteOwner))\n return false;\n\n return playlist._liteOwner.id.toString() === currentUser.id?.toString();\n },\n\n getVideoCount(playlist: Playlist): number {\n if (!playlist)\n return;\n\n let count = 0;\n\n if (playlist.videos?.count)\n count += playlist.videos.count;\n\n if (playlist.clips?.count)\n count += playlist.clips.count;\n\n if (playlist.interactives?.count)\n count += playlist.interactives.count;\n\n return count;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"sybF_\",\"pill\":\"CXqJF\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share-v2.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ShareIndicatorStatus {\n Active,\n Expired,\n MarkingRequired\n}\n\nconst statusIndicatorLabels = {\n [ShareIndicatorStatus.Active]: () => getPhrase('activeStatusLabel'),\n [ShareIndicatorStatus.Expired]: () => getPhrase('expiredStatusLabel'),\n [ShareIndicatorStatus.MarkingRequired]: () => getPhrase('markingRequiredStatusLabel')\n};\n\nconst statusIndicatorColors = {\n [ShareIndicatorStatus.Active]: 'bg-success',\n [ShareIndicatorStatus.Expired]: 'bg-danger',\n [ShareIndicatorStatus.MarkingRequired]: 'bg-blue'\n};\n\nconst statusIndicatorTooltips = {\n [ShareIndicatorStatus.Active]: () => getPhrase('activeStatusTooltip'),\n [ShareIndicatorStatus.Expired]: () => getPhrase('expiredStatusTooltip'),\n [ShareIndicatorStatus.MarkingRequired]: () => getPhrase('markingRequiredStatusTooltip')\n};\n\nfunction determineStatus(props: ShareStatusIndicatorProps): ShareIndicatorStatus {\n if (props.markingRequired)\n return ShareIndicatorStatus.MarkingRequired;\n\n if (ShareHelper.hasShareExpired(props.share))\n return ShareIndicatorStatus.Expired;\n\n return ShareIndicatorStatus.Active;\n}\n\nfunction getTooltip(status: ShareIndicatorStatus, expireDate: string, hasData: boolean): string {\n if (status !== ShareIndicatorStatus.Active)\n return statusIndicatorTooltips[status]();\n\n if (expireDate) {\n const localDate = DateHelper.convertUTCToLocal(expireDate);\n const formattedDate = DateHelper.format(localDate, 'MMMM Do');\n\n if (!hasData)\n return getPhrase('expiryNoDataTooltip', { date: formattedDate });\n\n return getPhrase('expiryTooltip', { date: formattedDate });\n }\n \n if (!hasData)\n return getPhrase('noDataTooltip');\n\n return statusIndicatorTooltips[ShareIndicatorStatus.Active]();\n}\n\ninterface ShareStatusIndicatorProps {\n share: Share;\n markingRequired: boolean;\n className?: string;\n hasData: boolean;\n}\n\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps) {\n const status = determineStatus(props);\n const tooltip = getTooltip(status, props.share.expireDate, props.hasData);\n const color = statusIndicatorColors[status];\n\n function renderDisplayText() {\n const label = statusIndicatorLabels[status]();\n const expireDate = props.share.expireDate;\n \n if (status === ShareIndicatorStatus.Active && expireDate && !props.markingRequired) {\n const remainingDays = ShareHelper.calculateDaysToExpiry(props.share);\n const hint = getPhrase('expiryHint', { smartCount: remainingDays });\n\n return (\n <p className='mb-0'>\n {label} {hint}\n </p>\n );\n }\n\n return (\n <p className='mb-0'>\n {label}\n </p>\n );\n }\n\n return (\n <Tooltip title={tooltip} spanHack>\n <div className={classNames('d-flex align-items-center border rounded-pill px-2', props.className, styles.pill)}>\n <div className={`${styles.indicator} ${color} me-2 flex-shrink-0`} />\n {renderDisplayText()}\n </div>\n </Tooltip>\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { PlaylistHelper } from 'libs/shared/apps/playlists/utils/PlaylistHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { SeriesHelper } from 'libs/shared/utils/SeriesHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\nimport { getDeleteShareAppLink, getInsightsOverviewAppLink, getShareOptionsAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function hasInsightsActions(sharedObject: BaseObject): boolean {\n return (\n MasterTypeHelper.isType(sharedObject, MasterType.Video) ||\n MasterTypeHelper.isType(sharedObject, MasterType.Clip) ||\n MasterTypeHelper.isType(sharedObject, MasterType.Interactive)\n );\n}\n\ninterface ShareObjectActionsOptions {\n share: Share;\n sharedObject: BaseObject;\n audienceParams?: AudienceQueryParams;\n hasInsights?: boolean;\n isPlugin?: boolean;\n breakpoints?: Breakpoints;\n hideShareOptionsActions?: boolean;\n}\n\nexport function getShareObjectActions(options: ShareObjectActionsOptions): ActionOptions[] {\n const { isPlugin, breakpoints } = options;\n const isMobile = breakpoints?.xs || breakpoints?.sm;\n const buttonProps = {\n button: !isMobile,\n className: 'btn btn-outline-dark'\n };\n\n const actionProviders = isPlugin ? [getActionsForPlugin] : [\n getMediaActions,\n hasInsightsActions(options.sharedObject) && getInsightsActions,\n !options.hideShareOptionsActions && getShareOptionsActions,\n getDeleteActions\n ];\n\n return actionProviders.reduce((actions, getActionFn) => {\n if (typeof getActionFn !== 'function')\n return actions;\n \n return [ ...actions, ...getActionFn({ ...options, buttonProps, isMobile }) ];\n }, [] as ActionOptions[]);\n}\n\nexport function getTypeIdParams(typeId: string | string[]): MasterType[] {\n if (!typeId) return [];\n\n if (typeof typeId === 'string')\n return [+typeId];\n\n return typeId.map(typeId => +typeId) || [];\n}\n\nexport function getSharesParams(typeId: string | string[]) {\n const typeIdAppLinkParams = getTypeIdParams(typeId);\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const currentAppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME,\n params: {\n ...audienceAppLinkParams,\n typeId: typeIdAppLinkParams\n }\n };\n const sentSharesParams = {\n recipientUserId: audienceAppLinkParams?.users,\n recipientGroupId: [ ...audienceAppLinkParams?.classroomGroups || [], ...audienceAppLinkParams?.classrooms || [] ],\n objectTypeId: typeIdAppLinkParams.length ? typeIdAppLinkParams : undefined\n };\n\n return {\n typeIdAppLinkParams,\n audienceAppLinkParams,\n currentAppLink,\n sentSharesParams\n };\n}\n\ninterface ShareActionHanderOptions extends ShareObjectActionsOptions {\n isMobile: boolean;\n buttonProps: {\n button: boolean;\n className: string;\n }\n}\n\nfunction getActionsForPlugin(options: ShareActionHanderOptions): ActionOptions[] {\n const { sharedObject, buttonProps } = options;\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n return [{\n label: getPhrase('embedVideo'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.PLUGIN_SHARE,\n args: [sharedObject.id],\n params: { entityType: sharedObject.type }\n },\n ...buttonProps,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V5\n }\n }];\n }\n\n return [];\n}\n\nfunction getMediaActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { sharedObject, breakpoints, buttonProps } = options;\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n return [{\n label: !breakpoints?.md && getPhrase('viewVideo'),\n tooltip: breakpoints?.md && getPhrase('viewVideo'),\n svgName: cvSvgLibrary.Video,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n if (SeriesHelper.isSeries(sharedObject)) {\n return [{\n label: !breakpoints?.md && getPhrase('viewSeries'),\n tooltip: breakpoints?.md && getPhrase('viewSeries'),\n svgName: cvSvgLibrary.Series,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n if (PlaylistHelper.isPlaylist(sharedObject)) {\n return [{\n label: !breakpoints?.md && getPhrase('viewPlaylist'),\n tooltip: breakpoints?.md && getPhrase('viewPlaylist'),\n svgName: cvSvgLibrary.Playlist,\n appLink: getObjectAppLink(sharedObject),\n group: 'main',\n ...buttonProps\n }];\n }\n \n return [];\n}\n\nfunction getInsightsActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, sharedObject, audienceParams, hasInsights, breakpoints, buttonProps } = options;\n\n const actions: ActionOptions[] = [];\n\n if (share.type === ShareType.Classroom) {\n actions.push({\n svgName: cvSvgLibrary.Classrooms,\n label: getPhrase('viewOtherClassrooms'),\n appLink: AssignAppLinkHelper.showAssignments({ objectId: sharedObject.id, entityType: sharedObject.type }),\n group: 'main',\n ...buttonProps\n });\n }\n \n if (!hasInsights)\n return actions;\n\n return [{\n svgName: cvSvgLibrary.Analytics,\n label: !breakpoints?.md && getPhrase('viewInsights'),\n tooltip: breakpoints?.md && getPhrase('viewInsights'),\n appLink: getInsightsOverviewAppLink(share, audienceParams),\n group: 'main',\n ...buttonProps\n }, ...actions ];\n}\n\nfunction getShareOptionsActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, breakpoints, buttonProps } = options;\n\n if (ShareHelper.hasShareExpired(share))\n return [];\n\n if (share.type === ShareType.LegacyDirect)\n return [];\n\n if (share.type === ShareType.Link) {\n return [{\n label: !breakpoints?.md && getPhrase('shareLink'),\n tooltip: breakpoints?.md && getPhrase('shareLink'),\n svgName: cvSvgLibrary.Link,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n if (share.type === ShareType.Classroom) {\n return [{\n label: !breakpoints?.md && getPhrase('shareOptions'),\n tooltip: breakpoints?.md && getPhrase('shareOptions'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n if (share.type === ShareType.Open) {\n return [{\n label: !breakpoints?.md && getPhrase('shareOptions'),\n tooltip: breakpoints?.md && getPhrase('shareOptions'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareOptionsAppLink(share),\n group: 'main',\n ...buttonProps\n }];\n }\n\n return [];\n}\n\nfunction getDeleteActions(options: ShareActionHanderOptions): ActionOptions[] {\n const { share, breakpoints, buttonProps } = options;\n \n if (share.type === ShareType.Link) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteShareLink'),\n tooltip: breakpoints?.md && getPhrase('deleteShareLink'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n if (share.type === ShareType.Classroom) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteAssignment'),\n tooltip: breakpoints?.md && getPhrase('deleteAssignment'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n if (share.type === ShareType.Open) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteOpenClassroom'),\n tooltip: breakpoints?.md && getPhrase('deleteOpenClassroom'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n if (share.type === ShareType.LegacyDirect) {\n return [{\n label: !breakpoints?.md && getPhrase('deleteLegacyShare'),\n tooltip: breakpoints?.md && getPhrase('deleteLegacyShare'),\n svgName: cvSvgLibrary.Delete,\n appLink: getDeleteShareAppLink(share),\n group: 'danger',\n ...buttonProps,\n className: 'btn btn-outline-dark text-danger'\n }];\n }\n\n return [];\n}","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ntype ClassroomExperience = 'none' | 'minimal' | 'full';\n\nexport function useClassroomExperience() {\n const { hasShareFlowV2, hasClassrooms, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (hasPermissions(PermissionName.ViewClassrooms))\n return 'full';\n \n if (hasShareFlowV2)\n return 'minimal';\n }\n\n return {\n experience: getExperience(),\n loading: isLoadingSettings || !isLoaded\n };\n}"],"names":["AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","users","classrooms","classroomGroups","getParam","key","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","PlaylistHelper","isPlaylist","obj","typeId","isOwner","playlist","currentUser","_liteOwner","id","toString","getVideoCount","count","videos","clips","interactives","ShareIndicatorStatus","getPhrase","LanguageService","statusIndicatorLabels","Active","Expired","MarkingRequired","statusIndicatorColors","statusIndicatorTooltips","ShareStatusIndicator","props","status","markingRequired","ShareHelper","share","determineStatus","tooltip","expireDate","hasData","localDate","DateHelper","formattedDate","date","getTooltip","color","Tooltip","title","spanHack","className","label","remainingDays","hint","smartCount","renderDisplayText","getShareObjectActions","options","sharedObject","isPlugin","breakpoints","isMobile","xs","sm","buttonProps","button","getActionsForPlugin","getMediaActions","getInsightsActions","hideShareOptionsActions","getShareOptionsActions","getDeleteActions","reduce","actions","getActionFn","getSharesParams","typeIdAppLinkParams","map","getTypeIdParams","audienceAppLinkParams","currentAppLink","application","action","sentSharesParams","recipientUserId","recipientGroupId","objectTypeId","length","undefined","canConsume","args","entityType","type","analyticsOptions","actionType","descriptor","workflowPhase","eventVersion","md","svgName","group","audienceParams","hasInsights","push","objectId","useClassroomExperience","hasShareFlowV2","hasClassrooms","isLoadingSettings","hasPermissions","isLoaded","experience","loading"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5712],{49927:(e,t,a)=>{a.d(t,{u:()=>d});var i=a(57900),n=a(70064),s=function(e){return"recent:playlists:added:to:".concat(e)},d={getRecentlyAddedTo:function(e){return n.V.getRecentItem(s(e),i.SG)},addRecentlyAddedTo:function(e,t){return n.V.addRecentItem(s(e),i.SG,t)},removeRecentlyAddedTo:function(e,t){n.V.removeRecentItem(s(e),t,i.SG)}}},63403:(e,t,a)=>{a.r(t),a.d(t,{AddToPlaylistView:()=>F});var i=a(32735),n=a(70680),s=a(60139),d=a(23481),o=a(20354),l=a(28400),c=a(49985),r=a(65858),p=a(76611),u=a(70006),m=a(49927),y=a(9111),f=a(83345),P=a(16714),g=a(1666),h=a(5112),T=a(31949),v=a(69883),k=a(3010),C=a(22902),L=a(45719),I=a(65185),S=a(14070),w=a(97291),x=a(63172),A=a(52931),V="playlists.addToPlaylist",E=d.T.encloseNamespace(V),N=function(e){return h.C.getUserPlaylists(new u.l(p.o.AtoZ,e))},R=function(e,t){return function(a){return h.C.getVideoPlaylists(e,t,a)}};function F(e){var t,a=(0,n.I0)(),d=(0,v.Z)(),p=o.a.useBasicFetch(T.N.currentUser()),u=o.a.useBasicFetch(h.C.getVideoCandidate(e.videoId)),F=(0,L.P)(function(e){return N(e).key}),U=(0,L.P)(function(t){return!!e.videoId&&!!p.data&&R(e.videoId,p.data.id)(t).key}),G=o.a.useBasicFetch((null===(t=p.data)||void 0===t?void 0:t.isAuthenticated)&&g.h.yearGroups(p.data.customerId)),Z=(0,C.T)(),B=Z.hasPermissions,Y=Z.isLoaded,_=B(P.C.StudentExperience),b=!!U.items&&U.items.map(function(e){return e.id});(0,k.i)(N,function(e){o.a.getFetch(a)(N(e))}),(0,k.i)(!!p.data&&R(e.videoId,p.data.id),!!p.data&&function(t){o.a.getFetch(a)(R(e.videoId,p.data.id)(t))});var O=function(t,i){o.a.fetch(a,h.C.addToPlaylist(t.id,[u.data],function(){d.success({heading:I.R.Success,type:s.NK.Success,message:E(i?"successNew":"success",{video:u.data.name,playlist:t.name,escapeText:!0}),appLink:{application:w.O.PLAYLISTS,action:S.e.Playlists.PLAYLIST,args:[t.id,l.m.slugify(t.name)]},appLinkText:E("goToPlaylist",{playlist:t.name,escapeText:!0}),appLinkClassName:"info-link"}),c.k.logUserAction({id:u.data.id,name:u.data.name,playlistId:t.id,playlistName:t.name},{actionType:r.Vw.Associate,entity:r.py.Video,descriptor:r.iF.Playlist,workflowPhase:r.eu.Complete,location:r.LZ.Popup}),m.u.addRecentlyAddedTo(p.data.id,{id:t.id}),i&&e.closePopup()},function(e){"playlist-limit-exceeded"===e.responseJSON.type?d.error(E("playlistLimitExceeded")):d.error(E("addError",{video:u.data.name,playlist:t.name,escapeText:!0}))}))},K=!!u.data&&!!F.items&&!F.nextCursor&&!!p.data&&!!U.items&&!U.nextCursor&&G.hasCompleted&&Y;return i.createElement(y.G,{title:E("heading"),closePopup:e.closePopup,showLoadingSpinner:!K||null===screen},K?i.createElement(i.Fragment,null,F.items.length?i.createElement("div",{className:"mb-2"},i.createElement(f.x,{namespace:V,phrase:"selectPlaylist",options:{video:u.data.name}})):i.createElement(A.v,{isStudent:_,headingClassName:"h4",imageSize:"small",className:"py-2",hideButton:!0}),i.createElement(x.o,{playlists:F.items,currentUserId:p.data.id,onSelectPlaylist:function(t){b.includes(t.id)?function(t){o.a.fetch(a,h.C.removePlaylistVideo(t.id,u.data.id,u.data.typeId,function(){d.success({heading:I.R.Success,type:s.NK.Success,message:E("successRemove",{video:u.data.name,playlist:t.name,escapeText:!0}),appLink:{application:w.O.PLAYLISTS,action:S.e.Playlists.PLAYLIST,args:[t.id,l.m.slugify(t.name)]},appLinkText:E("goToPlaylist",{playlist:t.name,escapeText:!0}),appLinkClassName:"info-link"}),c.k.logUserAction({id:u.data.id,playlistId:t.id},{actionType:r.Vw.Dissociate,entity:r.py.Video,descriptor:r.iF.Playlist,workflowPhase:r.eu.Complete,location:r.LZ.Popup})},function(){d.error(E("removeError",{video:u.data.name,playlist:t.name,escapeText:!0})),e.closePopup()}))}(t):O(t)},isVideoInPlaylist:function(e){return b.includes(e.id)},createPlaylist:function(t){o.a.fetch(a,h.C.createPlaylist(p.data.id,{name:t},function(e){e&&e.id&&(c.k.logUserAction({id:e.id},{actionType:r.Vw.Create,entity:r.py.Playlist,workflowPhase:r.eu.Complete,location:r.LZ.Popup}),O(e,!0))},function(){d.error(E("createError",{video:u.data.name,playlist:t,escapeText:!0})),e.closePopup()}))}})):i.createElement(i.Fragment,null))}}}]);
2
- //# sourceMappingURL=5712-7cee70c6b4-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/5712-7cee70c6b4-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/playlists/utils/RecentPlaylistHelper.ts","file:///app/packages/projects/lite/src/apps/playlists/views/add-to-playlist/AddToPlaylistView.tsx"],"sourcesContent":["import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nconst getCacheKey = (userId: string) => `recent:playlists:added:to:${userId}`;\n\ninterface AddRecentPlaylistsOptions {\n id: string;\n limit?: number;\n}\n\nexport const RecentPlaylistHelper = {\n /**\n * Get a list of ids of playlists recently added to.\n */\n getRecentlyAddedTo(userId: string): string[] {\n return RecentItemHelper.getRecentItem(getCacheKey(userId), LocalStorageHelper);\n },\n\n addRecentlyAddedTo(userId: string, options: AddRecentPlaylistsOptions): string[] {\n return RecentItemHelper.addRecentItem(getCacheKey(userId), LocalStorageHelper, options);\n },\n\n removeRecentlyAddedTo(userId: string, id: string): void {\n RecentItemHelper.removeRecentItem(getCacheKey(userId), id, LocalStorageHelper);\n }\n};","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { PlaylistCollectionIdentifier } from 'libs/shared/apps/playlists/interfaces/identifiers/PlaylistCollectionIdentifier';\nimport { RecentPlaylistHelper } from 'libs/shared/apps/playlists/utils/RecentPlaylistHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { CurrentUser, Playlist, PopupViewProps, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { ObjectApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SelectPlaylist } from 'apps/playlists/components/select-playlist/SelectPlaylist';\nimport { PlaylistsEmptyState } from 'apps/playlists/views/playlists/empty-state/PlaylistsEmptyState';\n\nconst namespace = 'playlists.addToPlaylist';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getPlaylistsRequest = (cursor?: string) =>\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier(PlaylistSortType.AtoZ, cursor));\n\nconst getVideoPlaylistsRequest = (videoId: string, userId: string) => (cursor?: string) =>\n PlaylistRequests.getVideoPlaylists(videoId, userId, cursor);\n\ninterface AddToPlaylistViewProps {\n videoId?: string;\n}\n\nexport function AddToPlaylistView(props: AddToPlaylistViewProps & PopupViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<VideoTypes>(PlaylistRequests.getVideoCandidate(props.videoId));\n const playlists = useSelectAllPages<Playlist>((cursor?: string) => getPlaylistsRequest(cursor).key);\n const videoPlaylists = useSelectAllPages<Playlist>((cursor?: string) =>\n !!props.videoId && !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor).key);\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const { hasPermissions, isLoaded } = usePermissions();\n\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const videoPlaylistIds = !!videoPlaylists.items && videoPlaylists.items.map(p => p.id);\n\n const fetchNextPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getPlaylistsRequest(cursor));\n };\n\n const fetchNextVideoPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor));\n };\n\n useFetchAll(getPlaylistsRequest, fetchNextPlaylists);\n useFetchAll(\n !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id),\n !!currentUser.data && fetchNextVideoPlaylists\n );\n\n const addToPlaylist = (playlist: Playlist, isNew?: boolean) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase(isNew ? 'successNew' : 'success', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name,\n playlistId: playlist.id,\n playlistName: playlist.name\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n RecentPlaylistHelper.addRecentlyAddedTo(currentUser.data.id, { id: playlist.id });\n\n if (isNew)\n props.closePopup();\n };\n\n const onError = (xhr: ObjectApiXhr) => {\n if (xhr.responseJSON.type === 'playlist-limit-exceeded')\n alerts.error(getPhrase('playlistLimitExceeded'));\n else\n alerts.error(getPhrase('addError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n };\n\n Flight.fetch(dispatch, PlaylistRequests.addToPlaylist(playlist.id, [video.data], onSuccess, onError));\n };\n\n const removeFromPlaylist = (playlist: Playlist) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase('successRemove', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({ id: video.data.id, playlistId: playlist.id }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n };\n\n const onError = () => {\n alerts.error(getPhrase('removeError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n props.closePopup();\n };\n\n Flight.fetch(dispatch, PlaylistRequests.removePlaylistVideo(\n playlist.id,\n video.data.id,\n video.data.typeId,\n onSuccess,\n onError\n ));\n };\n\n const createPlaylist = (name: string) => {\n Flight.fetch(dispatch, PlaylistRequests.createPlaylist(currentUser.data.id, { name }, (newPlaylist: Playlist) => {\n if (!newPlaylist || !newPlaylist.id)\n return;\n\n AnalyticsHelper.logUserAction({ id: newPlaylist.id }, {\n actionType: UserAction.Create,\n entity: EntityType.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n addToPlaylist(newPlaylist, true);\n }, () => {\n alerts.error(getPhrase('createError', { video: video.data.name, playlist: name, escapeText: true }));\n props.closePopup();\n }));\n };\n\n const onSelectPlaylist = (playlist: Playlist) => {\n if (videoPlaylistIds.includes(playlist.id)) {\n removeFromPlaylist(playlist);\n return;\n }\n\n addToPlaylist(playlist);\n };\n\n const dataLoaded = !!video.data\n && !!playlists.items\n && !playlists.nextCursor\n && !!currentUser.data\n && !!videoPlaylists.items\n && !videoPlaylists.nextCursor\n && yearGroups.hasCompleted\n && isLoaded;\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded || screen === null}\n >\n {(() => {\n if (!dataLoaded)\n return <></>;\n\n return (\n <>\n {playlists.items.length\n ? (\n <div className='mb-2'>\n <Text namespace={namespace} phrase='selectPlaylist' options={{ video: video.data.name }} />\n </div>\n )\n : (\n <PlaylistsEmptyState\n isStudent={isStudent}\n headingClassName='h4'\n imageSize='small'\n className='py-2'\n hideButton\n />\n )\n }\n <SelectPlaylist\n playlists={playlists.items}\n currentUserId={currentUser.data.id}\n onSelectPlaylist={onSelectPlaylist}\n isVideoInPlaylist={(playlist: Playlist) => (videoPlaylistIds.includes(playlist.id))}\n createPlaylist={createPlaylist}\n />\n </>\n );\n })()}\n </Popup>\n );\n}"],"names":["getCacheKey","userId","RecentPlaylistHelper","getRecentlyAddedTo","addRecentlyAddedTo","options","removeRecentlyAddedTo","id","namespace","getPhrase","getPlaylistsRequest","cursor","getVideoPlaylistsRequest","videoId","AddToPlaylistView","props","dispatch","alerts","currentUser","video","playlists","key","videoPlaylists","data","yearGroups","isAuthenticated","customerId","hasPermissions","isLoaded","isStudent","videoPlaylistIds","items","map","p","addToPlaylist","playlist","isNew","success","heading","type","message","name","escapeText","appLink","application","action","args","appLinkText","appLinkClassName","playlistId","playlistName","actionType","entity","descriptor","workflowPhase","location","closePopup","xhr","responseJSON","error","dataLoaded","nextCursor","hasCompleted","title","showLoadingSpinner","screen","length","className","phrase","headingClassName","imageSize","hideButton","currentUserId","onSelectPlaylist","includes","typeId","removeFromPlaylist","isVideoInPlaylist","createPlaylist","newPlaylist"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6550],{93479:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,o=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),o&&(n+=":".concat(o)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}function o(e,t,r){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:r}}var i={interactiveResultSet:function(e,t,r,i,c,s,u,l){return{url:c?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t,":").concat(c),i),data:o(r,i,c),type:n.k.POST,normalize:!1,success:s,error:u,always:l}},mark:function(e,t,r,a,o,i,c){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:o,error:i,always:c}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:n.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},41196:(e,t,r)=>{r.d(t,{W:()=>c});var n=r(20354),a=r(93479),o=r(20768),i=r(31949);function c(e,t,r){var c,s=n.a.useBasicFetch(i.N.currentUser()),u=n.a.useBasicFetch(!!e&&o.b.interactiveMetadata(e)),l=n.a.useBasicFetch(!!(null===(c=u.data)||void 0===c?void 0:c.interactiveId)&&o.b.interactive(u.data.interactiveId)),d=!!s.data&&!!l.data;return n.a.useBasicFetch(d&&a.I.interactiveResultSet(u.data.interactiveId,u.data.id,s.data,t,r))}},26025:(e,t,r)=>{r.d(t,{B:()=>o});var n=r(1048),a=r(75795),o={getAudienceAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=n.t.isObject(e.params)?e.params:{},r=t.users,o=t.classrooms,i=t.classroomGroups,c=function(e){var r=t[e];if(r)return Array.isArray(r)?r:[r]},s={};return r&&(s.users=c("users")),o&&(s.classrooms=c("classrooms")),i&&(s.classroomGroups=c("classroomGroups")),s},getDateRangeAppLinkParams:function(){var e=a.O.getCurrentRoute().appLink,t=n.t.isObject(e.params)?e.params:{},r=t.from,o=t.to,i=t.rangeName,c={};return r&&(c.from=r),o&&(c.to=o),i&&(c.rangeName=i),c}}},26136:(e,t,r)=>{r.d(t,{B:()=>c});var n=r(76198),a=r(23481),o=r(64818),i=a.T.encloseNamespace("shared.analyticsUtils");function c(e,t){return e?t?(0,n._8)((r=e.id,a=e.sessionId,c=+"".concat(r||function(e){if(!e)return 0;for(var t=0,r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:c})):e.deleted?i("deleted"):o.l.getFullName(e)||i("anonUser"):i("anonUser");var r,a,c}},39157:(e,t,r)=>{r.d(t,{HI:()=>f,R6:()=>u,Rt:()=>v,UU:()=>d,Zs:()=>l,nq:()=>m});var n=r(75896),a=r(94892),o=r(28972),i=r(8246),c=r(83140),s=r(80845);function u(e,t,r){var o={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,s.Q)(e),c=new Set(i.map(function(e){return e.id}));t.students.forEach(function(t){var i=Object.assign(Object.assign({},t),{summary:v(e,t)});i.summary.awaitingMarking?o.markingRequired.push(i):n.m.last(t.results).attempts.filter(function(e){var t;return!!c.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===c.size?(o.completed.push(i),i.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&o.highScore.push(i),i.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&o.lowScore.push(i)):o.notCompleted.push(i)});var u=n.m.sortBy(o.lowScore,function(e){return e.summary.percentCorrect}),l=n.m.sortBy(o.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},o),{lowScore:u,highScore:l})}function l(e,t){return(0,s.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function d(e){return"".concat(e.questionId,":").concat(e.resultId)}function f(e,t,r){var n=(0,s.j_)(t),a=(0,s.f6)(e,n);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[d(e)])||void 0===t?void 0:t.status)===i.N.Correct}))?i.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[d(e)])||void 0===t?void 0:t.status)===i.N.Incorrect}))?i.N.Incorrect:void 0}function m(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach(function(t){var r=(0,s.j_)(t);if(r){l+=t.results.length;var d=c.A.isInteractionCorrect(e,r);d===o.w.Correct&&n++,d===o.w.UnAnswered&&i++,d===o.w.AwaitingMarking&&u++,d!==o.w.UnAnswered&&a++}}),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function v(e,t){var r=(0,s.j_)(t),n=(0,s.Q)(e),a=n.length,i=0,u=0;n.forEach(function(e){var t=c.A.isInteractionCorrect(e,r);t===o.w.Correct&&i++,t===o.w.AwaitingMarking&&u++});var l=a>0?i/a:0,d=new Set(n.map(function(e){return e.id})),f=r.attempts.filter(function(e){var t;return!!d.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:f,attempts:t.results.length,unanswered:a-f,percentCorrect:l,correct:i,awaitingMarking:u}}},56543:(e,t,r)=>{r.r(t),r.d(t,{GenerateInteractiveResultsReportView:()=>x});var n=r(32735),a=r(23481),o=r(2948),i=r(20354),c=r(110),s=r(84806),u=r(93479),l=r(41196),d=r(26025);function f(e){return function(e){if(Array.isArray(e))return m(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return m(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)?m(e,t):void 0}}(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 m(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 v=function(e){var t=[],r=[];return e.users&&t.push.apply(t,f(e.users)),e.classrooms&&r.push.apply(r,f(e.classrooms)),e.classroomGroups&&r.push.apply(r,f(e.classroomGroups)),{userId:t,groupId:r}},p=(r(57266),a.T.encloseNamespace("shared.analyticsUtils"));function y(e){var t=c.O.convertDateToUTC(e);return c.O.format(t,"YYYY-MM-DDTHH:mm:ss")}function g(e){return c.O.format(e,"YYYY-MM-DD")}var b=r(2606),w=r(9111),h=r(13876),I=r(83345),S=r(38143),C=r(28972),A=r(20768),E=r(31949),O=r(69883),D=r(91286),k=r(52921),R=r(83140),j=r(80845),M=r(64818);function P(e,t){return 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,a,o,i,c=[],s=!0,u=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;s=!1}else for(;!(s=(n=o.call(r)).done)&&(c.push(n.value),c.length!==t);s=!0);}catch(e){u=!0,a=e}finally{try{if(!s&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return T(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)?T(e,t):void 0}}(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.")}()}function T(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 N="shared.generateReport",L=a.T.encloseNamespace(N);function U(e){var t=c.O.convertUTCToLocal(e).toString();return c.O.format(t,"Do MMMM YYYY")}function x(e){var t,r,a,f,m,T=P((0,o.D)(S.g.ANONYMISE_USERS),1)[0],x=(0,O.Z)(),_=i.a.useGetFetchAsync(),F=d.B.getAudienceAppLinkParams(),Z=d.B.getDateRangeAppLinkParams(),B=function(e,t){var r=function(e){return y(c.O.startOf(e,"day"))},n=function(e){return y(c.O.endOf(e,"day"))},a=function(e,t){if(t)return e.find(function(e){return e.name===t})}(e,t.rangeName);if(a)return{start:r(g(a.startDate)),end:n(g(a.endDate))};if(t.from&&t.to)return{start:r(t.from),end:n(t.to)};var o=e.find(function(e){return!!e.default});return{start:r(g(o.startDate)),end:n(g(o.endDate))}}((a=new Date(2021,0,1),m=(f=(new Date).getFullYear())===a.getFullYear(),[{name:p("today"),startDate:new Date,endDate:new Date},{name:p("thisMonth"),startDate:new Date(f,(new Date).getMonth(),1),endDate:new Date},{name:p("lastThreeMonths"),startDate:new Date(f,(new Date).getMonth()-2,1),endDate:new Date},{name:p("lastSixMonths"),startDate:new Date(f,(new Date).getMonth()-5,1),endDate:new Date},{name:p("thisYear"),startDate:new Date(f,0,1),endDate:new Date},{name:p("lastYear"),startDate:new Date(f-1,0,1),endDate:new Date(f,0,0),disabled:m,tooltip:m?p("lastYearDisabled"):""},{name:p("allTime"),startDate:c.O.subtract(new Date,5,"years"),endDate:new Date,default:!0}]),Z),G=P(n.useState(!1),2),q=G[0],Y=G[1],z=(0,k.b)(),H=z.loading,Q=z.handleGenerateReportError,V=i.a.useBasicFetch(E.N.currentUser()),W=i.a.useBasicFetch(A.b.interactiveMetadata(e.interactiveId)),K=i.a.useBasicFetch((null===(t=W.data)||void 0===t?void 0:t.interactiveId)?A.b.interactive(W.data.interactiveId):null),$=(0,l.W)(e.interactiveId,Object.assign(Object.assign({},B),v(F)));(0,D.v)([K,W,$]);var J=(0,j.Q)(K.data),X=(0,s.Fx)(K.data,$.data,!1,T);return n.createElement(I.D.Provider,{value:N},n.createElement(w.G,{title:L("title"),showLoadingSpinner:!V.hasCompleted||H,closePopup:e.closePopup},n.createElement(n.Fragment,null,n.createElement("p",null,n.createElement(I.x,{phrase:"description"})),n.createElement("p",null,n.createElement(I.x,{phrase:"dateRange",options:{dateFrom:U(B.start),dateTo:U(B.end)}})),n.createElement("p",null,n.createElement(I.x,{phrase:"emailDescription",options:{email:null===(r=V.data)||void 0===r?void 0:r.email}})),n.createElement(h.u,null,n.createElement(h.u.Cancel,{onClick:e.closePopup}),n.createElement(h.u.Submit,{variant:"dark",onClick:function(){Y(!0);var t={interactiveName:W.data.name,userId:V.data.id,customerId:V.data.customerId,questions:J.map(function(e){return e.name}),rows:X.map(function(e){return{name:M.l.getFullName(e.user),unanswered:e.summary.unanswered,percentage:(0,b.DV)((0,b.Ki)(e.summary.percentCorrect)),correct:e.summary.correct,totalQuestions:e.summary.answered+e.summary.unanswered,results:J.map(function(t){switch(R.A.isInteractionCorrect(t,(0,j.j_)(e))){case C.w.Correct:return L("correct");case C.w.Incorrect:return L("incorrect");case C.w.NotApplicable:return"-";case C.w.AwaitingMarking:return L("awaitingMarking");case C.w.UnAnswered:case C.w.Answered:default:return""}})}})};_(u.I.interactiveResultsReport(t)).then(function(){x.success(L("success"))}).catch(function(e){return Q(e,L("error"),L("noEmailError"))}).finally(e.closePopup)},text:L("generateReport"),showSpinner:q})))))}},40782:(e,t,r)=>{r.d(t,{I:()=>n,O:()=>s});var n,a=r(32735),o=r(2606),i=r(362);function c(e){var t=a.useCallback(function(t){if(t){var r=t.r.baseVal.value,n=2*Math.PI*r,a=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=a.toString()}},[e.percentage]);return a.createElement("svg",null,a.createElement("circle",{r:(0,o.pu)(e.size),className:i.Z.backgroundCircle}),!(0,o.zR)(e.percentage)&&a.createElement("circle",{ref:t,r:(0,o.pu)(e.size),className:(0,o.V4)(e.percentage,e.scoreThresholds)}))}function s(e){var t,r=(0,o.Ki)(e.percentage),s=e.size||(e.layout===n.LabelInside?o.Mk.Large:o.Mk.Small),u=e.customLabel||(0,o.DV)(r);return e.layout===n.LabelOnly?a.createElement("span",{className:(0,o.IA)(r)},u):a.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&a.createElement("span",{className:"me-2"},u),a.createElement("div",{className:(0,o.tw)(s,r)},a.createElement(c,{percentage:r,size:s,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&a.createElement("span",{className:i.Z.centredPercentageText},u)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),s.defaultProps={layout:n.CircleOnly}},2606:(e,t,r)=>{r.d(t,{DV:()=>y,IA:()=>m,Ki:()=>p,Mk:()=>c,V4:()=>f,pu:()=>d,tw:()=>v,zR:()=>g});var n=r(94892),a=r(362);function o(e){return o="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},o(e)}function i(e,t,r){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=o(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var c,s=.2,u=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(c||(c={}));var l=i(i(i({},c.ExtraSmall,{size:2}),c.Small,{size:2}),c.Large,{size:5.8});function d(e){var t=l[e].size,r=e===c.Large?u:s;return"".concat(t/2-2*r,"rem")}function f(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?a.Z.circleSuccess:e>=t.MODERATE?a.Z.circleWarning:a.Z.circleDanger}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function v(e,t){var r="d-inline-block ".concat(a.Z.circleContainer);return e===c.Large&&(r+=" ".concat(a.Z.lgCircleContainer)),e===c.ExtraSmall&&(r+=" ".concat(a.Z.xsCircleContainer)),g(t)&&(r+=" ".concat(a.Z.pendingCircle)),r}function p(e){if(!g(e))return+e.toFixed(2)}function y(e){return g(e)?"--%":"".concat(Math.round(100*e),"%")}function g(e){return"number"!=typeof e}},94892:(e,t,r)=>{r.d(t,{T:()=>a,i:()=>n});var n={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}},28972:(e,t,r)=>{var n;r.d(t,{w:()=>n}),function(e){e[e.Correct=0]="Correct",e[e.Incorrect=1]="Incorrect",e[e.AwaitingMarking=2]="AwaitingMarking",e[e.Answered=3]="Answered",e[e.UnAnswered=4]="UnAnswered",e[e.NotApplicable=5]="NotApplicable"}(n||(n={}))},8246:(e,t,r)=>{var n;r.d(t,{N:()=>n}),function(e){e[e.Incorrect=0]="Incorrect",e[e.Correct=1]="Correct",e[e.PendingReview=2]="PendingReview"}(n||(n={}))},94644:(e,t,r)=>{r.d(t,{r:()=>l});var n=r(50242),a=r(81886),o=r(67058),i=r(14553),c=r(49267),s=r(49075),u={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:s._,internalServerError:s._};function l(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},u),t);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==n.o.InternalServer?o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new i.badRequest):r.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):r.notFound||a.Q.Ry.throw(new i.notFound):r.internalServerError||a.Q.Ry.throw(new s._))}}},91286:(e,t,r)=>{r.d(t,{v:()=>i});var n=r(32735),a=r(94644);function o(e){return e.map(function(e){return e.statusCode}).join(":")}function i(e,t,r){var i=Array.isArray(e)?e:[e];(0,n.useEffect)(function(){i.forEach(function(e){(0,a.r)(e.statusCode,t,r)})},[o(i),t,r])}},52921:(e,t,r)=>{r.d(t,{b:()=>h});var n=r(81886),a=r(20354),o=r(12754),i=r(23481),c=r(97395),s=r(47663);function u(e){return u="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},u(e)}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,d(n.key),n)}}function d(e){var t=function(e){if("object"!=u(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=u(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==u(t)?t:t+""}function f(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(f=function(){return!!e})()}function m(e){return m=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},m(e)}function v(e,t){return v=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},v(e,t)}var p="shared.verifiedEmailError",y=function(e){function t(e,r,n){var a;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(a=function(e,t,r){return t=m(t),function(e,t){if(t&&("object"==u(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,f()?Reflect.construct(t,r||[],m(e).constructor):t.apply(e,r))}(this,t,["VerifiedEmailRequiredError"])).message=e,a.liteUrl=r,a.hasLite=n,a}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&v(e,t)}(t,e),r=t,(n=[{key:"name",get:function(){return"VerifiedEmailRequiredError"}},{key:"dialogOptions",get:function(){var e=c._.safeUrlConcat(this.liteUrl,"settings/account");return{title:i.T.getPhrase(p,"heading"),text:this.hasLite?"".concat(this.message," ").concat(i.T.getPhrase(p,"visitSettings",{href:e})):this.message,buttons:[{text:i.T.getPhrase(p,"close"),className:"btn btn-dark",success:!0}]}}}])&&l(r.prototype,n),Object.defineProperty(r,"prototype",{writable:!1}),r;var r,n}(s.S),g=r(39151),b=r(69883),w=r(15311);function h(){var e=(0,b.Z)(),t=(0,w.r)(),r=t.hasProduct,i=t.isLoadingProducts,c=a.a.useBasicFetch(g.L.config());return{handleGenerateReportError:function(t,a,i){var s;t.responseJSON&&"no-email"===(null===(s=t.responseJSON)||void 0===s?void 0:s.type)?n.Q.Ry.throw(new y(i,c.data.liteUrl,r(o.x.Primary))):e.error(a)},loading:!c.hasCompleted||i}}},57266:(e,t,r)=>{r.d(t,{e:()=>i});var n=r(81886),a=r(1048),o=r(75795),i={updateParams:function(e,t){var r=o.O.getCurrentRoute().appLink,i="string"==typeof r.params?n.Q.Ab.DeserializeQueryParams(r.params):r.params;t.keysToRemove&&(i=a.t.omit(i,t.keysToRemove));var c=(null==t?void 0:t.merge)?Object.assign(Object.assign({},i),e):e,s=Object.assign(Object.assign({},r),{params:c});a.t.isEqual(r,s)||n.Q.C$.trigger(s,a.t.omit(t,["merge","keysToRemove"]))}}},83140:(e,t,r)=>{r.d(t,{A:()=>p});var n=r(28972),a=r(8246),o=r(56644);function i(e){return i="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},i(e)}function c(e,t,r){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=i(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function s(){return n.w.NotApplicable}function u(e,t){var r=e.actionableItems.filter(function(e){return e.isCorrect});return r.every(function(e){return!t(e.id)})?n.w.UnAnswered:r.every(function(e){var r;return e.name.trim().toLowerCase()===(null===(r=t(e.id))||void 0===r?void 0:r.trim().toLowerCase())})?n.w.Correct:n.w.Incorrect}function l(e,t){return e.actionableItems.every(function(e){return!t(e.id)})?n.w.UnAnswered:e.actionableItems.filter(function(e){return e.isCorrect}).every(function(e){var r,n=t(e.id);return(null==n?void 0:n.toString())===(null===(r=e.id)||void 0===r?void 0:r.toString())||n===e.name})?n.w.Correct:n.w.Incorrect}function d(e,t){return function(r){var n=null==t?void 0:t.attempts.find(function(t){return t.id===e.id});return null==n?void 0:n.answers.find(function(e){return e.id===r})}}function f(e,t){var r=d(e,t);return l(e,function(e){var t=r(e);return null==t?void 0:t.text})}function m(e,t){return function(e,t){var r;return e.actionableItems.forEach(function(e){var o=t(e.id);r=o?o.status!==a.N.Correct?o.status!==a.N.Incorrect?n.w.AwaitingMarking:n.w.Incorrect:n.w.Correct:n.w.UnAnswered}),r}(e,d(e,t))}var v=c(c(c(c(c(c(c({},o.Z9.Annotation,s),o.Z9.Image,s),o.Z9.MissingWord,function(e,t){var r=d(e,t);return u(e,function(e){var t=r(e);return null==t?void 0:t.text})}),o.Z9.MultipleChoice,f),o.Z9.ShortAnswer,m),o.Z9.TrueOrFalse,f),o.Z9.Illustration,m),p={notApplicable:s,awaitingMarking:function(){return n.w.AwaitingMarking},isMissingWordCorrect:u,isMultipleChoiceCorrect:l,isInteractionCorrect:function(e,t){return(0,v[e.typeId])(e,t)}}},362:(e,t,r)=>{r.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
- //# sourceMappingURL=6550-d99e0ed75d-lite.chunk.js.map