@clickview/reports 0.90.0-rc.2 → 0.90.0-rc.4

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 (65) hide show
  1. package/dist/.vite/manifest.json +210 -210
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{Bzx4bLV8.chunk.js → B9syewbL.chunk.js} +2 -2
  5. package/dist/scripts/{Bzx4bLV8.chunk.js.map → B9syewbL.chunk.js.map} +1 -1
  6. package/dist/scripts/{D2gRMPGY.chunk.js → BDLgF915.chunk.js} +2 -2
  7. package/dist/scripts/{D2gRMPGY.chunk.js.map → BDLgF915.chunk.js.map} +1 -1
  8. package/dist/scripts/{BJOOjdj2.chunk.js → BHwx99h9.chunk.js} +2 -2
  9. package/dist/scripts/{BJOOjdj2.chunk.js.map → BHwx99h9.chunk.js.map} +1 -1
  10. package/dist/scripts/{CowQEpZQ2.chunk.js → B_QHbZ3D2.chunk.js} +2 -2
  11. package/dist/scripts/{CowQEpZQ2.chunk.js.map → B_QHbZ3D2.chunk.js.map} +1 -1
  12. package/dist/scripts/{TzLygaBE.chunk.js → BcjF3S7y.chunk.js} +2 -2
  13. package/dist/scripts/{TzLygaBE.chunk.js.map → BcjF3S7y.chunk.js.map} +1 -1
  14. package/dist/scripts/{DbSzdDBS2.chunk.js → C5nG9HKq2.chunk.js} +2 -2
  15. package/dist/scripts/{DbSzdDBS2.chunk.js.map → C5nG9HKq2.chunk.js.map} +1 -1
  16. package/dist/scripts/{4ViYfbV7.chunk.js → CCdxPE8F.chunk.js} +2 -2
  17. package/dist/scripts/{4ViYfbV7.chunk.js.map → CCdxPE8F.chunk.js.map} +1 -1
  18. package/dist/scripts/{Dj87pb142.chunk.js → CDx9_B5h2.chunk.js} +2 -2
  19. package/dist/scripts/{Dj87pb142.chunk.js.map → CDx9_B5h2.chunk.js.map} +1 -1
  20. package/dist/scripts/{DDS7ndOq2.chunk.js → CEM-Xsc32.chunk.js} +2 -2
  21. package/dist/scripts/{DDS7ndOq2.chunk.js.map → CEM-Xsc32.chunk.js.map} +1 -1
  22. package/dist/scripts/{PSwC3iEf2.chunk.js → CGYMpd9x2.chunk.js} +2 -2
  23. package/dist/scripts/{PSwC3iEf2.chunk.js.map → CGYMpd9x2.chunk.js.map} +1 -1
  24. package/dist/scripts/{CitsW6ql.chunk.js → CLDXLTBe.chunk.js} +2 -2
  25. package/dist/scripts/{CitsW6ql.chunk.js.map → CLDXLTBe.chunk.js.map} +1 -1
  26. package/dist/scripts/{BL1X9vs52.chunk.js → CWVwHN-C2.chunk.js} +2 -2
  27. package/dist/scripts/{BL1X9vs52.chunk.js.map → CWVwHN-C2.chunk.js.map} +1 -1
  28. package/dist/scripts/{kAYY_iVY2.chunk.js → CXyHtApp2.chunk.js} +2 -2
  29. package/dist/scripts/{kAYY_iVY2.chunk.js.map → CXyHtApp2.chunk.js.map} +1 -1
  30. package/dist/scripts/{BU8DxGLM2.chunk.js → C_gBUP2y2.chunk.js} +2 -2
  31. package/dist/scripts/{BU8DxGLM2.chunk.js.map → C_gBUP2y2.chunk.js.map} +1 -1
  32. package/dist/scripts/{BXWs2cI72.chunk.js → C_nTmCTH2.chunk.js} +2 -2
  33. package/dist/scripts/{BXWs2cI72.chunk.js.map → C_nTmCTH2.chunk.js.map} +1 -1
  34. package/dist/scripts/{DPJbiCR02.chunk.js → CeSe3AP62.chunk.js} +18 -18
  35. package/dist/scripts/CeSe3AP62.chunk.js.map +1 -0
  36. package/dist/scripts/{fh6sbun-.chunk.js → Cv7tjWWS.chunk.js} +2 -2
  37. package/dist/scripts/{fh6sbun-.chunk.js.map → Cv7tjWWS.chunk.js.map} +1 -1
  38. package/dist/scripts/{BLzRzOyq.chunk.js → D63nJT6V.chunk.js} +2 -2
  39. package/dist/scripts/{BLzRzOyq.chunk.js.map → D63nJT6V.chunk.js.map} +1 -1
  40. package/dist/scripts/{Ch4Y5yk4.chunk.js → DATsYYMP.chunk.js} +2 -2
  41. package/dist/scripts/{Ch4Y5yk4.chunk.js.map → DATsYYMP.chunk.js.map} +1 -1
  42. package/dist/scripts/{DNY9inGn2.chunk.js → DBpZNnAI2.chunk.js} +2 -2
  43. package/dist/scripts/{DNY9inGn2.chunk.js.map → DBpZNnAI2.chunk.js.map} +1 -1
  44. package/dist/scripts/{CKKR2-wU2.chunk.js → DGuSwgQf2.chunk.js} +2 -2
  45. package/dist/scripts/{CKKR2-wU2.chunk.js.map → DGuSwgQf2.chunk.js.map} +1 -1
  46. package/dist/scripts/{DWQdiwUw.chunk.js → DHz5C_j8.chunk.js} +2 -2
  47. package/dist/scripts/{DWQdiwUw.chunk.js.map → DHz5C_j8.chunk.js.map} +1 -1
  48. package/dist/scripts/{4mtEyuqT2.chunk.js → DJpo4rMq2.chunk.js} +2 -2
  49. package/dist/scripts/{4mtEyuqT2.chunk.js.map → DJpo4rMq2.chunk.js.map} +1 -1
  50. package/dist/scripts/{EvtCZWZL2.chunk.js → DKgzSSZ12.chunk.js} +2 -2
  51. package/dist/scripts/{EvtCZWZL2.chunk.js.map → DKgzSSZ12.chunk.js.map} +1 -1
  52. package/dist/scripts/{Bl13dT192.chunk.js → DqX2L2fn2.chunk.js} +2 -2
  53. package/dist/scripts/{Bl13dT192.chunk.js.map → DqX2L2fn2.chunk.js.map} +1 -1
  54. package/dist/scripts/{7M6FzdyD.chunk.js → J0H9O8cX.chunk.js} +2 -2
  55. package/dist/scripts/{7M6FzdyD.chunk.js.map → J0H9O8cX.chunk.js.map} +1 -1
  56. package/dist/scripts/{app-B1NVV4PT.js → app-F8o5al1q.js} +3 -3
  57. package/dist/scripts/{app-B1NVV4PT.js.map → app-F8o5al1q.js.map} +1 -1
  58. package/dist/scripts/{CcjJpEaF2.chunk.js → med1nnv82.chunk.js} +2 -2
  59. package/dist/scripts/{CcjJpEaF2.chunk.js.map → med1nnv82.chunk.js.map} +1 -1
  60. package/dist/scripts/{DE24b7R6.chunk.js → q1iKm4P4.chunk.js} +2 -2
  61. package/dist/scripts/{DE24b7R6.chunk.js.map → q1iKm4P4.chunk.js.map} +1 -1
  62. package/dist/scripts/{4gz8eG_F.chunk.js → r68VJd6w.chunk.js} +2 -2
  63. package/dist/scripts/{4gz8eG_F.chunk.js.map → r68VJd6w.chunk.js.map} +1 -1
  64. package/package.json +1 -1
  65. package/dist/scripts/DPJbiCR02.chunk.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{N as e,at as t}from"./CrTgNROp.chunk.js";import{t as n}from"./app-B1NVV4PT.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
