@clickview/lite 0.82.1 → 0.82.2-rc.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 (142) 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/2074-39b86b9a22-lite.chunk.js +2 -0
  11. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +1 -0
  12. package/dist/scripts/{2664-907153c03b-lite.chunk.js → 2664-87c8cbfa7f-lite.chunk.js} +2 -2
  13. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +1 -0
  14. package/dist/scripts/2888-2596e106a5-lite.chunk.js +2 -0
  15. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +1 -0
  16. package/dist/scripts/289-669c0c8222-lite.chunk.js +2 -0
  17. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +1 -0
  18. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js → 3612-8c6423bd51-lite.chunk.js} +2 -2
  19. package/dist/scripts/{9911-8892b6dbfe-lite.chunk.js.map → 3612-8c6423bd51-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +2 -0
  21. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +1 -0
  22. package/dist/scripts/3893-2856933742-lite.chunk.js +2 -0
  23. package/dist/scripts/3893-2856933742-lite.chunk.js.map +1 -0
  24. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +3 -0
  25. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +1 -0
  26. package/dist/scripts/{4177-2d876c7b14-lite.chunk.js → 4177-285ddf9ae3-lite.chunk.js} +2 -2
  27. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +1 -0
  28. package/dist/scripts/{4578-27028d26eb-lite.chunk.js → 4578-7578bcf17a-lite.chunk.js} +2 -2
  29. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +1 -0
  30. package/dist/scripts/{4621-7fb0a05bcb-lite.chunk.js → 4621-1f79d94416-lite.chunk.js} +2 -2
  31. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +1 -0
  32. package/dist/scripts/4806-f36469abb7-lite.chunk.js +2 -0
  33. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +1 -0
  34. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js → 4948-de1c75e7fb-lite.chunk.js} +1 -1
  35. package/dist/scripts/{4948-ba684e5f4f-lite.chunk.js.map → 4948-de1c75e7fb-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +2 -0
  37. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +1 -0
  38. package/dist/scripts/{5554-f1f3baf822-lite.chunk.js → 5554-17bb3b86fc-lite.chunk.js} +2 -2
  39. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +1 -0
  40. package/dist/scripts/5579-a9c152057f-lite.chunk.js +2 -0
  41. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +1 -0
  42. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +2 -0
  43. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +1 -0
  44. package/dist/scripts/6070-a390fdce21-lite.chunk.js +2 -0
  45. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{6909-ba75701156-lite.chunk.js → 6909-a9b8930e37-lite.chunk.js} +2 -2
  47. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7401-98135f09e8-lite.chunk.js +2 -0
  49. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{7617-211f084b70-lite.chunk.js → 7617-9d34c841e6-lite.chunk.js} +2 -2
  51. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +1 -0
  52. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +2 -0
  53. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +1 -0
  54. package/dist/scripts/7843-f6033528ce-lite.chunk.js +2 -0
  55. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +1 -0
  56. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +2 -0
  57. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +1 -0
  58. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +2 -0
  59. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js → 8133-ffcff3b7fc-lite.chunk.js} +3 -3
  61. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8364-ff63447d36-lite.chunk.js +3 -0
  63. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +1 -0
  64. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +2 -0
  65. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js → 9042-fdc5ecb459-lite.chunk.js} +1 -1
  67. package/dist/scripts/{9042-fd7e79b891-lite.chunk.js.map → 9042-fdc5ecb459-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/9295-4242401e60-lite.chunk.js +2 -0
  69. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{9742-3f6b75484a-lite.chunk.js → 9742-5f99d74bb0-lite.chunk.js} +2 -2
  71. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +1 -0
  72. package/dist/scripts/979-4b893e5603-lite.chunk.js +2 -0
  73. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +1 -0
  74. package/dist/scripts/9911-9272b96e46-lite.chunk.js +2 -0
  75. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +1 -0
  76. package/dist/scripts/bundle-9a3e49399a.min.js +3 -0
  77. package/dist/scripts/{bundle-1187cb1e9f.min.js.map → bundle-9a3e49399a.min.js.map} +1 -1
  78. package/package.json +1 -1
  79. package/dist/scripts/1074-fdce06d863-lite.chunk.js +0 -2
  80. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +0 -2
  83. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +0 -1
  84. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +0 -1
  85. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +0 -2
  86. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +0 -1
  87. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +0 -1
  88. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +0 -1
  89. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +0 -2
  91. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +0 -2
  94. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +0 -2
  96. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +0 -1
  97. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +0 -1
  98. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +0 -2
  99. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +0 -1
  100. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +0 -2
  101. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +0 -1
  102. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +0 -1
  103. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +0 -2
  104. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +0 -1
  105. package/dist/scripts/7568-55e9b01367-lite.chunk.js +0 -3
  106. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +0 -1
  108. package/dist/scripts/7742-514844bd1a-lite.chunk.js +0 -2
  109. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +0 -2
  111. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +0 -1
  112. package/dist/scripts/8077-dfd239131d-lite.chunk.js +0 -2
  113. package/dist/scripts/8077-dfd239131d-lite.chunk.js.map +0 -1
  114. package/dist/scripts/843-4dbc5df109-lite.chunk.js +0 -3
  115. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8735-e74a148502-lite.chunk.js +0 -2
  117. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8856-2d332952ae-lite.chunk.js +0 -2
  119. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +0 -1
  120. package/dist/scripts/904-2784e45cfc-lite.chunk.js +0 -2
  121. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +0 -1
  122. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +0 -2
  123. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +0 -1
  124. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +0 -2
  125. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +0 -1
  126. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +0 -1
  127. package/dist/scripts/979-6a70a0e616-lite.chunk.js +0 -2
  128. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +0 -1
  129. package/dist/scripts/bundle-1187cb1e9f.min.js +0 -3
  130. /package/dist/css/{9528-lite-4a892bdbf2.chunk.css → 1202-lite-4a892bdbf2.chunk.css} +0 -0
  131. /package/dist/css/{7148-lite-856c02f000.chunk.css → 2888-lite-856c02f000.chunk.css} +0 -0
  132. /package/dist/css/{904-lite-2435a34b13.chunk.css → 289-lite-2435a34b13.chunk.css} +0 -0
  133. /package/dist/css/{9911-lite-2b4142796a.chunk.css → 3612-lite-2b4142796a.chunk.css} +0 -0
  134. /package/dist/css/{8856-lite-f8e496136d.chunk.css → 5579-lite-f8e496136d.chunk.css} +0 -0
  135. /package/dist/css/{6550-lite-45dc286aab.chunk.css → 6070-lite-45dc286aab.chunk.css} +0 -0
  136. /package/dist/css/{2970-lite-5a317efacd.chunk.css → 787-lite-5a317efacd.chunk.css} +0 -0
  137. /package/dist/css/{843-lite-db31e36b79.chunk.css → 8364-lite-db31e36b79.chunk.css} +0 -0
  138. /package/dist/css/{8735-lite-856c02f000.chunk.css → 9911-lite-856c02f000.chunk.css} +0 -0
  139. /package/dist/scripts/{3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt → 4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt} +0 -0
  140. /package/dist/scripts/{7568-55e9b01367-lite.chunk.js.LICENSE.txt → 8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{843-4dbc5df109-lite.chunk.js.LICENSE.txt → 8364-ff63447d36-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{bundle-1187cb1e9f.min.js.LICENSE.txt → bundle-9a3e49399a.min.js.LICENSE.txt} +0 -0
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4177],{28469:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481).T.encloseNamespace("rostering.alert");function o(e){var t="classroom"===e.type?r("classroom"):r("hasRostering");return a.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},t," ")}},299:(e,t,n)=>{n.d(t,{X:()=>s});var a=n(32735),r=n(69217),o=n(94631),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,s=void 0===n?"id":n,i=t.persistNamespace,l=t.initialState?t.initialState:new Map,c=a.useRef(l),d=(0,r.N)(),u=(0,o.D)(e),m=(0,o.D)(i);function g(){c.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[s].toString()),c.current.get(e)}function f(){return!!(null==e?void 0:e.length)&&e.every(p)}function v(e){e.forEach(function(e){c.current.set(e,!0)}),d()}return a.useEffect(function(){t.initialState||i&&m===i||(null==u?void 0:u.map(function(e){return e[s]}).join())!==(null==e?void 0:e.map(function(e){return e[s]}).join())&&g()},[u,m,e,t.initialState]),a.useEffect(function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&v(t.preselectedIds)},[]),{onToggleBulk:function(){var t=!f();e.forEach(function(e){t?c.current.set(e[s].toString(),!0):c.current.delete(e[s].toString())}),d()},onToggleItem:function(e){var t=!c.current.get(e.toString());t?c.current.set(e.toString(),t):c.current.delete(e.toString()),d()},getSelected:function(){return Array.from(c.current.keys())},isChecked:p,bulkChecked:f(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach(function(e){c.current.delete(e[s].toString())}),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find(function(e){return p(e)})},setSelected:v,getSelectedCount:function(){return c.current.size},reset:g,getMap:function(){return c.current}}}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(56644);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}},35115:(e,t,n)=>{n.d(t,{p:()=>d});var a=n(32735),r=n(49935),o=n(95278);const s="pJf6R",i="MSvzY",l="IFmvc",c="pOcvk";var d=a.memo(function(){return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),a.createElement("div",{className:"pb-3"},a.createElement(r.b2,{numItems:2})),a.createElement("div",{className:"pb-2"},a.createElement(o.Z,null)),a.createElement("div",{className:"d-flex align-items-center py-2"},a.createElement("div",{className:"mx-4 partial-loading-background ".concat(s)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),a.createElement("div",{className:"me-auto partial-loading-background ".concat(i)}),a.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),a.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map(function(e,t){return a.createElement("li",{key:t},a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement("div",{className:"me-2 partial-loading-background ".concat(s)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),a.createElement("div",{className:"w-25"},a.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),a.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(l," ").concat("SdQ90")}),a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(c)})):a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(c)})),a.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),a.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))})))})},79232:(e,t,n)=>{n.r(t),n.d(t,{ClassroomStudentsView:()=>Ne});var a=n(32735),r=n(70680),o=n(23481),s=n(20354),i=n(75896),l=n(49985),c=n(65858),d=n(37395),u=n(28469),m=n(16714),g=n(76881),p=n(39151),f=n(31949),v=n(22902),S=n(79612),E=n(37802),h=n(14070),y=n(97291),b=n(97958),k=n(83345),C=n(35223),N=n(99742),O="classrooms.classroomsEmptyState";function T(e){return a.createElement(k.D.Provider,{value:O},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"noStudentsHeading"})),a.createElement(b.u.Info,{className:"w-33 ".concat(e.canManageUsers?"":"mb-0")},a.createElement(k.x,{phrase:"noStudentsInfo"})),e.canManageUsers&&!e.isRostering&&a.createElement(b.u.Cta,{text:o.T.getPhrase(O,"noStudentsCta"),appLink:{application:y.O.USER_MANAGER,action:h.e.UserManager.STUDENTS}}),!e.canManageUsers&&!e.isRostering&&a.createElement(b.u.Info,null,a.createElement(k.x,{phrase:"askAdmin"})),e.isRostering&&a.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},o.T.getPhrase(O,"rosteringCta"))))}var w="classrooms.manageClassroomStudentsEmptyState",x=o.T.encloseNamespace(w),I="https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf",U="";function A(){return a.createElement(k.D.Provider,{value:w},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"emptyStateHeading"})),a.createElement(b.u.Info,{className:"mb-2"},a.createElement(k.x,{phrase:"emptyStateInfo"})),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:U,target:"_blank"},x("rosteringCta"))))}function M(e){return e.schoolHasNoStudents?a.createElement(T,{canManageUsers:e.canManageUsers}):a.createElement(k.D.Provider,{value:w},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"emptyStateHeading"})),a.createElement(b.u.Info,null,a.createElement(k.x,{phrase:"emptyStateInfo"})),a.createElement(b.u.Cta,{text:o.T.getPhrase(w,"addStudents"),icon:C.vn.Plus,appLink:{application:y.O.CLASSROOMS,action:h.e.Classrooms.ADD_STUDENTS_CHOICES,args:[e.classroom.id]}}),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:I,target:"_blank"},e.classroomIdeasText)))}var R=n(81886),j=n(11607),F=n(89965),G=n(91693),P=n(83914),L=n(36532),D=n(86764),B=n(69883),H=n(299),_=n(3747),V=n(23999),Z=n(15611),W=n(36511);const X={maxWidth:"A0VzW"};function q(e){var t;return e.group?a.createElement("div",{className:"classroom-pill ".concat(X.maxWidth," text-white text-truncate bg-").concat((0,W.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour))},a.createElement("p",{className:"text-truncate mb-0",title:e.group.name},e.group.name)):a.createElement(a.Fragment,null)}function Y(e){return e.count?a.createElement(j.L,{onClick:e.onClick,className:"classroom-pill bg-white border border-dark"},"+",e.count):a.createElement(a.Fragment,null)}var $="classrooms.classroomGroupDropdown",z=function(e,t){return{application:y.O.CLASSROOMS,action:h.e.Classrooms.NEW_GROUP,args:[e],params:{addStudents:t.map(function(e){return e.id})}}};function Q(e){var t,n=(0,H.X)(e.groups,{preselectedIds:e.preselections.map(function(e){return e.id})}),r=n.onToggleItem,s=n.isChecked,i=e.groups.reduce(function(t,n){return t[n.id]=function(e,t){var n=new Set(t.users.data.map(function(e){return e.id.toString()}));return e.every(function(e){return n.has(e.id.toString())})}(e.selectedStudents,n),t},{});a.useEffect(function(){e.groups.forEach(function(e){var t=i[e.id];(!t||s(e.id))&&(t||!s(e.id))||r(e.id)})},[Object.entries(i).sort(function(e,t){return e[0].localeCompare(t[0])}).join(",")]);var d={align:e.alignRight?"end":"start"};return e.disabled&&(d.show=!1),a.createElement(V.Z,Object.assign({},d),a.createElement(V.Z.Toggle,{as:"div",id:e.id,className:"".concat(e.disabled?"text-light":"cursor-pointer"," ").concat("me-2 d-inline-block svg-container sm"," no-caret")},a.createElement(P.x,{svgName:C.vn.Group,title:e.disabled?e.disabledTooltips:o.T.getPhrase($,"addToGroupTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0,tooltipSpanHackClassName:""})),a.createElement(V.Z.Menu,null,!!(null===(t=e.groups)||void 0===t?void 0:t.length)&&a.createElement("div",{className:"px-2 border-bottom mb-1"},a.createElement("p",{className:"mb-0"},a.createElement(k.x,{namespace:$,phrase:"addToGroup"})),a.createElement("ul",{className:"list-unstyled pe-3"},e.groups.map(function(t){var n=function(e,t){var n=new Set(t.users.data.map(function(e){return e.id.toString()}));return e.every(function(e){return!n.has(e.id.toString())})}(e.selectedStudents,t),o=!!e.isBulk&&!i[t.id]&&!n;return a.createElement("li",{key:t.id,className:"d-flex align-items-center bg-white my-1"},a.createElement(F.X,{id:"".concat(e.id,":").concat(t.id),checked:s(t.id),onChange:function(){return function(t){var n=!s(t.id);e.onSelectGroup(t,n),r(t.id)}(t)},indeterminate:o}),a.createElement(q,{group:t}))}))),a.createElement(Z.F,{onClick:function(){e.disabled||l.k.logUserAction({classroom:{id:e.classroom.id,name:e.classroom.name}},l.k.mergeOptions(e.analyticsOptions,{actionType:c.Vw.Create,workflowPhase:c.eu.Start,entity:c.py.ClassroomGroup}))},appLink:z(e.classroom.id,e.selectedStudents),className:e.disabled?"disabled":"text-nowrap d-flex align-items-center px-2"},a.createElement(P.x,{svgName:C.vn.Plus}),a.createElement(k.x,{namespace:$,phrase:"createNew"}))))}Q.defaultProps={preselections:[]};var J=n(91967),K=n(83657),ee=n(97408),te=n(10038),ne=n(64818);const ae={avatarContainer:"rfVnC",name:"RYLWZ"};function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,s,i=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||oe(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 oe(e,t){if(e){if("string"==typeof e)return se(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)?se(e,t):void 0}}function se(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}var ie=o.T.encloseNamespace("classrooms.manageClassroomStudentItem"),le=function(e){return{application:y.O.USER_MANAGER,action:h.e.UserManager.EDIT_USER,args:[e],params:{userType:g.Y.Learner}}},ce=function(e,t){return{application:y.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_STUDENTS,args:[t],params:{studentIds:[e]}}};function de(e){var t,n=re(a.useState(!1),2),r=n[0],o=n[1],s=re(a.useState(!1),2),i=s[0],d=s[1],u=re(a.useState({}),2),g=u[0],p=u[1],f=a.useRef(null),S=a.useRef(null),E=a.useRef(e.selectedGroups),h=(0,v.T)().hasPermissions;a.useEffect(function(){E.current=e.selectedGroups,k(),i||o(!0)},[e.selectedGroups.length]);var y,b=J.q.throttle(function(){k(),o(!0)},300);function k(){p(E.current.reduce(function(e,t){return e[t.id]=!0,e},{}))}return(0,te.H)(function(){i||b()}),a.useEffect(function(){if(f.current&&S.current&&r){var e=f.current.firstElementChild;if(e){var t,n,a=e.getBoundingClientRect().y,s={},i=function(e){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=oe(e))){t&&(e=t);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return o=e.done,e},e:function(e){s=!0,r=e},f:function(){try{o||null==t.return||t.return()}finally{if(s)throw r}}}}(f.current.children);try{for(i.s();!(n=i.n()).done;){var l=n.value;l.id&&(s[l.id]=l.getBoundingClientRect().y===a,t=s[l.id]?l.id:t)}}catch(e){i.e(e)}finally{i.f()}S.current.getBoundingClientRect().y!==a&&(s[t]=!1),p(s),o(!1)}}},[r]),a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement(F.X,{id:e.student.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),a.createElement("div",{className:"".concat(ae.avatarContainer," flex-shrink-0 me-2")},a.createElement(ee.q,{imageCdnUrl:e.config.imageCdnUrl,initials:ne.l.getInitials(e.student.name,e.student.surname),imageUrl:null===(t=e.student.avatar)||void 0===t?void 0:t.url})),a.createElement("p",{className:"me-2 ".concat(ae.name," text-truncate mb-0 text-nowrap")},e.student.name," ",e.student.surname),a.createElement("div",{className:"".concat(r?"invisible":""," me-auto d-flex flex-wrap mt-n1"),ref:f},e.selectedGroups.map(function(e){return g[e.id]?a.createElement("div",{key:e.id,className:"me-1 mt-1",id:e.id},a.createElement(q,{group:e})):a.createElement(a.Fragment,{key:e.id})}),a.createElement("div",{ref:S,className:"me-1 mt-1"},a.createElement(Y,{count:Object.keys(g).reduce(function(e,t){return g[t]||e++,e},0),onClick:function(){d(!0),k()}}))),a.createElement(Q,{id:"add-group-".concat(e.student.id),classroom:e.classroom,groups:e.classroomGroups,selectedStudents:[e.student],preselections:e.selectedGroups,onSelectGroup:function(t,n){return e.onToggleGroup(e.student,t,n)},analyticsOptions:{location:c.LZ.ManageClassroomStudentListItem},alignRight:!0,disabled:e.readOnly,disabledTooltips:e.readOnlyTooltip}),a.createElement(K.e,{actions:(y=[],h(m.C.ManageUsers)&&y.push({label:ie("editStudent"),appLink:le(e.student.id),disabled:e.readOnly,className:e.readOnly?"disabled":"",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.student.id},{actionType:c.Vw.Edit,entity:c.py.User,workflowPhase:c.eu.Start,location:c.LZ.ManageClassroomStudentListItem})}}),y.push({label:ie("removeStudent"),appLink:ce(e.student.id,e.classroom.id),disabled:e.readOnly,className:e.readOnly?"disabled":"text-danger",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.classroom.id,name:e.classroom.name,userId:e.student.id},{actionType:c.Vw.Dissociate,entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,location:c.LZ.ManageClassroomStudentListItem})}}),y),actionsDropdownClassName:"btn"}))}var ue=n(88630),me="classrooms.manageClassroomStudents",ge=o.T.encloseNamespace(me);function pe(e){var t,n=e.classroom,i=e.students,d=e.groups,u=(0,r.I0)(),m=(0,B.Z)(),g=(0,H.X)(i.data),p=g.getSelected().length,f=d.filter(function(e){var t,n;if(!(null===(n=null===(t=e.users)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length))return!1;var a=!0,r=0,o=g.getSelected();if(o.length){var s=function(){var t=o[r];e.users.data.find(function(e){return e.id.toString()===t.toString()})||(a=!1),r++};do{s()}while(r<o.length);return a}}),v=(0,_.a)(D.r.XLDown);if(!(null===(t=i.data)||void 0===t?void 0:t.length))return a.createElement(M,{classroom:e.classroom,classroomIdeasText:ge("classroomIdeasText"),schoolHasNoStudents:e.schoolHasNoStudents,canManageUsers:e.canManageUsers});var S=g.getSelected().map(function(t){return e.students.data.find(function(e){return e.id.toString()===t.toString()})}).filter(function(e){return!!e});return a.createElement(a.Fragment,null,a.createElement("div",{className:"d-flex align-items-center py-2 ".concat(v?"ps-2":"ps-4")},a.createElement(F.X,{id:"manage-classroom-students-bulk",onChange:g.onToggleBulk,checked:g.bulkChecked,className:"me-2",indeterminate:g.hasSomeSelections(),disabled:e.readOnly}),a.createElement(Q,{id:"bulk-add-group",classroom:n,selectedStudents:S,isBulk:!0,groups:d,onSelectGroup:function(t,a){var r=g.getSelected();e.onBulkSelectGroup(i.data.filter(function(e){return r.includes(e.id.toString())}),t,a);var o=a?ue.F.addStudentsToGroup:ue.F.removeStudentsFromGroup;s.a.fetch(u,o(r,t.id,n.id,function(){l.k.logUserAction({id:t.id,studentCount:r.length},{actionType:c.Vw.Associate,entity:c.py.ClassroomGroup,descriptor:c.iF.User,workflowPhase:c.eu.Complete,location:c.LZ.ManageClassroomStudents}),m.success(ge("addSuccess",{groupName:t.name,escapeText:!0}))},function(){m.error(ge("addError",{groupName:t.name,escapeText:!0}))}))},disabled:!p||e.readOnly,preselections:f,analyticsOptions:{location:c.LZ.ManageClassroomStudents},disabledTooltips:e.readOnly&&o.T.getPhrase(me,"disabledByRostering")}),a.createElement(j.L,{className:"me-auto ".concat(!p||e.readOnly?"text-light cursor-default":""),onClick:function(){if(p&&!e.readOnly){var t=g.getSelected();l.k.logUserAction({id:n.id,studentCount:t.length},{entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,actionType:c.Vw.Dissociate,location:c.LZ.ManageClassroomStudents}),R.Q.C$.trigger({application:y.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_STUDENTS,args:[n.id],params:{studentIds:t}})}}},a.createElement(L.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(me,"disabledByRostering"):""},a.createElement(P.x,{svgName:C.vn.Delete,title:o.T.getPhrase(me,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0}))),a.createElement(L.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(me,"disabledByRostering"):""},a.createElement(G.h,{onClick:function(){l.k.logUserAction({id:n.id},{entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,actionType:c.Vw.Associate,location:c.LZ.ManageClassroomStudents}),R.Q.C$.trigger({application:y.O.CLASSROOMS,action:h.e.Classrooms.ADD_STUDENTS_CHOICES,args:[n.id]})},svgName:C.vn.Plus,className:"btn btn-outline-dark",disabled:e.readOnly},a.createElement(k.x,{namespace:me,phrase:"addStudent"})))),a.createElement("ul",{className:"striped-list list-unstyled"},i.data.map(function(t){return a.createElement("li",{key:t.id},a.createElement(de,{classroom:n,student:t,classroomGroups:e.groups,config:e.config,selectedGroups:e.groups.filter(function(e){return e.users.data.find(function(e){return e.id===t.id})}),checked:g.isChecked(t.id),onToggleCheckbox:function(){return g.onToggleItem(t.id)},onToggleGroup:e.onToggleGroup,readOnly:e.readOnly,readOnlyTooltip:e.readOnly?ge("disabledByRostering"):""}))})))}var fe=n(35115),ve=n(31491),Se=n(22602),Ee=n(47288);function he(e){return function(e){if(Array.isArray(e))return be(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ye(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 ye(e,t){if(e){if("string"==typeof e)return be(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)?be(e,t):void 0}}function be(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}var ke=o.T.encloseNamespace("classrooms.classroomStudents"),Ce={entity:c.py.ClassroomGroup,descriptor:c.iF.User,workflowPhase:c.eu.Complete,location:c.LZ.ManageClassroomStudentListItem};function Ne(e){var t,n,o,b,k,C,N,O,T,w,x,I,U=(0,E.r)(null).hasShareFlowV2,R=s.a.useBasicFetch(f.N.currentUser()),j=s.a.useBasicFetch(R.data&&ue.F.getClassroom(e.id,R.data.id)),F=s.a.useBasicFetch(ue.F.getClassroomStudents(e.id,e.cursor)),G=s.a.useBasicFetch(R.data&&Ee.N.getUsers(R.data.customerId,g.Y.Learner)),P=s.a.useBasicFetch(ue.F.getClassroomGroups(e.id)),L=s.a.useBasicFetch(p.L.config()),D=(x=a.useState(null===(t=P.data)||void 0===t?void 0:t.data),I=2,function(e){if(Array.isArray(e))return e}(x)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,s,i=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(x,I)||ye(x,I)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),B=D[0],H=D[1];a.useEffect(function(){P.hasCompleted&&!P.isFetching&&H(P.data.data)},[P.hasCompleted,P.isFetching]);var _=null===(o=null===(n=j.data)||void 0===n?void 0:n._integrations)||void 0===o?void 0:o.rostered,V=(0,r.I0)(),Z=(0,v.T)().hasPermissions;function W(t,n,a){var r={id:n.id,studentCount:1},o=he(B);o=a?o.map(function(e){return e.id===n.id?Object.assign(Object.assign({},e),{users:Object.assign(Object.assign({},e.users),{data:i.m.uniq([].concat(he(e.users.data),[t]),"id")})}):e}):o.map(function(e){return e.id===n.id?Object.assign(Object.assign({},e),{users:Object.assign(Object.assign({},e.users),{data:e.users.data.filter(function(e){return e.id!==t.id})})}):e}),H(o);var d=a?ue.F.addStudentsToGroup([t.id],n.id,e.id,function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:c.Vw.Associate}))}):ue.F.removeStudentsFromGroup([t.id],n.id,e.id,function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:c.Vw.Dissociate}))});s.a.fetch(V,d)}function X(e,t,n){var a=he(B);a=n?a.map(function(n){return n.id!==t.id?n:Object.assign(Object.assign({},n),{users:Object.assign(Object.assign({},n.users),{data:i.m.uniq([].concat(he(n.users.data),he(e)),"id")})})}):a.map(function(n){return n.id!==t.id?n:Object.assign(Object.assign({},n),{users:Object.assign(Object.assign({},n.users),{data:n.users.data.filter(function(t){return!e.some(function(e){return e.id===t.id})})})})}),H(a)}return(0,S.M)({title:ke("pageTitle",{classroomName:null===(b=j.data)||void 0===b?void 0:b.name})}),(0,ve._)(j),j.data&&(null===(k=F.data)||void 0===k?void 0:k.data)&&(null===(C=P.data)||void 0===C?void 0:C.data)&&L.data&&G.data&&B?a.createElement(Se.R,{classroom:j.data,currentUser:R.data,onTogglePin:function(e,t,n){if(!_){var a=e?ue.F.pinClassroom:ue.F.unpinClassroom;s.a.fetch(V,a(j.data,t,n))}},activeTab:"students",isRostered:_,hasShareFlowV2:U},function(){var e,t,n,r,o,s,i,l,c,d;return _?a.createElement(a.Fragment,null,a.createElement(u.P,{type:"classroom"}),(null===(t=null===(e=F.data)||void 0===e?void 0:e.data)||void 0===t?void 0:t.length)?a.createElement(pe,{classroom:j.data,students:F.data,groups:B,onToggleGroup:W,onBulkSelectGroup:X,config:L.data,schoolHasNoStudents:!(null===(r=null===(n=G.data)||void 0===n?void 0:n.data)||void 0===r?void 0:r.length),canManageUsers:Z(m.C.ManageUsers),readOnly:!0}):a.createElement(A,null)):(null===(s=null===(o=F.data)||void 0===o?void 0:o.data)||void 0===s?void 0:s.length)?a.createElement(pe,{classroom:j.data,students:F.data,groups:B,onToggleGroup:W,onBulkSelectGroup:X,config:L.data,schoolHasNoStudents:!(null===(l=null===(i=G.data)||void 0===i?void 0:i.data)||void 0===l?void 0:l.length),canManageUsers:Z(m.C.ManageUsers)}):a.createElement(M,{classroom:j.data,classroomIdeasText:ke("classroomIdeasText"),schoolHasNoStudents:!(null===(d=null===(c=G.data)||void 0===c?void 0:c.data)||void 0===d?void 0:d.length),canManageUsers:Z(m.C.ManageUsers)})}(),!!(null===(O=null===(N=F.data)||void 0===N?void 0:N.pagination)||void 0===O?void 0:O.cursors)&&a.createElement(d.t,{appLink:{application:y.O.CLASSROOMS,action:h.e.Classrooms.CLASSROOM_STUDENTS,args:[e.id]},cursors:null===(w=null===(T=F.data)||void 0===T?void 0:T.pagination)||void 0===w?void 0:w.cursors,buttonVariant:"outline-dark",className:"py-2 float-end",prevHack:!0})):a.createElement(fe.p,null)}},99998:(e,t,n)=>{n.d(t,{R:()=>s});var a=n(16714),r=n(22902),o=n(37802);function s(){var e=(0,o.r)(null),t=e.hasShareFlowV2,n=e.hasClassrooms,s=e.isLoadingSettings,i=(0,r.T)(),l=i.hasPermissions,c=i.isLoaded;return{experience:n?l(a.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:s||!c}}}}]);
2
- //# sourceMappingURL=4177-2d876c7b14-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4177],{28469:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481).T.encloseNamespace("rostering.alert");function o(e){var t="classroom"===e.type?r("classroom"):r("hasRostering");return a.createElement("div",{className:"alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap"},t," ")}},299:(e,t,n)=>{n.d(t,{X:()=>s});var a=n(32735),r=n(69217),o=n(94631),s=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.idField,s=void 0===n?"id":n,i=t.persistNamespace,l=t.initialState?t.initialState:new Map,c=a.useRef(l),d=(0,r.N)(),u=(0,o.D)(e),m=(0,o.D)(i);function g(){c.current.clear(),d()}function p(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[s].toString()),c.current.get(e)}function f(){return!!(null==e?void 0:e.length)&&e.every(p)}function v(e){e.forEach(function(e){c.current.set(e,!0)}),d()}return a.useEffect(function(){t.initialState||i&&m===i||(null==u?void 0:u.map(function(e){return e[s]}).join())!==(null==e?void 0:e.map(function(e){return e[s]}).join())&&g()},[u,m,e,t.initialState]),a.useEffect(function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&v(t.preselectedIds)},[]),{onToggleBulk:function(){var t=!f();e.forEach(function(e){t?c.current.set(e[s].toString(),!0):c.current.delete(e[s].toString())}),d()},onToggleItem:function(e){var t=!c.current.get(e.toString());t?c.current.set(e.toString(),t):c.current.delete(e.toString()),d()},getSelected:function(){return Array.from(c.current.keys())},isChecked:p,bulkChecked:f(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach(function(e){c.current.delete(e[s].toString())}),d())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find(function(e){return p(e)})},setSelected:v,getSelectedCount:function(){return c.current.size},reset:g,getMap:function(){return c.current}}}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(56644);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}},35115:(e,t,n)=>{n.d(t,{p:()=>d});var a=n(32735),r=n(49935),o=n(95278);const s="pJf6R",i="MSvzY",l="IFmvc",c="pOcvk";var d=a.memo(function(){return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"mb-1 partial-loading-background ".concat("YrP_G")}),a.createElement("div",{className:"pb-3"},a.createElement(r.b2,{numItems:2})),a.createElement("div",{className:"pb-2"},a.createElement(o.Z,null)),a.createElement("div",{className:"d-flex align-items-center py-2"},a.createElement("div",{className:"mx-4 partial-loading-background ".concat(s)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),a.createElement("div",{className:"me-auto partial-loading-background ".concat(i)}),a.createElement("div",{className:"partial-loading-background ".concat("j62jt")})),a.createElement("ul",{className:"striped-list list-unstyled"},Array(20).fill(null).map(function(e,t){return a.createElement("li",{key:t},a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement("div",{className:"me-2 partial-loading-background ".concat(s)}),a.createElement("div",{className:"me-2 partial-loading-background ".concat("droqZ")}),a.createElement("div",{className:"w-25"},a.createElement("div",{className:"partial-loading-background ".concat("gorcb")})),a.createElement("div",{className:"me-auto d-flex"},Math.random()>.5?a.createElement(a.Fragment,null,a.createElement("div",{className:"partial-loading-background rounded-pill me-1 ".concat(l," ").concat("SdQ90")}),a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(c)})):a.createElement("div",{className:"partial-loading-background rounded-pill ".concat(l," ").concat(c)})),a.createElement("div",{className:"me-2 partial-loading-background ".concat(i)}),a.createElement("div",{className:"partial-loading-background ".concat("S7p4K")})))})))})},79232:(e,t,n)=>{n.r(t),n.d(t,{ClassroomStudentsView:()=>Ne});var a=n(32735),r=n(70680),o=n(23481),s=n(20354),i=n(75896),l=n(49985),c=n(65858),d=n(37395),u=n(28469),m=n(16714),g=n(76881),p=n(39151),f=n(31949),v=n(22902),S=n(79612),E=n(37802),h=n(14070),y=n(97291),b=n(97958),k=n(83345),C=n(35223),N=n(99742),O="classrooms.classroomsEmptyState";function T(e){return a.createElement(k.D.Provider,{value:O},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"noStudentsHeading"})),a.createElement(b.u.Info,{className:"w-33 ".concat(e.canManageUsers?"":"mb-0")},a.createElement(k.x,{phrase:"noStudentsInfo"})),e.canManageUsers&&!e.isRostering&&a.createElement(b.u.Cta,{text:o.T.getPhrase(O,"noStudentsCta"),appLink:{application:y.O.USER_MANAGER,action:h.e.UserManager.STUDENTS}}),!e.canManageUsers&&!e.isRostering&&a.createElement(b.u.Info,null,a.createElement(k.x,{phrase:"askAdmin"})),e.isRostering&&a.createElement("a",{className:"btn btn-link info-link font-semibold",href:"",target:"_blank"},o.T.getPhrase(O,"rosteringCta"))))}var w="classrooms.manageClassroomStudentsEmptyState",x=o.T.encloseNamespace(w),I="https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf",U="";function A(){return a.createElement(k.D.Provider,{value:w},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"emptyStateHeading"})),a.createElement(b.u.Info,{className:"mb-2"},a.createElement(k.x,{phrase:"emptyStateInfo"})),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:U,target:"_blank"},x("rosteringCta"))))}function M(e){return e.schoolHasNoStudents?a.createElement(T,{canManageUsers:e.canManageUsers}):a.createElement(k.D.Provider,{value:w},a.createElement(b.u,null,a.createElement(b.u.Image,{src:N.W.EmptyStates.Classrooms.STUDENTS}),a.createElement(b.u.Heading,null,a.createElement(k.x,{phrase:"emptyStateHeading"})),a.createElement(b.u.Info,null,a.createElement(k.x,{phrase:"emptyStateInfo"})),a.createElement(b.u.Cta,{text:o.T.getPhrase(w,"addStudents"),icon:C.vn.Plus,appLink:{application:y.O.CLASSROOMS,action:h.e.Classrooms.ADD_STUDENTS_CHOICES,args:[e.classroom.id]}}),a.createElement("a",{className:"btn btn-link info-link font-semibold",href:I,target:"_blank"},e.classroomIdeasText)))}var R=n(81886),j=n(11607),G=n(89965),F=n(91693),P=n(83914),L=n(36532),D=n(86764),B=n(69883),H=n(299),_=n(3747),V=n(23999),Z=n(15611),W=n(36511);const X={maxWidth:"A0VzW"};function q(e){var t;return e.group?a.createElement("div",{className:"classroom-pill ".concat(X.maxWidth," text-white text-truncate bg-").concat((0,W.I)(null===(t=e.group.metadata)||void 0===t?void 0:t.colour))},a.createElement("p",{className:"text-truncate mb-0",title:e.group.name},e.group.name)):a.createElement(a.Fragment,null)}function Y(e){return e.count?a.createElement(j.L,{onClick:e.onClick,className:"classroom-pill bg-white border border-dark"},"+",e.count):a.createElement(a.Fragment,null)}var $="classrooms.classroomGroupDropdown",z=function(e,t){return{application:y.O.CLASSROOMS,action:h.e.Classrooms.NEW_GROUP,args:[e],params:{addStudents:t.map(function(e){return e.id})}}};function Q(e){var t,n=(0,H.X)(e.groups,{preselectedIds:e.preselections.map(function(e){return e.id})}),r=n.onToggleItem,s=n.isChecked,i=e.groups.reduce(function(t,n){return t[n.id]=function(e,t){var n=new Set(t.users.data.map(function(e){return e.id.toString()}));return e.every(function(e){return n.has(e.id.toString())})}(e.selectedStudents,n),t},{});a.useEffect(function(){e.groups.forEach(function(e){var t=i[e.id];(!t||s(e.id))&&(t||!s(e.id))||r(e.id)})},[Object.entries(i).sort(function(e,t){return e[0].localeCompare(t[0])}).join(",")]);var d={align:e.alignRight?"end":"start"};return e.disabled&&(d.show=!1),a.createElement(V.Z,Object.assign({},d),a.createElement(V.Z.Toggle,{as:"div",id:e.id,className:"".concat(e.disabled?"text-light":"cursor-pointer"," ").concat("me-2 d-inline-block svg-container sm"," no-caret")},a.createElement(P.x,{svgName:C.vn.Group,title:e.disabled?e.disabledTooltips:o.T.getPhrase($,"addToGroupTooltip"),tooltipPlacement:"top",tooltipSpanHack:!0,tooltipSpanHackClassName:""})),a.createElement(V.Z.Menu,null,!!(null===(t=e.groups)||void 0===t?void 0:t.length)&&a.createElement("div",{className:"px-2 border-bottom mb-1"},a.createElement("p",{className:"mb-0"},a.createElement(k.x,{namespace:$,phrase:"addToGroup"})),a.createElement("ul",{className:"list-unstyled pe-3"},e.groups.map(function(t){var n=function(e,t){var n=new Set(t.users.data.map(function(e){return e.id.toString()}));return e.every(function(e){return!n.has(e.id.toString())})}(e.selectedStudents,t),o=!!e.isBulk&&!i[t.id]&&!n;return a.createElement("li",{key:t.id,className:"d-flex align-items-center bg-white my-1"},a.createElement(G.X,{id:"".concat(e.id,":").concat(t.id),checked:s(t.id),onChange:function(){return function(t){var n=!s(t.id);e.onSelectGroup(t,n),r(t.id)}(t)},indeterminate:o}),a.createElement(q,{group:t}))}))),a.createElement(Z.F,{onClick:function(){e.disabled||l.k.logUserAction({classroom:{id:e.classroom.id,name:e.classroom.name}},l.k.mergeOptions(e.analyticsOptions,{actionType:c.Vw.Create,workflowPhase:c.eu.Start,entity:c.py.ClassroomGroup}))},appLink:z(e.classroom.id,e.selectedStudents),className:e.disabled?"disabled":"text-nowrap d-flex align-items-center px-2"},a.createElement(P.x,{svgName:C.vn.Plus}),a.createElement(k.x,{namespace:$,phrase:"createNew"}))))}Q.defaultProps={preselections:[]};var J=n(91967),K=n(83657),ee=n(97408),te=n(10038),ne=n(64818);const ae={avatarContainer:"rfVnC",name:"RYLWZ"};function re(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,s,i=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(e,t)||oe(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 oe(e,t){if(e){if("string"==typeof e)return se(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)?se(e,t):void 0}}function se(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}var ie=o.T.encloseNamespace("classrooms.manageClassroomStudentItem"),le=function(e){return{application:y.O.USER_MANAGER,action:h.e.UserManager.EDIT_USER,args:[e],params:{userType:g.Y.Learner}}},ce=function(e,t){return{application:y.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_STUDENTS,args:[t],params:{studentIds:[e]}}};function de(e){var t,n=re(a.useState(!1),2),r=n[0],o=n[1],s=re(a.useState(!1),2),i=s[0],d=s[1],u=re(a.useState({}),2),g=u[0],p=u[1],f=a.useRef(null),S=a.useRef(null),E=a.useRef(e.selectedGroups),h=(0,v.T)().hasPermissions;a.useEffect(function(){E.current=e.selectedGroups,k(),i||o(!0)},[e.selectedGroups.length]);var y,b=J.q.throttle(function(){k(),o(!0)},300);function k(){p(E.current.reduce(function(e,t){return e[t.id]=!0,e},{}))}return(0,te.H)(function(){i||b()}),a.useEffect(function(){if(f.current&&S.current&&r){var e=f.current.firstElementChild;if(e){var t,n,a=e.getBoundingClientRect().y,s={},i=function(e){var t="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!t){if(Array.isArray(e)||(t=oe(e))){t&&(e=t);var n=0,a=function(){};return{s:a,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,o=!0,s=!1;return{s:function(){t=t.call(e)},n:function(){var e=t.next();return o=e.done,e},e:function(e){s=!0,r=e},f:function(){try{o||null==t.return||t.return()}finally{if(s)throw r}}}}(f.current.children);try{for(i.s();!(n=i.n()).done;){var l=n.value;l.id&&(s[l.id]=l.getBoundingClientRect().y===a,t=s[l.id]?l.id:t)}}catch(e){i.e(e)}finally{i.f()}S.current.getBoundingClientRect().y!==a&&(s[t]=!1),p(s),o(!1)}}},[r]),a.createElement("div",{className:"d-flex align-items-center py-1 px-4"},a.createElement(G.X,{id:e.student.id,checked:e.checked,onChange:e.onToggleCheckbox,className:"me-2",disabled:e.readOnly}),a.createElement("div",{className:"".concat(ae.avatarContainer," flex-shrink-0 me-2")},a.createElement(ee.q,{imageCdnUrl:e.config.imageCdnUrl,initials:ne.l.getInitials(e.student.name,e.student.surname),imageUrl:null===(t=e.student.avatar)||void 0===t?void 0:t.url})),a.createElement("p",{className:"me-2 ".concat(ae.name," text-truncate mb-0 text-nowrap")},e.student.name," ",e.student.surname),a.createElement("div",{className:"".concat(r?"invisible":""," me-auto d-flex flex-wrap mt-n1"),ref:f},e.selectedGroups.map(function(e){return g[e.id]?a.createElement("div",{key:e.id,className:"me-1 mt-1",id:e.id},a.createElement(q,{group:e})):a.createElement(a.Fragment,{key:e.id})}),a.createElement("div",{ref:S,className:"me-1 mt-1"},a.createElement(Y,{count:Object.keys(g).reduce(function(e,t){return g[t]||e++,e},0),onClick:function(){d(!0),k()}}))),a.createElement(Q,{id:"add-group-".concat(e.student.id),classroom:e.classroom,groups:e.classroomGroups,selectedStudents:[e.student],preselections:e.selectedGroups,onSelectGroup:function(t,n){return e.onToggleGroup(e.student,t,n)},analyticsOptions:{location:c.LZ.ManageClassroomStudentListItem},alignRight:!0,disabled:e.readOnly,disabledTooltips:e.readOnlyTooltip}),a.createElement(K.e,{actions:(y=[],h(m.C.ManageUsers)&&y.push({label:ie("editStudent"),appLink:le(e.student.id),disabled:e.readOnly,className:e.readOnly?"disabled":"",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.student.id},{actionType:c.Vw.Edit,entity:c.py.User,workflowPhase:c.eu.Start,location:c.LZ.ManageClassroomStudentListItem})}}),y.push({label:ie("removeStudent"),appLink:ce(e.student.id,e.classroom.id),disabled:e.readOnly,className:e.readOnly?"disabled":"text-danger",tooltip:e.readOnly?e.readOnlyTooltip:"",onClick:function(){l.k.logUserAction({id:e.classroom.id,name:e.classroom.name,userId:e.student.id},{actionType:c.Vw.Dissociate,entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,location:c.LZ.ManageClassroomStudentListItem})}}),y),actionsDropdownClassName:"btn"}))}var ue=n(88630),me="classrooms.manageClassroomStudents",ge=o.T.encloseNamespace(me);function pe(e){var t,n=e.classroom,i=e.students,d=e.groups,u=(0,r.I0)(),m=(0,B.Z)(),g=(0,H.X)(i.data),p=g.getSelected().length,f=d.filter(function(e){var t,n;if(!(null===(n=null===(t=e.users)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length))return!1;var a=!0,r=0,o=g.getSelected();if(o.length){var s=function(){var t=o[r];e.users.data.find(function(e){return e.id.toString()===t.toString()})||(a=!1),r++};do{s()}while(r<o.length);return a}}),v=(0,_.a)(D.r.XLDown);if(!(null===(t=i.data)||void 0===t?void 0:t.length))return a.createElement(M,{classroom:e.classroom,classroomIdeasText:ge("classroomIdeasText"),schoolHasNoStudents:e.schoolHasNoStudents,canManageUsers:e.canManageUsers});var S=g.getSelected().map(function(t){return e.students.data.find(function(e){return e.id.toString()===t.toString()})}).filter(function(e){return!!e});return a.createElement(a.Fragment,null,a.createElement("div",{className:"d-flex align-items-center py-2 ".concat(v?"ps-2":"ps-4")},a.createElement(G.X,{id:"manage-classroom-students-bulk",onChange:g.onToggleBulk,checked:g.bulkChecked,className:"me-2",indeterminate:g.hasSomeSelections(),disabled:e.readOnly}),a.createElement(Q,{id:"bulk-add-group",classroom:n,selectedStudents:S,isBulk:!0,groups:d,onSelectGroup:function(t,a){var r=g.getSelected();e.onBulkSelectGroup(i.data.filter(function(e){return r.includes(e.id.toString())}),t,a);var o=a?ue.F.addStudentsToGroup:ue.F.removeStudentsFromGroup;s.a.fetch(u,o(r,t.id,n.id,function(){l.k.logUserAction({id:t.id,studentCount:r.length},{actionType:c.Vw.Associate,entity:c.py.ClassroomGroup,descriptor:c.iF.User,workflowPhase:c.eu.Complete,location:c.LZ.ManageClassroomStudents}),m.success(ge("addSuccess",{groupName:t.name,escapeText:!0}))},function(){m.error(ge("addError",{groupName:t.name,escapeText:!0}))}))},disabled:!p||e.readOnly,preselections:f,analyticsOptions:{location:c.LZ.ManageClassroomStudents},disabledTooltips:e.readOnly&&o.T.getPhrase(me,"disabledByRostering")}),a.createElement(j.L,{className:"me-auto ".concat(!p||e.readOnly?"text-light cursor-default":""),onClick:function(){if(p&&!e.readOnly){var t=g.getSelected();l.k.logUserAction({id:n.id,studentCount:t.length},{entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,actionType:c.Vw.Dissociate,location:c.LZ.ManageClassroomStudents}),R.Q.C$.trigger({application:y.O.CLASSROOMS,action:h.e.Classrooms.REMOVE_STUDENTS,args:[n.id],params:{studentIds:t}})}}},a.createElement(L.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(me,"disabledByRostering"):""},a.createElement(P.x,{svgName:C.vn.Delete,title:o.T.getPhrase(me,"delete"),tooltipPlacement:"top",tooltipSpanHack:!0}))),a.createElement(L.u,{spanHack:!0,title:e.readOnly?o.T.getPhrase(me,"disabledByRostering"):""},a.createElement(F.h,{onClick:function(){l.k.logUserAction({id:n.id},{entity:c.py.Classroom,descriptor:c.iF.User,workflowPhase:c.eu.Start,actionType:c.Vw.Associate,location:c.LZ.ManageClassroomStudents}),R.Q.C$.trigger({application:y.O.CLASSROOMS,action:h.e.Classrooms.ADD_STUDENTS_CHOICES,args:[n.id]})},svgName:C.vn.Plus,className:"btn btn-outline-dark",disabled:e.readOnly},a.createElement(k.x,{namespace:me,phrase:"addStudent"})))),a.createElement("ul",{className:"striped-list list-unstyled"},i.data.map(function(t){return a.createElement("li",{key:t.id},a.createElement(de,{classroom:n,student:t,classroomGroups:e.groups,config:e.config,selectedGroups:e.groups.filter(function(e){return e.users.data.find(function(e){return e.id===t.id})}),checked:g.isChecked(t.id),onToggleCheckbox:function(){return g.onToggleItem(t.id)},onToggleGroup:e.onToggleGroup,readOnly:e.readOnly,readOnlyTooltip:e.readOnly?ge("disabledByRostering"):""}))})))}var fe=n(35115),ve=n(31491),Se=n(22602),Ee=n(47288);function he(e){return function(e){if(Array.isArray(e))return be(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ye(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 ye(e,t){if(e){if("string"==typeof e)return be(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)?be(e,t):void 0}}function be(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}var ke=o.T.encloseNamespace("classrooms.classroomStudents"),Ce={entity:c.py.ClassroomGroup,descriptor:c.iF.User,workflowPhase:c.eu.Complete,location:c.LZ.ManageClassroomStudentListItem};function Ne(e){var t,n,o,b,k,C,N,O,T,w,x,I,U=(0,E.r)(null).hasShareFlowV2,R=s.a.useBasicFetch(f.N.currentUser()),j=s.a.useBasicFetch(R.data&&ue.F.getClassroom(e.id,R.data.id)),G=s.a.useBasicFetch(ue.F.getClassroomStudents(e.id,e.cursor)),F=s.a.useBasicFetch(R.data&&Ee.N.getUsers(R.data.customerId,g.Y.Learner)),P=s.a.useBasicFetch(ue.F.getClassroomGroups(e.id)),L=s.a.useBasicFetch(p.L.config()),D=(x=a.useState(null===(t=P.data)||void 0===t?void 0:t.data),I=2,function(e){if(Array.isArray(e))return e}(x)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,s,i=[],l=!0,c=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(i.push(a.value),i.length!==t);l=!0);}catch(e){c=!0,r=e}finally{try{if(!l&&null!=n.return&&(s=n.return(),Object(s)!==s))return}finally{if(c)throw r}}return i}}(x,I)||ye(x,I)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),B=D[0],H=D[1];a.useEffect(function(){P.hasCompleted&&!P.isFetching&&H(P.data.data)},[P.hasCompleted,P.isFetching]);var _=null===(o=null===(n=j.data)||void 0===n?void 0:n._integrations)||void 0===o?void 0:o.rostered,V=(0,r.I0)(),Z=(0,v.T)().hasPermissions;function W(t,n,a){var r={id:n.id,studentCount:1},o=he(B);o=a?o.map(function(e){return e.id===n.id?Object.assign(Object.assign({},e),{users:Object.assign(Object.assign({},e.users),{data:i.m.uniq([].concat(he(e.users.data),[t]),"id")})}):e}):o.map(function(e){return e.id===n.id?Object.assign(Object.assign({},e),{users:Object.assign(Object.assign({},e.users),{data:e.users.data.filter(function(e){return e.id!==t.id})})}):e}),H(o);var d=a?ue.F.addStudentsToGroup([t.id],n.id,e.id,function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:c.Vw.Associate}))}):ue.F.removeStudentsFromGroup([t.id],n.id,e.id,function(){l.k.logUserAction(r,Object.assign(Object.assign({},Ce),{actionType:c.Vw.Dissociate}))});s.a.fetch(V,d)}function X(e,t,n){var a=he(B);a=n?a.map(function(n){return n.id!==t.id?n:Object.assign(Object.assign({},n),{users:Object.assign(Object.assign({},n.users),{data:i.m.uniq([].concat(he(n.users.data),he(e)),"id")})})}):a.map(function(n){return n.id!==t.id?n:Object.assign(Object.assign({},n),{users:Object.assign(Object.assign({},n.users),{data:n.users.data.filter(function(t){return!e.some(function(e){return e.id===t.id})})})})}),H(a)}return(0,S.M)({title:ke("pageTitle",{classroomName:null===(b=j.data)||void 0===b?void 0:b.name})}),(0,ve._)(j),j.data&&(null===(k=G.data)||void 0===k?void 0:k.data)&&(null===(C=P.data)||void 0===C?void 0:C.data)&&L.data&&F.data&&B?a.createElement(Se.R,{classroom:j.data,currentUser:R.data,onTogglePin:function(e,t,n){if(!_){var a=e?ue.F.pinClassroom:ue.F.unpinClassroom;s.a.fetch(V,a(j.data,t,n))}},activeTab:"students",isRostered:_,hasShareFlowV2:U},function(){var e,t,n,r,o,s,i,l,c,d;return _?a.createElement(a.Fragment,null,a.createElement(u.P,{type:"classroom"}),(null===(t=null===(e=G.data)||void 0===e?void 0:e.data)||void 0===t?void 0:t.length)?a.createElement(pe,{classroom:j.data,students:G.data,groups:B,onToggleGroup:W,onBulkSelectGroup:X,config:L.data,schoolHasNoStudents:!(null===(r=null===(n=F.data)||void 0===n?void 0:n.data)||void 0===r?void 0:r.length),canManageUsers:Z(m.C.ManageUsers),readOnly:!0}):a.createElement(A,null)):(null===(s=null===(o=G.data)||void 0===o?void 0:o.data)||void 0===s?void 0:s.length)?a.createElement(pe,{classroom:j.data,students:G.data,groups:B,onToggleGroup:W,onBulkSelectGroup:X,config:L.data,schoolHasNoStudents:!(null===(l=null===(i=F.data)||void 0===i?void 0:i.data)||void 0===l?void 0:l.length),canManageUsers:Z(m.C.ManageUsers)}):a.createElement(M,{classroom:j.data,classroomIdeasText:ke("classroomIdeasText"),schoolHasNoStudents:!(null===(d=null===(c=F.data)||void 0===c?void 0:c.data)||void 0===d?void 0:d.length),canManageUsers:Z(m.C.ManageUsers)})}(),!!(null===(O=null===(N=G.data)||void 0===N?void 0:N.pagination)||void 0===O?void 0:O.cursors)&&a.createElement(d.t,{appLink:{application:y.O.CLASSROOMS,action:h.e.Classrooms.CLASSROOM_STUDENTS,args:[e.id]},cursors:null===(w=null===(T=G.data)||void 0===T?void 0:T.pagination)||void 0===w?void 0:w.cursors,buttonVariant:"outline-dark",className:"py-2 float-end",prevHack:!0})):a.createElement(fe.p,null)}},99998:(e,t,n)=>{n.d(t,{R:()=>s});var a=n(16714),r=n(22902),o=n(37802);function s(){var e=(0,o.r)(null),t=e.hasShareFlowV2,n=e.hasClassrooms,s=e.isLoadingSettings,i=(0,r.T)(),l=i.hasPermissions,c=i.isLoaded,d=i.getGatedPermission;return{experience:n?"soft-gate"===d(a.C.ViewClassrooms)?"minimal":l(a.C.ViewClassrooms)?"full":t?"minimal":void 0:"none",loading:s||!c}}}}]);
2
+ //# sourceMappingURL=4177-285ddf9ae3-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4177-285ddf9ae3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/partial-manage-classroom-students.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/full-classrooms-experience/empty-state/ClassroomsNoStudentsState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/classroom-group-pill.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/ClassroomGroupPill.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/manage-classroom-student-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/ManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-students/ClassroomStudentsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\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","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"YrP_G\",\"avatar\":\"droqZ\",\"checkbox\":\"pJf6R\",\"actionIcon\":\"MSvzY\",\"addStudents\":\"j62jt\",\"studentName\":\"gorcb\",\"group\":\"IFmvc\",\"sm\":\"pOcvk\",\"lg\":\"SdQ90\",\"moreActions\":\"S7p4K\"};","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-classroom-students.scss';\n\nexport const PartialManageClassroomStudents = React.memo(function(): 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='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`mx-4 partial-loading-background ${styles.checkbox}`} />\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new students button */}\n <div className={`partial-loading-background ${styles.addStudents}`} />\n </div>\n\n {/* Students list */}\n <ul className='striped-list list-unstyled'>\n {Array(20).fill(null).map((student, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Student name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.studentName}`} />\n </div>\n\n {/* Groups list. Randomly renders either 1 or 2 groups. Group widths are randomly generated */}\n <div className='me-auto d-flex'>\n {Math.random() > 0.5\n ? (\n <>\n <div className={`partial-loading-background rounded-pill me-1 ${styles.group} ${styles.lg}`} />\n <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n </>\n ) : <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n }\n </div>\n\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* More actions */}\n <div className={`partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\n );\n});","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\ninterface ClassroomsNoStudentsStateProps {\n canManageUsers: boolean;\n isRostering?: boolean;\n}\n\nexport function ClassroomsNoStudentsState(props: ClassroomsNoStudentsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='noStudentsHeading' /></EmptyState.Heading>\n <EmptyState.Info className={`w-33 ${!props.canManageUsers ? 'mb-0' : ''}`}>\n <Text phrase='noStudentsInfo' />\n </EmptyState.Info>\n\n {props.canManageUsers && !props.isRostering && (\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'noStudentsCta')}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STUDENTS\n }}\n />\n )}\n {!props.canManageUsers && !props.isRostering && (\n <EmptyState.Info><Text phrase='askAdmin' /></EmptyState.Info>\n )}\n {props.isRostering && (\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","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 { Classroom } from 'libs/shared/interfaces';\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\nimport { ClassroomsNoStudentsState } from 'apps/classrooms/views/full-classrooms-experience/empty-state/ClassroomsNoStudentsState';\n\nconst namespace = 'classrooms.manageClassroomStudentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STUDENT_ENGAGEMENT_IDEAS_LINK = 'https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf';\nconst ROSTERING_KB_ARTICLE_URL = '';\n\ninterface ManageClassroomStudentsEmptyStateProps {\n classroom: Classroom;\n classroomIdeasText: string;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n}\n\nexport function RosteredClassroomStudentsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2' ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n <a className='btn btn-link info-link font-semibold' href={ROSTERING_KB_ARTICLE_URL} target='_blank'>\n {getPhrase('rosteringCta')}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomStudentsEmptyState(props: ManageClassroomStudentsEmptyStateProps): JSX.Element {\n if (props.schoolHasNoStudents)\n return <ClassroomsNoStudentsState canManageUsers={props.canManageUsers} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='emptyStateInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addStudents')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [props.classroom.id]\n }}\n />\n\n <a className='btn btn-link info-link font-semibold' href={STUDENT_ENGAGEMENT_IDEAS_LINK} target='_blank'>\n {props.classroomIdeasText}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"maxWidth\":\"A0VzW\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\n\nimport styles from './classroom-group-pill.scss';\n\ninterface ClassroomGroupProps {\n group: ClassroomGroup;\n}\n\nexport function ClassroomGroupPill(props: ClassroomGroupProps): JSX.Element {\n if (!props.group)\n return <></>;\n\n return (\n <div className={`classroom-pill ${styles.maxWidth} text-white text-truncate bg-${mapColourToBsVariant(props.group.metadata?.colour)}`}>\n <p className='text-truncate mb-0' title={props.group.name}>{props.group.name}</p>\n </div>\n );\n}\n\ninterface ClassroomGroupExpanderProps {\n count: number;\n onClick: () => void;\n}\n\nexport function ClassroomGroupExpander(props: ClassroomGroupExpanderProps): JSX.Element {\n if (!props.count)\n return <></>;\n\n return (\n <DivButton onClick={props.onClick} className={`classroom-pill bg-white border border-dark`}>\n +{props.count}\n </DivButton>\n );\n}","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { PropsWithAnalyticsOptions, User } from 'libs/shared/interfaces';\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 { ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nconst namespace = 'classrooms.classroomGroupDropdown';\n\nconst getNewGroupAppLink = (id: string, students: User[]) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id],\n params: {\n addStudents: students.map(s => s.id)\n }\n});\n\nfunction checkStudentsAllInGroup(students: User[], group: ClassroomGroup) {\n const groupUserIds = new Set(group.users.data.map(u => u.id.toString()));\n return students.every(student => groupUserIds.has(student.id.toString()));\n}\n\nfunction checkStudentsNotInGroup(students: User[], group: ClassroomGroup) {\n const groupUserIds = new Set(group.users.data.map(u => u.id.toString()));\n return students.every(student => !groupUserIds.has(student.id.toString()));\n}\n\ntype ClassroomGroupDropdownProps = PropsWithAnalyticsOptions<{\n id: string;\n classroom: Classroom;\n selectedStudents: User[];\n groups: ClassroomGroup[];\n onSelectGroup: (group: ClassroomGroup, toggleOn?: boolean) => void;\n preselections?: ClassroomGroup[];\n isBulk?: boolean;\n\n alignRight?: boolean;\n disabled?: boolean;\n disabledTooltips?: string;\n}>;\n\nClassroomGroupDropdown.defaultProps = {\n preselections: []\n};\n\nexport function ClassroomGroupDropdown(props: ClassroomGroupDropdownProps): JSX.Element {\n const { onToggleItem, isChecked } = useBulkCheckboxManager(props.groups, {\n preselectedIds: props.preselections.map(s => s.id)\n });\n\n const studentsAllInGroupLookup = props.groups.reduce((acc, group) => {\n acc[group.id] = checkStudentsAllInGroup(props.selectedStudents, group);\n return acc;\n }, {} as Record<string, boolean>);\n\n function onChange(group: ClassroomGroup): void {\n const shouldAdd = !isChecked(group.id);\n props.onSelectGroup(group, shouldAdd);\n\n onToggleItem(group.id);\n }\n\n function onClickCreateNewGroup(): void {\n if (props.disabled)\n return;\n\n AnalyticsHelper.logUserAction({\n classroom: { id: props.classroom.id, name: props.classroom.name }\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup\n }));\n }\n\n React.useEffect(() => {\n // On each passthrough, validate that the checkbox states are valid\n // This is needed because the group/student state is managed in 2 separate places on the same page\n props.groups.forEach(g => {\n const totalCheckedForGroup = studentsAllInGroupLookup[g.id];\n // Validate if unchecked checkbox should be checked\n if (!!totalCheckedForGroup && !isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n\n // Validate if checked checkbox should be unchecked\n if (!totalCheckedForGroup && isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n });\n }, [\n Object.entries(studentsAllInGroupLookup).sort((a, b) => a[0].localeCompare(b[0])).join(',')\n ]);\n\n const buttonClasses = 'me-2 d-inline-block svg-container sm';\n\n const dropdownProps: HashObject = {\n align: props.alignRight ? 'end' : 'start'\n };\n\n /**\n * This prop is applied like this so that when `props.disabled` it false, the prop is omitted altogether.\n * This is because we want `react-bootstrap` to control the open state, and if we used the `show` prop\n * at all times we'd be preventing that.\n */\n if (props.disabled)\n dropdownProps.show = false;\n\n return (\n <Dropdown {...dropdownProps}>\n <Dropdown.Toggle\n as='div'\n id={props.id}\n className={`${props.disabled ? 'text-light' : 'cursor-pointer'} ${buttonClasses} no-caret`}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Group}\n title={props.disabled ? props.disabledTooltips : LanguageService.getPhrase(namespace, 'addToGroupTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n tooltipSpanHackClassName=''\n />\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {!!props.groups?.length && (\n <div className='px-2 border-bottom mb-1'>\n <p className='mb-0'><Text namespace={namespace} phrase='addToGroup' /></p>\n <ul className='list-unstyled pe-3'>\n {props.groups.map(group => {\n const isEmptyChecked = checkStudentsNotInGroup(props.selectedStudents, group);\n const isIndeterminate = !props.isBulk\n ? false\n : !studentsAllInGroupLookup[group.id] && !isEmptyChecked;\n\n return (\n <li key={group.id} className='d-flex align-items-center bg-white my-1'>\n <Checkbox\n id={`${props.id}:${group.id}`}\n checked={isChecked(group.id)}\n onChange={() => onChange(group)}\n indeterminate={isIndeterminate }\n />\n <ClassroomGroupPill group={group} />\n </li>\n );\n })}\n </ul>\n </div>\n )}\n <AppLink\n onClick={onClickCreateNewGroup}\n appLink={getNewGroupAppLink(props.classroom.id, props.selectedStudents)}\n className={props.disabled ? 'disabled' : 'text-nowrap d-flex align-items-center px-2'}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} />\n <Text namespace={namespace} phrase='createNew' />\n </AppLink>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"rfVnC\",\"name\":\"RYLWZ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { ClassroomGroup, Config } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ClassroomGroupExpander, ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nimport styles from './manage-classroom-student-item.scss';\n\ntype GroupVisibilityMapping = { [id: string]: boolean };\n\nconst namespace = 'classrooms.manageClassroomStudentItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getEditStudentAppLink = (id: string) => ({\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.EDIT_USER,\n args: [id],\n params: { userType: UserGroup.Learner }\n});\n\nconst getRemoveStudentsAppLink = (studentId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroomId],\n params: {\n studentIds: [studentId]\n }\n});\n\ninterface ManageClassroomStudentItemProps {\n classroom: Classroom;\n student: User;\n classroomGroups: ClassroomGroup[];\n selectedGroups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onToggleCheckbox: () => void;\n checked: boolean;\n readOnly?: boolean;\n readOnlyTooltip?: string;\n}\n\nexport function ManageClassroomStudentItem(props: ManageClassroomStudentItemProps): JSX.Element {\n const [ isComputingTruncation, setIsComputingTruncation ] = React.useState(false);\n const [ hasExpandedGroups, setHasExpandedGroups ] = React.useState(false);\n\n // Maps a group to it's visibility state.\n const [ groupVisibilityMapping, setGroupVisibilityMapping ] = React.useState<GroupVisibilityMapping>({});\n\n const groupListRef = React.useRef<HTMLDivElement>(null);\n const expanderRef = React.useRef<HTMLDivElement>(null);\n const selectedGroupsRef = React.useRef<ClassroomGroup[]>(props.selectedGroups);\n\n const { hasPermissions } = usePermissions();\n\n // Every time the selected groups array changes, we want to re-compute which groups should be truncated\n React.useEffect(() => {\n selectedGroupsRef.current = props.selectedGroups;\n renderAllGroups();\n\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n setIsComputingTruncation(true);\n }, [props.selectedGroups.length]);\n\n function onResize(): void {\n renderAllGroups();\n setIsComputingTruncation(true);\n }\n\n const throttledResizeListener = FunctionHelper.throttle(onResize, 300);\n\n useResizeListener(() => {\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n throttledResizeListener();\n });\n\n /**\n * This iterates through each group element, and detects if any of them don't\n * fit on the first row of items. The elements that don't will be hidden.\n */\n React.useEffect(() => {\n if (!groupListRef.current || !expanderRef.current || !isComputingTruncation)\n return;\n\n const firstGroupPill = groupListRef.current.firstElementChild as HTMLDivElement;\n if (!firstGroupPill) return;\n\n const topRowHeight = firstGroupPill.getBoundingClientRect().y;\n\n const nextGroupVisibilityMapping: { [id: string]: boolean } = {};\n\n /**\n * Here we're checking if the y-coordinate of any groups\n * don't match the y-coordinate of the first group (which should\n * always be on the first row). This way we know if they should be\n * hidden or not.\n */\n let lastVisibleId: string;\n for (const child of groupListRef.current.children) {\n if (child.id) {\n nextGroupVisibilityMapping[child.id] = child.getBoundingClientRect().y === topRowHeight;\n lastVisibleId = nextGroupVisibilityMapping[child.id] ? child.id : lastVisibleId;\n }\n }\n\n // If the expander button has also wrapped, we hide the last element that we were going to make visible.\n if (expanderRef.current.getBoundingClientRect().y !== topRowHeight)\n nextGroupVisibilityMapping[lastVisibleId] = false;\n\n setGroupVisibilityMapping(nextGroupVisibilityMapping);\n setIsComputingTruncation(false);\n }, [isComputingTruncation]);\n\n function onClickShowAllGroups(): void {\n setHasExpandedGroups(true);\n renderAllGroups();\n }\n\n // Updates the group visibility mapping to display all groups\n function renderAllGroups(): void {\n setGroupVisibilityMapping(selectedGroupsRef.current.reduce((acc, group) => {\n acc[group.id] = true;\n return acc;\n }, {} as GroupVisibilityMapping));\n }\n\n // Returns the number of groups that are invisible\n function getInvisibleGroupCount(): number {\n return Object.keys(groupVisibilityMapping).reduce((count, groupId) => {\n if (!groupVisibilityMapping[groupId])\n count++;\n \n return count;\n }, 0);\n }\n\n function getActions(): ActionOptions[] {\n const actions: ActionOptions[] = [];\n\n if (hasPermissions(PermissionName.ManageUsers))\n actions.push({\n label: getPhrase('editStudent'),\n appLink: getEditStudentAppLink(props.student.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : '',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.student.id }, {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n actions.push({\n label: getPhrase('removeStudent'),\n appLink: getRemoveStudentsAppLink(props.student.id, props.classroom.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : 'text-danger',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n name: props.classroom.name,\n userId: props.student.id\n }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n <Checkbox\n id={props.student.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n\n <div className={`${styles.avatarContainer} flex-shrink-0 me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.student.name, props.student.surname)}\n imageUrl={props.student.avatar?.url}\n />\n </div>\n\n <p className={`me-2 ${styles.name} text-truncate mb-0 text-nowrap`}>{props.student.name} {props.student.surname}</p>\n\n <div\n // When we are computing the truncation, we want all group elements to be rendered but invisible.\n className={`${isComputingTruncation ? 'invisible' : ''} me-auto d-flex flex-wrap mt-n1`}\n ref={groupListRef}\n >\n {props.selectedGroups.map(group => {\n if (!groupVisibilityMapping[group.id]) // Don't render any groups that are marked as hidden\n return <React.Fragment key={group.id}></React.Fragment>;\n\n return (\n <div key={group.id} className='me-1 mt-1' id={group.id}>\n <ClassroomGroupPill group={group} />\n </div>\n );\n })}\n <div ref={expanderRef} className='me-1 mt-1'>\n <ClassroomGroupExpander count={getInvisibleGroupCount()} onClick={onClickShowAllGroups} />\n </div>\n </div>\n\n <ClassroomGroupDropdown\n id={`add-group-${props.student.id}`}\n classroom={props.classroom}\n groups={props.classroomGroups}\n selectedStudents={[props.student]}\n preselections={props.selectedGroups}\n onSelectGroup={(group, toggleOn) => props.onToggleGroup(props.student, group, toggleOn)}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudentListItem }}\n alignRight\n disabled={props.readOnly}\n disabledTooltips={props.readOnlyTooltip}\n />\n\n <MoreActions\n actions={getActions()}\n actionsDropdownClassName='btn'\n />\n </div>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config } from 'libs/shared/interfaces';\nimport { ClassroomGroup, User, UserCollection } 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 { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ManageClassroomStudentItem } from 'apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nimport { ManageClassroomStudentsEmptyState } from './empty-state/ManageClassroomStudentsEmptyState';\n\nconst namespace = 'classrooms.manageClassroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ManageClassroomStudentsProps {\n classroom: Classroom;\n students: UserCollection;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n groups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onBulkSelectGroup: (students: User[], group: ClassroomGroup, shouldAdd: boolean) => void;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomStudents(props: ManageClassroomStudentsProps): JSX.Element {\n const { classroom, students, groups } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const CheckboxHelper = useBulkCheckboxManager(students.data);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n const bulkPreselections = groups.filter(group => {\n if (!group.users?.data?.length)\n return false;\n\n let allStudentsFound = true;\n let index = 0;\n\n const studentIds = CheckboxHelper.getSelected();\n\n if (!studentIds.length)\n return;\n\n do {\n const id = studentIds[index];\n if (!group.users.data.find((stu: any) => stu.id.toString() === id.toString()))\n allStudentsFound = false;\n\n index++;\n } while (index < studentIds.length);\n\n return allStudentsFound;\n });\n\n function onClickAddStudents(): void {\n AnalyticsHelper.logUserAction({ id: classroom.id }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [classroom.id]\n });\n }\n\n function onClickBulkRemoveStudents(): void {\n if (!selectionCount || props.readOnly)\n return;\n\n const studentIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: classroom.id,\n studentCount: studentIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroom.id],\n params: {\n studentIds\n }\n });\n }\n\n function onSelectGroup(group: ClassroomGroup, shouldAdd: boolean): void {\n const selectedStudentIds = CheckboxHelper.getSelected();\n // optimistically update the UI on bulk add/remove\n props.onBulkSelectGroup(students.data.filter(s => selectedStudentIds.includes(s.id.toString())), group, shouldAdd);\n\n const request = shouldAdd ? ClassroomRequests.addStudentsToGroup : ClassroomRequests.removeStudentsFromGroup;\n\n Flight.fetch(\n dispatch,\n request(selectedStudentIds, group.id, classroom.id, () => {\n AnalyticsHelper.logUserAction({\n id: group.id,\n studentCount: selectedStudentIds.length\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudents\n });\n\n alerts.success(getPhrase('addSuccess', { groupName: group.name, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('addError', { groupName: group.name, escapeText: true }));\n })\n );\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!students.data?.length) {\n return (\n <ManageClassroomStudentsEmptyState\n classroom={props.classroom}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={props.schoolHasNoStudents}\n canManageUsers={props.canManageUsers}\n />\n );\n }\n\n const selectedStudents = CheckboxHelper\n .getSelected()\n .map(id => {\n return props.students.data.find(s => s.id.toString() === id.toString());\n })\n .filter(s => !!s);\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n <Checkbox\n id='manage-classroom-students-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <ClassroomGroupDropdown\n id='bulk-add-group'\n classroom={classroom}\n selectedStudents={selectedStudents}\n isBulk\n groups={groups}\n onSelectGroup={onSelectGroup}\n disabled={!selectionCount || props.readOnly}\n preselections={bulkPreselections}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudents }}\n disabledTooltips={props.readOnly && LanguageService.getPhrase(namespace, 'disabledByRostering')}\n />\n <DivButton\n className={`me-auto ${!selectionCount || props.readOnly ? 'text-light cursor-default' : ''}`}\n onClick={onClickBulkRemoveStudents}\n >\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </Tooltip>\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n onClick={onClickAddStudents}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark'\n disabled={props.readOnly}\n >\n <Text namespace={namespace} phrase='addStudent' />\n </IconButton>\n </Tooltip>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {students.data.map(student => (\n <li key={student.id}>\n <ManageClassroomStudentItem\n classroom={classroom}\n student={student}\n classroomGroups={props.groups}\n config={props.config}\n selectedGroups={props.groups.filter(g => g.users.data.find(u => u.id === student.id))}\n checked={CheckboxHelper.isChecked(student.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(student.id)}\n onToggleGroup={props.onToggleGroup}\n readOnly={props.readOnly}\n readOnlyTooltip={props.readOnly ? getPhrase('disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\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';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, ClassroomGroup, ClassroomGroupCollection, Config, CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ManageClassroomStudentsEmptyState, RosteredClassroomStudentsEmptyState } from 'apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState';\nimport { ManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/ManageClassroomStudents';\nimport { PartialManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'classrooms.classroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseAnalyticsOptions = {\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudentListItem\n};\n\ninterface ClassroomStudentsViewProps {\n id: string;\n cursor: string;\n}\n\nexport function ClassroomStudentsView(props: ClassroomStudentsViewProps): 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, props.cursor));\n const allStudents = Flight.useBasicFetch<UserCollection>(currentUser.data &&\n UserManagerRequests.getUsers(currentUser.data.customerId, UserGroup.Learner));\n const groups = Flight.useBasicFetch<ClassroomGroupCollection>(ClassroomRequests.getClassroomGroups(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n // Maintain a localGroups to optimistically update the UI\n const [ localGroups, setLocalGroups ] = React.useState<ClassroomGroup[]>(groups.data?.data);\n React.useEffect(() => {\n if (groups.hasCompleted && !groups.isFetching)\n setLocalGroups(groups.data.data);\n }, [ groups.hasCompleted, groups.isFetching ]);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n const dispatch = useDispatch();\n const { hasPermissions } = usePermissions();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n function onToggleGroup(student: User, group: ClassroomGroup, toggleOn: boolean): void {\n const analyticsData = {\n id: group.id,\n studentCount: 1\n };\n\n // optimistically update the UI\n let updatedGroups = [...localGroups];\n if (!toggleOn) {\n updatedGroups = updatedGroups.map(g => {\n if (g.id === group.id) {\n return {\n ...g,\n users: {\n ...g.users,\n data: g.users.data.filter(s => s.id !== student.id)\n }\n };\n }\n return g;\n });\n } else {\n updatedGroups = updatedGroups.map(g => {\n if (g.id === group.id) {\n return {\n ...g,\n users: {\n ...g.users,\n data: ArrayHelper.uniq([ ...g.users.data, student ], 'id')\n }\n };\n }\n return g;\n });\n }\n setLocalGroups(updatedGroups);\n\n // send the request\n const request = toggleOn\n ? ClassroomRequests.addStudentsToGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Associate\n });\n })\n : ClassroomRequests.removeStudentsFromGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate\n });\n });\n\n Flight.fetch(dispatch, request);\n }\n // optimistically update the UI on bulk add/remove\n function onBulkSelectGroup(students: User[], group: ClassroomGroup, shouldAdd: boolean): void {\n let updatedGroups = [...localGroups];\n if (!shouldAdd) {\n updatedGroups = updatedGroups.map(g => {\n if (g.id !== group.id) {\n return g;\n }\n\n return {\n ...g,\n users: {\n ...g.users,\n data: g.users.data.filter(s => !students.some(stu => stu.id === s.id))\n }\n };\n });\n } else {\n updatedGroups = updatedGroups.map(g => {\n if (g.id !== group.id) {\n return g;\n }\n return {\n ...g,\n users: {\n ...g.users,\n data: ArrayHelper.uniq([ ...g.users.data, ...students ], 'id')\n }\n };\n });\n }\n setLocalGroups(updatedGroups);\n }\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 if (\n !classroom.data\n || !students.data?.data\n || !groups.data?.data\n || !config.data\n || !allStudents.data\n || !localGroups\n )\n return <PartialManageClassroomStudents />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='students'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {(() => {\n if (isRostered)\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!students.data?.data?.length ? (\n <RosteredClassroomStudentsEmptyState />\n ) : (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={localGroups}\n onToggleGroup={onToggleGroup}\n onBulkSelectGroup={onBulkSelectGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n readOnly\n />\n )}\n </>\n );\n\n if (students.data?.data?.length) {\n return (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={localGroups}\n onToggleGroup={onToggleGroup}\n onBulkSelectGroup={onBulkSelectGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n }\n\n return (\n <ManageClassroomStudentsEmptyState\n classroom={classroom.data}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n })()}\n\n {!!students.data?.pagination?.cursors && (\n <Pagination\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.id]\n }}\n cursors={students.data?.pagination?.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n prevHack\n />\n )}\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, getGatedPermission } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (getGatedPermission(PermissionName.ViewClassrooms) === 'soft-gate')\n return 'minimal';\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":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","mapColourToBsVariant","groupColour","PartialManageClassroomStudents","numItems","PartialPillTabSelector","fill","student","key","Math","random","namespace","ClassroomsNoStudentsState","value","EmptyState","src","ImageUrls","Text","phrase","canManageUsers","isRostering","LanguageService","appLink","application","action","href","target","STUDENT_ENGAGEMENT_IDEAS_LINK","ROSTERING_KB_ARTICLE_URL","RosteredClassroomStudentsEmptyState","ManageClassroomStudentsEmptyState","schoolHasNoStudents","icon","args","classroom","classroomIdeasText","ClassroomGroupPill","group","metadata","colour","title","name","ClassroomGroupExpander","count","DivButton","onClick","getNewGroupAppLink","students","params","addStudents","s","ClassroomGroupDropdown","groups","preselections","studentsAllInGroupLookup","reduce","acc","groupUserIds","Set","users","data","u","has","checkStudentsAllInGroup","selectedStudents","g","totalCheckedForGroup","Object","entries","sort","a","b","localeCompare","dropdownProps","align","alignRight","disabled","show","Dropdown","as","SvgContainer","svgName","disabledTooltips","tooltipPlacement","tooltipSpanHack","tooltipSpanHackClassName","isEmptyChecked","checkStudentsNotInGroup","isIndeterminate","isBulk","Checkbox","checked","onChange","shouldAdd","onSelectGroup","indeterminate","AppLink","AnalyticsHelper","analyticsOptions","actionType","workflowPhase","entity","defaultProps","getEditStudentAppLink","userType","UserGroup","getRemoveStudentsAppLink","studentId","classroomId","studentIds","ManageClassroomStudentItem","isComputingTruncation","setIsComputingTruncation","hasExpandedGroups","setHasExpandedGroups","groupVisibilityMapping","setGroupVisibilityMapping","groupListRef","expanderRef","selectedGroupsRef","selectedGroups","hasPermissions","usePermissions","renderAllGroups","actions","throttledResizeListener","FunctionHelper","firstGroupPill","firstElementChild","lastVisibleId","topRowHeight","getBoundingClientRect","y","nextGroupVisibilityMapping","children","child","onToggleCheckbox","readOnly","Avatar","imageCdnUrl","config","initials","UserHelper","surname","imageUrl","avatar","url","ref","groupId","classroomGroups","toggleOn","onToggleGroup","location","readOnlyTooltip","PermissionName","push","label","tooltip","userId","descriptor","actionsDropdownClassName","ManageClassroomStudents","dispatch","alerts","CheckboxHelper","selectionCount","bulkPreselections","filter","allStudentsFound","index","stu","edgeToEdge","selectedStudentIds","onBulkSelectGroup","includes","request","ClassroomRequests","studentCount","success","groupName","escapeText","error","Tooltip","spanHack","IconButton","baseAnalyticsOptions","ClassroomStudentsView","hasShareFlowV2","useSettings","currentUser","UserRequests","cursor","allStudents","UserManagerRequests","customerId","ConfigRequests","localGroups","setLocalGroups","hasCompleted","isFetching","isRostered","_integrations","rostered","analyticsData","updatedGroups","ArrayHelper","some","useSetPageMetadata","classroomName","useHandleClassroomErrors","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","activeTab","pagination","cursors","Pagination","buttonVariant","prevHack","useClassroomExperience","hasClassrooms","isLoadingSettings","isLoaded","getGatedPermission","experience","loading"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4578],{1619:(e,t,n)=>{n.d(t,{e:()=>g});var a=n(32735),r=n(23481),s=n(31453),i=n(12528),l=n(83914),o=n(35223),c=n(33518),u=n(2510);function m(e){return m="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},m(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=r.T.encloseNamespace("sharev2.shareAvatar"),v=d(d(d(d(d({},u.y.Open,o.vn.Classrooms),u.y.Link,o.vn.Link),u.y.Classroom,o.vn.Classrooms),u.y.Live,o.vn.Play),u.y.LegacyDirect,o.vn.Share),h=d(d(d(d(d({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"purple"),u.y.Live,"purple"),u.y.LegacyDirect,"indigo"),y=d(d(d(d(d({},u.y.Open,"openShareType"),u.y.Link,"linkShareType"),u.y.Classroom,"classroomShareType"),u.y.Live,"liveShareType"),u.y.LegacyDirect,"legacyDirectShareType");function g(e){var t,n,r=function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText,r=e.openClassroomName;if(t===u.y.Open&&r)return r;if(t===u.y.Classroom&&n)return n;var s=p(y[t]);return a&&(s+=" "+a),s}(e);return a.createElement("div",{className:(0,s.A)("d-flex align-items-center gap-2",e.className)},a.createElement("div",null,a.createElement(i.f,{svgName:v[e.type],variant:h[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:(0,s.A)("m-0",e.titleClassName),title:r},r),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,i=void 0===s?0:s;switch(t){case u.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(i,r);case u.y.Open:return p("openShareTypeSubTitle");case u.y.Link:return function(e){return[c.e.JustMySchool,c.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===c.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===c.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===c.e.Public?p("anyoneWithLinkSubTitle"):e===c.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case u.y.Live:return p("liveShareTypeSubTitle");case u.y.LegacyDirect:return p("legacyDirectTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},33518:(e,t,n)=>{var a;n.d(t,{e:()=>a}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(a||(a={}))},2267:(e,t,n)=>{n.d(t,{I:()=>c});var a=n(20354),r=n(64249),s=n(4594),i=n(5112),l=n(60011),o=n(40841),c={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return o._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,a,r,s,i,l;return{preventScrubbing:null!==(r=null!==(a=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==a?a:null==t?void 0:t.preventScrubbing)&&void 0!==r&&r,immediateFeedback:null!==(l=null!==(i=null===(s=null==e?void 0:e.options)||void 0===s?void 0:s.immediateFeedback)&&void 0!==i?i:null==t?void 0:t.immediateFeedback)&&void 0!==l&&l}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case s.E.Video:return"video";case s.E.Playlist:return"playlist";case s.E.Subject:return"subject";case s.E.Series:return"series";case s.E.Interactive:return"interactive";case s.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return a.a.useBasicFetch(i.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return a.a.useBasicFetch(l.J.seriesWithThumbnailAndCount(e))}}return r.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return r.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return r.I.getAnalyticsOptions(e)}}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>l});var a=n(23481),r=n(41661),s=n(65728),i=a.T.encloseNamespace("shared.shared-utils"),l={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:i("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:i("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},83351:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481),s=n(13876),i=n(36532),l=r.T.encloseNamespace("assign.flowControls");function o(e){var t=e.hideBackButton||!e.onClickBack,n=e.hideNextButton||!e.onClickNext,r=e.hideCreateClassroomButton||!e.onClickCreateClassroom;return t&&n&&r?a.createElement(a.Fragment,null):a.createElement(s.u,{className:"justify-content-between"},a.createElement("div",null,!!e.leftComponent&&e.leftComponent,!r&&a.createElement(s.u.Submit,{variant:"link",onClick:e.onClickCreateClassroom,text:l("createClassroom"),className:"text-info p-0"})),a.createElement("div",{className:"d-flex"},!t&&a.createElement(s.u.Cancel,{variant:"link",onClick:e.onClickBack,text:e.backButtonText||l("back")}),!n&&a.createElement(i.u,{title:e.nextButtonTooltip,disable:!e.nextButtonTooltip,placement:"top",spanHack:!0},a.createElement(s.u.Submit,{variant:"dark",onClick:e.onClickNext,text:e.nextButtonText||l("next"),disabled:e.disableNextButton,showSpinner:e.showSpinner}))))}},35690:(e,t,n)=>{n.d(t,{QD:()=>A,Qv:()=>N,__:()=>k});var a=n(32735),r=n(68050),s=n(69111),i=n(42648),l=n(82602),o=n(31453),c=n(1619),u=n(83345),m=n(4594),d="sharev2.shareViewCount";function p(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement(u.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var v=n(2510),h=n(83914),y=n(35223);function g(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(h.x,{svgName:y.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===v.y.Open)return"".concat(t);if(e.share.type===v.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var f=n(21789),E=n(15611),b=n(91693);const S={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var C="assign.previousAssignments";function x(e){return a.createElement("div",{className:(0,o.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(u.x,{namespace:C,phrase:"heading",options:{count:e.count}})),a.createElement(b.h,{svgName:e.show?y.vn.ChevronUp:y.vn.ChevronDown,onClick:e.onToggle}))}function k(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(u.D.Provider,{value:C},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"dateCreated"}))))}function T(e){var t,n,i=f.x.getClassroomForShare(e.share,e.classrooms),m=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(E.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==m?void 0:m.data,analyticsOptions:null==m?void 0:m.options,className:(0,o.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",S.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==i?void 0:i.name,svgSize:h.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,o.A)(S.shareAvatar),titleClassName:(0,o.A)("text-truncate",S.shareAvatarTitle),hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(p,{share:e.share})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(g,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,l.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,o.A)("cursor-pointer text-info hover-text-underline",S.visibleOnHover)},a.createElement(u.x,{namespace:C,phrase:"view"})))))}function N(e){var t;return a.createElement("div",{className:(0,o.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(i.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return a.createElement(T,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,o.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function A(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,o.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(x,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(k,null),a.createElement(N,Object.assign({},e))))}},95890:(e,t,n)=>{n.d(t,{_:()=>d});var a=n(20354),r=n(2267),s=n(4594),i=n(16714),l=n(39151),o=n(20768),c=n(31949),u=n(22902),m=n(45778);function d(e){var t,n=a.a.useBasicFetch(c.N.currentUser()),d=r.I.getFetchFunctionByType(e.entityType)(e.objectId,null===(t=n.data)||void 0===t?void 0:t.id),p=a.a.useBasicFetch(l.L.config()),v=a.a.useBasicFetch(m.G.isType(d.data,s.E.Interactive)&&d.data.interactiveId&&o.b.interactive(d.data.interactiveId)),h=(0,u.T)(),y=h.hasPermissions,g=h.isLoaded,f=y(i.C.StudentExperience),E=y(i.C.CreateClassrooms);return{loaded:!!(n.data&&d.data&&p.data&&g),currentUser:n,entity:d,interactive:v,config:p,hasStudentExp:f,canCreateClassrooms:E}}},24578:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>R});var a=n(32735),r=n(23481),s=n(20354),i=n(75896),l=n(110),o=n(18488),c=n(21789),u=n(9111),m=n(83914),d=n(83345),p=n(16714),v=n(22902),h=n(37802),y=n(70227),g=n(80783),f=n(35223),E=n(14070),b=n(97291),S=n(86099),C=n(83351),x=n(35690),k=n(95890),T=n(40254),N=n(88630),A=n(23923),w=n(97958),I=n(99742),L="assign.sharesAndAssignmentsEmptyState",P=r.T.encloseNamespace(L);function B(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:L})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:L})),!e.hideAssignButton&&a.createElement(a.Fragment,null,a.createElement(w.u.Cta,{icon:f.vn.Classrooms,text:P("ctaAssign"),appLink:e.assignAppLink}),a.createElement(w.u.Cta,{className:"text-dark hover-text-underline mt-3 fw-medium",text:P("ctaShareLink"),appLink:e.shareLinkAppLink})),e.hideAssignButton&&a.createElement(w.u.Cta,{icon:f.vn.Link,text:P("ctaShare"),appLink:e.shareLinkAppLink}))}var F="assign.sharesEmptyState",j=r.T.encloseNamespace(F);function O(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:F})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:F})),a.createElement(w.u.Cta,{icon:f.vn.Link,text:j("cta"),appLink:e.appLink}))}var D="assign.showAssignmentsView",M=r.T.encloseNamespace(D),_=400;function H(e,t){if(e&&t)return l.O.isSame(e.dateCreated,t.dateCreated)?0:l.O.isAfter(e.dateCreated,t.dateCreated)?1:-1}function U(e){return a.createElement("a",{href:e.href,target:"_blank",className:"btn btn-link text-info"},a.createElement("span",{className:"pe-1"},a.createElement(d.x,{phrase:"openInSchoolAnalytics",namespace:D})),a.createElement(m.x,{svgName:f.vn.NewWindow,size:m.S.Small}))}function Z(e){return"assign-and-shares"===e.type?a.createElement(B,{assignAppLink:e.assignAppLink,shareLinkAppLink:e.shareAppLink,hideAssignButton:e.hideAssignButton}):a.createElement(O,{appLink:e.shareAppLink})}function R(e){var t,n,r,l=(0,k._)({objectId:e.objectId,entityType:e.entityType}),m=(0,v.T)().hasPermissions,d=(0,h.r)(null).hasShareFlowV2,f=(0,A.B)(),w=s.a.useBasicFetch(o.o.getSharesByObjectId(e.objectId)),I=(null===(t=w.data)||void 0===t?void 0:t.sort(H))||[],L=i.m.uniq(I.map(c.x.getClassroomIdFromShare).filter(function(e){return!!e})),P=s.a.useBasicFetch(w.hasCompleted&&N.F.getClassroomsByIds(L,null===(n=l.currentUser.data)||void 0===n?void 0:n.customerId)),B=y.c.getObjectUrl(null===(r=l.config.data)||void 0===r?void 0:r.analyticsWebUrl,l.entity.data,d),F=m(p.C.ViewAnalyticsProduct)&&m(p.C.ViewCustomerAnalytics),j=d&&f?"shares":"assign-and-shares",O=l.loaded&&!!w.data&&!!P.data;return a.createElement(u.G,{size:"lg",title:M("title"),showLoadingSpinner:!O,closePopup:e.closePopup},!I.length&&a.createElement(Z,{assignAppLink:T.W.flowSelector({entityType:e.entityType,objectId:e.objectId}),shareAppLink:{application:b.O.SHARE,action:E.e.Share.SHARE,args:[e.objectId],params:{entityType:e.entityType}},type:j,hideAssignButton:g.z.hideAssignButtonOnVideoActions(l.currentUser.data)}),!!I.length&&a.createElement(a.Fragment,null,a.createElement(x.__,null),a.createElement(x.Qv,{assignments:I.reverse(),classrooms:P.data,getItemAppLink:function(e){var t=(0,S.pY)(e);if(t)return t},scrollHeightMax:_})),a.createElement(C.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:M("close"),leftComponent:!!B&&F&&a.createElement(U,{href:B})}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},i=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function o(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};i("en_US",function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),i("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
- //# sourceMappingURL=4578-27028d26eb-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4578],{1619:(e,t,n)=>{n.d(t,{e:()=>y});var a=n(32735),r=n(23481),s=n(31453),i=n(12528),l=n(83914),o=n(35223),c=n(33518),u=n(2510);function m(e){return m="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},m(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=r.T.encloseNamespace("sharev2.shareAvatar"),v=d(d(d(d(d({},u.y.Open,o.vn.Classrooms),u.y.Link,o.vn.Link),u.y.Classroom,o.vn.Classrooms),u.y.Live,o.vn.Play),u.y.LegacyDirect,o.vn.Share),h=d(d(d(d(d({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"purple"),u.y.Live,"purple"),u.y.LegacyDirect,"indigo"),g=d(d(d(d(d({},u.y.Open,"openShareType"),u.y.Link,"linkShareType"),u.y.Classroom,"classroomShareType"),u.y.Live,"liveShareType"),u.y.LegacyDirect,"legacyDirectShareType");function y(e){var t,n,r=function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText,r=e.openClassroomName;if(t===u.y.Open&&r)return r;if(t===u.y.Classroom&&n)return n;var s=p(g[t]);return a&&(s+=" "+a),s}(e);return a.createElement("div",{className:(0,s.A)("d-flex align-items-center gap-2",e.className)},a.createElement("div",null,a.createElement(i.f,{svgName:v[e.type],variant:h[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:(0,s.A)("m-0",e.titleClassName),title:r},r),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,i=void 0===s?0:s;switch(t){case u.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(i,r);case u.y.Open:return p("openShareTypeSubTitle");case u.y.Link:return function(e){return[c.e.JustMySchool,c.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===c.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===c.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===c.e.Public?p("anyoneWithLinkSubTitle"):e===c.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case u.y.Live:return p("liveShareTypeSubTitle");case u.y.LegacyDirect:return p("legacyDirectTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},33518:(e,t,n)=>{var a;n.d(t,{e:()=>a}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(a||(a={}))},2267:(e,t,n)=>{n.d(t,{I:()=>c});var a=n(20354),r=n(64249),s=n(4594),i=n(5112),l=n(60011),o=n(40841),c={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return o._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,a,r,s,i,l;return{preventScrubbing:null!==(r=null!==(a=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==a?a:null==t?void 0:t.preventScrubbing)&&void 0!==r&&r,immediateFeedback:null!==(l=null!==(i=null===(s=null==e?void 0:e.options)||void 0===s?void 0:s.immediateFeedback)&&void 0!==i?i:null==t?void 0:t.immediateFeedback)&&void 0!==l&&l}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case s.E.Video:return"video";case s.E.Playlist:return"playlist";case s.E.Subject:return"subject";case s.E.Series:return"series";case s.E.Interactive:return"interactive";case s.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return a.a.useBasicFetch(i.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return a.a.useBasicFetch(l.J.seriesWithThumbnailAndCount(e))}}return r.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return r.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return r.I.getAnalyticsOptions(e)}}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>l});var a=n(23481),r=n(41661),s=n(65728),i=a.T.encloseNamespace("shared.shared-utils"),l={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:i("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:i("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},83351:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481),s=n(13876),i=n(36532),l=r.T.encloseNamespace("assign.flowControls");function o(e){var t=e.hideBackButton||!e.onClickBack,n=e.hideNextButton||!e.onClickNext,r=e.hideCreateClassroomButton||!e.onClickCreateClassroom;return t&&n&&r?a.createElement(a.Fragment,null):a.createElement(s.u,{className:"justify-content-between"},a.createElement("div",null,!!e.leftComponent&&e.leftComponent,!r&&a.createElement(s.u.Submit,{variant:"link",onClick:e.onClickCreateClassroom,text:l("createClassroom"),className:"text-info p-0"})),a.createElement("div",{className:"d-flex"},!t&&a.createElement(s.u.Cancel,{variant:"link",onClick:e.onClickBack,text:e.backButtonText||l("back")}),!n&&a.createElement(i.u,{title:e.nextButtonTooltip,disable:!e.nextButtonTooltip,placement:"top",spanHack:!0},a.createElement(s.u.Submit,{variant:"dark",onClick:e.onClickNext,text:e.nextButtonText||l("next"),disabled:e.disableNextButton,showSpinner:e.showSpinner}))))}},35690:(e,t,n)=>{n.d(t,{QD:()=>A,Qv:()=>N,__:()=>k});var a=n(32735),r=n(68050),s=n(69111),i=n(42648),l=n(82602),o=n(31453),c=n(1619),u=n(83345),m=n(4594),d="sharev2.shareViewCount";function p(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement(u.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var v=n(2510),h=n(83914),g=n(35223);function y(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(h.x,{svgName:g.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===v.y.Open)return"".concat(t);if(e.share.type===v.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var f=n(21789),E=n(15611),b=n(91693);const S={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var C="assign.previousAssignments";function x(e){return a.createElement("div",{className:(0,o.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(u.x,{namespace:C,phrase:"heading",options:{count:e.count}})),a.createElement(b.h,{svgName:e.show?g.vn.ChevronUp:g.vn.ChevronDown,onClick:e.onToggle}))}function k(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(u.D.Provider,{value:C},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"dateCreated"}))))}function T(e){var t,n,i=f.x.getClassroomForShare(e.share,e.classrooms),m=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(E.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==m?void 0:m.data,analyticsOptions:null==m?void 0:m.options,className:(0,o.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",S.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==i?void 0:i.name,svgSize:h.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,o.A)(S.shareAvatar),titleClassName:(0,o.A)("text-truncate",S.shareAvatarTitle),hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(p,{share:e.share})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(y,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,l.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,o.A)("cursor-pointer text-info hover-text-underline",S.visibleOnHover)},a.createElement(u.x,{namespace:C,phrase:"view"})))))}function N(e){var t;return a.createElement("div",{className:(0,o.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(i.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return a.createElement(T,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,o.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function A(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,o.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(x,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(k,null),a.createElement(N,Object.assign({},e))))}},95890:(e,t,n)=>{n.d(t,{_:()=>d});var a=n(20354),r=n(2267),s=n(4594),i=n(16714),l=n(39151),o=n(20768),c=n(31949),u=n(22902),m=n(45778);function d(e){var t,n=a.a.useBasicFetch(c.N.currentUser()),d=r.I.getFetchFunctionByType(e.entityType)(e.objectId,null===(t=n.data)||void 0===t?void 0:t.id),p=a.a.useBasicFetch(l.L.config()),v=a.a.useBasicFetch(m.G.isType(d.data,s.E.Interactive)&&d.data.interactiveId&&o.b.interactive(d.data.interactiveId)),h=(0,u.T)(),g=h.hasPermissions,y=h.getGatedPermission,f=h.isLoaded,E=g(i.C.StudentExperience),b=g(i.C.CreateClassrooms),S=y(i.C.ShareToOpenClassrooms);return{loaded:!!(n.data&&d.data&&p.data&&f),currentUser:n,entity:d,interactive:v,config:p,hasStudentExp:E,canCreateClassrooms:b,openClassroomGatedPermission:S}}},24578:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>R});var a=n(32735),r=n(23481),s=n(20354),i=n(75896),l=n(110),o=n(18488),c=n(21789),u=n(9111),m=n(83914),d=n(83345),p=n(16714),v=n(22902),h=n(37802),g=n(70227),y=n(80783),f=n(35223),E=n(14070),b=n(97291),S=n(86099),C=n(83351),x=n(35690),k=n(95890),T=n(40254),N=n(88630),A=n(23923),w=n(97958),I=n(99742),L="assign.sharesAndAssignmentsEmptyState",P=r.T.encloseNamespace(L);function B(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:L})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:L})),!e.hideAssignButton&&a.createElement(a.Fragment,null,a.createElement(w.u.Cta,{icon:f.vn.Classrooms,text:P("ctaAssign"),appLink:e.assignAppLink}),a.createElement(w.u.Cta,{className:"text-dark hover-text-underline mt-3 fw-medium",text:P("ctaShareLink"),appLink:e.shareLinkAppLink})),e.hideAssignButton&&a.createElement(w.u.Cta,{icon:f.vn.Link,text:P("ctaShare"),appLink:e.shareLinkAppLink}))}var F="assign.sharesEmptyState",O=r.T.encloseNamespace(F);function j(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:F})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:F})),a.createElement(w.u.Cta,{icon:f.vn.Link,text:O("cta"),appLink:e.appLink}))}var D="assign.showAssignmentsView",M=r.T.encloseNamespace(D),_=400;function H(e,t){if(e&&t)return l.O.isSame(e.dateCreated,t.dateCreated)?0:l.O.isAfter(e.dateCreated,t.dateCreated)?1:-1}function U(e){return a.createElement("a",{href:e.href,target:"_blank",className:"btn btn-link text-info"},a.createElement("span",{className:"pe-1"},a.createElement(d.x,{phrase:"openInSchoolAnalytics",namespace:D})),a.createElement(m.x,{svgName:f.vn.NewWindow,size:m.S.Small}))}function Z(e){return"assign-and-shares"===e.type?a.createElement(B,{assignAppLink:e.assignAppLink,shareLinkAppLink:e.shareAppLink,hideAssignButton:e.hideAssignButton}):a.createElement(j,{appLink:e.shareAppLink})}function R(e){var t,n,r,l=(0,k._)({objectId:e.objectId,entityType:e.entityType}),m=(0,v.T)().hasPermissions,d=(0,h.r)(null).hasShareFlowV2,f=(0,A.B)(),w=s.a.useBasicFetch(o.o.getSharesByObjectId(e.objectId)),I=(null===(t=w.data)||void 0===t?void 0:t.sort(H))||[],L=i.m.uniq(I.map(c.x.getClassroomIdFromShare).filter(function(e){return!!e})),P=s.a.useBasicFetch(w.hasCompleted&&N.F.getClassroomsByIds(L,null===(n=l.currentUser.data)||void 0===n?void 0:n.customerId)),B=g.c.getObjectUrl(null===(r=l.config.data)||void 0===r?void 0:r.analyticsWebUrl,l.entity.data,d),F=m(p.C.ViewAnalyticsProduct)&&m(p.C.ViewCustomerAnalytics),O=d&&f?"shares":"assign-and-shares",j=l.loaded&&!!w.data&&!!P.data;return a.createElement(u.G,{size:"lg",title:M("title"),showLoadingSpinner:!j,closePopup:e.closePopup},!I.length&&a.createElement(Z,{assignAppLink:T.W.flowSelector({entityType:e.entityType,objectId:e.objectId}),shareAppLink:{application:b.O.SHARE,action:E.e.Share.SHARE,args:[e.objectId],params:{entityType:e.entityType}},type:O,hideAssignButton:y.z.hideAssignButtonOnVideoActions(l.currentUser.data)}),!!I.length&&a.createElement(a.Fragment,null,a.createElement(x.__,null),a.createElement(x.Qv,{assignments:I.reverse(),classrooms:P.data,getItemAppLink:function(e){var t=(0,S.pY)(e);if(t)return t},scrollHeightMax:_})),a.createElement(C.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:M("close"),leftComponent:!!B&&F&&a.createElement(U,{href:B})}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},i=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function o(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};i("en_US",function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),i("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
+ //# sourceMappingURL=4578-7578bcf17a-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4578-7578bcf17a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/components/share-avatar/ShareAvatar.tsx","file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","file:///app/packages/projects/lite/src/apps/assign/components/flow-controls/FlowControls.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-view-count/ShareViewCount.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount.tsx","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/previous-assignments.scss","file:///app/packages/projects/lite/src/apps/assign/components/previous-assignments/PreviousAssignments.tsx","file:///app/packages/projects/lite/src/apps/assign/hooks/useAssignSharedData.ts","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/empty-states/shares-and-assignments-empty-state/SharesAndAssignmentsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/empty-states/shares-empty-state/SharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/assign/views/show-assignments-view/ShowAssignmentsView.tsx","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SharePrivacy } from '../../enums/SharePrivacy';\nimport { ShareType } from '../../enums/ShareType';\n\nconst namespace = 'sharev2.shareAvatar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst icons = {\n [ShareType.Open]: cvSvgLibrary.Classrooms,\n [ShareType.Link]: cvSvgLibrary.Link,\n [ShareType.Classroom]: cvSvgLibrary.Classrooms,\n [ShareType.Live]: cvSvgLibrary.Play,\n [ShareType.LegacyDirect]: cvSvgLibrary.Share\n};\n\nconst iconColours = {\n [ShareType.Open]: 'blue',\n [ShareType.Link]: 'black',\n [ShareType.Classroom]: 'purple',\n [ShareType.Live]: 'purple',\n [ShareType.LegacyDirect]: 'indigo'\n};\n\nconst shareTypeTitlePhraseMap = {\n [ShareType.Open]: 'openShareType',\n [ShareType.Link]: 'linkShareType',\n [ShareType.Classroom]: 'classroomShareType',\n [ShareType.Live]: 'liveShareType',\n [ShareType.LegacyDirect]: 'legacyDirectShareType'\n};\n\nfunction getTitle({ type, classroomName, additionalTitleText, openClassroomName }: ShareAvatarProps) {\n if (type === ShareType.Open && openClassroomName)\n return openClassroomName;\n \n if (type === ShareType.Classroom && classroomName)\n return classroomName;\n\n let title = getPhrase(shareTypeTitlePhraseMap[type]);\n\n if (additionalTitleText)\n title += ' ' + additionalTitleText;\n\n return title;\n}\n\nfunction getClassroomSubtitle(classroomGroupCount: number, studentCount: number): string {\n if (classroomGroupCount && studentCount)\n return `${getPhrase('classroomGroupCount', { smartCount: classroomGroupCount })}, ${getPhrase('studentSubTitle', { smartCount: studentCount })}`;\n\n if (classroomGroupCount)\n return getPhrase('groupSubTitle', { smartCount: classroomGroupCount });\n\n if (studentCount)\n return getPhrase('studentSubTitle', { smartCount: studentCount });\n\n return getPhrase('allStudentsSubTitle');\n}\n\nfunction getLinkSubtitle(privacy: SharePrivacy) {\n if ([ SharePrivacy.JustMySchool, SharePrivacy.Protected ].includes(privacy))\n return getPhrase('respectRatingsSubTitle');\n\n if (privacy === SharePrivacy.JustMySchoolOverrideRestriction)\n return getPhrase('anyoneInSchoolSubTitle');\n\n if (privacy === SharePrivacy.ProtectedOverrideRestriction)\n return getPhrase('anyoneSignedInSubTitle');\n\n if (privacy === SharePrivacy.Public)\n return getPhrase('anyoneWithLinkSubTitle');\n\n if (privacy === SharePrivacy.PinCode)\n return getPhrase('anyoneWithPinSubTitle');\n}\n\nfunction getSubtitle({ type, privacy, studentCount = 0, classroomGroupCount = 0 }: ShareAvatarProps) {\n switch (type) {\n case ShareType.Classroom:\n return getClassroomSubtitle(classroomGroupCount, studentCount);\n\n case ShareType.Open:\n return getPhrase('openShareTypeSubTitle');\n\n case ShareType.Link:\n return getLinkSubtitle(privacy);\n \n case ShareType.Live:\n return getPhrase('liveShareTypeSubTitle');\n\n case ShareType.LegacyDirect:\n return getPhrase('legacyDirectTypeSubTitle');\n\n default:\n return getPhrase('publicShareTypeSubTitle');\n }\n}\n\ninterface ShareAvatarProps {\n type: ShareType;\n privacy: SharePrivacy;\n studentCount?: number;\n classroomGroupCount?: number;\n classroomName?: string;\n openClassroomName?: string;\n hideSubtitle?: boolean;\n subtitleText?: string;\n svgSize?: SvgContainerSize;\n additionalTitleText?: string;\n className?: string;\n titleClassName?: string;\n showIconCircle?: boolean;\n}\n\nexport function ShareAvatar(props: ShareAvatarProps): JSX.Element {\n const title = getTitle(props);\n return (\n <div className={classNames('d-flex align-items-center gap-2', props.className)}>\n <div>\n <IconCircle\n svgName={icons[props.type]}\n variant={iconColours[props.type]}\n textVariant={'white'}\n svgWrapperClassName='p-1'\n svgSize={props.svgSize ?? SvgContainerSize.Standard}\n />\n </div>\n <div className='d-flex flex-column'>\n <p className={classNames('m-0', props.titleClassName)} title={title}>{title}</p>\n {!props.hideSubtitle && <span className='text-secondary'>{props.subtitleText ?? getSubtitle(props)}</span>}\n </div>\n </div>\n );\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n getSharableEntityType(share: Share): SharableEntityType {\n switch (share.objectTypeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Playlist:\n return 'playlist';\n case MasterType.Subject:\n return 'subject';\n case MasterType.Series:\n return 'series';\n case MasterType.Interactive:\n return 'interactive';\n case MasterType.Clip:\n return 'clip';\n }\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.playlistWithThumbnailAndCount(id));\n }\n\n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.seriesWithThumbnailAndCount(id));\n }\n }\n \n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'assign.flowControls';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FlowControlsProps {\n showSpinner?: boolean;\n hideNextButton?: boolean;\n hideBackButton?: boolean;\n disableNextButton?: boolean;\n disableBackButton?: boolean;\n backButtonText?: string;\n hideCreateClassroomButton?: boolean;\n nextButtonText?: string;\n nextButtonTooltip?: string;\n onClickNext?: () => void;\n onClickBack?: () => void;\n onClickCreateClassroom?: () => void;\n leftComponent?: JSX.Element;\n}\n\nexport function FlowControls(props: FlowControlsProps): JSX.Element {\n const hideBackButton = props.hideBackButton || !props.onClickBack;\n const hideNextButton = props.hideNextButton || !props.onClickNext;\n const hideCreateClassroomButton = props.hideCreateClassroomButton || !props.onClickCreateClassroom;\n \n if (hideBackButton && hideNextButton && hideCreateClassroomButton)\n return <></>;\n \n return (\n <PopupButtons className='justify-content-between'>\n <div>\n {!!props.leftComponent && props.leftComponent}\n {!hideCreateClassroomButton && (\n <PopupButtons.Submit variant='link' onClick={props.onClickCreateClassroom} text={getPhrase('createClassroom')} className='text-info p-0' />\n )}\n </div>\n <div className='d-flex'>\n {!hideBackButton && (\n <PopupButtons.Cancel variant='link' onClick={props.onClickBack} text={props.backButtonText || getPhrase('back')} />\n )}\n {!hideNextButton && (\n <Tooltip title={props.nextButtonTooltip} disable={!props.nextButtonTooltip} placement='top' spanHack>\n <PopupButtons.Submit\n variant='dark'\n onClick={props.onClickNext}\n text={props.nextButtonText || getPhrase('next')}\n disabled={props.disableNextButton}\n showSpinner={props.showSpinner}\n />\n </Tooltip>\n )}\n </div>\n </PopupButtons>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nconst namespace = 'sharev2.shareViewCount';\n\ninterface ShareViewCountProps {\n share: Share;\n}\n\nexport function ShareViewCount(props: ShareViewCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n \n if (isCollection)\n return <span>-</span>;\n\n return <Text namespace={namespace} phrase='viewCount' options={{ smartCount: props.share.viewCount || 0 }} />;\n}","import React from 'react';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface ShareViewedByCountProps {\n share: Share;\n}\n\nexport function ShareViewedByCount(props: ShareViewedByCountProps): JSX.Element {\n const isCollection = [ MasterType.Playlist, MasterType.Series ].includes(props.share.objectTypeId);\n\n if (isCollection)\n return <span>-</span>;\n \n function getViewCount(): string {\n const shareAccessCount = props.share.accessCount || 0;\n if (props.share.type === ShareType.Open)\n return `${shareAccessCount}`;\n\n if (props.share.type === ShareType.Classroom) {\n const totalRecipients = props.share.recipients.length;\n return `${shareAccessCount}/${totalRecipients}`;\n }\n\n return `${shareAccessCount}`;\n }\n \n return (\n <span className='d-inline-flex flex-row gap-2 align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.User} />\n <span>{getViewCount()}</span>\n </span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"shareListItem\":\"vLROV\",\"visibleOnHover\":\"o2KJH\",\"shareAvatar\":\"zDcMp\",\"shareAvatarTitle\":\"U8yMQ\"};","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\nimport Scrollbars from 'react-custom-scrollbars-2';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { ShareAvatar } from 'libs/shared/apps/share-v2/components/share-avatar/ShareAvatar';\nimport { ShareViewCount } from 'libs/shared/apps/share-v2/components/share-view-count/ShareViewCount';\nimport { ShareViewedByCount } from 'libs/shared/apps/share-v2/components/share-viewed-by-count/ShareViewedByCount';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './previous-assignments.scss';\n\nconst namespace = 'assign.previousAssignments';\n\ninterface PreviousAssignmentsHeaderProps {\n count: number;\n show: boolean;\n onToggle: () => void;\n}\n\nfunction PreviousAssignmentsHeader(props: PreviousAssignmentsHeaderProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-between', props.show && 'mb-3')}>\n <h3 className='h6 m-0 p-0'><Text namespace={namespace} phrase='heading' options={{ count: props.count }} /></h3>\n <IconButton\n svgName={props.show ? cvSvgLibrary.ChevronUp : cvSvgLibrary.ChevronDown}\n onClick={props.onToggle}\n />\n </div>\n );\n}\n\nexport function PreviousAssignmentsListHeader(): JSX.Element {\n const columnClassNames = 'd-flex align-items-end justify-content-start fw-medium';\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Row className='gx-2 px-3 mb-2'>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='assignedTo' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='views' />\n </Col>\n <Col xs={2} className={columnClassNames}>\n <Text phrase='viewedBy' />\n </Col>\n <Col xs={4} className={columnClassNames}>\n <Text phrase='dateCreated' />\n </Col>\n </Row>\n </LanguageNamespaceContext.Provider>\n );\n}\n\ntype ItemAnalytics = {\n data: HashObject;\n options: AnalyticsOptions;\n}\ninterface PreviousAssignmentListItemProps {\n share: Share;\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n\n getItemAnalytics?: (share: Share) => ItemAnalytics;\n className?: string;\n}\n\nfunction PreviousAssignmentListItem(props: PreviousAssignmentListItemProps): JSX.Element {\n const shareClassroom = ShareHelper.getClassroomForShare(props.share, props.classrooms);\n\n const analytics = props.getItemAnalytics?.(props.share);\n\n return (\n <AppLink\n key={props.share.shareId}\n appLink={props.getItemAppLink(props.share)}\n analyticsData={analytics?.data}\n analyticsOptions={analytics?.options}\n className={classNames('d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline', styles.shareListItem, props.className)}\n >\n <Row className='gx-2'>\n <Col xs={4} className='d-flex align-items-center'>\n <ShareAvatar\n type={props.share.type}\n privacy={props.share.privacy}\n classroomName={shareClassroom?.name}\n svgSize={SvgContainerSize.Small}\n openClassroomName={props.share.options?.openClassroomName}\n className={classNames(styles.shareAvatar)}\n titleClassName={classNames('text-truncate', styles.shareAvatarTitle)}\n hideSubtitle\n />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewCount share={props.share} />\n </Col>\n <Col xs={2} className='d-flex align-items-center justify-content-start'>\n <ShareViewedByCount share={props.share} />\n </Col>\n <Col xs={4} lg={3} className='d-flex align-items-center justify-content-start'>\n <span>{formatDate(props.share.dateCreated)}</span>\n </Col>\n <Col lg={1} className='align-items-center justify-content-end d-none d-lg-flex'>\n <span className={classNames('cursor-pointer text-info hover-text-underline', styles.visibleOnHover)}>\n <Text namespace={namespace} phrase='view' />\n </span>\n </Col>\n </Row>\n </AppLink>\n );\n}\n\ninterface PreviousAssignmentsListProps {\n assignments: Share[];\n classrooms: Classroom[];\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n scrollHeightMax?: number;\n}\n\nexport function PreviousAssignmentsList(props: PreviousAssignmentsListProps): JSX.Element {\n return (\n <div className={classNames(\n 'd-flex flex-column border-top rounded-top overflow-hidden'\n )}>\n <Scrollbars\n autoHeight\n autoHeightMin={0}\n autoHeightMax={props.scrollHeightMax ?? 215}\n autoHide\n >\n {props.assignments.map((share, idx) => (\n <PreviousAssignmentListItem\n share={share}\n classrooms={props.classrooms}\n getItemAppLink={props.getItemAppLink}\n getItemAnalytics={share => props.getItemAnalytics?.(share, idx)}\n className={classNames(idx % 2 === 0 && 'bg-gray-100')}\n key={share.shareId}\n />\n ))}\n </Scrollbars>\n </div>\n );\n}\n\ninterface PreviousAssignmentsProps {\n show: boolean;\n assignments: Share[];\n classrooms: Classroom[];\n onToggle: () => void;\n getItemAppLink: (share: Share) => Core.AppLink;\n getItemAnalytics?: (share: Share, yIndex: number) => ItemAnalytics;\n}\n\nexport function PreviousAssignments(props: PreviousAssignmentsProps): JSX.Element {\n if (!props.assignments.length)\n return <></>;\n \n const noBottomPadding = props.show && props.assignments.length > 3;\n \n return (\n <div className={classNames('bg-white rounded-3 p-3', noBottomPadding && 'pb-0')}>\n <PreviousAssignmentsHeader count={props.assignments.length} onToggle={props.onToggle} show={props.show} />\n {props.show && (\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList {...props} />\n </>\n )}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nexport interface UseAssignSharedDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function useAssignSharedData(options: UseAssignSharedDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.objectId, currentUser.data?.id);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n /**\n * Fetch interactive videos options to set them as defaults\n * if the interactive share data does not have any options set.\n * We only fetch this if its an interactive share entity\n */\n const interactive = Flight.useBasicFetch<Interactive>(\n MasterTypeHelper.isType<InteractiveMetadata>(entity.data, MasterType.Interactive) && entity.data.interactiveId &&\n InteractiveRequests.interactive(entity.data.interactiveId)\n );\n\n const { hasPermissions, getGatedPermission, isLoaded } = usePermissions();\n\n const hasStudentExp = hasPermissions(PermissionName.StudentExperience);\n const canCreateClassrooms = hasPermissions(PermissionName.CreateClassrooms);\n const openClassroomGatedPermission = getGatedPermission(PermissionName.ShareToOpenClassrooms);\n \n const dataLoaded = (\n !!currentUser.data &&\n !!entity.data &&\n !!config.data &&\n !!isLoaded\n );\n \n return {\n loaded: dataLoaded,\n currentUser,\n entity,\n interactive,\n config,\n hasStudentExp,\n canCreateClassrooms,\n openClassroomGatedPermission\n };\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'assign.sharesAndAssignmentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharesAndAssignmentsEmptyStateProps {\n assignAppLink: Core.AppLink;\n shareLinkAppLink: Core.AppLink;\n hideAssignButton?: boolean;\n}\n\nexport function SharesAndAssignmentsEmptyState(props: SharesAndAssignmentsEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='py-4'>\n <EmptyState.Image\n size='small'\n src={ImageUrls.EmptyStates.Share.MY_SHARES}\n />\n <EmptyState.Heading><Text phrase='title' namespace={namespace} /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='description' namespace={namespace} /></EmptyState.Info>\n {!props.hideAssignButton && <>\n <EmptyState.Cta\n icon={cvSvgLibrary.Classrooms}\n text={getPhrase('ctaAssign')}\n appLink={props.assignAppLink}\n />\n <EmptyState.Cta\n className='text-dark hover-text-underline mt-3 fw-medium'\n text={getPhrase('ctaShareLink')}\n appLink={props.shareLinkAppLink}\n />\n </>}\n {props.hideAssignButton &&\n <EmptyState.Cta\n icon={cvSvgLibrary.Link}\n text={getPhrase('ctaShare')}\n appLink={props.shareLinkAppLink}\n />\n }\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'assign.sharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharesEmptyStateProps {\n appLink: Core.AppLink;\n}\n\nexport function SharesEmptyState(props: SharesEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='py-4'>\n <EmptyState.Image\n size='small'\n src={ImageUrls.EmptyStates.Share.MY_SHARES}\n />\n <EmptyState.Heading><Text phrase='title' namespace={namespace} /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='description' namespace={namespace} /></EmptyState.Info>\n <EmptyState.Cta\n icon={cvSvgLibrary.Link}\n text={getPhrase('cta')}\n appLink={props.appLink}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, PopupViewProps } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { AssignHelper } from 'libs/shared/utils/AssignHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { PreviousAssignmentsList, PreviousAssignmentsListHeader } from 'apps/assign/components/previous-assignments/PreviousAssignments';\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\n\nimport { SharesAndAssignmentsEmptyState } from './empty-states/shares-and-assignments-empty-state/SharesAndAssignmentsEmptyState';\nimport { SharesEmptyState } from './empty-states/shares-empty-state/SharesEmptyState';\n\nconst namespace = 'assign.showAssignmentsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_SCROLL_HEIGHT = 400;\n\nfunction sortByDateCreated(a: Share, b: Share) {\n if (!a || !b)\n return;\n\n if (DateHelper.isSame(a.dateCreated, b.dateCreated))\n return 0;\n\n if (DateHelper.isAfter(a.dateCreated, b.dateCreated))\n return 1;\n\n return -1;\n}\n\ninterface ViewInSchoolAnalyticsButtonProps {\n href: string;\n}\n\nfunction ViewInSchoolAnalyticsButton(props: ViewInSchoolAnalyticsButtonProps): JSX.Element {\n return (\n <a href={props.href} target='_blank' className='btn btn-link text-info'>\n <span className='pe-1'><Text phrase='openInSchoolAnalytics' namespace={namespace} /></span>\n <SvgContainer svgName={cvSvgLibrary.NewWindow} size={SvgContainerSize.Small} />\n </a>\n );\n}\n\ninterface ShowAssignmentsEmptyStateProps {\n type: 'assign-and-shares' | 'shares';\n assignAppLink: Core.AppLink;\n shareAppLink: Core.AppLink;\n hideAssignButton?: boolean;\n}\n\nfunction ShowAssignmentsEmptyState(props: ShowAssignmentsEmptyStateProps): JSX.Element {\n if (props.type === 'assign-and-shares') {\n return (\n <SharesAndAssignmentsEmptyState\n assignAppLink={props.assignAppLink}\n shareLinkAppLink={props.shareAppLink}\n hideAssignButton={props.hideAssignButton}\n />\n );\n }\n \n return <SharesEmptyState appLink={props.shareAppLink} />;\n}\n\ninterface ShowAssignmentsViewProps extends PopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function ShowAssignmentsView(props: ShowAssignmentsViewProps): JSX.Element {\n const sharedData = useAssignSharedData({\n objectId: props.objectId,\n entityType: props.entityType\n });\n\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n const isTertiary = useIsTertiary();\n\n const previousShares = Flight.useBasicFetch<Share[]>(ShareRequests.getSharesByObjectId(props.objectId));\n const assignments = previousShares.data?.sort(sortByDateCreated) || [];\n const previousAssignmentClassroomIds = ArrayHelper.uniq(\n assignments.map(ShareHelper.getClassroomIdFromShare).filter(x => !!x)\n );\n const classrooms = Flight.useBasicFetch<Classroom[]>(\n previousShares.hasCompleted &&\n ClassroomRequests.getClassroomsByIds(previousAssignmentClassroomIds, sharedData.currentUser.data?.customerId)\n );\n\n function getItemAppLink(share: Share) {\n const appLink = getInsightsOverviewAppLink(share);\n if (!appLink)\n return;\n\n return appLink;\n }\n\n const analyticsUrl = AnalyticsRouteHelper.getObjectUrl(\n sharedData.config.data?.analyticsWebUrl,\n sharedData.entity.data,\n hasShareFlowV2\n );\n \n const canViewSchoolAnalytics =\n hasPermissions(PermissionName.ViewAnalyticsProduct) &&\n hasPermissions(PermissionName.ViewCustomerAnalytics);\n\n const emptyStateType = (hasShareFlowV2 && isTertiary) ? 'shares' : 'assign-and-shares';\n\n const loaded = sharedData.loaded && !!previousShares.data && !!classrooms.data;\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={!loaded}\n closePopup={props.closePopup}\n >\n {!assignments.length &&\n <ShowAssignmentsEmptyState\n assignAppLink={AssignAppLinkHelper.flowSelector({ entityType: props.entityType, objectId: props.objectId })}\n shareAppLink={{\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [props.objectId],\n params: {\n entityType: props.entityType\n }\n }}\n type={emptyStateType}\n hideAssignButton={AssignHelper.hideAssignButtonOnVideoActions(sharedData.currentUser.data)}\n />\n }\n \n {!!assignments.length &&\n <>\n <PreviousAssignmentsListHeader />\n <PreviousAssignmentsList\n assignments={assignments.reverse()}\n classrooms={classrooms.data}\n getItemAppLink={getItemAppLink}\n scrollHeightMax={MAX_SCROLL_HEIGHT}\n />\n </>\n }\n <FlowControls\n hideNextButton\n hideCreateClassroomButton\n onClickBack={props.closePopup}\n backButtonText={getPhrase('close')}\n leftComponent={!!analyticsUrl && canViewSchoolAnalytics && <ViewInSchoolAnalyticsButton href={analyticsUrl} />}\n />\n </Popup>\n );\n}","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["getPhrase","icons","iconColours","shareTypeTitlePhraseMap","ShareAvatar","props","title","type","classroomName","additionalTitleText","openClassroomName","getTitle","className","svgName","variant","textVariant","svgWrapperClassName","svgSize","S","titleClassName","hideSubtitle","subtitleText","privacy","studentCount","classroomGroupCount","smartCount","getClassroomSubtitle","includes","getLinkSubtitle","getSubtitle","SharePrivacy","ShareViewHelper","canEmbed","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","map","id","getShareSettingsInitialValues","share","interactive","preventScrubbing","options","immediateFeedback","getEnabledSettingsField","entityType","showImmediateFeedbackField","showPreventScrubbingField","getSharableEntityType","objectTypeId","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","IntegrationId","IntegrationHelper","getShareIntegrations","name","settingName","FlowControls","hideBackButton","onClickBack","hideNextButton","onClickNext","hideCreateClassroomButton","onClickCreateClassroom","leftComponent","onClick","text","backButtonText","nextButtonTooltip","disable","placement","spanHack","nextButtonText","disabled","disableNextButton","showSpinner","namespace","ShareViewCount","MasterType","Text","phrase","viewCount","ShareViewedByCount","SvgContainer","shareAccessCount","accessCount","ShareType","totalRecipients","recipients","length","getViewCount","PreviousAssignmentsHeader","show","count","IconButton","onToggle","PreviousAssignmentsListHeader","columnClassNames","value","Row","Col","xs","PreviousAssignmentListItem","shareClassroom","ShareHelper","classrooms","analytics","getItemAnalytics","AppLink","key","shareId","appLink","getItemAppLink","analyticsData","data","analyticsOptions","lg","dateCreated","PreviousAssignmentsList","autoHeight","autoHeightMin","autoHeightMax","scrollHeightMax","autoHide","assignments","idx","PreviousAssignments","noBottomPadding","useAssignSharedData","currentUser","entity","objectId","config","interactiveId","hasPermissions","getGatedPermission","isLoaded","hasStudentExp","canCreateClassrooms","openClassroomGatedPermission","loaded","LanguageService","SharesAndAssignmentsEmptyState","EmptyState","size","src","ImageUrls","hideAssignButton","icon","assignAppLink","shareLinkAppLink","SharesEmptyState","MAX_SCROLL_HEIGHT","sortByDateCreated","a","b","DateHelper","ViewInSchoolAnalyticsButton","href","target","ShowAssignmentsEmptyState","shareAppLink","ShowAssignmentsView","sharedData","usePermissions","hasShareFlowV2","useSettings","isTertiary","useIsTertiary","previousShares","ShareRequests","sort","previousAssignmentClassroomIds","ArrayHelper","x","hasCompleted","ClassroomRequests","customerId","analyticsUrl","AnalyticsRouteHelper","analyticsWebUrl","canViewSchoolAnalytics","PermissionName","emptyStateType","Popup","showLoadingSpinner","closePopup","AssignAppLinkHelper","application","action","args","params","AssignHelper","reverse","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}