@clickview/reports 0.85.0-rc.0 → 0.85.0-rc.1

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 (69) hide show
  1. package/dist/.vite/manifest.json +265 -265
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/B6REaZgP.chunk.css +8 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{B8cDqk3r.chunk.js → 1pdbKMyH.chunk.js} +2 -2
  6. package/dist/scripts/{B8cDqk3r.chunk.js.map → 1pdbKMyH.chunk.js.map} +1 -1
  7. package/dist/scripts/{DK3tHqQv.chunk.js → 2MxiB_er.chunk.js} +2 -2
  8. package/dist/scripts/{DK3tHqQv.chunk.js.map → 2MxiB_er.chunk.js.map} +1 -1
  9. package/dist/scripts/{BPMB_v0s2.chunk.js → 3EzrYsbw2.chunk.js} +2 -2
  10. package/dist/scripts/{BPMB_v0s2.chunk.js.map → 3EzrYsbw2.chunk.js.map} +1 -1
  11. package/dist/scripts/{Kl4bbkgr2.chunk.js → 3q7nyVif2.chunk.js} +2 -2
  12. package/dist/scripts/{Kl4bbkgr2.chunk.js.map → 3q7nyVif2.chunk.js.map} +1 -1
  13. package/dist/scripts/{Bqyk3nb6.chunk.js → B9S_LeFP.chunk.js} +2 -2
  14. package/dist/scripts/{Bqyk3nb6.chunk.js.map → B9S_LeFP.chunk.js.map} +1 -1
  15. package/dist/scripts/{nCttr7GT.chunk.js → BKW2JeVr.chunk.js} +2 -2
  16. package/dist/scripts/{nCttr7GT.chunk.js.map → BKW2JeVr.chunk.js.map} +1 -1
  17. package/dist/scripts/{09UoyYDa2.chunk.js → BfhdSOSX2.chunk.js} +2 -2
  18. package/dist/scripts/{09UoyYDa2.chunk.js.map → BfhdSOSX2.chunk.js.map} +1 -1
  19. package/dist/scripts/{BxLSGp7E.chunk.js → BnfA2fln.chunk.js} +2 -2
  20. package/dist/scripts/{BxLSGp7E.chunk.js.map → BnfA2fln.chunk.js.map} +1 -1
  21. package/dist/scripts/{DcpG_Euo.chunk.js → BpzXy-5d.chunk.js} +2 -2
  22. package/dist/scripts/{DcpG_Euo.chunk.js.map → BpzXy-5d.chunk.js.map} +1 -1
  23. package/dist/scripts/Bs1YLdQb.chunk.js +1 -0
  24. package/dist/scripts/{CHNBnXs-2.chunk.js → Bua2prVk2.chunk.js} +2 -2
  25. package/dist/scripts/{CHNBnXs-2.chunk.js.map → Bua2prVk2.chunk.js.map} +1 -1
  26. package/dist/scripts/{Cf1whmy32.chunk.js → BvNaANAO2.chunk.js} +2 -2
  27. package/dist/scripts/{Cf1whmy32.chunk.js.map → BvNaANAO2.chunk.js.map} +1 -1
  28. package/dist/scripts/{Cn2w0OHm.chunk.js → Bx5qk-PZ.chunk.js} +3 -3
  29. package/dist/scripts/{Cn2w0OHm.chunk.js.map → Bx5qk-PZ.chunk.js.map} +1 -1
  30. package/dist/scripts/{DirX37xL2.chunk.js → CCLDpjnt2.chunk.js} +2 -2
  31. package/dist/scripts/{DirX37xL2.chunk.js.map → CCLDpjnt2.chunk.js.map} +1 -1
  32. package/dist/scripts/{Do88yXba.chunk.js → CJIwkABI.chunk.js} +2 -2
  33. package/dist/scripts/{Do88yXba.chunk.js.map → CJIwkABI.chunk.js.map} +1 -1
  34. package/dist/scripts/{ByFS52xu.chunk.js → CKRKdk5U.chunk.js} +2 -2
  35. package/dist/scripts/{ByFS52xu.chunk.js.map → CKRKdk5U.chunk.js.map} +1 -1
  36. package/dist/scripts/{Dh8AAJA8.chunk.js → CKVaLGJC.chunk.js} +2 -2
  37. package/dist/scripts/{Dh8AAJA8.chunk.js.map → CKVaLGJC.chunk.js.map} +1 -1
  38. package/dist/scripts/{BXoBk1VP2.chunk.js → CMKPCLR42.chunk.js} +2 -2
  39. package/dist/scripts/{BXoBk1VP2.chunk.js.map → CMKPCLR42.chunk.js.map} +1 -1
  40. package/dist/scripts/Cah5ISd-.chunk.js +1 -0
  41. package/dist/scripts/{CEteFkmm.chunk.js → ClOZ7MLV.chunk.js} +2 -2
  42. package/dist/scripts/{CEteFkmm.chunk.js.map → ClOZ7MLV.chunk.js.map} +1 -1
  43. package/dist/scripts/{P2dNpLmC2.chunk.js → CowZxgkl2.chunk.js} +2 -2
  44. package/dist/scripts/{P2dNpLmC2.chunk.js.map → CowZxgkl2.chunk.js.map} +1 -1
  45. package/dist/scripts/{BfahlE_H.chunk.js → Cpm-LpwK.chunk.js} +2 -2
  46. package/dist/scripts/{BfahlE_H.chunk.js.map → Cpm-LpwK.chunk.js.map} +1 -1
  47. package/dist/scripts/{C7odFv7G.chunk.js → CqCz1X85.chunk.js} +2 -2
  48. package/dist/scripts/{C7odFv7G.chunk.js.map → CqCz1X85.chunk.js.map} +1 -1
  49. package/dist/scripts/{adNSdUOa2.chunk.js → DMI-Lxl02.chunk.js} +2 -2
  50. package/dist/scripts/{adNSdUOa2.chunk.js.map → DMI-Lxl02.chunk.js.map} +1 -1
  51. package/dist/scripts/{CGjQxvvn2.chunk.js → DTy5e0Yv2.chunk.js} +2 -2
  52. package/dist/scripts/{CGjQxvvn2.chunk.js.map → DTy5e0Yv2.chunk.js.map} +1 -1
  53. package/dist/scripts/{B-Cpv5JW2.chunk.js → DgPadkLi2.chunk.js} +2 -2
  54. package/dist/scripts/{B-Cpv5JW2.chunk.js.map → DgPadkLi2.chunk.js.map} +1 -1
  55. package/dist/scripts/{CLXgS35R.chunk.js → Udxe63DQ.chunk.js} +2 -2
  56. package/dist/scripts/{CLXgS35R.chunk.js.map → Udxe63DQ.chunk.js.map} +1 -1
  57. package/dist/scripts/{app-eLOi12JS.js → app-BigOHyYp.js} +3 -3
  58. package/dist/scripts/{app-eLOi12JS.js.map → app-BigOHyYp.js.map} +1 -1
  59. package/dist/scripts/{BA2M0rUU.chunk.js → c7dUmf3R.chunk.js} +2 -2
  60. package/dist/scripts/{BA2M0rUU.chunk.js.map → c7dUmf3R.chunk.js.map} +1 -1
  61. package/dist/scripts/{Cu7qiGbY2.chunk.js → ktNy7dHM2.chunk.js} +2 -2
  62. package/dist/scripts/{Cu7qiGbY2.chunk.js.map → ktNy7dHM2.chunk.js.map} +1 -1
  63. package/dist/scripts/{BVgv-v1c.chunk.js → n2iCrpxU.chunk.js} +2 -2
  64. package/dist/scripts/{BVgv-v1c.chunk.js.map → n2iCrpxU.chunk.js.map} +1 -1
  65. package/dist/scripts/{BtwiC__j2.chunk.js → r-dVoZ7W2.chunk.js} +2 -2
  66. package/dist/scripts/{BtwiC__j2.chunk.js.map → r-dVoZ7W2.chunk.js.map} +1 -1
  67. package/package.json +1 -1
  68. package/dist/scripts/DcQNbWG1.chunk.js +0 -1
  69. package/dist/scripts/DxPCyajz.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import{P as e,st as t}from"./CM0wW4AE.chunk.js";import{d as n,n as r}from"./dUFTODMz.chunk.js";import{t as i}from"./C5CZZ7Gl.chunk.js";import{t as a}from"./CjM_tQvd.chunk.js";import{t as o}from"./NaTUzw6f.chunk.js";import{n as s}from"./CNQKHXPY.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./C7xZhn-Q.chunk.js";import{t as d}from"./DIAxWspB.chunk.js";import{b as f,r as p}from"./app-eLOi12JS.js";import{a as m,i as h,n as g,s as _,t as v}from"./DirX37xL2.chunk.js";import{n as y,t as b}from"./B-Cpv5JW2.chunk.js";import{i as x,t as S}from"./BVgv-v1c.chunk.js";var C=o();t();var w={logins(e,t,n,r){return{url:s.urlBuilder(`{gateway}/v1/analytics/logins`,{...e,timeOffset:a.getTimezoneOffset()}),key:b(`logins`,e),normalize:!1,success:t,error:n,always:r}}},T=e(),E={image:`_image_zpxv9_1`},D=c.encloseNamespace(`reportsShared.schoolLoginsByGroupCardEmptyState`);function O(){return(0,T.jsxs)(d,{className:`flex-grow-1 justify-content-center`,children:[(0,T.jsx)(d.Image,{src:l.EmptyStates.Shared.School,className:E.image}),(0,T.jsx)(d.Heading,{className:`h6`,children:D(`heading`)}),(0,T.jsx)(d.Info,{className:`w-100`,children:D(`description`)})]})}var k=`logins.schoolLoginsByGroupCard`;function A(){let e=p(`logins`),t=n(w.logins(e)),i=f(),a=e=>e===`Unknown`||e===null?`Staff`:e,o=g(t.data?.yearGroupCount?.map(e=>({name:a(e.name),count:e.count}))),s=o?.reduce((e,t)=>e+t.y,0);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`h6 mb-1`,children:(0,T.jsx)(r,{namespace:k,phrase:i?`totalLoginsTertiary`:`totalLogins`,options:{logins:s}})}),o.length?(0,T.jsx)(C.Scrollbars,{className:`position-relative`,children:(0,T.jsx)(`div`,{className:`position-absolute w-100`,children:(0,T.jsx)(_,{data:o})})}):(0,T.jsx)(O,{})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-50`,children:`\xA0`})})}var j={MONTH:35,YEAR:365},M={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},N={day:`D MMM`,month:`MMM`,year:`YYYY`};function P(e){let t=a.diffBetween(e.end,e.start,`day`);return t>j.YEAR?`year`:t>j.MONTH?`month`:`day`}function F(e,t){let n=[],r=a.convertUTCToLocal(e.start),i=a.convertUTCToLocal(e.end),o=a.format(r,M[t]);for(;!a.isAfter(o,i,t);)n.push(o),o=a.format(a.add(o,1,t),M[t]);return n}function I(e,t){if(!e)return null;let n=P(t),r=F(t,n),o={};e.forEach(e=>{if(!e.userType)return;let t=`groupedDateWatched`in e&&e.groupedDateWatched||`groupedLoggedOn`in e&&e.groupedLoggedOn,r=a.format(a.convertUTCToLocal(t),M[n]);o[e.userType]=o[e.userType]??{},o[e.userType][r]=o[e.userType][r]??0,o[e.userType][r]+=e.count});let s=Object.keys(o);return s.length?{categories:r.map(e=>a.format(e,N[n])),data:i.sortBy(s.map(e=>({name:m(e),type:`line`,data:r.map(t=>o[e][t]??0),color:h(e)})),`name`)}:{categories:r.map(e=>a.format(e,N[n])),data:[]}}var L=`logins.schoolLoginsByMonthCard`;function R(){let e=p(`logins`),t=I(n(w.logins(e)).data?.data,e);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:t?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,T.jsx)(r,{namespace:L,phrase:`loginActivity`})}),(0,T.jsx)(v,{categories:t.categories,data:t.data})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var z={column2:`_column2_1cfp0_1`,column1:`_column1_1cfp0_1`},B=c.encloseNamespace(`logins.schoolLoginOverview`);function V(){return u({title:B(`title`)}),y(B(`title`)),x(S()),(0,T.jsx)(`div`,{children:(0,T.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,T.jsx)(`div`,{className:`${z.column1}`,children:(0,T.jsx)(A,{})}),(0,T.jsx)(`div`,{className:`${z.column2}`,children:(0,T.jsx)(R,{})})]})})}export{V as SchoolLoginOverview};
2
- //# sourceMappingURL=BA2M0rUU.chunk.js.map
1
+ import{P as e,st as t}from"./CM0wW4AE.chunk.js";import{d as n,n as r}from"./dUFTODMz.chunk.js";import{t as i}from"./C5CZZ7Gl.chunk.js";import{t as a}from"./CjM_tQvd.chunk.js";import{t as o}from"./NaTUzw6f.chunk.js";import{n as s}from"./CNQKHXPY.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./C7xZhn-Q.chunk.js";import{t as d}from"./DIAxWspB.chunk.js";import{b as f,r as p}from"./app-BigOHyYp.js";import{a as m,i as h,n as g,s as _,t as v}from"./CCLDpjnt2.chunk.js";import{n as y,t as b}from"./DgPadkLi2.chunk.js";import{i as x,t as S}from"./n2iCrpxU.chunk.js";var C=o();t();var w={logins(e,t,n,r){return{url:s.urlBuilder(`{gateway}/v1/analytics/logins`,{...e,timeOffset:a.getTimezoneOffset()}),key:b(`logins`,e),normalize:!1,success:t,error:n,always:r}}},T=e(),E={image:`_image_zpxv9_1`},D=c.encloseNamespace(`reportsShared.schoolLoginsByGroupCardEmptyState`);function O(){return(0,T.jsxs)(d,{className:`flex-grow-1 justify-content-center`,children:[(0,T.jsx)(d.Image,{src:l.EmptyStates.Shared.School,className:E.image}),(0,T.jsx)(d.Heading,{className:`h6`,children:D(`heading`)}),(0,T.jsx)(d.Info,{className:`w-100`,children:D(`description`)})]})}var k=`logins.schoolLoginsByGroupCard`;function A(){let e=p(`logins`),t=n(w.logins(e)),i=f(),a=e=>e===`Unknown`||e===null?`Staff`:e,o=g(t.data?.yearGroupCount?.map(e=>({name:a(e.name),count:e.count}))),s=o?.reduce((e,t)=>e+t.y,0);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`h6 mb-1`,children:(0,T.jsx)(r,{namespace:k,phrase:i?`totalLoginsTertiary`:`totalLogins`,options:{logins:s}})}),o.length?(0,T.jsx)(C.Scrollbars,{className:`position-relative`,children:(0,T.jsx)(`div`,{className:`position-absolute w-100`,children:(0,T.jsx)(_,{data:o})})}):(0,T.jsx)(O,{})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-50`,children:`\xA0`})})}var j={MONTH:35,YEAR:365},M={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},N={day:`D MMM`,month:`MMM`,year:`YYYY`};function P(e){let t=a.diffBetween(e.end,e.start,`day`);return t>j.YEAR?`year`:t>j.MONTH?`month`:`day`}function F(e,t){let n=[],r=a.convertUTCToLocal(e.start),i=a.convertUTCToLocal(e.end),o=a.format(r,M[t]);for(;!a.isAfter(o,i,t);)n.push(o),o=a.format(a.add(o,1,t),M[t]);return n}function I(e,t){if(!e)return null;let n=P(t),r=F(t,n),o={};e.forEach(e=>{if(!e.userType)return;let t=`groupedDateWatched`in e&&e.groupedDateWatched||`groupedLoggedOn`in e&&e.groupedLoggedOn,r=a.format(a.convertUTCToLocal(t),M[n]);o[e.userType]=o[e.userType]??{},o[e.userType][r]=o[e.userType][r]??0,o[e.userType][r]+=e.count});let s=Object.keys(o);return s.length?{categories:r.map(e=>a.format(e,N[n])),data:i.sortBy(s.map(e=>({name:m(e),type:`line`,data:r.map(t=>o[e][t]??0),color:h(e)})),`name`)}:{categories:r.map(e=>a.format(e,N[n])),data:[]}}var L=`logins.schoolLoginsByMonthCard`;function R(){let e=p(`logins`),t=I(n(w.logins(e)).data?.data,e);return(0,T.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:t?(0,T.jsxs)(T.Fragment,{children:[(0,T.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,T.jsx)(r,{namespace:L,phrase:`loginActivity`})}),(0,T.jsx)(v,{categories:t.categories,data:t.data})]}):(0,T.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var z={column2:`_column2_1cfp0_1`,column1:`_column1_1cfp0_1`},B=c.encloseNamespace(`logins.schoolLoginOverview`);function V(){return u({title:B(`title`)}),y(B(`title`)),x(S()),(0,T.jsx)(`div`,{children:(0,T.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,T.jsx)(`div`,{className:`${z.column1}`,children:(0,T.jsx)(A,{})}),(0,T.jsx)(`div`,{className:`${z.column2}`,children:(0,T.jsx)(R,{})})]})})}export{V as SchoolLoginOverview};
2
+ //# sourceMappingURL=c7dUmf3R.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BA2M0rUU.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'>&nbsp;</div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"c7dUmf3R.chunk.js","names":[],"sources":["../../src/shared/flight-requests/LoginRequests.ts","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/school-logins-by-group-card-card-empty-state.module.scss","../../src/apps/logins/views/cards/school-logins-by-group-card/empty-state/SchoolLoginsByGroupCardEmptyState.tsx","../../src/apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView.tsx","../../src/shared/utils/LineChartByMonthUtils.ts","../../src/apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView.tsx","../../src/apps/logins/views/school-login-overview/school-login-overview.module.scss","../../src/apps/logins/views/school-login-overview/SchoolLoginOverview.tsx"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces/Xhr';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const LoginRequests = {\n logins(\n filter: AnalyticsRequestFilter,\n success?: (data: LoginEventResponse) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/logins', {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n }),\n key: getAnalyticsRequestKey('logins', filter),\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n",":local {\n .image {\n width: 200px;\n height: auto;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsShared.schoolLoginsByGroupCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './school-logins-by-group-card-card-empty-state.module.scss';\n\nexport function SchoolLoginsByGroupCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.School}\n className={styles.image}\n />\n <EmptyState.Heading className='h6'>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info className='w-100'>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useIsTertiary } from 'shared/hooks/useIsTertiary';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\n\nimport { SchoolLoginsByGroupCardEmptyState } from './empty-state/SchoolLoginsByGroupCardEmptyState';\n\nconst namespace = 'logins.schoolLoginsByGroupCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByGroupCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n \n const isTertiary = useIsTertiary();\n\n const mapNameToGroup = (name: string) => (name === 'Unknown' || name === null) ? 'Staff' : name;\n const totalLoginsByGroupData = getCountByGroup(\n logins.data?.yearGroupCount?.map(group => ({\n name: mapNameToGroup(group.name),\n count: group.count\n }))\n );\n const totalLoginsCount = totalLoginsByGroupData?.reduce((acc, group) => (acc + group.y), 0);\n\n return (\n <div className='d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3'>\n {totalLoginsByGroupData ?\n <>\n <h2 className='h6 mb-1'>\n <Text\n namespace={namespace}\n phrase={isTertiary ? 'totalLoginsTertiary' : 'totalLogins'}\n options={{ logins: totalLoginsCount }}\n />\n </h2>\n\n {totalLoginsByGroupData.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100'>\n <VerticalBarChart data={totalLoginsByGroupData} />\n </div>\n </Scrollbars> :\n <SchoolLoginsByGroupCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-50'>&nbsp;</div>\n }\n </div>\n );\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LoginEvent } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { VideoViewEvent } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\n\nconst GroupByThresholds = {\n MONTH: 35,\n YEAR: 365\n};\n\nconst DateFormats = {\n day: 'YYYY-MM-DD',\n month: 'YYYY-MM',\n year: 'YYYY'\n};\n\nconst DisplayFormats = {\n day: 'D MMM',\n month: 'MMM',\n year: 'YYYY'\n};\n\ntype GroupedViewData = {\n [key in UserGroup]?: {\n [date: string]: number\n }\n};\n\ntype GroupBy = 'day' | 'month' | 'year';\n\ninterface ChartData {\n categories: string[];\n data: Highcharts.SeriesLineOptions[];\n}\n\nfunction getGroupBy(requestFilter: AnalyticsRequestFilter): GroupBy {\n const range = DateHelper.diffBetween(requestFilter.end, requestFilter.start, 'day');\n\n if (range > GroupByThresholds.YEAR)\n return 'year';\n\n if (range > GroupByThresholds.MONTH)\n return 'month';\n\n return 'day';\n}\n\nfunction getFullDateRange(requestFilter: AnalyticsRequestFilter, groupBy: GroupBy): string[] {\n const range: string[] = [];\n\n const localStart = DateHelper.convertUTCToLocal(requestFilter.start);\n const localEnd = DateHelper.convertUTCToLocal(requestFilter.end);\n\n let currentDate = DateHelper.format(localStart, DateFormats[groupBy]);\n\n while (!DateHelper.isAfter(currentDate, localEnd, groupBy)) {\n range.push(currentDate);\n currentDate = DateHelper.format(DateHelper.add(currentDate, 1, groupBy), DateFormats[groupBy]);\n }\n\n return range;\n}\n\nexport function getChartData(\n events: VideoViewEvent[] | LoginEvent[],\n requestFilter: AnalyticsRequestFilter\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped: GroupedViewData = {};\n\n events.forEach(ev => {\n if (!ev.userType)\n return;\n\n const eventDate = 'groupedDateWatched' in ev && ev.groupedDateWatched || 'groupedLoggedOn' in ev && ev.groupedLoggedOn;\n const eventDateFormatted = DateHelper.format(DateHelper.convertUTCToLocal(eventDate), DateFormats[groupBy]);\n\n grouped[ev.userType] = grouped[ev.userType] ?? {};\n grouped[ev.userType][eventDateFormatted] = grouped[ev.userType][eventDateFormatted] ?? 0;\n grouped[ev.userType][eventDateFormatted] += ev.count;\n });\n\n const roles = Object.keys(grouped) as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n ArrayHelper.sortBy(roles.map(r => ({\n name: mapUserTypeToChartLabel(r),\n type: 'line',\n data: fullDateRange.map(d => grouped[r][d] ?? 0),\n color: mapUserTypeToChartColour(r)\n })), 'name')\n };\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { LoginEventResponse } from 'libs/shared/apps/analytics/interfaces/LoginEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { LoginRequests } from 'shared/flight-requests/LoginRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getChartData } from 'shared/utils/LineChartByMonthUtils';\n\nconst namespace = 'logins.schoolLoginsByMonthCard';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SchoolLoginsByMonthCardView() {\n const requestFilter = useGetRequestFilter('logins');\n\n const logins = Flight.useBasicFetch<LoginEventResponse>(LoginRequests.logins(requestFilter));\n\n const chartData = getChartData(logins.data?.data, requestFilter);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3 position-relative'>\n {chartData ?\n <>\n <h2 className='position-absolute h6 mb-1'><Text namespace={namespace} phrase='loginActivity' /></h2>\n\n <LineChart categories={chartData.categories} data={chartData.data} />\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>}\n </div>\n );\n}\n",":local {\n %column {\n height: 30rem;\n }\n\n .column1 {\n @extend %column;\n flex: 3 0;\n }\n \n .column2 {\n @extend %column;\n flex: 4 0;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getLoginHeaderActions } from 'shared/utils/HeaderActionUtils';\n\nimport { SchoolLoginsByGroupCardView } from 'apps/logins/views/cards/school-logins-by-group-card/SchoolLoginsByGroupCardView';\nimport { SchoolLoginsByMonthCardView } from 'apps/logins/views/cards/school-logins-by-month-card/SchoolLoginsByMonthCardView';\n\nimport styles from './school-login-overview.module.scss';\n\nconst namespace = 'logins.schoolLoginOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SchoolLoginOverview() {\n useSetPageMetadata({ title: getPhrase('title') });\n useSetHeaderTitle(getPhrase('title'));\n useSetHeaderActions(getLoginHeaderActions());\n\n return (\n <div>\n <div className='d-flex gap-3'>\n <div className={`${styles.column1}`}>\n <SchoolLoginsByGroupCardView />\n </div>\n <div className={`${styles.column2}`}>\n <SchoolLoginsByMonthCardView />\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Jn as e,st as t}from"./CM0wW4AE.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./B-Cpv5JW2.chunk.js";var i=e(t(),1),a=new Map,o=new WeakMap,s=0,c=void 0;function l(e){return e?o.has(e)?o.get(e):(s+=1,o.set(e,s.toString()),o.get(e)):`0`}function u(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?l(e.root):e[t]}`).toString()}function d(e){let t=u(e),n=a.get(t);if(!n){let r=new Map,i,o=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&i.some(e=>t.intersectionRatio>=e);e.trackVisibility&&t.isVisible===void 0&&(t.isVisible=a),(n=r.get(t.target))==null||n.forEach(e=>{e(a,t)})})},e);i=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:r},a.set(t,n)}return n}function f(e,t,n={},r=c){if(window.IntersectionObserver===void 0&&r!==void 0){let i=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold==`number`?n.threshold:0,time:0,boundingClientRect:i,intersectionRect:i,rootBounds:i}),()=>{}}let{id:i,observer:o,elements:s}=d(n),l=s.get(e)||[];return s.has(e)||s.set(e,l),l.push(t),o.observe(e),function(){l.splice(l.indexOf(t),1),l.length===0&&(s.delete(e),o.unobserve(e)),s.size===0&&(o.disconnect(),a.delete(i))}}function p({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:a,triggerOnce:o,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){let[d,p]=i.useState(null),m=i.useRef(),[h,g]=i.useState({inView:!!c,entry:void 0});m.current=u,i.useEffect(()=>{if(s||!d)return;let i;return i=f(d,(e,t)=>{g({inView:e,entry:t}),m.current&&m.current(e,t),t.isIntersecting&&o&&i&&(i(),i=void 0)},{root:a,rootMargin:r,threshold:e,trackVisibility:n,delay:t},l),()=>{i&&i()}},[Array.isArray(e)?e.toString():e,d,a,r,o,s,n,l,t]);let _=h.entry?.target,v=i.useRef();!d&&_&&!o&&!s&&v.current!==_&&(v.current=_,g({inView:!!c,entry:void 0}));let y=[p,h.inView,h.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}function m(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var h={aggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,m(t)),key:r(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,m(i)),key:r(`video:views:v2:aggregation:${e}`,i,t),normalize:!1}},aggregationChart(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,m(t)),key:r(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,m(i)),key:r(`video:views:v2:aggregation:chart:${e}`,i,t),normalize:!1}},topStreams(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...m(t),limit:e}),key:r(`video:views:v2:top:streams:${e}`,t),normalize:!1}},videoHeatMap(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...m(t),cursor:i}),key:r(`video:views:v2:heatmap:${e}`,t,i),normalize:!1}},videoHeatMapAggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,m(t)),key:r(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{p as n,h as t};
2
- //# sourceMappingURL=Cu7qiGbY2.chunk.js.map
1
+ import{Jn as e,st as t}from"./CM0wW4AE.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./DgPadkLi2.chunk.js";var i=e(t(),1),a=new Map,o=new WeakMap,s=0,c=void 0;function l(e){return e?o.has(e)?o.get(e):(s+=1,o.set(e,s.toString()),o.get(e)):`0`}function u(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?l(e.root):e[t]}`).toString()}function d(e){let t=u(e),n=a.get(t);if(!n){let r=new Map,i,o=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&i.some(e=>t.intersectionRatio>=e);e.trackVisibility&&t.isVisible===void 0&&(t.isVisible=a),(n=r.get(t.target))==null||n.forEach(e=>{e(a,t)})})},e);i=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:r},a.set(t,n)}return n}function f(e,t,n={},r=c){if(window.IntersectionObserver===void 0&&r!==void 0){let i=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold==`number`?n.threshold:0,time:0,boundingClientRect:i,intersectionRect:i,rootBounds:i}),()=>{}}let{id:i,observer:o,elements:s}=d(n),l=s.get(e)||[];return s.has(e)||s.set(e,l),l.push(t),o.observe(e),function(){l.splice(l.indexOf(t),1),l.length===0&&(s.delete(e),o.unobserve(e)),s.size===0&&(o.disconnect(),a.delete(i))}}function p({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:a,triggerOnce:o,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){let[d,p]=i.useState(null),m=i.useRef(),[h,g]=i.useState({inView:!!c,entry:void 0});m.current=u,i.useEffect(()=>{if(s||!d)return;let i;return i=f(d,(e,t)=>{g({inView:e,entry:t}),m.current&&m.current(e,t),t.isIntersecting&&o&&i&&(i(),i=void 0)},{root:a,rootMargin:r,threshold:e,trackVisibility:n,delay:t},l),()=>{i&&i()}},[Array.isArray(e)?e.toString():e,d,a,r,o,s,n,l,t]);let _=h.entry?.target,v=i.useRef();!d&&_&&!o&&!s&&v.current!==_&&(v.current=_,g({inView:!!c,entry:void 0}));let y=[p,h.inView,h.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}function m(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var h={aggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,m(t)),key:r(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,m(i)),key:r(`video:views:v2:aggregation:${e}`,i,t),normalize:!1}},aggregationChart(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,m(t)),key:r(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,m(i)),key:r(`video:views:v2:aggregation:chart:${e}`,i,t),normalize:!1}},topStreams(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...m(t),limit:e}),key:r(`video:views:v2:top:streams:${e}`,t),normalize:!1}},videoHeatMap(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...m(t),cursor:i}),key:r(`video:views:v2:heatmap:${e}`,t,i),normalize:!1}},videoHeatMapAggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,m(t)),key:r(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{p as n,h as t};
2
+ //# sourceMappingURL=ktNy7dHM2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Cu7qiGbY2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"ktNy7dHM2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{Jn as e,P as t,st as n}from"./CM0wW4AE.chunk.js";import{r}from"./B01-hGyk.chunk.js";import{n as i}from"./KyOyA3o8.chunk.js";import{t as a}from"./I5Dnl_eN.chunk.js";import{n as o,r as s}from"./H5KLIhR_.chunk.js";import{n as c}from"./dSmIXyxJ.chunk.js";import{$ as l,F as u,M as d}from"./app-eLOi12JS.js";import{m as f}from"./DirX37xL2.chunk.js";import{t as p}from"./C7odFv7G.chunk.js";var m=e(n());function h(e){let[,t]=i(d.HEADER_ACTIONS);(0,m.useEffect)(()=>(t(e),()=>{t(null)}),[!!e])}var g=t(),_=a.encloseNamespace(`reportsShared.anonymiseAction`);function v(){let[e,t]=i(d.ANONYMISE_USERS,!1);return(0,g.jsxs)(`div`,{className:`d-flex align-items center justify-content-between`,onClick:()=>t(!e),children:[(0,g.jsx)(`span`,{className:`me-3`,children:_(`hideNames`)}),(0,g.jsx)(c,{on:e,onClick:()=>{}})]})}var y=a.encloseNamespace(`reportsShared.utils`);function b(e){let t=f(l.getPrimaryObjectUrl);if(!e)return;let n=[];return t&&n.push({label:()=>(0,g.jsxs)(`span`,{className:`d-flex justify-content-between align-items-center`,children:[(0,g.jsx)(`span`,{className:`me-2`,children:y(`seeVideo`)}),(0,g.jsx)(r,{svg:u})]}),href:t(e),openInNewTab:!0}),n.push({label:()=>(0,g.jsx)(v,{})}),n}function x(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.VideoViews}}}]}function S(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.Logins}}}]}export{h as i,x as n,b as r,S as t};
2
- //# sourceMappingURL=BVgv-v1c.chunk.js.map
1
+ import{Jn as e,P as t,st as n}from"./CM0wW4AE.chunk.js";import{r}from"./B01-hGyk.chunk.js";import{n as i}from"./KyOyA3o8.chunk.js";import{t as a}from"./I5Dnl_eN.chunk.js";import{n as o,r as s}from"./H5KLIhR_.chunk.js";import{n as c}from"./dSmIXyxJ.chunk.js";import{$ as l,F as u,M as d}from"./app-BigOHyYp.js";import{m as f}from"./CCLDpjnt2.chunk.js";import{t as p}from"./CqCz1X85.chunk.js";var m=e(n());function h(e){let[,t]=i(d.HEADER_ACTIONS);(0,m.useEffect)(()=>(t(e),()=>{t(null)}),[!!e])}var g=t(),_=a.encloseNamespace(`reportsShared.anonymiseAction`);function v(){let[e,t]=i(d.ANONYMISE_USERS,!1);return(0,g.jsxs)(`div`,{className:`d-flex align-items center justify-content-between`,onClick:()=>t(!e),children:[(0,g.jsx)(`span`,{className:`me-3`,children:_(`hideNames`)}),(0,g.jsx)(c,{on:e,onClick:()=>{}})]})}var y=a.encloseNamespace(`reportsShared.utils`);function b(e){let t=f(l.getPrimaryObjectUrl);if(!e)return;let n=[];return t&&n.push({label:()=>(0,g.jsxs)(`span`,{className:`d-flex justify-content-between align-items-center`,children:[(0,g.jsx)(`span`,{className:`me-2`,children:y(`seeVideo`)}),(0,g.jsx)(r,{svg:u})]}),href:t(e),openInNewTab:!0}),n.push({label:()=>(0,g.jsx)(v,{})}),n}function x(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.VideoViews}}}]}function S(){return[{label:y(`generateReport`),appLink:{application:s.DEFAULT,action:o.Default.GENERATE_REPORT,params:{type:p.Logins}}}]}export{h as i,x as n,b as r,S as t};
2
+ //# sourceMappingURL=n2iCrpxU.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BVgv-v1c.chunk.js","names":[],"sources":["../../src/shared/hooks/UseSetHeaderActions.ts","../../src/shared/components/anonymise-action/AnonymiseAction.tsx","../../src/shared/utils/HeaderActionUtils.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * This hook will only set the actions on the initial render.\n * If the actions are dynamic, either this hook will need to be updated\n * or useViewModel used directly.\n */\nexport function useSetHeaderActions(actions?: DropdownActionOptions[]): void {\n const [ , setActions ] = useViewModel<DropdownActionOptions[]>(ViewModelKeys.HEADER_ACTIONS);\n\n useEffect(() => {\n setActions(actions);\n\n return () => {\n setActions(null);\n };\n }, [!!actions]);\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nconst namespace = 'reportsShared.anonymiseAction';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AnonymiseAction(): JSX.Element {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS, false);\n\n return (\n <div\n className='d-flex align-items center justify-content-between'\n onClick={() => setAnonymiseUsers(!anonymiseUsers)}\n >\n <span className='me-3'>\n {getPhrase('hideNames')}\n </span>\n <ToggleSwitch on={anonymiseUsers} onClick={() => {}} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AnonymiseAction } from 'shared/components/anonymise-action/AnonymiseAction';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { GenerateReportType } from 'shared/views/generate-report/GenerateReportView';\n\nimport { ExternalRouteHelper } from './ExternalRouteHelper';\n\nconst namespace = 'reportsShared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetObjectHeaderActions(object?: BaseObject): DropdownActionOptions[] {\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n if (!object)\n return;\n\n const actions: DropdownActionOptions[] = [];\n\n if (getObjectUrl)\n actions.push({\n label: () => (\n <span\n className='d-flex justify-content-between align-items-center'\n >\n <span className='me-2'>\n {/* // TODO: once we have non-video types this will need to be updated. */}\n {getPhrase('seeVideo')}\n </span>\n <SvgContainer svg={NewWindowSvg} />\n </span>\n ),\n href: getObjectUrl(object),\n openInNewTab: true\n });\n\n actions.push({\n label: () => <AnonymiseAction />\n });\n\n return actions;\n}\n\nexport function getVideoHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.VideoViews }\n }\n }];\n}\n\nexport function getLoginHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.Logins }\n }\n }];\n}\n"],"mappings":"oZAaA,SAAgB,EAAoB,EAAyC,CAC3E,GAAM,EAAI,GAAe,EAAsC,EAAc,eAAe,EAE5F,EAAA,EAAA,gBACE,EAAW,EAAQ,KAEN,CACX,EAAW,KAAK,GAEjB,CAAC,CAAC,CAAC,EAAQ,CAAC,WCZX,EAAY,EAAgB,iBADhB,gCAC2C,CAE7D,SAAgB,GAA+B,CAC7C,GAAM,CAAE,EAAgB,GAAsB,EAAsB,EAAc,gBAAiB,GAAM,CAEzG,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,oDACV,YAAe,EAAkB,CAAC,EAAe,UAFnD,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBACb,EAAU,YAAY,CAClB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,GAAI,EAAgB,YAAe,GAAM,CAAA,CACnD,GCNV,IAAM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,EAA0B,EAA8C,CACtF,IAAM,EAAe,EAAkB,EAAoB,oBAAoB,CAC/E,GAAI,CAAC,EACH,OAEF,IAAM,EAAmC,EAAE,CAuB3C,OArBI,GACF,EAAQ,KAAK,CACX,WACE,EAAA,EAAA,MAAC,OAAD,CACE,UAAU,6DADZ,EAGE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAEb,EAAU,WAAW,CACjB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAgB,CAAA,CAC9B,GAET,KAAM,EAAa,EAAO,CAC1B,aAAc,GACf,CAAC,CAEJ,EAAQ,KAAK,CACX,WAAa,EAAA,EAAA,KAAC,EAAD,EAAmB,CAAA,CACjC,CAAC,CAEK,EAGT,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,WAAY,CAChD,CACF,CAAC,CAGJ,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,OAAQ,CAC5C,CACF,CAAC"}
1
+ {"version":3,"file":"n2iCrpxU.chunk.js","names":[],"sources":["../../src/shared/hooks/UseSetHeaderActions.ts","../../src/shared/components/anonymise-action/AnonymiseAction.tsx","../../src/shared/utils/HeaderActionUtils.tsx"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\n/**\n * This hook will only set the actions on the initial render.\n * If the actions are dynamic, either this hook will need to be updated\n * or useViewModel used directly.\n */\nexport function useSetHeaderActions(actions?: DropdownActionOptions[]): void {\n const [ , setActions ] = useViewModel<DropdownActionOptions[]>(ViewModelKeys.HEADER_ACTIONS);\n\n useEffect(() => {\n setActions(actions);\n\n return () => {\n setActions(null);\n };\n }, [!!actions]);\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nconst namespace = 'reportsShared.anonymiseAction';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AnonymiseAction(): JSX.Element {\n const [ anonymiseUsers, setAnonymiseUsers ] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS, false);\n\n return (\n <div\n className='d-flex align-items center justify-content-between'\n onClick={() => setAnonymiseUsers(!anonymiseUsers)}\n >\n <span className='me-3'>\n {getPhrase('hideNames')}\n </span>\n <ToggleSwitch on={anonymiseUsers} onClick={() => {}} />\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DropdownActionOptions } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { AnonymiseAction } from 'shared/components/anonymise-action/AnonymiseAction';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { GenerateReportType } from 'shared/views/generate-report/GenerateReportView';\n\nimport { ExternalRouteHelper } from './ExternalRouteHelper';\n\nconst namespace = 'reportsShared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetObjectHeaderActions(object?: BaseObject): DropdownActionOptions[] {\n const getObjectUrl = useGetExternalUrl(ExternalRouteHelper.getPrimaryObjectUrl);\n if (!object)\n return;\n\n const actions: DropdownActionOptions[] = [];\n\n if (getObjectUrl)\n actions.push({\n label: () => (\n <span\n className='d-flex justify-content-between align-items-center'\n >\n <span className='me-2'>\n {/* // TODO: once we have non-video types this will need to be updated. */}\n {getPhrase('seeVideo')}\n </span>\n <SvgContainer svg={NewWindowSvg} />\n </span>\n ),\n href: getObjectUrl(object),\n openInNewTab: true\n });\n\n actions.push({\n label: () => <AnonymiseAction />\n });\n\n return actions;\n}\n\nexport function getVideoHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.VideoViews }\n }\n }];\n}\n\nexport function getLoginHeaderActions(): DropdownActionOptions[] {\n return [{\n label: getPhrase('generateReport'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.GENERATE_REPORT,\n params: { type: GenerateReportType.Logins }\n }\n }];\n}\n"],"mappings":"oZAaA,SAAgB,EAAoB,EAAyC,CAC3E,GAAM,EAAI,GAAe,EAAsC,EAAc,eAAe,EAE5F,EAAA,EAAA,gBACE,EAAW,EAAQ,KAEN,CACX,EAAW,KAAK,GAEjB,CAAC,CAAC,CAAC,EAAQ,CAAC,WCZX,EAAY,EAAgB,iBADhB,gCAC2C,CAE7D,SAAgB,GAA+B,CAC7C,GAAM,CAAE,EAAgB,GAAsB,EAAsB,EAAc,gBAAiB,GAAM,CAEzG,OACE,EAAA,EAAA,MAAC,MAAD,CACE,UAAU,oDACV,YAAe,EAAkB,CAAC,EAAe,UAFnD,EAIE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBACb,EAAU,YAAY,CAClB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,GAAI,EAAgB,YAAe,GAAM,CAAA,CACnD,GCNV,IAAM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,EAA0B,EAA8C,CACtF,IAAM,EAAe,EAAkB,EAAoB,oBAAoB,CAC/E,GAAI,CAAC,EACH,OAEF,IAAM,EAAmC,EAAE,CAuB3C,OArBI,GACF,EAAQ,KAAK,CACX,WACE,EAAA,EAAA,MAAC,OAAD,CACE,UAAU,6DADZ,EAGE,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,gBAEb,EAAU,WAAW,CACjB,CAAA,EACP,EAAA,EAAA,KAAC,EAAD,CAAc,IAAK,EAAgB,CAAA,CAC9B,GAET,KAAM,EAAa,EAAO,CAC1B,aAAc,GACf,CAAC,CAEJ,EAAQ,KAAK,CACX,WAAa,EAAA,EAAA,KAAC,EAAD,EAAmB,CAAA,CACjC,CAAC,CAEK,EAGT,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,WAAY,CAChD,CACF,CAAC,CAGJ,SAAgB,GAAiD,CAC/D,MAAO,CAAC,CACN,MAAO,EAAU,iBAAiB,CAClC,QAAS,CACP,YAAa,EAAY,QACzB,OAAQ,EAAQ,QAAQ,gBACxB,OAAQ,CAAE,KAAM,EAAmB,OAAQ,CAC5C,CACF,CAAC"}
@@ -1,2 +1,2 @@
1
- import{Jn as e,P as t,ct as n,st as r}from"./CM0wW4AE.chunk.js";import{i,r as a,v as o}from"./B01-hGyk.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./qnBOI0yM.chunk.js";import{n as l}from"./nTOBPrI-2.chunk.js";import{n as u}from"./Cu7qiGbY2.chunk.js";function d(e={}){let{prevent:t,rootMargin:n,triggerOnce:r=!0}=e,[i,a,o]=u({triggerOnce:r,rootMargin:n});return(t===!0||window.IntersectionObserver===void 0)&&(a=!0,i=null),{ref:i,inView:a,initialized:!!o}}var f={image:`_image_pp6me_1`},p=e(r()),m=t(),h=`500px`,g=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`,_=p.memo(function(e){let{forceLoad:t,extraClasses:n=``,errorFallbackImageSrc:r,preventLoad:i=!1,errorFallbackImageClassName:a,src:o,alt:s,...c}=e,{ref:l,inView:u}=d({rootMargin:h}),[_,v]=p.useState(!1);p.useEffect(()=>{if(!t&&!u||i)return;let e=new Image;return e.onerror=()=>{v(!0),r&&(e.src=r)},e.src=o,()=>e.onerror=null},[u,i]);function y(){return _&&r?r:e.src}if(_&&!r)return(0,m.jsx)(m.Fragment,{});if(!l)return(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,alt:s,src:y(),...c});let b={alt:s,...c,...(u||t)&&!i?{src:y()}:{src:g}};return t||(b.ref=l),(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,...b})}),v={image:`_image_1himm_1`,thumbnail:`_thumbnail_1himm_13`,tallPoster:`_tallPoster_1himm_16`,cover:`_cover_1himm_19`,banner:`_banner_1himm_22`,poster:`_poster_1himm_25`,pdf:`_pdf_1himm_28`,link:`_link_1himm_31`};function y(e){let t=v.image,n=``;return e.imageType===s.Thumbnails&&(n=`thumbnail ${v.thumbnail}`),e.imageType===s.TallPosters&&(n=v.tallPoster),e.imageType===s.Covers&&(n=v.cover),e.imageType===s.Banners&&(n=v.banner),e.imageType===s.Posters&&(n=v.poster),e.imageType===s.Pdf&&(n=v.pdf),e.imageType===s.Link&&(n=v.link),n&&(t+=` ${n}`),e.className&&(t+=` ${e.className}`),t}function b(e){let{data:t,imageOptions:r,appLink:i,preload:a,preventLoad:s,analyticsOptions:l,analyticsData:u,imageClassName:d,alt:f}=e,p=``;typeof t==`string`?p=t:n.isObject(t)&&(p=t.url);let h=p&&r?c.createUrl(p,r):p;return(0,m.jsx)(`div`,{className:y(e),style:e.imageStyle,children:(0,m.jsxs)(o,{appLink:i,analyticsData:u,analyticsOptions:l,onClick:e.onClick,preventFocus:e.preventFocus,className:e.appLinkClassName,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[e.children,h&&(0,m.jsx)(_,{src:h,alt:f,forceLoad:a,preventLoad:s,extraClasses:d,errorFallbackImageSrc:e.errorFallbackImageSrc,errorFallbackImageClassName:e.errorFallbackImageClassName,onLoad:e.onLoad})]})})}var x=[`bg-pink`,`bg-orange`,...[`bg-green`,`bg-cyan`,`bg-teal`,`bg-blue`,`bg-indigo`,`bg-purple`]];function S(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z`,clipRule:`evenodd`})})}function C(e){return(0,m.jsx)(`svg`,{...e,viewBox:`0 0 24 21`,children:(0,m.jsx)(`path`,{d:`M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5`,fill:`currentColor`})})}function w(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,d:`M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17`})})}function T(e,t){return t[e.charCodeAt(0)%t.length]}var E={baseFallbackContainer:`_baseFallbackContainer_14tjv_1`,svgFallbackContainer:`_svgFallbackContainer_14tjv_1`,subjectFallbackContainer:`_subjectFallbackContainer_14tjv_9`,subjectFallbackContainerSmall:`_subjectFallbackContainerSmall_14tjv_18`,subjectFallbackContainerLarge:`_subjectFallbackContainerLarge_14tjv_21`,seriesItemFallback:`_seriesItemFallback_14tjv_24`,playlistItemFallback:`_playlistItemFallback_14tjv_24`,playlistFallback:`_playlistFallback_14tjv_28`,posterFallback:`_posterFallback_14tjv_29`,subjectFallback:`_subjectFallback_14tjv_9`,fallbackThumbnailImage:`_fallbackThumbnailImage_14tjv_47`,videoFallback:`_videoFallback_14tjv_55`,folderFallback:`_folderFallback_14tjv_56`},D=function(e){return e[e.Playlist=0]=`Playlist`,e[e.PlaylistThumbnail=1]=`PlaylistThumbnail`,e[e.Series=2]=`Series`,e[e.SeriesThumbnail=3]=`SeriesThumbnail`,e[e.Subject=4]=`Subject`,e[e.TallSubject=5]=`TallSubject`,e[e.Video=6]=`Video`,e[e.Folder=7]=`Folder`,e}({}),O=function(e){return e[e.Svg=0]=`Svg`,e[e.Image=1]=`Image`,e}({}),k=function(e){return e[e.Large=0]=`Large`,e[e.Small=1]=`Small`,e}({});function A(e,t,n){if(t===D.Subject){let e=n===k.Large?E.subjectFallbackContainerLarge:E.subjectFallbackContainerSmall;return`${E.subjectFallbackContainer} ${e}`}return e===O.Svg?t===D.SeriesThumbnail||t===D.PlaylistThumbnail?`${E.svgFallbackContainer} rounded-3`:E.svgFallbackContainer:E.baseFallbackContainer}function j(e){return e===D.SeriesThumbnail?E.seriesItemFallback:e===D.PlaylistThumbnail?E.playlistItemFallback:e===D.Playlist?E.playlistFallback:e===D.Series||e===D.TallSubject?E.posterFallback:e===D.Subject?`${E.subjectFallback} svg-container d-inline-block`:``}function M(e){return e===D.SeriesThumbnail||e===D.PlaylistThumbnail?S:e===D.Playlist?C:e===D.Series?w:e===D.Subject||e===D.TallSubject?l:null}function N(e){return e===D.Subject?i.ExtraLarge:i.Standard}P.defaultProps={mediaType:O.Svg,containerClassSize:k.Large};function P(e){let{type:t,mediaType:n,extraClasses:r,containerClassSize:i}=e;if(t===D.Video)return(0,m.jsx)(`div`,{className:`${E.videoFallback} ${e.extraClasses} bg-light-blue`});if(t===D.Folder)return(0,m.jsx)(`div`,{className:`${E.folderFallback} ${e.extraClasses} ${T(e.name,x)}`});let o=j(t),s=M(t),c=N(t),l=`${A(n,t,i)}`;return r&&(l+=` ${e.extraClasses}`),(0,m.jsx)(`div`,{className:l,children:n===O.Svg?(0,m.jsx)(a,{svg:s,className:`${o} ${e.svgContainerClassName??``}`,tagName:`div`,size:c}):(0,m.jsx)(`div`,{className:E.fallbackThumbnailImage,style:{backgroundImage:`url('${s}')`}})})}export{b as a,x as i,D as n,T as r,P as t};
2
- //# sourceMappingURL=BtwiC__j2.chunk.js.map
1
+ import{Jn as e,P as t,ct as n,st as r}from"./CM0wW4AE.chunk.js";import{i,r as a,v as o}from"./B01-hGyk.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./qnBOI0yM.chunk.js";import{n as l}from"./nTOBPrI-2.chunk.js";import{n as u}from"./ktNy7dHM2.chunk.js";function d(e={}){let{prevent:t,rootMargin:n,triggerOnce:r=!0}=e,[i,a,o]=u({triggerOnce:r,rootMargin:n});return(t===!0||window.IntersectionObserver===void 0)&&(a=!0,i=null),{ref:i,inView:a,initialized:!!o}}var f={image:`_image_pp6me_1`},p=e(r()),m=t(),h=`500px`,g=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`,_=p.memo(function(e){let{forceLoad:t,extraClasses:n=``,errorFallbackImageSrc:r,preventLoad:i=!1,errorFallbackImageClassName:a,src:o,alt:s,...c}=e,{ref:l,inView:u}=d({rootMargin:h}),[_,v]=p.useState(!1);p.useEffect(()=>{if(!t&&!u||i)return;let e=new Image;return e.onerror=()=>{v(!0),r&&(e.src=r)},e.src=o,()=>e.onerror=null},[u,i]);function y(){return _&&r?r:e.src}if(_&&!r)return(0,m.jsx)(m.Fragment,{});if(!l)return(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,alt:s,src:y(),...c});let b={alt:s,...c,...(u||t)&&!i?{src:y()}:{src:g}};return t||(b.ref=l),(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,...b})}),v={image:`_image_1himm_1`,thumbnail:`_thumbnail_1himm_13`,tallPoster:`_tallPoster_1himm_16`,cover:`_cover_1himm_19`,banner:`_banner_1himm_22`,poster:`_poster_1himm_25`,pdf:`_pdf_1himm_28`,link:`_link_1himm_31`};function y(e){let t=v.image,n=``;return e.imageType===s.Thumbnails&&(n=`thumbnail ${v.thumbnail}`),e.imageType===s.TallPosters&&(n=v.tallPoster),e.imageType===s.Covers&&(n=v.cover),e.imageType===s.Banners&&(n=v.banner),e.imageType===s.Posters&&(n=v.poster),e.imageType===s.Pdf&&(n=v.pdf),e.imageType===s.Link&&(n=v.link),n&&(t+=` ${n}`),e.className&&(t+=` ${e.className}`),t}function b(e){let{data:t,imageOptions:r,appLink:i,preload:a,preventLoad:s,analyticsOptions:l,analyticsData:u,imageClassName:d,alt:f}=e,p=``;typeof t==`string`?p=t:n.isObject(t)&&(p=t.url);let h=p&&r?c.createUrl(p,r):p;return(0,m.jsx)(`div`,{className:y(e),style:e.imageStyle,children:(0,m.jsxs)(o,{appLink:i,analyticsData:u,analyticsOptions:l,onClick:e.onClick,preventFocus:e.preventFocus,className:e.appLinkClassName,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[e.children,h&&(0,m.jsx)(_,{src:h,alt:f,forceLoad:a,preventLoad:s,extraClasses:d,errorFallbackImageSrc:e.errorFallbackImageSrc,errorFallbackImageClassName:e.errorFallbackImageClassName,onLoad:e.onLoad})]})})}var x=[`bg-pink`,`bg-orange`,...[`bg-green`,`bg-cyan`,`bg-teal`,`bg-blue`,`bg-indigo`,`bg-purple`]];function S(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z`,clipRule:`evenodd`})})}function C(e){return(0,m.jsx)(`svg`,{...e,viewBox:`0 0 24 21`,children:(0,m.jsx)(`path`,{d:`M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5`,fill:`currentColor`})})}function w(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,d:`M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17`})})}function T(e,t){return t[e.charCodeAt(0)%t.length]}var E={baseFallbackContainer:`_baseFallbackContainer_14tjv_1`,svgFallbackContainer:`_svgFallbackContainer_14tjv_1`,subjectFallbackContainer:`_subjectFallbackContainer_14tjv_9`,subjectFallbackContainerSmall:`_subjectFallbackContainerSmall_14tjv_18`,subjectFallbackContainerLarge:`_subjectFallbackContainerLarge_14tjv_21`,seriesItemFallback:`_seriesItemFallback_14tjv_24`,playlistItemFallback:`_playlistItemFallback_14tjv_24`,playlistFallback:`_playlistFallback_14tjv_28`,posterFallback:`_posterFallback_14tjv_29`,subjectFallback:`_subjectFallback_14tjv_9`,fallbackThumbnailImage:`_fallbackThumbnailImage_14tjv_47`,videoFallback:`_videoFallback_14tjv_55`,folderFallback:`_folderFallback_14tjv_56`},D=function(e){return e[e.Playlist=0]=`Playlist`,e[e.PlaylistThumbnail=1]=`PlaylistThumbnail`,e[e.Series=2]=`Series`,e[e.SeriesThumbnail=3]=`SeriesThumbnail`,e[e.Subject=4]=`Subject`,e[e.TallSubject=5]=`TallSubject`,e[e.Video=6]=`Video`,e[e.Folder=7]=`Folder`,e}({}),O=function(e){return e[e.Svg=0]=`Svg`,e[e.Image=1]=`Image`,e}({}),k=function(e){return e[e.Large=0]=`Large`,e[e.Small=1]=`Small`,e}({});function A(e,t,n){if(t===D.Subject){let e=n===k.Large?E.subjectFallbackContainerLarge:E.subjectFallbackContainerSmall;return`${E.subjectFallbackContainer} ${e}`}return e===O.Svg?t===D.SeriesThumbnail||t===D.PlaylistThumbnail?`${E.svgFallbackContainer} rounded-3`:E.svgFallbackContainer:E.baseFallbackContainer}function j(e){return e===D.SeriesThumbnail?E.seriesItemFallback:e===D.PlaylistThumbnail?E.playlistItemFallback:e===D.Playlist?E.playlistFallback:e===D.Series||e===D.TallSubject?E.posterFallback:e===D.Subject?`${E.subjectFallback} svg-container d-inline-block`:``}function M(e){return e===D.SeriesThumbnail||e===D.PlaylistThumbnail?S:e===D.Playlist?C:e===D.Series?w:e===D.Subject||e===D.TallSubject?l:null}function N(e){return e===D.Subject?i.ExtraLarge:i.Standard}P.defaultProps={mediaType:O.Svg,containerClassSize:k.Large};function P(e){let{type:t,mediaType:n,extraClasses:r,containerClassSize:i}=e;if(t===D.Video)return(0,m.jsx)(`div`,{className:`${E.videoFallback} ${e.extraClasses} bg-light-blue`});if(t===D.Folder)return(0,m.jsx)(`div`,{className:`${E.folderFallback} ${e.extraClasses} ${T(e.name,x)}`});let o=j(t),s=M(t),c=N(t),l=`${A(n,t,i)}`;return r&&(l+=` ${e.extraClasses}`),(0,m.jsx)(`div`,{className:l,children:n===O.Svg?(0,m.jsx)(a,{svg:s,className:`${o} ${e.svgContainerClassName??``}`,tagName:`div`,size:c}):(0,m.jsx)(`div`,{className:E.fallbackThumbnailImage,style:{backgroundImage:`url('${s}')`}})})}export{b as a,x as i,D as n,T as r,P as t};
2
+ //# sourceMappingURL=r-dVoZ7W2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BtwiC__j2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"r-dVoZ7W2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/reports",
3
- "version": "0.85.0-rc.0",
3
+ "version": "0.85.0-rc.1",
4
4
  "description": "ClickView Reports",
5
5
  "main": "dist/reports-app.js",
6
6
  "scripts": {
@@ -1 +0,0 @@
1
- import{t as e}from"./app-eLOi12JS.js";export{e as ErrorView};
@@ -1 +0,0 @@
1
- import{n as e}from"./C7odFv7G.chunk.js";export{e as GenerateReportView};