- //# sourceMappingURL=4mtEyuqT2.chunk.js.map
1
+ import{N as e,at as t}from"./CrTgNROp.chunk.js";import{t as n}from"./app-F8o5al1q.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
+ //# sourceMappingURL=DJpo4rMq2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"4mtEyuqT2.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,OAAQ,CAAA,CACnC"}
1
+ {"version":3,"file":"DJpo4rMq2.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,IAAA,CAAC,EAAD,CAAkB,OAAQ,CAAA,CACnC"}
@@ -1,2 +1,2 @@
1
- import{N as e,at as t}from"./CrTgNROp.chunk.js";import{m as n,n as r}from"./Dwe-4MVf.chunk.js";import{t as i}from"./BIVEB8w0.chunk.js";import{t as a}from"./7M6FzdyD.chunk.js";import{a as o,n as s,r as c,xt as l}from"./app-B1NVV4PT.js";import{c as u}from"./Bzx4bLV8.chunk.js";import{n as d,t as f}from"./fh6sbun-.chunk.js";import{n as p}from"./4gz8eG_F.chunk.js";import{n as m,t as h}from"./CitsW6ql.chunk.js";import{i as g,n as _}from"./CowQEpZQ2.chunk.js";import{t as v}from"./CKKR2-wU2.chunk.js";import{n as y,t as b}from"./BU8DxGLM2.chunk.js";t();var x={image:`_image_1a110_1`},S=e(),C=i.encloseNamespace(`reportsShared.totalViewsByContentCardEmptyState`);function w(){return(0,S.jsxs)(c,{className:`flex-grow-1 justify-content-center`,children:[(0,S.jsx)(c.Image,{src:l.EmptyStates.Shared.PuzzleGroup,className:x.image}),(0,S.jsx)(c.Heading,{className:`h6`,children:C(`heading`)}),(0,S.jsx)(c.Info,{className:`w-100`,children:C(`description`)})]})}var T=`reportsShared.videoViewsByContentCard`,E=i.encloseNamespace(T);function D(){let e=o(`video-views`),t=n(a.aggregation(`content_type`,e));function i(e){switch(e){case`ClickView content`:return u.YELLOW;case`TV content`:return u.PURPLE;case`User generated content`:return u.GREEN}}function s(e){switch(e){case`ClickView content`:return E(`clickview`);case`TV content`:return E(`tv`);case`User generated content`:return E(`userGenerated`)}}function c(e){return e?e.filter(e=>e.name===`ClickView content`||e.name===`TV content`||e.name===`User generated content`).map(e=>({name:s(e.name),y:e.count,color:i(e.name)})):null}let l=c(t.data);return(0,S.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3`,children:l?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`h2`,{className:`h6 mb-3`,children:(0,S.jsx)(r,{namespace:T,phrase:`videoViews`})}),l.length?(0,S.jsx)(y,{data:l}):(0,S.jsx)(w,{})]}):(0,S.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var O={column1:`_column1_1s749_1`,column2:`_column2_1s749_4`,videoViewsCard:`_videoViewsCard_1s749_7`},k=i.encloseNamespace(`videos.schoolVideoOverview`),A=50;function j(){return s({title:k(`videos`)}),p(k(`videos`)),g(_()),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(v,{}),(0,S.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,S.jsxs)(`div`,{className:`d-flex flex-column gap-3 ${O.column1}`,children:[(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(m,{type:`year_group`})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(b,{})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(D,{})})]}),(0,S.jsxs)(`div`,{className:`d-flex flex-column gap-3 ${O.column2}`,children:[(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(h,{type:`user_type`})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(f,{type:d.RootTopic,heading:k(`totalViewsSubject`),emptyStateText:k(`emptySubjects`),limit:A})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(f,{type:d.ChildTopic,heading:k(`totalViewsTopic`),emptyStateText:k(`emptyTopics`),limit:A})})]})]})]})}export{j as SchoolVideoOverviewView};
2
- //# sourceMappingURL=EvtCZWZL2.chunk.js.map
1
+ import{N as e,at as t}from"./CrTgNROp.chunk.js";import{m as n,n as r}from"./Dwe-4MVf.chunk.js";import{t as i}from"./BIVEB8w0.chunk.js";import{t as a}from"./J0H9O8cX.chunk.js";import{a as o,n as s,r as c,xt as l}from"./app-F8o5al1q.js";import{c as u}from"./B9syewbL.chunk.js";import{n as d,t as f}from"./Cv7tjWWS.chunk.js";import{n as p}from"./r68VJd6w.chunk.js";import{n as m,t as h}from"./CLDXLTBe.chunk.js";import{i as g,n as _}from"./B_QHbZ3D2.chunk.js";import{t as v}from"./DGuSwgQf2.chunk.js";import{n as y,t as b}from"./C_gBUP2y2.chunk.js";t();var x={image:`_image_1a110_1`},S=e(),C=i.encloseNamespace(`reportsShared.totalViewsByContentCardEmptyState`);function w(){return(0,S.jsxs)(c,{className:`flex-grow-1 justify-content-center`,children:[(0,S.jsx)(c.Image,{src:l.EmptyStates.Shared.PuzzleGroup,className:x.image}),(0,S.jsx)(c.Heading,{className:`h6`,children:C(`heading`)}),(0,S.jsx)(c.Info,{className:`w-100`,children:C(`description`)})]})}var T=`reportsShared.videoViewsByContentCard`,E=i.encloseNamespace(T);function D(){let e=o(`video-views`),t=n(a.aggregation(`content_type`,e));function i(e){switch(e){case`ClickView content`:return u.YELLOW;case`TV content`:return u.PURPLE;case`User generated content`:return u.GREEN}}function s(e){switch(e){case`ClickView content`:return E(`clickview`);case`TV content`:return E(`tv`);case`User generated content`:return E(`userGenerated`)}}function c(e){return e?e.filter(e=>e.name===`ClickView content`||e.name===`TV content`||e.name===`User generated content`).map(e=>({name:s(e.name),y:e.count,color:i(e.name)})):null}let l=c(t.data);return(0,S.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3`,children:l?(0,S.jsxs)(S.Fragment,{children:[(0,S.jsx)(`h2`,{className:`h6 mb-3`,children:(0,S.jsx)(r,{namespace:T,phrase:`videoViews`})}),l.length?(0,S.jsx)(y,{data:l}):(0,S.jsx)(w,{})]}):(0,S.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}var O={column1:`_column1_1s749_1`,column2:`_column2_1s749_4`,videoViewsCard:`_videoViewsCard_1s749_7`},k=i.encloseNamespace(`videos.schoolVideoOverview`),A=50;function j(){return s({title:k(`videos`)}),p(k(`videos`)),g(_()),(0,S.jsxs)(`div`,{children:[(0,S.jsx)(v,{}),(0,S.jsxs)(`div`,{className:`d-flex gap-3`,children:[(0,S.jsxs)(`div`,{className:`d-flex flex-column gap-3 ${O.column1}`,children:[(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(m,{type:`year_group`})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(b,{})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(D,{})})]}),(0,S.jsxs)(`div`,{className:`d-flex flex-column gap-3 ${O.column2}`,children:[(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(h,{type:`user_type`})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(f,{type:d.RootTopic,heading:k(`totalViewsSubject`),emptyStateText:k(`emptySubjects`),limit:A})}),(0,S.jsx)(`div`,{className:O.videoViewsCard,children:(0,S.jsx)(f,{type:d.ChildTopic,heading:k(`totalViewsTopic`),emptyStateText:k(`emptyTopics`),limit:A})})]})]})]})}export{j as SchoolVideoOverviewView};
2
+ //# sourceMappingURL=DKgzSSZ12.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"EvtCZWZL2.chunk.js","names":[],"sources":["../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/total-views-by-content-card-empty-state.module.scss","../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard.tsx","../../src/apps/videos/views/school-video-overview/school-video-overview.module.scss","../../src/apps/videos/views/school-video-overview/SchoolVideoOverviewView.tsx"],"sourcesContent":[":local {\n .image {\n width: 12.5rem;\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\nimport styles from './total-views-by-content-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByContentCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByContentCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.PuzzleGroup}\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';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { CHART_COLOUR } from 'shared/constants/ChartStyles';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TotalViewsByContentCardEmptyState } from 'shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByContentCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ContentType {\n ClickView = 'ClickView content',\n TV = 'TV content',\n UserGenerated = 'User generated content'\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByContentCardView() {\n const requestFilter = useGetRequestFilter('video-views');\n\n const contentTypeCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.aggregation('content_type', requestFilter)\n );\n\n function mapContentTypeToChartColour(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return CHART_COLOUR.YELLOW;\n case ContentType.TV: return CHART_COLOUR.PURPLE;\n case ContentType.UserGenerated: return CHART_COLOUR.GREEN;\n }\n }\n\n function mapContentTypeToLabel(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return getPhrase('clickview');\n case ContentType.TV: return getPhrase('tv');\n case ContentType.UserGenerated: return getPhrase('userGenerated');\n }\n }\n\n function getChartData(contentTypeCount: GroupedAnalyticsCount[]) {\n if (!contentTypeCount) return null;\n\n const mappedGroups = contentTypeCount.filter(group => (\n group.name === ContentType.ClickView ||\n group.name === ContentType.TV ||\n group.name === ContentType.UserGenerated\n )).map(group => ({\n name: mapContentTypeToLabel(group.name),\n y: group.count,\n color: mapContentTypeToChartColour(group.name)\n }));\n\n return mappedGroups;\n }\n\n const chartData = getChartData(contentTypeCount.data);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3'>\n {chartData ?\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='videoViews' /></h2>\n\n {chartData.length ?\n <ColumnChart data={chartData} /> :\n <TotalViewsByContentCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n",":local {\n .column1 {\n flex: 3 0;\n }\n \n .column2 {\n flex: 4 0;\n }\n\n .videoViewsCard {\n height: 20rem;\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 { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getVideoHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { TopClassificationsCardView } from 'shared/views/overview-cards/top-classifications-card/TopClassificationsCardView';\nimport { VideoViewsByContentCardView } from 'shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\n\nimport styles from './school-video-overview.module.scss';\n\nconst namespace = 'videos.schoolVideoOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst TOP_CLASSIFICATIONS_LIMIT = 50;\n\nexport function SchoolVideoOverviewView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n useSetHeaderActions(getVideoHeaderActions());\n\n return (\n <div>\n <SchoolVideosNav />\n <div className='d-flex gap-3'>\n <div className={`d-flex flex-column gap-3 ${styles.column1}`}>\n <div className={styles.videoViewsCard}>\n <StreamsBarChartCardView type='year_group' />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByRoleCardView />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByContentCardView />\n </div>\n </div>\n <div className={`d-flex flex-column gap-3 ${styles.column2}`}>\n <div className={styles.videoViewsCard}>\n <StreamsChartCardView type='user_type' />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.RootTopic}\n heading={getPhrase('totalViewsSubject')}\n emptyStateText={getPhrase('emptySubjects')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.ChildTopic}\n heading={getPhrase('totalViewsTopic')}\n emptyStateText={getPhrase('emptyTopics')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DKgzSSZ12.chunk.js","names":[],"sources":["../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/total-views-by-content-card-empty-state.module.scss","../../src/shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard.tsx","../../src/apps/videos/views/school-video-overview/school-video-overview.module.scss","../../src/apps/videos/views/school-video-overview/SchoolVideoOverviewView.tsx"],"sourcesContent":[":local {\n .image {\n width: 12.5rem;\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\nimport styles from './total-views-by-content-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByContentCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByContentCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.PuzzleGroup}\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';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { CHART_COLOUR } from 'shared/constants/ChartStyles';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TotalViewsByContentCardEmptyState } from 'shared/views/overview-cards/video-views-by-content-card/empty-state/TotalViewsByContentCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByContentCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum ContentType {\n ClickView = 'ClickView content',\n TV = 'TV content',\n UserGenerated = 'User generated content'\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByContentCardView() {\n const requestFilter = useGetRequestFilter('video-views');\n\n const contentTypeCount = Flight.useBasicFetch<GroupedAnalyticsCount[]>(\n VideoViewsV2Requests.aggregation('content_type', requestFilter)\n );\n\n function mapContentTypeToChartColour(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return CHART_COLOUR.YELLOW;\n case ContentType.TV: return CHART_COLOUR.PURPLE;\n case ContentType.UserGenerated: return CHART_COLOUR.GREEN;\n }\n }\n\n function mapContentTypeToLabel(contentType: string) {\n switch (contentType) {\n case ContentType.ClickView: return getPhrase('clickview');\n case ContentType.TV: return getPhrase('tv');\n case ContentType.UserGenerated: return getPhrase('userGenerated');\n }\n }\n\n function getChartData(contentTypeCount: GroupedAnalyticsCount[]) {\n if (!contentTypeCount) return null;\n\n const mappedGroups = contentTypeCount.filter(group => (\n group.name === ContentType.ClickView ||\n group.name === ContentType.TV ||\n group.name === ContentType.UserGenerated\n )).map(group => ({\n name: mapContentTypeToLabel(group.name),\n y: group.count,\n color: mapContentTypeToChartColour(group.name)\n }));\n\n return mappedGroups;\n }\n\n const chartData = getChartData(contentTypeCount.data);\n\n return (\n <div className='d-flex flex-column h-100 bg-white rounded p-3'>\n {chartData ?\n <>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='videoViews' /></h2>\n\n {chartData.length ?\n <ColumnChart data={chartData} /> :\n <TotalViewsByContentCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n",":local {\n .column1 {\n flex: 3 0;\n }\n \n .column2 {\n flex: 4 0;\n }\n\n .videoViewsCard {\n height: 20rem;\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 { TopicAnalyticsType } from 'shared/enums/TopicAnalyticsType';\nimport { useSetHeaderActions } from 'shared/hooks/UseSetHeaderActions';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { getVideoHeaderActions } from 'shared/utils/HeaderActionUtils';\nimport { StreamsBarChartCardView } from 'shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView';\nimport { StreamsChartCardView } from 'shared/views/overview-cards/streams-chart-card/StreamsChartCardView';\nimport { TopClassificationsCardView } from 'shared/views/overview-cards/top-classifications-card/TopClassificationsCardView';\nimport { VideoViewsByContentCardView } from 'shared/views/overview-cards/video-views-by-content-card/VideoViewsByContentCard';\nimport { VideoViewsByRoleCardView } from 'shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\n\nimport styles from './school-video-overview.module.scss';\n\nconst namespace = 'videos.schoolVideoOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst TOP_CLASSIFICATIONS_LIMIT = 50;\n\nexport function SchoolVideoOverviewView(): JSX.Element {\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n useSetHeaderActions(getVideoHeaderActions());\n\n return (\n <div>\n <SchoolVideosNav />\n <div className='d-flex gap-3'>\n <div className={`d-flex flex-column gap-3 ${styles.column1}`}>\n <div className={styles.videoViewsCard}>\n <StreamsBarChartCardView type='year_group' />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByRoleCardView />\n </div>\n <div className={styles.videoViewsCard}>\n <VideoViewsByContentCardView />\n </div>\n </div>\n <div className={`d-flex flex-column gap-3 ${styles.column2}`}>\n <div className={styles.videoViewsCard}>\n <StreamsChartCardView type='user_type' />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.RootTopic}\n heading={getPhrase('totalViewsSubject')}\n emptyStateText={getPhrase('emptySubjects')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n <div className={styles.videoViewsCard}>\n <TopClassificationsCardView\n type={TopicAnalyticsType.ChildTopic}\n heading={getPhrase('totalViewsTopic')}\n emptyStateText={getPhrase('emptyTopics')}\n limit={TOP_CLASSIFICATIONS_LIMIT}\n />\n </div>\n </div>\n </div>\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{N as e,at as t}from"./CrTgNROp.chunk.js";import{n,r,z as i}from"./app-B1NVV4PT.js";t();var a={container:`_container_nowrk_1`,subContainer:`_subContainer_nowrk_7`},o=e();function s(e){return n({title:e.error?.heading}),e.error?(0,o.jsx)(`div`,{style:{height:`85vh`},children:(0,o.jsx)(`div`,{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:(0,o.jsxs)(r,{className:a.subContainer,children:[(0,o.jsx)(r.Heading,{children:e.error.heading}),(0,o.jsx)(r.Info,{className:`w-33 mb-4`,children:e.error.description}),e.error.cta!==!1&&(0,o.jsx)(r.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?`mt-n2`:``}`,href:e.error.cta.url,icon:i,openInNewTab:!0})]})})}):(0,o.jsx)(o.Fragment,{})}export{s as NoClassroomsErrorView};
2
- //# sourceMappingURL=Bl13dT192.chunk.js.map
1
+ import{N as e,at as t}from"./CrTgNROp.chunk.js";import{n,r,z as i}from"./app-F8o5al1q.js";t();var a={container:`_container_nowrk_1`,subContainer:`_subContainer_nowrk_7`},o=e();function s(e){return n({title:e.error?.heading}),e.error?(0,o.jsx)(`div`,{style:{height:`85vh`},children:(0,o.jsx)(`div`,{style:{backgroundImage:`url(${e.imageUrl})`},className:a.container,children:(0,o.jsxs)(r,{className:a.subContainer,children:[(0,o.jsx)(r.Heading,{children:e.error.heading}),(0,o.jsx)(r.Info,{className:`w-33 mb-4`,children:e.error.description}),e.error.cta!==!1&&(0,o.jsx)(r.Cta,{text:e.error.cta.text,className:`btn btn-dark ${e.error.description?`mt-n2`:``}`,href:e.error.cta.url,icon:i,openInNewTab:!0})]})})}):(0,o.jsx)(o.Fragment,{})}export{s as NoClassroomsErrorView};
2
+ //# sourceMappingURL=DqX2L2fn2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bl13dT192.chunk.js","names":[],"sources":["../../src/apps/default/views/no-classrooms-error/no-classrooms-error.module.scss","../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":[":local {\n .container {\n height: 100%;\n background-size: 100%;\n background-repeat: no-repeat;\n position: relative;\n }\n \n .subContainer {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n }\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}\n"],"mappings":"gLCcA,SAAgB,EAAsB,EAAuD,CAM3F,OALA,EAAmB,CAAE,MAAO,EAAM,OAAO,OAAQ,CAAC,EAE7C,EAAM,OAIT,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,OAAQ,MAAO,YAC3B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,gBAAiB,OAAO,EAAM,SAAS,EAAG,EAAG,UAAW,EAAO,oBAC3E,EAAA,EAAA,KAAA,CAAC,EAAD,CAAY,UAAW,EAAO,sBAA9B,EACE,EAAA,EAAA,IAAA,CAAC,EAAW,QAAZ,CAAA,SAAqB,EAAM,MAAM,OAA4B,CAAA,GAE7D,EAAA,EAAA,IAAA,CAAC,EAAW,KAAZ,CAAiB,UAAU,qBAAa,EAAM,MAAM,WAA6B,CAAA,EAEhF,EAAM,MAAM,MAAQ,KACnB,EAAA,EAAA,IAAA,CAAC,EAAW,IAAZ,CACE,KAAM,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgB,EAAM,MAAM,YAAc,QAAU,KAC/D,KAAM,EAAM,MAAM,IAAI,IACtB,KAAM,EACN,aAAA,EACD,CAAA,CAEO,GACT,CAAA,CACF,CAAA,GArBE,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAuBf"}
1
+ {"version":3,"file":"DqX2L2fn2.chunk.js","names":[],"sources":["../../src/apps/default/views/no-classrooms-error/no-classrooms-error.module.scss","../../src/apps/default/views/no-classrooms-error/NoClassroomsErrorView.tsx"],"sourcesContent":[":local {\n .container {\n height: 100%;\n background-size: 100%;\n background-repeat: no-repeat;\n position: relative;\n }\n \n .subContainer {\n position: absolute;\n top: 40%;\n left: 50%;\n transform: translate(-50%, -50%);\n width: 100%;\n }\n}","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\n\nimport styles from './no-classrooms-error.module.scss';\n\ninterface NoClassroomsErrorViewProps {\n error: ErrorPageError;\n imageUrl?: string;\n}\n\nexport function NoClassroomsErrorView(props: NoClassroomsErrorViewProps): React.ReactElement {\n useSetPageMetadata({ title: props.error?.heading });\n\n if (!props.error)\n return <></>;\n\n return (\n <div style={{ height: '85vh' }}>\n <div style={{ backgroundImage: `url(${props.imageUrl})` }} className={styles.container}>\n <EmptyState className={styles.subContainer}>\n <EmptyState.Heading>{props.error.heading}</EmptyState.Heading>\n\n <EmptyState.Info className='w-33 mb-4'>{props.error.description}</EmptyState.Info>\n\n {props.error.cta !== false &&\n <EmptyState.Cta\n text={props.error.cta.text}\n className={`btn btn-dark ${props.error.description ? 'mt-n2' : ''}`}\n href={props.error.cta.url}\n icon={NewWindowSvg}\n openInNewTab\n />\n }\n </EmptyState>\n </div>\n </div>\n );\n}\n"],"mappings":"gLCcA,SAAgB,EAAsB,EAAuD,CAM3F,OALA,EAAmB,CAAE,MAAO,EAAM,OAAO,OAAQ,CAAC,EAE7C,EAAM,OAIT,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,OAAQ,MAAO,YAC3B,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,MAAO,CAAE,gBAAiB,OAAO,EAAM,SAAS,EAAG,EAAG,UAAW,EAAO,oBAC3E,EAAA,EAAA,KAAA,CAAC,EAAD,CAAY,UAAW,EAAO,sBAA9B,EACE,EAAA,EAAA,IAAA,CAAC,EAAW,QAAZ,CAAA,SAAqB,EAAM,MAAM,OAA4B,CAAA,GAE7D,EAAA,EAAA,IAAA,CAAC,EAAW,KAAZ,CAAiB,UAAU,qBAAa,EAAM,MAAM,WAA6B,CAAA,EAEhF,EAAM,MAAM,MAAQ,KACnB,EAAA,EAAA,IAAA,CAAC,EAAW,IAAZ,CACE,KAAM,EAAM,MAAM,IAAI,KACtB,UAAW,gBAAgB,EAAM,MAAM,YAAc,QAAU,KAC/D,KAAM,EAAM,MAAM,IAAI,IACtB,KAAM,EACN,aAAA,EACD,CAAA,CAEO,GACT,CAAA,CACF,CAAA,GArBE,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,CAuBf"}
@@ -1,2 +1,2 @@
1
- import{Dr as e,Sr as t,at as n,on as r}from"./CrTgNROp.chunk.js";import{n as i}from"./28VvvkVW.chunk.js";import{t as a}from"./4gz8eG_F.chunk.js";var o=function(e){return e.Draft=`Draft`,e.Published=`Published`,e.Archived=`Archived`,e}({}),s=function(e){return e.Discover=`discover`,e.Classification=`classification`,e.ClassificationDirectory=`classification-directory`,e.ClassificationCurriculum=`classification-curriculum`,e.MoviesAndTv=`movies-and-tv`,e.Company=`company`,e.Search=`search`,e.PartnerProfile=`partner-profile`,e.PartnerProfileHub=`partner-profile-hub`,e.DiscoverPartnerProfiles=`discover-partner-profiles`,e}({});r();var c=(e,t,n)=>{e=e.toString();let r=t-e.length;return r<=0?e:Array(r+1).join(n)+e},l={ToDisplayDuration(e,n){if(!t(e))return``;let r=new Date(e),i=r.getUTCHours(),a=c(r.getUTCMinutes(),2,`0`),o=c(r.getUTCSeconds(),2,`0`);return n||i>0?`${i}:${a}:${o}`:`${a}:${o}`},ToDisplayDurationNewStyle(e,n){if(!t(e))return``;let r=new Date(e),i=r.getUTCHours(),a=r.getUTCMinutes(),o=r.getUTCSeconds();if((i>0||a>0)&&o>=30&&(a+=1,a>=60&&(i+=1,a=0)),i>0){let e=i>1?`hrs`:`hr`;return a>0?n&&o>0?`${i}${e} ${a}m ${o}s`:`${i}${e} ${a}m `:`${i} ${e}`}return a>0?n&&o>0?`${a}m ${o}s`:`${a}m`:`${o}s`},ToDisplayTimeRange(e,n){if(!t(e)||!t(n))return``;let r=new Date(n).getUTCHours()>0;return`${l.ToDisplayDuration(e,r)} - ${l.ToDisplayDuration(n,r)}`}},u=e(n(),1),d=new Map,f=new WeakMap,p=0,m=void 0;function h(e){return e?f.has(e)?f.get(e):(p+=1,f.set(e,p.toString()),f.get(e)):`0`}function g(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?h(e.root):e[t]}`).toString()}function _(e){let t=g(e),n=d.get(t);if(!n){let r=new Map,i,a=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=a.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:a,elements:r},d.set(t,n)}return n}function v(e,t,n={},r=m){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:a,elements:o}=_(n),s=o.get(e)||[];return o.has(e)||o.set(e,s),s.push(t),a.observe(e),function(){s.splice(s.indexOf(t),1),s.length===0&&(o.delete(e),a.unobserve(e)),o.size===0&&(a.disconnect(),d.delete(i))}}u.Component;function y({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:i,triggerOnce:a,skip:o,initialInView:s,fallbackInView:c,onChange:l}={}){let[d,f]=u.useState(null),p=u.useRef(),[m,h]=u.useState({inView:!!s,entry:void 0});p.current=l,u.useEffect(()=>{if(o||!d)return;let s;return s=v(d,(e,t)=>{h({inView:e,entry:t}),p.current&&p.current(e,t),t.isIntersecting&&a&&s&&(s(),s=void 0)},{root:i,rootMargin:r,threshold:e,trackVisibility:n,delay:t},c),()=>{s&&s()}},[Array.isArray(e)?e.toString():e,d,i,r,a,o,n,c,t]);let g=m.entry?.target,_=u.useRef();!d&&g&&!a&&!o&&_.current!==g&&(_.current=g,h({inView:!!s,entry:void 0}));let y=[f,m.inView,m.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}var b=`Streamable Learning content`,x=`ClickView Live content`;function S(e){return Array.isArray(e)?e.map(e=>e.contentType===b?{...e,contentType:x}:e):e}function C(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var w={aggregation(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,C(t)),key:a(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,C(n)),key:a(`video:views:v2:aggregation:${e}`,n,t),normalize:!1}},aggregationChart(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,C(t)),key:a(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,C(n)),key:a(`video:views:v2:aggregation:chart:${e}`,n,t),normalize:!1}},topStreams(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...C(t),limit:e}),key:a(`video:views:v2:top:streams:${e}`,t),normalize:!1,formatData:S}},videoHeatMap(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...C(t),cursor:n}),key:a(`video:views:v2:heatmap:${e}`,t,n),normalize:!1}},videoHeatMapAggregation(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,C(t)),key:a(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{s as a,o as i,y as n,l as r,w as t};
2
- //# sourceMappingURL=7M6FzdyD.chunk.js.map
1
+ import{Dr as e,Sr as t,at as n,on as r}from"./CrTgNROp.chunk.js";import{n as i}from"./28VvvkVW.chunk.js";import{t as a}from"./r68VJd6w.chunk.js";var o=function(e){return e.Draft=`Draft`,e.Published=`Published`,e.Archived=`Archived`,e}({}),s=function(e){return e.Discover=`discover`,e.Classification=`classification`,e.ClassificationDirectory=`classification-directory`,e.ClassificationCurriculum=`classification-curriculum`,e.MoviesAndTv=`movies-and-tv`,e.Company=`company`,e.Search=`search`,e.PartnerProfile=`partner-profile`,e.PartnerProfileHub=`partner-profile-hub`,e.DiscoverPartnerProfiles=`discover-partner-profiles`,e}({});r();var c=(e,t,n)=>{e=e.toString();let r=t-e.length;return r<=0?e:Array(r+1).join(n)+e},l={ToDisplayDuration(e,n){if(!t(e))return``;let r=new Date(e),i=r.getUTCHours(),a=c(r.getUTCMinutes(),2,`0`),o=c(r.getUTCSeconds(),2,`0`);return n||i>0?`${i}:${a}:${o}`:`${a}:${o}`},ToDisplayDurationNewStyle(e,n){if(!t(e))return``;let r=new Date(e),i=r.getUTCHours(),a=r.getUTCMinutes(),o=r.getUTCSeconds();if((i>0||a>0)&&o>=30&&(a+=1,a>=60&&(i+=1,a=0)),i>0){let e=i>1?`hrs`:`hr`;return a>0?n&&o>0?`${i}${e} ${a}m ${o}s`:`${i}${e} ${a}m `:`${i} ${e}`}return a>0?n&&o>0?`${a}m ${o}s`:`${a}m`:`${o}s`},ToDisplayTimeRange(e,n){if(!t(e)||!t(n))return``;let r=new Date(n).getUTCHours()>0;return`${l.ToDisplayDuration(e,r)} - ${l.ToDisplayDuration(n,r)}`}},u=e(n(),1),d=new Map,f=new WeakMap,p=0,m=void 0;function h(e){return e?f.has(e)?f.get(e):(p+=1,f.set(e,p.toString()),f.get(e)):`0`}function g(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?h(e.root):e[t]}`).toString()}function _(e){let t=g(e),n=d.get(t);if(!n){let r=new Map,i,a=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=a.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:a,elements:r},d.set(t,n)}return n}function v(e,t,n={},r=m){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:a,elements:o}=_(n),s=o.get(e)||[];return o.has(e)||o.set(e,s),s.push(t),a.observe(e),function(){s.splice(s.indexOf(t),1),s.length===0&&(o.delete(e),a.unobserve(e)),o.size===0&&(a.disconnect(),d.delete(i))}}u.Component;function y({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:i,triggerOnce:a,skip:o,initialInView:s,fallbackInView:c,onChange:l}={}){let[d,f]=u.useState(null),p=u.useRef(),[m,h]=u.useState({inView:!!s,entry:void 0});p.current=l,u.useEffect(()=>{if(o||!d)return;let s;return s=v(d,(e,t)=>{h({inView:e,entry:t}),p.current&&p.current(e,t),t.isIntersecting&&a&&s&&(s(),s=void 0)},{root:i,rootMargin:r,threshold:e,trackVisibility:n,delay:t},c),()=>{s&&s()}},[Array.isArray(e)?e.toString():e,d,i,r,a,o,n,c,t]);let g=m.entry?.target,_=u.useRef();!d&&g&&!a&&!o&&_.current!==g&&(_.current=g,h({inView:!!s,entry:void 0}));let y=[f,m.inView,m.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}var b=`Streamable Learning content`,x=`ClickView Live content`;function S(e){return Array.isArray(e)?e.map(e=>e.contentType===b?{...e,contentType:x}:e):e}function C(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var w={aggregation(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,C(t)),key:a(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,C(n)),key:a(`video:views:v2:aggregation:${e}`,n,t),normalize:!1}},aggregationChart(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,C(t)),key:a(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,C(n)),key:a(`video:views:v2:aggregation:chart:${e}`,n,t),normalize:!1}},topStreams(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...C(t),limit:e}),key:a(`video:views:v2:top:streams:${e}`,t),normalize:!1,formatData:S}},videoHeatMap(e,t,n){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...C(t),cursor:n}),key:a(`video:views:v2:heatmap:${e}`,t,n),normalize:!1}},videoHeatMapAggregation(e,t){return{url:i.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,C(t)),key:a(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{s as a,o as i,y as n,l as r,w as t};
2
+ //# sourceMappingURL=J0H9O8cX.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"7M6FzdyD.chunk.js","names":[],"sources":["../../../../libs/shared/src/interfaces/models/Dashboard.ts","../../../../libs/shared/src/utils/DurationHelper.ts","../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["import { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CustomerType } from 'libs/shared/enums/CustomerType';\nimport { LibraryType } from 'libs/shared/enums/LibraryType';\nimport {\n BaseObject,\n BasePaginatedCollection,\n CuratedWidget,\n CuratedWidgetContent,\n CuratedWidgetData\n} from 'libs/shared/interfaces';\n\nexport enum DashboardLearningLevel {\n Any = 'Any',\n Level_1 = 'Level_1',\n Level_2 = 'Level_2',\n Level_3 = 'Level_3',\n Level_4 = 'Level_4'\n}\n\nexport enum DashboardUserType {\n Any = 'Any',\n Staff = 'Staff',\n Learner = 'Learner'\n}\n\nexport enum DashboardStatus {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived'\n}\n\nexport interface Dashboard extends BaseObject {\n libraryType: LibraryType;\n customerType: CustomerType;\n userRole: number;\n}\n\nexport interface CuratedDashboardMetadata {\n systemGenerated?: boolean;\n channelId?: string;\n}\n\nexport interface CuratedDashboard<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BaseObject {\n contentRegion: ContentRegion;\n description: string;\n learningLevel: DashboardLearningLevel;\n userType: DashboardUserType;\n status: DashboardStatus;\n target: string;\n widgets: CuratedWidget<TWidgetData, TWidgetContent>[];\n metadata: CuratedDashboardMetadata;\n datePublished: string;\n}\n\nexport interface CuratedDashboardCollection<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BasePaginatedCollection<CuratedDashboard<TWidgetData, TWidgetContent>> {}\n\n/**\n * Dashboard identification below\n */\nexport enum DashboardTargetType {\n Discover = 'discover',\n Classification = 'classification',\n ClassificationDirectory = 'classification-directory',\n ClassificationCurriculum = 'classification-curriculum',\n MoviesAndTv = 'movies-and-tv',\n Company = 'company',\n Search = 'search',\n PartnerProfile = 'partner-profile',\n PartnerProfileHub = 'partner-profile-hub',\n DiscoverPartnerProfiles = 'discover-partner-profiles'\n}\n\ninterface DiscoverDashboardInfo {\n targetType: DashboardTargetType.Discover;\n presentationId: string;\n}\n\nexport interface ClassificationDashboardInfo {\n targetType: DashboardTargetType.Classification;\n classificationId: string;\n}\n\nexport interface ClassificationDirectoryInfo {\n targetType: DashboardTargetType.ClassificationDirectory;\n classificationId: string;\n}\n\nexport interface ClassificationCurriculumInfo {\n targetType: DashboardTargetType.ClassificationCurriculum;\n classificationId: string;\n}\n\ninterface MoviesAndTvDashboardInfo {\n targetType: DashboardTargetType.MoviesAndTv;\n presentationId: string;\n}\n\nexport interface CompanyDashboardInfo {\n targetType: DashboardTargetType.Company;\n companyId: string;\n presentationId: string;\n}\n\nexport interface PartnerProfileDashboardInfo {\n targetType: DashboardTargetType.PartnerProfile;\n slug: string;\n}\n\nexport interface PartnerProfileHubDashboardInfo {\n targetType: DashboardTargetType.PartnerProfileHub;\n}\n\nexport interface PartnerProfileDiscoverDashboardInfo {\n targetType: DashboardTargetType.DiscoverPartnerProfiles;\n}\n\nexport type DashboardTargetInfo =\n | DiscoverDashboardInfo |\n ClassificationDashboardInfo |\n ClassificationDirectoryInfo |\n ClassificationCurriculumInfo |\n MoviesAndTvDashboardInfo |\n CompanyDashboardInfo |\n PartnerProfileDashboardInfo |\n PartnerProfileHubDashboardInfo |\n PartnerProfileDiscoverDashboardInfo;\nexport interface UnknownDashboardTargetInfo {\n targetType: DashboardTargetType;\n presentationId: string;\n classificationId: string;\n companyId: string;\n slug: string;\n}\n","import * as _ from 'underscore';\n\nconst padLeft = (value: string | number, totalLength: number, padChar: string) => {\n value = value.toString();\n\n const diff = totalLength - value.length;\n\n if (diff <= 0)\n return value;\n\n return new Array(diff + 1).join(padChar) + value;\n};\n\nconst DurationHelper = {\n /**\n * Copypasta from Online. Feel free to improve it if you see fit - Sha\n */\n ToDisplayDuration(milliseconds: number, showAll?: boolean): string {\n if (!_.isNumber(milliseconds))\n return '';\n \n const time = new Date(milliseconds);\n \n const h = time.getUTCHours();\n const m = padLeft(time.getUTCMinutes(), 2, '0');\n const s = padLeft(time.getUTCSeconds(), 2, '0');\n \n if (showAll || h > 0) {\n return `${h}:${m}:${s}`;\n }\n \n return `${m}:${s}`;\n },\n\n ToDisplayDurationNewStyle(milliseconds: number, includeSeconds?: boolean): string {\n if (!_.isNumber(milliseconds))\n return '';\n\n const time = new Date(milliseconds);\n\n let h = time.getUTCHours();\n let m = time.getUTCMinutes();\n const s = time.getUTCSeconds();\n\n // Round up 1m when >= 30s\n if ((h > 0 || m > 0) && s >= 30) {\n m = m + 1;\n // Handle minute overflow (e.g., 59m + 1 = 60m -> 1hr)\n if (m >= 60) {\n h = h + 1;\n m = 0;\n }\n }\n \n if (h > 0) {\n const hourUnit = h > 1 ? 'hrs' : 'hr';\n\n if (m > 0) {\n if (includeSeconds && s > 0) {\n return `${h}${hourUnit} ${m}m ${s}s`;\n }\n\n return `${h}${hourUnit} ${m}m `;\n }\n \n return `${h} ${hourUnit}`;\n }\n\n if (m > 0) {\n if (includeSeconds && s > 0) {\n return `${m}m ${s}s`;\n }\n\n return `${m}m`;\n }\n\n return `${s}s`;\n },\n\n ToDisplayTimeRange(startMilliseconds: number, endMilliseconds: number) {\n if (!_.isNumber(startMilliseconds) || !_.isNumber(endMilliseconds))\n return '';\n\n const showAll = new Date(endMilliseconds).getUTCHours() > 0;\n\n return `${DurationHelper.ToDisplayDuration(startMilliseconds, showAll)} - ${DurationHelper.ToDisplayDuration(endMilliseconds, showAll)}`;\n }\n};\n\nexport { DurationHelper };\n","\"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\nimport { TopVideoV2 } from 'shared/interfaces';\n\nconst LEGACY_CV_LIVE_CONTENT_TYPE = 'Streamable Learning content';\nconst CV_LIVE_CONTENT_TYPE = 'ClickView Live content';\n\n/**\n * The Videoviews API still reports ClickView Live streams under the product's\n * former name, so relabel them before they are rendered.\n */\nfunction formatCvLiveContentType(data: TopVideoV2[]): TopVideoV2[] {\n if (!Array.isArray(data)) return data;\n\n return data.map(video => (\n video.contentType === LEGACY_CV_LIVE_CONTENT_TYPE ?\n { ...video, contentType: CV_LIVE_CONTENT_TYPE } :\n video\n ));\n}\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 formatData: formatCvLiveContentType\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":[2],"mappings":"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"}
1
+ {"version":3,"file":"J0H9O8cX.chunk.js","names":[],"sources":["../../../../libs/shared/src/interfaces/models/Dashboard.ts","../../../../libs/shared/src/utils/DurationHelper.ts","../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["import { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { CustomerType } from 'libs/shared/enums/CustomerType';\nimport { LibraryType } from 'libs/shared/enums/LibraryType';\nimport {\n BaseObject,\n BasePaginatedCollection,\n CuratedWidget,\n CuratedWidgetContent,\n CuratedWidgetData\n} from 'libs/shared/interfaces';\n\nexport enum DashboardLearningLevel {\n Any = 'Any',\n Level_1 = 'Level_1',\n Level_2 = 'Level_2',\n Level_3 = 'Level_3',\n Level_4 = 'Level_4'\n}\n\nexport enum DashboardUserType {\n Any = 'Any',\n Staff = 'Staff',\n Learner = 'Learner'\n}\n\nexport enum DashboardStatus {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived'\n}\n\nexport interface Dashboard extends BaseObject {\n libraryType: LibraryType;\n customerType: CustomerType;\n userRole: number;\n}\n\nexport interface CuratedDashboardMetadata {\n systemGenerated?: boolean;\n channelId?: string;\n}\n\nexport interface CuratedDashboard<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BaseObject {\n contentRegion: ContentRegion;\n description: string;\n learningLevel: DashboardLearningLevel;\n userType: DashboardUserType;\n status: DashboardStatus;\n target: string;\n widgets: CuratedWidget<TWidgetData, TWidgetContent>[];\n metadata: CuratedDashboardMetadata;\n datePublished: string;\n}\n\nexport interface CuratedDashboardCollection<\n TWidgetData extends CuratedWidgetData = CuratedWidgetData,\n TWidgetContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BasePaginatedCollection<CuratedDashboard<TWidgetData, TWidgetContent>> {}\n\n/**\n * Dashboard identification below\n */\nexport enum DashboardTargetType {\n Discover = 'discover',\n Classification = 'classification',\n ClassificationDirectory = 'classification-directory',\n ClassificationCurriculum = 'classification-curriculum',\n MoviesAndTv = 'movies-and-tv',\n Company = 'company',\n Search = 'search',\n PartnerProfile = 'partner-profile',\n PartnerProfileHub = 'partner-profile-hub',\n DiscoverPartnerProfiles = 'discover-partner-profiles'\n}\n\ninterface DiscoverDashboardInfo {\n targetType: DashboardTargetType.Discover;\n presentationId: string;\n}\n\nexport interface ClassificationDashboardInfo {\n targetType: DashboardTargetType.Classification;\n classificationId: string;\n}\n\nexport interface ClassificationDirectoryInfo {\n targetType: DashboardTargetType.ClassificationDirectory;\n classificationId: string;\n}\n\nexport interface ClassificationCurriculumInfo {\n targetType: DashboardTargetType.ClassificationCurriculum;\n classificationId: string;\n}\n\ninterface MoviesAndTvDashboardInfo {\n targetType: DashboardTargetType.MoviesAndTv;\n presentationId: string;\n}\n\nexport interface CompanyDashboardInfo {\n targetType: DashboardTargetType.Company;\n companyId: string;\n presentationId: string;\n}\n\nexport interface PartnerProfileDashboardInfo {\n targetType: DashboardTargetType.PartnerProfile;\n slug: string;\n}\n\nexport interface PartnerProfileHubDashboardInfo {\n targetType: DashboardTargetType.PartnerProfileHub;\n}\n\nexport interface PartnerProfileDiscoverDashboardInfo {\n targetType: DashboardTargetType.DiscoverPartnerProfiles;\n}\n\nexport type DashboardTargetInfo =\n | DiscoverDashboardInfo |\n ClassificationDashboardInfo |\n ClassificationDirectoryInfo |\n ClassificationCurriculumInfo |\n MoviesAndTvDashboardInfo |\n CompanyDashboardInfo |\n PartnerProfileDashboardInfo |\n PartnerProfileHubDashboardInfo |\n PartnerProfileDiscoverDashboardInfo;\nexport interface UnknownDashboardTargetInfo {\n targetType: DashboardTargetType;\n presentationId: string;\n classificationId: string;\n companyId: string;\n slug: string;\n}\n","import * as _ from 'underscore';\n\nconst padLeft = (value: string | number, totalLength: number, padChar: string) => {\n value = value.toString();\n\n const diff = totalLength - value.length;\n\n if (diff <= 0)\n return value;\n\n return new Array(diff + 1).join(padChar) + value;\n};\n\nconst DurationHelper = {\n /**\n * Copypasta from Online. Feel free to improve it if you see fit - Sha\n */\n ToDisplayDuration(milliseconds: number, showAll?: boolean): string {\n if (!_.isNumber(milliseconds))\n return '';\n \n const time = new Date(milliseconds);\n \n const h = time.getUTCHours();\n const m = padLeft(time.getUTCMinutes(), 2, '0');\n const s = padLeft(time.getUTCSeconds(), 2, '0');\n \n if (showAll || h > 0) {\n return `${h}:${m}:${s}`;\n }\n \n return `${m}:${s}`;\n },\n\n ToDisplayDurationNewStyle(milliseconds: number, includeSeconds?: boolean): string {\n if (!_.isNumber(milliseconds))\n return '';\n\n const time = new Date(milliseconds);\n\n let h = time.getUTCHours();\n let m = time.getUTCMinutes();\n const s = time.getUTCSeconds();\n\n // Round up 1m when >= 30s\n if ((h > 0 || m > 0) && s >= 30) {\n m = m + 1;\n // Handle minute overflow (e.g., 59m + 1 = 60m -> 1hr)\n if (m >= 60) {\n h = h + 1;\n m = 0;\n }\n }\n \n if (h > 0) {\n const hourUnit = h > 1 ? 'hrs' : 'hr';\n\n if (m > 0) {\n if (includeSeconds && s > 0) {\n return `${h}${hourUnit} ${m}m ${s}s`;\n }\n\n return `${h}${hourUnit} ${m}m `;\n }\n \n return `${h} ${hourUnit}`;\n }\n\n if (m > 0) {\n if (includeSeconds && s > 0) {\n return `${m}m ${s}s`;\n }\n\n return `${m}m`;\n }\n\n return `${s}s`;\n },\n\n ToDisplayTimeRange(startMilliseconds: number, endMilliseconds: number) {\n if (!_.isNumber(startMilliseconds) || !_.isNumber(endMilliseconds))\n return '';\n\n const showAll = new Date(endMilliseconds).getUTCHours() > 0;\n\n return `${DurationHelper.ToDisplayDuration(startMilliseconds, showAll)} - ${DurationHelper.ToDisplayDuration(endMilliseconds, showAll)}`;\n }\n};\n\nexport { DurationHelper };\n","\"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\nimport { TopVideoV2 } from 'shared/interfaces';\n\nconst LEGACY_CV_LIVE_CONTENT_TYPE = 'Streamable Learning content';\nconst CV_LIVE_CONTENT_TYPE = 'ClickView Live content';\n\n/**\n * The Videoviews API still reports ClickView Live streams under the product's\n * former name, so relabel them before they are rendered.\n */\nfunction formatCvLiveContentType(data: TopVideoV2[]): TopVideoV2[] {\n if (!Array.isArray(data)) return data;\n\n return data.map(video => (\n video.contentType === LEGACY_CV_LIVE_CONTENT_TYPE ?\n { ...video, contentType: CV_LIVE_CONTENT_TYPE } :\n video\n ));\n}\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 formatData: formatCvLiveContentType\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":[2],"mappings":"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"}