@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,nn as t,st as n}from"./CM0wW4AE.chunk.js";import{d as r,n as i}from"./dUFTODMz.chunk.js";import{r as a}from"./NaTUzw6f.chunk.js";import{t as o}from"./I5Dnl_eN.chunk.js";import{n as s,r as c,t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./DIAxWspB.chunk.js";import{r as d}from"./app-eLOi12JS.js";import{t as f}from"./Cu7qiGbY2.chunk.js";import{a as p,d as m,i as h,l as g,o as _,u as v}from"./DirX37xL2.chunk.js";n();var y=e(),b={chart:{spacing:[20,0,4,0]},title:{text:null},tooltip:{enabled:!1},credits:{enabled:!1},yAxis:{gridLineWidth:0,labels:{enabled:!1},title:{text:null},endOnTick:!0,tickAmount:10},xAxis:{lineWidth:0,labels:{style:{...g,textOverflow:`none`,wordBreak:`break-word`}}},legend:{enabled:!1},plotOptions:{column:{borderRadius:4,dataLabels:{enabled:!0,style:g,inside:!1,crop:!1,overflow:`allow`},groupPadding:0,minPointLength:8}},series:[{type:`column`,label:{enabled:!1},states:{hover:{enabled:!1}}}]},x=(e,t,n)=>({...b,xAxis:{...b.xAxis,categories:e,labels:{...b.xAxis.labels,useHTML:!0,formatter:function(){return m(this.value,n)}}},series:[{type:`column`,label:{enabled:!1},states:{hover:{enabled:!1}},data:t}]});function S(e){return(0,y.jsx)(v,{options:x(e.data.map(e=>e.name),e.data,e.labelAnnotations),annotations:e.labelAnnotations,className:`h-100`,containerProps:{className:`h-100`}})}var C={image:`_image_1a110_1`},w=o.encloseNamespace(`reportsShared.totalViewsByRoleCardEmptyState`);function T(){return(0,y.jsxs)(u,{className:`flex-grow-1 justify-content-center`,children:[(0,y.jsx)(u.Image,{src:l.EmptyStates.Shared.Ticket,className:C.image}),(0,y.jsx)(u.Heading,{className:`h6`,children:w(`heading`)}),(0,y.jsx)(u.Info,{className:`w-100`,children:w(`description`)})]})}var E=`reportsShared.videoViewsByRoleCard`,D=o.encloseNamespace(E);function O(e){let n=d(`video-views`),o=r(e.videoId?f.videoAggregation(e.videoId,`user_type`,n):f.aggregation(`user_type`,n));function l(e){return e?e.reduce((e,t)=>{let n=[a.System,`255`].includes(t.name)?null:t.name,r=e.find(e=>e.name===n);return r?r.count+=t.count:e.push({name:n,count:t.count}),e},[]).map(e=>({name:p(e.name),y:e.count,color:h(e.name)})).sort((e,t)=>_(e.name,t.name)):null}let u=l(o.data);return(0,y.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3`,children:u?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(`h2`,{className:`h6 mb-3`,children:(0,y.jsx)(i,{namespace:E,phrase:`videoViews`})}),u.length?(0,y.jsx)(`div`,{className:`flex-grow-1 position-relative`,children:(0,y.jsx)(`div`,{className:`position-absolute w-100 h-100`,children:(0,y.jsx)(S,{data:u,labelAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:c.DEFAULT,action:s.Default.CLASSROOM_VIEWS_POPUP})},tooltip:D(`classroomViewsSettings`)}}})})}):(0,y.jsx)(T,{})]}):(0,y.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}export{S as n,O as t};
2
- //# sourceMappingURL=Do88yXba.chunk.js.map
1
+ import{P as e,nn as t,st as n}from"./CM0wW4AE.chunk.js";import{d as r,n as i}from"./dUFTODMz.chunk.js";import{r as a}from"./NaTUzw6f.chunk.js";import{t as o}from"./I5Dnl_eN.chunk.js";import{n as s,r as c,t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./DIAxWspB.chunk.js";import{r as d}from"./app-BigOHyYp.js";import{t as f}from"./ktNy7dHM2.chunk.js";import{a as p,d as m,i as h,l as g,o as _,u as v}from"./CCLDpjnt2.chunk.js";n();var y=e(),b={chart:{spacing:[20,0,4,0]},title:{text:null},tooltip:{enabled:!1},credits:{enabled:!1},yAxis:{gridLineWidth:0,labels:{enabled:!1},title:{text:null},endOnTick:!0,tickAmount:10},xAxis:{lineWidth:0,labels:{style:{...g,textOverflow:`none`,wordBreak:`break-word`}}},legend:{enabled:!1},plotOptions:{column:{borderRadius:4,dataLabels:{enabled:!0,style:g,inside:!1,crop:!1,overflow:`allow`},groupPadding:0,minPointLength:8}},series:[{type:`column`,label:{enabled:!1},states:{hover:{enabled:!1}}}]},x=(e,t,n)=>({...b,xAxis:{...b.xAxis,categories:e,labels:{...b.xAxis.labels,useHTML:!0,formatter:function(){return m(this.value,n)}}},series:[{type:`column`,label:{enabled:!1},states:{hover:{enabled:!1}},data:t}]});function S(e){return(0,y.jsx)(v,{options:x(e.data.map(e=>e.name),e.data,e.labelAnnotations),annotations:e.labelAnnotations,className:`h-100`,containerProps:{className:`h-100`}})}var C={image:`_image_1a110_1`},w=o.encloseNamespace(`reportsShared.totalViewsByRoleCardEmptyState`);function T(){return(0,y.jsxs)(u,{className:`flex-grow-1 justify-content-center`,children:[(0,y.jsx)(u.Image,{src:l.EmptyStates.Shared.Ticket,className:C.image}),(0,y.jsx)(u.Heading,{className:`h6`,children:w(`heading`)}),(0,y.jsx)(u.Info,{className:`w-100`,children:w(`description`)})]})}var E=`reportsShared.videoViewsByRoleCard`,D=o.encloseNamespace(E);function O(e){let n=d(`video-views`),o=r(e.videoId?f.videoAggregation(e.videoId,`user_type`,n):f.aggregation(`user_type`,n));function l(e){return e?e.reduce((e,t)=>{let n=[a.System,`255`].includes(t.name)?null:t.name,r=e.find(e=>e.name===n);return r?r.count+=t.count:e.push({name:n,count:t.count}),e},[]).map(e=>({name:p(e.name),y:e.count,color:h(e.name)})).sort((e,t)=>_(e.name,t.name)):null}let u=l(o.data);return(0,y.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3`,children:u?(0,y.jsxs)(y.Fragment,{children:[(0,y.jsx)(`h2`,{className:`h6 mb-3`,children:(0,y.jsx)(i,{namespace:E,phrase:`videoViews`})}),u.length?(0,y.jsx)(`div`,{className:`flex-grow-1 position-relative`,children:(0,y.jsx)(`div`,{className:`position-absolute w-100 h-100`,children:(0,y.jsx)(S,{data:u,labelAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:c.DEFAULT,action:s.Default.CLASSROOM_VIEWS_POPUP})},tooltip:D(`classroomViewsSettings`)}}})})}):(0,y.jsx)(T,{})]}):(0,y.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}export{S as n,O as t};
2
+ //# sourceMappingURL=CJIwkABI.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Do88yXba.chunk.js","names":[],"sources":["../../src/shared/components/column-chart/ColumnChart.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/empty-state/total-views-by-role-card-empty-state.module.scss","../../src/shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView.tsx"],"sourcesContent":["import React from 'react';\nimport Highcharts from 'highcharts';\n\nimport { AnnotatedChart, formatAnnotatedLabel, LabelAnnotations } from 'shared/components/annotated-chart/AnnotatedChart';\nimport { CHART_FONT_STYLES } from 'shared/constants/ChartStyles';\n\nconst STATIC_COLUMN_CHART_OPTIONS: Highcharts.Options = {\n chart: {\n spacing: [ 20, 0, 4, 0 ]\n },\n title: {\n text: null\n },\n tooltip: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n yAxis: {\n gridLineWidth: 0,\n labels: {\n enabled: false\n },\n title: {\n text: null\n },\n endOnTick: true,\n tickAmount: 10\n },\n xAxis: {\n lineWidth: 0,\n labels: {\n style: {\n ...CHART_FONT_STYLES,\n textOverflow: 'none',\n wordBreak: 'break-word'\n }\n }\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n column: {\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n crop: false,\n overflow: 'allow'\n },\n groupPadding: 0,\n minPointLength: 8\n }\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n }\n }]\n};\n\nconst getChartOptions = (\n categories: string[],\n data: Highcharts.PointOptionsObject[],\n labelAnnotations?: LabelAnnotations\n): Highcharts.Options => ({\n ...STATIC_COLUMN_CHART_OPTIONS,\n xAxis: {\n ...STATIC_COLUMN_CHART_OPTIONS.xAxis,\n categories,\n labels: {\n ...(STATIC_COLUMN_CHART_OPTIONS.xAxis as Highcharts.XAxisOptions).labels,\n useHTML: true,\n // Must be a function and not an arrow function to access `this.value`\n formatter: function () {\n return formatAnnotatedLabel(this.value as string, labelAnnotations);\n }\n }\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n },\n data\n }]\n});\n\ninterface ColumnChartProps {\n data: Highcharts.PointOptionsObject[];\n labelAnnotations?: LabelAnnotations;\n}\n\nexport function ColumnChart(props: ColumnChartProps) {\n const chartOptions = getChartOptions(props.data.map(data => data.name as string), props.data, props.labelAnnotations);\n\n return (\n <AnnotatedChart\n options={chartOptions}\n annotations={props.labelAnnotations}\n className='h-100'\n containerProps={{ className: 'h-100' }}\n />\n );\n}\n",":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-role-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByRoleCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByRoleCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.Ticket}\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 { Core } from 'libs/common/backbone/index';\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';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { compareGroupNames } from 'shared/utils/GroupSortUtils';\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\nimport { TotalViewsByRoleCardEmptyState } from 'shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByRoleCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoViewsByRoleCardProps {\n videoId?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByRoleCardView(props: VideoViewsByRoleCardProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, 'user_type', requestFilter) :\n VideoViewsV2Requests.aggregation('user_type', requestFilter));\n\n function getChartData(views: GroupedAnalyticsCount[]): Highcharts.PointOptionsObject[] {\n if (!views) return null;\n\n // Bucketing System user data as Anonymous\n const mergedViews = views.reduce((acc, val) => {\n const key = [ UserGroup.System, '255' ].includes(val.name) ? null : val.name;\n const existing = acc.find(v => v.name === key);\n\n if (existing)\n existing.count += val.count;\n else\n acc.push({ name: key, count: val.count });\n\n return acc;\n }, []);\n\n return mergedViews.map(group => ({\n name: mapUserTypeToChartLabel(group.name),\n y: group.count,\n color: mapUserTypeToChartColour(group.name as UserGroup)\n })).sort((a, b) => compareGroupNames(a.name, b.name));\n }\n\n const chartData = getChartData(viewsByGroup.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 <div className='flex-grow-1 position-relative'>\n <div className='position-absolute w-100 h-100'>\n <ColumnChart data={chartData} labelAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }} />\n </div>\n </div> :\n <TotalViewsByRoleCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CJIwkABI.chunk.js","names":[],"sources":["../../src/shared/components/column-chart/ColumnChart.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/empty-state/total-views-by-role-card-empty-state.module.scss","../../src/shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState.tsx","../../src/shared/views/overview-cards/video-views-by-role-card/VideoViewsByRoleCardView.tsx"],"sourcesContent":["import React from 'react';\nimport Highcharts from 'highcharts';\n\nimport { AnnotatedChart, formatAnnotatedLabel, LabelAnnotations } from 'shared/components/annotated-chart/AnnotatedChart';\nimport { CHART_FONT_STYLES } from 'shared/constants/ChartStyles';\n\nconst STATIC_COLUMN_CHART_OPTIONS: Highcharts.Options = {\n chart: {\n spacing: [ 20, 0, 4, 0 ]\n },\n title: {\n text: null\n },\n tooltip: {\n enabled: false\n },\n credits: {\n enabled: false\n },\n yAxis: {\n gridLineWidth: 0,\n labels: {\n enabled: false\n },\n title: {\n text: null\n },\n endOnTick: true,\n tickAmount: 10\n },\n xAxis: {\n lineWidth: 0,\n labels: {\n style: {\n ...CHART_FONT_STYLES,\n textOverflow: 'none',\n wordBreak: 'break-word'\n }\n }\n },\n legend: {\n enabled: false\n },\n plotOptions: {\n column: {\n borderRadius: 4,\n dataLabels: {\n enabled: true,\n style: CHART_FONT_STYLES,\n inside: false,\n crop: false,\n overflow: 'allow'\n },\n groupPadding: 0,\n minPointLength: 8\n }\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n }\n }]\n};\n\nconst getChartOptions = (\n categories: string[],\n data: Highcharts.PointOptionsObject[],\n labelAnnotations?: LabelAnnotations\n): Highcharts.Options => ({\n ...STATIC_COLUMN_CHART_OPTIONS,\n xAxis: {\n ...STATIC_COLUMN_CHART_OPTIONS.xAxis,\n categories,\n labels: {\n ...(STATIC_COLUMN_CHART_OPTIONS.xAxis as Highcharts.XAxisOptions).labels,\n useHTML: true,\n // Must be a function and not an arrow function to access `this.value`\n formatter: function () {\n return formatAnnotatedLabel(this.value as string, labelAnnotations);\n }\n }\n },\n series: [{\n type: 'column',\n label: {\n enabled: false\n },\n states: {\n hover: {\n enabled: false\n }\n },\n data\n }]\n});\n\ninterface ColumnChartProps {\n data: Highcharts.PointOptionsObject[];\n labelAnnotations?: LabelAnnotations;\n}\n\nexport function ColumnChart(props: ColumnChartProps) {\n const chartOptions = getChartOptions(props.data.map(data => data.name as string), props.data, props.labelAnnotations);\n\n return (\n <AnnotatedChart\n options={chartOptions}\n annotations={props.labelAnnotations}\n className='h-100'\n containerProps={{ className: 'h-100' }}\n />\n );\n}\n",":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-role-card-empty-state.module.scss';\n\nconst namespace = 'reportsShared.totalViewsByRoleCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function TotalViewsByRoleCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.Ticket}\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 { Core } from 'libs/common/backbone/index';\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';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\n\nimport { ColumnChart } from 'shared/components/column-chart/ColumnChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { compareGroupNames } from 'shared/utils/GroupSortUtils';\nimport { mapUserTypeToChartColour, mapUserTypeToChartLabel } from 'shared/utils/UserUtils';\nimport { TotalViewsByRoleCardEmptyState } from 'shared/views/overview-cards/video-views-by-role-card/empty-state/TotalViewsByRoleCardEmptyState';\n\nconst namespace = 'reportsShared.videoViewsByRoleCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoViewsByRoleCardProps {\n videoId?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoViewsByRoleCardView(props: VideoViewsByRoleCardProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, 'user_type', requestFilter) :\n VideoViewsV2Requests.aggregation('user_type', requestFilter));\n\n function getChartData(views: GroupedAnalyticsCount[]): Highcharts.PointOptionsObject[] {\n if (!views) return null;\n\n // Bucketing System user data as Anonymous\n const mergedViews = views.reduce((acc, val) => {\n const key = [ UserGroup.System, '255' ].includes(val.name) ? null : val.name;\n const existing = acc.find(v => v.name === key);\n\n if (existing)\n existing.count += val.count;\n else\n acc.push({ name: key, count: val.count });\n\n return acc;\n }, []);\n\n return mergedViews.map(group => ({\n name: mapUserTypeToChartLabel(group.name),\n y: group.count,\n color: mapUserTypeToChartColour(group.name as UserGroup)\n })).sort((a, b) => compareGroupNames(a.name, b.name));\n }\n\n const chartData = getChartData(viewsByGroup.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 <div className='flex-grow-1 position-relative'>\n <div className='position-absolute w-100 h-100'>\n <ColumnChart data={chartData} labelAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }} />\n </div>\n </div> :\n <TotalViewsByRoleCardEmptyState />\n }\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{E as e,Jn as t,P as n,b as r,st as i,x as a,y as o}from"./CM0wW4AE.chunk.js";import{d as s}from"./dUFTODMz.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./CT_mfyYn.chunk.js";import{t as d}from"./C7xZhn-Q.chunk.js";import{t as f}from"./DHk1ZJ0C.chunk.js";import{t as p}from"./DIAxWspB.chunk.js";import{h as m,l as h,n as g,r as _,u as v}from"./app-eLOi12JS.js";import{n as y,r as b,t as x}from"./Kl4bbkgr2.chunk.js";import{t as S}from"./Cu7qiGbY2.chunk.js";import{t as C}from"./mApnhyGa2.chunk.js";import{n as w}from"./B-Cpv5JW2.chunk.js";import{r as T,t as E}from"./Bqyk3nb6.chunk.js";import{t as D}from"./Dh8AAJA8.chunk.js";var O=t(e()),k=t(i()),A=n(),j=k.forwardRef(({bsPrefix:e,className:t,as:n=`div`,...i},s)=>{let c=a(e,`row`),l=o(),u=r(),d=`${c}-cols`,f=[];return l.forEach(e=>{let t=i[e];delete i[e];let n;typeof t==`object`&&t?{cols:n}=t:n=t;let r=e===u?``:`-${e}`;n!=null&&f.push(`${d}${r}-${n}`)}),(0,A.jsx)(n,{ref:s,...i,className:(0,O.default)(t,c,...f)})});j.displayName=`Row`;var M={videoTable:`_videoTable_14eqw_1`,interactiveTable:`_interactiveTable_14eqw_4`,userTable:`_userTable_14eqw_7`,header:`_header_14eqw_10`,itemHeader:`_itemHeader_14eqw_13`,videoItemContainer:`_videoItemContainer_14eqw_16`,interactiveItemContainer:`_interactiveItemContainer_14eqw_19`,userItemContainer:`_userItemContainer_14eqw_22`,heatMapItemContainer:`_heatMapItemContainer_14eqw_25`,partialAvatar:`_partialAvatar_14eqw_28`,partialNumber:`_partialNumber_14eqw_33`,partialLongText:`_partialLongText_14eqw_37`,partialMediumText:`_partialMediumText_14eqw_41`,partialShortText:`_partialShortText_14eqw_45`,partialThumbnail:`_partialThumbnail_14eqw_49`,partialHeatMap:`_partialHeatMap_14eqw_53`},N=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:5,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:4,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})})]}),P=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:5,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})})]}),F=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:2,className:`d-flex`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-3 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-2 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:6,className:`d-flex justify-content-between`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background ${M.heatMapItemContainer} ${M.partialShortText}`})})]});function I(e){switch(e){case`video-views`:return{headerComponent:N,tableStyle:M.videoTable};case`interactives`:return{headerComponent:P,tableStyle:M.interactiveTable};case`engagement-users`:return{headerComponent:F,tableStyle:M.userTable};default:return{headerComponent:(0,A.jsx)(A.Fragment,{}),tableStyle:``}}}function L(e){let{headerComponent:t,tableStyle:n}=I(e.variant);return(0,A.jsxs)(`div`,{className:`bg-white rounded ${n} ${e.className??``}`,children:[(0,A.jsx)(`div`,{className:`border-bottom ${M.header} ${e.headerClassName??``}`,children:t}),e.children]})}function R(){return(0,A.jsxs)(j,{className:`py-1 ${M.videoItemContainer}`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block`,children:(0,A.jsx)(`div`,{className:`partial-loading-background rounded ${M.partialThumbnail}`})})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ms-n2 ${M.partialLongText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:4,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialNumber}`})})]})}function z(){return(0,A.jsxs)(j,{className:`py-1 ${M.interactiveItemContainer}`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block`,children:(0,A.jsx)(`div`,{className:`partial-loading-background rounded ${M.partialThumbnail}`})})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ms-n2 ${M.partialMediumText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialAvatar}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialMediumText}`})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialNumber}`})})]})}function B(){return(0,A.jsxs)(j,{className:`my-2 ${M.userItemContainer}`,children:[(0,A.jsxs)(u,{xs:2,className:`d-flex align-items-center `,children:[(0,A.jsx)(`div`,{className:`partial-loading-background ms-3 ${M.partialAvatar}`}),(0,A.jsx)(`div`,{className:`partial-loading-background mx-2 ${M.partialShortText}`})]}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:6,className:`d-flex justify-content-between align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.heatMapItemContainer} ${M.partialHeatMap}`})})]})}function V(e,t){switch(e){case`video-views`:return(0,A.jsx)(R,{},t);case`interactives`:return(0,A.jsx)(z,{},t);case`engagement-users`:return(0,A.jsx)(B,{},t);default:return(0,A.jsx)(A.Fragment,{})}}H.defaultProps={itemCount:7};function H(e){return(0,A.jsx)(`div`,{className:`my-1`,children:Array(e.itemCount).fill(null).map((t,n)=>V(e.variant,n))})}var U=c.encloseNamespace(`reportsVideos.videoViewsTableEmptyState`);function W(){return(0,A.jsxs)(p,{className:`bg-white rounded justify-content-center py-5`,children:[(0,A.jsx)(p.Image,{src:l.EmptyStates.Shared.ViewCount,className:`w-25 h-auto`}),(0,A.jsx)(p.Heading,{children:U(`heading`)}),(0,A.jsx)(p.Info,{children:U(`description`)})]})}var G={title:`_title_3yzlb_1`,thumbnail:`_thumbnail_3yzlb_2`,seeOverview:`_seeOverview_3yzlb_8`,row:`_row_3yzlb_11`},K=c.encloseNamespace(`reportsVideos.videoViewsTable`),q={table:`bg-white rounded`,header:`border-bottom`,headerCell:`p-3`,row:G.row,cell:`p-3`},J=[{Header:()=>(0,A.jsx)(`div`,{className:`d-flex justify-content-end`,children:`#`}),accessor:`object`,id:`index`,Cell:({row:{index:e}})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center justify-content-end h-100`,children:e+1}),width:5,disableSortBy:!0},{Header:e=>(0,A.jsx)(`div`,{className:G.title,children:(0,A.jsxs)(A.Fragment,{children:[K(`title`),` `,e.renderSortIndicator()]})}),accessor:`object`,id:`image`,Cell:({value:e})=>(0,A.jsx)(x,{video:e,imageOptions:{size:f.Small},textPosition:y.Independent,type:`cosmetic`,hideMask:!0,extraClasses:G.thumbnail,newDurationStyle:!0,size:`sm`}),width:30,hideSortIndicator:!0,sortType:(e,t)=>e.original.object.name?.toLowerCase()>t.original.object.name?.toLowerCase()?1:-1},{accessor:`object`,id:`name`,Cell:({value:e})=>(0,A.jsxs)(`div`,{className:`d-flex flex-column justify-content-center h-100`,children:[v.isVideoType(e)&&(0,A.jsx)(b,{type:`series`,video:e,analyticsOptions:null,className:`d-inline clamp-1`}),(0,A.jsx)(`span`,{className:`text-truncate`,children:e.name})]}),width:60,disableSortBy:!0},{Header:()=>(0,A.jsx)(A.Fragment,{children:K(`contentType`)}),accessor:`contentType`,Cell:({value:e})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center h-100`,children:e}),width:30},{Header:()=>(0,A.jsx)(A.Fragment,{children:K(`views`)}),accessor:`combinedCount`,Cell:({value:e})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center h-100`,children:e}),width:30},{accessor:`object`,id:`see-overview`,Cell:()=>(0,A.jsx)(`div`,{className:`${G.seeOverview} align-items-center h-100 text-info`,children:K(`seeAnalytics`)}),width:25,disableSortBy:!0}];function Y(e){let t=g();function n(n){return e.getVideoAppLink(n.original.object,t)}return(0,A.jsx)(E,{columns:J,data:e.videos,theme:q,getRowAppLink:n,enableSort:!0})}var X=c.encloseNamespace(`reportsVideos.schoolTopVideosView`),Z=100;function Q(){let e=_(`video-views`),t=s(S.topStreams(Z,e)),n=C(t.data?.map(e=>e.objectId)??[],m.videos);T(t),d({title:X(`videos`)}),w(X(`videos`));let r=t.hasCompleted&&!n.isFetching,i=!!n.itemsArr?.length,a=t.data?.map(e=>{let t=n.items?.[e?.objectId];return t?{count:e.count,object:t,contentType:e.contentType,combinedCount:e.combinedCount}:null}).filter(e=>!!e);return(0,A.jsxs)(`div`,{className:`pb-3`,children:[(0,A.jsx)(D,{}),!r&&(0,A.jsx)(L,{variant:`video-views`,children:(0,A.jsx)(H,{variant:`video-views`})}),r&&i&&(0,A.jsx)(Y,{videos:a,getVideoAppLink:h}),r&&!i&&(0,A.jsx)(W,{})]})}export{Q as SchoolTopVideosView};
2
- //# sourceMappingURL=ByFS52xu.chunk.js.map
1
+ import{E as e,Jn as t,P as n,b as r,st as i,x as a,y as o}from"./CM0wW4AE.chunk.js";import{d as s}from"./dUFTODMz.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{t as l}from"./H5KLIhR_.chunk.js";import{t as u}from"./CT_mfyYn.chunk.js";import{t as d}from"./C7xZhn-Q.chunk.js";import{t as f}from"./DHk1ZJ0C.chunk.js";import{t as p}from"./DIAxWspB.chunk.js";import{h as m,l as h,n as g,r as _,u as v}from"./app-BigOHyYp.js";import{n as y,r as b,t as x}from"./3q7nyVif2.chunk.js";import{t as S}from"./ktNy7dHM2.chunk.js";import{t as C}from"./mApnhyGa2.chunk.js";import{n as w}from"./DgPadkLi2.chunk.js";import{r as T,t as E}from"./B9S_LeFP.chunk.js";import{t as D}from"./CKVaLGJC.chunk.js";var O=t(e()),k=t(i()),A=n(),j=k.forwardRef(({bsPrefix:e,className:t,as:n=`div`,...i},s)=>{let c=a(e,`row`),l=o(),u=r(),d=`${c}-cols`,f=[];return l.forEach(e=>{let t=i[e];delete i[e];let n;typeof t==`object`&&t?{cols:n}=t:n=t;let r=e===u?``:`-${e}`;n!=null&&f.push(`${d}${r}-${n}`)}),(0,A.jsx)(n,{ref:s,...i,className:(0,O.default)(t,c,...f)})});j.displayName=`Row`;var M={videoTable:`_videoTable_14eqw_1`,interactiveTable:`_interactiveTable_14eqw_4`,userTable:`_userTable_14eqw_7`,header:`_header_14eqw_10`,itemHeader:`_itemHeader_14eqw_13`,videoItemContainer:`_videoItemContainer_14eqw_16`,interactiveItemContainer:`_interactiveItemContainer_14eqw_19`,userItemContainer:`_userItemContainer_14eqw_22`,heatMapItemContainer:`_heatMapItemContainer_14eqw_25`,partialAvatar:`_partialAvatar_14eqw_28`,partialNumber:`_partialNumber_14eqw_33`,partialLongText:`_partialLongText_14eqw_37`,partialMediumText:`_partialMediumText_14eqw_41`,partialShortText:`_partialShortText_14eqw_45`,partialThumbnail:`_partialThumbnail_14eqw_49`,partialHeatMap:`_partialHeatMap_14eqw_53`},N=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:5,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:4,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})})]}),P=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:5,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})})]}),F=(0,A.jsxs)(j,{className:`py-3`,children:[(0,A.jsx)(u,{xs:2,className:`d-flex`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-3 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background mx-2 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:6,className:`d-flex justify-content-between`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background ${M.heatMapItemContainer} ${M.partialShortText}`})})]});function I(e){switch(e){case`video-views`:return{headerComponent:N,tableStyle:M.videoTable};case`interactives`:return{headerComponent:P,tableStyle:M.interactiveTable};case`engagement-users`:return{headerComponent:F,tableStyle:M.userTable};default:return{headerComponent:(0,A.jsx)(A.Fragment,{}),tableStyle:``}}}function L(e){let{headerComponent:t,tableStyle:n}=I(e.variant);return(0,A.jsxs)(`div`,{className:`bg-white rounded ${n} ${e.className??``}`,children:[(0,A.jsx)(`div`,{className:`border-bottom ${M.header} ${e.headerClassName??``}`,children:t}),e.children]})}function R(){return(0,A.jsxs)(j,{className:`py-1 ${M.videoItemContainer}`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block`,children:(0,A.jsx)(`div`,{className:`partial-loading-background rounded ${M.partialThumbnail}`})})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ms-n2 ${M.partialLongText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:4,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialNumber}`})})]})}function z(){return(0,A.jsxs)(j,{className:`py-1 ${M.interactiveItemContainer}`,children:[(0,A.jsx)(u,{xs:1,className:`d-flex align-items-center justify-content-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialNumber}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block`,children:(0,A.jsx)(`div`,{className:`partial-loading-background rounded ${M.partialThumbnail}`})})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ms-n2 ${M.partialMediumText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialAvatar}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialMediumText}`})}),(0,A.jsx)(u,{xs:3,className:`d-flex align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background mx-4 ${M.partialNumber}`})})]})}function B(){return(0,A.jsxs)(j,{className:`my-2 ${M.userItemContainer}`,children:[(0,A.jsxs)(u,{xs:2,className:`d-flex align-items-center `,children:[(0,A.jsx)(`div`,{className:`partial-loading-background ms-3 ${M.partialAvatar}`}),(0,A.jsx)(`div`,{className:`partial-loading-background mx-2 ${M.partialShortText}`})]}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center align-items-center`,children:(0,A.jsx)(`div`,{className:`d-block partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:2,className:`d-flex justify-content-center align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.partialShortText}`})}),(0,A.jsx)(u,{xs:6,className:`d-flex justify-content-between align-items-center`,children:(0,A.jsx)(`div`,{className:`partial-loading-background ${M.heatMapItemContainer} ${M.partialHeatMap}`})})]})}function V(e,t){switch(e){case`video-views`:return(0,A.jsx)(R,{},t);case`interactives`:return(0,A.jsx)(z,{},t);case`engagement-users`:return(0,A.jsx)(B,{},t);default:return(0,A.jsx)(A.Fragment,{})}}H.defaultProps={itemCount:7};function H(e){return(0,A.jsx)(`div`,{className:`my-1`,children:Array(e.itemCount).fill(null).map((t,n)=>V(e.variant,n))})}var U=c.encloseNamespace(`reportsVideos.videoViewsTableEmptyState`);function W(){return(0,A.jsxs)(p,{className:`bg-white rounded justify-content-center py-5`,children:[(0,A.jsx)(p.Image,{src:l.EmptyStates.Shared.ViewCount,className:`w-25 h-auto`}),(0,A.jsx)(p.Heading,{children:U(`heading`)}),(0,A.jsx)(p.Info,{children:U(`description`)})]})}var G={title:`_title_3yzlb_1`,thumbnail:`_thumbnail_3yzlb_2`,seeOverview:`_seeOverview_3yzlb_8`,row:`_row_3yzlb_11`},K=c.encloseNamespace(`reportsVideos.videoViewsTable`),q={table:`bg-white rounded`,header:`border-bottom`,headerCell:`p-3`,row:G.row,cell:`p-3`},J=[{Header:()=>(0,A.jsx)(`div`,{className:`d-flex justify-content-end`,children:`#`}),accessor:`object`,id:`index`,Cell:({row:{index:e}})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center justify-content-end h-100`,children:e+1}),width:5,disableSortBy:!0},{Header:e=>(0,A.jsx)(`div`,{className:G.title,children:(0,A.jsxs)(A.Fragment,{children:[K(`title`),` `,e.renderSortIndicator()]})}),accessor:`object`,id:`image`,Cell:({value:e})=>(0,A.jsx)(x,{video:e,imageOptions:{size:f.Small},textPosition:y.Independent,type:`cosmetic`,hideMask:!0,extraClasses:G.thumbnail,newDurationStyle:!0,size:`sm`}),width:30,hideSortIndicator:!0,sortType:(e,t)=>e.original.object.name?.toLowerCase()>t.original.object.name?.toLowerCase()?1:-1},{accessor:`object`,id:`name`,Cell:({value:e})=>(0,A.jsxs)(`div`,{className:`d-flex flex-column justify-content-center h-100`,children:[v.isVideoType(e)&&(0,A.jsx)(b,{type:`series`,video:e,analyticsOptions:null,className:`d-inline clamp-1`}),(0,A.jsx)(`span`,{className:`text-truncate`,children:e.name})]}),width:60,disableSortBy:!0},{Header:()=>(0,A.jsx)(A.Fragment,{children:K(`contentType`)}),accessor:`contentType`,Cell:({value:e})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center h-100`,children:e}),width:30},{Header:()=>(0,A.jsx)(A.Fragment,{children:K(`views`)}),accessor:`combinedCount`,Cell:({value:e})=>(0,A.jsx)(`div`,{className:`d-flex align-items-center h-100`,children:e}),width:30},{accessor:`object`,id:`see-overview`,Cell:()=>(0,A.jsx)(`div`,{className:`${G.seeOverview} align-items-center h-100 text-info`,children:K(`seeAnalytics`)}),width:25,disableSortBy:!0}];function Y(e){let t=g();function n(n){return e.getVideoAppLink(n.original.object,t)}return(0,A.jsx)(E,{columns:J,data:e.videos,theme:q,getRowAppLink:n,enableSort:!0})}var X=c.encloseNamespace(`reportsVideos.schoolTopVideosView`),Z=100;function Q(){let e=_(`video-views`),t=s(S.topStreams(Z,e)),n=C(t.data?.map(e=>e.objectId)??[],m.videos);T(t),d({title:X(`videos`)}),w(X(`videos`));let r=t.hasCompleted&&!n.isFetching,i=!!n.itemsArr?.length,a=t.data?.map(e=>{let t=n.items?.[e?.objectId];return t?{count:e.count,object:t,contentType:e.contentType,combinedCount:e.combinedCount}:null}).filter(e=>!!e);return(0,A.jsxs)(`div`,{className:`pb-3`,children:[(0,A.jsx)(D,{}),!r&&(0,A.jsx)(L,{variant:`video-views`,children:(0,A.jsx)(H,{variant:`video-views`})}),r&&i&&(0,A.jsx)(Y,{videos:a,getVideoAppLink:h}),r&&!i&&(0,A.jsx)(W,{})]})}export{Q as SchoolTopVideosView};
2
+ //# sourceMappingURL=CKRKdk5U.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ByFS52xu.chunk.js","names":[],"sources":["../../../../../node_modules/react-bootstrap/esm/Row.js","../../src/shared/components/partial-loading/partial-loading.module.scss","../../src/shared/components/partial-loading/PartialTable.tsx","../../src/shared/components/partial-loading/PartialTableContent.tsx","../../src/apps/videos/components/video-views-table/video-views-table-empty-state/VideoViewsTableEmptyState.tsx","../../src/apps/videos/components/video-views-table/video-views-table.module.scss","../../src/apps/videos/components/video-views-table/VideoViewsTable.tsx","../../src/apps/videos/views/school-top-videos/SchoolTopVideosView.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;",":local {\n // Table styles\n\n .videoTable {\n height: 62rem;\n }\n\n .interactiveTable {\n height: 57rem;\n }\n\n .userTable {\n height: 14rem;\n }\n\n .header {\n height: 3.825rem\n }\n\n .itemHeader {\n height: 3.825rem\n }\n\n // Item styles\n\n .videoItemContainer {\n height: 8.125rem;\n }\n\n .interactiveItemContainer {\n height: 7.375rem;\n }\n\n .userItemContainer {\n height: 2.5625rem;\n }\n\n .heatMapItemContainer {\n margin-left: 6rem;\n }\n\n .partialAvatar {\n width: $avatar-width;\n height: $avatar-width;\n border-radius: 50%;\n }\n\n .partialNumber {\n width: 2rem;\n height: 1.1rem;\n }\n\n .partialLongText {\n width: 16rem;\n height: 1.1rem;\n }\n\n .partialMediumText {\n width: 10rem;\n height: 1.1rem;\n }\n\n .partialShortText {\n width: 5rem;\n height: 1.1rem;\n }\n\n .partialThumbnail {\n width: 10rem;\n padding-bottom: 56.25%;\n }\n\n .partialHeatMap {\n width: 34rem;\n height: 1.1rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './partial-loading.module.scss';\n\nconst VideoViewsHeader = (\n <Row className='py-3'>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={5} className='d-flex align-items-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center' >\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={4} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nconst InteractivesHeader = (\n <Row className='py-3'>\n <Col xs={5} className='d-flex align-items-center'>\n <div className={`partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center' >\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nconst EngagementUsersHeader = (\n <Row className='py-3'>\n <Col xs={2} className='d-flex'>\n <div className={`partial-loading-background mx-3 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center'>\n <div className={`partial-loading-background mx-2 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={6} className='d-flex justify-content-between'>\n <div className={`d-block partial-loading-background ${styles.heatMapItemContainer} ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nfunction getTableVariant(type: TableVariant) {\n switch (type) {\n case 'video-views':\n return {\n headerComponent: VideoViewsHeader,\n tableStyle: styles.videoTable\n };\n\n case 'interactives':\n return {\n headerComponent: InteractivesHeader,\n tableStyle: styles.interactiveTable\n };\n\n case 'engagement-users':\n return {\n headerComponent: EngagementUsersHeader,\n tableStyle: styles.userTable\n };\n\n default:\n return {\n headerComponent: <></>,\n tableStyle: ''\n };\n }\n}\n\nexport type TableVariant = 'video-views' | 'interactives' | 'engagement-users';\n\ninterface PartialTableProps {\n variant?: TableVariant;\n className?: string;\n headerClassName?: string;\n}\n\nexport function PartialTable(props: React.PropsWithChildren<PartialTableProps>): JSX.Element {\n const { headerComponent, tableStyle } = getTableVariant(props.variant);\n\n return (\n <div className={`bg-white rounded ${tableStyle} ${props.className ?? ''}`}>\n <div className={`border-bottom ${styles.header} ${props.headerClassName ?? ''}`}>\n {headerComponent}\n </div>\n {props.children}\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { TableVariant } from 'shared/components/partial-loading/PartialTable';\n\nimport styles from './partial-loading.module.scss';\n\nfunction VideoItem(): JSX.Element {\n return (\n <Row className={`py-1 ${styles.videoItemContainer}`}>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className='d-block'>\n <div className={`partial-loading-background rounded ${styles.partialThumbnail}`} />\n </div>\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`partial-loading-background ms-n2 ${styles.partialLongText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={4} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialNumber}`} />\n </Col>\n </Row>\n );\n}\n\nfunction InteractiveItem(): JSX.Element {\n return (\n <Row className={`py-1 ${styles.interactiveItemContainer}`}>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className='d-block'>\n <div className={`partial-loading-background rounded ${styles.partialThumbnail}`} />\n </div>\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`partial-loading-background ms-n2 ${styles.partialMediumText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialAvatar}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialMediumText}`} />\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialNumber}`} />\n </Col>\n </Row>\n );\n}\n\nfunction EngagementUserItem(): JSX.Element {\n return (\n <Row className={`my-2 ${styles.userItemContainer}`}>\n <Col xs={2} className='d-flex align-items-center '>\n <div className={`partial-loading-background ms-3 ${styles.partialAvatar}`} />\n <div className={`partial-loading-background mx-2 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center align-items-center'>\n <div className={`d-block partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center align-items-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={6} className='d-flex justify-content-between align-items-center'>\n <div className={`partial-loading-background ${styles.heatMapItemContainer} ${styles.partialHeatMap}`} />\n </Col>\n </Row>\n );\n}\n\nfunction getPartialItem(type: TableVariant, key: number): JSX.Element {\n switch (type) {\n case 'video-views':\n return <VideoItem key={key} />;\n\n case 'interactives':\n return <InteractiveItem key={key} />;\n\n case 'engagement-users':\n return <EngagementUserItem key={key} />;\n\n default:\n return <></>;\n }\n}\n\ninterface PartialTableContentProps {\n variant: TableVariant;\n itemCount?: number;\n}\n\nPartialTableContent.defaultProps = {\n itemCount: 7\n};\n\nexport function PartialTableContent(props: PartialTableContentProps): JSX.Element {\n return (\n <div className='my-1'>\n {Array(props.itemCount).fill(null).map((_, i) => getPartialItem(props.variant, i))}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsVideos.videoViewsTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function VideoViewsTableEmptyState(): JSX.Element {\n return (\n <EmptyState className='bg-white rounded justify-content-center py-5'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.ViewCount}\n className='w-25 h-auto'\n />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n",":local {\n .title,\n .thumbnail {\n min-width: 8rem;\n max-width: 10rem;\n margin-left: auto; \n margin-right: 0;\n }\n\n .seeOverview {\n display: none;\n }\n\n .row:hover {\n background-color: $light-blue;\n text-decoration: none;\n\n .seeOverview {\n display: flex;\n }\n }\n}","import React from 'react';\nimport { Row } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { Column, HeaderProps, Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopVideo } from 'shared/interfaces';\n\nimport styles from './video-views-table.module.scss';\n\nconst namespace = 'reportsVideos.videoViewsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst theme: TableTheme = {\n table: 'bg-white rounded',\n header: 'border-bottom',\n headerCell: 'p-3',\n row: styles.row,\n cell: 'p-3'\n};\n\nexport const COLUMNS: Column<TopVideo>[] = [\n {\n Header: () => (\n <div className='d-flex justify-content-end'>\n #\n </div>\n ),\n accessor: 'object',\n id: 'index',\n Cell: ({ row: { index } }) => (\n <div className='d-flex align-items-center justify-content-end h-100'>\n {index + 1}\n </div>\n ),\n width: 5,\n disableSortBy: true\n },\n {\n Header: (props: HeaderProps<TopVideo>) => (\n <div className={styles.title}>\n <>{getPhrase('title')} {props.renderSortIndicator()}</>\n </div>\n ),\n accessor: 'object',\n id: 'image',\n Cell: ({ value }) => (\n <VideoThumbnail\n video={value}\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n extraClasses={styles.thumbnail}\n newDurationStyle\n size='sm'\n />\n ),\n width: 30,\n hideSortIndicator: true,\n sortType: (rowA: Row<TopVideo>, rowB: Row<TopVideo>) => {\n return rowA.original.object.name?.toLowerCase() > rowB.original.object.name?.toLowerCase() ? 1 : -1;\n }\n },\n {\n accessor: 'object',\n id: 'name',\n Cell: ({ value }) => (\n <div className='d-flex flex-column justify-content-center h-100'>\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n analyticsOptions={null}\n className='d-inline clamp-1'\n />\n )}\n <span className='text-truncate'>{value.name}</span>\n </div>\n ),\n width: 60,\n disableSortBy: true\n },\n {\n Header: () => <>{getPhrase('contentType')}</>,\n accessor: 'contentType',\n Cell: ({ value }) => (\n <div className='d-flex align-items-center h-100'>\n {value}\n </div>\n ),\n width: 30\n },\n {\n Header: () => <>{getPhrase('views')}</>,\n accessor: 'combinedCount',\n Cell: ({ value }) => (\n <div className='d-flex align-items-center h-100'>\n {value}\n </div>\n ),\n width: 30\n },\n {\n accessor: 'object',\n id: 'see-overview',\n Cell: () => (\n <div className={`${styles.seeOverview} align-items-center h-100 text-info`}>\n {getPhrase('seeAnalytics')}\n </div>\n ),\n width: 25,\n disableSortBy: true\n }\n];\n\ninterface VideoViewsByVideoTableProps {\n videos: TopVideo[];\n getVideoAppLink: (object: VideoTypes, filterQueryParams: FilterQueryParams) => Core.AppLink;\n}\n\nexport function VideoViewsTable(props: VideoViewsByVideoTableProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n function getRowAppLink(row: Row<TopVideo>): Core.AppLink {\n return props.getVideoAppLink(row.original.object, filterQueryParams);\n }\n\n return (\n <Table\n columns={COLUMNS}\n data={props.videos}\n theme={theme}\n getRowAppLink={getRowAppLink}\n enableSort\n />\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialTableContent } from 'shared/components/partial-loading/PartialTableContent';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { TopVideo, TopVideoV2 } from 'shared/interfaces';\nimport { getSchoolVideoAppLink } from 'shared/utils/ReportsAppLinkUtils';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\nimport { VideoViewsTableEmptyState } from 'apps/videos/components/video-views-table/video-views-table-empty-state/VideoViewsTableEmptyState';\nimport { VideoViewsTable } from 'apps/videos/components/video-views-table/VideoViewsTable';\n\nconst namespace = 'reportsVideos.schoolTopVideosView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIMIT = 100;\n\nexport function SchoolTopVideosView(): JSX.Element {\n const requestFilter = useGetRequestFilter('video-views');\n\n const topStreams = Flight.useBasicFetch<TopVideoV2[]>(VideoViewsV2Requests.topStreams(LIMIT, requestFilter));\n\n const videos = useBatchFetch<VideoTypes>(\n topStreams.data?.map(v => v.objectId) ?? [],\n VideoRequests.videos\n );\n\n useHandleObjectError(topStreams);\n\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n\n const hasLoaded = (\n topStreams.hasCompleted &&\n !videos.isFetching\n );\n\n const hasVideoViews = !!videos.itemsArr?.length;\n \n const mappedVideos = topStreams.data?.map<TopVideo>(topStream => {\n const video = videos.items?.[topStream?.objectId];\n\n if (!video)\n return null;\n\n return {\n count: topStream.count,\n object: video,\n contentType: topStream.contentType,\n combinedCount: topStream.combinedCount\n };\n }).filter(v => !!v);\n\n return (\n <div className='pb-3'>\n <SchoolVideosNav />\n {!hasLoaded &&\n <PartialTable variant='video-views'>\n <PartialTableContent variant='video-views' />\n </PartialTable>\n }\n {hasLoaded && hasVideoViews &&\n <VideoViewsTable videos={mappedVideos} getVideoAppLink={getSchoolVideoAppLink} />\n }\n {hasLoaded && !hasVideoViews && <VideoViewsTableEmptyState />}\n </div>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"mtBAMM,EAAmB,EAAM,YAAY,CACzC,WACA,YAEA,GAAI,EAAY,MAChB,GAAG,GACF,IAAQ,CACT,IAAM,EAAoB,EAAmB,EAAU,MAAM,CACvD,EAAc,GAAyB,CACvC,EAAgB,GAA2B,CAC3C,EAAa,GAAG,EAAkB,OAClC,EAAU,EAAE,CAelB,OAdA,EAAY,QAAQ,GAAY,CAC9B,IAAM,EAAY,EAAM,GACxB,OAAO,EAAM,GACb,IAAI,EACqB,OAAO,GAAc,UAA1C,EACD,SAEG,EAEJ,EAAO,EAET,IAAM,EAAQ,IAAa,EAAiC,GAAjB,IAAI,IAC3C,GAAQ,MAAM,EAAQ,KAAK,GAAG,IAAa,EAAM,GAAG,IAAO,EAC/D,EACkB,EAAA,EAAA,KAAK,EAAW,CAC7B,MACL,GAAG,EACH,WAAA,EAAA,EAAA,SAAsB,EAAW,EAAmB,GAAG,EAAO,CAC/D,CAAC,EACF,CACF,EAAI,YAAc,+rBEjCZ,GACJ,EAAA,EAAA,MAAC,EAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,6DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,gBAAmB,CAAA,CACpE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,mBAAsB,CAAA,CACvE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,IAIJ,GACJ,EAAA,EAAA,MAAC,EAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,mCAAmC,EAAO,mBAAsB,CAAA,CAC5E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,IAIJ,GACJ,EAAA,EAAA,MAAC,EAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,mBACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,mCAAmC,EAAO,mBAAsB,CAAA,CAC5E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,0CACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,mCAAmC,EAAO,mBAAsB,CAAA,CAC5E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,0CACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,mBAAsB,CAAA,CACvE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,2CACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,sCAAsC,EAAO,qBAAqB,GAAG,EAAO,mBAAsB,CAAA,CAC9G,CAAA,IAIV,SAAS,EAAgB,EAAoB,CAC3C,OAAQ,EAAR,CACE,IAAK,cACH,MAAO,CACL,gBAAiB,EACjB,WAAY,EAAO,WACpB,CAEH,IAAK,eACH,MAAO,CACL,gBAAiB,EACjB,WAAY,EAAO,iBACpB,CAEH,IAAK,mBACH,MAAO,CACL,gBAAiB,EACjB,WAAY,EAAO,UACpB,CAEH,QACE,MAAO,CACL,iBAAiB,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,CACtB,WAAY,GACb,EAYP,SAAgB,EAAa,EAAgE,CAC3F,GAAM,CAAE,kBAAiB,cAAe,EAAgB,EAAM,QAAQ,CAEtE,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,oBAAoB,EAAW,GAAG,EAAM,WAAa,cAArE,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,iBAAiB,EAAO,OAAO,GAAG,EAAM,iBAAmB,cACxE,EACG,CAAA,CACL,EAAM,SAAA,GC7Fb,SAAS,GAAyB,CAChC,OACE,EAAA,EAAA,MAAC,EAAD,CAAK,UAAW,QAAQ,EAAO,8BAA/B,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,6DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,gBAAmB,CAAA,CACpE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oBACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,sCAAsC,EAAO,mBAAsB,CAAA,CAC/E,CAAA,CACF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,oCAAoC,EAAO,kBAAqB,CAAA,CAC5E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,mBAAsB,CAAA,CACpF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,gBAAmB,CAAA,CACjF,CAAA,IAKZ,SAAS,GAA+B,CACtC,OACE,EAAA,EAAA,MAAC,EAAD,CAAK,UAAW,QAAQ,EAAO,oCAA/B,EACE,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,6DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,gBAAmB,CAAA,CACpE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,oBACb,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,sCAAsC,EAAO,mBAAsB,CAAA,CAC/E,CAAA,CACF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,oCAAoC,EAAO,oBAAuB,CAAA,CAC9E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,gBAAmB,CAAA,CACjF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,oBAAuB,CAAA,CACrF,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,2CAA2C,EAAO,gBAAmB,CAAA,CACjF,CAAA,IAKZ,SAAS,GAAkC,CACzC,OACE,EAAA,EAAA,MAAC,EAAD,CAAK,UAAW,QAAQ,EAAO,6BAA/B,EACE,EAAA,EAAA,MAAC,EAAD,CAAK,GAAI,EAAG,UAAU,sCAAtB,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,mCAAmC,EAAO,gBAAmB,CAAA,EAC7E,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,mCAAmC,EAAO,mBAAsB,CAAA,CAAA,IAElF,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,6DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,sCAAsC,EAAO,mBAAsB,CAAA,CAC/E,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,6DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,mBAAsB,CAAA,CACvE,CAAA,EACN,EAAA,EAAA,KAAC,EAAD,CAAK,GAAI,EAAG,UAAU,8DACpB,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,8BAA8B,EAAO,qBAAqB,GAAG,EAAO,iBAAoB,CAAA,CACpG,CAAA,IAKZ,SAAS,EAAe,EAAoB,EAA0B,CACpE,OAAQ,EAAR,CACE,IAAK,cACH,OAAO,EAAA,EAAA,KAAC,EAAD,EAAuB,CAAP,EAAO,CAEhC,IAAK,eACH,OAAO,EAAA,EAAA,KAAC,EAAD,EAA6B,CAAP,EAAO,CAEtC,IAAK,mBACH,OAAO,EAAA,EAAA,KAAC,EAAD,EAAgC,CAAP,EAAO,CAEzC,QACE,OAAO,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,EASlB,EAAoB,aAAe,CACjC,UAAW,EACZ,CAED,SAAgB,EAAoB,EAA8C,CAChF,OACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,gBACZ,MAAM,EAAM,UAAU,CAAC,KAAK,KAAK,CAAC,KAAK,EAAG,IAAM,EAAe,EAAM,QAAS,EAAE,CAAA,CAC7E,CAAA,CClGV,IAAM,EAAY,EAAgB,iBADhB,0CAC2C,CAE7D,SAAgB,GAAyC,CACvD,OACE,EAAA,EAAA,MAAC,EAAD,CAAY,UAAU,wDAAtB,EACE,EAAA,EAAA,KAAC,EAAW,MAAZ,CACE,IAAK,EAAU,YAAY,OAAO,UAClC,UAAU,cACV,CAAA,EACF,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SACG,EAAU,UAAU,CACF,CAAA,EACrB,EAAA,EAAA,KAAC,EAAW,KAAZ,CAAA,SACG,EAAU,cAAc,CACT,CAAA,CACP,wHEHX,EAAY,EAAgB,iBADhB,gCAC2C,CAEvD,EAAoB,CACxB,MAAO,mBACP,OAAQ,gBACR,WAAY,MACZ,IAAK,EAAO,IACZ,KAAM,MACP,CAEY,EAA8B,CACzC,CACE,YACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sCAA6B,IAEtC,CAAA,CAER,SAAU,SACV,GAAI,QACJ,MAAO,CAAE,IAAK,CAAE,aACd,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,+DACZ,EAAQ,EACL,CAAA,CAER,MAAO,EACP,cAAe,GAChB,CACD,CACE,OAAS,IACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,EAAO,gBACrB,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CAAG,EAAU,QAAQ,CAAC,IAAE,EAAM,qBAAA,CAAyB,CAAA,CAAA,CACnD,CAAA,CAER,SAAU,SACV,GAAI,QACJ,MAAO,CAAE,YACP,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EACP,aAAc,CAAE,KAAM,EAAU,MAAO,CACvC,aAAc,EAAsB,YACpC,KAAK,WACL,SAAA,GACA,aAAc,EAAO,UACrB,iBAAA,GACA,KAAK,KACL,CAAA,CAEJ,MAAO,GACP,kBAAmB,GACnB,UAAW,EAAqB,IACvB,EAAK,SAAS,OAAO,MAAM,aAAa,CAAG,EAAK,SAAS,OAAO,MAAM,aAAa,CAAG,EAAI,GAEpG,CACD,CACE,SAAU,SACV,GAAI,OACJ,MAAO,CAAE,YACP,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,2DAAf,CACG,EAAY,YAAY,EAAM,GAC7B,EAAA,EAAA,KAAC,EAAD,CACE,KAAK,SACL,MAAO,EACP,iBAAkB,KAClB,UAAU,mBACV,CAAA,EAEJ,EAAA,EAAA,KAAC,OAAD,CAAM,UAAU,yBAAiB,EAAM,KAAY,CAAA,CAAA,GAGvD,MAAO,GACP,cAAe,GAChB,CACD,CACE,YAAc,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SAAG,EAAU,cAAc,CAAI,CAAA,CAC7C,SAAU,cACV,MAAO,CAAE,YACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2CACZ,EACG,CAAA,CAER,MAAO,GACR,CACD,CACE,YAAc,EAAA,EAAA,KAAA,EAAA,SAAA,CAAA,SAAG,EAAU,QAAQ,CAAI,CAAA,CACvC,SAAU,gBACV,MAAO,CAAE,YACP,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,2CACZ,EACG,CAAA,CAER,MAAO,GACR,CACD,CACE,SAAU,SACV,GAAI,eACJ,UACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAW,GAAG,EAAO,YAAY,8CACnC,EAAU,eAAA,CACP,CAAA,CAER,MAAO,GACP,cAAe,IAElB,CAOD,SAAgB,EAAgB,EAAiD,CAC/E,IAAM,EAAoB,GAA2B,CAErD,SAAS,EAAc,EAAkC,CACvD,OAAO,EAAM,gBAAgB,EAAI,SAAS,OAAQ,EAAkB,CAGtE,OACE,EAAA,EAAA,KAAC,EAAD,CACE,QAAS,EACT,KAAM,EAAM,OACL,QACQ,gBACf,WAAA,GACA,CAAA,CCzHN,IAAM,EAAY,EAAgB,iBADhB,oCAC2C,CAEvD,EAAQ,IAEd,SAAgB,GAAmC,CACjD,IAAM,EAAgB,EAAoB,cAAc,CAElD,EAAa,EAAmC,EAAqB,WAAW,EAAO,EAAc,CAAC,CAEtG,EAAS,EACb,EAAW,MAAM,IAAI,GAAK,EAAE,SAAS,EAAI,EAAE,CAC3C,EAAc,OACf,CAED,EAAqB,EAAW,CAEhC,EAAmB,CAAE,MAAO,EAAU,SAAS,CAAE,CAAC,CAClD,EAAkB,EAAU,SAAS,CAAC,CAEtC,IAAM,EACJ,EAAW,cACX,CAAC,EAAO,WAGJ,EAAgB,CAAC,CAAC,EAAO,UAAU,OAEnC,EAAe,EAAW,MAAM,IAAc,GAAa,CAC/D,IAAM,EAAQ,EAAO,QAAQ,GAAW,UAKxC,OAHK,EAGE,CACL,MAAO,EAAU,MACjB,OAAQ,EACR,YAAa,EAAU,YACvB,cAAe,EAAU,cAC1B,CAPQ,MAQT,CAAC,OAAO,GAAK,CAAC,CAAC,EAAE,CAEnB,OACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAmB,CAAA,CAClB,CAAC,IACA,EAAA,EAAA,KAAC,EAAD,CAAc,QAAQ,wBACpB,EAAA,EAAA,KAAC,EAAD,CAAqB,QAAQ,cAAgB,CAAA,CAChC,CAAA,CAEhB,GAAa,IACZ,EAAA,EAAA,KAAC,EAAD,CAAiB,OAAQ,EAAc,gBAAiB,EAAyB,CAAA,CAElF,GAAa,CAAC,IAAiB,EAAA,EAAA,KAAC,EAAD,EAA6B,CAAA,CACzD"}
1
+ {"version":3,"file":"CKRKdk5U.chunk.js","names":[],"sources":["../../../../../node_modules/react-bootstrap/esm/Row.js","../../src/shared/components/partial-loading/partial-loading.module.scss","../../src/shared/components/partial-loading/PartialTable.tsx","../../src/shared/components/partial-loading/PartialTableContent.tsx","../../src/apps/videos/components/video-views-table/video-views-table-empty-state/VideoViewsTableEmptyState.tsx","../../src/apps/videos/components/video-views-table/video-views-table.module.scss","../../src/apps/videos/components/video-views-table/VideoViewsTable.tsx","../../src/apps/videos/views/school-top-videos/SchoolTopVideosView.tsx"],"sourcesContent":["\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;",":local {\n // Table styles\n\n .videoTable {\n height: 62rem;\n }\n\n .interactiveTable {\n height: 57rem;\n }\n\n .userTable {\n height: 14rem;\n }\n\n .header {\n height: 3.825rem\n }\n\n .itemHeader {\n height: 3.825rem\n }\n\n // Item styles\n\n .videoItemContainer {\n height: 8.125rem;\n }\n\n .interactiveItemContainer {\n height: 7.375rem;\n }\n\n .userItemContainer {\n height: 2.5625rem;\n }\n\n .heatMapItemContainer {\n margin-left: 6rem;\n }\n\n .partialAvatar {\n width: $avatar-width;\n height: $avatar-width;\n border-radius: 50%;\n }\n\n .partialNumber {\n width: 2rem;\n height: 1.1rem;\n }\n\n .partialLongText {\n width: 16rem;\n height: 1.1rem;\n }\n\n .partialMediumText {\n width: 10rem;\n height: 1.1rem;\n }\n\n .partialShortText {\n width: 5rem;\n height: 1.1rem;\n }\n\n .partialThumbnail {\n width: 10rem;\n padding-bottom: 56.25%;\n }\n\n .partialHeatMap {\n width: 34rem;\n height: 1.1rem;\n }\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './partial-loading.module.scss';\n\nconst VideoViewsHeader = (\n <Row className='py-3'>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={5} className='d-flex align-items-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center' >\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={4} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nconst InteractivesHeader = (\n <Row className='py-3'>\n <Col xs={5} className='d-flex align-items-center'>\n <div className={`partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center' >\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nconst EngagementUsersHeader = (\n <Row className='py-3'>\n <Col xs={2} className='d-flex'>\n <div className={`partial-loading-background mx-3 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center'>\n <div className={`partial-loading-background mx-2 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={6} className='d-flex justify-content-between'>\n <div className={`d-block partial-loading-background ${styles.heatMapItemContainer} ${styles.partialShortText}`} />\n </Col>\n </Row>\n);\n\nfunction getTableVariant(type: TableVariant) {\n switch (type) {\n case 'video-views':\n return {\n headerComponent: VideoViewsHeader,\n tableStyle: styles.videoTable\n };\n\n case 'interactives':\n return {\n headerComponent: InteractivesHeader,\n tableStyle: styles.interactiveTable\n };\n\n case 'engagement-users':\n return {\n headerComponent: EngagementUsersHeader,\n tableStyle: styles.userTable\n };\n\n default:\n return {\n headerComponent: <></>,\n tableStyle: ''\n };\n }\n}\n\nexport type TableVariant = 'video-views' | 'interactives' | 'engagement-users';\n\ninterface PartialTableProps {\n variant?: TableVariant;\n className?: string;\n headerClassName?: string;\n}\n\nexport function PartialTable(props: React.PropsWithChildren<PartialTableProps>): JSX.Element {\n const { headerComponent, tableStyle } = getTableVariant(props.variant);\n\n return (\n <div className={`bg-white rounded ${tableStyle} ${props.className ?? ''}`}>\n <div className={`border-bottom ${styles.header} ${props.headerClassName ?? ''}`}>\n {headerComponent}\n </div>\n {props.children}\n </div>\n );\n}\n","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { TableVariant } from 'shared/components/partial-loading/PartialTable';\n\nimport styles from './partial-loading.module.scss';\n\nfunction VideoItem(): JSX.Element {\n return (\n <Row className={`py-1 ${styles.videoItemContainer}`}>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className='d-block'>\n <div className={`partial-loading-background rounded ${styles.partialThumbnail}`} />\n </div>\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`partial-loading-background ms-n2 ${styles.partialLongText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialShortText}`} />\n </Col>\n <Col xs={4} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialNumber}`} />\n </Col>\n </Row>\n );\n}\n\nfunction InteractiveItem(): JSX.Element {\n return (\n <Row className={`py-1 ${styles.interactiveItemContainer}`}>\n <Col xs={1} className='d-flex align-items-center justify-content-center'>\n <div className={`partial-loading-background ${styles.partialNumber}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className='d-block'>\n <div className={`partial-loading-background rounded ${styles.partialThumbnail}`} />\n </div>\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`partial-loading-background ms-n2 ${styles.partialMediumText}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialAvatar}`} />\n </Col>\n <Col xs={2} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialMediumText}`} />\n </Col>\n <Col xs={3} className='d-flex align-items-center'>\n <div className={`d-block partial-loading-background mx-4 ${styles.partialNumber}`} />\n </Col>\n </Row>\n );\n}\n\nfunction EngagementUserItem(): JSX.Element {\n return (\n <Row className={`my-2 ${styles.userItemContainer}`}>\n <Col xs={2} className='d-flex align-items-center '>\n <div className={`partial-loading-background ms-3 ${styles.partialAvatar}`} />\n <div className={`partial-loading-background mx-2 ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center align-items-center'>\n <div className={`d-block partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={2} className='d-flex justify-content-center align-items-center'>\n <div className={`partial-loading-background ${styles.partialShortText}`} />\n </Col>\n <Col xs={6} className='d-flex justify-content-between align-items-center'>\n <div className={`partial-loading-background ${styles.heatMapItemContainer} ${styles.partialHeatMap}`} />\n </Col>\n </Row>\n );\n}\n\nfunction getPartialItem(type: TableVariant, key: number): JSX.Element {\n switch (type) {\n case 'video-views':\n return <VideoItem key={key} />;\n\n case 'interactives':\n return <InteractiveItem key={key} />;\n\n case 'engagement-users':\n return <EngagementUserItem key={key} />;\n\n default:\n return <></>;\n }\n}\n\ninterface PartialTableContentProps {\n variant: TableVariant;\n itemCount?: number;\n}\n\nPartialTableContent.defaultProps = {\n itemCount: 7\n};\n\nexport function PartialTableContent(props: PartialTableContentProps): JSX.Element {\n return (\n <div className='my-1'>\n {Array(props.itemCount).fill(null).map((_, i) => getPartialItem(props.variant, i))}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ReportsImageUrls';\n\nconst namespace = 'reportsVideos.videoViewsTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function VideoViewsTableEmptyState(): JSX.Element {\n return (\n <EmptyState className='bg-white rounded justify-content-center py-5'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.ViewCount}\n className='w-25 h-auto'\n />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>\n {getPhrase('description')}\n </EmptyState.Info>\n </EmptyState>\n );\n}\n",":local {\n .title,\n .thumbnail {\n min-width: 8rem;\n max-width: 10rem;\n margin-left: auto; \n margin-right: 0;\n }\n\n .seeOverview {\n display: none;\n }\n\n .row:hover {\n background-color: $light-blue;\n text-decoration: none;\n\n .seeOverview {\n display: flex;\n }\n }\n}","import React from 'react';\nimport { Row } from 'react-table';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\nimport { Column, HeaderProps, Table, TableTheme } from 'libs/shared/components/table/Table';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\nimport { TopVideo } from 'shared/interfaces';\n\nimport styles from './video-views-table.module.scss';\n\nconst namespace = 'reportsVideos.videoViewsTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst theme: TableTheme = {\n table: 'bg-white rounded',\n header: 'border-bottom',\n headerCell: 'p-3',\n row: styles.row,\n cell: 'p-3'\n};\n\nexport const COLUMNS: Column<TopVideo>[] = [\n {\n Header: () => (\n <div className='d-flex justify-content-end'>\n #\n </div>\n ),\n accessor: 'object',\n id: 'index',\n Cell: ({ row: { index } }) => (\n <div className='d-flex align-items-center justify-content-end h-100'>\n {index + 1}\n </div>\n ),\n width: 5,\n disableSortBy: true\n },\n {\n Header: (props: HeaderProps<TopVideo>) => (\n <div className={styles.title}>\n <>{getPhrase('title')} {props.renderSortIndicator()}</>\n </div>\n ),\n accessor: 'object',\n id: 'image',\n Cell: ({ value }) => (\n <VideoThumbnail\n video={value}\n imageOptions={{ size: ImageSize.Small }}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n extraClasses={styles.thumbnail}\n newDurationStyle\n size='sm'\n />\n ),\n width: 30,\n hideSortIndicator: true,\n sortType: (rowA: Row<TopVideo>, rowB: Row<TopVideo>) => {\n return rowA.original.object.name?.toLowerCase() > rowB.original.object.name?.toLowerCase() ? 1 : -1;\n }\n },\n {\n accessor: 'object',\n id: 'name',\n Cell: ({ value }) => (\n <div className='d-flex flex-column justify-content-center h-100'>\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n analyticsOptions={null}\n className='d-inline clamp-1'\n />\n )}\n <span className='text-truncate'>{value.name}</span>\n </div>\n ),\n width: 60,\n disableSortBy: true\n },\n {\n Header: () => <>{getPhrase('contentType')}</>,\n accessor: 'contentType',\n Cell: ({ value }) => (\n <div className='d-flex align-items-center h-100'>\n {value}\n </div>\n ),\n width: 30\n },\n {\n Header: () => <>{getPhrase('views')}</>,\n accessor: 'combinedCount',\n Cell: ({ value }) => (\n <div className='d-flex align-items-center h-100'>\n {value}\n </div>\n ),\n width: 30\n },\n {\n accessor: 'object',\n id: 'see-overview',\n Cell: () => (\n <div className={`${styles.seeOverview} align-items-center h-100 text-info`}>\n {getPhrase('seeAnalytics')}\n </div>\n ),\n width: 25,\n disableSortBy: true\n }\n];\n\ninterface VideoViewsByVideoTableProps {\n videos: TopVideo[];\n getVideoAppLink: (object: VideoTypes, filterQueryParams: FilterQueryParams) => Core.AppLink;\n}\n\nexport function VideoViewsTable(props: VideoViewsByVideoTableProps): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n function getRowAppLink(row: Row<TopVideo>): Core.AppLink {\n return props.getVideoAppLink(row.original.object, filterQueryParams);\n }\n\n return (\n <Table\n columns={COLUMNS}\n data={props.videos}\n theme={theme}\n getRowAppLink={getRowAppLink}\n enableSort\n />\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { PartialTable } from 'shared/components/partial-loading/PartialTable';\nimport { PartialTableContent } from 'shared/components/partial-loading/PartialTableContent';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { useSetHeaderTitle } from 'shared/hooks/UseSetHeaderTitle';\nimport { TopVideo, TopVideoV2 } from 'shared/interfaces';\nimport { getSchoolVideoAppLink } from 'shared/utils/ReportsAppLinkUtils';\n\nimport { SchoolVideosNav } from 'apps/videos/components/school-videos-nav/SchoolVideosNav';\nimport { VideoViewsTableEmptyState } from 'apps/videos/components/video-views-table/video-views-table-empty-state/VideoViewsTableEmptyState';\nimport { VideoViewsTable } from 'apps/videos/components/video-views-table/VideoViewsTable';\n\nconst namespace = 'reportsVideos.schoolTopVideosView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIMIT = 100;\n\nexport function SchoolTopVideosView(): JSX.Element {\n const requestFilter = useGetRequestFilter('video-views');\n\n const topStreams = Flight.useBasicFetch<TopVideoV2[]>(VideoViewsV2Requests.topStreams(LIMIT, requestFilter));\n\n const videos = useBatchFetch<VideoTypes>(\n topStreams.data?.map(v => v.objectId) ?? [],\n VideoRequests.videos\n );\n\n useHandleObjectError(topStreams);\n\n useSetPageMetadata({ title: getPhrase('videos') });\n useSetHeaderTitle(getPhrase('videos'));\n\n const hasLoaded = (\n topStreams.hasCompleted &&\n !videos.isFetching\n );\n\n const hasVideoViews = !!videos.itemsArr?.length;\n \n const mappedVideos = topStreams.data?.map<TopVideo>(topStream => {\n const video = videos.items?.[topStream?.objectId];\n\n if (!video)\n return null;\n\n return {\n count: topStream.count,\n object: video,\n contentType: topStream.contentType,\n combinedCount: topStream.combinedCount\n };\n }).filter(v => !!v);\n\n return (\n <div className='pb-3'>\n <SchoolVideosNav />\n {!hasLoaded &&\n <PartialTable variant='video-views'>\n <PartialTableContent variant='video-views' />\n </PartialTable>\n }\n {hasLoaded && hasVideoViews &&\n <VideoViewsTable videos={mappedVideos} getVideoAppLink={getSchoolVideoAppLink} />\n }\n {hasLoaded && !hasVideoViews && <VideoViewsTableEmptyState />}\n </div>\n );\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import{Jn as e,N as t,P as n,nn as r,st as i}from"./CM0wW4AE.chunk.js";import{r as a,v as o,y as s}from"./B01-hGyk.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{n as l,r as u}from"./H5KLIhR_.chunk.js";import{L as d,et as f,n as p}from"./app-eLOi12JS.js";import{n as m,t as h}from"./BPMB_v0s2.chunk.js";var g={pillTabSelector:`_pillTabSelector_a6f6x_1`,tab:`_tab_a6f6x_4`,minWidth:`_minWidth_a6f6x_21`,radiusSmall:`_radiusSmall_a6f6x_24`,tabLink:`_tabLink_a6f6x_35`},_=e(i()),v=n();function y(e){return(0,v.jsxs)(v.Fragment,{children:[!!e.tab.svg&&(0,v.jsx)(`div`,{className:e.tab.name?`pe-1`:``,children:(0,v.jsx)(a,{svg:e.tab.svg,size:e.tab.svgSize})}),e.formatDisplayText?.(e.tab.name)??e.tab.name,typeof e.tab.count==`number`&&(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:m.Count,data:e.tab.count})})]})}function b(e){let{borderRadius:n=`lg`}=e,i=d();function a(e){e.analyticsData&&e.analyticsOptions&&t.logUserAction(e.analyticsData,e.analyticsOptions)}function c(e){e.active||!e.onSelect||(e.onSelect(),a(e))}function l(t){let n=t.target.value,i=e.tabs.find(e=>e.name===n);!i||i.active||(a(i),r.trigger(i.appLink))}let u=e.tabs.find(e=>e.active),f=e.forceSmallScreenDropdown||e.enableSmallScreenSupport&&(i.sm||i.xs);return(0,v.jsxs)(`nav`,{className:e.className??``,children:[f&&(0,v.jsx)(`select`,{className:`form-select`,onChange:l,value:u?.name,style:{minWidth:`150px`},children:e.tabs.map((t,n)=>t.hide?(0,v.jsx)(_.Fragment,{},n):(0,v.jsx)(`option`,{value:t.name,children:e.formatDisplayText?.(t.name)??t.name},n))}),!f&&(0,v.jsx)(`ul`,{className:`
1
+ import{Jn as e,N as t,P as n,nn as r,st as i}from"./CM0wW4AE.chunk.js";import{r as a,v as o,y as s}from"./B01-hGyk.chunk.js";import{t as c}from"./I5Dnl_eN.chunk.js";import{n as l,r as u}from"./H5KLIhR_.chunk.js";import{L as d,et as f,n as p}from"./app-BigOHyYp.js";import{n as m,t as h}from"./3EzrYsbw2.chunk.js";var g={pillTabSelector:`_pillTabSelector_a6f6x_1`,tab:`_tab_a6f6x_4`,minWidth:`_minWidth_a6f6x_21`,radiusSmall:`_radiusSmall_a6f6x_24`,tabLink:`_tabLink_a6f6x_35`},_=e(i()),v=n();function y(e){return(0,v.jsxs)(v.Fragment,{children:[!!e.tab.svg&&(0,v.jsx)(`div`,{className:e.tab.name?`pe-1`:``,children:(0,v.jsx)(a,{svg:e.tab.svg,size:e.tab.svgSize})}),e.formatDisplayText?.(e.tab.name)??e.tab.name,typeof e.tab.count==`number`&&(0,v.jsx)(`div`,{className:`ps-2`,children:(0,v.jsx)(h,{type:m.Count,data:e.tab.count})})]})}function b(e){let{borderRadius:n=`lg`}=e,i=d();function a(e){e.analyticsData&&e.analyticsOptions&&t.logUserAction(e.analyticsData,e.analyticsOptions)}function c(e){e.active||!e.onSelect||(e.onSelect(),a(e))}function l(t){let n=t.target.value,i=e.tabs.find(e=>e.name===n);!i||i.active||(a(i),r.trigger(i.appLink))}let u=e.tabs.find(e=>e.active),f=e.forceSmallScreenDropdown||e.enableSmallScreenSupport&&(i.sm||i.xs);return(0,v.jsxs)(`nav`,{className:e.className??``,children:[f&&(0,v.jsx)(`select`,{className:`form-select`,onChange:l,value:u?.name,style:{minWidth:`150px`},children:e.tabs.map((t,n)=>t.hide?(0,v.jsx)(_.Fragment,{},n):(0,v.jsx)(`option`,{value:t.name,children:e.formatDisplayText?.(t.name)??t.name},n))}),!f&&(0,v.jsx)(`ul`,{className:`
2
2
  list-unstyled d-inline-block m-0 ${g.pillTabSelector}
3
3
  ${n?g.radiusSmall:``}
4
4
  ${e.listClassName}
@@ -12,4 +12,4 @@ import{Jn as e,N as t,P as n,nn as r,st as i}from"./CM0wW4AE.chunk.js";import{r
12
12
  cursor-pointer d-flex align-items-center justify-content-center
13
13
  text-decoration-none text-reset px-2 text-nowrap ${g.tabLink}
14
14
  `,onClick:()=>c(t),children:(0,v.jsx)(y,{tab:t,formatDisplayText:e.formatDisplayText})})},n))})]})}function x(e){return(0,v.jsx)(b,{className:`pb-3`,tabs:e.items.map(e=>({name:e.label,onSelect:()=>r.trigger(e.appLink),active:e.appLink.action===f.getCurrentRoute()?.appLink?.action}))})}var S=c.encloseNamespace(`reportsVideos.schoolVideosNav`);function C(e){return[{label:S(`overview`),appLink:{application:u.VIDEOS,action:l.Videos.HOME,params:e}},{label:S(`views`),appLink:{application:u.VIDEOS,action:l.Videos.TOP_VIDEOS,params:e}}]}function w(){return(0,v.jsx)(x,{items:C(p())})}export{w as t};
15
- //# sourceMappingURL=Dh8AAJA8.chunk.js.map
15
+ //# sourceMappingURL=CKVaLGJC.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dh8AAJA8.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/pill-tab-selector/pill-tab-selector.module.scss","../../../../libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","../../src/shared/components/sub-nav/SubNav.tsx","../../src/apps/videos/components/school-videos-nav/SchoolVideosNav.tsx"],"sourcesContent":[":local {\n $pill-tab-min-width: 7rem;\n\n .pillTabSelector {\n border-radius: $border-radius-lg;\n\n .tab {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n\n &:last-child {\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n\n &:not(:first-child) {\n border-left: none;\n }\n\n &:not(:last-child) {\n border-right: none;\n }\n\n &.minWidth {\n min-width: $pill-tab-min-width;\n }\n }\n\n &.radiusSmall {\n border-radius: $border-radius;\n\n li {\n &:first-child {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n \n &:last-child {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n .tabLink {\n padding-top: $input-btn-padding-y;\n padding-bottom: $input-btn-padding-y;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.module.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n formatDisplayText?: (name: string) => string;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svg && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svg={props.tab.svg} size={props.tab.svgSize} />\n </div>\n )}\n\n {props.formatDisplayText?.(props.tab.name) ?? props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svg?: SvgIcon;\n svgSize?: SvgContainerSize;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n\n hide?: boolean;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg';\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n const { borderRadius = 'lg' } = props;\n \n const breakpoints = useBreakpoints();\n \n function logAnalytics(tab: PillTab): void {\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n \n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n logAnalytics(tab);\n }\n\n function onChangeSelect(event: React.ChangeEvent<HTMLSelectElement>): void {\n const value = event.target.value;\n const tab = props.tabs.find(tab => tab.name === value);\n if (!tab || tab.active)\n return;\n \n logAnalytics(tab);\n AppLinkHelper.trigger(tab.appLink);\n }\n\n const selectedTab = props.tabs.find(tab => tab.active);\n const showSelectDropdown = props.forceSmallScreenDropdown\n || (props.enableSmallScreenSupport && (breakpoints.sm || breakpoints.xs));\n\n return (\n <nav className={props.className ?? ''}>\n {showSelectDropdown && (\n <select className='form-select' onChange={onChangeSelect} value={selectedTab?.name} style={{ minWidth: '150px' }}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n\n return (\n <option\n key={index}\n value={tab.name}>\n {props.formatDisplayText?.(tab.name) ?? tab.name}\n </option>\n );\n })}\n </select>\n )}\n \n {!showSelectDropdown && (\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n \n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\nexport interface SubNavItem {\n label: string;\n appLink: Core.AppLink;\n}\n\ninterface SubNavProps {\n items: SubNavItem[];\n}\n\nexport function SubNav(props: SubNavProps): JSX.Element {\n const tabs: PillTab[] = props.items.map(i => ({\n name: i.label,\n onSelect: () => Core.AppLinkHelper.trigger(i.appLink),\n active: i.appLink.action === ContextService.getCurrentRoute()?.appLink?.action\n }));\n\n return <PillTabSelector className='pb-3' tabs={tabs} />;\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.schoolVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.TOP_VIDEOS, params }\n }\n ];\n}\n\nexport function SchoolVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CKVaLGJC.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/pill-tab-selector/pill-tab-selector.module.scss","../../../../libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","../../src/shared/components/sub-nav/SubNav.tsx","../../src/apps/videos/components/school-videos-nav/SchoolVideosNav.tsx"],"sourcesContent":[":local {\n $pill-tab-min-width: 7rem;\n\n .pillTabSelector {\n border-radius: $border-radius-lg;\n\n .tab {\n border-radius: 0;\n\n &:first-child {\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n }\n\n &:last-child {\n border-top-right-radius: $border-radius-lg;\n border-bottom-right-radius: $border-radius-lg;\n }\n\n &:not(:first-child) {\n border-left: none;\n }\n\n &:not(:last-child) {\n border-right: none;\n }\n\n &.minWidth {\n min-width: $pill-tab-min-width;\n }\n }\n\n &.radiusSmall {\n border-radius: $border-radius;\n\n li {\n &:first-child {\n border-top-left-radius: $border-radius;\n border-bottom-left-radius: $border-radius;\n }\n \n &:last-child {\n border-top-right-radius: $border-radius;\n border-bottom-right-radius: $border-radius;\n }\n }\n }\n\n .tabLink {\n padding-top: $input-btn-padding-y;\n padding-bottom: $input-btn-padding-y;\n }\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.module.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n formatDisplayText?: (name: string) => string;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svg && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svg={props.tab.svg} size={props.tab.svgSize} />\n </div>\n )}\n\n {props.formatDisplayText?.(props.tab.name) ?? props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svg?: SvgIcon;\n svgSize?: SvgContainerSize;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n\n hide?: boolean;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg';\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n const { borderRadius = 'lg' } = props;\n \n const breakpoints = useBreakpoints();\n \n function logAnalytics(tab: PillTab): void {\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n \n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n logAnalytics(tab);\n }\n\n function onChangeSelect(event: React.ChangeEvent<HTMLSelectElement>): void {\n const value = event.target.value;\n const tab = props.tabs.find(tab => tab.name === value);\n if (!tab || tab.active)\n return;\n \n logAnalytics(tab);\n AppLinkHelper.trigger(tab.appLink);\n }\n\n const selectedTab = props.tabs.find(tab => tab.active);\n const showSelectDropdown = props.forceSmallScreenDropdown\n || (props.enableSmallScreenSupport && (breakpoints.sm || breakpoints.xs));\n\n return (\n <nav className={props.className ?? ''}>\n {showSelectDropdown && (\n <select className='form-select' onChange={onChangeSelect} value={selectedTab?.name} style={{ minWidth: '150px' }}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n\n return (\n <option\n key={index}\n value={tab.name}>\n {props.formatDisplayText?.(tab.name) ?? tab.name}\n </option>\n );\n })}\n </select>\n )}\n \n {!showSelectDropdown && (\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n if (tab.hide)\n return <React.Fragment key={index}/>;\n \n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} formatDisplayText={props.formatDisplayText} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n )}\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\nexport interface SubNavItem {\n label: string;\n appLink: Core.AppLink;\n}\n\ninterface SubNavProps {\n items: SubNavItem[];\n}\n\nexport function SubNav(props: SubNavProps): JSX.Element {\n const tabs: PillTab[] = props.items.map(i => ({\n name: i.label,\n onSelect: () => Core.AppLinkHelper.trigger(i.appLink),\n active: i.appLink.action === ContextService.getCurrentRoute()?.appLink?.action\n }));\n\n return <PillTabSelector className='pb-3' tabs={tabs} />;\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FilterQueryParams } from 'libs/shared/apps/analytics/interfaces/FilterQueryParams';\n\nimport { SubNav, SubNavItem } from 'shared/components/sub-nav/SubNav';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { useGetAppLinkFilterParams } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsVideos.schoolVideosNav';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getNavItems(params: FilterQueryParams): SubNavItem[] {\n return [\n {\n label: getPhrase('overview'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.HOME, params }\n },\n {\n label: getPhrase('views'),\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.TOP_VIDEOS, params }\n }\n ];\n}\n\nexport function SchoolVideosNav(): JSX.Element {\n const filterQueryParams = useGetAppLinkFilterParams();\n\n const navItems = getNavItems(filterQueryParams);\n\n return (\n <SubNav items={navItems} />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{P as e,nn as t,st as n}from"./CM0wW4AE.chunk.js";import{v as r}from"./B01-hGyk.chunk.js";import{d as i,n as a}from"./dUFTODMz.chunk.js";import{t as o}from"./CjM_tQvd.chunk.js";import{r as s,t as c}from"./NaTUzw6f.chunk.js";import{t as l}from"./I5Dnl_eN.chunk.js";import{n as u,r as d,t as f}from"./H5KLIhR_.chunk.js";import{t as p}from"./DIAxWspB.chunk.js";import{r as m}from"./app-eLOi12JS.js";import{t as h}from"./Cu7qiGbY2.chunk.js";import{i as g,n as _,o as v,r as y,s as b,t as x}from"./DirX37xL2.chunk.js";var S={image:`_image_1a110_1`};n();var C=e(),w=l.encloseNamespace(`shared.streamsBarChartCardEmptyState`);function T(){return(0,C.jsxs)(p,{className:`flex-grow-1 justify-content-center`,children:[(0,C.jsx)(p.Image,{src:f.EmptyStates.Shared.BagQuestionOrange,className:S.image}),(0,C.jsx)(p.Heading,{className:`h6`,children:w(`heading`)}),(0,C.jsx)(p.Info,{className:`w-100`,children:w(`description`)})]})}var E=c(),D=`shared.streamsBarChartCard`,O=l.encloseNamespace(D);function k(e){let n=m(`video-views`),o=_(i(e.videoId?h.videoAggregation(e.videoId,e.type,n):h.aggregation(e.type,n)).data,y(e.type)),s=o?.reduce((e,t)=>e+t.y,0);return(0,C.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,C.jsx)(`h2`,{className:`h6 mb-1`,children:(0,C.jsx)(a,{namespace:D,phrase:`totalViews`,options:{views:s}})}),e.appLink&&e.appLinkText&&(0,C.jsx)(r,{appLink:e.appLink,className:`text-info`,children:e.appLinkText})]}),o.length?(0,C.jsx)(E.Scrollbars,{className:`position-relative`,children:(0,C.jsx)(`div`,{className:`position-absolute w-100 pe-2`,children:(0,C.jsx)(b,{data:o,labelAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:d.DEFAULT,action:u.Default.CLASSROOM_VIEWS_POPUP})},tooltip:O(`classroomViewsSettings`)}}})})}):(0,C.jsx)(T,{})]}):(0,C.jsx)(`div`,{className:`partial-loading-background d-block w-50`,children:`\xA0`})})}var A={MONTH:35,YEAR:365},j={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},M={day:`D MMM`,month:`MMM`,year:`YYYY`};function N(e){let t=o.diffBetween(e.end,e.start,`day`);return t>A.YEAR?`year`:t>A.MONTH?`month`:`day`}function P(e,t){let n=[],r=o.convertUTCToLocal(e.start),i=o.convertUTCToLocal(e.end),a=o.format(r,j[t]);for(;!o.isAfter(a,i,t);)n.push(a),a=o.format(o.add(a,1,t),j[t]);return n}function F(e,t,n){if(!e)return null;let r=N(t),i=P(t,r),a=new Map;e.forEach(e=>{let t=o.format(o.convertUTCToLocal(e.dateStreamed),j[r]),n=[s.System,`255`].includes(e.name)?null:e.name,i=a.get(n);i||a.set(n,i=new Map);let c=i.get(t)??0;i.set(t,c+e.count)});let c=[...a.keys()];if(!c.length)return{categories:i.map(e=>o.format(e,M[r])),data:[]};let l=y(n);return{categories:i.map(e=>o.format(e,M[r])),data:c.map(e=>({name:l(e),type:`line`,data:i.map(t=>a.get(e).get(t)??0),color:g(e)})).sort((e,t)=>v(e.name,t.name))}}var I=`reportsShared.streamsChartCard`,L=l.encloseNamespace(I);function R(e){let n=m(`video-views`),r=F(i(e.videoId?h.videoAggregationChart(e.videoId,e.type,n):h.aggregationChart(e.type,n)).data,n,e.type);return(0,C.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:r?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,C.jsx)(a,{namespace:I,phrase:`videoViews`})}),(0,C.jsx)(x,{categories:r.categories,data:r.data,legendAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:d.DEFAULT,action:u.Default.CLASSROOM_VIEWS_POPUP})},tooltip:L(`classroomViewsSettings`)}}})]}):(0,C.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}export{k as n,R as t};
2
- //# sourceMappingURL=BXoBk1VP2.chunk.js.map
1
+ import{P as e,nn as t,st as n}from"./CM0wW4AE.chunk.js";import{v as r}from"./B01-hGyk.chunk.js";import{d as i,n as a}from"./dUFTODMz.chunk.js";import{t as o}from"./CjM_tQvd.chunk.js";import{r as s,t as c}from"./NaTUzw6f.chunk.js";import{t as l}from"./I5Dnl_eN.chunk.js";import{n as u,r as d,t as f}from"./H5KLIhR_.chunk.js";import{t as p}from"./DIAxWspB.chunk.js";import{r as m}from"./app-BigOHyYp.js";import{t as h}from"./ktNy7dHM2.chunk.js";import{i as g,n as _,o as v,r as y,s as b,t as x}from"./CCLDpjnt2.chunk.js";var S={image:`_image_1a110_1`};n();var C=e(),w=l.encloseNamespace(`shared.streamsBarChartCardEmptyState`);function T(){return(0,C.jsxs)(p,{className:`flex-grow-1 justify-content-center`,children:[(0,C.jsx)(p.Image,{src:f.EmptyStates.Shared.BagQuestionOrange,className:S.image}),(0,C.jsx)(p.Heading,{className:`h6`,children:w(`heading`)}),(0,C.jsx)(p.Info,{className:`w-100`,children:w(`description`)})]})}var E=c(),D=`shared.streamsBarChartCard`,O=l.encloseNamespace(D);function k(e){let n=m(`video-views`),o=_(i(e.videoId?h.videoAggregation(e.videoId,e.type,n):h.aggregation(e.type,n)).data,y(e.type)),s=o?.reduce((e,t)=>e+t.y,0);return(0,C.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white overflow-hidden rounded pt-3 px-3`,children:o?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,C.jsx)(`h2`,{className:`h6 mb-1`,children:(0,C.jsx)(a,{namespace:D,phrase:`totalViews`,options:{views:s}})}),e.appLink&&e.appLinkText&&(0,C.jsx)(r,{appLink:e.appLink,className:`text-info`,children:e.appLinkText})]}),o.length?(0,C.jsx)(E.Scrollbars,{className:`position-relative`,children:(0,C.jsx)(`div`,{className:`position-absolute w-100 pe-2`,children:(0,C.jsx)(b,{data:o,labelAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:d.DEFAULT,action:u.Default.CLASSROOM_VIEWS_POPUP})},tooltip:O(`classroomViewsSettings`)}}})})}):(0,C.jsx)(T,{})]}):(0,C.jsx)(`div`,{className:`partial-loading-background d-block w-50`,children:`\xA0`})})}var A={MONTH:35,YEAR:365},j={day:`YYYY-MM-DD`,month:`YYYY-MM`,year:`YYYY`},M={day:`D MMM`,month:`MMM`,year:`YYYY`};function N(e){let t=o.diffBetween(e.end,e.start,`day`);return t>A.YEAR?`year`:t>A.MONTH?`month`:`day`}function P(e,t){let n=[],r=o.convertUTCToLocal(e.start),i=o.convertUTCToLocal(e.end),a=o.format(r,j[t]);for(;!o.isAfter(a,i,t);)n.push(a),a=o.format(o.add(a,1,t),j[t]);return n}function F(e,t,n){if(!e)return null;let r=N(t),i=P(t,r),a=new Map;e.forEach(e=>{let t=o.format(o.convertUTCToLocal(e.dateStreamed),j[r]),n=[s.System,`255`].includes(e.name)?null:e.name,i=a.get(n);i||a.set(n,i=new Map);let c=i.get(t)??0;i.set(t,c+e.count)});let c=[...a.keys()];if(!c.length)return{categories:i.map(e=>o.format(e,M[r])),data:[]};let l=y(n);return{categories:i.map(e=>o.format(e,M[r])),data:c.map(e=>({name:l(e),type:`line`,data:i.map(t=>a.get(e).get(t)??0),color:g(e)})).sort((e,t)=>v(e.name,t.name))}}var I=`reportsShared.streamsChartCard`,L=l.encloseNamespace(I);function R(e){let n=m(`video-views`),r=F(i(e.videoId?h.videoAggregationChart(e.videoId,e.type,n):h.aggregationChart(e.type,n)).data,n,e.type);return(0,C.jsx)(`div`,{className:`d-flex flex-column h-100 bg-white rounded p-3 position-relative`,children:r?(0,C.jsxs)(C.Fragment,{children:[(0,C.jsx)(`h2`,{className:`position-absolute h6 mb-1`,children:(0,C.jsx)(a,{namespace:I,phrase:`videoViews`})}),(0,C.jsx)(x,{categories:r.categories,data:r.data,legendAnnotations:{"Classroom views":{onClick:()=>{t.trigger({application:d.DEFAULT,action:u.Default.CLASSROOM_VIEWS_POPUP})},tooltip:L(`classroomViewsSettings`)}}})]}):(0,C.jsx)(`div`,{className:`partial-loading-background w-25`,children:`\xA0`})})}export{k as n,R as t};
2
+ //# sourceMappingURL=CMKPCLR42.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BXoBk1VP2.chunk.js","names":[],"sources":["../../src/shared/views/overview-cards/streams-bar-chart-card/empty-state/total-views-by-group-card-empty-state.module.scss","../../src/shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState.tsx","../../src/shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView.tsx","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardViewUtils.ts","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardView.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\nconst namespace = 'shared.streamsBarChartCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './total-views-by-group-card-empty-state.module.scss';\n\nexport function StreamsBarChartCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.BagQuestionOrange}\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 { Core } from 'libs/common/backbone/index';\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 { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\nimport { getLabelMapper } from 'shared/utils/UserUtils';\nimport { StreamsBarChartCardEmptyState } from 'shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState';\n\nconst namespace = 'shared.streamsBarChartCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TotalViewsByGroupViewProps {\n type: StreamAggregationType;\n videoId?: string;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsBarChartCardView(props: TotalViewsByGroupViewProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const chartData = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregation(props.type, requestFilter));\n\n const grouped = getCountByGroup(\n chartData.data,\n getLabelMapper(props.type)\n );\n const total = grouped?.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 {grouped ?\n <>\n <div className='d-flex justify-content-between'>\n <h2 className='h6 mb-1'><Text namespace={namespace} phrase='totalViews' options={{ views: total }} /></h2>\n {props.appLink && props.appLinkText &&\n <AppLink\n appLink={props.appLink}\n className='text-info'\n >\n {props.appLinkText}\n </AppLink>\n }\n </div>\n\n {grouped.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100 pe-2'>\n <VerticalBarChart data={grouped} labelAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }} />\n </div>\n </Scrollbars> :\n <StreamsBarChartCardEmptyState />\n }\n </> :\n <div className='partial-loading-background d-block w-50'>&nbsp;</div>\n }\n </div >\n );\n}\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { compareGroupNames } from 'shared/utils/GroupSortUtils';\nimport { getLabelMapper, mapUserTypeToChartColour } 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 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: GroupedAnalyticsChartCount[],\n requestFilter: AnalyticsRequestFilter,\n type: StreamAggregationType\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped = new Map<string, Map<string, number>>();\n \n events.forEach(ev => {\n const eventDate = DateHelper.format(DateHelper.convertUTCToLocal(ev.dateStreamed), DateFormats[groupBy]);\n \n // Bucketing System user data as Anonymous\n const name = [ UserGroup.System, '255' ].includes(ev.name) ? null : ev.name;\n\n let group = grouped.get(name);\n\n if (!group)\n grouped.set(name, group = new Map<string, number>);\n\n const oldCount = group.get(eventDate) ?? 0;\n group.set(eventDate, oldCount + ev.count);\n });\n\n const roles = [...grouped.keys()] as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n const labelMapper = getLabelMapper(type);\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n roles.map(r => ({\n name: labelMapper(r),\n type: 'line' as const,\n data: fullDateRange.map(d => grouped.get(r).get(d) ?? 0),\n color: mapUserTypeToChartColour(r)\n })).sort((a, b) => compareGroupNames(a.name, b.name))\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nimport { getChartData } from './StreamsChartCardViewUtils';\n\nconst namespace = 'reportsShared.streamsChartCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamsChartCardViewProps {\n type: StreamAggregationType;\n videoId?: string;\n className?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsChartCardView(props: StreamsChartCardViewProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsChartCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregationChart(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregationChart(props.type, requestFilter));\n\n const chartData = getChartData(viewsByGroup.data, requestFilter, props.type);\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='videoViews' /></h2>\n <LineChart\n categories={chartData.categories}\n data={chartData.data}\n legendAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }}\n />\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"CMKPCLR42.chunk.js","names":[],"sources":["../../src/shared/views/overview-cards/streams-bar-chart-card/empty-state/total-views-by-group-card-empty-state.module.scss","../../src/shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState.tsx","../../src/shared/views/overview-cards/streams-bar-chart-card/StreamsBarChartCardView.tsx","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardViewUtils.ts","../../src/shared/views/overview-cards/streams-chart-card/StreamsChartCardView.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\nconst namespace = 'shared.streamsBarChartCardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nimport styles from './total-views-by-group-card-empty-state.module.scss';\n\nexport function StreamsBarChartCardEmptyState() {\n return (\n <EmptyState className='flex-grow-1 justify-content-center'>\n <EmptyState.Image\n src={ImageUrls.EmptyStates.Shared.BagQuestionOrange}\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 { Core } from 'libs/common/backbone/index';\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 { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { VerticalBarChart } from 'shared/components/vertical-bar-chart/VerticalBarChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\nimport { getCountByGroup } from 'shared/utils/BarChartByGroupUtils';\nimport { getLabelMapper } from 'shared/utils/UserUtils';\nimport { StreamsBarChartCardEmptyState } from 'shared/views/overview-cards/streams-bar-chart-card/empty-state/StreamsBarChartCardEmptyState';\n\nconst namespace = 'shared.streamsBarChartCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TotalViewsByGroupViewProps {\n type: StreamAggregationType;\n videoId?: string;\n appLink?: Core.AppLink;\n appLinkText?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsBarChartCardView(props: TotalViewsByGroupViewProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const chartData = Flight.useBasicFetch<GroupedAnalyticsCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregation(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregation(props.type, requestFilter));\n\n const grouped = getCountByGroup(\n chartData.data,\n getLabelMapper(props.type)\n );\n const total = grouped?.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 {grouped ?\n <>\n <div className='d-flex justify-content-between'>\n <h2 className='h6 mb-1'><Text namespace={namespace} phrase='totalViews' options={{ views: total }} /></h2>\n {props.appLink && props.appLinkText &&\n <AppLink\n appLink={props.appLink}\n className='text-info'\n >\n {props.appLinkText}\n </AppLink>\n }\n </div>\n\n {grouped.length ?\n <Scrollbars className='position-relative'>\n <div className='position-absolute w-100 pe-2'>\n <VerticalBarChart data={grouped} labelAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }} />\n </div>\n </Scrollbars> :\n <StreamsBarChartCardEmptyState />\n }\n </> :\n <div className='partial-loading-background d-block w-50'>&nbsp;</div>\n }\n </div >\n );\n}\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nimport { compareGroupNames } from 'shared/utils/GroupSortUtils';\nimport { getLabelMapper, mapUserTypeToChartColour } 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 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: GroupedAnalyticsChartCount[],\n requestFilter: AnalyticsRequestFilter,\n type: StreamAggregationType\n): ChartData {\n if (!events) return null;\n\n const groupBy = getGroupBy(requestFilter);\n const fullDateRange = getFullDateRange(requestFilter, groupBy);\n \n const grouped = new Map<string, Map<string, number>>();\n \n events.forEach(ev => {\n const eventDate = DateHelper.format(DateHelper.convertUTCToLocal(ev.dateStreamed), DateFormats[groupBy]);\n \n // Bucketing System user data as Anonymous\n const name = [ UserGroup.System, '255' ].includes(ev.name) ? null : ev.name;\n\n let group = grouped.get(name);\n\n if (!group)\n grouped.set(name, group = new Map<string, number>);\n\n const oldCount = group.get(eventDate) ?? 0;\n group.set(eventDate, oldCount + ev.count);\n });\n\n const roles = [...grouped.keys()] as UserGroup[];\n\n if (!roles.length) return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data: []\n };\n\n const labelMapper = getLabelMapper(type);\n\n return {\n categories: fullDateRange.map(d => DateHelper.format(d, DisplayFormats[groupBy])),\n data:\n roles.map(r => ({\n name: labelMapper(r),\n type: 'line' as const,\n data: fullDateRange.map(d => grouped.get(r).get(d) ?? 0),\n color: mapUserTypeToChartColour(r)\n })).sort((a, b) => compareGroupNames(a.name, b.name))\n };\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { GroupedAnalyticsChartCount } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { LineChart } from 'shared/components/line-chart/LineChart';\nimport { Actions } from 'shared/constants/ReportsActions';\nimport { AppChannels } from 'shared/constants/ReportsRadioChannels';\nimport { VideoViewsV2Requests } from 'shared/flight-requests/VideoViewsV2Requests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nimport { getChartData } from './StreamsChartCardViewUtils';\n\nconst namespace = 'reportsShared.streamsChartCard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamsChartCardViewProps {\n type: StreamAggregationType;\n videoId?: string;\n className?: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function StreamsChartCardView(props: StreamsChartCardViewProps) {\n const requestFilter = useGetRequestFilter('video-views');\n\n const viewsByGroup = Flight.useBasicFetch<GroupedAnalyticsChartCount[]>(props.videoId ?\n VideoViewsV2Requests.videoAggregationChart(props.videoId, props.type, requestFilter) :\n VideoViewsV2Requests.aggregationChart(props.type, requestFilter));\n\n const chartData = getChartData(viewsByGroup.data, requestFilter, props.type);\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='videoViews' /></h2>\n <LineChart\n categories={chartData.categories}\n data={chartData.data}\n legendAnnotations={{\n 'Classroom views': {\n onClick: () => {\n Core.AppLinkHelper.trigger({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CLASSROOM_VIEWS_POPUP\n });\n },\n tooltip: getPhrase('classroomViewsSettings')\n }\n }}\n />\n </> :\n <div className='partial-loading-background w-25'>&nbsp;</div>\n }\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{t as e}from"./app-BigOHyYp.js";export{e as ErrorView};