@clickview/lite 0.51.4-rc.2 → 0.51.4-rc.3

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 (76) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1750-4e7575b781-lite.chunk.js +2 -0
  4. package/dist/scripts/1750-4e7575b781-lite.chunk.js.map +1 -0
  5. package/dist/scripts/1820-345bf53a3c-lite.chunk.js +2 -0
  6. package/dist/scripts/1820-345bf53a3c-lite.chunk.js.map +1 -0
  7. package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js +2 -0
  8. package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2004-d891104ed4-lite.chunk.js +3 -0
  10. package/dist/scripts/2004-d891104ed4-lite.chunk.js.map +1 -0
  11. package/dist/scripts/3020-dbc723b098-lite.chunk.js +2 -0
  12. package/dist/scripts/3020-dbc723b098-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js +2 -0
  14. package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js.map +1 -0
  15. package/dist/scripts/3645-d9a5464436-lite.chunk.js +3 -0
  16. package/dist/scripts/3645-d9a5464436-lite.chunk.js.map +1 -0
  17. package/dist/scripts/389-58c7682943-lite.chunk.js +2 -0
  18. package/dist/scripts/389-58c7682943-lite.chunk.js.map +1 -0
  19. package/dist/scripts/4690-03372d68ac-lite.chunk.js +2 -0
  20. package/dist/scripts/4690-03372d68ac-lite.chunk.js.map +1 -0
  21. package/dist/scripts/5229-a1990cb48e-lite.chunk.js +2 -0
  22. package/dist/scripts/5229-a1990cb48e-lite.chunk.js.map +1 -0
  23. package/dist/scripts/5385-becf24e76b-lite.chunk.js +2 -0
  24. package/dist/scripts/5385-becf24e76b-lite.chunk.js.map +1 -0
  25. package/dist/scripts/5595-96a0649af0-lite.chunk.js +2 -0
  26. package/dist/scripts/5595-96a0649af0-lite.chunk.js.map +1 -0
  27. package/dist/scripts/5928-0d803fceb2-lite.chunk.js +2 -0
  28. package/dist/scripts/5928-0d803fceb2-lite.chunk.js.map +1 -0
  29. package/dist/scripts/5940-f335f8c290-lite.chunk.js +2 -0
  30. package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +1 -0
  31. package/dist/scripts/8830-ab7e2a0927-lite.chunk.js +2 -0
  32. package/dist/scripts/8830-ab7e2a0927-lite.chunk.js.map +1 -0
  33. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +3 -0
  34. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{9843-fdefde55d7-lite.chunk.js → 9843-b82415b68c-lite.chunk.js} +2 -2
  36. package/dist/scripts/9843-b82415b68c-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{bundle-5481f5bf86.min.js → bundle-8ef24aafa1.min.js} +3 -3
  38. package/dist/scripts/{bundle-5481f5bf86.min.js.map → bundle-8ef24aafa1.min.js.map} +1 -1
  39. package/package.json +1 -1
  40. package/dist/scripts/1750-2620ba7c35-lite.chunk.js +0 -2
  41. package/dist/scripts/1750-2620ba7c35-lite.chunk.js.map +0 -1
  42. package/dist/scripts/1820-7e03cf1f19-lite.chunk.js +0 -2
  43. package/dist/scripts/1820-7e03cf1f19-lite.chunk.js.map +0 -1
  44. package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js +0 -2
  45. package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js.map +0 -1
  46. package/dist/scripts/2004-00a63b9511-lite.chunk.js +0 -3
  47. package/dist/scripts/2004-00a63b9511-lite.chunk.js.map +0 -1
  48. package/dist/scripts/3020-152e57c92c-lite.chunk.js +0 -2
  49. package/dist/scripts/3020-152e57c92c-lite.chunk.js.map +0 -1
  50. package/dist/scripts/3231-af3a47245c-lite.chunk.js +0 -2
  51. package/dist/scripts/3231-af3a47245c-lite.chunk.js.map +0 -1
  52. package/dist/scripts/3645-bd1d174b0c-lite.chunk.js +0 -3
  53. package/dist/scripts/3645-bd1d174b0c-lite.chunk.js.map +0 -1
  54. package/dist/scripts/389-d8ef749150-lite.chunk.js +0 -2
  55. package/dist/scripts/389-d8ef749150-lite.chunk.js.map +0 -1
  56. package/dist/scripts/4690-c5bff103d9-lite.chunk.js +0 -2
  57. package/dist/scripts/4690-c5bff103d9-lite.chunk.js.map +0 -1
  58. package/dist/scripts/5229-b673828f61-lite.chunk.js +0 -2
  59. package/dist/scripts/5229-b673828f61-lite.chunk.js.map +0 -1
  60. package/dist/scripts/5385-db9999f839-lite.chunk.js +0 -2
  61. package/dist/scripts/5385-db9999f839-lite.chunk.js.map +0 -1
  62. package/dist/scripts/5595-8f3931b8c2-lite.chunk.js +0 -2
  63. package/dist/scripts/5595-8f3931b8c2-lite.chunk.js.map +0 -1
  64. package/dist/scripts/5928-325f4d9b8b-lite.chunk.js +0 -2
  65. package/dist/scripts/5928-325f4d9b8b-lite.chunk.js.map +0 -1
  66. package/dist/scripts/5940-44479341a9-lite.chunk.js +0 -2
  67. package/dist/scripts/5940-44479341a9-lite.chunk.js.map +0 -1
  68. package/dist/scripts/8830-7264149694-lite.chunk.js +0 -2
  69. package/dist/scripts/8830-7264149694-lite.chunk.js.map +0 -1
  70. package/dist/scripts/9230-420e26f36c-lite.chunk.js +0 -3
  71. package/dist/scripts/9230-420e26f36c-lite.chunk.js.map +0 -1
  72. package/dist/scripts/9843-fdefde55d7-lite.chunk.js.map +0 -1
  73. /package/dist/scripts/{2004-00a63b9511-lite.chunk.js.LICENSE.txt → 2004-d891104ed4-lite.chunk.js.LICENSE.txt} +0 -0
  74. /package/dist/scripts/{3645-bd1d174b0c-lite.chunk.js.LICENSE.txt → 3645-d9a5464436-lite.chunk.js.LICENSE.txt} +0 -0
  75. /package/dist/scripts/{9230-420e26f36c-lite.chunk.js.LICENSE.txt → 9230-6dee40b1fb-lite.chunk.js.LICENSE.txt} +0 -0
  76. /package/dist/scripts/{bundle-5481f5bf86.min.js.LICENSE.txt → bundle-8ef24aafa1.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3020],{83657:(e,t,n)=>{n.d(t,{e:()=>l});var a=n(32735),r=n(91967),o=n(10874),i=n(76177),c=n(42735),s=n(86509);function l(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],l=[];t.forEach((function(e){e.button?n.push(e):l.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||l.length?a.createElement("div",{className:u},n.length?n.map((function(t,n){return a.createElement(a.Fragment,{key:n},function(){if(t.label){var n=r.q.isFunction(t.label)?t.label:function(){return a.createElement(a.Fragment,null,t.label)};return a.createElement(c.K,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled},n())}var s=a.createElement(o.h,{appLink:t.appLink,href:t.href,onClick:t.onClick,svgName:t.svgName,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize});return t.tooltip?a.createElement(i.u,{title:t.tooltip,spanHack:!0},s):s}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,l.length?a.createElement(s.m,{actions:l,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),o=n(81886),i=n(45157),c=n(49985),s=n(36848),l=n(83914),u=n(76177),m=n(35223);const d={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function b(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(s.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&c.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&o.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,o="actions-dropdown-".concat(i.Y.getRandomInt()),c="dropdown-toggle px-0 ".concat(d.dropdownToggle);return e.dropdownToggleClassName&&(c+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:c,type:"button",id:o,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:t?e.fetchMore:null},a.createElement(l.x,{svgName:m.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":o},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement("li",{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(b,{action:e}))):a.createElement("li",{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(b,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:l.S.Small}},49935:(e,t,n)=>{n.d(t,{Oo:()=>m,b2:()=>d});var a=n(32735),r=n(36848),o=n(86764),i=n(3747),c=n(5859),s=n(35223),l=n(83914),u=function(e){var t=e.breadcrumb,n=t.name,o=t.appLink,i=t.active,c=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(i?" active":"")},i?a.createElement("strong",null,n):a.createElement(r.F,{appLink:o},c&&a.createElement(l.x,{svgName:s.vn.ChevronLeft,size:l.S.Small}),a.createElement("span",{className:c?"ms-2":""},n)))},m=function(e){var t=e.breadcrumbs,n=(0,i.a)(o.r.XS),r=null==t?void 0:t.length;return!r||n&&r<2?a.createElement(a.Fragment,null):n?a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(u,{breadcrumb:t[r-2],withBackIcon:!0}))):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return a.createElement(u,{key:t,breadcrumb:e})}))))},d=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,i.a)(o.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),o=n(36848),i=n(18559),c=n(11607),s=n(83914),l=n(87432);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},5062:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(32735),r=n(87432);const o={partialSize:"ntGsj"};function i(){return a.createElement("div",{className:"partial-loading-background ".concat(r.Z.pillTabSelector," ").concat(o.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),o=n(67058),i=n(14553),c=n(49267),s=n(49075),l={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==a.o.NotFound?o!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new i.badRequest):n.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):n.notFound||r.Q.Ry.throw(new i.notFound))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var a=n(32735),r=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){i.forEach((function(e){(0,r.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>r});var a=n(32045),r={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return a.w.Disabled;if(1===e)return a.w.Active;if(2===e)return a.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===a.w.Disabled)return 0;if(e===a.w.Active)return 1;if(e===a.w.Inactive)return 2}return null}}},5859:(e,t,n)=>{function a(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}n.d(t,{u:()=>o});var r={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(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)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var a=n(32735),r=n(23481),o=n(49985),i=n(65858),c=n(11607),s=n(83914),l=n(69883),u=n(1643),m=n(35223);function d(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 p=r.T.encloseNamespace("classrooms.classroomStar"),f=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,r=(t=a.useState(f(e.classroom)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(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)?d(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=r[0],b=r[1],g=(0,l.Z)();return a.useEffect((function(){f(e.classroom)!==u&&b(!u)}),[f(e.classroom)]),a.createElement(c.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},a.createElement(s.x,{svgName:u?m.vn.Star:m.vn.StarOutline,size:s.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>s});var a=n(20354),r=n(16714),o=n(31949),i=n(22902),c=n(88630),s=function(e){var t,n=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),s=a.a.useBasicFetch(o.N.currentUser()),l=a.a.useBasicFetch(!n&&(null===(t=s.data)||void 0===t?void 0:t.customerId)&&c.F.getClassroomStaff(e,s.data.customerId)),u=a.a.useBasicFetch(!n&&c.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!s.hasCompleted)return{isLoading:!0};var m=s.data.id.toString(),d=!!u.data.find((function(e){return e.id.toString()===m})),p=!!l.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:d||p,isOwner:d}}},31491:(e,t,n)=>{n.d(t,{_:()=>A});var a=n(16714),r=n(67058),o=n(91286),i=n(22902),c=n(23481),s=n(64364),l=n(14070),u=n(97291);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){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,p(a.key),a)}}function p(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function f(e,t,n){return t=g(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,b()?Reflect.construct(t,n||[],g(e).constructor):t.apply(e,n))}function b(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(b=function(){return!!e})()}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",h=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),f(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return c.T.getPhrase(v,"heading")}},{key:"description",get:function(){return c.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&d(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H);function E(e){return E="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},E(e)}function O(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,S(a.key),a)}}function S(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=E(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(t)?t:t+""}function w(e,t,n){return t=C(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,N()?Reflect.construct(t,n||[],C(e).constructor):t.apply(e,n))}function N(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(N=function(){return!!e})()}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function k(e,t){return k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},k(e,t)}var T="classrooms.classroomNotFoundError",L=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),w(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&k(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return c.T.getPhrase(T,"heading")}},{key:"description",get:function(){return c.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&O(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H),A=function(e){var t=(0,i.T)().hasPermissions;(0,o.v)(e,{notFound:L,forbidden:{privacy:t(a.C.ViewClassrooms)?h:r.d}})}},5289:(e,t,n)=>{n.d(t,{R:()=>N});var a=n(32735),r=n(23481),o=n(81886),i=n(65858),c=n(83657),s=n(49935),l=n(38502),u=n(32045),m=n(53036),d=n(14070),p=n(97291),f=n(62691),b=n(86764),g=n(86613),y=n(3747),v=n(35223),h=n(46009),E="classrooms.hooks",O=function(e,t,n){var a=(0,y.a)(b.r.SMDown),o=(0,h.p)(e),c={id:e},s={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return o.isOwner&&u.push({order:0,label:r.T.getPhrase(E,"editClassroom"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsData:c,analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Edit}),svgName:v.vn.Edit,button:!a,className:n?"disabled ".concat(l):a?"":l}),u.push({order:10,label:r.T.getPhrase(E,"generateJoinLink"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",button:!a&&!o.isOwner,className:n?"disabled":a||o.isOwner?"":l}),o.isOwner&&u.push({order:20,label:r.T.getPhrase(E,"archive"),analyticsData:c,disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(o.isOwner||o.isTeacher)&&t.role!==g.i.Admin&&u.push({order:30,label:r.T.getPhrase(E,"leaveClassroom"),disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},c),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u};const S={actionsContainer:"uYv5Z"};var w=r.T.encloseNamespace("classrooms.classroomLayout");function N(e){var t=(0,h.p)(e.classroom.id),n=O(e.classroom.id,e.currentUser,e.isRostered),r=m.h.getStatusAsString(e.classroom.status),b=[{name:w("students"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:w("groups"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:w("teachers"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==w("groups")}));return a.useEffect((function(){r!==u.w.Active&&o.Q.C$.trigger({application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||r!==u.w.Active?a.createElement(a.Fragment,null):a.createElement("div",{className:"px-3 position-relative"},a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"mt-1 me-1"},a.createElement(f.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),a.createElement("h1",{className:"mb-0"},e.classroom.name)),!!n.length&&a.createElement("div",{className:S.actionsContainer},a.createElement(c.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),a.createElement("div",{className:"pb-3 pt-1"},a.createElement(s.Oo,{breadcrumbs:[{name:w("classroomsBreadcrumb"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),a.createElement("div",{className:"pb-2"},a.createElement(l.r,{tabs:b})),e.children)}},87432:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
+ //# sourceMappingURL=3020-dbc723b098-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/3020-dbc723b098-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/partial-loading/partial-pill-tab-selector.scss","file:///app/packages/libs/shared/src/components/pill-tab-selector/partial-loading/PartialPillTabSelector.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/ObjectStatusHelper.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-star/ClassroomStar.tsx","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomPermissions.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError.ts","file:///app/packages/projects/lite/src/apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useHandleClassroomErrors.ts","file:///app/packages/projects/lite/src/apps/classrooms/hooks/useClassroomActions.ts","file:///app/packages/projects/lite/src/apps/classrooms/layouts/classroom-layout.scss","file:///app/packages/projects/lite/src/apps/classrooms/layouts/ClassroomLayout.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: '&nbsp' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"partialSize\":\"ntGsj\"};","import React from 'react';\n\nimport styles from '../pill-tab-selector.scss';\nimport partialStyles from './partial-pill-tab-selector.scss';\n\nexport function PartialPillTabSelector(): JSX.Element {\n return (\n <div className={`partial-loading-background ${styles.pillTabSelector} ${partialStyles.partialSize}`} />\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\n\n/**\n * Some of our APIs return enum values as a string, and others return enum values as a number.\n * \n * This means if a HTTP request to one API returns an object with it's enum values in string\n * form, and another HTTP request returns that same object with it's enum values in number form,\n * Flight will cache the object with it's enum values in number form.\n * \n * This can cause bugs in our frontend code where we're doing checks like `(obj.status === ObjectStatus.Active)`\n * because TypeScript enums only handle one data type (number or string). Even if the object is active, if the\n * it's cached as a data type that doesn't match what our TypeScript `ObjectStatus` enum's data type is, then\n * that check would return false, introducing bugs.\n * \n * A prime example of this is Classroom objects being returned from User API with string enums, but being returned\n * from Classroom API with number enums.\n * \n * For that reason, we sadly need to check object status with this helper. Hopefully one day this can be deleted\n * when all of our APIs return enum values consistently as 1 data type.\n * \n * Example of a bug introduced by this inconsistency: https://clickview.atlassian.net/browse/INBOX-3024\n */\nexport const ObjectStatusHelper = {\n getStatusAsString(status: ObjectStatus): ObjectStatus {\n if (typeof (status) === 'string')\n return status;\n\n if (typeof (status) === 'number') {\n if (status === 0)\n return ObjectStatus.Disabled;\n\n if (status === 1)\n return ObjectStatus.Active;\n\n if (status === 2)\n return ObjectStatus.Inactive;\n }\n\n return null;\n },\n\n getStatusAsNumber(status: ObjectStatus): 0 | 1 | 2 {\n if (typeof (status) === 'number')\n return status;\n\n if (typeof (status) === 'string') {\n if (status === ObjectStatus.Disabled)\n return 0;\n\n if (status === ObjectStatus.Active)\n return 1;\n\n if (status === ObjectStatus.Inactive)\n return 2;\n }\n\n return null;\n }\n};","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { FavouriteHelper } from 'libs/shared/utils/FavouriteHelpers';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'classrooms.classroomStar';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getIsPinned = (classroom: Classroom) => {\n return FavouriteHelper.isFavouritedByCurrentUser(classroom);\n};\n\ninterface ClassroomStarProps {\n classroom: Classroom;\n onToggle: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n locationContext: LocationContext;\n}\n\nexport function ClassroomStar(props: ClassroomStarProps): JSX.Element {\n // Local state is used to provide instant feedback when the user clicks on the star.\n const [ isPinned, setIsPinned ] = React.useState(getIsPinned(props.classroom));\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (getIsPinned(props.classroom) === isPinned)\n return;\n\n setIsPinned(!isPinned);\n }, [getIsPinned(props.classroom)]);\n\n function onToggle(): void {\n setIsPinned(!isPinned);\n\n props.onToggle(!isPinned, () => onSuccess(!isPinned), () => onError(isPinned));\n }\n\n function onSuccess(isPinned: boolean): void {\n if (isPinned) {\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.On,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n \n alerts.success(getPhrase('pinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n \n return;\n }\n\n AnalyticsHelper.logUserAction({ id: props.classroom.id }, {\n location: props.locationContext,\n actionType: UserAction.Favourite,\n descriptor: ToggleDescriptor.Off,\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Complete\n });\n\n alerts.success(getPhrase('unpinSuccess', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n function onError(prevState: boolean): void {\n setIsPinned(prevState);\n\n if (prevState) {\n alerts.error(getPhrase('unpinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n\n return;\n }\n\n alerts.error(getPhrase('pinError', {\n classroomName: props.classroom.name,\n escapeText: true\n }));\n }\n\n return (\n <DivButton onClick={onToggle} className={isPinned ? 'text-yellow' : ''}>\n <SvgContainer\n svgName={isPinned ? cvSvgLibrary.Star : cvSvgLibrary.StarOutline}\n size={SvgContainerSize.Medium}\n />\n </DivButton>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nexport const useCheckClassroomPermissions = (classroomId: string) => {\n const { hasPermissions } = usePermissions();\n\n /**\n * This is the highest-level permission that overrides all other permissions\n */\n const canManageAllClassrooms = hasPermissions(PermissionName.ManageAllClassrooms);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n /**\n * If the user has permission to manage all classrooms, there's no need to check if they're owner/invitee\n * as these permissions no longer matter.\n */\n const staff = Flight.useBasicFetch<User[]>(!canManageAllClassrooms && currentUser.data?.customerId &&\n ClassroomRequests.getClassroomStaff(classroomId, currentUser.data.customerId));\n const owners = Flight.useBasicFetch<User[]>(!canManageAllClassrooms &&\n ClassroomRequests.getClassroomOwners(classroomId));\n\n // Has full classroom management power.\n if (canManageAllClassrooms) {\n return {\n isLoading: false,\n isOwner: true,\n isTeacher: true\n };\n }\n\n if (!staff.hasCompleted || !owners.hasCompleted || !currentUser.hasCompleted)\n return { isLoading: true };\n\n const currentUserId = currentUser.data.id.toString();\n\n const isClassroomOwner = !!owners.data.find(owner => owner.id.toString() === currentUserId);\n const isClassroomTeacher = !!staff.data.find(staff => staff.id.toString() === currentUserId);\n\n return {\n isLoading: false,\n isTeacher: isClassroomOwner || isClassroomTeacher, // All owners are also teachers\n isOwner: isClassroomOwner\n };\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.cannotAccessClassroomError';\n\nexport class CannotAccessClassroomError extends ErrorPageError {\n constructor() {\n super('Cannot access classroom');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'CannotAccessClassroomError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomNotFoundError';\n\nexport class ClassroomNotFoundError extends ErrorPageError {\n constructor() {\n super('Classroom doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'ClassroomNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n };\n }\n}","import { Flight } from 'libs/common/flight';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Classroom } from 'libs/shared/interfaces';\n\nimport { CannotAccessClassroomError } from 'apps/classrooms/errors/cannot-access-classroom/CannotAccessClassroomError';\nimport { ClassroomNotFoundError } from 'apps/classrooms/errors/classroom-not-found/ClassroomNotFoundError';\n\nexport const useHandleClassroomErrors = (classroom: Flight.Response<Classroom>) => {\n const { hasPermissions } = usePermissions();\n\n useHandleObjectError(classroom, {\n notFound: ClassroomNotFoundError,\n forbidden: {\n privacy: hasPermissions(PermissionName.ViewClassrooms) ? CannotAccessClassroomError : NotFoundError\n }\n });\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsOptions, AssocDescriptor, EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { CurrentUser } 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 { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nconst namespace = 'classrooms.hooks';\n\nexport const useClassroomActions = (classroomId: string, currentUser: CurrentUser, readOnly?: boolean) => {\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n const accessCheck = useCheckClassroomPermissions(classroomId);\n\n const analyticsData = { id: classroomId };\n\n const baseAnalyticsOptions: AnalyticsOptions = {\n entity: EntityType.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.Classroom\n };\n\n const buttonClass = 'btn btn-outline-dark me-2';\n\n const actions: ActionOptions[] = [];\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 0,\n label: LanguageService.getPhrase(namespace, 'editClassroom'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.EDIT_CLASSROOM,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsData,\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Edit\n },\n svgName: cvSvgLibrary.Edit,\n button: !isMobile,\n className: readOnly ? `disabled ${buttonClass}` : !isMobile ? buttonClass : ''\n });\n }\n\n actions.push({\n order: 10,\n label: LanguageService.getPhrase(namespace, 'generateJoinLink'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.GENERATE_JOIN_LINK,\n args: [classroomId]\n },\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n button: (!isMobile && !accessCheck.isOwner),\n className: readOnly ? 'disabled' : (!isMobile && !accessCheck.isOwner) ? buttonClass : ''\n });\n\n if (accessCheck.isOwner) {\n actions.push({\n order: 20,\n label: LanguageService.getPhrase(namespace, 'archive'),\n analyticsData,\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Archive,\n descriptor: ToggleDescriptor.On\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ARCHIVE_CLASSROOM,\n args: [classroomId]\n },\n className: readOnly ? 'disabled' : ''\n });\n }\n\n if ((accessCheck.isOwner || accessCheck.isTeacher) && currentUser.role !== UserRole.Admin) {\n actions.push({\n order: 30,\n label: LanguageService.getPhrase(namespace, 'leaveClassroom'),\n disabled: readOnly,\n tooltip: readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : '',\n className: readOnly ? 'disabled' : 'text-danger',\n analyticsData: {\n ...analyticsData,\n teacherId: currentUser.id\n },\n analyticsOptions: {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate,\n descriptor: AssocDescriptor.User\n },\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [currentUser.id]\n }\n }\n });\n }\n\n return actions;\n};","// extracted by mini-css-extract-plugin\nexport default {\"actionsContainer\":\"uYv5Z\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { Classroom, CurrentUser } from 'libs/shared/interfaces';\nimport { ObjectStatusHelper } from 'libs/shared/utils/ObjectStatusHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomStar } from 'apps/classrooms/components/classroom-star/ClassroomStar';\nimport { useClassroomActions } from 'apps/classrooms/hooks/useClassroomActions';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\n\nimport styles from './classroom-layout.scss';\n\nconst namespace = 'classrooms.classroomLayout';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomLayoutProps {\n classroom: Classroom;\n currentUser: CurrentUser;\n onTogglePin: (shouldPin: boolean, onSuccess: () => void, onError: () => void) => void;\n activeTab: 'students' | 'groups' | 'teachers';\n isRostered?: boolean;\n}\n\nexport function ClassroomLayout(props: React.PropsWithChildren<ClassroomLayoutProps>): JSX.Element {\n const accessCheck = useCheckClassroomPermissions(props.classroom.id);\n\n const actions = useClassroomActions(props.classroom.id, props.currentUser, props.isRostered);\n\n const classroomStatus = ObjectStatusHelper.getStatusAsString(props.classroom.status);\n\n const tabs: PillTab[] = [{\n name: getPhrase('students'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'students'\n }, {\n name: getPhrase('groups'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_GROUPS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'groups'\n }, {\n name: getPhrase('teachers'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_TEACHERS,\n args: [props.classroom.id]\n },\n active: props.activeTab === 'teachers'\n }]\n // todo we hide groups for rostered classroom for v1\n .filter(tab => !props.isRostered || tab.name !== getPhrase('groups'));\n\n // Redirect away if classroom isn't published\n React.useEffect(() => {\n if (classroomStatus === ObjectStatus.Active)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }, { replace: true });\n }, [props.classroom.status]);\n\n if ((!accessCheck.isLoading && !accessCheck.isTeacher) || classroomStatus !== ObjectStatus.Active)\n return <></>;\n\n return (\n <div className='px-3 position-relative'>\n <div className='d-flex'>\n <div className='mt-1 me-1'>\n <ClassroomStar\n classroom={props.classroom}\n onToggle={props.onTogglePin}\n locationContext={LocationContext.Classroom}\n />\n </div>\n <h1 className='mb-0'>{props.classroom.name}</h1>\n </div>\n\n {!!actions.length && (\n <div className={styles.actionsContainer}>\n <ActionsComponent\n actions={actions}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n )}\n\n <div className='pb-3 pt-1'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: getPhrase('classroomsBreadcrumb'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n }\n },\n { name: props.classroom.name, active: true }\n ]}\n />\n </div>\n\n <div className='pb-2'>\n <PillTabSelector tabs={tabs} />\n </div>\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","map","idx","key","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","id","size","showDivider","undefined","group","Tooltip","defaultProps","S","BreadcrumbItem","breadcrumb","name","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","TabContents","tab","count","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","onSelect","onSelectTab","PartialPillTabSelector","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","ObjectStatusHelper","getStatusAsString","getStatusAsNumber","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Math","max","floor","random","getPhrase","getIsPinned","classroom","ClassroomStar","isPinned","setIsPinned","alerts","onToggle","location","locationContext","actionType","descriptor","entity","workflowPhase","success","classroomName","escapeText","onSuccess","prevState","error","useCheckClassroomPermissions","classroomId","canManageAllClassrooms","hasPermissions","currentUser","staff","customerId","owners","isLoading","isOwner","isTeacher","hasCompleted","currentUserId","toString","isClassroomOwner","find","owner","isClassroomTeacher","namespace","CannotAccessClassroomError","LanguageService","text","application","ErrorPageError","ClassroomNotFoundError","useHandleClassroomErrors","usePermissions","PermissionName","NotFoundError","useClassroomActions","readOnly","accessCheck","baseAnalyticsOptions","buttonClass","args","UserRole","teacherId","params","teacherIds","ClassroomLayout","isRostered","classroomStatus","activeTab","filter","ObjectStatus","replace","onTogglePin","children"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3231],{92869:(e,n,t)=>{t.d(n,{t:()=>r});var a=t(48088),i=t(95846),r={preventScrollTop:function(){a.Radio.channel(i.G.SHELL).trigger("prevent:scroll:top")}}},83657:(e,n,t)=>{t.d(n,{e:()=>c});var a=t(32735),i=t(91967),r=t(10874),o=t(76177),l=t(42735),s=t(86509);function c(e){var n=a.useMemo((function(){return e.actions.sort((function(e,n){return e.order-n.order}))}),[e.actions]),t=[],c=[];n.forEach((function(e){e.button?t.push(e):c.push(e)}));var d="d-flex";return e.className&&(d+=" ".concat(e.className)),t.length||c.length?a.createElement("div",{className:d},t.length?t.map((function(n,t){return a.createElement(a.Fragment,{key:t},function(){if(n.label){var t=i.q.isFunction(n.label)?n.label:function(){return a.createElement(a.Fragment,null,n.label)};return a.createElement(l.K,{appLink:n.appLink,href:n.href,onClick:n.onClick,svgName:n.svgName,svgSize:e.dropdownToggleSvgSize,className:n.className,tooltip:n.tooltip,showSpinner:n.showSpinner,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled},t())}var s=a.createElement(r.h,{appLink:n.appLink,href:n.href,onClick:n.onClick,svgName:n.svgName,className:n.className,analyticsData:n.analyticsData,analyticsOptions:n.analyticsOptions,openInNewTab:n.openInNewTab,disabled:n.disabled,showBorder:n.showBorder,customSize:e.customSize});return n.tooltip?a.createElement(o.u,{title:n.tooltip,spanHack:!0},s):s}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,c.length?a.createElement(s.m,{actions:c,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)):a.createElement(a.Fragment,null)}},86509:(e,n,t)=>{t.d(n,{m:()=>f});var a=t(32735),i=t(91967),r=t(81886),o=t(45157),l=t(49985),s=t(36848),c=t(83914),d=t(76177),u=t(35223);const m={dropdownToggle:"UCAnJ"};function g(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function p(e){var n="dropdown-item";return e&&(n+=" ".concat(e)),n}function v(e){var n=i.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(s.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:p(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(c.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},n()));function t(n){n.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&l.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),i.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&r.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:p(e.action.className),onClick:t,href:e.action.href},e.action.svgName&&a.createElement(c.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},n())):a.createElement("span",{className:"cursor-pointer ".concat(p(e.action.className)),onClick:t,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&t(e)}},e.action.svgName&&a.createElement(c.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),n())}function f(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var n=e.actions.some((function(e){return e.lazyPlaceholder})),t="dropdown";e.className&&(t+=" ".concat(e.className));var i,r="actions-dropdown-".concat(o.Y.getRandomInt()),l="dropdown-toggle px-0 ".concat(m.dropdownToggle);return e.dropdownToggleClassName&&(l+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:t},a.createElement("button",{className:l,type:"button",id:r,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false","aria-label":"More actions dropdown",onClick:n?e.fetchMore:null},a.createElement(c.x,{svgName:u.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal","aria-labelledby":r},n?a.createElement(g,null):e.actions.map((function(e,n){var t=void 0!==i&&i!==e.group;return i=e.group,e.tooltip?a.createElement("li",{key:n},t&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(d.u,{title:e.tooltip,spanHack:!0},a.createElement(v,{action:e}))):a.createElement("li",{key:n},t&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(v,{action:e}))}))))}f.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:c.S.Small}},88711:(e,n,t)=>{t.d(n,{j:()=>r});var a=t(32735),i=t(20455);function r(e){var n,t,r=(0,i.O1)(Object.assign(Object.assign({},e.draggable),{disabled:!e.draggable,attributes:{role:"drag",tabIndex:-1}})),o=r.active,l=r.isDragging,s=r.attributes,c=r.listeners,d=r.setNodeRef,u=(0,i.Zj)(Object.assign(Object.assign({},e.droppable),{disabled:!e.droppable})),m=u.isOver,g=u.over,p=u.active,v=u.setNodeRef;return a.useEffect((function(){var n,t,a,i=null===(n=e.draggable)||void 0===n?void 0:n.data;Array.isArray(i)&&(null==i?void 0:i.includes(null==o?void 0:o.id.toString()))?null===(t=e.setIsDragging)||void 0===t||t.call(e,l):null===(a=e.setIsDragging)||void 0===a||a.call(e,!1)}),[l]),a.createElement("div",Object.assign({ref:d},c,s,{className:"".concat(e.draggable?"cursor-grab":"cursor-default"," ").concat(l&&o||e.isDragging&&(t=null===(n=e.draggable)||void 0===n?void 0:n.data,Array.isArray(t)&&t.includes(e.draggable.id.toString()))?e.dragStyle:null)}),a.createElement("div",{ref:v,className:p&&m&&(null==o?void 0:o.id)!==(null==g?void 0:g.id)?e.dropStye:null},e.children))}},37395:(e,n,t)=>{t.d(n,{t:()=>u});var a=t(32735),i=t(98269),r=t(92869),o=t(49985),l=t(65858),s=t(36848),c=t(83345);function d(e,n,t){var a;if(!n)return null;var i=null!==(a=e.params)&&void 0!==a?a:{};return t?(null==i?void 0:i.previous)?{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},i),{cursor:null==i?void 0:i.previous,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},i),{cursor:null,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},i),{cursor:n,previous:i.cursor})}}function u(e){var n=e.appLink,t=e.cursors,u=e.className,m=e.buttonVariant,g=e.prevHack,p=e.scrollTop,v=e.onClick;function f(e){n&&!p&&r.t.preventScrollTop(),o.k.logUserAction({page:e},{location:l.LZ.Pagination,entity:l.py.Pagination,actionType:l.Vw.Navigate}),v&&v(t[e])}return n?a.createElement(c.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(s.F,{appLink:d(n,t.previous,g),className:"btn btn-".concat(m," me-1 ").concat(t.previous?"":"disabled"),onClick:function(){return f("previous")},style:{display:"inline-block"}},a.createElement(c.x,{phrase:"previous"})),a.createElement(s.F,{appLink:d(n,t.next),className:"btn btn-".concat(m," ").concat(t.next?"":"disabled"),onClick:function(){return f("next")},style:{display:"inline-block"}},a.createElement(c.x,{phrase:"next"})))):a.createElement(c.D.Provider,{value:"shared.pagination"},a.createElement("div",{className:u},a.createElement(i.Z,{variant:m,className:"me-1 ".concat(t.previous?"":"disabled"),onClick:function(){return f("previous")}},a.createElement(c.x,{phrase:"previous"})),a.createElement(i.Z,{variant:m,className:"btn ".concat(t.next?"":"disabled"),onClick:function(){return f("next")}},a.createElement(c.x,{phrase:"next"}))))}u.defaultProps={className:"py-2",buttonVariant:"secondary"}},17808:(e,n,t)=>{t.d(n,{Q:()=>s});var a=t(32735),i=t(20455),r=t(95339),o=t(67445);function l(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}function s(e){var n,t,s=(n=a.useState(null),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=r.call(t)).done)&&(l.push(a.value),l.length!==n);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(n,t)||function(e,n){if(e){if("string"==typeof e)return l(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?l(e,n):void 0}}(n,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.")}()),c=s[0],d=s[1],u=(0,i.Dy)((0,i.VT)(i.we,{activationConstraint:{distance:10}}),(0,i.VT)(i.Lg,{coordinateGetter:o.is}));return e.disabled?a.createElement(a.Fragment,null,e.children):a.createElement(i.LB,{sensors:u,collisionDetection:i.pE,onDragStart:function(n){var t;d(n.active.id),null===(t=e.onSortStart)||void 0===t||t.call(e,n)},onDragEnd:function(n){d(null),e.onSortEnd(n)},modifiers:e.vertical?[r.DL]:[]},a.createElement(o.Fo,{items:e.ids,strategy:e.vertical?o.qw:o.U2},e.children),a.createElement(i.y9,{dropAnimation:e.dropAnimation},c?e.getDragOverlay(c):null))}s.defaultProps={dropAnimation:{duration:250,easing:"ease"},vertical:!0}},1287:(e,n,t)=>{t.d(n,{W:()=>o});var a=t(32735),i=t(67445),r=t(17592);function o(e){var n=(0,i.nB)({id:e.id}),t=n.setNodeRef,o=n.transform,l=n.transition,s=n.isSorting,c=n.listeners,d=n.attributes,u=n.activeIndex,m=n.overIndex,g=n.index,p={transform:r.ux.Transform.toString(o),transition:l,touchAction:"none",position:"relative"};s&&g===u&&(p.visibility="hidden");var v=e.childComponent,f=function(e,n,t){return n!==e?null:t>n?"down":t<n?"up":null}(g,u,m);return a.createElement(v,Object.assign({},e.childProps,{ref:t,style:p,dragListeners:c,dragAttributes:d,dragDirection:f}))}},13231:(e,n,t)=>{t.d(n,{NB:()=>E,BR:()=>y,E4:()=>h});var a=t(32735),i=t(23481),r=t(81886),o=t(88711),l=t(89965),s=t(37395),c=t(17808),d=t(31908),u=t(34550),m=t(66133),g=t(82072);const p={sortableVideo:"xaH09",videoList:"kO5Q0",badgeContainer:"FP8l5",dragStyle:"HF8j1"};function v(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}var f=i.T.encloseNamespace("shared.videoList");function b(e,n){return d.M.isClip(e)?n?u.s:u.I:d.M.isInteractive(e)?n?m.n:m.H:n?g.o:g.m}var y=a.createContext({isSortable:!1});function h(e){var n,t,i=a.useContext(y).isSortable,c=(n=a.useState(!1),t=2,function(e){if(Array.isArray(e))return e}(n)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=r.call(t)).done)&&(l.push(a.value),l.length!==n);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(n,t)||function(e,n){if(e){if("string"==typeof e)return v(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?v(e,n):void 0}}(n,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.")}()),d=c[0],u=c[1],m=e.checkboxHelper,g=r.Q.C$.getCurrentAppLink();return a.createElement(a.Fragment,null,a.createElement("div",{className:"position-relative ".concat(p.videoList)},e.videos.map((function(n,t){var r=b(n,i),s=Number.isInteger(e.startingPositionIndex)?e.startingPositionIndex:0,c=m&&m.getSelectedCount()>1&&m.isChecked(n.id)?m.getSelected():n;return a.createElement(o.j,{draggable:e.drag&&!i&&{id:n.id,data:c},dragStyle:p.dragStyle,isDragging:d,setIsDragging:u,key:"".concat(n.id,":").concat(t)},a.createElement("div",{className:"d-flex flex-row align-items-center"},e.allowBulkAction&&a.createElement(l.X,{className:"mx-0 mx-md-2",id:n.id,ariaLabel:"".concat(f("ariaBulkAction"),": ").concat(n.name),onChange:function(){return m.onToggleItem(n.id)},checked:m.isChecked(n.id)}),a.createElement(r,{video:n,yearGroups:e.yearGroups,index:t,getVideoAppLink:e.getVideoAppLink,getSubTextAppLink:e.getSubTextAppLink,setFavourite:e.setFavourite,canFavourite:e.canFavourite,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,showSignIn:e.showSignIn,getSignInAppLink:e.getSignInAppLink,analyticsData:{pagePositionIndex:s+t},hasPermissions:e.hasPermissions,canRemovePrivateVideos:e.canRemovePrivateVideos,presentationAudiences:e.presentationAudiences,showIndexes:e.showIndexes,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,getPreviewQuestionsAppLink:e.getPreviewQuestionsAppLink,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink,hideVideoGuidance:e.hideVideoGuidance})))}))),e.cursors&&a.createElement(s.t,{appLink:g,cursors:e.cursors}))}var E=function(e){var n=e.videos.map((function(e){return e.id}));return a.createElement(c.Q,{ids:n,getDragOverlay:function(n){var t=e.videos.find((function(e){return e.id===n})),i=b(t,!0);return a.createElement("div",{className:"bg-white ".concat(p.sortableVideo)},a.createElement(y.Provider,{value:{isSortable:!0}},a.createElement(i,{video:t,yearGroups:e.yearGroups,getVideoAppLink:e.getVideoAppLink,getSubTextAppLink:e.getSubTextAppLink,setFavourite:e.setFavourite,canFavourite:e.canFavourite,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,showSignIn:e.showSignIn,getSignInAppLink:e.getSignInAppLink,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:e.subTextType,hasPermissions:e.hasPermissions,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink,hideVideoGuidance:e.hideVideoGuidance})))},onSortEnd:e.onSortEnd,onSortStart:e.onSortStart},a.createElement(y.Provider,{value:{isSortable:!0,currentSortingIndex:e.currentSortingIndex}},a.createElement(h,Object.assign({},e))))}},9977:(e,n,t)=>{t.d(n,{O:()=>a});var a={getThumbnailColumns:function(){return{xs:12,sm:5,lg:3}},getDetailsColumns:function(){return{xs:12,sm:7,lg:9}},getSize:function(e,n){return e.sm?"sm":n||"md"},getThumbnailColSize:function(e){return e?10:12}}},34550:(e,n,t)=>{t.d(n,{I:()=>I,s:()=>x});var a=t(32735),i=t(69111),r=t(68050),o=t(65858),l=t(1287),s=t(84591),c=t(60318),d=t(51685),u=t(74289),m=t(94696),g=t(70872),p=t(40138),v=t(13231),f=t(9977),b=t(54610),y=t(68626),h=t(79967),E=t(49439),S=t(80143),k=t(31908);function w(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}var I=a.forwardRef((function(e,n){var t,l,I,x,A=(0,h.k)(),L=(I=(0,E.X)(),x=2,function(e){if(Array.isArray(e))return e}(I)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=r.call(t)).done)&&(l.push(a.value),l.length!==n);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(I,x)||function(e,n){if(e){if("string"==typeof e)return w(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?w(e,n):void 0}}(I,x)||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.")}()),N=L[0],C=L[1],O=f.O.getSize(A,e.size),j="sm"===O,T=a.useContext(v.BR).isSortable,P=(0,S.n)(null===(t=e.video.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.presentationAudiences),D=T&&!A.xs&&(C||void 0===e.index||!e.showIndexes),F=e.showIndexes&&!D&&!A.xs,H=(D||e.showIndexes)&&!A.xs,z=e.getVideoAppLink(e.video,{}),G={analyticsData:e.analyticsData,analyticsOptions:{entity:o.py.Clip,location:o.LZ.ClipListItem}};return a.createElement("div",{ref:N,className:"w-100"},a.createElement("div",{className:"row g-0 ".concat(j?"":"py-2"),ref:n,style:e.style},a.createElement(i.Z,Object.assign({},f.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(j?"pb-2 pe-2":"mb-1 px-2")}),a.createElement(r.Z,null,a.createElement(u.r,{index:e.index,showDragHandle:D,showIndexes:F,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,dragAttributes:e.dragAttributes,dragListeners:e.dragListeners}),a.createElement(i.Z,{xs:f.O.getThumbnailColSize(H)},a.createElement(s.u,Object.assign({},G,{video:e.video,appLink:z,audience:P,imageOptions:{size:b.h2.Medium},textPosition:y.z.Independent,type:"static",setFavourite:e.setFavourite,canFavourite:e.canFavourite,canRemovePrivateVideos:e.canRemovePrivateVideos,showSignIn:e.showSignIn,subTextType:"none",imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin}))))),a.createElement(i.Z,Object.assign({},f.O.getDetailsColumns(),{className:"".concat(j?"pb-2":"px-2"," d-flex position-relative flex-column")}),a.createElement("div",{className:"d-flex justify-content-between"},a.createElement(g.u,Object.assign({video:e.video,appLink:z,size:O,yearGroups:e.yearGroups,linkClassName:"flex-grow-1"},G)),a.createElement(p.H,Object.assign({},G,{video:e.video,showSignIn:e.showSignIn,signInAppLink:null===(l=e.getSignInAppLink)||void 0===l?void 0:l.call(e,z)}))),a.createElement("div",null,!j&&a.createElement(d.g,{video:e.video,showSignIn:e.showSignIn}),a.createElement(m.B,{video:e.video,yearGroups:e.yearGroups})),k.M.showVideoGuidance(e.hasPermissions)&&a.createElement(c.u,Object.assign({video:e.video,getVideoAppLink:e.getVideoAppLink,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink,containerClassName:"d-flex justify-content-start align-items-center pt-sm-1 gap-1",responsiveClassName:"_4ms1w"},G)))))})),x=function(e){return a.createElement(l.W,{id:e.video.id,childComponent:I,childProps:e})}},85784:(e,n,t)=>{t.d(n,{Q:()=>s});var a=t(32735),i=t(91967),r=t(83657),o=t(83914),l=t(51365);function s(e){var n=a.useContext(l.M);if(!i.q.isFunction(null==n?void 0:n.getVideoActions))return a.createElement(a.Fragment,null);var t=n.getVideoActions(e.video,{analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions});return a.createElement(r.e,{actions:t,className:"align-items-start gap-2",actionsDropdownClassName:"btn btn-link py-0",dropdownToggleSvgSize:o.S.Standard,fetchMore:n.fetchMoreActions?function(){return n.fetchMoreActions(e.video)}:null,customSize:!0})}},74289:(e,n,t)=>{t.d(n,{r:()=>s});var a=t(32735),i=t(69111),r=t(83914),o=t(35223);const l={dragHandleContainer:"mcAFC"};function s(e){var n,t=e.showDragHandle?Object.assign(Object.assign({},e.dragAttributes),e.dragListeners):{},o=(n="d-flex justify-content-center align-items-center",e.showDragHandle?"".concat(n," cursor-pointer ").concat(l.dragHandleContainer):n);return e.showDragHandle||e.showIndexes?a.createElement(i.Z,Object.assign({xs:2,className:o},t),!!e.showDragHandle&&a.createElement(r.x,{svgName:e.dragHandleIcon,size:e.dragHandleIconSize}),!!e.showIndexes&&a.createElement("span",{className:"fw-semibold"},e.index+1)):a.createElement(a.Fragment,null)}s.defaultProps={dragHandleIcon:o.vn.Handle,dragHandleIconSize:r.S.Small}},40138:(e,n,t)=>{t.d(n,{H:()=>d});var a=t(32735),i=t(36848),r=t(83345),o="shared.signInToWatch";function l(e){return a.createElement(i.F,{appLink:e.appLink,className:e.className},a.createElement(r.x,{namespace:o,phrase:"signInToWatch"}))}var s=t(85784),c=t(31908);function d(e){var n=c.M.getCanBeConsumed(e.video).canNavigate;return e.showSignIn&&!n?a.createElement(l,{appLink:e.signInAppLink,className:"btn btn-outline-dark"}):a.createElement(s.Q,{video:e.video,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions})}},66133:(e,n,t)=>{t.d(n,{H:()=>I,n:()=>x});var a=t(32735),i=t(69111),r=t(68050),o=t(65858),l=t(1287),s=t(84591),c=t(51685),d=t(74289),u=t(94696),m=t(70872),g=t(40138),p=t(15469),v=t(13231),f=t(9977),b=t(54610),y=t(68626),h=t(79967),E=t(49439),S=t(80143),k=t(31908);function w(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}var I=a.forwardRef((function(e,n){var t,l,I,x,A,L=(0,h.k)(),N=(x=(0,E.X)(),A=2,function(e){if(Array.isArray(e))return e}(x)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=r.call(t)).done)&&(l.push(a.value),l.length!==n);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(x,A)||function(e,n){if(e){if("string"==typeof e)return w(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?w(e,n):void 0}}(x,A)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),C=N[0],O=N[1],j=f.O.getSize(L,e.size),T="sm"===j,P=a.useContext(v.BR).isSortable,D=(0,S.n)(null===(t=e.video.subjectPresentationAudiences)||void 0===t?void 0:t.data,e.presentationAudiences),F=P&&!L.xs&&(O||void 0===e.index||!e.showIndexes),H=e.showIndexes&&!F&&!L.xs,z=(F||e.showIndexes)&&!L.xs,G=e.getVideoAppLink(e.video,{}),V={analyticsData:e.analyticsData,analyticsOptions:{entity:o.py.Interactive,location:o.LZ.InteractiveListItem}},R=k.M.getCanBeConsumed(e.video).canNavigate;return a.createElement("div",{ref:C,className:"w-100"},a.createElement("div",{className:"row g-0 py-2",ref:n,style:e.style},a.createElement(i.Z,Object.assign({},f.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start ".concat(T?"pb-2 pe-2":"mb-1 px-2")}),a.createElement(r.Z,null,a.createElement(d.r,{index:e.index,showDragHandle:F,showIndexes:H,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,dragAttributes:e.dragAttributes,dragListeners:e.dragListeners}),a.createElement(i.Z,{xs:f.O.getThumbnailColSize(z)},a.createElement(s.u,Object.assign({},V,{video:e.video,appLink:G,audience:D,imageOptions:{size:b.h2.Medium},textPosition:y.z.Independent,type:"static",setFavourite:e.setFavourite,canFavourite:e.canFavourite,canRemovePrivateVideos:e.canRemovePrivateVideos,showSignIn:e.showSignIn,subTextType:"none",hideDuration:T,imageCdnUrl:e.imageCdnUrl,isPlugin:e.isPlugin}))))),a.createElement(i.Z,Object.assign({},f.O.getDetailsColumns(),{className:"position-relative ".concat(T?"pb-2":"px-2")}),a.createElement("div",{className:"d-flex justify-content-between"},a.createElement(m.u,Object.assign({video:e.video,appLink:G,size:j,yearGroups:e.yearGroups,linkClassName:"flex-grow-1"},V)),a.createElement(g.H,Object.assign({},V,{video:e.video,showSignIn:e.showSignIn,signInAppLink:null===(l=e.getSignInAppLink)||void 0===l?void 0:l.call(e,G)}))),R?a.createElement("div",{className:"pt-sm-1 pt-md-0"},a.createElement(p.r,{timepoints:null===(I=e.video._timepoints)||void 0===I?void 0:I.value,appLink:G,previewAppLink:e.getPreviewQuestionsAppLink(e.video)})):a.createElement(c.g,{video:e.video,showSignIn:e.showSignIn}),a.createElement(u.B,{video:e.video,yearGroups:e.yearGroups}))))})),x=function(e){return a.createElement(l.W,{id:e.video.id,childComponent:I,childProps:e})}},82072:(e,n,t)=>{t.d(n,{o:()=>L,m:()=>A});var a=t(32735),i=t(69111),r=t(68050),o=t(65858),l=t(1287),s=t(83914),c=t(84591),d=t(60318),u=t(51685),m=t(74289),g=t(94696),p=t(70872),v=t(40138),f=t(13231),b=t(9977),y=t(11882),h=t(54610),E=t(68626),S=t(79967),k=t(49439),w=t(80143),I=t(35223);function x(e,n){(null==n||n>e.length)&&(n=e.length);for(var t=0,a=Array(n);t<n;t++)a[t]=e[t];return a}var A=a.forwardRef((function(e,n){var t,l,s,I,A,L,N,C=(0,S.k)(),O=(L=(0,k.X)(),N=2,function(e){if(Array.isArray(e))return e}(L)||function(e,n){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var a,i,r,o,l=[],s=!0,c=!1;try{if(r=(t=t.call(e)).next,0===n){if(Object(t)!==t)return;s=!1}else for(;!(s=(a=r.call(t)).done)&&(l.push(a.value),l.length!==n);s=!0);}catch(e){c=!0,i=e}finally{try{if(!s&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(c)throw i}}return l}}(L,N)||function(e,n){if(e){if("string"==typeof e)return x(e,n);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?x(e,n):void 0}}(L,N)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),j=O[0],T=O[1],P=b.O.getSize(C,e.size),D="sm"===P,F=a.useContext(f.BR).isSortable,H=null===(l=null===(t=e.video)||void 0===t?void 0:t.subjectPresentationAudiences)||void 0===l?void 0:l.data,z=(0,w.n)(H,e.presentationAudiences),G=F&&!C.xs&&(T||void 0===e.index||!e.showIndexes),V=e.showIndexes&&!G&&!C.xs,R=(G||e.showIndexes)&&!C.xs,M=null===(s=e.getVideoAppLink)||void 0===s?void 0:s.call(e,e.video,{}),U=function(){var n;return null===(n=e.getSubTextAppLink)||void 0===n?void 0:n.call(e,e.video)}(),Z={analyticsData:e.analyticsData,analyticsOptions:null!==(I=e.analyticsOptions)&&void 0!==I?I:{entity:o.py.Video,location:o.LZ.VideoListItem}};return a.createElement("div",{ref:j,className:"w-100"},a.createElement("div",{className:"row g-0 ".concat(D?"":"py-2"),style:e.style,ref:n},a.createElement(i.Z,Object.assign({},b.O.getThumbnailColumns(),{className:"flex-column align-items-flex-start mb-1 mb-sm-0 pb-sm-2 pe-sm-2 px-md-2 pb-md-0"}),a.createElement(r.Z,null,a.createElement(m.r,{index:e.index,showDragHandle:G,showIndexes:V,dragHandleIcon:e.dragHandleIcon,dragHandleIconSize:e.dragHandleIconSize,dragAttributes:e.dragAttributes,dragListeners:e.dragListeners}),a.createElement(i.Z,{xs:b.O.getThumbnailColSize(R)},a.createElement(c.u,Object.assign({},Z,{video:e.video,appLink:M,audience:z,imageOptions:{size:R?h.h2.Small:h.h2.Medium},textPosition:E.z.Independent,setFavourite:e.setFavourite,canFavourite:e.canFavourite,type:"static",canRemovePrivateVideos:e.canRemovePrivateVideos,showSignIn:e.showSignIn,hideRating:!1,companyLogoFallbackUrl:e.companyLogoFallbackUrl,subTextType:"none",isPlugin:e.isPlugin}))))),a.createElement(i.Z,Object.assign({},b.O.getDetailsColumns(),{className:"d-flex position-relative flex-column px-0 px-md-2 pb-0 pb-sm-2 pb-md-0 justify-content-md-between"}),a.createElement("div",null,a.createElement("div",{className:"d-flex justify-content-between"},a.createElement("div",{className:"flex-grow-1"},a.createElement(y.$,Object.assign({},Z,{video:e.video,appLink:U,type:e.subTextType})),a.createElement(p.u,Object.assign({},Z,{video:e.video,appLink:M,size:P,yearGroups:e.yearGroups}))),a.createElement(v.H,Object.assign({},Z,{video:e.video,showSignIn:e.showSignIn,signInAppLink:null===(A=e.getSignInAppLink)||void 0===A?void 0:A.call(e,M)}))),!D&&a.createElement(u.g,{video:e.video,showSignIn:e.showSignIn}),a.createElement(g.B,{video:e.video,yearGroups:e.yearGroups})),!e.hideVideoGuidance&&a.createElement(d.u,Object.assign({video:e.video,getVideoAppLink:e.getVideoAppLink,getClassroomGuideAppLink:e.getClassroomGuideAppLink,getResourceGuidanceAppLink:e.getResourceGuidanceAppLink,getInteractiveGuidanceAppLink:e.getInteractiveGuidanceAppLink,containerClassName:"d-flex justify-content-start align-items-center pt-sm-1 gap-1",responsiveClassName:"ggZzR"},Z)))))}));A.defaultProps={dragHandleIcon:I.vn.Handle,dragHandleIconSize:s.S.Small,size:"md"};var L=function(e){return a.createElement(l.W,{id:e.video.id,childComponent:A,childProps:e})}},51365:(e,n,t)=>{t.d(n,{M:()=>a});var a=t(32735).createContext(null)}}]);
2
+ //# sourceMappingURL=3231-b46a5ecb6a-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/3231-b46a5ecb6a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/common/src/backbone/utils/ScrollHelper.ts","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/drag-drop-move/DragDropMoveWrapper.tsx","file:///app/packages/libs/shared/src/components/pagination/Pagination.tsx","file:///app/packages/libs/shared/src/components/sortable/SortableContainerWrapper.tsx","file:///app/packages/libs/shared/src/components/sortable/SortableItemWrapper.tsx","file:///app/packages/libs/shared/src/components/video-list/video-list.scss","file:///app/packages/libs/shared/src/components/video-list/VideoList.tsx","file:///app/packages/libs/shared/src/components/video-list/VideoListHelper.tsx","file:///app/packages/libs/shared/src/components/video-list/clip-item/ClipItem.tsx","file:///app/packages/libs/shared/src/components/video-list/clip-item/clip-item.scss","file:///app/packages/libs/shared/src/components/video-list/components/video-item-actions/VideoItemActions.tsx","file:///app/packages/libs/shared/src/components/video-list/components/video-item-left-content/video-item-left-content.scss","file:///app/packages/libs/shared/src/components/video-list/components/video-item-left-content/VideoItemLeftContent.tsx","file:///app/packages/libs/shared/src/components/sign-in-to-watch/SignInToWatch.tsx","file:///app/packages/libs/shared/src/components/video-list/components/video-item-top-right/VideoItemTopRight.tsx","file:///app/packages/libs/shared/src/components/video-list/interactive-item/InteractiveItem.tsx","file:///app/packages/libs/shared/src/components/video-list/video-item/VideoItem.tsx","file:///app/packages/libs/shared/src/components/video-list/video-item/video-item.scss","file:///app/packages/libs/shared/src/context/VideoActionsContext.tsx"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}","import React from 'react';\nimport { useDraggable, UseDraggableArguments, useDroppable, UseDroppableArguments } from '@dnd-kit/core';\n\ninterface DragDropMoveWrapperProps extends React.PropsWithChildren {\n droppable?: UseDroppableArguments,\n draggable?: UseDraggableArguments\n dragStyle?: string;\n dropStye?: string;\n setIsDragging?: React.Dispatch<React.SetStateAction<boolean>>\n isDragging?: boolean;\n}\n\nexport function DragDropMoveWrapper(props: DragDropMoveWrapperProps) {\n const {\n active: dragActive,\n isDragging,\n attributes,\n listeners,\n setNodeRef: draggableRef\n } = useDraggable({ ...props.draggable, disabled: !props.draggable, attributes: { role: 'drag', tabIndex: -1 } });\n const {\n isOver,\n over,\n active: dropActive,\n setNodeRef: droppableRef\n } = useDroppable({ ...props.droppable, disabled: !props.droppable });\n\n React.useEffect(() => {\n const data = props.draggable?.data;\n if (Array.isArray(data) && data?.includes(dragActive?.id.toString())) {\n props.setIsDragging?.(isDragging);\n } else {\n props.setIsDragging?.(false);\n }\n }, [isDragging]);\n\n function isSelected() {\n const data = props.draggable?.data;\n return Array.isArray(data) && data.includes(props.draggable.id.toString());\n }\n\n return (\n <div\n ref={draggableRef}\n {...listeners}\n {...attributes}\n className={`${props.draggable ? 'cursor-grab' : 'cursor-default'} ${(isDragging && dragActive) || (props.isDragging && isSelected()) ? props.dragStyle : null}`}\n >\n <div\n ref={droppableRef}\n className={(dropActive && isOver && dragActive?.id !== over?.id) ? props.dropStye : null}\n >\n {props.children}\n </div>\n </div>\n );\n}","import * as React from 'react';\nimport { Button, ButtonProps } from 'react-bootstrap';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nfunction buildCursor(appLink: Core.AppLink, cursorParam: string, prevHack?: boolean): Core.AppLink {\n if (!cursorParam)\n return null;\n\n const currentParams = appLink.params as HashObject ?? {};\n /* \n Currently the pagination for My Videos shows the previous cursor in the first page cursor,\n so instead of using the previous cursor from the response, the current cursor is being passed\n as the previous cursor in the app link\n */\n\n if (prevHack) {\n if (!currentParams?.previous) {\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: null,\n previous: null\n }\n };\n }\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: currentParams?.previous,\n previous: null\n }\n };\n }\n\n return {\n application: appLink.application,\n action: appLink.action,\n args: appLink.args,\n params: {\n ...currentParams,\n cursor: cursorParam,\n previous: currentParams.cursor\n }\n };\n}\n\ninterface CursorPaginationProps {\n cursors: Cursors;\n appLink?: Core.AppLink;\n className?: string;\n buttonVariant?: ButtonProps['variant'];\n prevHack?: boolean;\n scrollTop?: boolean;\n onClick?: (cursor: string) => void;\n}\n\nPagination.defaultProps = {\n className: 'py-2',\n buttonVariant: 'secondary'\n};\n\nexport function Pagination(\n { appLink, cursors, className, buttonVariant, prevHack, scrollTop, onClick }: CursorPaginationProps\n): JSX.Element {\n function onClickButton(page: 'next' | 'previous'): void {\n if (appLink && !scrollTop)\n ScrollHelper.preventScrollTop();\n\n AnalyticsHelper.logUserAction({ page }, {\n location: LocationContext.Pagination,\n entity: EntityType.Pagination,\n actionType: UserAction.Navigate\n });\n\n if (onClick)\n onClick(cursors[page]);\n }\n\n if (appLink) {\n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <AppLink\n appLink={buildCursor(appLink, cursors.previous, prevHack)}\n className={`btn btn-${buttonVariant} me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='previous' />\n </AppLink>\n \n <AppLink\n appLink={buildCursor(appLink, cursors.next)}\n className={`btn btn-${buttonVariant} ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n // make sure disabled button and clickable button looks the same\n style={{ display: 'inline-block' }}\n >\n <Text phrase='next' />\n </AppLink>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n }\n \n return (\n <LanguageNamespaceContext.Provider value='shared.pagination'>\n <div className={className}>\n <Button\n variant={buttonVariant}\n className={`me-1 ${!cursors.previous ? 'disabled' : ''}`}\n onClick={() => onClickButton('previous')}\n >\n <Text phrase='previous' />\n </Button>\n <Button\n variant={buttonVariant}\n className={`btn ${!cursors.next ? 'disabled' : ''}`}\n onClick={() => onClickButton('next')}\n >\n <Text phrase='next' />\n </Button>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\nimport {\n closestCenter,\n DndContext,\n DragEndEvent,\n DragOverlay,\n DragStartEvent,\n DropAnimation,\n KeyboardSensor,\n Modifiers,\n PointerSensor,\n useSensor,\n useSensors } from '@dnd-kit/core';\nimport {\n restrictToVerticalAxis\n} from '@dnd-kit/modifiers';\nimport {\n rectSortingStrategy,\n SortableContext,\n sortableKeyboardCoordinates,\n SortingStrategy,\n verticalListSortingStrategy } from '@dnd-kit/sortable';\n\ninterface SortableContainerWrapperProps {\n ids: string[];\n getDragOverlay: (id: string) => JSX.Element;\n onSortEnd: (event: DragEndEvent) => void;\n onSortStart?: (event: DragStartEvent) => void;\n dropAnimation?: DropAnimation;\n disabled?: boolean;\n vertical?: boolean;\n}\n\nSortableContainerWrapper.defaultProps = {\n dropAnimation: { duration: 250, easing: 'ease' },\n vertical: true\n};\n\nexport function SortableContainerWrapper(\n props: React.PropsWithChildren<SortableContainerWrapperProps>\n): JSX.Element {\n const [ activeId, setActiveId ] = React.useState(null);\n\n function onSortStart(event: DragStartEvent): void {\n setActiveId(event.active.id);\n props.onSortStart?.(event);\n }\n\n function onSortEnd(event: DragEndEvent): void {\n setActiveId(null);\n props.onSortEnd(event);\n }\n\n function getModifiers(): Modifiers {\n if (!props.vertical)\n return [];\n\n return [restrictToVerticalAxis];\n }\n\n function getSortingStrategy(): SortingStrategy {\n if (props.vertical)\n return verticalListSortingStrategy;\n\n return rectSortingStrategy;\n }\n\n const sensors = useSensors(\n useSensor(PointerSensor, {\n activationConstraint: {\n distance: 10\n }\n }),\n useSensor(KeyboardSensor, {\n coordinateGetter: sortableKeyboardCoordinates\n })\n );\n \n if (props.disabled)\n return <>{props.children}</>;\n\n return (\n <DndContext\n sensors={sensors}\n collisionDetection={closestCenter}\n onDragStart={onSortStart}\n onDragEnd={onSortEnd}\n modifiers={getModifiers()}\n >\n <SortableContext\n items={props.ids}\n strategy={getSortingStrategy()}\n >\n {props.children}\n </SortableContext>\n\n <DragOverlay dropAnimation={props.dropAnimation}>\n {activeId ? props.getDragOverlay(activeId) : null}\n </DragOverlay>\n </DndContext>\n );\n}","import React from 'react';\nimport { DraggableAttributes } from '@dnd-kit/core';\nimport { useSortable } from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ntype DragDirection = 'up' | 'down';\n\nexport type PropsWithSortableItemProps<T> = T & {\n dragAttributes?: DraggableAttributes;\n dragListeners?: HashObject;\n dragDirection?: DragDirection;\n};\n\ninterface SortableItemWrapperProps<TProps> {\n id: string;\n childProps: TProps;\n childComponent: (props: PropsWithSortableItemProps<TProps>) => JSX.Element;\n}\n\nfunction getDragDirection(index: number, activeIndex: number, overIndex: number): DragDirection {\n if (activeIndex !== index)\n return null;\n\n if (overIndex > activeIndex)\n return 'down';\n\n if (overIndex < activeIndex)\n return 'up';\n\n return null;\n}\n\nexport function SortableItemWrapper<TProps>(props: SortableItemWrapperProps<TProps>): JSX.Element {\n const {\n setNodeRef,\n transform,\n transition,\n isSorting,\n listeners,\n attributes,\n activeIndex,\n overIndex,\n index\n } = useSortable({ id: props.id });\n\n const style: HashObject = {\n transform: CSS.Transform.toString(transform),\n transition,\n touchAction: 'none',\n position: 'relative'\n };\n\n if (isSorting && index === activeIndex) {\n style.visibility = 'hidden';\n }\n\n const Children = props.childComponent;\n const dragDirection = getDragDirection(index, activeIndex, overIndex);\n\n return (\n <Children\n {...props.childProps}\n ref={setNodeRef}\n style={style}\n dragListeners={listeners}\n dragAttributes={attributes}\n dragDirection={dragDirection}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"sortableVideo\":\"xaH09\",\"videoList\":\"kO5Q0\",\"badgeContainer\":\"FP8l5\",\"dragStyle\":\"HF8j1\"};","import * as React from 'react';\nimport { DragEndEvent, DragStartEvent } from '@dnd-kit/core';\n\nimport { Cursors } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { DragDropMoveWrapper } from 'libs/shared/components/drag-drop-move/DragDropMoveWrapper';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { SortableContainerWrapper } from 'libs/shared/components/sortable/SortableContainerWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CanFavouriteFunc, FavouriteFunc, InteractiveMetadata, PresentationAudience, Video, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ClipItem, ClipItemProps, SortableClipItem } from './clip-item/ClipItem';\nimport { InteractiveItem, InteractiveItemProps, SortableInteractiveItem } from './interactive-item/InteractiveItem';\nimport { SortableVideoItem, VideoItem, VideoItemProps } from './video-item/VideoItem';\n\nimport styles from './video-list.scss';\n\nconst namespace = 'shared.videoList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ItemComponent = (props: ClipItemProps | InteractiveItemProps | VideoItemProps) => JSX.Element;\n\nfunction getItemComponent(video: VideoTypes, isSortable: boolean): ItemComponent {\n if (VideoHelper.isClip(video))\n return isSortable ? SortableClipItem : ClipItem;\n\n if (VideoHelper.isInteractive(video))\n return isSortable ? SortableInteractiveItem : InteractiveItem;\n\n return isSortable ? SortableVideoItem : VideoItem;\n}\n\ninterface SortableVideoListContextProps {\n isSortable: boolean;\n currentSortingIndex?: number;\n}\n\nexport const SortableVideoListContext = React.createContext<SortableVideoListContextProps>({\n isSortable: false\n});\n\nexport interface VideoListProps {\n videos: VideoTypes[];\n yearGroups?: YearGroup[];\n getVideoAppLink: (video: VideoTypes, options: GetVideoAppLinkOptions) => Core.AppLink;\n getSignInAppLink?: (appLink: Core.AppLink) => Core.AppLink;\n getPreviewQuestionsAppLink?: (interactive: InteractiveMetadata) => Core.AppLink;\n getSubTextAppLink?: (video: Video) => Core.AppLink;\n getInteractiveGuidanceAppLink?: (id: string, type: MasterType) => Core.AppLink;\n getResourceGuidanceAppLink?: (id: string, type: MasterType) => Core.AppLink;\n getClassroomGuideAppLink?: (id: string, type: MasterType) => Core.AppLink;\n hideVideoGuidance?: boolean;\n setFavourite?: FavouriteFunc;\n canFavourite?: CanFavouriteFunc;\n cursors?: Cursors;\n dragHandleIcon?: string;\n dragHandleIconSize?: SvgContainerSize;\n showSignIn?: boolean;\n showIndexes?: boolean;\n startingPositionIndex?: number;\n canRemovePrivateVideos?: boolean;\n presentationAudiences?: PresentationAudience[];\n allowBulkAction?: boolean;\n getVideosBulkAction?: (items: string[]) => ActionOptions[];\n drag?: boolean;\n typeFilter?: SearchIndices | SearchIndices[];\n checkboxHelper?: BulkCheckboxManager;\n companyLogoFallbackUrl?: string;\n subTextType?: VideoSubTextType;\n hasPermissions: HasPermissionsFunc;\n imageCdnUrl?: string;\n isPlugin: boolean;\n}\n\nexport function VideoList(props: VideoListProps): JSX.Element {\n const { isSortable } = React.useContext(SortableVideoListContext);\n const [ isDragging, setIsDragging ] = React.useState<boolean>(false);\n const { checkboxHelper: CheckboxHelper } = props;\n \n const currentAppLink = Core.AppLinkHelper.getCurrentAppLink();\n\n return (\n <>\n <div className={`position-relative ${styles.videoList}`}>\n \n {props.videos.map((v, idx) => {\n const Component = getItemComponent(v, isSortable);\n \n /**\n * Where we're provided with a starting position index by the parent, \n * we'll use that as the starting position instead of the local index.\n */\n const pagePositionStartingIndex = Number.isInteger(props.startingPositionIndex)\n ? props.startingPositionIndex\n : 0;\n\n const dragData = CheckboxHelper && CheckboxHelper.getSelectedCount() > 1 && CheckboxHelper.isChecked(v.id)\n ? CheckboxHelper.getSelected()\n : v;\n\n return (\n <DragDropMoveWrapper\n draggable={(props.drag && !isSortable) && ({ id: v.id, data: dragData })}\n dragStyle={styles.dragStyle}\n isDragging={isDragging}\n setIsDragging={setIsDragging}\n key={`${v.id}:${idx}`}\n >\n <div className='d-flex flex-row align-items-center'>\n {props.allowBulkAction && (\n <Checkbox\n className='mx-0 mx-md-2'\n id={v.id}\n ariaLabel={`${getPhrase('ariaBulkAction')}: ${v.name}`}\n onChange={() => CheckboxHelper.onToggleItem(v.id)}\n checked={CheckboxHelper.isChecked(v.id)}\n />\n )}\n <Component\n video={v}\n yearGroups={props.yearGroups}\n index={idx}\n getVideoAppLink={props.getVideoAppLink}\n getSubTextAppLink={props.getSubTextAppLink}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n analyticsData={{\n pagePositionIndex: pagePositionStartingIndex + idx\n }}\n hasPermissions={props.hasPermissions}\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n presentationAudiences={props.presentationAudiences}\n showIndexes={props.showIndexes}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n getPreviewQuestionsAppLink={props.getPreviewQuestionsAppLink}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n hideVideoGuidance={props.hideVideoGuidance}\n />\n </div>\n </DragDropMoveWrapper>\n );\n })}\n </div>\n\n {props.cursors &&\n <Pagination appLink={currentAppLink} cursors={props.cursors} />\n }\n </>\n );\n}\n\ninterface SortableVideoListProps extends VideoListProps {\n currentSortingIndex?: number;\n onSortEnd: (event: DragEndEvent) => void;\n onSortStart: (event: DragStartEvent) => void;\n\n}\n\nexport const SortableVideoList = (props: SortableVideoListProps) => {\n const ids = props.videos.map(v => v.id);\n\n const getDragOverlay = (id: string) => {\n const video = props.videos.find(v => v.id === id);\n const Component = getItemComponent(video, true);\n\n return (\n <div className={`bg-white ${styles.sortableVideo}`}>\n <SortableVideoListContext.Provider value={{ isSortable: true }}>\n <Component\n video={video}\n yearGroups={props.yearGroups}\n getVideoAppLink={props.getVideoAppLink}\n getSubTextAppLink={props.getSubTextAppLink}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n showSignIn={props.showSignIn}\n getSignInAppLink={props.getSignInAppLink}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType={props.subTextType}\n hasPermissions={props.hasPermissions}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n hideVideoGuidance={props.hideVideoGuidance}\n />\n </SortableVideoListContext.Provider>\n </div>\n );\n };\n\n return (\n <SortableContainerWrapper\n ids={ids}\n getDragOverlay={getDragOverlay}\n onSortEnd={props.onSortEnd}\n onSortStart={props.onSortStart}\n >\n <SortableVideoListContext.Provider value={{ isSortable: true, currentSortingIndex: props.currentSortingIndex }}>\n <VideoList {...props} />\n </SortableVideoListContext.Provider>\n </SortableContainerWrapper>\n );\n};","import { ColProps } from 'react-bootstrap';\n\nimport { VideoItemSize } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nexport const VideoListHelper = {\n getThumbnailColumns(): ColProps {\n return {\n xs: 12,\n sm: 5,\n lg: 3\n };\n },\n\n getDetailsColumns(): ColProps {\n return {\n xs: 12,\n sm: 7,\n lg: 9\n };\n },\n\n getSize(breakpoints: Breakpoints, size: VideoItemSize): VideoItemSize {\n if (breakpoints.sm)\n return 'sm';\n \n return size || 'md';\n },\n\n getThumbnailColSize(hasDragHandle: boolean): number {\n return hasDragHandle ? 10 : 12;\n }\n};","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Clip } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './clip-item.scss';\n\nexport type ClipItemProps = BaseVideoItemProps<Clip>;\n\nexport const ClipItem = React.forwardRef((props: ClipItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n \n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Clip,\n location: LocationContext.ClipListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n showSignIn={props.showSignIn}\n subTextType='none'\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n />\n </Col>\n </Row>\n </Col>\n\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className={`${isSmall ? 'pb-2' : 'px-2'} d-flex position-relative flex-column`}\n >\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.yearGroups}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n \n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n <div>\n {!isSmall && (\n <VideoItemDescription video={props.video} showSignIn={props.showSignIn} />\n )}\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.yearGroups}/>\n </div>\n\n {VideoHelper.showVideoGuidance(props.hasPermissions) && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n containerClassName={`d-flex justify-content-start align-items-center pt-sm-1 gap-1`}\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableClipItemProps = ClipItemProps & {\n index: number;\n};\n\nexport const SortableClipItem = (props: SortableClipItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={ClipItem} childProps={props} />\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"responsiveGuidance\":\"_4ms1w\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { Actions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { Video } from 'libs/shared/interfaces';\n\ninterface VideoItemActionsProps {\n video: Video;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemActions(props: VideoItemActionsProps): JSX.Element {\n const videoActions = React.useContext(VideoActionsContext);\n\n if (!FunctionHelper.isFunction(videoActions?.getVideoActions))\n return <></>;\n\n const actions = videoActions.getVideoActions(props.video, {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions\n });\n\n return (\n <Actions\n actions={actions}\n className='align-items-start gap-2'\n actionsDropdownClassName='btn btn-link py-0'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n fetchMore={videoActions.fetchMoreActions ? () => videoActions.fetchMoreActions(props.video) : null}\n customSize\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dragHandleContainer\":\"mcAFC\"};","import React from 'react';\nimport { Col } from 'react-bootstrap';\n\nimport { PropsWithSortableItemProps } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './video-item-left-content.scss';\n\ninterface VideoItemLeftContentProps {\n index: number;\n showDragHandle: boolean;\n showIndexes: boolean;\n dragHandleIcon: string;\n dragHandleIconSize: SvgContainerSize;\n}\n\nfunction getClassName(showDragHandle: boolean): string {\n const baseClassName = 'd-flex justify-content-center align-items-center';\n if (!showDragHandle) return baseClassName;\n\n return `${baseClassName} cursor-pointer ${styles.dragHandleContainer}`;\n}\n\nexport function VideoItemLeftContent(props: PropsWithSortableItemProps<VideoItemLeftContentProps>): JSX.Element {\n const dragProps = props.showDragHandle ? { ...props.dragAttributes, ...props.dragListeners } : {};\n const className = getClassName(props.showDragHandle);\n\n if (!props.showDragHandle && !props.showIndexes) return <></>;\n\n return (\n <Col\n xs={2}\n className={className}\n {...dragProps}\n >\n {!!props.showDragHandle &&\n <SvgContainer svgName={props.dragHandleIcon} size={props.dragHandleIconSize} />\n }\n {!!props.showIndexes &&\n <span className='fw-semibold'>{props.index + 1}</span>\n }\n </Col>\n );\n}\n\nVideoItemLeftContent.defaultProps = {\n dragHandleIcon: cvSvgLibrary.Handle,\n dragHandleIconSize: SvgContainerSize.Small\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.signInToWatch';\n\ninterface SignInToWatchProps {\n appLink: Core.AppLink\n className: string;\n}\n\nexport function SignInToWatch(props: SignInToWatchProps): React.ReactElement {\n return (\n <AppLink appLink={props.appLink} className={props.className}>\n <Text namespace={namespace} phrase='signInToWatch'></Text>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { SignInToWatch } from 'libs/shared/components/sign-in-to-watch/SignInToWatch';\nimport { VideoItemActions } from 'libs/shared/components/video-list/components/video-item-actions/VideoItemActions';\nimport { Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ninterface VideoItemTopRightProps {\n video: Video;\n showSignIn: boolean;\n signInAppLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport function VideoItemTopRight(props: VideoItemTopRightProps): JSX.Element {\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n if (props.showSignIn && !canNavigate)\n return <SignInToWatch appLink={props.signInAppLink} className='btn btn-outline-dark' />;\n\n return (\n <VideoItemActions\n video={props.video}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n />\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { InteractiveItemQuestions } from 'libs/shared/components/video-list/interactive-item/InteractiveItemQuestions';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport type InteractiveItemProps = BaseVideoItemProps<InteractiveMetadata> & {\n getPreviewQuestionsAppLink: (interactive: InteractiveMetadata) => Core.AppLink;\n imageCdnUrl?: string;\n};\n\nexport const InteractiveItem = React.forwardRef((props: InteractiveItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const mergedAudience = useMergeAudiences(props.video.subjectPresentationAudiences?.data, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink(props.video, {});\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: {\n entity: EntityType.Interactive,\n location: LocationContext.InteractiveListItem\n }\n };\n\n const { canNavigate } = VideoHelper.getCanBeConsumed(props.video);\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className='row g-0 py-2' ref={ref} style={props.style}>\n <Col {...VideoListHelper.getThumbnailColumns()} className={`flex-column align-items-flex-start ${isSmall ? `pb-2 pe-2` : 'mb-1 px-2'}`}>\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n audience={mergedAudience}\n imageOptions={{ size: ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n type='static'\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n showSignIn={props.showSignIn}\n subTextType='none'\n hideDuration={isSmall}\n imageCdnUrl={props.imageCdnUrl}\n isPlugin={props.isPlugin}\n />\n </Col>\n </Row>\n </Col>\n\n <Col {...VideoListHelper.getDetailsColumns()} className={`position-relative ${isSmall ? 'pb-2' : 'px-2'}`}>\n <div className='d-flex justify-content-between'>\n <VideoItemTitle\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.yearGroups}\n linkClassName='flex-grow-1'\n {...analyticsProps}\n />\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n\n {canNavigate ? (\n <div className='pt-sm-1 pt-md-0'>\n <InteractiveItemQuestions\n timepoints={props.video._timepoints?.value}\n appLink={appLink}\n previewAppLink={props.getPreviewQuestionsAppLink(props.video)}\n />\n </div>\n ) : (\n <VideoItemDescription video={props.video} showSignIn={props.showSignIn} />\n )}\n\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.yearGroups}/>\n </Col>\n </div>\n </div>\n );\n});\n\ntype SortableInteractiveItemProps = InteractiveItemProps & {\n index: number;\n}\n\nexport const SortableInteractiveItem = (props: SortableInteractiveItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={InteractiveItem} childProps={props} />\n );\n};","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { SortableItemWrapper } from 'libs/shared/components/sortable/SortableItemWrapper';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BaseVideoItemProps } from 'libs/shared/components/video-list/BaseVideoItemProps';\nimport { VideoItemGuidance } from 'libs/shared/components/video-list/components/video-guidance/VideoItemGuidance';\nimport { VideoItemDescription } from 'libs/shared/components/video-list/components/video-item-description/VideoItemDescription';\nimport { VideoItemLeftContent } from 'libs/shared/components/video-list/components/video-item-left-content/VideoItemLeftContent';\nimport { VideoItemRestrictionBadge } from 'libs/shared/components/video-list/components/video-item-restriction-badge/VideoItemRestrictionBadge';\nimport { VideoItemTitle } from 'libs/shared/components/video-list/components/video-item-title/VideoItemTitle';\nimport { VideoItemTopRight } from 'libs/shared/components/video-list/components/video-item-top-right/VideoItemTopRight';\nimport { SortableVideoListContext } from 'libs/shared/components/video-list/VideoList';\nimport { VideoListHelper } from 'libs/shared/components/video-list/VideoListHelper';\nimport { VideoSubText, VideoSubTextType } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { Video } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './video-item.scss';\n\nexport type VideoItemProps = BaseVideoItemProps<Video> & {\n getSubTextAppLink: (video: Video) => Core.AppLink;\n subTextType?: VideoSubTextType;\n isPlugin: boolean;\n};\n\nexport const VideoItem = React.forwardRef((props: VideoItemProps, ref: React.LegacyRef<HTMLDivElement>) => {\n const breakpoints = useBreakpoints();\n const [ hoverRef, hovered ] = useHover<HTMLDivElement>();\n\n const size = VideoListHelper.getSize(breakpoints, props.size);\n\n const isSmall = size === 'sm';\n\n const { isSortable } = React.useContext(SortableVideoListContext);\n\n const videoAudiences = props.video?.subjectPresentationAudiences?.data;\n const mergedAudience = useMergeAudiences(videoAudiences, props.presentationAudiences);\n\n const showDragHandle = isSortable && !breakpoints.xs && (hovered || typeof props.index === 'undefined' || !props.showIndexes);\n const showIndexes = (props.showIndexes && !showDragHandle) && !breakpoints.xs;\n const hasIconOrIndex = (showDragHandle || props.showIndexes) && !breakpoints.xs;\n\n const appLink = props.getVideoAppLink?.(props.video, {});\n\n function getSubTextAppLink(): Core.AppLink {\n return props.getSubTextAppLink?.(props.video);\n }\n\n const subTextAppLink = getSubTextAppLink();\n const analyticsProps = {\n analyticsData: props.analyticsData,\n analyticsOptions: props.analyticsOptions ?? {\n entity: EntityType.Video,\n location: LocationContext.VideoListItem\n }\n };\n\n return (\n <div ref={hoverRef} className='w-100'>\n <div className={`row g-0 ${isSmall ? '' : 'py-2'}`} style={props.style} ref={ref}>\n <Col\n {...VideoListHelper.getThumbnailColumns()}\n className={`flex-column align-items-flex-start mb-1 mb-sm-0 pb-sm-2 pe-sm-2 px-md-2 pb-md-0`}\n >\n <Row>\n <VideoItemLeftContent\n index={props.index}\n showDragHandle={showDragHandle}\n showIndexes={showIndexes}\n dragHandleIcon={props.dragHandleIcon}\n dragHandleIconSize={props.dragHandleIconSize}\n dragAttributes={props.dragAttributes}\n dragListeners={props.dragListeners}\n />\n \n <Col xs={VideoListHelper.getThumbnailColSize(hasIconOrIndex)}>\n <VideoThumbnail\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n audience={mergedAudience}\n imageOptions={{ size: hasIconOrIndex ? ImageSize.Small : ImageSize.Medium }}\n textPosition={ThumbnailTextPosition.Independent}\n setFavourite={props.setFavourite}\n canFavourite={props.canFavourite}\n type='static'\n canRemovePrivateVideos={props.canRemovePrivateVideos}\n showSignIn={props.showSignIn}\n hideRating={false}\n companyLogoFallbackUrl={props.companyLogoFallbackUrl}\n subTextType='none'\n isPlugin={props.isPlugin}\n />\n </Col>\n </Row>\n </Col>\n <Col\n {...VideoListHelper.getDetailsColumns()}\n className={`d-flex position-relative flex-column px-0 px-md-2 pb-0 pb-sm-2 pb-md-0 justify-content-md-between`}\n >\n <div>\n <div className='d-flex justify-content-between'>\n <div className='flex-grow-1'>\n <VideoSubText\n {...analyticsProps}\n video={props.video}\n appLink={subTextAppLink}\n type={props.subTextType}\n />\n <VideoItemTitle\n {...analyticsProps}\n video={props.video}\n appLink={appLink}\n size={size}\n yearGroups={props.yearGroups}\n />\n </div>\n <VideoItemTopRight\n {...analyticsProps}\n video={props.video}\n showSignIn={props.showSignIn}\n signInAppLink={props.getSignInAppLink?.(appLink)}\n />\n </div>\n \n\n {!isSmall && (\n <VideoItemDescription video={props.video} showSignIn={props.showSignIn} />\n )}\n\n <VideoItemRestrictionBadge video={props.video} yearGroups={props.yearGroups}/>\n </div>\n\n {!props.hideVideoGuidance && (\n <VideoItemGuidance\n video={props.video}\n getVideoAppLink={props.getVideoAppLink}\n getClassroomGuideAppLink={props.getClassroomGuideAppLink}\n getResourceGuidanceAppLink={props.getResourceGuidanceAppLink}\n getInteractiveGuidanceAppLink={props.getInteractiveGuidanceAppLink}\n containerClassName={`d-flex justify-content-start align-items-center pt-sm-1 gap-1`}\n responsiveClassName={styles.responsiveGuidance}\n {...analyticsProps}\n />\n )}\n </Col>\n </div>\n </div>\n );\n});\n\nVideoItem.defaultProps = {\n dragHandleIcon: cvSvgLibrary.Handle,\n dragHandleIconSize: SvgContainerSize.Small,\n size: 'md'\n};\n\ntype SortableVideoItemProps = VideoItemProps & {\n index: number;\n};\n\nexport const SortableVideoItem = (props: SortableVideoItemProps) => {\n return (\n <SortableItemWrapper id={props.video.id} childComponent={VideoItem} childProps={props} />\n );\n};","// extracted by mini-css-extract-plugin\nexport default {\"responsiveGuidance\":\"ggZzR\"};","import * as React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces/AnalyticsTypes';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface VideoActionsOptions {\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\ntype GetVideoActions = (video: VideoTypes, options: VideoActionsOptions) => ActionOptions[];\ntype FetchMoreActions = (video: VideoTypes) => void;\n\ninterface VideoActionsContextData {\n getVideoActions: GetVideoActions;\n fetchMoreActions?: FetchMoreActions;\n}\n\nexport const VideoActionsContext = React.createContext<VideoActionsContextData>(null);"],"names":["ScrollHelper","preventScrollTop","Radio","trigger","Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","map","idx","key","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","id","size","showDivider","undefined","group","Tooltip","defaultProps","S","DragDropMoveWrapper","data","draggable","attributes","dragActive","active","isDragging","listeners","draggableRef","setNodeRef","droppable","isOver","over","dropActive","droppableRef","Array","isArray","includes","toString","setIsDragging","ref","dragStyle","dropStye","children","buildCursor","cursorParam","prevHack","currentParams","params","previous","application","args","cursor","Pagination","cursors","buttonVariant","scrollTop","onClickButton","page","location","entity","actionType","value","display","phrase","next","variant","SortableContainerWrapper","activeId","setActiveId","sensors","activationConstraint","distance","coordinateGetter","collisionDetection","onDragStart","event","onSortStart","onDragEnd","onSortEnd","modifiers","vertical","items","ids","strategy","dropAnimation","getDragOverlay","duration","easing","SortableItemWrapper","transform","transition","isSorting","activeIndex","overIndex","index","touchAction","position","visibility","Children","childComponent","dragDirection","getDragDirection","childProps","dragListeners","dragAttributes","getPhrase","LanguageService","getItemComponent","video","isSortable","VideoHelper","ClipItem","InteractiveItem","VideoItem","SortableVideoListContext","VideoList","CheckboxHelper","checkboxHelper","currentAppLink","videos","v","Component","pagePositionStartingIndex","Number","isInteger","startingPositionIndex","dragData","getSelectedCount","isChecked","getSelected","drag","allowBulkAction","Checkbox","ariaLabel","name","onChange","onToggleItem","checked","yearGroups","getVideoAppLink","getSubTextAppLink","setFavourite","canFavourite","dragHandleIcon","dragHandleIconSize","showSignIn","getSignInAppLink","pagePositionIndex","hasPermissions","canRemovePrivateVideos","presentationAudiences","showIndexes","companyLogoFallbackUrl","subTextType","getPreviewQuestionsAppLink","imageCdnUrl","isPlugin","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","hideVideoGuidance","SortableVideoList","find","Provider","currentSortingIndex","VideoListHelper","getThumbnailColumns","xs","sm","lg","getDetailsColumns","getSize","breakpoints","getThumbnailColSize","hasDragHandle","useBreakpoints","hoverRef","hovered","isSmall","mergedAudience","subjectPresentationAudiences","showDragHandle","hasIconOrIndex","analyticsProps","Col","Row","VideoItemLeftContent","VideoThumbnail","audience","imageOptions","textPosition","ThumbnailTextPosition","VideoItemTitle","linkClassName","VideoItemTopRight","signInAppLink","VideoItemDescription","VideoItemRestrictionBadge","VideoItemGuidance","containerClassName","responsiveClassName","SortableClipItem","VideoItemActions","videoActions","getVideoActions","fetchMoreActions","baseClassName","dragProps","namespace","SignInToWatch","Text","canNavigate","hideDuration","timepoints","_timepoints","previewAppLink","SortableInteractiveItem","videoAudiences","subTextAppLink","hideRating","VideoSubText","SortableVideoItem","VideoActionsContext"],"sourceRoot":""}