@clickview/streamable-learning 0.48.0-rc.0 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. package/dist/.vite/manifest.json +650 -650
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/DU3tPCD_.chunk.css +12 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{CeWjJPIz.chunk.js → BIisq8ZO.chunk.js} +2 -2
  6. package/dist/scripts/{CeWjJPIz.chunk.js.map → BIisq8ZO.chunk.js.map} +1 -1
  7. package/dist/scripts/{DxsW8K0n2.chunk.js → BWU6_pPN2.chunk.js} +2 -2
  8. package/dist/scripts/{DxsW8K0n2.chunk.js.map → BWU6_pPN2.chunk.js.map} +1 -1
  9. package/dist/scripts/{BMjES83N2.chunk.js → BcZFo9Vw2.chunk.js} +2 -2
  10. package/dist/scripts/{BMjES83N2.chunk.js.map → BcZFo9Vw2.chunk.js.map} +1 -1
  11. package/dist/scripts/Bd2bbHru.chunk.js +1 -0
  12. package/dist/scripts/{0xQRFMBY.chunk.js → BfNy0Hvk.chunk.js} +2 -2
  13. package/dist/scripts/{0xQRFMBY.chunk.js.map → BfNy0Hvk.chunk.js.map} +1 -1
  14. package/dist/scripts/{C9UjF0q6.chunk.js → BivP7X20.chunk.js} +2 -2
  15. package/dist/scripts/{C9UjF0q6.chunk.js.map → BivP7X20.chunk.js.map} +1 -1
  16. package/dist/scripts/{DrDQfaFN2.chunk.js → BjbY4Fbp2.chunk.js} +3 -3
  17. package/dist/scripts/{DrDQfaFN2.chunk.js.map → BjbY4Fbp2.chunk.js.map} +1 -1
  18. package/dist/scripts/{awemA_vU2.chunk.js → BmxcE73n2.chunk.js} +2 -2
  19. package/dist/scripts/{awemA_vU2.chunk.js.map → BmxcE73n2.chunk.js.map} +1 -1
  20. package/dist/scripts/{BMl02f_62.chunk.js → BnEMhkEE2.chunk.js} +2 -2
  21. package/dist/scripts/{BMl02f_62.chunk.js.map → BnEMhkEE2.chunk.js.map} +1 -1
  22. package/dist/scripts/{DmfbtOlu.chunk.js → Buc8GegC.chunk.js} +2 -2
  23. package/dist/scripts/{DmfbtOlu.chunk.js.map → Buc8GegC.chunk.js.map} +1 -1
  24. package/dist/scripts/{DvL3J2BU.chunk.js → Byczy1lS.chunk.js} +2 -2
  25. package/dist/scripts/{DvL3J2BU.chunk.js.map → Byczy1lS.chunk.js.map} +1 -1
  26. package/dist/scripts/{BV74ZRR22.chunk.js → C2itEpvc2.chunk.js} +2 -2
  27. package/dist/scripts/{BV74ZRR22.chunk.js.map → C2itEpvc2.chunk.js.map} +1 -1
  28. package/dist/scripts/{UAcFqQzZ.chunk.js → CEFKXxac.chunk.js} +2 -2
  29. package/dist/scripts/{UAcFqQzZ.chunk.js.map → CEFKXxac.chunk.js.map} +1 -1
  30. package/dist/scripts/{B7if0Lk52.chunk.js → CEYjJAp52.chunk.js} +2 -2
  31. package/dist/scripts/{B7if0Lk52.chunk.js.map → CEYjJAp52.chunk.js.map} +1 -1
  32. package/dist/scripts/{B1jitqYS2.chunk.js → CJSc4YDq2.chunk.js} +2 -2
  33. package/dist/scripts/{B1jitqYS2.chunk.js.map → CJSc4YDq2.chunk.js.map} +1 -1
  34. package/dist/scripts/{JtFbyaXc.chunk.js → CKUA5J3R.chunk.js} +2 -2
  35. package/dist/scripts/{JtFbyaXc.chunk.js.map → CKUA5J3R.chunk.js.map} +1 -1
  36. package/dist/scripts/{DNO0KpY72.chunk.js → CYrzupmS2.chunk.js} +2 -2
  37. package/dist/scripts/{DNO0KpY72.chunk.js.map → CYrzupmS2.chunk.js.map} +1 -1
  38. package/dist/scripts/{E9tNds1l.chunk.js → CcGYZb9f.chunk.js} +2 -2
  39. package/dist/scripts/{E9tNds1l.chunk.js.map → CcGYZb9f.chunk.js.map} +1 -1
  40. package/dist/scripts/{CibcLNJP2.chunk.js → CeQGaFi-2.chunk.js} +2 -2
  41. package/dist/scripts/{CibcLNJP2.chunk.js.map → CeQGaFi-2.chunk.js.map} +1 -1
  42. package/dist/scripts/{BqO6i89w2.chunk.js → Cr3Blj6H2.chunk.js} +2 -2
  43. package/dist/scripts/{BqO6i89w2.chunk.js.map → Cr3Blj6H2.chunk.js.map} +1 -1
  44. package/dist/scripts/{D0vsmyva.chunk.js → CxCkwLio.chunk.js} +2 -2
  45. package/dist/scripts/{D0vsmyva.chunk.js.map → CxCkwLio.chunk.js.map} +1 -1
  46. package/dist/scripts/{CvqqZmNo2.chunk.js → Cxj75Dqe2.chunk.js} +2 -2
  47. package/dist/scripts/{CvqqZmNo2.chunk.js.map → Cxj75Dqe2.chunk.js.map} +1 -1
  48. package/dist/scripts/{CcDgbmw52.chunk.js → D-VNmhoM2.chunk.js} +2 -2
  49. package/dist/scripts/{CcDgbmw52.chunk.js.map → D-VNmhoM2.chunk.js.map} +1 -1
  50. package/dist/scripts/{DAvXFgC62.chunk.js → D2FqnK9m2.chunk.js} +2 -2
  51. package/dist/scripts/{DAvXFgC62.chunk.js.map → D2FqnK9m2.chunk.js.map} +1 -1
  52. package/dist/scripts/{lokG7Sha2.chunk.js → D3sdyN2Q2.chunk.js} +2 -2
  53. package/dist/scripts/{lokG7Sha2.chunk.js.map → D3sdyN2Q2.chunk.js.map} +1 -1
  54. package/dist/scripts/{KCdpQ8qv2.chunk.js → D6IzS-bj2.chunk.js} +2 -2
  55. package/dist/scripts/{KCdpQ8qv2.chunk.js.map → D6IzS-bj2.chunk.js.map} +1 -1
  56. package/dist/scripts/{CPkKuTSK2.chunk.js → D8g6nOG92.chunk.js} +2 -2
  57. package/dist/scripts/{CPkKuTSK2.chunk.js.map → D8g6nOG92.chunk.js.map} +1 -1
  58. package/dist/scripts/{Bkv1Tbyu.chunk.js → DCKKwz9L.chunk.js} +2 -2
  59. package/dist/scripts/{Bkv1Tbyu.chunk.js.map → DCKKwz9L.chunk.js.map} +1 -1
  60. package/dist/scripts/{CeI-LCE-.chunk.js → DL4UFxRK.chunk.js} +2 -2
  61. package/dist/scripts/{CeI-LCE-.chunk.js.map → DL4UFxRK.chunk.js.map} +1 -1
  62. package/dist/scripts/{DLp7yHzT2.chunk.js → DLofRa642.chunk.js} +2 -2
  63. package/dist/scripts/{DLp7yHzT2.chunk.js.map → DLofRa642.chunk.js.map} +1 -1
  64. package/dist/scripts/{BSjm_rCE.chunk.js → DMZ--ok1.chunk.js} +2 -2
  65. package/dist/scripts/{BSjm_rCE.chunk.js.map → DMZ--ok1.chunk.js.map} +1 -1
  66. package/dist/scripts/{CikSQKH-.chunk.js → DQFcbMMk.chunk.js} +2 -2
  67. package/dist/scripts/{CikSQKH-.chunk.js.map → DQFcbMMk.chunk.js.map} +1 -1
  68. package/dist/scripts/{XnBhLH-02.chunk.js → DVeqPzBe2.chunk.js} +2 -2
  69. package/dist/scripts/{XnBhLH-02.chunk.js.map → DVeqPzBe2.chunk.js.map} +1 -1
  70. package/dist/scripts/{Clh6wBrg.chunk.js → DWerltCT.chunk.js} +2 -2
  71. package/dist/scripts/{Clh6wBrg.chunk.js.map → DWerltCT.chunk.js.map} +1 -1
  72. package/dist/scripts/{i2-k6ULv2.chunk.js → DatscYpA2.chunk.js} +2 -2
  73. package/dist/scripts/{i2-k6ULv2.chunk.js.map → DatscYpA2.chunk.js.map} +1 -1
  74. package/dist/scripts/{BXT8nHry2.chunk.js → DkaGC5IU2.chunk.js} +2 -2
  75. package/dist/scripts/{BXT8nHry2.chunk.js.map → DkaGC5IU2.chunk.js.map} +1 -1
  76. package/dist/scripts/{BoxedFO8.chunk.js → DqZWSPDJ.chunk.js} +2 -2
  77. package/dist/scripts/{BoxedFO8.chunk.js.map → DqZWSPDJ.chunk.js.map} +1 -1
  78. package/dist/scripts/{CoYNU7We2.chunk.js → Dql-1E6g2.chunk.js} +2 -2
  79. package/dist/scripts/{CoYNU7We2.chunk.js.map → Dql-1E6g2.chunk.js.map} +1 -1
  80. package/dist/scripts/{DNNNPLMp.chunk.js → DuBHin02.chunk.js} +2 -2
  81. package/dist/scripts/{DNNNPLMp.chunk.js.map → DuBHin02.chunk.js.map} +1 -1
  82. package/dist/scripts/{CK6c6uHp2.chunk.js → QMuFwiiF2.chunk.js} +2 -2
  83. package/dist/scripts/{CK6c6uHp2.chunk.js.map → QMuFwiiF2.chunk.js.map} +1 -1
  84. package/dist/scripts/{NV4_mMU8.chunk.js → U_sIlzAD.chunk.js} +2 -2
  85. package/dist/scripts/{NV4_mMU8.chunk.js.map → U_sIlzAD.chunk.js.map} +1 -1
  86. package/dist/scripts/{m9QbGES0.chunk.js → WLyOm9Lj.chunk.js} +2 -2
  87. package/dist/scripts/{m9QbGES0.chunk.js.map → WLyOm9Lj.chunk.js.map} +1 -1
  88. package/dist/scripts/{DlQrdOls.chunk.js → Ymq7JLkU.chunk.js} +2 -2
  89. package/dist/scripts/{DlQrdOls.chunk.js.map → Ymq7JLkU.chunk.js.map} +1 -1
  90. package/dist/scripts/{app-B1XBsz23.js → app-gjHxcZG3.js} +4 -4
  91. package/dist/scripts/app-gjHxcZG3.js.map +1 -0
  92. package/dist/scripts/{DIHDe4Sg.chunk.js → djRnI462.chunk.js} +2 -2
  93. package/dist/scripts/{DIHDe4Sg.chunk.js.map → djRnI462.chunk.js.map} +1 -1
  94. package/dist/scripts/{BDliRFoa.chunk.js → e2K2YU7z.chunk.js} +2 -2
  95. package/dist/scripts/{BDliRFoa.chunk.js.map → e2K2YU7z.chunk.js.map} +1 -1
  96. package/dist/scripts/{CpFOQcL7.chunk.js → fnfhCa1P.chunk.js} +2 -2
  97. package/dist/scripts/{CpFOQcL7.chunk.js.map → fnfhCa1P.chunk.js.map} +1 -1
  98. package/dist/scripts/{Dd8r1SE32.chunk.js → iyIL3kim2.chunk.js} +2 -2
  99. package/dist/scripts/{Dd8r1SE32.chunk.js.map → iyIL3kim2.chunk.js.map} +1 -1
  100. package/dist/scripts/{BKbKu9Rp.chunk.js → kfFYr9dc.chunk.js} +2 -2
  101. package/dist/scripts/{BKbKu9Rp.chunk.js.map → kfFYr9dc.chunk.js.map} +1 -1
  102. package/dist/scripts/{CwI-7tep2.chunk.js → kts5xiiM2.chunk.js} +2 -2
  103. package/dist/scripts/{CwI-7tep2.chunk.js.map → kts5xiiM2.chunk.js.map} +1 -1
  104. package/dist/scripts/{D8_5yfHY2.chunk.js → lLAYbgAy2.chunk.js} +2 -2
  105. package/dist/scripts/{D8_5yfHY2.chunk.js.map → lLAYbgAy2.chunk.js.map} +1 -1
  106. package/dist/scripts/{CXNve4Wq2.chunk.js → p9ukva5a2.chunk.js} +2 -2
  107. package/dist/scripts/{CXNve4Wq2.chunk.js.map → p9ukva5a2.chunk.js.map} +1 -1
  108. package/dist/scripts/{BCdnm1Nn.chunk.js → wOeN2ls0.chunk.js} +2 -2
  109. package/dist/scripts/{BCdnm1Nn.chunk.js.map → wOeN2ls0.chunk.js.map} +1 -1
  110. package/dist/scripts/{DMq5Gp-U2.chunk.js → zp2BHOp82.chunk.js} +2 -2
  111. package/dist/scripts/{DMq5Gp-U2.chunk.js.map → zp2BHOp82.chunk.js.map} +1 -1
  112. package/dist/scripts/{CmrPRojb.chunk.js → zyVwH8JF.chunk.js} +2 -2
  113. package/dist/scripts/{CmrPRojb.chunk.js.map → zyVwH8JF.chunk.js.map} +1 -1
  114. package/package.json +1 -1
  115. package/dist/scripts/D5Jnyjf8.chunk.js +0 -1
  116. package/dist/scripts/app-B1XBsz23.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{b as e,gt as t}from"./Dp9qJj1C.chunk.js";import{i as n,n as r,r as i,t as a,v as o}from"./BJvPfCvt.chunk.js";import{lt as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./Ca1QPe-q2.chunk.js";import{t as d}from"./Cz6swPXe2.chunk.js";import{H as f}from"./app-B1XBsz23.js";var p=t(l()),m=s();function h(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{d:`M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3`,fill:`currentColor`})})}var g={dropdownToggle:`_dropdownToggle_1jkd1_1`};function _(){return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`8rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`12rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`11rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`9rem`}})})]})}function v(e){let t=`dropdown-item`;return e&&(t+=` ${e}`),t}function y(t){let n=o.isFunction(t.action.label)?t.action.label():(0,m.jsx)(m.Fragment,{children:t.action.label});if(t.action.appLink)return(0,m.jsxs)(u,{appLink:t.action.appLink,onClick:t.action.onClick,className:v(t.action.className),analyticsData:t.action.analyticsData,analyticsOptions:t.action.analyticsOptions,openInNewTab:t.action.openInNewTab,disabled:t.action.disabled,children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2 align-middle`}),(0,m.jsx)(`span`,{className:`align-middle`,children:n})]});function r(n){n.preventDefault(),t.action.analyticsData&&t.action.analyticsOptions&&c.logUserAction(t.action.analyticsData,t.action.analyticsOptions),o.isFunction(t.action.onClick)&&t.action.onClick(),t.action.href&&e.PageLoad(t.action.href,t.action.openInNewTab)}return t.action.href?(0,m.jsxs)(`a`,{className:v(t.action.className),onClick:r,href:t.action.href,children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2 align-middle`}),(0,m.jsx)(`span`,{className:`align-middle`,children:n})]}):(0,m.jsxs)(`span`,{className:`cursor-pointer ${v(t.action.className)}`,onClick:r,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&r(e),children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2`}),n]})}b.defaultProps={dropdownToggleClassName:`btn btn-light`,dropdownToggleSvgSize:r.Small};function b(e){if(!e.actions||!e.actions.length)return(0,m.jsx)(m.Fragment,{});let t=e.actions.some(e=>e.lazyPlaceholder),r=`dropdown`;e.className&&(r+=` ${e.className}`);let o=`actions-dropdown-${n.getRandomInt()}`,s=`dropdown-toggle px-0 ${g.dropdownToggle}`;e.dropdownToggleClassName&&(s+=` ${e.dropdownToggleClassName}`);let c;return(0,m.jsxs)(`div`,{className:r,children:[(0,m.jsx)(`button`,{className:s,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,children:(0,m.jsx)(a,{svg:h,size:e.dropdownToggleSvgSize})}),(0,m.jsx)(`ul`,{className:`dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal`,"aria-labelledby":o,children:t?(0,m.jsx)(_,{}):e.actions.map((e,t)=>{let n=c!==void 0&&c!==e.group;return c=e.group,e.tooltip?(0,m.jsxs)(`li`,{children:[n&&(0,m.jsx)(`hr`,{className:`dropdown-divider`,role:`separator`}),(0,m.jsx)(i,{title:e.tooltip,spanHack:!0,children:(0,m.jsx)(y,{action:e})})]},t):(0,m.jsxs)(`li`,{children:[n&&(0,m.jsx)(`hr`,{className:`dropdown-divider`,role:`separator`}),(0,m.jsx)(y,{action:e})]},t)})})]})}function x(e){let t=p.useMemo(()=>e.actions.sort((e,t)=>e.order-t.order),[e.actions]),n=[],r=[];t.forEach(e=>{e.button?n.push(e):r.push(e)});let i=`d-flex`;return e.className&&(i+=` ${e.className}`),!n.length&&!r.length?(0,m.jsx)(m.Fragment,{}):(0,m.jsxs)(`div`,{className:i,children:[n.length?n.map((t,n)=>(0,m.jsx)(p.Fragment,{children:(()=>{if(t.label){let n=o.isFunction(t.label)?t.label():(0,m.jsx)(m.Fragment,{children:t.label});return(0,m.jsx)(f,{appLink:t.appLink,href:t.href,onClick:t.onClick,svg:t.svg,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,children:n})}return(0,m.jsx)(d,{appLink:t.appLink,href:t.href,onClick:t.onClick,svg:t.svg,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize,ariaLabel:t.tooltip,tooltip:t.tooltip})})()},n)):(0,m.jsx)(m.Fragment,{}),e.sortComponent&&e.sortComponent,r.length?(0,m.jsx)(b,{actions:r,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):(0,m.jsx)(m.Fragment,{})]})}export{x as t};
2
- //# sourceMappingURL=CikSQKH-.chunk.js.map
1
+ import{b as e,gt as t}from"./Dp9qJj1C.chunk.js";import{i as n,n as r,r as i,t as a,v as o}from"./BJvPfCvt.chunk.js";import{lt as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./Ca1QPe-q2.chunk.js";import{t as d}from"./Cz6swPXe2.chunk.js";import{H as f}from"./app-gjHxcZG3.js";var p=t(l()),m=s();function h(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{d:`M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3`,fill:`currentColor`})})}var g={dropdownToggle:`_dropdownToggle_1jkd1_1`};function _(){return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`8rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`12rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`11rem`}})}),(0,m.jsx)(`div`,{style:{padding:`0.53125rem 1rem`},children:(0,m.jsx)(`div`,{className:`partial-loading-background`,style:{height:`1.0625rem`,width:`9rem`}})})]})}function v(e){let t=`dropdown-item`;return e&&(t+=` ${e}`),t}function y(t){let n=o.isFunction(t.action.label)?t.action.label():(0,m.jsx)(m.Fragment,{children:t.action.label});if(t.action.appLink)return(0,m.jsxs)(u,{appLink:t.action.appLink,onClick:t.action.onClick,className:v(t.action.className),analyticsData:t.action.analyticsData,analyticsOptions:t.action.analyticsOptions,openInNewTab:t.action.openInNewTab,disabled:t.action.disabled,children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2 align-middle`}),(0,m.jsx)(`span`,{className:`align-middle`,children:n})]});function r(n){n.preventDefault(),t.action.analyticsData&&t.action.analyticsOptions&&c.logUserAction(t.action.analyticsData,t.action.analyticsOptions),o.isFunction(t.action.onClick)&&t.action.onClick(),t.action.href&&e.PageLoad(t.action.href,t.action.openInNewTab)}return t.action.href?(0,m.jsxs)(`a`,{className:v(t.action.className),onClick:r,href:t.action.href,children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2 align-middle`}),(0,m.jsx)(`span`,{className:`align-middle`,children:n})]}):(0,m.jsxs)(`span`,{className:`cursor-pointer ${v(t.action.className)}`,onClick:r,role:`button`,tabIndex:0,onKeyDown:e=>e.key===`Enter`&&r(e),children:[t.action.svg&&(0,m.jsx)(a,{svg:t.action.svg,className:`d-inline-block svg-container me-2`}),n]})}b.defaultProps={dropdownToggleClassName:`btn btn-light`,dropdownToggleSvgSize:r.Small};function b(e){if(!e.actions||!e.actions.length)return(0,m.jsx)(m.Fragment,{});let t=e.actions.some(e=>e.lazyPlaceholder),r=`dropdown`;e.className&&(r+=` ${e.className}`);let o=`actions-dropdown-${n.getRandomInt()}`,s=`dropdown-toggle px-0 ${g.dropdownToggle}`;e.dropdownToggleClassName&&(s+=` ${e.dropdownToggleClassName}`);let c;return(0,m.jsxs)(`div`,{className:r,children:[(0,m.jsx)(`button`,{className:s,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,children:(0,m.jsx)(a,{svg:h,size:e.dropdownToggleSvgSize})}),(0,m.jsx)(`ul`,{className:`dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal`,"aria-labelledby":o,children:t?(0,m.jsx)(_,{}):e.actions.map((e,t)=>{let n=c!==void 0&&c!==e.group;return c=e.group,e.tooltip?(0,m.jsxs)(`li`,{children:[n&&(0,m.jsx)(`hr`,{className:`dropdown-divider`,role:`separator`}),(0,m.jsx)(i,{title:e.tooltip,spanHack:!0,children:(0,m.jsx)(y,{action:e})})]},t):(0,m.jsxs)(`li`,{children:[n&&(0,m.jsx)(`hr`,{className:`dropdown-divider`,role:`separator`}),(0,m.jsx)(y,{action:e})]},t)})})]})}function x(e){let t=p.useMemo(()=>e.actions.sort((e,t)=>e.order-t.order),[e.actions]),n=[],r=[];t.forEach(e=>{e.button?n.push(e):r.push(e)});let i=`d-flex`;return e.className&&(i+=` ${e.className}`),!n.length&&!r.length?(0,m.jsx)(m.Fragment,{}):(0,m.jsxs)(`div`,{className:i,children:[n.length?n.map((t,n)=>(0,m.jsx)(p.Fragment,{children:(()=>{if(t.label){let n=o.isFunction(t.label)?t.label():(0,m.jsx)(m.Fragment,{children:t.label});return(0,m.jsx)(f,{appLink:t.appLink,href:t.href,onClick:t.onClick,svg:t.svg,svgSize:e.dropdownToggleSvgSize,className:t.className,tooltip:t.tooltip,showSpinner:t.showSpinner,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,children:n})}return(0,m.jsx)(d,{appLink:t.appLink,href:t.href,onClick:t.onClick,svg:t.svg,className:t.className,analyticsData:t.analyticsData,analyticsOptions:t.analyticsOptions,openInNewTab:t.openInNewTab,disabled:t.disabled,showBorder:t.showBorder,customSize:e.customSize,ariaLabel:t.tooltip,tooltip:t.tooltip})})()},n)):(0,m.jsx)(m.Fragment,{}),e.sortComponent&&e.sortComponent,r.length?(0,m.jsx)(b,{actions:r,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):(0,m.jsx)(m.Fragment,{})]})}export{x as t};
2
+ //# sourceMappingURL=DQFcbMMk.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CikSQKH-.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/actions/MoreSvg.tsx","../../../../libs/shared/src/components/actions/actions.module.scss","../../../../libs/shared/src/components/actions/ActionsDropdown.tsx","../../../../libs/shared/src/components/actions/Actions.tsx"],"sourcesContent":["import React from 'react';\n\nexport function MoreSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n // Hide dropdown arrow\n .dropdownToggle:after {\n content: none;\n }\n}","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 { MoreSvg } from 'libs/shared/images/svg/actions/MoreSvg';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.module.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.svg && <SvgContainer svg={props.action.svg} 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.svg && <SvgContainer svg={props.action.svg} 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.svg && <SvgContainer svg={props.action.svg} 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 svg={MoreSvg} 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}\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 { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\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 svg?: SvgIcon;\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: JSX.Element = 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 svg={a.svg}\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 return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\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 ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\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}\n"],"mappings":"uTAEA,SAAgB,EAAQ,EAAsC,CAC5D,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,YACP,EAAA,EAAA,KAAC,OAAD,CACE,EAAE,kIACF,KAAK,eACL,CAAA,CACE,CAAA,kDEQV,SAAS,GAAiC,CACxC,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,QAAS,kBAAmB,WACxC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,QAAgB,CAAA,CAC7F,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,QAAS,kBAAmB,WACxC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,SAAiB,CAAA,CAC9F,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,QAAS,kBAAmB,WACxC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,SAAiB,CAAA,CAC9F,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,MAAO,CAAE,QAAS,kBAAmB,WACxC,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BAA6B,MAAO,CAAE,OAAQ,YAAa,MAAO,QAAgB,CAAA,CAC7F,CAAA,CACL,CAAA,CAAA,CAIP,SAAS,EAAyB,EAAkC,CAClE,IAAI,EAAY,gBAKhB,OAHI,IACF,GAAa,IAAI,KAEZ,EAST,SAAS,EAAoB,EAAqD,CAChF,IAAM,EAAQ,EAAe,WAAW,EAAM,OAAO,MAAM,CACzD,EAAM,OAAO,OAAO,EACpB,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SAAG,EAAM,OAAO,MAAS,CAAA,CAE3B,GAAI,EAAM,OAAO,QACf,OACE,EAAA,EAAA,MAAC,EAAD,CACE,QAAS,EAAM,OAAO,QACtB,QAAS,EAAM,OAAO,QACtB,UAAW,EAAyB,EAAM,OAAO,UAAU,CAC3D,cAAe,EAAM,OAAO,cAC5B,iBAAkB,EAAM,OAAO,iBAC/B,aAAc,EAAM,OAAO,aAC3B,SAAU,EAAM,OAAO,kBAPzB,CASG,EAAM,OAAO,MAAO,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAM,OAAO,IAAK,UAAU,iDAAmD,CAAA,EACvH,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,wBAAgB,EAAa,CAAA,CAAA,GAInD,SAAS,EAAQ,EAAiD,CAChE,EAAE,gBAAgB,CAEd,EAAM,OAAO,eAAiB,EAAM,OAAO,kBAC7C,EAAgB,cAAc,EAAM,OAAO,cAAe,EAAM,OAAO,iBAAiB,CAEtF,EAAe,WAAW,EAAM,OAAO,QAAQ,EACjD,EAAM,OAAO,SAAS,CAEpB,EAAM,OAAO,MACf,EAAmB,SAAS,EAAM,OAAO,KAAM,EAAM,OAAO,aAAa,CAgB7E,OAbI,EAAM,OAAO,MAEb,EAAA,EAAA,MAAC,IAAD,CACE,UAAW,EAAyB,EAAM,OAAO,UAAU,CAClD,UACT,KAAM,EAAM,OAAO,cAHrB,CAKG,EAAM,OAAO,MAAO,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAM,OAAO,IAAK,UAAU,iDAAmD,CAAA,EACvH,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,wBAAgB,EAAa,CAAA,CAAA,IAMjD,EAAA,EAAA,MAAC,OAAD,CACE,UAAW,kBAAkB,EAAyB,EAAM,OAAO,UAAU,GACpE,UACT,KAAK,SACL,SAAU,EACV,UAAY,GAA2B,EAAE,MAAQ,SAAW,EAAQ,EAAE,UALxE,CAOG,EAAM,OAAO,MAAO,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAM,OAAO,IAAK,UAAU,oCAAsC,CAAA,CACzG,EAAA,GAaP,EAAgB,aAAe,CAC7B,wBAAyB,gBACzB,sBAAuB,EAAiB,MACzC,CAED,SAAgB,EAAgB,EAAiD,CAC/E,GAAI,CAAC,EAAM,SAAW,CAAC,EAAM,QAAQ,OACnC,OAAO,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,CAEd,IAAM,EAAS,EAAM,QAAQ,KAAK,GAAK,EAAE,gBAAgB,CAErD,EAAY,WAEZ,EAAM,YACR,GAAa,IAAI,EAAM,aAGzB,IAAM,EAAmB,oBAAoB,EAAa,cAAc,GAEpE,EAA0B,wBAAwB,EAAO,iBAEzD,EAAM,0BACR,GAA2B,IAAI,EAAM,2BAEvC,IAAI,EAEJ,OACE,EAAA,EAAA,MAAC,MAAD,CAAgB,qBAAhB,EACE,EAAA,EAAA,KAAC,SAAD,CACE,UAAW,EACX,KAAK,SACL,GAAI,EACJ,iBAAe,WACf,cAAY,WACZ,gBAAc,OACd,gBAAc,QACd,aAAW,wBACX,QAAS,EAAS,EAAM,UAAY,eAEpC,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAS,KAAM,EAAM,sBAAyB,CAAA,CAC1D,CAAA,EACT,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,uEAAuE,kBAAiB,WACnG,GACC,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,CACrB,EAAM,QAAQ,KAAK,EAAG,IAAQ,CAC5B,IAAM,EAAc,IAAiB,IAAA,IAAa,IAAiB,EAAE,MAerE,MAdA,GAAe,EAAE,MAEb,EAAE,SAEF,EAAA,EAAA,MAAC,KAAD,CAAA,SAAA,CACG,IAAe,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,mBAAmB,KAAK,YAAiB,CAAA,EACvE,EAAA,EAAA,KAAC,EAAD,CAAS,MAAO,EAAE,QAAS,SAAA,aACzB,EAAA,EAAA,KAAC,EAAD,CAAqB,OAAQ,EAAK,CAAA,CAC1B,CAAA,CAEP,CAAA,CANI,EAMJ,EAKP,EAAA,EAAA,MAAC,KAAD,CAAA,SAAA,CACG,IAAe,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,mBAAmB,KAAK,YAAiB,CAAA,EACvE,EAAA,EAAA,KAAC,EAAD,CAAqB,OAAQ,EAAK,CAAA,CAC/B,CAAA,CAHI,EAGJ,GAIR,CAAA,CAAA,GC5IX,SAAgB,EAAQ,EAAkC,CACxD,IAAM,EAAA,EAAuB,YAAc,EAAM,QAAQ,MAAM,EAAG,IAAM,EAAE,MAAQ,EAAE,MAAM,CAAE,CAAC,EAAM,QAAQ,CAAC,CAEtG,EAAiC,EAAE,CACnC,EAA+B,EAAE,CAEvC,EAAe,QAAQ,GAAK,CACtB,EAAE,OACJ,EAAc,KAAK,EAAE,CAErB,EAAY,KAAK,EAAE,EACrB,CAEF,IAAI,EAAY,SAQhB,OANI,EAAM,YACR,GAAa,IAAI,EAAM,aAErB,CAAC,EAAc,QAAU,CAAC,EAAY,QACjC,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EAGZ,EAAA,EAAA,MAAC,MAAD,CAAgB,qBAAhB,CACG,EAAc,OAAS,EAAc,KAAK,EAAG,KAC5C,EAAA,EAAA,KAAA,EAAO,SAAP,CAAA,cACU,CACN,GAAI,EAAE,MAAO,CACX,IAAM,EAAqB,EAAe,WAAW,EAAE,MAAM,CAC3D,EAAE,OAAO,EACT,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SAAG,EAAE,MAAS,CAAA,CAEhB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EAAE,QACX,KAAM,EAAE,KACR,QAAS,EAAE,QACX,IAAK,EAAE,IACP,QAAS,EAAM,sBACf,UAAW,EAAE,UACb,QAAS,EAAE,QACX,YAAa,EAAE,YACf,cAAe,EAAE,cACjB,iBAAkB,EAAE,iBACpB,aAAc,EAAE,aAChB,SAAU,EAAE,kBAEX,EACY,CAAA,CAInB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EAAE,QACX,KAAM,EAAE,KACR,QAAS,EAAE,QACX,IAAK,EAAE,IACP,UAAW,EAAE,UACb,cAAe,EAAE,cACjB,iBAAkB,EAAE,iBACpB,aAAc,EAAE,aAChB,SAAU,EAAE,SACZ,WAAY,EAAE,WACd,WAAY,EAAM,WAClB,UAAW,EAAE,QACb,QAAS,EAAE,QACX,CAAA,IAEF,CACW,CA7CI,EA6CJ,CACjB,EAAG,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,CACT,EAAM,eAAiB,EAAM,cAC7B,EAAY,QACX,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EACT,wBAAyB,EAAM,yBAC/B,sBAAuB,EAAM,sBAC7B,UAAW,EAAM,UACjB,CAAA,EACA,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"DQFcbMMk.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/actions/MoreSvg.tsx","../../../../libs/shared/src/components/actions/actions.module.scss","../../../../libs/shared/src/components/actions/ActionsDropdown.tsx","../../../../libs/shared/src/components/actions/Actions.tsx"],"sourcesContent":["import React from 'react';\n\nexport function MoreSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n // Hide dropdown arrow\n .dropdownToggle:after {\n content: none;\n }\n}","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 { MoreSvg } from 'libs/shared/images/svg/actions/MoreSvg';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.module.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.svg && <SvgContainer svg={props.action.svg} 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.svg && <SvgContainer svg={props.action.svg} 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.svg && <SvgContainer svg={props.action.svg} 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 svg={MoreSvg} 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}\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 { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\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 svg?: SvgIcon;\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: JSX.Element = 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 svg={a.svg}\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 return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\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 ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\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}\n"],"mappings":"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"}
@@ -1,8 +1,8 @@
1
- import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{r as n,t as r}from"./BJvPfCvt.chunk.js";import{t as i}from"./ImQRQGZr.chunk.js";import{C as a,T as o,c as s,dt as c,l,lt as u,m as d,n as f,ut as p}from"./Dun43GrB.chunk.js";import{t as m}from"./B-OL6Vs7.chunk.js";import{l as h}from"./BQ5XMoHG.chunk.js";import{t as g}from"./ibuOpDkQ.chunk.js";import{t as _}from"./DeldjYRc.chunk.js";import{t as v}from"./BYYiNmLB.chunk.js";import{n as y,t as b}from"./Ca1QPe-q2.chunk.js";import{a as x}from"./D2om474U2.chunk.js";import{t as S}from"./X4vTaPlk.chunk.js";import{t as C}from"./C6L8Y-TQ.chunk.js";import{E as w,N as T,R as E,X as D,z as O}from"./app-B1XBsz23.js";import{t as k}from"./CnDOpuFK.chunk.js";import{t as A}from"./NrXAMmgy2.chunk.js";import{t as j}from"./Ct5auYPr2.chunk.js";import{t as M}from"./BK011l4Q2.chunk.js";import{i as N,t as P}from"./DobKejA8.chunk.js";import{n as F,t as I}from"./CpFOQcL7.chunk.js";import{t as L}from"./BA8QDRzp.chunk.js";var R=w(),z=e(p()),B={imageStyle:`_imageStyle_1xzbz_1`,item:`_item_1xzbz_6`,dashboard:`_dashboard_1xzbz_10`,playPage:`_playPage_1xzbz_24`,aspectRatio:`_aspectRatio_1xzbz_32`,outerContainer:`_outerContainer_1xzbz_37`,innerContainer:`_innerContainer_1xzbz_45`,actions:`_actions_1xzbz_45`,titleBelow:`_titleBelow_1xzbz_55`,heading:`_heading_1xzbz_58`,thumbnailContainer:`_thumbnailContainer_1xzbz_61`,titleAbove:`_titleAbove_1xzbz_64`,teacherPack:`_teacherPack_1xzbz_67`,text:`_text_1xzbz_67`,hoverState:`_hoverState_1xzbz_73`,atomGuide:`_atomGuide_1xzbz_76`,studentActivity:`_studentActivity_1xzbz_85`,additionalMaterials:`_additionalMaterials_1xzbz_94`,userUploaded:`_userUploaded_1xzbz_103`,imageTypeResource:`_imageTypeResource_1xzbz_112`,download:`_download_1xzbz_118`},V=u();function H(e){switch(e){case`atom-guide`:return B.atomGuide;case`student-activity`:return B.studentActivity;case`teacher-pack`:return B.teacherPack;case`additional-materials`:return B.additionalMaterials;default:return B.userUploaded}}function U(e,t){let n=T();return t===`public`?!0:n.xs||n.sm||e.type!==`resource`||!(`metadata`in e)?!1:e.metadata.type===A.Image?!0:e.metadata.type===A.Pdf?!!e.url:!!e.pdf?.url}W.defaultProps={preloadImage:!0,actionBehaviour:`normal`};function W(e){let t=null;`metadata`in e.data&&(t=e.data.metadata);let i=k.isType(e.data,S.Resource);function a(t){let n=`
1
+ import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{r as n,t as r}from"./BJvPfCvt.chunk.js";import{t as i}from"./ImQRQGZr.chunk.js";import{C as a,T as o,c as s,dt as c,l,lt as u,m as d,n as f,ut as p}from"./Dun43GrB.chunk.js";import{t as m}from"./B-OL6Vs7.chunk.js";import{l as h}from"./BQ5XMoHG.chunk.js";import{t as g}from"./ibuOpDkQ.chunk.js";import{t as _}from"./DeldjYRc.chunk.js";import{t as v}from"./BYYiNmLB.chunk.js";import{n as y,t as b}from"./Ca1QPe-q2.chunk.js";import{a as x}from"./D2om474U2.chunk.js";import{t as S}from"./X4vTaPlk.chunk.js";import{t as C}from"./C6L8Y-TQ.chunk.js";import{E as w,N as T,R as E,X as D,z as O}from"./app-gjHxcZG3.js";import{t as k}from"./CnDOpuFK.chunk.js";import{t as A}from"./NrXAMmgy2.chunk.js";import{t as j}from"./Ct5auYPr2.chunk.js";import{t as M}from"./BK011l4Q2.chunk.js";import{i as N,t as P}from"./DobKejA8.chunk.js";import{n as F,t as I}from"./fnfhCa1P.chunk.js";import{t as L}from"./BA8QDRzp.chunk.js";var R=w(),z=e(p()),B={imageStyle:`_imageStyle_1xzbz_1`,item:`_item_1xzbz_6`,dashboard:`_dashboard_1xzbz_10`,playPage:`_playPage_1xzbz_24`,aspectRatio:`_aspectRatio_1xzbz_32`,outerContainer:`_outerContainer_1xzbz_37`,innerContainer:`_innerContainer_1xzbz_45`,actions:`_actions_1xzbz_45`,titleBelow:`_titleBelow_1xzbz_55`,heading:`_heading_1xzbz_58`,thumbnailContainer:`_thumbnailContainer_1xzbz_61`,titleAbove:`_titleAbove_1xzbz_64`,teacherPack:`_teacherPack_1xzbz_67`,text:`_text_1xzbz_67`,hoverState:`_hoverState_1xzbz_73`,atomGuide:`_atomGuide_1xzbz_76`,studentActivity:`_studentActivity_1xzbz_85`,additionalMaterials:`_additionalMaterials_1xzbz_94`,userUploaded:`_userUploaded_1xzbz_103`,imageTypeResource:`_imageTypeResource_1xzbz_112`,download:`_download_1xzbz_118`},V=u();function H(e){switch(e){case`atom-guide`:return B.atomGuide;case`student-activity`:return B.studentActivity;case`teacher-pack`:return B.teacherPack;case`additional-materials`:return B.additionalMaterials;default:return B.userUploaded}}function U(e,t){let n=T();return t===`public`?!0:n.xs||n.sm||e.type!==`resource`||!(`metadata`in e)?!1:e.metadata.type===A.Image?!0:e.metadata.type===A.Pdf?!!e.url:!!e.pdf?.url}W.defaultProps={preloadImage:!0,actionBehaviour:`normal`};function W(e){let t=null;`metadata`in e.data&&(t=e.data.metadata);let i=k.isType(e.data,S.Resource);function a(t){let n=`
2
2
  d-flex flex-column align-items-center justify-content-end rounded-3 h-100
3
3
  position-relative ${H(t)} ${B.innerContainer}`;return e.theme?.containerClass?n+=` ${e.theme.containerClass}`:n+=` pt-3 px-3`,e.applyHoverState&&(n+=` ${B.hoverState}`),n}function o(){k.isResource(e.data)&&typeof e.onClickDownload==`function`&&e.onClickDownload(e.data)}return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:B.aspectRatio,children:(0,V.jsx)(`div`,{className:B.outerContainer,children:(0,V.jsxs)(`div`,{className:a(t?.resourceType),children:[e.titlePosition===`above`&&(0,V.jsx)(n,{title:e.data.name,children:(0,V.jsx)(`h3`,{className:`text-center text-break h5 mb-3 ${B.text}`,children:(0,V.jsx)(`span`,{className:`clamp-1`,children:e.data.name})})}),(0,V.jsx)(`div`,{className:`
4
4
  ${e.theme?.thumbnailContainerClass??``} w-75 overflow-hidden
5
5
  ${B.thumbnailContainer} ${e.titlePosition===`above`?B.titleAbove:``}
6
6
  ${B.imageStyle}
7
7
  `,children:(0,V.jsx)(F,{resource:e.data,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:e.dynamicRatioImageOptions})}),i&&e.onClickDownload&&e.actionBehaviour===`normal`&&(0,V.jsx)(`div`,{className:B.actions,children:(0,V.jsx)(y,{onClick:e=>{e.preventDefault(),e.stopPropagation(),o()},className:`${B.download} d-flex align-items-center justify-content-center`,children:(0,V.jsx)(r,{svg:M})})}),!e.hideTypeBadge&&i&&(0,V.jsx)(P,{typeId:S.Resource})]})})}),e.titlePosition===`below`&&(0,V.jsxs)(`div`,{className:`mt-2 ${B.titleBelow}`,children:[k.isType(e.data,S.Resource)&&!!e.data?.metadata?.resourceType&&(0,V.jsx)(N,{children:I.getResourceTypeName(e.data.metadata.resourceType)}),(0,V.jsx)(`h3`,{className:`h6 clamp-2 ${B.heading}`,children:e.data.name})]})]})}z.memo(function(e){let n=U(e.data,e.actionBehaviour);function r(){return e.location===`play-page`?B.playPage:B.dashboard}let i={...e.analyticsData,id:e.data.id,name:e.data.name},o={...e.analyticsOptions,actionType:a.Click,entity:e.data.typeId===S.Resource?l.Resource:l.Link};function s(){f.logUserAction(i,o)}let c={...e,applyHoverState:n||!!e.data.url};return(0,V.jsx)(`div`,{className:`px-1 flex-shrink-0 ${B.item} ${r()} ${C.RESOURCE_ITEM_SELECTOR}`,children:(()=>{let r=`d-block no-decoration`;return e.data.type===`link`?(0,V.jsx)(`a`,{href:e.data.url,target:`_blank`,className:r,onClick:s,children:(0,V.jsx)(W,{...c})}):n?e.actionBehaviour===`public`?(0,V.jsx)(`div`,{className:`${r} cursor-pointer d-inline`,onClick:()=>{s(),t.trigger(e.getAppLink(e.data))},children:(0,V.jsx)(W,{...c})}):(0,V.jsx)(b,{appLink:e.getAppLink(e.data),className:r,analyticsData:i,analyticsOptions:o,children:(0,V.jsx)(W,{...c})}):e.data.url?(0,V.jsx)(`a`,{href:e.data.url,className:r,onClick:s,children:(0,V.jsx)(W,{...c})}):(0,V.jsx)(`div`,{className:r,children:(0,V.jsx)(W,{...c})})})()})});function G(e){let n=U(e.resource,e.actionBehaviour);function r(){f.logUserAction(e.analyticsData,e.analyticsOptions)}return k.isType(e.resource,S.Link)?(0,V.jsx)(`a`,{href:e.resource.url,target:`_blank`,onClick:r,children:e.children}):n?e.actionBehaviour===`public`?(0,V.jsx)(`div`,{className:`cursor-pointer d-inline`,onClick:()=>{r(),t.trigger(e.appLink)},children:e.children}):(0,V.jsx)(b,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,children:e.children}):(0,V.jsx)(`div`,{children:e.children})}function K(e){let t={id:e.resource.id,name:e.resource.name,parentVideoId:e.parentVideo.id,parentVideoName:e.parentVideo.name,parentVideoType:e.parentVideo.type},n={...e.analyticsOptions,actionType:a.Click,entity:k.isResource(e.resource)?l.Resource:l.Link};return(0,V.jsxs)(`div`,{className:`row gx-0`,children:[(0,V.jsx)(`div`,{className:`col-4`,children:(0,V.jsx)(G,{resource:e.resource,appLink:e.appLink,analyticsData:t,analyticsOptions:{...n,descriptor:s.Thumbnail},actionBehaviour:e.actionBehaviour,children:(0,V.jsx)(W,{data:e.resource,titlePosition:`none`,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.imageErrorFallbackUrl,preloadImage:e.preloadImage,dynamicRatioImageOptions:{width:400,resizeType:x.Cover},theme:{thumbnailContainerClass:`w-100`,containerClass:`px-3`}})})}),(0,V.jsx)(`div`,{className:`col-8 ps-2`,children:(0,V.jsxs)(G,{resource:e.resource,appLink:e.appLink,analyticsData:t,analyticsOptions:{...n,descriptor:s.Title},actionBehaviour:e.actionBehaviour,children:[k.isType(e.resource,S.Resource)&&!!e.resource?.metadata?.resourceType&&(0,V.jsx)(N,{children:I.getResourceTypeName(e.resource.metadata.resourceType)}),(0,V.jsx)(`h3`,{className:`h6 clamp-2`,children:e.resource.name})]})})]})}var q=`shared.videoGuidanceResourcesPopup`,J=350;function Y(e){let t=[...e.video?.resources?.data||[],...e.video?.links?.data||[]],n=e.isLoading?[]:e.resources||t;return(0,V.jsx)(O,{closePopup:e.onClickClose,showLoadingSpinner:e.isLoading,title:e.isLoading?``:i.getPhrase(q,`resources`),size:`lg`,children:!e.isLoading&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(R.Scrollbars,{autoHeightMax:J,autoHeightMin:J,autoHeight:!0,children:[(0,V.jsx)(`ul`,{className:`list-unstyled`,children:n.map(t=>(0,V.jsx)(`li`,{className:`mb-3`,children:(0,V.jsx)(K,{resource:t,parentVideo:e.video,imageCdnUrl:e.imageCdnUrl,imageErrorFallbackUrl:e.resourceImageErrorFallbackUrl,preloadImage:!0,appLink:e.getResourceAppLink?.(t.id),actionBehaviour:e.actionBehaviour,analyticsOptions:{location:d.ResourcesGuidancePopup}})},t.id))}),(e.hasMore||e.isFetching)&&(0,V.jsx)(L,{isFetching:e.isFetching,fetchNext:e.fetchNext,nextCursor:e.nextCursor})]}),(0,V.jsxs)(E,{children:[(0,V.jsx)(E.Cancel,{onClick:e.onClickClose,text:i.getPhrase(q,`close`)}),(0,V.jsx)(E.Submit,{text:i.getPhrase(q,`viewVideo`),variant:`dark`,onClick:e.onClickViewVideo})]})]})})}function X(e){let n=h(j.video(e.id)),r=h(D.config()),i=h(g.currentUser());function s(){f.logUserAction({id:n.data.id,name:n.data.name},{entity:l.Video,actionType:a.Click,location:d.CurriculumGuidancePopup,descriptor:o.Close}),e.closePopup()}function u(){f.logUserAction({id:n.data.id,name:n.data.name},{entity:l.Video,location:d.CurriculumGuidancePopup,actionType:a.Click,descriptor:o.ViewVideo}),t.trigger({application:m.VIDEOS,action:_.Videos.PLAY_VIDEO,args:[n.data.id,c.slugify(n.data.name)]}),e.closePopup()}return(0,V.jsx)(Y,{isLoading:!n.hasCompleted||!r.hasCompleted,video:n.data,imageCdnUrl:r.data?.imageCdnUrl,resourceImageErrorFallbackUrl:v.Fallbacks.RESOURCE_THUMBNAIL,getResourceAppLink:e=>({application:m.VIDEOS,action:_.Videos.PREVIEW_PDF,args:[e],params:{videoId:n.data.id,showBackButton:!0}}),actionBehaviour:i.data?.isAuthenticated?`normal`:`public`,onClickClose:s,onClickViewVideo:u,hasMore:!1,isFetching:!1,fetchNext:()=>{},nextCursor:null})}export{X as VideoGuidanceResourcesView};
8
- //# sourceMappingURL=XnBhLH-02.chunk.js.map
8
+ //# sourceMappingURL=DVeqPzBe2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"XnBhLH-02.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/play-page/resources-widget/resource-widget-item.module.scss","../../../../libs/shared/src/components/play-page/resources-widget/ResourceWidgetItemV2.tsx","../../../../libs/shared/src/components/resource-list-item/ResourceListItem.tsx","../../../../libs/shared/src/components/video-guidance/resources/popup/VideoGuidanceResourcesPopup.tsx","../../src/apps/videos/views/video-guidance-resources/VideoGuidanceResourcesView.tsx"],"sourcesContent":["@import '~styles/utils/include-media';\n:local {\n .imageStyle {\n border-top-left-radius: $border-radius-lg;\n border-top-right-radius: $border-radius-lg;\n filter: drop-shadow(0px -1px 4px rgba(0, 0, 0, 0.1));\n }\n\n .item {\n width: 25%;\n\n &.dashboard {\n @include media('<=xl') {\n width: 33.33333%;\n }\n \n @include media('<=md') {\n width: 50%;\n }\n \n @include media('<=sm') {\n width: 100%;\n }\n }\n\n &.playPage {\n width: percentage(calc(1 / 3));\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n }\n\n .aspectRatio {\n position: relative;\n padding-bottom: 56.25%;\n width: 100%;\n }\n\n .outerContainer {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n }\n\n .innerContainer {\n .actions {\n display: none;\n position: absolute;\n top: map-get($spacers, 2);\n right: map-get($spacers, 2);\n z-index: 5;\n }\n\n &:hover {\n .actions {\n display: block;\n }\n }\n }\n\n .titleBelow:hover {\n text-decoration: underline;\n }\n .heading {\n line-height: 1.5; //24px\n }\n .thumbnailContainer {\n height: 85%;\n\n &.titleAbove {\n height: percentage(calc(2 / 3));\n }\n }\n\n // Resource type colour classes\n .teacherPack {\n .text {\n color: $blue;\n }\n\n background-color: scale-color($blue, $lightness: 86%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($blue, $lightness: 93%, $saturation: 100%);\n }\n }\n }\n\n .atomGuide {\n .text {\n color: $indigo;\n }\n\n background-color: scale-color($indigo, $lightness: 80%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($indigo, $lightness: 90%, $saturation: 100%);\n }\n }\n }\n\n .studentActivity {\n .text {\n color: $purple;\n }\n \n background-color: scale-color($purple, $lightness: 84%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($purple, $lightness: 92%, $saturation: 100%);\n }\n }\n }\n\n .additionalMaterials {\n .text {\n color: $green;\n }\n \n background-color: scale-color($green, $lightness: 82%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($green, $lightness: 88%, $saturation: 100%);\n }\n }\n }\n\n .userUploaded {\n .text {\n color: $teal;\n }\n\n background-color: scale-color($teal, $lightness: 80%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($teal, $lightness: 89%, $saturation: 100%);\n }\n }\n }\n\n .imageTypeResource {\n width: auto;\n object-fit: contain;\n left: 50% !important;\n transform: translateX(-50%);\n }\n\n .download {\n color: $dark;\n background-color: rgba(darken($white, 2%), 0.8);\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n\n &:hover {\n background-color: $white;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { DownloadSvg } from 'libs/shared/images/svg/actions/DownloadSvg';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\n\nimport styles from './resource-widget-item.module.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svg={DownloadSvg} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-2 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className={`h6 clamp-2 ${styles.heading}`}>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, id: props.data.id, name: props.data.name };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { ResizeType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\n\nimport { ResourceTileV2, useCanPreviewResource } from '../play-page/resources-widget/ResourceWidgetItemV2';\n\ninterface ResourceWrapperProps {\n resource: Resource | Link;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n actionBehaviour: 'normal' | 'public';\n}\n\nfunction ResourceWrapper(props: React.PropsWithChildren<ResourceWrapperProps>): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.resource, props.actionBehaviour);\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(props.analyticsData, props.analyticsOptions);\n }\n\n // Handle resource links\n if (MasterTypeHelper.isType<Link>(props.resource, MasterType.Link)) {\n return (\n <a href={props.resource.url} target='_blank' onClick={logAction}>\n {props.children}\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a div over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div\n className='cursor-pointer d-inline'\n onClick={() => {\n logAction();\n Core.AppLinkHelper.trigger(props.appLink);\n }}\n >\n {props.children}\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n {props.children}\n </AppLink>\n );\n }\n\n return (\n <div>\n {props.children}\n </div>\n );\n}\n\ninterface ResourceListItemProps {\n resource: Resource | Link;\n parentVideo: Clip | Video;\n imageCdnUrl: string;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n appLink: Core.AppLink;\n actionBehaviour: 'normal' | 'public';\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function ResourceListItem(props: ResourceListItemProps): JSX.Element {\n const analyticsData = {\n id: props.resource.id,\n name: props.resource.name,\n parentVideoId: props.parentVideo.id,\n parentVideoName: props.parentVideo.name,\n parentVideoType: props.parentVideo.type\n };\n \n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: MasterTypeHelper.isResource(props.resource) ? EntityType.Resource : EntityType.Link\n };\n\n return (\n <div className='row gx-0'>\n <div className='col-4'>\n <ResourceWrapper\n resource={props.resource}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Thumbnail\n }}\n actionBehaviour={props.actionBehaviour}\n >\n <ResourceTileV2\n data={props.resource}\n titlePosition='none'\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={{\n width: 400,\n resizeType: ResizeType.Cover\n }}\n theme={{\n thumbnailContainerClass: 'w-100',\n containerClass: 'px-3'\n }}\n />\n </ResourceWrapper>\n </div>\n <div className='col-8 ps-2'>\n <ResourceWrapper\n resource={props.resource}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n actionBehaviour={props.actionBehaviour}\n >\n {(\n MasterTypeHelper.isType<Resource>(props.resource, MasterType.Resource) &&\n !!props.resource?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.resource.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.resource.name}\n </h3>\n </ResourceWrapper>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ResourceListItem } from 'libs/shared/components/resource-list-item/ResourceListItem';\nimport { Link, Resource, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.videoGuidanceResourcesPopup';\n\nconst MIN_MAX_HEIGHT = 350;\n\ninterface VideoGuidanceResourcesPopupProps {\n isLoading: boolean;\n video: Video;\n resources?: (Link | Resource)[];\n hasMore: boolean;\n isFetching: boolean;\n fetchNext: (cursor?: string) => void;\n nextCursor?: string;\n onClickClose: () => void;\n onClickViewVideo: () => void;\n imageCdnUrl: string;\n resourceImageErrorFallbackUrl: string;\n getResourceAppLink?: (id: string) => Core.AppLink;\n actionBehaviour: 'normal' | 'public';\n}\n\nexport function VideoGuidanceResourcesPopup(props: VideoGuidanceResourcesPopupProps): JSX.Element {\n const videoResources = [ ...(props.video?.resources?.data || []), ...(props.video?.links?.data || []) ];\n const resources = props.isLoading ?\n [] :\n props.resources || videoResources;\n\n return (\n <Popup\n closePopup={props.onClickClose}\n showLoadingSpinner={props.isLoading}\n title={props.isLoading ?\n '' :\n LanguageService.getPhrase(namespace, 'resources')\n }\n size='lg'\n >\n {!props.isLoading && (\n <>\n <Scrollbars autoHeightMax={MIN_MAX_HEIGHT} autoHeightMin={MIN_MAX_HEIGHT} autoHeight>\n <ul className='list-unstyled'>\n {resources.map(resource => {\n return (\n <li key={resource.id} className='mb-3'>\n <ResourceListItem\n resource={resource}\n parentVideo={props.video}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.resourceImageErrorFallbackUrl}\n preloadImage\n appLink={props.getResourceAppLink?.(resource.id)}\n actionBehaviour={props.actionBehaviour}\n analyticsOptions={{\n location: LocationContext.ResourcesGuidancePopup\n }}\n />\n </li>\n );\n })}\n </ul>\n {(props.hasMore || props.isFetching) && (\n <InfiniteScrollFooter\n isFetching={props.isFetching}\n fetchNext={props.fetchNext}\n nextCursor={props.nextCursor}\n />\n )}\n </Scrollbars>\n\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.onClickClose}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n <PopupButtons.Submit\n text={LanguageService.getPhrase(namespace, 'viewVideo')}\n variant='dark'\n onClick={props.onClickViewVideo}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoGuidanceDescriptor } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceResourcesPopup } from 'libs/shared/components/video-guidance/resources/popup/VideoGuidanceResourcesPopup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Config, CurrentUser, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\ninterface VideoGuidanceResourcesViewProps extends PopupViewProps {\n id: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoGuidanceResourcesView(props: VideoGuidanceResourcesViewProps): JSX.Element {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function onClickClose(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumGuidancePopup,\n descriptor: VideoGuidanceDescriptor.Close\n });\n\n props.closePopup();\n }\n\n function onClickViewVideo(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n location: LocationContext.CurriculumGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.ViewVideo\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n }\n\n return (\n <VideoGuidanceResourcesPopup\n isLoading={!video.hasCompleted || !config.hasCompleted}\n video={video.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n resourceImageErrorFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n getResourceAppLink={id => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [id],\n params: { videoId: video.data.id, showBackButton: true }\n })}\n actionBehaviour={currentUser.data?.isAuthenticated ? 'normal' : 'public'}\n onClickClose={onClickClose}\n onClickViewVideo={onClickViewVideo}\n hasMore={false}\n isFetching={false}\n fetchNext={() => {}}\n nextCursor={null}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DVeqPzBe2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/play-page/resources-widget/resource-widget-item.module.scss","../../../../libs/shared/src/components/play-page/resources-widget/ResourceWidgetItemV2.tsx","../../../../libs/shared/src/components/resource-list-item/ResourceListItem.tsx","../../../../libs/shared/src/components/video-guidance/resources/popup/VideoGuidanceResourcesPopup.tsx","../../src/apps/videos/views/video-guidance-resources/VideoGuidanceResourcesView.tsx"],"sourcesContent":["@import '~styles/utils/include-media';\n:local {\n .imageStyle {\n border-top-left-radius: $border-radius-lg;\n border-top-right-radius: $border-radius-lg;\n filter: drop-shadow(0px -1px 4px rgba(0, 0, 0, 0.1));\n }\n\n .item {\n width: 25%;\n\n &.dashboard {\n @include media('<=xl') {\n width: 33.33333%;\n }\n \n @include media('<=md') {\n width: 50%;\n }\n \n @include media('<=sm') {\n width: 100%;\n }\n }\n\n &.playPage {\n width: percentage(calc(1 / 3));\n\n @include media('<=sm') {\n width: 50%;\n }\n }\n }\n\n .aspectRatio {\n position: relative;\n padding-bottom: 56.25%;\n width: 100%;\n }\n\n .outerContainer {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n }\n\n .innerContainer {\n .actions {\n display: none;\n position: absolute;\n top: map-get($spacers, 2);\n right: map-get($spacers, 2);\n z-index: 5;\n }\n\n &:hover {\n .actions {\n display: block;\n }\n }\n }\n\n .titleBelow:hover {\n text-decoration: underline;\n }\n .heading {\n line-height: 1.5; //24px\n }\n .thumbnailContainer {\n height: 85%;\n\n &.titleAbove {\n height: percentage(calc(2 / 3));\n }\n }\n\n // Resource type colour classes\n .teacherPack {\n .text {\n color: $blue;\n }\n\n background-color: scale-color($blue, $lightness: 86%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($blue, $lightness: 93%, $saturation: 100%);\n }\n }\n }\n\n .atomGuide {\n .text {\n color: $indigo;\n }\n\n background-color: scale-color($indigo, $lightness: 80%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($indigo, $lightness: 90%, $saturation: 100%);\n }\n }\n }\n\n .studentActivity {\n .text {\n color: $purple;\n }\n \n background-color: scale-color($purple, $lightness: 84%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($purple, $lightness: 92%, $saturation: 100%);\n }\n }\n }\n\n .additionalMaterials {\n .text {\n color: $green;\n }\n \n background-color: scale-color($green, $lightness: 82%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($green, $lightness: 88%, $saturation: 100%);\n }\n }\n }\n\n .userUploaded {\n .text {\n color: $teal;\n }\n\n background-color: scale-color($teal, $lightness: 80%, $saturation: 100%);\n\n &.hoverState {\n &:hover {\n background-color: scale-color($teal, $lightness: 89%, $saturation: 100%);\n }\n }\n }\n\n .imageTypeResource {\n width: auto;\n object-fit: contain;\n left: 50% !important;\n transform: translateX(-50%);\n }\n\n .download {\n color: $dark;\n background-color: rgba(darken($white, 2%), 0.8);\n border-radius: 50%;\n width: 2rem;\n height: 2rem;\n\n &:hover {\n background-color: $white;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ResourceThumbnail } from 'libs/shared/components/resource-thumbnail/ResourceThumbnail';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { TypeBadge } from 'libs/shared/components/type-badge/TypeBadge';\nimport { FixedWidgetItemProps } from 'libs/shared/components/widgets/items/FixedWidgetItemProps';\nimport { SeoConstants } from 'libs/shared/constants/SeoConstants';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { DownloadSvg } from 'libs/shared/images/svg/actions/DownloadSvg';\nimport { Link, Resource, ResourceType } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\n\nimport styles from './resource-widget-item.module.scss';\n\nfunction getColour(resourceType?: ResourceType): string {\n switch (resourceType) {\n case 'atom-guide':\n return styles.atomGuide;\n case 'student-activity':\n return styles.studentActivity;\n case 'teacher-pack':\n return styles.teacherPack;\n case 'additional-materials':\n return styles.additionalMaterials;\n default:\n return styles.userUploaded;\n }\n}\n\nexport function useCanPreviewResource(data: Resource | Link, actionBehaviour: 'normal' | 'public'): boolean {\n const breakpoints = useBreakpoints();\n\n /**\n * When viewing publicly, the resource applink will\n * prompt the user to sign-up (not preview the underlying resource)\n */\n if (actionBehaviour === 'public')\n return true;\n\n if (breakpoints.xs || breakpoints.sm)\n return false;\n\n if (data.type !== 'resource')\n return false;\n \n // Require metadata\n if (!('metadata' in data))\n return false;\n\n // We can preview images\n if (data.metadata.type === ResourceFileType.Image)\n return true;\n\n // If we are a pdf and have a url\n if (data.metadata.type === ResourceFileType.Pdf)\n return !!data.url;\n\n // If we have a pdf assoc\n return !!data.pdf?.url;\n}\n\ninterface ResourceTheme {\n containerClass?: string;\n thumbnailContainerClass?: string;\n}\n\nexport interface ResourceTileProps {\n data: Resource | Link;\n imageCdnUrl: string;\n imageErrorFallbackUrl?: string;\n theme?: ResourceTheme;\n\n titlePosition: 'above' | 'below' | 'none';\n hideTypeBadge?: boolean;\n onClickDownload?: (resource: Resource) => void;\n applyHoverState?: boolean;\n preloadImage: boolean;\n actionBehaviour?: 'normal' | 'public';\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nResourceTileV2.defaultProps = {\n preloadImage: true,\n actionBehaviour: 'normal'\n};\n\n/**\n * This component intentionally doesn't contain an appLink/download link\n * so that the resource download behaviour can be handled differently depending\n * on where this is rendered (e.g. primary play page vs embedded player)\n */\nexport function ResourceTileV2(props: ResourceTileProps): JSX.Element {\n let metadata = null;\n\n if ('metadata' in props.data) {\n metadata = props.data.metadata;\n }\n\n const isResource = MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource);\n\n function getInnerContainerClass(resourceType: ResourceType): string {\n let baseClass = `\n d-flex flex-column align-items-center justify-content-end rounded-3 h-100\n position-relative ${getColour(resourceType)} ${styles.innerContainer}`;\n\n if (props.theme?.containerClass) {\n baseClass += ` ${props.theme.containerClass}`;\n } else {\n baseClass += ` pt-3 px-3`;\n }\n\n if (props.applyHoverState) {\n baseClass += ` ${styles.hoverState}`;\n }\n\n return baseClass;\n }\n\n function onDownload() {\n if (!MasterTypeHelper.isResource(props.data))\n return;\n\n if (typeof props.onClickDownload === 'function') {\n props.onClickDownload(props.data);\n }\n }\n\n return (\n <>\n <div className={styles.aspectRatio}>\n <div className={styles.outerContainer}>\n <div className={getInnerContainerClass(metadata?.resourceType)}>\n {props.titlePosition === 'above' && (\n <Tooltip title={props.data.name}>\n <h3 className={`text-center text-break h5 mb-3 ${styles.text}`}>\n <span className='clamp-1'>{props.data.name}</span>\n </h3>\n </Tooltip>\n )}\n\n <div className={`\n ${props.theme?.thumbnailContainerClass ?? ''} w-75 overflow-hidden \n ${styles.thumbnailContainer} ${props.titlePosition === 'above' ? styles.titleAbove : ''} \n ${styles.imageStyle}\n `}>\n <ResourceThumbnail\n resource={props.data}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={props.dynamicRatioImageOptions}\n />\n </div>\n\n {isResource && props.onClickDownload && props.actionBehaviour === 'normal' && (\n <div className={styles.actions}>\n <DivButton\n onClick={e => {\n e.preventDefault();\n e.stopPropagation();\n onDownload();\n }}\n className={`${styles.download} d-flex align-items-center justify-content-center`}\n >\n <SvgContainer svg={DownloadSvg} />\n </DivButton>\n </div>\n )}\n\n {!props.hideTypeBadge && isResource && (\n <TypeBadge typeId={MasterType.Resource} />\n )}\n </div>\n </div>\n </div>\n {props.titlePosition === 'below' && (\n <div className={`mt-2 ${styles.titleBelow}`}>\n {(\n MasterTypeHelper.isType<Resource>(props.data, MasterType.Resource) &&\n !!props.data?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.data.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className={`h6 clamp-2 ${styles.heading}`}>\n {props.data.name}\n </h3>\n </div>\n )}\n </>\n );\n}\n\nexport interface ResourceWidgetItemV2Props extends ResourceTileProps, FixedWidgetItemProps<Resource | Link> {\n location: 'play-page' | 'dashboard';\n}\n\nexport const ResourceWidgetItemV2 = React.memo(function(props: ResourceWidgetItemV2Props): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.data, props.actionBehaviour);\n\n function getLocationClass(): string {\n if (props.location === 'play-page')\n return styles.playPage;\n\n return styles.dashboard;\n }\n\n const analyticsData = { ...props.analyticsData, id: props.data.id, name: props.data.name };\n\n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: props.data.typeId === MasterType.Resource ? EntityType.Resource : EntityType.Link\n };\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }\n\n const tileProps: ResourceTileProps = {\n ...props,\n // Apply the hover state if we have a url or the resource can be previewed\n applyHoverState: canPreview || !!props.data.url\n };\n\n return (\n <div className={`px-1 flex-shrink-0 ${styles.item} ${getLocationClass()} ${SeoConstants.RESOURCE_ITEM_SELECTOR}`}>\n {(() => {\n const className = `d-block no-decoration`;\n\n // Handle resource links\n if (props.data.type === 'link') {\n return (\n <a href={props.data.url} target='_blank' className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a span over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div className={`${className} cursor-pointer d-inline`} onClick={() => {\n logAction();\n AppLinkHelper.trigger(props.getAppLink(props.data));\n }}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.getAppLink(props.data)}\n className={className}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n >\n <ResourceTileV2 {...tileProps} />\n </AppLink>\n );\n }\n\n // URLs cannot be previewed\n if (props.data.url) {\n return (\n <a href={props.data.url} className={className} onClick={logAction}>\n <ResourceTileV2 {...tileProps} />\n </a>\n );\n }\n\n // Theres no url, so don't render an <a>\n return (\n <div className={className}>\n <ResourceTileV2 {...tileProps} />\n </div>\n );\n })()}\n </div>\n );\n});\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { ResizeType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Clip, Link, Resource, Video } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { ResourceHelper } from 'libs/shared/utils/ResourceHelper';\n\nimport { ResourceTileV2, useCanPreviewResource } from '../play-page/resources-widget/ResourceWidgetItemV2';\n\ninterface ResourceWrapperProps {\n resource: Resource | Link;\n appLink: Core.AppLink;\n analyticsData: HashObject;\n analyticsOptions: AnalyticsOptions;\n actionBehaviour: 'normal' | 'public';\n}\n\nfunction ResourceWrapper(props: React.PropsWithChildren<ResourceWrapperProps>): JSX.Element {\n // Mobile is not allowed to preview\n const canPreview = useCanPreviewResource(props.resource, props.actionBehaviour);\n\n function logAction(): void {\n AnalyticsHelper.logUserAction(props.analyticsData, props.analyticsOptions);\n }\n\n // Handle resource links\n if (MasterTypeHelper.isType<Link>(props.resource, MasterType.Link)) {\n return (\n <a href={props.resource.url} target='_blank' onClick={logAction}>\n {props.children}\n </a>\n );\n }\n\n if (canPreview) {\n /**\n * Previewing resources in a public context will always display the sign-up popup, so there \n * will never be a full URL. For SEO purposes, we deliberately use a div over an anchor\n * to ensure we're not creating self-referencing elements that will burn crawl budget.\n */\n if (props.actionBehaviour === 'public') {\n return (\n <div\n className='cursor-pointer d-inline'\n onClick={() => {\n logAction();\n Core.AppLinkHelper.trigger(props.appLink);\n }}\n >\n {props.children}\n </div>\n );\n }\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n >\n {props.children}\n </AppLink>\n );\n }\n\n return (\n <div>\n {props.children}\n </div>\n );\n}\n\ninterface ResourceListItemProps {\n resource: Resource | Link;\n parentVideo: Clip | Video;\n imageCdnUrl: string;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n appLink: Core.AppLink;\n actionBehaviour: 'normal' | 'public';\n analyticsOptions: AnalyticsOptions;\n}\n\nexport function ResourceListItem(props: ResourceListItemProps): JSX.Element {\n const analyticsData = {\n id: props.resource.id,\n name: props.resource.name,\n parentVideoId: props.parentVideo.id,\n parentVideoName: props.parentVideo.name,\n parentVideoType: props.parentVideo.type\n };\n \n const analyticsOptions: AnalyticsOptions = {\n ...props.analyticsOptions,\n actionType: UserAction.Click,\n entity: MasterTypeHelper.isResource(props.resource) ? EntityType.Resource : EntityType.Link\n };\n\n return (\n <div className='row gx-0'>\n <div className='col-4'>\n <ResourceWrapper\n resource={props.resource}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Thumbnail\n }}\n actionBehaviour={props.actionBehaviour}\n >\n <ResourceTileV2\n data={props.resource}\n titlePosition='none'\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.imageErrorFallbackUrl}\n preloadImage={props.preloadImage}\n dynamicRatioImageOptions={{\n width: 400,\n resizeType: ResizeType.Cover\n }}\n theme={{\n thumbnailContainerClass: 'w-100',\n containerClass: 'px-3'\n }}\n />\n </ResourceWrapper>\n </div>\n <div className='col-8 ps-2'>\n <ResourceWrapper\n resource={props.resource}\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={{\n ...analyticsOptions,\n descriptor: ClickDescriptor.Title\n }}\n actionBehaviour={props.actionBehaviour}\n >\n {(\n MasterTypeHelper.isType<Resource>(props.resource, MasterType.Resource) &&\n !!props.resource?.metadata?.resourceType\n ) && (\n <TitleSubText>\n {ResourceHelper.getResourceTypeName(props.resource.metadata.resourceType)}\n </TitleSubText>\n )}\n\n <h3 className='h6 clamp-2'>\n {props.resource.name}\n </h3>\n </ResourceWrapper>\n </div>\n </div>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { ResourceListItem } from 'libs/shared/components/resource-list-item/ResourceListItem';\nimport { Link, Resource, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.videoGuidanceResourcesPopup';\n\nconst MIN_MAX_HEIGHT = 350;\n\ninterface VideoGuidanceResourcesPopupProps {\n isLoading: boolean;\n video: Video;\n resources?: (Link | Resource)[];\n hasMore: boolean;\n isFetching: boolean;\n fetchNext: (cursor?: string) => void;\n nextCursor?: string;\n onClickClose: () => void;\n onClickViewVideo: () => void;\n imageCdnUrl: string;\n resourceImageErrorFallbackUrl: string;\n getResourceAppLink?: (id: string) => Core.AppLink;\n actionBehaviour: 'normal' | 'public';\n}\n\nexport function VideoGuidanceResourcesPopup(props: VideoGuidanceResourcesPopupProps): JSX.Element {\n const videoResources = [ ...(props.video?.resources?.data || []), ...(props.video?.links?.data || []) ];\n const resources = props.isLoading ?\n [] :\n props.resources || videoResources;\n\n return (\n <Popup\n closePopup={props.onClickClose}\n showLoadingSpinner={props.isLoading}\n title={props.isLoading ?\n '' :\n LanguageService.getPhrase(namespace, 'resources')\n }\n size='lg'\n >\n {!props.isLoading && (\n <>\n <Scrollbars autoHeightMax={MIN_MAX_HEIGHT} autoHeightMin={MIN_MAX_HEIGHT} autoHeight>\n <ul className='list-unstyled'>\n {resources.map(resource => {\n return (\n <li key={resource.id} className='mb-3'>\n <ResourceListItem\n resource={resource}\n parentVideo={props.video}\n imageCdnUrl={props.imageCdnUrl}\n imageErrorFallbackUrl={props.resourceImageErrorFallbackUrl}\n preloadImage\n appLink={props.getResourceAppLink?.(resource.id)}\n actionBehaviour={props.actionBehaviour}\n analyticsOptions={{\n location: LocationContext.ResourcesGuidancePopup\n }}\n />\n </li>\n );\n })}\n </ul>\n {(props.hasMore || props.isFetching) && (\n <InfiniteScrollFooter\n isFetching={props.isFetching}\n fetchNext={props.fetchNext}\n nextCursor={props.nextCursor}\n />\n )}\n </Scrollbars>\n\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.onClickClose}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n <PopupButtons.Submit\n text={LanguageService.getPhrase(namespace, 'viewVideo')}\n variant='dark'\n onClick={props.onClickViewVideo}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoGuidanceDescriptor } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceResourcesPopup } from 'libs/shared/components/video-guidance/resources/popup/VideoGuidanceResourcesPopup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Config, CurrentUser, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\ninterface VideoGuidanceResourcesViewProps extends PopupViewProps {\n id: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoGuidanceResourcesView(props: VideoGuidanceResourcesViewProps): JSX.Element {\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function onClickClose(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n location: LocationContext.CurriculumGuidancePopup,\n descriptor: VideoGuidanceDescriptor.Close\n });\n\n props.closePopup();\n }\n\n function onClickViewVideo(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n location: LocationContext.CurriculumGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.ViewVideo\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n }\n\n return (\n <VideoGuidanceResourcesPopup\n isLoading={!video.hasCompleted || !config.hasCompleted}\n video={video.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n resourceImageErrorFallbackUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n getResourceAppLink={id => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PREVIEW_PDF,\n args: [id],\n params: { videoId: video.data.id, showBackButton: true }\n })}\n actionBehaviour={currentUser.data?.isAuthenticated ? 'normal' : 'public'}\n onClickClose={onClickClose}\n onClickViewVideo={onClickViewVideo}\n hasMore={false}\n isFetching={false}\n fetchNext={() => {}}\n nextCursor={null}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./CFXUbsBS.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{n as a}from"./C9ET3pjZ.chunk.js";import{r as o,t as s}from"./D2om474U2.chunk.js";import{E as c,M as l,q as u,z as d}from"./app-B1XBsz23.js";import{t as f}from"./Dd8r1SE32.chunk.js";import{t as p}from"./DLp7yHzT2.chunk.js";import{a as m,i as h,r as g,t as _}from"./DAvXFgC62.chunk.js";var v=c();n();var y={modalWidth:`_modalWidth_t2uj7_1`,buttons:`_buttons_t2uj7_6`},b=t(),x=`specialEventCalendar.eventListPopup`,S=e.encloseNamespace(x),C=400,w=300;function T(t){let n=i(u.streamablePresentation()),{hasPermissions:c}=l(),T=c(a.StudentExperience),E=new Date(t.from),D=new Date(t.to),O=i(n.data?.id&&p.calendarLivestreams({from:r.format(E,`YYYY-MM-DD`),to:r.format(D,`YYYY-MM-DD`)})),k=O.data?.filter(e=>e.startDate===r.format(new Date(t.date),`YYYY-MM-DD`))||[];function A(e){return T||g.isPastEvent(e)?`pastActionLabel`:`actionLabel`}function j(e){return s.createUrl(e.company.banner?.url,{size:o.Large})}function M(e){return s.createUrl(e.company.logo?.url,{size:o.Small})}return(0,b.jsxs)(d,{title:`Events on ${f.getOrdinalDate(t.date)}`,closePopup:t.closePopup,dialogClassName:y.modalWidth,bodyClassName:`p-0`,showLoadingSpinner:!O.data,children:[(0,b.jsx)(v.Scrollbars,{autoHeight:!0,autoHeightMin:w,autoHeightMax:C,children:(0,b.jsx)(`div`,{className:`px-3 pt-2`,children:k.map((e,r)=>(0,b.jsx)(m,{getAppLink:_().event,event:e,onClick:t.closePopup,inPopup:!0,presentationId:n.data?.id,getActionLabel:()=>S(A(e.content)),getBackgroundColor:e=>e.company.metadata?.colour,getBannerUrl:j,getIconUrl:M,getStartTime:g.isSameTime(k,r)?null:g.getStartTime,isPastEvent:g.isPastEvent},e.content.id))})}),(0,b.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center p-3 border-top`,children:[(0,b.jsx)(h,{}),(0,b.jsx)(`button`,{onClick:t.closePopup,className:`btn btn-outline-dark`,children:e.getPhrase(x,`close`)})]})]})}export{T as SpecialEventListView};
2
- //# sourceMappingURL=Clh6wBrg.chunk.js.map
1
+ import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./CFXUbsBS.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{n as a}from"./C9ET3pjZ.chunk.js";import{r as o,t as s}from"./D2om474U2.chunk.js";import{E as c,M as l,q as u,z as d}from"./app-gjHxcZG3.js";import{t as f}from"./iyIL3kim2.chunk.js";import{t as p}from"./DLofRa642.chunk.js";import{a as m,i as h,r as g,t as _}from"./D2FqnK9m2.chunk.js";var v=c();n();var y={modalWidth:`_modalWidth_t2uj7_1`,buttons:`_buttons_t2uj7_6`},b=t(),x=`specialEventCalendar.eventListPopup`,S=e.encloseNamespace(x),C=400,w=300;function T(t){let n=i(u.streamablePresentation()),{hasPermissions:c}=l(),T=c(a.StudentExperience),E=new Date(t.from),D=new Date(t.to),O=i(n.data?.id&&p.calendarLivestreams({from:r.format(E,`YYYY-MM-DD`),to:r.format(D,`YYYY-MM-DD`)})),k=O.data?.filter(e=>e.startDate===r.format(new Date(t.date),`YYYY-MM-DD`))||[];function A(e){return T||g.isPastEvent(e)?`pastActionLabel`:`actionLabel`}function j(e){return s.createUrl(e.company.banner?.url,{size:o.Large})}function M(e){return s.createUrl(e.company.logo?.url,{size:o.Small})}return(0,b.jsxs)(d,{title:`Events on ${f.getOrdinalDate(t.date)}`,closePopup:t.closePopup,dialogClassName:y.modalWidth,bodyClassName:`p-0`,showLoadingSpinner:!O.data,children:[(0,b.jsx)(v.Scrollbars,{autoHeight:!0,autoHeightMin:w,autoHeightMax:C,children:(0,b.jsx)(`div`,{className:`px-3 pt-2`,children:k.map((e,r)=>(0,b.jsx)(m,{getAppLink:_().event,event:e,onClick:t.closePopup,inPopup:!0,presentationId:n.data?.id,getActionLabel:()=>S(A(e.content)),getBackgroundColor:e=>e.company.metadata?.colour,getBannerUrl:j,getIconUrl:M,getStartTime:g.isSameTime(k,r)?null:g.getStartTime,isPastEvent:g.isPastEvent},e.content.id))})}),(0,b.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center p-3 border-top`,children:[(0,b.jsx)(h,{}),(0,b.jsx)(`button`,{onClick:t.closePopup,className:`btn btn-outline-dark`,children:e.getPhrase(x,`close`)})]})]})}export{T as SpecialEventListView};
2
+ //# sourceMappingURL=DWerltCT.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Clh6wBrg.chunk.js","names":[],"sources":["../../src/apps/calendar/views/special-event-list-view/special-event-list-view.module.scss","../../src/apps/calendar/views/special-event-list-view/SpecialEventListView.tsx"],"sourcesContent":[":local {\n .modalWidth {\n width: 40rem;\n max-width: 40rem;\n overflow: hidden;\n }\n .buttons {\n width: 40rem;\n }\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { TimezoneIndicator } from 'libs/shared/apps/streamable-learning/components/timezone-indicator/TimezoneIndicator';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Livestream, PopupViewProps, Presentation } from 'libs/shared/interfaces';\nimport { CalendarEvent } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\nimport { CalendarUtils } from 'apps/calendar/utils/CalendarUtils';\nimport { getCalendarAppLinks } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\n\nimport styles from './special-event-list-view.module.scss';\n\nconst namespace = 'specialEventCalendar.eventListPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 400;// in px\nconst SCROLL_HEIGHT_MIN = 300;// in px\nexport interface SpecialEventsViewQueryParams extends PopupViewProps {\n from: string;\n to: string;\n date: string;\n}\n\nexport function SpecialEventListView(props: SpecialEventsViewQueryParams): JSX.Element {\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n \n const fromDate = new Date(props.from);\n const toDate = new Date(props.to);\n\n const events = Flight.useBasicFetch<CalendarEvent<Livestream>[]>(presentation.data?.id\n && LivestreamRequests.calendarLivestreams({ from: DateHelper.format(fromDate, 'YYYY-MM-DD'), to: DateHelper.format(toDate, 'YYYY-MM-DD') }));\n const eventsOnDay = events.data?.filter(e => e.startDate === DateHelper.format(new Date(props.date), 'YYYY-MM-DD')) || [];\n\n function getActionLabel(livestream: Livestream): string {\n return isStudent || CalendarUtils.isPastEvent(livestream) ? 'pastActionLabel' : 'actionLabel';\n }\n\n function getBannerUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.banner?.url, { size: ImageSize.Large });\n }\n\n function getIconUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.logo?.url, { size: ImageSize.Small });\n }\n\n return (\n <Popup\n title={`Events on ${SpecialEventHelper.getOrdinalDate(props.date)}`}\n closePopup={props.closePopup}\n dialogClassName={styles.modalWidth}\n bodyClassName='p-0'\n showLoadingSpinner={!events.data}\n >\n <Scrollbars\n autoHeight\n autoHeightMin={SCROLL_HEIGHT_MIN}\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 pt-2'>\n {eventsOnDay.map((e, i) => (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={getCalendarAppLinks().event}\n event={e}\n onClick={props.closePopup}\n inPopup\n presentationId={presentation.data?.id}\n getActionLabel={() => getPhrase(getActionLabel(e.content))}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getBannerUrl={getBannerUrl}\n getIconUrl={getIconUrl}\n getStartTime={!CalendarUtils.isSameTime(eventsOnDay, i) ? CalendarUtils.getStartTime : null}\n isPastEvent={CalendarUtils.isPastEvent}\n />\n ))}\n </div>\n </Scrollbars>\n <div className='d-flex justify-content-between align-items-center p-3 border-top'>\n <TimezoneIndicator />\n <button\n onClick={props.closePopup}\n className='btn btn-outline-dark'\n >\n {LanguageService.getPhrase(namespace, 'close')}\n </button>\n </div>\n </Popup>\n\n );\n}\n"],"mappings":"gkBC0BM,EAAY,sCACZ,EAAY,EAAgB,iBAAiB,EAAU,CAEvD,EAAoB,IACpB,EAAoB,IAO1B,SAAgB,EAAqB,EAAkD,CACrF,IAAM,EAAe,EACnB,EAAqB,wBAAwB,CAC9C,CAEK,CAAE,kBAAmB,GAAgB,CACrC,EAAY,EAAe,EAAe,kBAAkB,CAE5D,EAAW,IAAI,KAAK,EAAM,KAAK,CAC/B,EAAS,IAAI,KAAK,EAAM,GAAG,CAE3B,EAAS,EAAkD,EAAa,MAAM,IAC/E,EAAmB,oBAAoB,CAAE,KAAM,EAAW,OAAO,EAAU,aAAa,CAAE,GAAI,EAAW,OAAO,EAAQ,aAAA,CAAe,CAAC,CAAC,CACxI,EAAc,EAAO,MAAM,OAAO,GAAK,EAAE,YAAc,EAAW,OAAO,IAAI,KAAK,EAAM,KAAK,CAAE,aAAa,CAAC,EAAI,EAAE,CAEzH,SAAS,EAAe,EAAgC,CACtD,OAAO,GAAa,EAAc,YAAY,EAAW,CAAG,kBAAoB,cAGlF,SAAS,EAAa,EAAqB,CACzC,OAAO,EAAY,UAAU,EAAQ,QAAQ,QAAQ,IAAK,CAAE,KAAM,EAAU,MAAO,CAAC,CAGtF,SAAS,EAAW,EAAqB,CACvC,OAAO,EAAY,UAAU,EAAQ,QAAQ,MAAM,IAAK,CAAE,KAAM,EAAU,MAAO,CAAC,CAGpF,OACE,EAAA,EAAA,MAAC,EAAD,CACE,MAAO,aAAa,EAAmB,eAAe,EAAM,KAAK,GACjE,WAAY,EAAM,WAClB,gBAAiB,EAAO,WACxB,cAAc,MACd,mBAAoB,CAAC,EAAO,cAL9B,EAOE,EAAA,EAAA,KAAC,EAAA,WAAD,CACE,WAAA,GACA,cAAe,EACf,cAAe,YAEf,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qBACZ,EAAY,KAAK,EAAG,KACnB,EAAA,EAAA,KAAC,EAAD,CAEE,WAAY,GAAqB,CAAC,MAClC,MAAO,EACP,QAAS,EAAM,WACf,QAAA,GACA,eAAgB,EAAa,MAAM,GACnC,mBAAsB,EAAU,EAAe,EAAE,QAAQ,CAAC,CAC1D,mBAAqB,GAAwB,EAAQ,QAAQ,UAAU,OACzD,eACF,aACZ,aAAe,EAAc,WAAW,EAAa,EAAE,CAAgC,KAA7B,EAAc,aACxE,YAAa,EAAc,YAC3B,CAZK,EAAE,QAAQ,GAYf,CAAA,CAEA,CAAA,CACK,CAAA,EACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4EAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,EACrB,EAAA,EAAA,KAAC,SAAD,CACE,QAAS,EAAM,WACf,UAAU,gCAET,EAAgB,UAAU,EAAW,QAAA,CAC/B,CAAA,CAAA"}
1
+ {"version":3,"file":"DWerltCT.chunk.js","names":[],"sources":["../../src/apps/calendar/views/special-event-list-view/special-event-list-view.module.scss","../../src/apps/calendar/views/special-event-list-view/SpecialEventListView.tsx"],"sourcesContent":[":local {\n .modalWidth {\n width: 40rem;\n max-width: 40rem;\n overflow: hidden;\n }\n .buttons {\n width: 40rem;\n }\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { TimezoneIndicator } from 'libs/shared/apps/streamable-learning/components/timezone-indicator/TimezoneIndicator';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Livestream, PopupViewProps, Presentation } from 'libs/shared/interfaces';\nimport { CalendarEvent } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\nimport { CalendarUtils } from 'apps/calendar/utils/CalendarUtils';\nimport { getCalendarAppLinks } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\n\nimport styles from './special-event-list-view.module.scss';\n\nconst namespace = 'specialEventCalendar.eventListPopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SCROLL_HEIGHT_MAX = 400;// in px\nconst SCROLL_HEIGHT_MIN = 300;// in px\nexport interface SpecialEventsViewQueryParams extends PopupViewProps {\n from: string;\n to: string;\n date: string;\n}\n\nexport function SpecialEventListView(props: SpecialEventsViewQueryParams): JSX.Element {\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n \n const fromDate = new Date(props.from);\n const toDate = new Date(props.to);\n\n const events = Flight.useBasicFetch<CalendarEvent<Livestream>[]>(presentation.data?.id\n && LivestreamRequests.calendarLivestreams({ from: DateHelper.format(fromDate, 'YYYY-MM-DD'), to: DateHelper.format(toDate, 'YYYY-MM-DD') }));\n const eventsOnDay = events.data?.filter(e => e.startDate === DateHelper.format(new Date(props.date), 'YYYY-MM-DD')) || [];\n\n function getActionLabel(livestream: Livestream): string {\n return isStudent || CalendarUtils.isPastEvent(livestream) ? 'pastActionLabel' : 'actionLabel';\n }\n\n function getBannerUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.banner?.url, { size: ImageSize.Large });\n }\n\n function getIconUrl(content: Livestream) {\n return ImageHelper.createUrl(content.company.logo?.url, { size: ImageSize.Small });\n }\n\n return (\n <Popup\n title={`Events on ${SpecialEventHelper.getOrdinalDate(props.date)}`}\n closePopup={props.closePopup}\n dialogClassName={styles.modalWidth}\n bodyClassName='p-0'\n showLoadingSpinner={!events.data}\n >\n <Scrollbars\n autoHeight\n autoHeightMin={SCROLL_HEIGHT_MIN}\n autoHeightMax={SCROLL_HEIGHT_MAX}\n >\n <div className='px-3 pt-2'>\n {eventsOnDay.map((e, i) => (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={getCalendarAppLinks().event}\n event={e}\n onClick={props.closePopup}\n inPopup\n presentationId={presentation.data?.id}\n getActionLabel={() => getPhrase(getActionLabel(e.content))}\n getBackgroundColor={(content: Livestream) => content.company.metadata?.colour}\n getBannerUrl={getBannerUrl}\n getIconUrl={getIconUrl}\n getStartTime={!CalendarUtils.isSameTime(eventsOnDay, i) ? CalendarUtils.getStartTime : null}\n isPastEvent={CalendarUtils.isPastEvent}\n />\n ))}\n </div>\n </Scrollbars>\n <div className='d-flex justify-content-between align-items-center p-3 border-top'>\n <TimezoneIndicator />\n <button\n onClick={props.closePopup}\n className='btn btn-outline-dark'\n >\n {LanguageService.getPhrase(namespace, 'close')}\n </button>\n </div>\n </Popup>\n\n );\n}\n"],"mappings":"gkBC0BM,EAAY,sCACZ,EAAY,EAAgB,iBAAiB,EAAU,CAEvD,EAAoB,IACpB,EAAoB,IAO1B,SAAgB,EAAqB,EAAkD,CACrF,IAAM,EAAe,EACnB,EAAqB,wBAAwB,CAC9C,CAEK,CAAE,kBAAmB,GAAgB,CACrC,EAAY,EAAe,EAAe,kBAAkB,CAE5D,EAAW,IAAI,KAAK,EAAM,KAAK,CAC/B,EAAS,IAAI,KAAK,EAAM,GAAG,CAE3B,EAAS,EAAkD,EAAa,MAAM,IAC/E,EAAmB,oBAAoB,CAAE,KAAM,EAAW,OAAO,EAAU,aAAa,CAAE,GAAI,EAAW,OAAO,EAAQ,aAAA,CAAe,CAAC,CAAC,CACxI,EAAc,EAAO,MAAM,OAAO,GAAK,EAAE,YAAc,EAAW,OAAO,IAAI,KAAK,EAAM,KAAK,CAAE,aAAa,CAAC,EAAI,EAAE,CAEzH,SAAS,EAAe,EAAgC,CACtD,OAAO,GAAa,EAAc,YAAY,EAAW,CAAG,kBAAoB,cAGlF,SAAS,EAAa,EAAqB,CACzC,OAAO,EAAY,UAAU,EAAQ,QAAQ,QAAQ,IAAK,CAAE,KAAM,EAAU,MAAO,CAAC,CAGtF,SAAS,EAAW,EAAqB,CACvC,OAAO,EAAY,UAAU,EAAQ,QAAQ,MAAM,IAAK,CAAE,KAAM,EAAU,MAAO,CAAC,CAGpF,OACE,EAAA,EAAA,MAAC,EAAD,CACE,MAAO,aAAa,EAAmB,eAAe,EAAM,KAAK,GACjE,WAAY,EAAM,WAClB,gBAAiB,EAAO,WACxB,cAAc,MACd,mBAAoB,CAAC,EAAO,cAL9B,EAOE,EAAA,EAAA,KAAC,EAAA,WAAD,CACE,WAAA,GACA,cAAe,EACf,cAAe,YAEf,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,qBACZ,EAAY,KAAK,EAAG,KACnB,EAAA,EAAA,KAAC,EAAD,CAEE,WAAY,GAAqB,CAAC,MAClC,MAAO,EACP,QAAS,EAAM,WACf,QAAA,GACA,eAAgB,EAAa,MAAM,GACnC,mBAAsB,EAAU,EAAe,EAAE,QAAQ,CAAC,CAC1D,mBAAqB,GAAwB,EAAQ,QAAQ,UAAU,OACzD,eACF,aACZ,aAAe,EAAc,WAAW,EAAa,EAAE,CAAgC,KAA7B,EAAc,aACxE,YAAa,EAAc,YAC3B,CAZK,EAAE,QAAQ,GAYf,CAAA,CAEA,CAAA,CACK,CAAA,EACb,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,4EAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,EACrB,EAAA,EAAA,KAAC,SAAD,CACE,QAAS,EAAM,WACf,UAAU,gCAET,EAAgB,UAAU,EAAW,QAAA,CAC/B,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./ImQRQGZr.chunk.js";import{t}from"./B-OL6Vs7.chunk.js";import{n}from"./C9ET3pjZ.chunk.js";import{t as r}from"./DeldjYRc.chunk.js";import{t as i}from"./BYYiNmLB.chunk.js";import{M as a}from"./app-B1XBsz23.js";var o=e.encloseNamespace(`settings.hooks`);function s(){let{hasPermissions:e}=a();return[{id:`my-account`,imageUrl:i.Settings.MY_ACCOUNT,name:o(`myAccount`),modules:[{id:`profile-details`,name:o(`profileDetails`),appLink:{application:t.SETTINGS,action:r.Settings.PROFILE_DETAILS},permissions:[n.EditProfileDetails]},{id:`email-settings`,name:o(`emailPassword`),appLink:{application:t.SETTINGS,action:r.Settings.ACCOUNT}}]}].map(t=>({...t,modules:t.modules.filter(t=>!(t.permissions?.length&&!e(t.permissions)))})).filter(e=>!!e.modules.length)}export{s as t};
2
- //# sourceMappingURL=i2-k6ULv2.chunk.js.map
1
+ import{t as e}from"./ImQRQGZr.chunk.js";import{t}from"./B-OL6Vs7.chunk.js";import{n}from"./C9ET3pjZ.chunk.js";import{t as r}from"./DeldjYRc.chunk.js";import{t as i}from"./BYYiNmLB.chunk.js";import{M as a}from"./app-gjHxcZG3.js";var o=e.encloseNamespace(`settings.hooks`);function s(){let{hasPermissions:e}=a();return[{id:`my-account`,imageUrl:i.Settings.MY_ACCOUNT,name:o(`myAccount`),modules:[{id:`profile-details`,name:o(`profileDetails`),appLink:{application:t.SETTINGS,action:r.Settings.PROFILE_DETAILS},permissions:[n.EditProfileDetails]},{id:`email-settings`,name:o(`emailPassword`),appLink:{application:t.SETTINGS,action:r.Settings.ACCOUNT}}]}].map(t=>({...t,modules:t.modules.filter(t=>!(t.permissions?.length&&!e(t.permissions)))})).filter(e=>!!e.modules.length)}export{s as t};
2
+ //# sourceMappingURL=DatscYpA2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"i2-k6ULv2.chunk.js","names":[],"sources":["../../src/apps/settings/hooks/useGetSettingsGroups.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\nimport { SettingsGroup } from 'apps/settings/interfaces/SettingsGroup';\n\nconst namespace = 'settings.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetSettingsGroups(): SettingsGroup[] {\n const { hasPermissions } = usePermissions();\n\n const groups: SettingsGroup[] = [\n {\n // Account Management\n id: 'my-account',\n imageUrl: ImageUrls.Settings.MY_ACCOUNT,\n name: getPhrase('myAccount'),\n modules: [\n {\n id: 'profile-details',\n name: getPhrase('profileDetails'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.PROFILE_DETAILS\n },\n permissions: [PermissionName.EditProfileDetails]\n },\n {\n id: 'email-settings',\n name: getPhrase('emailPassword'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.ACCOUNT\n }\n }\n ]\n }\n ];\n\n return groups.map(group => {\n return {\n ...group,\n modules: group.modules.filter(m => {\n if (m.permissions?.length && !hasPermissions(m.permissions))\n return false;\n \n return true;\n })\n };\n }).filter(group => !!group.modules.length);\n}\n"],"mappings":"oOAYA,IAAM,EAAY,EAAgB,iBADhB,iBAC2C,CAE7D,SAAgB,GAAwC,CACtD,GAAM,CAAE,kBAAmB,GAAgB,CA8B3C,MA5BgC,CAC9B,CAEE,GAAI,aACJ,SAAU,EAAU,SAAS,WAC7B,KAAM,EAAU,YAAY,CAC5B,QAAS,CACP,CACE,GAAI,kBACJ,KAAM,EAAU,iBAAiB,CACjC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,gBAC1B,CACD,YAAa,CAAC,EAAe,mBAAmB,CACjD,CACD,CACE,GAAI,iBACJ,KAAM,EAAU,gBAAgB,CAChC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,QAC1B,CACF,CACF,CACF,CACF,CAEa,IAAI,IACT,CACL,GAAG,EACH,QAAS,EAAM,QAAQ,OAAO,GAC5B,EAAI,EAAE,aAAa,QAAU,CAAC,EAAe,EAAE,YAAY,EAI3D,CACH,EACD,CAAC,OAAO,GAAS,CAAC,CAAC,EAAM,QAAQ,OAAO"}
1
+ {"version":3,"file":"DatscYpA2.chunk.js","names":[],"sources":["../../src/apps/settings/hooks/useGetSettingsGroups.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\nimport { SettingsGroup } from 'apps/settings/interfaces/SettingsGroup';\n\nconst namespace = 'settings.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetSettingsGroups(): SettingsGroup[] {\n const { hasPermissions } = usePermissions();\n\n const groups: SettingsGroup[] = [\n {\n // Account Management\n id: 'my-account',\n imageUrl: ImageUrls.Settings.MY_ACCOUNT,\n name: getPhrase('myAccount'),\n modules: [\n {\n id: 'profile-details',\n name: getPhrase('profileDetails'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.PROFILE_DETAILS\n },\n permissions: [PermissionName.EditProfileDetails]\n },\n {\n id: 'email-settings',\n name: getPhrase('emailPassword'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.ACCOUNT\n }\n }\n ]\n }\n ];\n\n return groups.map(group => {\n return {\n ...group,\n modules: group.modules.filter(m => {\n if (m.permissions?.length && !hasPermissions(m.permissions))\n return false;\n \n return true;\n })\n };\n }).filter(group => !!group.modules.length);\n}\n"],"mappings":"oOAYA,IAAM,EAAY,EAAgB,iBADhB,iBAC2C,CAE7D,SAAgB,GAAwC,CACtD,GAAM,CAAE,kBAAmB,GAAgB,CA8B3C,MA5BgC,CAC9B,CAEE,GAAI,aACJ,SAAU,EAAU,SAAS,WAC7B,KAAM,EAAU,YAAY,CAC5B,QAAS,CACP,CACE,GAAI,kBACJ,KAAM,EAAU,iBAAiB,CACjC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,gBAC1B,CACD,YAAa,CAAC,EAAe,mBAAmB,CACjD,CACD,CACE,GAAI,iBACJ,KAAM,EAAU,gBAAgB,CAChC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,QAC1B,CACF,CACF,CACF,CACF,CAEa,IAAI,IACT,CACL,GAAG,EACH,QAAS,EAAM,QAAQ,OAAO,GAC5B,EAAI,EAAE,aAAa,QAAU,CAAC,EAAe,EAAE,YAAY,EAI3D,CACH,EACD,CAAC,OAAO,GAAS,CAAC,CAAC,EAAM,QAAQ,OAAO"}
@@ -1,2 +1,2 @@
1
- import{p as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./Xo0rk19-.chunk.js";import{t as a}from"./Ca1QPe-q2.chunk.js";import{n as o}from"./D7d5XFW82.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./i2-k6ULv2.chunk.js";r();var l={myAccount:`_myAccount_1fl6w_1`,group:`_group_1fl6w_4`},u=n();function d(e){let t=e.modules?.filter(e=>!e.hide),n=!!t?.length;function r(){switch(e.id){case`my-account`:return`img-fluid ${l.myAccount}`;default:return`img-fluid`}}return(0,u.jsx)(a,{appLink:e.appLink,children:(0,u.jsxs)(`div`,{className:`row p-3 border border-dark m-0 w-100 h-100 ${l.group}`,children:[(0,u.jsx)(`div`,{className:`col-3`,children:(0,u.jsx)(`div`,{className:`d-flex justify-content-center align-items-center h-100`,children:(0,u.jsx)(`img`,{src:e.imageUrl,alt:``,role:`presentation`,className:r()})})}),(0,u.jsxs)(`div`,{className:`col-9 h-100 ${n?``:`d-flex align-items-center`}`,children:[(0,u.jsx)(`h2`,{className:`h4`,children:e.name}),n&&(0,u.jsx)(`ul`,{className:`list-unstyled mb-0`,children:t.map(e=>(0,u.jsx)(`li`,{className:`mb-1`,children:`appLink`in e?(0,u.jsx)(a,{className:`btn btn-link p-0`,appLink:e.appLink,children:e.name}):(0,u.jsx)(`button`,{className:`btn btn-link p-0 text-start`,onClick:e.onClick,children:e.name})},e.name))})]})]})})}var f={settingsContainer:`_settingsContainer_fw505_1`,groupContainer:`_groupContainer_fw505_4`},p=`settings.settings`;function m(){s({title:t.getPhrase(p,`pageTitle`)});let n=c();if(!n.length){e.throw(new i);return}return(0,u.jsxs)(`div`,{className:`px-3`,children:[(0,u.jsx)(`h1`,{className:`h2`,children:(0,u.jsx)(o,{namespace:p,phrase:`heading`})}),(0,u.jsx)(`main`,{className:`row`,children:n.map(e=>(0,u.jsx)(`div`,{className:`col-md-6 p-0`,children:(0,u.jsx)(`div`,{className:`h-100 ${f.groupContainer}`,children:(0,u.jsx)(d,{...e})})},e.id))})]})}export{m as SettingsView};
2
- //# sourceMappingURL=BXT8nHry2.chunk.js.map
1
+ import{p as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./Xo0rk19-.chunk.js";import{t as a}from"./Ca1QPe-q2.chunk.js";import{n as o}from"./D7d5XFW82.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./DatscYpA2.chunk.js";r();var l={myAccount:`_myAccount_1fl6w_1`,group:`_group_1fl6w_4`},u=n();function d(e){let t=e.modules?.filter(e=>!e.hide),n=!!t?.length;function r(){switch(e.id){case`my-account`:return`img-fluid ${l.myAccount}`;default:return`img-fluid`}}return(0,u.jsx)(a,{appLink:e.appLink,children:(0,u.jsxs)(`div`,{className:`row p-3 border border-dark m-0 w-100 h-100 ${l.group}`,children:[(0,u.jsx)(`div`,{className:`col-3`,children:(0,u.jsx)(`div`,{className:`d-flex justify-content-center align-items-center h-100`,children:(0,u.jsx)(`img`,{src:e.imageUrl,alt:``,role:`presentation`,className:r()})})}),(0,u.jsxs)(`div`,{className:`col-9 h-100 ${n?``:`d-flex align-items-center`}`,children:[(0,u.jsx)(`h2`,{className:`h4`,children:e.name}),n&&(0,u.jsx)(`ul`,{className:`list-unstyled mb-0`,children:t.map(e=>(0,u.jsx)(`li`,{className:`mb-1`,children:`appLink`in e?(0,u.jsx)(a,{className:`btn btn-link p-0`,appLink:e.appLink,children:e.name}):(0,u.jsx)(`button`,{className:`btn btn-link p-0 text-start`,onClick:e.onClick,children:e.name})},e.name))})]})]})})}var f={settingsContainer:`_settingsContainer_fw505_1`,groupContainer:`_groupContainer_fw505_4`},p=`settings.settings`;function m(){s({title:t.getPhrase(p,`pageTitle`)});let n=c();if(!n.length){e.throw(new i);return}return(0,u.jsxs)(`div`,{className:`px-3`,children:[(0,u.jsx)(`h1`,{className:`h2`,children:(0,u.jsx)(o,{namespace:p,phrase:`heading`})}),(0,u.jsx)(`main`,{className:`row`,children:n.map(e=>(0,u.jsx)(`div`,{className:`col-md-6 p-0`,children:(0,u.jsx)(`div`,{className:`h-100 ${f.groupContainer}`,children:(0,u.jsx)(d,{...e})})},e.id))})]})}export{m as SettingsView};
2
+ //# sourceMappingURL=DkaGC5IU2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BXT8nHry2.chunk.js","names":[],"sources":["../../src/apps/settings/components/settings-group/settings-group.module.scss","../../src/apps/settings/components/settings-group/SettingsGroup.tsx","../../src/apps/settings/views/settings/settings.module.scss","../../src/apps/settings/views/settings/SettingsView.tsx"],"sourcesContent":["@import '~styles/utils/include-media';\n:local {\n .myAccount {\n width: 5rem;\n }\n\n .group {\n width: 25rem;\n min-height: 11.5rem;\n border-radius: $border-radius-lg;\n }\n\n @include media('<=xl') {\n .group {\n width: 20rem;\n }\n }\n\n @include media('<=lg') {\n .group {\n min-height: 11rem;\n }\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { SettingsGroup as SettingsGroupProps } from 'apps/settings/interfaces/SettingsGroup';\n\nimport styles from './settings-group.module.scss';\n\nexport function SettingsGroup(props: SettingsGroupProps): JSX.Element {\n const modulesToDisplay = props.modules?.filter(m => !m.hide);\n\n const hasModules = !!modulesToDisplay?.length;\n\n function getImageClassName(): string {\n switch (props.id) {\n case 'my-account':\n return `img-fluid ${styles.myAccount}`;\n\n default:\n return 'img-fluid';\n }\n }\n\n return (\n <AppLink appLink={props.appLink}>\n <div className={`row p-3 border border-dark m-0 w-100 h-100 ${styles.group}`}>\n <div className='col-3'>\n <div className='d-flex justify-content-center align-items-center h-100'>\n <img\n src={props.imageUrl}\n alt=''\n role='presentation'\n className={getImageClassName()}\n />\n </div>\n </div>\n\n <div className={`col-9 h-100 ${!hasModules ? 'd-flex align-items-center' : ''}`}>\n <h2 className='h4'>{props.name}</h2>\n\n {hasModules && (\n <ul className='list-unstyled mb-0'>\n {modulesToDisplay.map(m => (\n <li key={m.name} className='mb-1'>\n {'appLink' in m ?\n <AppLink className='btn btn-link p-0' appLink={m.appLink}>\n {m.name}\n </AppLink> :\n <button className='btn btn-link p-0 text-start' onClick={m.onClick}>\n {m.name}\n </button>\n }\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n </AppLink>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 5);\n }\n\n .groupContainer {\n padding: map-get($spacers, 3);\n }\n\n @include media('<=xl') {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 4);\n }\n }\n\n @include media('<=lg') {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 3);\n }\n }\n\n @include media('<=md') {\n .groupContainer {\n margin: 0;\n margin-bottom: map-get($spacers, 3);\n }\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { SettingsGroup as SettingsGroupComponent } from 'apps/settings/components/settings-group/SettingsGroup';\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nimport styles from './settings.module.scss';\n\nconst namespace = 'settings.settings';\n\nexport function SettingsView(): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n const groups = useGetSettingsGroups();\n\n if (!groups.length) {\n Core.ErrorHelper.throw(new NotFoundError());\n return;\n }\n\n return (\n <div className='px-3'>\n <h1 className='h2'><Text namespace={namespace} phrase='heading' /></h1>\n\n <main className='row'>\n {groups.map(group => (\n <div key={group.id} className='col-md-6 p-0'>\n <div className={`h-100 ${styles.groupContainer}`}>\n <SettingsGroupComponent {...group} />\n </div>\n </div>\n ))}\n </main>\n </div>\n );\n}\n"],"mappings":"gZCQA,SAAgB,EAAc,EAAwC,CACpE,IAAM,EAAmB,EAAM,SAAS,OAAO,GAAK,CAAC,EAAE,KAAK,CAEtD,EAAa,CAAC,CAAC,GAAkB,OAEvC,SAAS,GAA4B,CACnC,OAAQ,EAAM,GAAd,CACE,IAAK,aACH,MAAO,aAAa,EAAO,YAE7B,QACE,MAAO,aAIb,OACE,EAAA,EAAA,KAAC,EAAD,CAAS,QAAS,EAAM,kBACtB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,8CAA8C,EAAO,iBAArE,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mEACb,EAAA,EAAA,KAAC,MAAD,CACE,IAAK,EAAM,SACX,IAAI,GACJ,KAAK,eACL,UAAW,GAAA,CACX,CAAA,CACE,CAAA,CACF,CAAA,EAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,eAAgB,EAA2C,GAA9B,uCAA7C,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,cAAM,EAAM,KAAU,CAAA,CAEnC,IACC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,8BACX,EAAiB,IAAI,IACpB,EAAA,EAAA,KAAC,KAAD,CAAiB,UAAU,gBACxB,YAAa,GACZ,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,mBAAmB,QAAS,EAAE,iBAC9C,EAAE,KACK,CAAA,EACV,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAU,8BAA8B,QAAS,EAAE,iBACxD,EAAE,KACI,CAAA,CAER,CATI,EAAE,KASN,CAAA,CAEJ,CAAA,CAAA,MAIH,CAAA,iGE5CR,EAAY,oBAElB,SAAgB,GAA4B,CAC1C,EAAmB,CAAE,MAAO,EAAgB,UAAU,EAAW,YAAY,CAAE,CAAC,CAEhF,IAAM,EAAS,GAAsB,CAErC,GAAI,CAAC,EAAO,OAAQ,CAClB,EAAiB,MAAM,IAAI,EAAgB,CAC3C,OAGF,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,eAAK,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,UAAY,CAAA,CAAK,CAAA,EAEvE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,eACb,EAAO,IAAI,IACV,EAAA,EAAA,KAAC,MAAD,CAAoB,UAAU,yBAC5B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,SAAS,EAAO,2BAC9B,EAAA,EAAA,KAAC,EAAD,CAAwB,GAAI,EAAS,CAAA,CACjC,CAAA,CACF,CAJI,EAAM,GAIV,CAAA,CAEH,CAAA,CAAA"}
1
+ {"version":3,"file":"DkaGC5IU2.chunk.js","names":[],"sources":["../../src/apps/settings/components/settings-group/settings-group.module.scss","../../src/apps/settings/components/settings-group/SettingsGroup.tsx","../../src/apps/settings/views/settings/settings.module.scss","../../src/apps/settings/views/settings/SettingsView.tsx"],"sourcesContent":["@import '~styles/utils/include-media';\n:local {\n .myAccount {\n width: 5rem;\n }\n\n .group {\n width: 25rem;\n min-height: 11.5rem;\n border-radius: $border-radius-lg;\n }\n\n @include media('<=xl') {\n .group {\n width: 20rem;\n }\n }\n\n @include media('<=lg') {\n .group {\n min-height: 11rem;\n }\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { SettingsGroup as SettingsGroupProps } from 'apps/settings/interfaces/SettingsGroup';\n\nimport styles from './settings-group.module.scss';\n\nexport function SettingsGroup(props: SettingsGroupProps): JSX.Element {\n const modulesToDisplay = props.modules?.filter(m => !m.hide);\n\n const hasModules = !!modulesToDisplay?.length;\n\n function getImageClassName(): string {\n switch (props.id) {\n case 'my-account':\n return `img-fluid ${styles.myAccount}`;\n\n default:\n return 'img-fluid';\n }\n }\n\n return (\n <AppLink appLink={props.appLink}>\n <div className={`row p-3 border border-dark m-0 w-100 h-100 ${styles.group}`}>\n <div className='col-3'>\n <div className='d-flex justify-content-center align-items-center h-100'>\n <img\n src={props.imageUrl}\n alt=''\n role='presentation'\n className={getImageClassName()}\n />\n </div>\n </div>\n\n <div className={`col-9 h-100 ${!hasModules ? 'd-flex align-items-center' : ''}`}>\n <h2 className='h4'>{props.name}</h2>\n\n {hasModules && (\n <ul className='list-unstyled mb-0'>\n {modulesToDisplay.map(m => (\n <li key={m.name} className='mb-1'>\n {'appLink' in m ?\n <AppLink className='btn btn-link p-0' appLink={m.appLink}>\n {m.name}\n </AppLink> :\n <button className='btn btn-link p-0 text-start' onClick={m.onClick}>\n {m.name}\n </button>\n }\n </li>\n ))}\n </ul>\n )}\n </div>\n </div>\n </AppLink>\n );\n}\n","@import '~styles/utils/include-media';\n:local {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 5);\n }\n\n .groupContainer {\n padding: map-get($spacers, 3);\n }\n\n @include media('<=xl') {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 4);\n }\n }\n\n @include media('<=lg') {\n .settingsContainer {\n padding: map-get($spacers, 3) map-get($spacers, 3);\n }\n }\n\n @include media('<=md') {\n .groupContainer {\n margin: 0;\n margin-bottom: map-get($spacers, 3);\n }\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { SettingsGroup as SettingsGroupComponent } from 'apps/settings/components/settings-group/SettingsGroup';\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nimport styles from './settings.module.scss';\n\nconst namespace = 'settings.settings';\n\nexport function SettingsView(): JSX.Element {\n useSetPageMetadata({ title: LanguageService.getPhrase(namespace, 'pageTitle') });\n\n const groups = useGetSettingsGroups();\n\n if (!groups.length) {\n Core.ErrorHelper.throw(new NotFoundError());\n return;\n }\n\n return (\n <div className='px-3'>\n <h1 className='h2'><Text namespace={namespace} phrase='heading' /></h1>\n\n <main className='row'>\n {groups.map(group => (\n <div key={group.id} className='col-md-6 p-0'>\n <div className={`h-100 ${styles.groupContainer}`}>\n <SettingsGroupComponent {...group} />\n </div>\n </div>\n ))}\n </main>\n </div>\n );\n}\n"],"mappings":"gZCQA,SAAgB,EAAc,EAAwC,CACpE,IAAM,EAAmB,EAAM,SAAS,OAAO,GAAK,CAAC,EAAE,KAAK,CAEtD,EAAa,CAAC,CAAC,GAAkB,OAEvC,SAAS,GAA4B,CACnC,OAAQ,EAAM,GAAd,CACE,IAAK,aACH,MAAO,aAAa,EAAO,YAE7B,QACE,MAAO,aAIb,OACE,EAAA,EAAA,KAAC,EAAD,CAAS,QAAS,EAAM,kBACtB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,8CAA8C,EAAO,iBAArE,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,mEACb,EAAA,EAAA,KAAC,MAAD,CACE,IAAK,EAAM,SACX,IAAI,GACJ,KAAK,eACL,UAAW,GAAA,CACX,CAAA,CACE,CAAA,CACF,CAAA,EAEN,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,eAAgB,EAA2C,GAA9B,uCAA7C,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,cAAM,EAAM,KAAU,CAAA,CAEnC,IACC,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,8BACX,EAAiB,IAAI,IACpB,EAAA,EAAA,KAAC,KAAD,CAAiB,UAAU,gBACxB,YAAa,GACZ,EAAA,EAAA,KAAC,EAAD,CAAS,UAAU,mBAAmB,QAAS,EAAE,iBAC9C,EAAE,KACK,CAAA,EACV,EAAA,EAAA,KAAC,SAAD,CAAQ,UAAU,8BAA8B,QAAS,EAAE,iBACxD,EAAE,KACI,CAAA,CAER,CATI,EAAE,KASN,CAAA,CAEJ,CAAA,CAAA,MAIH,CAAA,iGE5CR,EAAY,oBAElB,SAAgB,GAA4B,CAC1C,EAAmB,CAAE,MAAO,EAAgB,UAAU,EAAW,YAAY,CAAE,CAAC,CAEhF,IAAM,EAAS,GAAsB,CAErC,GAAI,CAAC,EAAO,OAAQ,CAClB,EAAiB,MAAM,IAAI,EAAgB,CAC3C,OAGF,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,eAAK,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,UAAY,CAAA,CAAK,CAAA,EAEvE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,eACb,EAAO,IAAI,IACV,EAAA,EAAA,KAAC,MAAD,CAAoB,UAAU,yBAC5B,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,SAAS,EAAO,2BAC9B,EAAA,EAAA,KAAC,EAAD,CAAwB,GAAI,EAAS,CAAA,CACjC,CAAA,CACF,CAJI,EAAM,GAIV,CAAA,CAEH,CAAA,CAAA"}