@clickview/reports 0.86.0 → 0.87.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/.vite/manifest.json +287 -278
  2. package/dist/bundles.json +1 -1
  3. package/dist/en.json +1 -1
  4. package/dist/scripts/{Bf4DlBxT.chunk.js → 28JMpJbt.chunk.js} +2 -2
  5. package/dist/scripts/{Bf4DlBxT.chunk.js.map → 28JMpJbt.chunk.js.map} +1 -1
  6. package/dist/scripts/{Cu6M80aY.chunk.js → BLzQ085A.chunk.js} +2 -2
  7. package/dist/scripts/{Cu6M80aY.chunk.js.map → BLzQ085A.chunk.js.map} +1 -1
  8. package/dist/scripts/{B9u-BJ_k2.chunk.js → BOGodQXj2.chunk.js} +2 -2
  9. package/dist/scripts/{B9u-BJ_k2.chunk.js.map → BOGodQXj2.chunk.js.map} +1 -1
  10. package/dist/scripts/{D0Iup4vX.chunk.js → BQLCt3Ad.chunk.js} +4 -4
  11. package/dist/scripts/{D0Iup4vX.chunk.js.map → BQLCt3Ad.chunk.js.map} +1 -1
  12. package/dist/scripts/{Duq0DLsG2.chunk.js → BQcTfbZm2.chunk.js} +2 -2
  13. package/dist/scripts/{Duq0DLsG2.chunk.js.map → BQcTfbZm2.chunk.js.map} +1 -1
  14. package/dist/scripts/BSV_W0cK.chunk.js.map +1 -1
  15. package/dist/scripts/{C46TEWQx2.chunk.js → BYLD2f9R2.chunk.js} +2 -2
  16. package/dist/scripts/{C46TEWQx2.chunk.js.map → BYLD2f9R2.chunk.js.map} +1 -1
  17. package/dist/scripts/B_HlStqa2.chunk.js +2 -0
  18. package/dist/scripts/B_HlStqa2.chunk.js.map +1 -0
  19. package/dist/scripts/{ClDdEKYV2.chunk.js → BbTaGrM02.chunk.js} +2 -2
  20. package/dist/scripts/{ClDdEKYV2.chunk.js.map → BbTaGrM02.chunk.js.map} +1 -1
  21. package/dist/scripts/{DMQIqlrn.chunk.js → Bn4Go0UF.chunk.js} +2 -2
  22. package/dist/scripts/{DMQIqlrn.chunk.js.map → Bn4Go0UF.chunk.js.map} +1 -1
  23. package/dist/scripts/{Bl6b6nAn2.chunk.js → Bs_S7mFn2.chunk.js} +2 -2
  24. package/dist/scripts/{Bl6b6nAn2.chunk.js.map → Bs_S7mFn2.chunk.js.map} +1 -1
  25. package/dist/scripts/{Dxi0YECT.chunk.js → BxKrer6h.chunk.js} +2 -2
  26. package/dist/scripts/{Dxi0YECT.chunk.js.map → BxKrer6h.chunk.js.map} +1 -1
  27. package/dist/scripts/{CMw7H8FK2.chunk.js → C1m-1G6w2.chunk.js} +2 -2
  28. package/dist/scripts/{CMw7H8FK2.chunk.js.map → C1m-1G6w2.chunk.js.map} +1 -1
  29. package/dist/scripts/{C-4Pza2l2.chunk.js → C2ZUZoNE2.chunk.js} +2 -2
  30. package/dist/scripts/{C-4Pza2l2.chunk.js.map → C2ZUZoNE2.chunk.js.map} +1 -1
  31. package/dist/scripts/{BNQGo_Gd.chunk.js → C7rNnvPs.chunk.js} +2 -2
  32. package/dist/scripts/{BNQGo_Gd.chunk.js.map → C7rNnvPs.chunk.js.map} +1 -1
  33. package/dist/scripts/{VhnfG4dU2.chunk.js → CItOH7dg2.chunk.js} +2 -2
  34. package/dist/scripts/{VhnfG4dU2.chunk.js.map → CItOH7dg2.chunk.js.map} +1 -1
  35. package/dist/scripts/{DHGyxAjV2.chunk.js → CKTy7NJ92.chunk.js} +2 -2
  36. package/dist/scripts/{DHGyxAjV2.chunk.js.map → CKTy7NJ92.chunk.js.map} +1 -1
  37. package/dist/scripts/CZQnIbqt.chunk.js +1 -0
  38. package/dist/scripts/CfPosTww.chunk.js +2 -0
  39. package/dist/scripts/CfPosTww.chunk.js.map +1 -0
  40. package/dist/scripts/{LH8waKdJ2.chunk.js → CkS0imTk2.chunk.js} +3 -3
  41. package/dist/scripts/CkS0imTk2.chunk.js.map +1 -0
  42. package/dist/scripts/{C21pODi22.chunk.js → CllvFALa2.chunk.js} +2 -2
  43. package/dist/scripts/{C21pODi22.chunk.js.map → CllvFALa2.chunk.js.map} +1 -1
  44. package/dist/scripts/{Chh-4QFk.chunk.js → CqVCiInU.chunk.js} +2 -2
  45. package/dist/scripts/{Chh-4QFk.chunk.js.map → CqVCiInU.chunk.js.map} +1 -1
  46. package/dist/scripts/{B3BAH-B8.chunk.js → DFxl2xgU.chunk.js} +2 -2
  47. package/dist/scripts/{B3BAH-B8.chunk.js.map → DFxl2xgU.chunk.js.map} +1 -1
  48. package/dist/scripts/{DaN1d6Pn2.chunk.js → DK50VHUW2.chunk.js} +2 -2
  49. package/dist/scripts/{DaN1d6Pn2.chunk.js.map → DK50VHUW2.chunk.js.map} +1 -1
  50. package/dist/scripts/{DeAZkXBA2.chunk.js → DfhaG70Z2.chunk.js} +3 -3
  51. package/dist/scripts/{DeAZkXBA2.chunk.js.map → DfhaG70Z2.chunk.js.map} +1 -1
  52. package/dist/scripts/DkXQWig4.chunk.js +2 -0
  53. package/dist/scripts/DkXQWig4.chunk.js.map +1 -0
  54. package/dist/scripts/{DeQ431eX.chunk.js → DldsJ3cq.chunk.js} +2 -2
  55. package/dist/scripts/{DeQ431eX.chunk.js.map → DldsJ3cq.chunk.js.map} +1 -1
  56. package/dist/scripts/{CQNeP_Yp.chunk.js → Du87dvla.chunk.js} +2 -2
  57. package/dist/scripts/{CQNeP_Yp.chunk.js.map → Du87dvla.chunk.js.map} +1 -1
  58. package/dist/scripts/{e3pgZZ_n.chunk.js → DuQ74iFu.chunk.js} +2 -2
  59. package/dist/scripts/{e3pgZZ_n.chunk.js.map → DuQ74iFu.chunk.js.map} +1 -1
  60. package/dist/scripts/{D5SnHbk-.chunk.js → DxBCBFh3.chunk.js} +2 -2
  61. package/dist/scripts/{D5SnHbk-.chunk.js.map → DxBCBFh3.chunk.js.map} +1 -1
  62. package/dist/scripts/SNiCkvSP.chunk.js +2 -0
  63. package/dist/scripts/SNiCkvSP.chunk.js.map +1 -0
  64. package/dist/scripts/{KApJ0N8H.chunk.js → WxjzAHzM.chunk.js} +2 -2
  65. package/dist/scripts/{KApJ0N8H.chunk.js.map → WxjzAHzM.chunk.js.map} +1 -1
  66. package/dist/scripts/ao_3LgdP.chunk.js +1 -0
  67. package/dist/scripts/{app-DLh9RnwX.js → app-BeoBow2q.js} +6 -6
  68. package/dist/scripts/app-BeoBow2q.js.map +1 -0
  69. package/dist/scripts/{mKkhzqL1.chunk.js → rdbFZIyT.chunk.js} +2 -2
  70. package/dist/scripts/{mKkhzqL1.chunk.js.map → rdbFZIyT.chunk.js.map} +1 -1
  71. package/dist/scripts/{DSOStB3B.chunk.js → rtCrJwRm.chunk.js} +2 -2
  72. package/dist/scripts/{DSOStB3B.chunk.js.map → rtCrJwRm.chunk.js.map} +1 -1
  73. package/dist/scripts/{BLILOa4O.chunk.js → yklF-2M1.chunk.js} +2 -2
  74. package/dist/scripts/{BLILOa4O.chunk.js.map → yklF-2M1.chunk.js.map} +1 -1
  75. package/package.json +1 -1
  76. package/dist/scripts/BIvkuRmF.chunk.js +0 -1
  77. package/dist/scripts/BTLhY0Si.chunk.js +0 -2
  78. package/dist/scripts/BTLhY0Si.chunk.js.map +0 -1
  79. package/dist/scripts/Bv4pM4sp.chunk.js +0 -2
  80. package/dist/scripts/Bv4pM4sp.chunk.js.map +0 -1
  81. package/dist/scripts/DuNznK6r.chunk.js +0 -1
  82. package/dist/scripts/LH8waKdJ2.chunk.js.map +0 -1
  83. package/dist/scripts/O4R5nbYC2.chunk.js +0 -2
  84. package/dist/scripts/O4R5nbYC2.chunk.js.map +0 -1
  85. package/dist/scripts/app-DLh9RnwX.js.map +0 -1
@@ -1,2 +1,2 @@
1
- import{Kn as e,st as t}from"./BSV_W0cK.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./B9u-BJ_k2.chunk.js";var i=e(t(),1),a=new Map,o=new WeakMap,s=0,c=void 0;function l(e){return e?o.has(e)?o.get(e):(s+=1,o.set(e,s.toString()),o.get(e)):`0`}function u(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?l(e.root):e[t]}`).toString()}function d(e){let t=u(e),n=a.get(t);if(!n){let r=new Map,i,o=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&i.some(e=>t.intersectionRatio>=e);e.trackVisibility&&t.isVisible===void 0&&(t.isVisible=a),(n=r.get(t.target))==null||n.forEach(e=>{e(a,t)})})},e);i=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:r},a.set(t,n)}return n}function f(e,t,n={},r=c){if(window.IntersectionObserver===void 0&&r!==void 0){let i=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold==`number`?n.threshold:0,time:0,boundingClientRect:i,intersectionRect:i,rootBounds:i}),()=>{}}let{id:i,observer:o,elements:s}=d(n),l=s.get(e)||[];return s.has(e)||s.set(e,l),l.push(t),o.observe(e),function(){l.splice(l.indexOf(t),1),l.length===0&&(s.delete(e),o.unobserve(e)),s.size===0&&(o.disconnect(),a.delete(i))}}function p({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:a,triggerOnce:o,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){let[d,p]=i.useState(null),m=i.useRef(),[h,g]=i.useState({inView:!!c,entry:void 0});m.current=u,i.useEffect(()=>{if(s||!d)return;let i;return i=f(d,(e,t)=>{g({inView:e,entry:t}),m.current&&m.current(e,t),t.isIntersecting&&o&&i&&(i(),i=void 0)},{root:a,rootMargin:r,threshold:e,trackVisibility:n,delay:t},l),()=>{i&&i()}},[Array.isArray(e)?e.toString():e,d,a,r,o,s,n,l,t]);let _=h.entry?.target,v=i.useRef();!d&&_&&!o&&!s&&v.current!==_&&(v.current=_,g({inView:!!c,entry:void 0}));let y=[p,h.inView,h.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}function m(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var h={aggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,m(t)),key:r(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,m(i)),key:r(`video:views:v2:aggregation:${e}`,i,t),normalize:!1}},aggregationChart(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,m(t)),key:r(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,m(i)),key:r(`video:views:v2:aggregation:chart:${e}`,i,t),normalize:!1}},topStreams(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...m(t),limit:e}),key:r(`video:views:v2:top:streams:${e}`,t),normalize:!1}},videoHeatMap(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...m(t),cursor:i}),key:r(`video:views:v2:heatmap:${e}`,t,i),normalize:!1}},videoHeatMapAggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,m(t)),key:r(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{p as n,h as t};
2
- //# sourceMappingURL=C46TEWQx2.chunk.js.map
1
+ import{Kn as e,st as t}from"./BSV_W0cK.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./BOGodQXj2.chunk.js";var i=e(t(),1),a=new Map,o=new WeakMap,s=0,c=void 0;function l(e){return e?o.has(e)?o.get(e):(s+=1,o.set(e,s.toString()),o.get(e)):`0`}function u(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?l(e.root):e[t]}`).toString()}function d(e){let t=u(e),n=a.get(t);if(!n){let r=new Map,i,o=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&i.some(e=>t.intersectionRatio>=e);e.trackVisibility&&t.isVisible===void 0&&(t.isVisible=a),(n=r.get(t.target))==null||n.forEach(e=>{e(a,t)})})},e);i=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:r},a.set(t,n)}return n}function f(e,t,n={},r=c){if(window.IntersectionObserver===void 0&&r!==void 0){let i=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold==`number`?n.threshold:0,time:0,boundingClientRect:i,intersectionRect:i,rootBounds:i}),()=>{}}let{id:i,observer:o,elements:s}=d(n),l=s.get(e)||[];return s.has(e)||s.set(e,l),l.push(t),o.observe(e),function(){l.splice(l.indexOf(t),1),l.length===0&&(s.delete(e),o.unobserve(e)),s.size===0&&(o.disconnect(),a.delete(i))}}function p({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:a,triggerOnce:o,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){let[d,p]=i.useState(null),m=i.useRef(),[h,g]=i.useState({inView:!!c,entry:void 0});m.current=u,i.useEffect(()=>{if(s||!d)return;let i;return i=f(d,(e,t)=>{g({inView:e,entry:t}),m.current&&m.current(e,t),t.isIntersecting&&o&&i&&(i(),i=void 0)},{root:a,rootMargin:r,threshold:e,trackVisibility:n,delay:t},l),()=>{i&&i()}},[Array.isArray(e)?e.toString():e,d,a,r,o,s,n,l,t]);let _=h.entry?.target,v=i.useRef();!d&&_&&!o&&!s&&v.current!==_&&(v.current=_,g({inView:!!c,entry:void 0}));let y=[p,h.inView,h.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}function m(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var h={aggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,m(t)),key:r(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,m(i)),key:r(`video:views:v2:aggregation:${e}`,i,t),normalize:!1}},aggregationChart(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,m(t)),key:r(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,m(i)),key:r(`video:views:v2:aggregation:chart:${e}`,i,t),normalize:!1}},topStreams(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...m(t),limit:e}),key:r(`video:views:v2:top:streams:${e}`,t),normalize:!1}},videoHeatMap(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...m(t),cursor:i}),key:r(`video:views:v2:heatmap:${e}`,t,i),normalize:!1}},videoHeatMapAggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,m(t)),key:r(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{p as n,h as t};
2
+ //# sourceMappingURL=BYLD2f9R2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"C46TEWQx2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"BYLD2f9R2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{n as e,s as t}from"./CammdB53.chunk.js";import{M as n}from"./app-BeoBow2q.js";function r(r){let[i,a]=e(n.CLASSROOM_VIEWS_ALERT,!0,{storage:t.LocalStorage});function o(){a(!1)}function s(){a(!0)}let c=`none`;return i&&(c=r?`info`:`reminder`),{alertVariant:c,dismissAlert:o,enableAlert:s}}export{r as t};
2
+ //# sourceMappingURL=B_HlStqa2.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"B_HlStqa2.chunk.js","names":[],"sources":["../../src/shared/hooks/useClassroomViewsAlert.ts"],"sourcesContent":["import { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ViewModelKeys } from 'shared/constants/ReportsViewModels';\n\nexport type ClassroomViewsAlertVariant = 'info' | 'reminder' | 'none';\n\ninterface ClassroomViewsAlert {\n alertVariant: ClassroomViewsAlertVariant;\n dismissAlert: () => void;\n enableAlert: () => void;\n}\n\nexport function useClassroomViewsAlert(hasClassroomViews: boolean): ClassroomViewsAlert {\n const [ alertVisible, setAlertVisible ] = useViewModel<boolean>(\n ViewModelKeys.CLASSROOM_VIEWS_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function dismissAlert(): void {\n setAlertVisible(false);\n }\n\n function enableAlert(): void {\n setAlertVisible(true);\n }\n\n let alertVariant: ClassroomViewsAlertVariant = 'none';\n\n if (alertVisible)\n alertVariant = hasClassroomViews ? 'info' : 'reminder';\n\n return { alertVariant, dismissAlert, enableAlert };\n}\n"],"mappings":"qFAaA,SAAgB,EAAuB,EAAiD,CACtF,GAAM,CAAE,EAAc,GAAoB,EACxC,EAAc,sBACd,GACA,CAAE,QAAS,EAAY,aAAc,CACtC,CAED,SAAS,GAAqB,CAC5B,EAAgB,GAAM,CAGxB,SAAS,GAAoB,CAC3B,EAAgB,GAAK,CAGvB,IAAI,EAA2C,OAK/C,OAHI,IACF,EAAe,EAAoB,OAAS,YAEvC,CAAE,eAAc,eAAc,cAAa"}
@@ -1,2 +1,2 @@
1
- import{Kn as e,P as t,ot as n,st as r}from"./BSV_W0cK.chunk.js";import{f as i}from"./DLiesDxa.chunk.js";import{t as a}from"./BDdd6NA7.chunk.js";import"./CammdB53.chunk.js";import"./BTLhY0Si.chunk.js";var o=e(r()),s=e(n()),c=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),l=`html`,u=`svg`,d=`http://www.w3.org/2000/svg`,f=function(e,t){if(t===l)return e instanceof HTMLElement;if(t===u)return e instanceof SVGElement;throw Error(`Unrecognized element type "`+t+`" for validateElementType.`)},p=function(e,t){var n={},r,i,a;if(e===l)a=document.createElement(`div`);else if(e===u)a=document.createElementNS(d,`g`);else throw Error(`Invalid element type "`+e+`" for createPortalNode: must be "html" or "svg".`);if(t&&typeof t==`object`)for(var o=0,s=Object.entries(t.attributes);o<s.length;o++){var c=s[o],p=c[0],m=c[1];a.setAttribute(p,m)}var h={element:a,elementType:e,setPortalProps:function(e){n=e},getInitialPortalProps:function(){return n},mount:function(t,n){if(n!==i){if(h.unmount(),t!==r&&!f(t,e))throw Error(`Invalid element type for portal: "`+e+`" portalNodes must be used with `+e+` elements, but OutPortal is within <`+t.tagName+`>.`);t.replaceChild(h.element,n),r=t,i=n}},unmount:function(e){e&&e!==i||r&&i&&(r.replaceChild(i,h.element),r=void 0,i=void 0)}};return h},m=function(e){c(t,e);function t(t){var n=e.call(this,t)||this;return n.addPropsChannel=function(){Object.assign(n.props.node,{setPortalProps:function(e){n.setState({nodeProps:e})}})},n.state={nodeProps:n.props.node.getInitialPortalProps()},n}return t.prototype.componentDidMount=function(){this.addPropsChannel()},t.prototype.componentDidUpdate=function(){this.addPropsChannel()},t.prototype.render=function(){var e=this,t=this.props,n=t.children,r=t.node;return s.createPortal(o.Children.map(n,function(t){return o.isValidElement(t)?o.cloneElement(t,e.state.nodeProps):t}),r.element)},t}(o.PureComponent),h=function(e){c(t,e);function t(t){var n=e.call(this,t)||this;return n.placeholderNode=o.createRef(),n.passPropsThroughPortal(),n}return t.prototype.passPropsThroughPortal=function(){var e=Object.assign({},this.props,{node:void 0});this.props.node.setPortalProps(e)},t.prototype.componentDidMount=function(){var e=this.props.node;this.currentPortalNode=e;var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},t.prototype.componentDidUpdate=function(){var e=this.props.node;this.currentPortalNode&&e!==this.currentPortalNode&&(this.currentPortalNode.unmount(this.placeholderNode.current),this.currentPortalNode.setPortalProps({}),this.currentPortalNode=e);var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},t.prototype.componentWillUnmount=function(){var e=this.props.node;e.unmount(this.placeholderNode.current),e.setPortalProps({})},t.prototype.render=function(){return o.createElement(`div`,{ref:this.placeholderNode})},t}(o.PureComponent),g=p.bind(null,l);p.bind(null,u),t();var _=o.createContext({hasProvider:!1});function v(){return o.useContext(_)}var y=50;function b(e,t){let n=i(a.chunk(e,y).map(e=>t(a.uniq(e)))),r=a.flatten(n.data);return{itemsArr:r,items:n.data.length?r.reduce((e,t)=>({...e,[t.id]:t}),{}):null,isFetching:n.isFetching,hasCompleted:n.hasCompleted}}function x(e,t,n){let r=n??(e=>typeof e==`object`?e.id:e),{fetchItems:i,...a}=S({getRequest:t,_getKey:n});return o.useEffect(()=>{e?.length&&i(e)},[e?.map(r).join(`,`)]),a}function S(e){let t=e._getKey??(e=>typeof e==`object`?e.id:e),n=o.useRef(new Set),[r,s]=o.useState([]);function c(r){if(!r?.length)return;let i=[];r.forEach(e=>{let r=t(e);n.current.has(r)||(i.push(e),n.current.add(r))}),i.length&&s(t=>[...t,...a.chunk(i,y).map(e.getRequest)])}let l=i(r),u=a.flatten(l.data),d=l.data.length?u.reduce((e,n)=>({...e,[t(n)]:n}),{}):null;return{hasFirstRequestCompleted:!!l.responses?.[0]?.hasCompleted,itemsArr:u,items:d,isFetching:l.isFetching,fetchItems:c}}export{h as a,m as i,x as n,g as o,v as r,b as t};
2
- //# sourceMappingURL=ClDdEKYV2.chunk.js.map
1
+ import{Kn as e,P as t,ot as n,st as r}from"./BSV_W0cK.chunk.js";import{f as i}from"./DLiesDxa.chunk.js";import{t as a}from"./BDdd6NA7.chunk.js";import"./CammdB53.chunk.js";import"./SNiCkvSP.chunk.js";var o=e(r()),s=e(n()),c=(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)t.hasOwnProperty(n)&&(e[n]=t[n])},e(t,n)};return function(t,n){e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}})(),l=`html`,u=`svg`,d=`http://www.w3.org/2000/svg`,f=function(e,t){if(t===l)return e instanceof HTMLElement;if(t===u)return e instanceof SVGElement;throw Error(`Unrecognized element type "`+t+`" for validateElementType.`)},p=function(e,t){var n={},r,i,a;if(e===l)a=document.createElement(`div`);else if(e===u)a=document.createElementNS(d,`g`);else throw Error(`Invalid element type "`+e+`" for createPortalNode: must be "html" or "svg".`);if(t&&typeof t==`object`)for(var o=0,s=Object.entries(t.attributes);o<s.length;o++){var c=s[o],p=c[0],m=c[1];a.setAttribute(p,m)}var h={element:a,elementType:e,setPortalProps:function(e){n=e},getInitialPortalProps:function(){return n},mount:function(t,n){if(n!==i){if(h.unmount(),t!==r&&!f(t,e))throw Error(`Invalid element type for portal: "`+e+`" portalNodes must be used with `+e+` elements, but OutPortal is within <`+t.tagName+`>.`);t.replaceChild(h.element,n),r=t,i=n}},unmount:function(e){e&&e!==i||r&&i&&(r.replaceChild(i,h.element),r=void 0,i=void 0)}};return h},m=function(e){c(t,e);function t(t){var n=e.call(this,t)||this;return n.addPropsChannel=function(){Object.assign(n.props.node,{setPortalProps:function(e){n.setState({nodeProps:e})}})},n.state={nodeProps:n.props.node.getInitialPortalProps()},n}return t.prototype.componentDidMount=function(){this.addPropsChannel()},t.prototype.componentDidUpdate=function(){this.addPropsChannel()},t.prototype.render=function(){var e=this,t=this.props,n=t.children,r=t.node;return s.createPortal(o.Children.map(n,function(t){return o.isValidElement(t)?o.cloneElement(t,e.state.nodeProps):t}),r.element)},t}(o.PureComponent),h=function(e){c(t,e);function t(t){var n=e.call(this,t)||this;return n.placeholderNode=o.createRef(),n.passPropsThroughPortal(),n}return t.prototype.passPropsThroughPortal=function(){var e=Object.assign({},this.props,{node:void 0});this.props.node.setPortalProps(e)},t.prototype.componentDidMount=function(){var e=this.props.node;this.currentPortalNode=e;var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},t.prototype.componentDidUpdate=function(){var e=this.props.node;this.currentPortalNode&&e!==this.currentPortalNode&&(this.currentPortalNode.unmount(this.placeholderNode.current),this.currentPortalNode.setPortalProps({}),this.currentPortalNode=e);var t=this.placeholderNode.current,n=t.parentNode;e.mount(n,t),this.passPropsThroughPortal()},t.prototype.componentWillUnmount=function(){var e=this.props.node;e.unmount(this.placeholderNode.current),e.setPortalProps({})},t.prototype.render=function(){return o.createElement(`div`,{ref:this.placeholderNode})},t}(o.PureComponent),g=p.bind(null,l);p.bind(null,u),t();var _=o.createContext({hasProvider:!1});function v(){return o.useContext(_)}var y=50;function b(e,t){let n=i(a.chunk(e,y).map(e=>t(a.uniq(e)))),r=a.flatten(n.data);return{itemsArr:r,items:n.data.length?r.reduce((e,t)=>({...e,[t.id]:t}),{}):null,isFetching:n.isFetching,hasCompleted:n.hasCompleted}}function x(e,t,n){let r=n??(e=>typeof e==`object`?e.id:e),{fetchItems:i,...a}=S({getRequest:t,_getKey:n});return o.useEffect(()=>{e?.length&&i(e)},[e?.map(r).join(`,`)]),a}function S(e){let t=e._getKey??(e=>typeof e==`object`?e.id:e),n=o.useRef(new Set),[r,s]=o.useState([]);function c(r){if(!r?.length)return;let i=[];r.forEach(e=>{let r=t(e);n.current.has(r)||(i.push(e),n.current.add(r))}),i.length&&s(t=>[...t,...a.chunk(i,y).map(e.getRequest)])}let l=i(r),u=a.flatten(l.data),d=l.data.length?u.reduce((e,n)=>({...e,[t(n)]:n}),{}):null;return{hasFirstRequestCompleted:!!l.responses?.[0]?.hasCompleted,itemsArr:u,items:d,isFetching:l.isFetching,fetchItems:c}}export{h as a,m as i,x as n,g as o,v as r,b as t};
2
+ //# sourceMappingURL=BbTaGrM02.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ClDdEKYV2.chunk.js","names":[],"sources":["../../../../../node_modules/react-reverse-portal/dist/web/index.js","../../../../libs/shared/src/context/player-context/PlayerContext.tsx","../../../../libs/shared/src/hooks/UseBatchFetch.ts"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n// Internally, the portalNode must be for either HTML or SVG elements\nvar ELEMENT_TYPE_HTML = 'html';\nvar ELEMENT_TYPE_SVG = 'svg';\n// ReactDOM can handle several different namespaces, but they're not exported publicly\n// https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/DOMNamespaces.js#L8-L10\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar validateElementType = function (domElement, elementType) {\n if (elementType === ELEMENT_TYPE_HTML) {\n return domElement instanceof HTMLElement;\n }\n if (elementType === ELEMENT_TYPE_SVG) {\n return domElement instanceof SVGElement;\n }\n throw new Error(\"Unrecognized element type \\\"\" + elementType + \"\\\" for validateElementType.\");\n};\n// This is the internal implementation: the public entry points set elementType to an appropriate value\nvar createPortalNode = function (elementType, options) {\n var initialProps = {};\n var parent;\n var lastPlaceholder;\n var element;\n if (elementType === ELEMENT_TYPE_HTML) {\n element = document.createElement('div');\n }\n else if (elementType === ELEMENT_TYPE_SVG) {\n element = document.createElementNS(SVG_NAMESPACE, 'g');\n }\n else {\n throw new Error(\"Invalid element type \\\"\" + elementType + \"\\\" for createPortalNode: must be \\\"html\\\" or \\\"svg\\\".\");\n }\n if (options && typeof options === \"object\") {\n for (var _i = 0, _a = Object.entries(options.attributes); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n element.setAttribute(key, value);\n }\n }\n var portalNode = {\n element: element,\n elementType: elementType,\n setPortalProps: function (props) {\n initialProps = props;\n },\n getInitialPortalProps: function () {\n return initialProps;\n },\n mount: function (newParent, newPlaceholder) {\n if (newPlaceholder === lastPlaceholder) {\n // Already mounted - noop.\n return;\n }\n portalNode.unmount();\n // To support SVG and other non-html elements, the portalNode's elementType needs to match\n // the elementType it's being rendered into\n if (newParent !== parent) {\n if (!validateElementType(newParent, elementType)) {\n throw new Error(\"Invalid element type for portal: \\\"\" + elementType + \"\\\" portalNodes must be used with \" + elementType + \" elements, but OutPortal is within <\" + newParent.tagName + \">.\");\n }\n }\n newParent.replaceChild(portalNode.element, newPlaceholder);\n parent = newParent;\n lastPlaceholder = newPlaceholder;\n },\n unmount: function (expectedPlaceholder) {\n if (expectedPlaceholder && expectedPlaceholder !== lastPlaceholder) {\n // Skip unmounts for placeholders that aren't currently mounted\n // They will have been automatically unmounted already by a subsequent mount()\n return;\n }\n if (parent && lastPlaceholder) {\n parent.replaceChild(lastPlaceholder, portalNode.element);\n parent = undefined;\n lastPlaceholder = undefined;\n }\n }\n };\n return portalNode;\n};\nvar InPortal = /** @class */ (function (_super) {\n __extends(InPortal, _super);\n function InPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.addPropsChannel = function () {\n Object.assign(_this.props.node, {\n setPortalProps: function (props) {\n // Rerender the child node here if/when the out portal props change\n _this.setState({ nodeProps: props });\n }\n });\n };\n _this.state = {\n nodeProps: _this.props.node.getInitialPortalProps(),\n };\n return _this;\n }\n InPortal.prototype.componentDidMount = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.componentDidUpdate = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.render = function () {\n var _this = this;\n var _a = this.props, children = _a.children, node = _a.node;\n return ReactDOM.createPortal(React.Children.map(children, function (child) {\n if (!React.isValidElement(child))\n return child;\n return React.cloneElement(child, _this.state.nodeProps);\n }), node.element);\n };\n return InPortal;\n}(React.PureComponent));\nvar OutPortal = /** @class */ (function (_super) {\n __extends(OutPortal, _super);\n function OutPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.placeholderNode = React.createRef();\n _this.passPropsThroughPortal();\n return _this;\n }\n OutPortal.prototype.passPropsThroughPortal = function () {\n var propsForTarget = Object.assign({}, this.props, { node: undefined });\n this.props.node.setPortalProps(propsForTarget);\n };\n OutPortal.prototype.componentDidMount = function () {\n var node = this.props.node;\n this.currentPortalNode = node;\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentDidUpdate = function () {\n // We re-mount on update, just in case we were unmounted (e.g. by\n // a second OutPortal, which has now been removed)\n var node = this.props.node;\n // If we're switching portal nodes, we need to clean up the current one first.\n if (this.currentPortalNode && node !== this.currentPortalNode) {\n this.currentPortalNode.unmount(this.placeholderNode.current);\n this.currentPortalNode.setPortalProps({});\n this.currentPortalNode = node;\n }\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentWillUnmount = function () {\n var node = this.props.node;\n node.unmount(this.placeholderNode.current);\n node.setPortalProps({});\n };\n OutPortal.prototype.render = function () {\n // Render a placeholder to the DOM, so we can get a reference into\n // our location in the DOM, and swap it out for the portaled node.\n // A <div> placeholder works fine even for SVG.\n return React.createElement(\"div\", { ref: this.placeholderNode });\n };\n return OutPortal;\n}(React.PureComponent));\nvar createHtmlPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_HTML);\nvar createSvgPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_SVG);\nexport { createHtmlPortalNode, createSvgPortalNode, InPortal, OutPortal, };\n//# sourceMappingURL=index.js.map","import React from 'react';\nimport { createHtmlPortalNode, HtmlPortalNode } from 'react-reverse-portal';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { DefaultDisplayMode, PlayerInitializationData } from 'libs/shared/context/player-context/interfaces/PlayerContextAction';\nimport { PlayerContextState } from 'libs/shared/context/player-context/interfaces/PlayerContextState';\nimport { PlayerMode } from 'libs/shared/context/player-context/interfaces/PlayerMode';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { playerContextReducer } from 'libs/shared/context/player-context/reducer/PlayerContextReducer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nconst _THEATRE_MODE = 'play-page-theatre-mode';\n\nexport interface PlayerContextValues extends PlayerContextState {\n playerRef?: React.MutableRefObject<PlayerReference>;\n portalNode?: HtmlPortalNode;\n questionListPortalNode?: HtmlPortalNode;\n\n useInitialize?: (initializeData: PlayerInitializationData) => void;\n dispose?: () => void;\n setPlayerRef?: (player: any) => void;\n setPlayerMode?: (mode: PlayerMode) => void;\n setDefaultDisplayMode?: (displayMode: DefaultDisplayMode) => void;\n setStarted?: (started: boolean) => void;\n setPersist?: () => void;\n\n /**\n * Tells components if an instance of <PlayerContextProvider /> exists\n * above them in the tree. I.e. When this is used in curator.\n */\n hasProvider: boolean;\n}\n\nconst PlayerContext = React.createContext<PlayerContextValues>({ hasProvider: false });\n\nexport function usePlayerContext() {\n return React.useContext(PlayerContext);\n}\n\nfunction getInitialState(): PlayerContextState {\n const hasSavedTheatreMode = LocalStorageHelper.get(_THEATRE_MODE);\n\n return {\n defaultDisplayMode: hasSavedTheatreMode ? 'theatre' : 'normal'\n };\n}\n\nexport function PlayerContextProvider(props: React.PropsWithChildren) {\n const [ state, dispatch ] = React.useReducer(playerContextReducer, getInitialState());\n const { hasPreviewVideos } = useSettings(null);\n\n const playerRef = React.useRef<any>(null);\n\n const portalNode = React.useMemo(() => createHtmlPortalNode(\n { attributes: { class: 'cv-theatre-mode-video-container' } }\n ), []);\n\n const questionListPortalNode = React.useMemo(createHtmlPortalNode, []);\n\n function setPlayerRef(player: PlayerReference) {\n playerRef.current = player;\n }\n\n function useInitialize(initializeData: PlayerInitializationData) {\n const enabled = hasPreviewVideos || initializeData.mode !== 'hover';\n\n React.useEffect(() => {\n if (!enabled)\n return;\n\n /**\n * Cannot initialize a hover player if we already have a player elsewhere.\n */\n if (initializeData.mode === 'hover' && state.mode)\n return;\n\n /**\n * No hover to play on interactives. This feature is ComingSoon™️ - Sha\n */\n if (initializeData.mode === 'hover' && initializeData.objectTypeId === MasterType.Interactive)\n return;\n\n dispatch({\n type: 'initialize',\n data: initializeData\n });\n\n return disposeInternal;\n }, []);\n }\n\n function setPlayerMode(mode: PlayerMode) {\n dispatch({ type: 'mode', data: { mode } });\n }\n\n function setDefaultDisplayMode(defaultDisplayMode: DefaultDisplayMode) {\n LocalStorageHelper.set(_THEATRE_MODE, defaultDisplayMode === 'theatre');\n\n dispatch({ type: 'defaultDisplayMode', data: { defaultDisplayMode } });\n }\n\n function setStarted(): void {\n dispatch({ type: 'started' });\n }\n\n function disposeInternal(force: boolean = false): void {\n if (force) {\n playerRef.current = null;\n }\n\n dispatch({ type: 'dispose', data: { force: force } });\n }\n\n function setPersist(): void {\n dispatch({ type: 'persist' });\n }\n\n /**\n * If anything external calls dispose, we ignore the persist flag and force a disposal\n */\n function dispose(): void {\n disposeInternal(true);\n }\n\n const playerContextValues: PlayerContextValues = {\n ...state,\n playerRef,\n setPlayerRef,\n portalNode,\n questionListPortalNode,\n useInitialize,\n setPlayerMode,\n setDefaultDisplayMode,\n setStarted,\n dispose,\n setPersist,\n hasProvider: true\n };\n\n return (\n <PlayerContext.Provider value={playerContextValues}>\n {props.children}\n </PlayerContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: {[key: string]: T } | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length ?\n itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {}) :\n null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length ?\n itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {}) :\n null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
1
+ {"version":3,"file":"BbTaGrM02.chunk.js","names":[],"sources":["../../../../../node_modules/react-reverse-portal/dist/web/index.js","../../../../libs/shared/src/context/player-context/PlayerContext.tsx","../../../../libs/shared/src/hooks/UseBatchFetch.ts"],"sourcesContent":["var __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\n// Internally, the portalNode must be for either HTML or SVG elements\nvar ELEMENT_TYPE_HTML = 'html';\nvar ELEMENT_TYPE_SVG = 'svg';\n// ReactDOM can handle several different namespaces, but they're not exported publicly\n// https://github.com/facebook/react/blob/b87aabdfe1b7461e7331abb3601d9e6bb27544bc/packages/react-dom/src/shared/DOMNamespaces.js#L8-L10\nvar SVG_NAMESPACE = 'http://www.w3.org/2000/svg';\nvar validateElementType = function (domElement, elementType) {\n if (elementType === ELEMENT_TYPE_HTML) {\n return domElement instanceof HTMLElement;\n }\n if (elementType === ELEMENT_TYPE_SVG) {\n return domElement instanceof SVGElement;\n }\n throw new Error(\"Unrecognized element type \\\"\" + elementType + \"\\\" for validateElementType.\");\n};\n// This is the internal implementation: the public entry points set elementType to an appropriate value\nvar createPortalNode = function (elementType, options) {\n var initialProps = {};\n var parent;\n var lastPlaceholder;\n var element;\n if (elementType === ELEMENT_TYPE_HTML) {\n element = document.createElement('div');\n }\n else if (elementType === ELEMENT_TYPE_SVG) {\n element = document.createElementNS(SVG_NAMESPACE, 'g');\n }\n else {\n throw new Error(\"Invalid element type \\\"\" + elementType + \"\\\" for createPortalNode: must be \\\"html\\\" or \\\"svg\\\".\");\n }\n if (options && typeof options === \"object\") {\n for (var _i = 0, _a = Object.entries(options.attributes); _i < _a.length; _i++) {\n var _b = _a[_i], key = _b[0], value = _b[1];\n element.setAttribute(key, value);\n }\n }\n var portalNode = {\n element: element,\n elementType: elementType,\n setPortalProps: function (props) {\n initialProps = props;\n },\n getInitialPortalProps: function () {\n return initialProps;\n },\n mount: function (newParent, newPlaceholder) {\n if (newPlaceholder === lastPlaceholder) {\n // Already mounted - noop.\n return;\n }\n portalNode.unmount();\n // To support SVG and other non-html elements, the portalNode's elementType needs to match\n // the elementType it's being rendered into\n if (newParent !== parent) {\n if (!validateElementType(newParent, elementType)) {\n throw new Error(\"Invalid element type for portal: \\\"\" + elementType + \"\\\" portalNodes must be used with \" + elementType + \" elements, but OutPortal is within <\" + newParent.tagName + \">.\");\n }\n }\n newParent.replaceChild(portalNode.element, newPlaceholder);\n parent = newParent;\n lastPlaceholder = newPlaceholder;\n },\n unmount: function (expectedPlaceholder) {\n if (expectedPlaceholder && expectedPlaceholder !== lastPlaceholder) {\n // Skip unmounts for placeholders that aren't currently mounted\n // They will have been automatically unmounted already by a subsequent mount()\n return;\n }\n if (parent && lastPlaceholder) {\n parent.replaceChild(lastPlaceholder, portalNode.element);\n parent = undefined;\n lastPlaceholder = undefined;\n }\n }\n };\n return portalNode;\n};\nvar InPortal = /** @class */ (function (_super) {\n __extends(InPortal, _super);\n function InPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.addPropsChannel = function () {\n Object.assign(_this.props.node, {\n setPortalProps: function (props) {\n // Rerender the child node here if/when the out portal props change\n _this.setState({ nodeProps: props });\n }\n });\n };\n _this.state = {\n nodeProps: _this.props.node.getInitialPortalProps(),\n };\n return _this;\n }\n InPortal.prototype.componentDidMount = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.componentDidUpdate = function () {\n this.addPropsChannel();\n };\n InPortal.prototype.render = function () {\n var _this = this;\n var _a = this.props, children = _a.children, node = _a.node;\n return ReactDOM.createPortal(React.Children.map(children, function (child) {\n if (!React.isValidElement(child))\n return child;\n return React.cloneElement(child, _this.state.nodeProps);\n }), node.element);\n };\n return InPortal;\n}(React.PureComponent));\nvar OutPortal = /** @class */ (function (_super) {\n __extends(OutPortal, _super);\n function OutPortal(props) {\n var _this = _super.call(this, props) || this;\n _this.placeholderNode = React.createRef();\n _this.passPropsThroughPortal();\n return _this;\n }\n OutPortal.prototype.passPropsThroughPortal = function () {\n var propsForTarget = Object.assign({}, this.props, { node: undefined });\n this.props.node.setPortalProps(propsForTarget);\n };\n OutPortal.prototype.componentDidMount = function () {\n var node = this.props.node;\n this.currentPortalNode = node;\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentDidUpdate = function () {\n // We re-mount on update, just in case we were unmounted (e.g. by\n // a second OutPortal, which has now been removed)\n var node = this.props.node;\n // If we're switching portal nodes, we need to clean up the current one first.\n if (this.currentPortalNode && node !== this.currentPortalNode) {\n this.currentPortalNode.unmount(this.placeholderNode.current);\n this.currentPortalNode.setPortalProps({});\n this.currentPortalNode = node;\n }\n var placeholder = this.placeholderNode.current;\n var parent = placeholder.parentNode;\n node.mount(parent, placeholder);\n this.passPropsThroughPortal();\n };\n OutPortal.prototype.componentWillUnmount = function () {\n var node = this.props.node;\n node.unmount(this.placeholderNode.current);\n node.setPortalProps({});\n };\n OutPortal.prototype.render = function () {\n // Render a placeholder to the DOM, so we can get a reference into\n // our location in the DOM, and swap it out for the portaled node.\n // A <div> placeholder works fine even for SVG.\n return React.createElement(\"div\", { ref: this.placeholderNode });\n };\n return OutPortal;\n}(React.PureComponent));\nvar createHtmlPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_HTML);\nvar createSvgPortalNode = createPortalNode.bind(null, ELEMENT_TYPE_SVG);\nexport { createHtmlPortalNode, createSvgPortalNode, InPortal, OutPortal, };\n//# sourceMappingURL=index.js.map","import React from 'react';\nimport { createHtmlPortalNode, HtmlPortalNode } from 'react-reverse-portal';\n\nimport { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { DefaultDisplayMode, PlayerInitializationData } from 'libs/shared/context/player-context/interfaces/PlayerContextAction';\nimport { PlayerContextState } from 'libs/shared/context/player-context/interfaces/PlayerContextState';\nimport { PlayerMode } from 'libs/shared/context/player-context/interfaces/PlayerMode';\nimport { PlayerReference } from 'libs/shared/context/player-context/interfaces/PlayerReference';\nimport { playerContextReducer } from 'libs/shared/context/player-context/reducer/PlayerContextReducer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nconst _THEATRE_MODE = 'play-page-theatre-mode';\n\nexport interface PlayerContextValues extends PlayerContextState {\n playerRef?: React.MutableRefObject<PlayerReference>;\n portalNode?: HtmlPortalNode;\n questionListPortalNode?: HtmlPortalNode;\n\n useInitialize?: (initializeData: PlayerInitializationData) => void;\n dispose?: () => void;\n setPlayerRef?: (player: any) => void;\n setPlayerMode?: (mode: PlayerMode) => void;\n setDefaultDisplayMode?: (displayMode: DefaultDisplayMode) => void;\n setStarted?: (started: boolean) => void;\n setPersist?: () => void;\n\n /**\n * Tells components if an instance of <PlayerContextProvider /> exists\n * above them in the tree. I.e. When this is used in curator.\n */\n hasProvider: boolean;\n}\n\nconst PlayerContext = React.createContext<PlayerContextValues>({ hasProvider: false });\n\nexport function usePlayerContext() {\n return React.useContext(PlayerContext);\n}\n\nfunction getInitialState(): PlayerContextState {\n const hasSavedTheatreMode = LocalStorageHelper.get(_THEATRE_MODE);\n\n return {\n defaultDisplayMode: hasSavedTheatreMode ? 'theatre' : 'normal'\n };\n}\n\nexport function PlayerContextProvider(props: React.PropsWithChildren) {\n const [ state, dispatch ] = React.useReducer(playerContextReducer, getInitialState());\n const { hasPreviewVideos } = useSettings(null);\n\n const playerRef = React.useRef<any>(null);\n\n const portalNode = React.useMemo(() => createHtmlPortalNode(\n { attributes: { class: 'cv-theatre-mode-video-container' } }\n ), []);\n\n const questionListPortalNode = React.useMemo(createHtmlPortalNode, []);\n\n function setPlayerRef(player: PlayerReference) {\n playerRef.current = player;\n }\n\n function useInitialize(initializeData: PlayerInitializationData) {\n const enabled = hasPreviewVideos || initializeData.mode !== 'hover';\n\n React.useEffect(() => {\n if (!enabled)\n return;\n\n /**\n * Cannot initialize a hover player if we already have a player elsewhere.\n */\n if (initializeData.mode === 'hover' && state.mode)\n return;\n\n /**\n * No hover to play on interactives. This feature is ComingSoon™️ - Sha\n */\n if (initializeData.mode === 'hover' && initializeData.objectTypeId === MasterType.Interactive)\n return;\n\n dispatch({\n type: 'initialize',\n data: initializeData\n });\n\n return disposeInternal;\n }, []);\n }\n\n function setPlayerMode(mode: PlayerMode) {\n dispatch({ type: 'mode', data: { mode } });\n }\n\n function setDefaultDisplayMode(defaultDisplayMode: DefaultDisplayMode) {\n LocalStorageHelper.set(_THEATRE_MODE, defaultDisplayMode === 'theatre');\n\n dispatch({ type: 'defaultDisplayMode', data: { defaultDisplayMode } });\n }\n\n function setStarted(): void {\n dispatch({ type: 'started' });\n }\n\n function disposeInternal(force: boolean = false): void {\n if (force) {\n playerRef.current = null;\n }\n\n dispatch({ type: 'dispose', data: { force: force } });\n }\n\n function setPersist(): void {\n dispatch({ type: 'persist' });\n }\n\n /**\n * If anything external calls dispose, we ignore the persist flag and force a disposal\n */\n function dispose(): void {\n disposeInternal(true);\n }\n\n const playerContextValues: PlayerContextValues = {\n ...state,\n playerRef,\n setPlayerRef,\n portalNode,\n questionListPortalNode,\n useInitialize,\n setPlayerMode,\n setDefaultDisplayMode,\n setStarted,\n dispose,\n setPersist,\n hasProvider: true\n };\n\n return (\n <PlayerContext.Provider value={playerContextValues}>\n {props.children}\n </PlayerContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: {[key: string]: T } | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length ?\n itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {}) :\n null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length ?\n itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {}) :\n null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n"],"x_google_ignoreList":[0],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{P as e,Yt as t,st as n}from"./BSV_W0cK.chunk.js";import{i as r}from"./DVHj6R3-.chunk.js";import{b as i,d as a,n as o,p as s,t as c}from"./DLiesDxa.chunk.js";import{t as l}from"./Dhb09xKG.chunk.js";import{n as u}from"./CNQKHXPY.chunk.js";import{t as d}from"./Bqlm3yF_.chunk.js";import{t as f}from"./CO7H3BC5.chunk.js";import{t as p}from"./uMt2JXFV.chunk.js";import{t as m}from"./Btl_wt9M.chunk.js";import{t as h}from"./DjcvhO-s.chunk.js";import{at as g,r as _,tt as v}from"./app-DLh9RnwX.js";import{t as y}from"./DPmS69Mt2.chunk.js";var b=`shared.verifiedEmailError`,x=class extends p{constructor(e,t,n){super(`VerifiedEmailRequiredError`),this.message=e,this.liteUrl=t,this.hasLite=n}get name(){return`VerifiedEmailRequiredError`}get dialogOptions(){let e=u.safeUrlConcat(this.liteUrl,`settings/account`);return{title:d.getPhrase(b,`heading`),text:this.hasLite?`${this.message} ${d.getPhrase(b,`visitSettings`,{href:e})}`:this.message,buttons:[{text:d.getPhrase(b,`close`),className:`btn btn-dark`,success:!0}]}}},S=()=>{let e=a(a(r.currentUser()).data?.isAuthenticated&&v.userProducts()),t=!e.hasCompleted;return{hasProduct:n=>t||e.hasError||!e.data?.length?!1:e.data.some(e=>e.id===n),products:e,isLoadingProducts:t}};function C(){let e=y(),{hasProduct:n,isLoadingProducts:r}=S(),i=a(g.config());function o(r,a,o){if(!r.responseJSON||r.responseJSON?.type!==`no-email`){e.error(a);return}t.throw(new x(o,i.data.liteUrl,n(f.Primary)))}return{handleGenerateReportError:o,loading:!i.hasCompleted||r}}function w(e){return{dateRange:{start:e.start,end:e.end},offsetInMin:Math.abs(new Date().getTimezoneOffset())}}var T={videoViewsReport(e,t){return{url:`{gateway}/v1/analytics/video-views/reports`,key:`video:views:report`,type:i.POST,data:{...w(e),version:t},invalidationKeys:`export`,normalize:!1}},loginsReport(e,t,n,r){return{url:`{gateway}/v1/analytics/logins/reports`,key:`logins:report`,data:w(e),type:i.POST,normalize:!1,success:t,error:n,always:r}}};n();var E=e(),D=`reportsShared.generateReport`,O=d.encloseNamespace(D);function k(e){switch(e){case j.Logins:return`loginsDescription`;case j.VideoViews:return`videosDescription`;default:return``}}function A(e){let t=l.convertUTCToLocal(e).toString();return l.format(t,`Do MMMM YYYY`)}var j=function(e){return e[e.Logins=0]=`Logins`,e[e.VideoViews=1]=`VideoViews`,e}({});function M(e){let t=_(`video-views`),n=_(`logins`),r=e.type===j.VideoViews?t:n,i=y(),{loading:a,handleGenerateReportError:l}=C(),u=s();function d(){switch(e.type){case j.Logins:return T.loginsReport(n);case j.VideoViews:return T.videoViewsReport(t,`v3`);default:return null}}function f(){u(d()).then(()=>i.success(O(`success`))).catch(e=>l(e,O(`error`),O(`noEmailError`))).finally(e.closePopup)}return(0,E.jsx)(c.Provider,{value:D,children:(0,E.jsxs)(m,{title:O(`title`),showLoadingSpinner:a,closePopup:e.closePopup,children:[(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:k(e.type)})}),(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:`dateRange`,options:{dateFrom:A(r.start),dateTo:A(r.end)}})}),(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:`emailDescription`})}),(0,E.jsxs)(h,{children:[(0,E.jsx)(h.Cancel,{onClick:e.closePopup}),(0,E.jsx)(h.Submit,{variant:`dark`,onClick:f,text:O(`generateReport`)})]})]})})}export{M as n,A as r,j as t};
2
- //# sourceMappingURL=DMQIqlrn.chunk.js.map
1
+ import{P as e,Yt as t,st as n}from"./BSV_W0cK.chunk.js";import{i as r}from"./DVHj6R3-.chunk.js";import{b as i,d as a,n as o,p as s,t as c}from"./DLiesDxa.chunk.js";import{t as l}from"./Dhb09xKG.chunk.js";import{n as u}from"./CNQKHXPY.chunk.js";import{t as d}from"./Bqlm3yF_.chunk.js";import{t as f}from"./CO7H3BC5.chunk.js";import{t as p}from"./uMt2JXFV.chunk.js";import{t as m}from"./Btl_wt9M.chunk.js";import{t as h}from"./DjcvhO-s.chunk.js";import{at as g,r as _,tt as v}from"./app-BeoBow2q.js";import{t as y}from"./DPmS69Mt2.chunk.js";var b=`shared.verifiedEmailError`,x=class extends p{constructor(e,t,n){super(`VerifiedEmailRequiredError`),this.message=e,this.liteUrl=t,this.hasLite=n}get name(){return`VerifiedEmailRequiredError`}get dialogOptions(){let e=u.safeUrlConcat(this.liteUrl,`settings/account`);return{title:d.getPhrase(b,`heading`),text:this.hasLite?`${this.message} ${d.getPhrase(b,`visitSettings`,{href:e})}`:this.message,buttons:[{text:d.getPhrase(b,`close`),className:`btn btn-dark`,success:!0}]}}},S=()=>{let e=a(a(r.currentUser()).data?.isAuthenticated&&v.userProducts()),t=!e.hasCompleted;return{hasProduct:n=>t||e.hasError||!e.data?.length?!1:e.data.some(e=>e.id===n),products:e,isLoadingProducts:t}};function C(){let e=y(),{hasProduct:n,isLoadingProducts:r}=S(),i=a(g.config());function o(r,a,o){if(!r.responseJSON||r.responseJSON?.type!==`no-email`){e.error(a);return}t.throw(new x(o,i.data.liteUrl,n(f.Primary)))}return{handleGenerateReportError:o,loading:!i.hasCompleted||r}}function w(e){return{dateRange:{start:e.start,end:e.end},offsetInMin:Math.abs(new Date().getTimezoneOffset())}}var T={videoViewsReport(e,t){return{url:`{gateway}/v1/analytics/video-views/reports`,key:`video:views:report`,type:i.POST,data:{...w(e),version:t},invalidationKeys:`export`,normalize:!1}},loginsReport(e,t,n,r){return{url:`{gateway}/v1/analytics/logins/reports`,key:`logins:report`,data:w(e),type:i.POST,normalize:!1,success:t,error:n,always:r}}};n();var E=e(),D=`reportsShared.generateReport`,O=d.encloseNamespace(D);function k(e){switch(e){case j.Logins:return`loginsDescription`;case j.VideoViews:return`videosDescription`;default:return``}}function A(e){let t=l.convertUTCToLocal(e).toString();return l.format(t,`Do MMMM YYYY`)}var j=function(e){return e[e.Logins=0]=`Logins`,e[e.VideoViews=1]=`VideoViews`,e}({});function M(e){let t=_(`video-views`),n=_(`logins`),r=e.type===j.VideoViews?t:n,i=y(),{loading:a,handleGenerateReportError:l}=C(),u=s();function d(){switch(e.type){case j.Logins:return T.loginsReport(n);case j.VideoViews:return T.videoViewsReport(t,`v3`);default:return null}}function f(){u(d()).then(()=>i.success(O(`success`))).catch(e=>l(e,O(`error`),O(`noEmailError`))).finally(e.closePopup)}return(0,E.jsx)(c.Provider,{value:D,children:(0,E.jsxs)(m,{title:O(`title`),showLoadingSpinner:a,closePopup:e.closePopup,children:[(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:k(e.type)})}),(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:`dateRange`,options:{dateFrom:A(r.start),dateTo:A(r.end)}})}),(0,E.jsx)(`p`,{children:(0,E.jsx)(o,{phrase:`emailDescription`})}),(0,E.jsxs)(h,{children:[(0,E.jsx)(h.Cancel,{onClick:e.closePopup}),(0,E.jsx)(h.Submit,{variant:`dark`,onClick:f,text:O(`generateReport`)})]})]})})}export{M as n,A as r,j as t};
2
+ //# sourceMappingURL=Bn4Go0UF.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DMQIqlrn.chunk.js","names":[],"sources":["../../../../libs/shared/src/errors/general/verified-email/VerifiedEmailRequiredError.ts","../../../../libs/shared/src/hooks/UseProducts.ts","../../../../libs/shared/src/hooks/useVerifiedEmailRequiredErrorHandler.ts","../../src/shared/flight-requests/ReportRequests.ts","../../src/shared/views/generate-report/GenerateReportView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.verifiedEmailError';\n\nexport class VerifiedEmailRequiredError extends DialogError {\n public message: string;\n public liteUrl: string;\n public hasLite: boolean;\n\n constructor(message: string, liteUrl: string, hasLite: boolean) {\n super('VerifiedEmailRequiredError');\n\n this.message = message;\n this.liteUrl = liteUrl;\n this.hasLite = hasLite;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'VerifiedEmailRequiredError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n const href = UrlHelper.safeUrlConcat(this.liteUrl, 'settings/account');\n\n return {\n title: LanguageService.getPhrase(namespace, 'heading'),\n text: this.hasLite ?\n `${this.message} ${LanguageService.getPhrase(namespace, 'visitSettings', { href })}` :\n this.message,\n buttons: [{\n text: LanguageService.getPhrase(namespace, 'close'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Product } from 'libs/shared/interfaces';\n\nexport type HasProductFunc = (productId: ProductId) => boolean;\n\nexport interface UseProductsResponse {\n hasProduct: (product: ProductId) => boolean;\n products: Flight.Response<Product[]>;\n isLoadingProducts: boolean;\n}\n\nexport const useProducts = (): UseProductsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const products = Flight.useBasicFetch<Product[]>(currentUser.data?.isAuthenticated && ProductRequests.userProducts());\n const isLoadingProducts = !products.hasCompleted;\n\n const hasProduct = (productId: ProductId) => {\n if (isLoadingProducts || products.hasError)\n return false;\n\n if (!products.data?.length)\n return false;\n\n return products.data.some(product => product.id === productId);\n };\n\n return {\n hasProduct,\n products,\n isLoadingProducts\n };\n};\n","import { Core } from 'libs/common/backbone/index';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VerifiedEmailRequiredError } from 'libs/shared/errors/general/verified-email/VerifiedEmailRequiredError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useVerifiedEmailRequiredErrorHandler() {\n const alerts = useAlerts();\n const { hasProduct, isLoadingProducts } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function handleGenerateReportError(xhr: Xhr, message: string, noEmailError: string) {\n if (!xhr.responseJSON || xhr.responseJSON?.type !== 'no-email') {\n alerts.error(message);\n return;\n }\n\n Core.ErrorHelper.throw(\n new VerifiedEmailRequiredError(noEmailError, config.data.liteUrl, hasProduct(ProductId.Primary))\n );\n }\n\n return {\n handleGenerateReportError,\n loading: !config.hasCompleted || isLoadingProducts\n };\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\ntype ReportVersion = 'v2' | 'v3';\n\ninterface DateRange {\n start: string;\n end: string;\n}\n\ninterface ReportRequestPayload {\n dateRange: DateRange;\n offsetInMin: number;\n userIds?: number[];\n groupsIds?: number[];\n}\n\nfunction formatReportRequest(filterParams: AnalyticsRequestFilter): ReportRequestPayload {\n return {\n dateRange: {\n start: filterParams.start,\n end: filterParams.end\n },\n offsetInMin: Math.abs(new Date().getTimezoneOffset())\n };\n}\n\nexport const ReportRequests = {\n videoViewsReport(\n filterParams: AnalyticsRequestFilter,\n version: ReportVersion\n ): Flight.Request {\n return {\n url: '{gateway}/v1/analytics/video-views/reports',\n key: 'video:views:report',\n type: HttpVerbs.POST,\n data: { ...formatReportRequest(filterParams), version },\n invalidationKeys: 'export',\n normalize: false\n };\n },\n\n loginsReport(\n filterParams: AnalyticsRequestFilter,\n success?: () => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/analytics/logins/reports',\n key: 'logins:report',\n data: formatReportRequest(filterParams),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n","import React from 'react';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { PropsWithPopupViewProps } from 'libs/shared/interfaces';\n\nimport { ReportRequests } from 'shared/flight-requests/ReportRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsShared.generateReport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getLangPhrase(type: GenerateReportType): string {\n switch (type) {\n case GenerateReportType.Logins:\n return 'loginsDescription';\n\n case GenerateReportType.VideoViews:\n return 'videosDescription';\n\n default:\n return '';\n }\n}\n\nexport function getReportFriendlyDate(date: string): string {\n const localDate = DateHelper.convertUTCToLocal(date).toString();\n return DateHelper.format(localDate, 'Do MMMM YYYY');\n}\n\nexport enum GenerateReportType {\n Logins,\n VideoViews\n}\n\ninterface GenerateReportViewProps {\n type: GenerateReportType;\n}\n\nexport function GenerateReportView(props: PropsWithPopupViewProps<GenerateReportViewProps>): JSX.Element {\n const videoViewsFilter = useGetRequestFilter('video-views');\n const loginsFilter = useGetRequestFilter('logins');\n const filterQueryParams = props.type === GenerateReportType.VideoViews ? videoViewsFilter : loginsFilter;\n const alerts = useAlerts();\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n function getRequest(): Flight.Request {\n switch (props.type) {\n case GenerateReportType.Logins:\n return ReportRequests.loginsReport(loginsFilter);\n\n case GenerateReportType.VideoViews:\n return ReportRequests.videoViewsReport(videoViewsFilter, 'v3');\n\n default:\n return null;\n }\n }\n\n function onClick() {\n fetchAsync(getRequest())\n .then(() => alerts.success(getPhrase('success')))\n .catch((xhr: Xhr) => handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError')))\n .finally(props.closePopup);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={loading}\n closePopup={props.closePopup}\n >\n <p>\n <Text phrase={getLangPhrase(props.type)} />\n </p>\n <p>\n <Text phrase='dateRange' options={({\n dateFrom: getReportFriendlyDate(filterQueryParams.start),\n dateTo: getReportFriendlyDate(filterQueryParams.end)\n })} />\n </p>\n <p>\n <Text phrase='emailDescription' />\n </p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='dark'\n onClick={onClick}\n text={getPhrase('generateReport')}\n />\n </PopupButtons>\n </Popup>\n </LanguageNamespaceContext.Provider>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Bn4Go0UF.chunk.js","names":[],"sources":["../../../../libs/shared/src/errors/general/verified-email/VerifiedEmailRequiredError.ts","../../../../libs/shared/src/hooks/UseProducts.ts","../../../../libs/shared/src/hooks/useVerifiedEmailRequiredErrorHandler.ts","../../src/shared/flight-requests/ReportRequests.ts","../../src/shared/views/generate-report/GenerateReportView.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.verifiedEmailError';\n\nexport class VerifiedEmailRequiredError extends DialogError {\n public message: string;\n public liteUrl: string;\n public hasLite: boolean;\n\n constructor(message: string, liteUrl: string, hasLite: boolean) {\n super('VerifiedEmailRequiredError');\n\n this.message = message;\n this.liteUrl = liteUrl;\n this.hasLite = hasLite;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'VerifiedEmailRequiredError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n const href = UrlHelper.safeUrlConcat(this.liteUrl, 'settings/account');\n\n return {\n title: LanguageService.getPhrase(namespace, 'heading'),\n text: this.hasLite ?\n `${this.message} ${LanguageService.getPhrase(namespace, 'visitSettings', { href })}` :\n this.message,\n buttons: [{\n text: LanguageService.getPhrase(namespace, 'close'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Product } from 'libs/shared/interfaces';\n\nexport type HasProductFunc = (productId: ProductId) => boolean;\n\nexport interface UseProductsResponse {\n hasProduct: (product: ProductId) => boolean;\n products: Flight.Response<Product[]>;\n isLoadingProducts: boolean;\n}\n\nexport const useProducts = (): UseProductsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const products = Flight.useBasicFetch<Product[]>(currentUser.data?.isAuthenticated && ProductRequests.userProducts());\n const isLoadingProducts = !products.hasCompleted;\n\n const hasProduct = (productId: ProductId) => {\n if (isLoadingProducts || products.hasError)\n return false;\n\n if (!products.data?.length)\n return false;\n\n return products.data.some(product => product.id === productId);\n };\n\n return {\n hasProduct,\n products,\n isLoadingProducts\n };\n};\n","import { Core } from 'libs/common/backbone/index';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VerifiedEmailRequiredError } from 'libs/shared/errors/general/verified-email/VerifiedEmailRequiredError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useVerifiedEmailRequiredErrorHandler() {\n const alerts = useAlerts();\n const { hasProduct, isLoadingProducts } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function handleGenerateReportError(xhr: Xhr, message: string, noEmailError: string) {\n if (!xhr.responseJSON || xhr.responseJSON?.type !== 'no-email') {\n alerts.error(message);\n return;\n }\n\n Core.ErrorHelper.throw(\n new VerifiedEmailRequiredError(noEmailError, config.data.liteUrl, hasProduct(ProductId.Primary))\n );\n }\n\n return {\n handleGenerateReportError,\n loading: !config.hasCompleted || isLoadingProducts\n };\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\ntype ReportVersion = 'v2' | 'v3';\n\ninterface DateRange {\n start: string;\n end: string;\n}\n\ninterface ReportRequestPayload {\n dateRange: DateRange;\n offsetInMin: number;\n userIds?: number[];\n groupsIds?: number[];\n}\n\nfunction formatReportRequest(filterParams: AnalyticsRequestFilter): ReportRequestPayload {\n return {\n dateRange: {\n start: filterParams.start,\n end: filterParams.end\n },\n offsetInMin: Math.abs(new Date().getTimezoneOffset())\n };\n}\n\nexport const ReportRequests = {\n videoViewsReport(\n filterParams: AnalyticsRequestFilter,\n version: ReportVersion\n ): Flight.Request {\n return {\n url: '{gateway}/v1/analytics/video-views/reports',\n key: 'video:views:report',\n type: HttpVerbs.POST,\n data: { ...formatReportRequest(filterParams), version },\n invalidationKeys: 'export',\n normalize: false\n };\n },\n\n loginsReport(\n filterParams: AnalyticsRequestFilter,\n success?: () => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/analytics/logins/reports',\n key: 'logins:report',\n data: formatReportRequest(filterParams),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n }\n};\n","import React from 'react';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { PropsWithPopupViewProps } from 'libs/shared/interfaces';\n\nimport { ReportRequests } from 'shared/flight-requests/ReportRequests';\nimport { useGetRequestFilter } from 'shared/hooks/UseGetFilterQueryParams';\n\nconst namespace = 'reportsShared.generateReport';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getLangPhrase(type: GenerateReportType): string {\n switch (type) {\n case GenerateReportType.Logins:\n return 'loginsDescription';\n\n case GenerateReportType.VideoViews:\n return 'videosDescription';\n\n default:\n return '';\n }\n}\n\nexport function getReportFriendlyDate(date: string): string {\n const localDate = DateHelper.convertUTCToLocal(date).toString();\n return DateHelper.format(localDate, 'Do MMMM YYYY');\n}\n\nexport enum GenerateReportType {\n Logins,\n VideoViews\n}\n\ninterface GenerateReportViewProps {\n type: GenerateReportType;\n}\n\nexport function GenerateReportView(props: PropsWithPopupViewProps<GenerateReportViewProps>): JSX.Element {\n const videoViewsFilter = useGetRequestFilter('video-views');\n const loginsFilter = useGetRequestFilter('logins');\n const filterQueryParams = props.type === GenerateReportType.VideoViews ? videoViewsFilter : loginsFilter;\n const alerts = useAlerts();\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n function getRequest(): Flight.Request {\n switch (props.type) {\n case GenerateReportType.Logins:\n return ReportRequests.loginsReport(loginsFilter);\n\n case GenerateReportType.VideoViews:\n return ReportRequests.videoViewsReport(videoViewsFilter, 'v3');\n\n default:\n return null;\n }\n }\n\n function onClick() {\n fetchAsync(getRequest())\n .then(() => alerts.success(getPhrase('success')))\n .catch((xhr: Xhr) => handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError')))\n .finally(props.closePopup);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={loading}\n closePopup={props.closePopup}\n >\n <p>\n <Text phrase={getLangPhrase(props.type)} />\n </p>\n <p>\n <Text phrase='dateRange' options={({\n dateFrom: getReportFriendlyDate(filterQueryParams.start),\n dateTo: getReportFriendlyDate(filterQueryParams.end)\n })} />\n </p>\n <p>\n <Text phrase='emailDescription' />\n </p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n variant='dark'\n onClick={onClick}\n text={getPhrase('generateReport')}\n />\n </PopupButtons>\n </Popup>\n </LanguageNamespaceContext.Provider>\n );\n}\n"],"mappings":"2hBAMA,IAAM,EAAY,4BAEL,EAAb,cAAgD,CAAY,CAK1D,YAAY,EAAiB,EAAiB,EAAkB,CAC9D,MAAM,6BAA6B,CAEnC,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,QAAU,EAIjB,IAAW,MAAe,CACxB,MAAO,6BAIT,IAAW,eAA+B,CACxC,IAAM,EAAO,EAAU,cAAc,KAAK,QAAS,mBAAmB,CAEtE,MAAO,CACL,MAAO,EAAgB,UAAU,EAAW,UAAU,CACtD,KAAM,KAAK,QACT,GAAG,KAAK,QAAQ,GAAG,EAAgB,UAAU,EAAW,gBAAiB,CAAE,OAAM,CAAC,GAClF,KAAK,QACP,QAAS,CAAC,CACR,KAAM,EAAgB,UAAU,EAAW,QAAQ,CACnD,UAAW,eACX,QAAS,GACV,CAAA,CACF,GCzBQ,MAAyC,CAEpD,IAAM,EAAW,EADG,EAAkC,EAAa,aAAa,CAAC,CACpB,MAAM,iBAAmB,EAAgB,cAAc,CAAC,CAC/G,EAAoB,CAAC,EAAS,aAYpC,MAAO,CACL,WAXkB,GACd,GAAqB,EAAS,UAG9B,CAAC,EAAS,MAAM,OACX,GAEF,EAAS,KAAK,KAAK,GAAW,EAAQ,KAAO,EAAU,CAK9D,WACA,oBACD,ECvBH,SAAgB,GAAuC,CACrD,IAAM,EAAS,GAAW,CACpB,CAAE,aAAY,qBAAsB,GAAa,CACjD,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAEpE,SAAS,EAA0B,EAAU,EAAiB,EAAsB,CAClF,GAAI,CAAC,EAAI,cAAgB,EAAI,cAAc,OAAS,WAAY,CAC9D,EAAO,MAAM,EAAQ,CACrB,OAGF,EAAiB,MACf,IAAI,EAA2B,EAAc,EAAO,KAAK,QAAS,EAAW,EAAU,QAAQ,CAAC,CACjG,CAGH,MAAO,CACL,4BACA,QAAS,CAAC,EAAO,cAAgB,EAClC,CCVH,SAAS,EAAoB,EAA4D,CACvF,MAAO,CACL,UAAW,CACT,MAAO,EAAa,MACpB,IAAK,EAAa,IACnB,CACD,YAAa,KAAK,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,CACtD,CAGH,IAAa,EAAiB,CAC5B,iBACE,EACA,EACgB,CAChB,MAAO,CACL,IAAK,6CACL,IAAK,qBACL,KAAM,EAAU,KAChB,KAAM,CAAE,GAAG,EAAoB,EAAa,CAAE,UAAS,CACvD,iBAAkB,SAClB,UAAW,GACZ,EAGH,aACE,EACA,EACA,EACA,EACgB,CAChB,MAAO,CACL,IAAK,wCACL,IAAK,gBACL,KAAM,EAAoB,EAAa,CACvC,KAAM,EAAU,KAChB,UAAW,GACX,UACA,QACA,SACD,EAEJ,eC7CK,EAAY,+BACZ,EAAY,EAAgB,iBAAiB,EAAU,CAE7D,SAAS,EAAc,EAAkC,CACvD,OAAQ,EAAR,CACE,KAAK,EAAmB,OACtB,MAAO,oBAET,KAAK,EAAmB,WACtB,MAAO,oBAET,QACE,MAAO,IAIb,SAAgB,EAAsB,EAAsB,CAC1D,IAAM,EAAY,EAAW,kBAAkB,EAAK,CAAC,UAAU,CAC/D,OAAO,EAAW,OAAO,EAAW,eAAe,CAGrD,IAAY,EAAL,SAAA,EAAA,OACL,GAAA,EAAA,OAAA,GAAA,SACA,EAAA,EAAA,WAAA,GAAA,mBACD,CAMD,SAAgB,EAAmB,EAAsE,CACvG,IAAM,EAAmB,EAAoB,cAAc,CACrD,EAAe,EAAoB,SAAS,CAC5C,EAAoB,EAAM,OAAS,EAAmB,WAAa,EAAmB,EACtF,EAAS,GAAW,CACpB,CAAE,UAAS,6BAA8B,GAAsC,CAE/E,EAAa,GAAyB,CAE5C,SAAS,GAA6B,CACpC,OAAQ,EAAM,KAAd,CACE,KAAK,EAAmB,OACtB,OAAO,EAAe,aAAa,EAAa,CAElD,KAAK,EAAmB,WACtB,OAAO,EAAe,iBAAiB,EAAkB,KAAK,CAEhE,QACE,OAAO,MAIb,SAAS,GAAU,CACjB,EAAW,GAAY,CAAC,CACrB,SAAW,EAAO,QAAQ,EAAU,UAAU,CAAC,CAAC,CAChD,MAAO,GAAa,EAA0B,EAAK,EAAU,QAAQ,CAAE,EAAU,eAAe,CAAC,CAAC,CAClG,QAAQ,EAAM,WAAW,CAG9B,OACE,EAAA,EAAA,KAAC,EAAyB,SAA1B,CAAmC,MAAO,YACxC,EAAA,EAAA,MAAC,EAAD,CACE,MAAO,EAAU,QAAQ,CACzB,mBAAoB,EACpB,WAAY,EAAM,oBAHpB,EAKE,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAM,OAAQ,EAAc,EAAM,KAAK,CAAI,CAAA,CACzC,CAAA,EACJ,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAM,OAAO,YAAY,QAAU,CACjC,SAAU,EAAsB,EAAkB,MAAM,CACxD,OAAQ,EAAsB,EAAkB,IAAI,CACrD,CAAK,CAAA,CACJ,CAAA,EACJ,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CAAM,OAAO,mBAAqB,CAAA,CAChC,CAAA,EACJ,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CAAqB,QAAS,EAAM,WAAc,CAAA,EAClD,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,QAAQ,OACC,UACT,KAAM,EAAU,iBAAiB,CACjC,CAAA,CACW,CAAA,CAAA,CACT,GAC0B,CAAA"}
@@ -1,2 +1,2 @@
1
- import{Kn as e,P as t,ct as n,st as r}from"./BSV_W0cK.chunk.js";import{i,r as a,v as o}from"./COrUmz0l.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./B6C1sxIU.chunk.js";import{n as l}from"./CbaXvmNl2.chunk.js";import{n as u}from"./C46TEWQx2.chunk.js";function d(e={}){let{prevent:t,rootMargin:n,triggerOnce:r=!0}=e,[i,a,o]=u({triggerOnce:r,rootMargin:n});return(t===!0||window.IntersectionObserver===void 0)&&(a=!0,i=null),{ref:i,inView:a,initialized:!!o}}var f={image:`_image_pp6me_1`},p=e(r()),m=t(),h=`500px`,g=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`,_=p.memo(function(e){let{forceLoad:t,extraClasses:n=``,errorFallbackImageSrc:r,preventLoad:i=!1,errorFallbackImageClassName:a,src:o,alt:s,...c}=e,{ref:l,inView:u}=d({rootMargin:h}),[_,v]=p.useState(!1);p.useEffect(()=>{if(!t&&!u||i)return;let e=new Image;return e.onerror=()=>{v(!0),r&&(e.src=r)},e.src=o,()=>e.onerror=null},[u,i]);function y(){return _&&r?r:e.src}if(_&&!r)return(0,m.jsx)(m.Fragment,{});if(!l)return(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,alt:s,src:y(),...c});let b={alt:s,...c,...(u||t)&&!i?{src:y()}:{src:g}};return t||(b.ref=l),(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,...b})}),v={image:`_image_1himm_1`,thumbnail:`_thumbnail_1himm_13`,tallPoster:`_tallPoster_1himm_16`,cover:`_cover_1himm_19`,banner:`_banner_1himm_22`,poster:`_poster_1himm_25`,pdf:`_pdf_1himm_28`,link:`_link_1himm_31`};function y(e){let t=v.image,n=``;return e.imageType===s.Thumbnails&&(n=`thumbnail ${v.thumbnail}`),e.imageType===s.TallPosters&&(n=v.tallPoster),e.imageType===s.Covers&&(n=v.cover),e.imageType===s.Banners&&(n=v.banner),e.imageType===s.Posters&&(n=v.poster),e.imageType===s.Pdf&&(n=v.pdf),e.imageType===s.Link&&(n=v.link),n&&(t+=` ${n}`),e.className&&(t+=` ${e.className}`),t}function b(e){let{data:t,imageOptions:r,appLink:i,preload:a,preventLoad:s,analyticsOptions:l,analyticsData:u,imageClassName:d,alt:f}=e,p=``;typeof t==`string`?p=t:n.isObject(t)&&(p=t.url);let h=p&&r?c.createUrl(p,r):p;return(0,m.jsx)(`div`,{className:y(e),style:e.imageStyle,children:(0,m.jsxs)(o,{appLink:i,analyticsData:u,analyticsOptions:l,onClick:e.onClick,preventFocus:e.preventFocus,className:e.appLinkClassName,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[e.children,h&&(0,m.jsx)(_,{src:h,alt:f,forceLoad:a,preventLoad:s,extraClasses:d,errorFallbackImageSrc:e.errorFallbackImageSrc,errorFallbackImageClassName:e.errorFallbackImageClassName,onLoad:e.onLoad})]})})}var x=[`bg-pink`,`bg-orange`,...[`bg-green`,`bg-cyan`,`bg-teal`,`bg-blue`,`bg-indigo`,`bg-purple`]];function S(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z`,clipRule:`evenodd`})})}function C(e){return(0,m.jsx)(`svg`,{...e,viewBox:`0 0 24 21`,children:(0,m.jsx)(`path`,{d:`M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5`,fill:`currentColor`})})}function w(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,d:`M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17`})})}function T(e,t){return t[e.charCodeAt(0)%t.length]}var E={baseFallbackContainer:`_baseFallbackContainer_14tjv_1`,svgFallbackContainer:`_svgFallbackContainer_14tjv_1`,subjectFallbackContainer:`_subjectFallbackContainer_14tjv_9`,subjectFallbackContainerSmall:`_subjectFallbackContainerSmall_14tjv_18`,subjectFallbackContainerLarge:`_subjectFallbackContainerLarge_14tjv_21`,seriesItemFallback:`_seriesItemFallback_14tjv_24`,playlistItemFallback:`_playlistItemFallback_14tjv_24`,playlistFallback:`_playlistFallback_14tjv_28`,posterFallback:`_posterFallback_14tjv_29`,subjectFallback:`_subjectFallback_14tjv_9`,fallbackThumbnailImage:`_fallbackThumbnailImage_14tjv_47`,videoFallback:`_videoFallback_14tjv_55`,folderFallback:`_folderFallback_14tjv_56`},D=function(e){return e[e.Playlist=0]=`Playlist`,e[e.PlaylistThumbnail=1]=`PlaylistThumbnail`,e[e.Series=2]=`Series`,e[e.SeriesThumbnail=3]=`SeriesThumbnail`,e[e.Subject=4]=`Subject`,e[e.TallSubject=5]=`TallSubject`,e[e.Video=6]=`Video`,e[e.Folder=7]=`Folder`,e}({}),O=function(e){return e[e.Svg=0]=`Svg`,e[e.Image=1]=`Image`,e}({}),k=function(e){return e[e.Large=0]=`Large`,e[e.Small=1]=`Small`,e}({});function A(e,t,n){if(t===D.Subject){let e=n===k.Large?E.subjectFallbackContainerLarge:E.subjectFallbackContainerSmall;return`${E.subjectFallbackContainer} ${e}`}return e===O.Svg?t===D.SeriesThumbnail||t===D.PlaylistThumbnail?`${E.svgFallbackContainer} rounded-3`:E.svgFallbackContainer:E.baseFallbackContainer}function j(e){return e===D.SeriesThumbnail?E.seriesItemFallback:e===D.PlaylistThumbnail?E.playlistItemFallback:e===D.Playlist?E.playlistFallback:e===D.Series||e===D.TallSubject?E.posterFallback:e===D.Subject?`${E.subjectFallback} svg-container d-inline-block`:``}function M(e){return e===D.SeriesThumbnail||e===D.PlaylistThumbnail?S:e===D.Playlist?C:e===D.Series?w:e===D.Subject||e===D.TallSubject?l:null}function N(e){return e===D.Subject?i.ExtraLarge:i.Standard}P.defaultProps={mediaType:O.Svg,containerClassSize:k.Large};function P(e){let{type:t,mediaType:n,extraClasses:r,containerClassSize:i}=e;if(t===D.Video)return(0,m.jsx)(`div`,{className:`${E.videoFallback} ${e.extraClasses} bg-light-blue`});if(t===D.Folder)return(0,m.jsx)(`div`,{className:`${E.folderFallback} ${e.extraClasses} ${T(e.name,x)}`});let o=j(t),s=M(t),c=N(t),l=`${A(n,t,i)}`;return r&&(l+=` ${e.extraClasses}`),(0,m.jsx)(`div`,{className:l,children:n===O.Svg?(0,m.jsx)(a,{svg:s,className:`${o} ${e.svgContainerClassName??``}`,tagName:`div`,size:c}):(0,m.jsx)(`div`,{className:E.fallbackThumbnailImage,style:{backgroundImage:`url('${s}')`}})})}export{b as a,x as i,D as n,T as r,P as t};
2
- //# sourceMappingURL=Bl6b6nAn2.chunk.js.map
1
+ import{Kn as e,P as t,ct as n,st as r}from"./BSV_W0cK.chunk.js";import{i,r as a,v as o}from"./COrUmz0l.chunk.js";import{n as s}from"./DHk1ZJ0C.chunk.js";import{t as c}from"./B6C1sxIU.chunk.js";import{n as l}from"./CbaXvmNl2.chunk.js";import{n as u}from"./BYLD2f9R2.chunk.js";function d(e={}){let{prevent:t,rootMargin:n,triggerOnce:r=!0}=e,[i,a,o]=u({triggerOnce:r,rootMargin:n});return(t===!0||window.IntersectionObserver===void 0)&&(a=!0,i=null),{ref:i,inView:a,initialized:!!o}}var f={image:`_image_pp6me_1`},p=e(r()),m=t(),h=`500px`,g=`data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=`,_=p.memo(function(e){let{forceLoad:t,extraClasses:n=``,errorFallbackImageSrc:r,preventLoad:i=!1,errorFallbackImageClassName:a,src:o,alt:s,...c}=e,{ref:l,inView:u}=d({rootMargin:h}),[_,v]=p.useState(!1);p.useEffect(()=>{if(!t&&!u||i)return;let e=new Image;return e.onerror=()=>{v(!0),r&&(e.src=r)},e.src=o,()=>e.onerror=null},[u,i]);function y(){return _&&r?r:e.src}if(_&&!r)return(0,m.jsx)(m.Fragment,{});if(!l)return(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,alt:s,src:y(),...c});let b={alt:s,...c,...(u||t)&&!i?{src:y()}:{src:g}};return t||(b.ref=l),(0,m.jsx)(`img`,{className:`${f.image} ${n} ${_&&a||``}`,...b})}),v={image:`_image_1himm_1`,thumbnail:`_thumbnail_1himm_13`,tallPoster:`_tallPoster_1himm_16`,cover:`_cover_1himm_19`,banner:`_banner_1himm_22`,poster:`_poster_1himm_25`,pdf:`_pdf_1himm_28`,link:`_link_1himm_31`};function y(e){let t=v.image,n=``;return e.imageType===s.Thumbnails&&(n=`thumbnail ${v.thumbnail}`),e.imageType===s.TallPosters&&(n=v.tallPoster),e.imageType===s.Covers&&(n=v.cover),e.imageType===s.Banners&&(n=v.banner),e.imageType===s.Posters&&(n=v.poster),e.imageType===s.Pdf&&(n=v.pdf),e.imageType===s.Link&&(n=v.link),n&&(t+=` ${n}`),e.className&&(t+=` ${e.className}`),t}function b(e){let{data:t,imageOptions:r,appLink:i,preload:a,preventLoad:s,analyticsOptions:l,analyticsData:u,imageClassName:d,alt:f}=e,p=``;typeof t==`string`?p=t:n.isObject(t)&&(p=t.url);let h=p&&r?c.createUrl(p,r):p;return(0,m.jsx)(`div`,{className:y(e),style:e.imageStyle,children:(0,m.jsxs)(o,{appLink:i,analyticsData:u,analyticsOptions:l,onClick:e.onClick,preventFocus:e.preventFocus,className:e.appLinkClassName,openInNewTab:e.openInNewTab,forcePageLoad:e.forcePageLoad,children:[e.children,h&&(0,m.jsx)(_,{src:h,alt:f,forceLoad:a,preventLoad:s,extraClasses:d,errorFallbackImageSrc:e.errorFallbackImageSrc,errorFallbackImageClassName:e.errorFallbackImageClassName,onLoad:e.onLoad})]})})}var x=[`bg-pink`,`bg-orange`,...[`bg-green`,`bg-cyan`,`bg-teal`,`bg-blue`,`bg-indigo`,`bg-purple`]];function S(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z`,clipRule:`evenodd`})})}function C(e){return(0,m.jsx)(`svg`,{...e,viewBox:`0 0 24 21`,children:(0,m.jsx)(`path`,{d:`M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5`,fill:`currentColor`})})}function w(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{fill:`currentColor`,d:`M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17`})})}function T(e,t){return t[e.charCodeAt(0)%t.length]}var E={baseFallbackContainer:`_baseFallbackContainer_14tjv_1`,svgFallbackContainer:`_svgFallbackContainer_14tjv_1`,subjectFallbackContainer:`_subjectFallbackContainer_14tjv_9`,subjectFallbackContainerSmall:`_subjectFallbackContainerSmall_14tjv_18`,subjectFallbackContainerLarge:`_subjectFallbackContainerLarge_14tjv_21`,seriesItemFallback:`_seriesItemFallback_14tjv_24`,playlistItemFallback:`_playlistItemFallback_14tjv_24`,playlistFallback:`_playlistFallback_14tjv_28`,posterFallback:`_posterFallback_14tjv_29`,subjectFallback:`_subjectFallback_14tjv_9`,fallbackThumbnailImage:`_fallbackThumbnailImage_14tjv_47`,videoFallback:`_videoFallback_14tjv_55`,folderFallback:`_folderFallback_14tjv_56`},D=function(e){return e[e.Playlist=0]=`Playlist`,e[e.PlaylistThumbnail=1]=`PlaylistThumbnail`,e[e.Series=2]=`Series`,e[e.SeriesThumbnail=3]=`SeriesThumbnail`,e[e.Subject=4]=`Subject`,e[e.TallSubject=5]=`TallSubject`,e[e.Video=6]=`Video`,e[e.Folder=7]=`Folder`,e}({}),O=function(e){return e[e.Svg=0]=`Svg`,e[e.Image=1]=`Image`,e}({}),k=function(e){return e[e.Large=0]=`Large`,e[e.Small=1]=`Small`,e}({});function A(e,t,n){if(t===D.Subject){let e=n===k.Large?E.subjectFallbackContainerLarge:E.subjectFallbackContainerSmall;return`${E.subjectFallbackContainer} ${e}`}return e===O.Svg?t===D.SeriesThumbnail||t===D.PlaylistThumbnail?`${E.svgFallbackContainer} rounded-3`:E.svgFallbackContainer:E.baseFallbackContainer}function j(e){return e===D.SeriesThumbnail?E.seriesItemFallback:e===D.PlaylistThumbnail?E.playlistItemFallback:e===D.Playlist?E.playlistFallback:e===D.Series||e===D.TallSubject?E.posterFallback:e===D.Subject?`${E.subjectFallback} svg-container d-inline-block`:``}function M(e){return e===D.SeriesThumbnail||e===D.PlaylistThumbnail?S:e===D.Playlist?C:e===D.Series?w:e===D.Subject||e===D.TallSubject?l:null}function N(e){return e===D.Subject?i.ExtraLarge:i.Standard}P.defaultProps={mediaType:O.Svg,containerClassSize:k.Large};function P(e){let{type:t,mediaType:n,extraClasses:r,containerClassSize:i}=e;if(t===D.Video)return(0,m.jsx)(`div`,{className:`${E.videoFallback} ${e.extraClasses} bg-light-blue`});if(t===D.Folder)return(0,m.jsx)(`div`,{className:`${E.folderFallback} ${e.extraClasses} ${T(e.name,x)}`});let o=j(t),s=M(t),c=N(t),l=`${A(n,t,i)}`;return r&&(l+=` ${e.extraClasses}`),(0,m.jsx)(`div`,{className:l,children:n===O.Svg?(0,m.jsx)(a,{svg:s,className:`${o} ${e.svgContainerClassName??``}`,tagName:`div`,size:c}):(0,m.jsx)(`div`,{className:E.fallbackThumbnailImage,style:{backgroundImage:`url('${s}')`}})})}export{b as a,x as i,D as n,T as r,P as t};
2
+ //# sourceMappingURL=Bs_S7mFn2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Bl6b6nAn2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Bs_S7mFn2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseLazyLoad.ts","../../../../libs/shared/src/components/lazy-image/lazy-image.module.scss","../../../../libs/shared/src/components/lazy-image/LazyImage.tsx","../../../../libs/shared/src/components/image/image.module.scss","../../../../libs/shared/src/components/image/BaseImage.tsx","../../../../libs/shared/src/constants/ColourClassNames.ts","../../../../libs/shared/src/images/svg/actions/PlaySvg.tsx","../../../../libs/shared/src/images/svg/objects/ImageSvg.tsx","../../../../libs/shared/src/images/svg/objects/SeriesSvg.tsx","../../../../libs/shared/src/utils/getBgColorClass.ts","../../../../libs/shared/src/components/image/image-fallback.module.scss","../../../../libs/shared/src/components/image/ImageFallback.tsx"],"sourcesContent":["import { useInView } from 'react-intersection-observer';\n\ninterface LazyUtils {\n ref: (node?: Element) => void | null;\n inView: boolean;\n\n /**\n * Use this if you want to hide something on start\n * and then show it as something else leaves the window\n * e.g. The student feed floating jump to button\n */\n initialized: boolean;\n}\n\ninterface UseLazyLoadOptions {\n prevent?: boolean;\n /**\n * See rootMagin here: https://www.npmjs.com/package/react-intersection-observer#api\n * Thow allows us to have items load ahead of coming into the viewport\n * for example thumbnail images as we scroll\n */\n rootMargin?: string;\n triggerOnce?: boolean;\n}\n\nexport function useLazyLoad(options: UseLazyLoadOptions = {}): LazyUtils {\n const { prevent, rootMargin, triggerOnce = true } = options;\n\n // eslint-disable-next-line\n let [ ref, inView, entry ] = useInView({ triggerOnce, rootMargin: rootMargin });\n\n if (prevent === true || typeof (window as any).IntersectionObserver === 'undefined') {\n inView = true;\n ref = null;\n }\n\n return { ref, inView, initialized: !!entry };\n}\n",":local {\n .image {\n width: 100%;\n height: 100%;\n }\n}\n","import * as React from 'react';\n\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\n\nimport styles from './lazy-image.module.scss';\n\n/**\n * This value means we will load images 500px above\n * or below the viewport so that they are loaded\n * by the time they come into the viewport\n */\nconst PRELOAD_DISTANCE = '500px';\n/**\n * Atomically small blank GIF as placeholder for image src to prevent w3 validator error\n */\nconst PLACEHOLDER_SRC = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\n\ninterface LazyImageProps extends React.ImgHTMLAttributes<HTMLImageElement> {\n forceLoad?: boolean;\n preventLoad?: boolean;\n extraClasses?: string;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n}\n\nexport const LazyImage = React.memo(function(props: LazyImageProps): React.ReactElement {\n const { forceLoad, extraClasses = '', errorFallbackImageSrc, preventLoad = false, errorFallbackImageClassName, src, alt, ...propsWithoutSrc } = props;\n \n const { ref, inView } = useLazyLoad({ rootMargin: PRELOAD_DISTANCE });\n const [ error, setError ] = React.useState(false);\n\n React.useEffect(() => {\n if ((!forceLoad && !inView) || preventLoad)\n return;\n \n // https://stackoverflow.com/questions/2342132/waiting-for-image-to-load-in-javascript\n const img = new Image();\n\n img.onerror = () => {\n setError(true);\n \n if (errorFallbackImageSrc)\n img.src = errorFallbackImageSrc;\n };\n\n img.src = src;\n return () => img.onerror = null;\n }, [ inView, preventLoad ]);\n\n function getSrc(): string {\n if (error && errorFallbackImageSrc)\n return errorFallbackImageSrc;\n\n return props.src;\n }\n\n if (error && !errorFallbackImageSrc)\n return <></>;\n\n if (!ref) {\n return (\n <img\n className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`}\n alt={alt}\n src={getSrc()}\n {...propsWithoutSrc}\n />\n );\n }\n\n const imgProps: React.DetailedHTMLProps<React.ImgHTMLAttributes<HTMLImageElement>, HTMLImageElement> = {\n alt,\n ...propsWithoutSrc,\n ...(((inView || forceLoad) && !preventLoad) ? { src: getSrc() } : { src: PLACEHOLDER_SRC })\n };\n\n if (!forceLoad)\n imgProps.ref = ref;\n\n return (\n <img className={`${styles.image} ${extraClasses} ${error ? errorFallbackImageClassName || '' : ''}`} {...imgProps} />\n );\n});\n",":local {\n .image {\n position: relative;\n width: 100%;\n height: 100%;\n\n :global(img) {\n position: absolute;\n top: 0; \n bottom: 0; \n left: 0; \n right: 0;\n }\n }\n\n // Aspect Ratios\n .thumbnail {\n padding-bottom: 56.25%;\n }\n\n .tallPoster {\n padding-bottom: 177.77778%;\n }\n\n .cover {\n padding-bottom: 100%;\n }\n\n .banner {\n padding-bottom: 18.50%\n }\n\n .poster {\n padding-bottom: 150%;\n }\n\n .pdf {\n :global(img) {\n height: auto;\n }\n }\n\n .link {\n :global(img) {\n width: auto;\n margin: 0 auto;\n }\n }\n}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { ImageType } from 'libs/shared/enums/Images';\nimport { Image } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './image.module.scss';\n\nfunction getImageClassName(props: BaseImageProps): string {\n let className = styles.image;\n\n let imageTypeClassName = '';\n\n if (props.imageType === ImageType.Thumbnails)\n imageTypeClassName = `thumbnail ${styles.thumbnail}`;\n\n if (props.imageType === ImageType.TallPosters)\n imageTypeClassName = styles.tallPoster;\n\n if (props.imageType === ImageType.Covers)\n imageTypeClassName = styles.cover;\n\n if (props.imageType === ImageType.Banners)\n imageTypeClassName = styles.banner;\n\n if (props.imageType === ImageType.Posters)\n imageTypeClassName = styles.poster;\n\n if (props.imageType === ImageType.Pdf)\n imageTypeClassName = styles.pdf;\n\n if (props.imageType === ImageType.Link)\n imageTypeClassName = styles.link;\n\n if (imageTypeClassName)\n className += ` ${imageTypeClassName}`;\n\n if (props.className)\n className += ` ${props.className}`;\n\n return className;\n}\n\ninterface BaseImageProps {\n data: Image | string;\n imageOptions?: ImageOptions;\n appLink?: Core.AppLink;\n imageType?: ImageType;\n className?: string;\n imageClassName?: string;\n imageStyle?: HashObject;\n preload?: boolean;\n preventLoad?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n errorFallbackImageSrc?: string;\n errorFallbackImageClassName?: string;\n alt?: string;\n preventFocus?: boolean;\n appLinkClassName?: string;\n onClick?: () => void;\n onLoad?: () => void;\n openInNewTab?: boolean;\n forcePageLoad?: boolean;\n}\n\nexport function BaseImage(props: React.PropsWithChildren<BaseImageProps>): React.ReactElement {\n const {\n data,\n imageOptions,\n appLink,\n preload,\n preventLoad,\n analyticsOptions,\n analyticsData,\n imageClassName,\n alt\n } = props;\n\n let url = '';\n\n if (typeof data === 'string') {\n url = data;\n } else if (ObjectHelper.isObject(data)) {\n url = data.url;\n }\n\n const imageUrl = (url && imageOptions) ? ImageHelper.createUrl(url, imageOptions) : url;\n\n return (\n <div className={getImageClassName(props)} style={props.imageStyle}>\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n onClick={props.onClick}\n preventFocus={props.preventFocus}\n className={props.appLinkClassName}\n openInNewTab={props.openInNewTab}\n forcePageLoad={props.forcePageLoad}\n >\n {props.children}\n {imageUrl && (\n <LazyImage\n src={imageUrl}\n alt={alt}\n forceLoad={preload}\n preventLoad={preventLoad}\n extraClasses={imageClassName}\n errorFallbackImageSrc={props.errorFallbackImageSrc}\n errorFallbackImageClassName={props.errorFallbackImageClassName}\n onLoad={props.onLoad}\n />\n )}\n </AppLink>\n </div>\n );\n}\n\n","/**\n * Use this instead of the list below if you need to render the clickview logo\n * on the background you're rendering.\n */\nexport const LOGO_SAFE_BG_CLASS_NAMES = [\n 'bg-green',\n 'bg-cyan',\n 'bg-teal',\n 'bg-blue',\n 'bg-indigo',\n 'bg-purple'\n];\n\nexport const BG_COLOUR_CLASS_NAMES = [\n 'bg-pink',\n 'bg-orange',\n ...LOGO_SAFE_BG_CLASS_NAMES\n];\n","import React from 'react';\n\nexport function PlaySvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n fillRule='evenodd'\n d='M7.76 6.078a.5.5 0 0 0-.76.427v11a.5.5 0 0 0 .76.426l9.003-5.5a.5.5 0 0 0 0-.853z'\n clipRule='evenodd'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function ImageSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props} viewBox='0 0 24 21'>\n <path\n d='M22.5 1A1.5 1.5 0 0 1 24 2.5v18a1.5 1.5 0 0 1-1.5 1.5h-21A1.5 1.5 0 0 1 0 20.5v-18A1.5 1.5 0 0 1 1.5 1zm0 1.5h-21v18h21zm-8.21 4.092 5.84 9a.75.75 0 0 1-1.26.816L13.638 8.34l-2.523 3.591a.75.75 0 0 1-1.144.1l-.889-.89L5.1 16.45a.75.75 0 0 1-1.2-.9l4.5-6a.75.75 0 0 1 1.13-.08l.87.869 2.648-3.77a.75.75 0 0 1 1.243.023M6 4.75a2.25 2.25 0 1 1 0 4.5 2.25 2.25 0 0 1 0-4.5m0 1.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5'\n fill='currentColor'\n />\n </svg>\n );\n}\n","import React from 'react';\n\nexport function SeriesSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n fill='currentColor'\n d='M20.283 4C21.229 4 22 4.745 22 5.66v8.74c0 .726-.478 1.338-1.151 1.565l.088-10.22a.657.657 0 0 0-.664-.66H6.351A1.71 1.71 0 0 1 7.951 4zm-2.059 1.933c.947 0 1.718.745 1.718 1.65v8.74c.01.726-.479 1.339-1.142 1.565l.088-10.24a.647.647 0 0 0-.664-.64H4.293a1.7 1.7 0 0 1 1.6-1.075zM16.05 7.95c.946 0 1.707.744 1.707 1.659v8.74c0 .915-.77 1.65-1.707 1.65H3.707C2.761 20 2 19.255 2 18.35V9.61c0-.915.77-1.66 1.707-1.66zm-.01 1.084H3.717a.647.647 0 0 0-.663.64v8.609c0 .358.292.641.663.641H16.03c.371 0 .664-.283.664-.641V9.676c.01-.358-.283-.641-.654-.641M8.546 12.39v3.178c0 .17.205.264.342.17l2.254-1.594c.117-.085.117-.255 0-.33l-2.264-1.593c-.137-.095-.332 0-.332.17'\n />\n </svg>\n );\n}\n","export function getBgColorClass(name: string, classNames: string[]): string {\n return classNames[name.charCodeAt(0) % classNames.length];\n}\n\nexport function getDeterministicBgColorClass(name: string, classNames: string[]): string {\n const sum = name\n .split('')\n .reduce(\n (acc, char) => acc + char.charCodeAt(0),\n 0\n );\n \n return classNames[sum % classNames.length];\n}\n",":local {\n .baseFallbackContainer {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n\n .svgFallbackContainer {\n @extend .baseFallbackContainer;\n background-color: $gray-100;\n }\n\n .subjectFallbackContainer {\n background-color: $gray-100;\n height: 100%;\n border-top-left-radius: $border-radius-lg;\n border-bottom-left-radius: $border-radius-lg;\n\n position: absolute;\n top: 0;\n left: 0;\n\n &Small {\n width: 2rem;\n }\n\n &Large {\n width: 5rem;\n }\n }\n\n .seriesItemFallback, .playlistItemFallback {\n @extend %icon;\n width: 3.75rem;\n height: 3.75rem;\n }\n\n .playlistFallback,\n .posterFallback { // poster fallback is used by series' & and subjects tall poster's\n @extend %icon;\n width: 7.5rem;\n height: 7.5rem;\n\n svg {\n width: 100%;\n height: 100%;\n }\n }\n\n .subjectFallback {\n @extend %icon;\n }\n\n %icon {\n position: absolute;\n top: 50%;\n left: 50%;\n color: $gray-400;\n transform: translate3D(-50%, -50%, 0);\n transition: opacity 100ms ease-in-out;\n }\n\n .fallbackThumbnailImage {\n padding: map-get($spacers, 1);\n background-size: cover;\n background-position: center;\n background-repeat: no-repeat;\n width: 100%;\n height: 100%;\n }\n\n .videoFallback,\n .folderFallback {\n position: absolute;\n width: 100%;\n height: 100%;\n }\n}","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { PlaySvg } from 'libs/shared/images/svg/actions/PlaySvg';\nimport { FileImgSvg } from 'libs/shared/images/svg/objects/FileImgSvg';\nimport { ImageSvg } from 'libs/shared/images/svg/objects/ImageSvg';\nimport { SeriesSvg } from 'libs/shared/images/svg/objects/SeriesSvg';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nimport styles from './image-fallback.module.scss';\n\nexport enum ImageFallbackType {\n Playlist,\n PlaylistThumbnail,\n Series,\n SeriesThumbnail,\n Subject,\n TallSubject,\n Video,\n Folder\n}\n\nexport enum ImageFallbackMediaType {\n Svg,\n Image\n}\n\nexport enum ContainerClassSize {\n Large,\n Small\n}\n\nfunction getContainerClass(\n type: ImageFallbackMediaType,\n objectType: ImageFallbackType,\n containerClassSize: ContainerClassSize\n): string {\n if (objectType === ImageFallbackType.Subject) {\n const containerSizeClass = containerClassSize === ContainerClassSize.Large ?\n styles.subjectFallbackContainerLarge :\n styles.subjectFallbackContainerSmall;\n\n return `${styles.subjectFallbackContainer} ${containerSizeClass}`;\n }\n\n if (type === ImageFallbackMediaType.Svg) {\n if (objectType === ImageFallbackType.SeriesThumbnail || objectType === ImageFallbackType.PlaylistThumbnail)\n return `${styles.svgFallbackContainer} rounded-3`;\n \n return styles.svgFallbackContainer;\n }\n\n return styles.baseFallbackContainer;\n}\n\nfunction getClassByType(type: ImageFallbackType): string {\n if (type === ImageFallbackType.SeriesThumbnail)\n return styles.seriesItemFallback;\n\n if (type === ImageFallbackType.PlaylistThumbnail)\n return styles.playlistItemFallback;\n\n if (type === ImageFallbackType.Playlist)\n return styles.playlistFallback;\n\n if (type === ImageFallbackType.Series || type === ImageFallbackType.TallSubject)\n return styles.posterFallback;\n\n if (type === ImageFallbackType.Subject)\n return `${styles.subjectFallback} svg-container d-inline-block`;\n\n return '';\n}\n\nfunction getMedia(type: ImageFallbackType) {\n if (type === ImageFallbackType.SeriesThumbnail || type === ImageFallbackType.PlaylistThumbnail)\n return PlaySvg;\n\n if (type === ImageFallbackType.Playlist)\n return ImageSvg;\n\n if (type === ImageFallbackType.Series)\n return SeriesSvg;\n\n if (type === ImageFallbackType.Subject || type === ImageFallbackType.TallSubject)\n return FileImgSvg;\n\n return null;\n}\n\nfunction getSize(type: ImageFallbackType): SvgContainerSize {\n if (type === ImageFallbackType.Subject)\n return SvgContainerSize.ExtraLarge;\n\n return SvgContainerSize.Standard;\n}\n\ninterface ImageFallbackProps {\n type: ImageFallbackType;\n mediaType?: ImageFallbackMediaType;\n extraClasses?: string;\n svgContainerClassName?: string;\n name?: string;\n containerClassSize?: ContainerClassSize;\n}\n\nImageFallback.defaultProps = {\n mediaType: ImageFallbackMediaType.Svg,\n containerClassSize: ContainerClassSize.Large\n};\n\nexport function ImageFallback(props: ImageFallbackProps): JSX.Element {\n const { type, mediaType, extraClasses, containerClassSize } = props;\n\n if (type === ImageFallbackType.Video)\n return <div className={`${styles.videoFallback} ${props.extraClasses} bg-light-blue`} />;\n\n if (type === ImageFallbackType.Folder)\n return <div className={`${styles.folderFallback} ${props.extraClasses} ${getBgColorClass(props.name, BG_COLOUR_CLASS_NAMES)}`} />;\n\n const typeClass = getClassByType(type);\n const media = getMedia(type);\n const size = getSize(type);\n\n let className = `${getContainerClass(mediaType, type, containerClassSize)}`;\n\n if (extraClasses)\n className += ` ${props.extraClasses}`;\n\n return (\n <div className={className}>\n {mediaType === ImageFallbackMediaType.Svg ?\n (\n <SvgContainer\n svg={media}\n className={`${typeClass} ${props.svgContainerClassName ?? ''}`}\n tagName='div'\n size={size}\n />\n ) : (\n <div className={styles.fallbackThumbnailImage} style={{ backgroundImage: `url('${media}')` }} />\n )\n }\n </div>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{t as n}from"./app-DLh9RnwX.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
- //# sourceMappingURL=Dxi0YECT.chunk.js.map
1
+ import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{t as n}from"./app-BeoBow2q.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
2
+ //# sourceMappingURL=BxKrer6h.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dxi0YECT.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}
1
+ {"version":3,"file":"BxKrer6h.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/ReportsNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/ReportsErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"oGAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}
@@ -1,2 +1,2 @@
1
- import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{i as n,n as r,o as i,r as a}from"./COrUmz0l.chunk.js";import{t as o}from"./Bqlm3yF_.chunk.js";import{n as s,t as c}from"./CvNkMOyE.chunk.js";import{d as l,m as u,y as d}from"./app-DLh9RnwX.js";import{n as f,t as p}from"./CbaXvmNl2.chunk.js";var m=function(e){return e.Exchange=`exchange`,e.Streamable=`streamable`,e.MoviesAndTv=`movies_and_tv`,e.Twig=`twig`,e}({});t();var h=e();function g(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M15.333 7.333a.667.667 0 1 0 0 1.334h2.39L13 13.39l-2.862-2.862a.667.667 0 0 0-.943 0l-5 5a.667.667 0 1 0 .943.942l4.529-4.528 2.862 2.862c.26.26.682.26.942 0l5.196-5.196V12A.667.667 0 0 0 20 12V8a.667.667 0 0 0-.667-.666z`,clipRule:`evenodd`})})}function _(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M7.5 5A2.5 2.5 0 0 0 5 7.5v9A2.5 2.5 0 0 0 7.5 19h9a2.5 2.5 0 0 0 2.5-2.5v-9A2.5 2.5 0 0 0 16.5 5zm0-1h9A3.5 3.5 0 0 1 20 7.5v9a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-9A3.5 3.5 0 0 1 7.5 4M11 9a.5.5 0 1 1 0 1H9.5A1.5 1.5 0 0 0 8 11.5v1A1.5 1.5 0 0 0 9.5 14H11a.5.5 0 1 1 0 1H9.5A2.5 2.5 0 0 1 7 12.5v-1A2.5 2.5 0 0 1 9.5 9zm5 0a.5.5 0 1 1 0 1h-1.5a1.5 1.5 0 0 0-1.5 1.5v1a1.5 1.5 0 0 0 1.5 1.5H16a.5.5 0 1 1 0 1h-1.5a2.5 2.5 0 0 1-2.5-2.5v-1A2.5 2.5 0 0 1 14.5 9z`,fill:`currentColor`})})}var v=function(e){return e.Folder=`category`,e.CategoryTree=`category_tree`,e.CustomLibrary=`custom_library`,e.HostedLibrary=`hosted_library`,e.Exchange=`exchange`,e.Workspace=`workspace`,e.Video=`video`,e.Clip=`clip`,e.Interactive=`interactive`,e}({}),y=function(e){return e.Pdf=`pdf`,e.Image=`image`,e.PowerPoint=`powerpoint`,e.Document=`document`,e.Excel=`excel`,e.Zip=`archive`,e.File=`text`,e}({});function b(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.09 7-2.3-3.4h1.82l1.4 2.28 1.45-2.28h1.72l-2.29 3.41 2.49 3.73h-1.87l-1.56-2.47-1.59 2.47H8.6z`,fill:`currentColor`})})}function x(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M9.833 15.006c-.328.765-.657 1.316-.997 1.619-.35.312-.762.394-1.138.15a1.4 1.4 0 0 1-.358-.322c-.298-.402-.194-.843.165-1.2.228-.227.563-.433.983-.63.226-.106.466-.204.706-.292q.213-.539.43-1.205a42 42 0 0 0 .866-3.123c-.435-.563-.75-1.057-.924-1.473-.28-.67-.211-1.242.372-1.494.56-.24 1.047-.086 1.307.391.17.312.234.736.231 1.26a8 8 0 0 1-.086 1.088q.238.293.513.606a31 31 0 0 0 1.73 1.81 14 14 0 0 0 .863.761q.697-.106 1.213-.105c.947.002 1.554.319 1.415 1.079-.107.585-.514.888-1.06.834-.365-.036-.781-.224-1.259-.532a9 9 0 0 1-.538-.38 21 21 0 0 0-.944.191q-.586.131-1.22.3a45 45 0 0 0-2.27.667M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm4.43 8.39q-.104.315-.207.606l.055-.016a46 46 0 0 1 1.608-.459 34 34 0 0 1 1.538-.37 16 16 0 0 1-.378-.35 32 32 0 0 1-1.882-1.98l-.083.32a39 39 0 0 1-.652 2.248zm-2.157 2.603q.18-.162.382-.51a2.4 2.4 0 0 0-.553.37c-.092.092-.09.086-.083.096a.5.5 0 0 0 .138.116c.017.01.025.01.116-.072m7.434-2.3q-.07 0-.146.002c.242.132.443.209.585.223.11.011.118.005.146-.145.005-.027-.095-.079-.585-.08m-5.36-5.49q.098.235.283.53v-.05c.003-.393-.044-.696-.128-.85-.046-.086-.063-.091-.23-.02-.04.018-.05.092.075.39`,fill:`currentColor`})})}function S(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.07 6.96h1.22q.27 0 .52-.04a1.2 1.2 0 0 0 .44-.155.84.84 0 0 0 .305-.325q.115-.21.115-.55t-.115-.55a.84.84 0 0 0-.305-.325 1.2 1.2 0 0 0-.44-.155 3 3 0 0 0-.52-.04h-1.22zM9.5 8.6h3.22q.67 0 1.14.195t.765.515.43.73a2.7 2.7 0 0 1 0 1.695q-.135.415-.43.735a2.1 2.1 0 0 1-.765.515q-.47.195-1.14.195h-1.65v2.56H9.5z`,fill:`currentColor`})})}function C(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h7l6 5v10a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m6.586 1H6v14h12V9.414zM13 10h3.5a.5.5 0 1 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 1 1 1 0z`,fill:`currentColor`})})}function w(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm8.77 10.74h-1.56L12 10.88h-.02l-1.19 4.86H9.2L7.31 8.6h1.57l1.13 4.86h.02l1.24-4.86h1.47l1.22 4.92h.02l1.17-4.92h1.54z`,fill:`currentColor`})})}function T(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5 0h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1z`,fill:`currentColor`})})}var E=`shared.shared-utils`,D={mapRatingToClass(e){return e?(e=>{switch(!0){case e<32:return`bg-purple`;case e<48:return`bg-green`;case e<80:return`bg-blue`;case e<96:return`bg-red`;case e<128:return`bg-pink`;case e>=128:return`bg-yellow`;default:return``}})(e):``},mapSourceToDisplayName(e,t){switch(e.type){case v.HostedLibrary:case v.CustomLibrary:return e.name;case v.Exchange:return o.getPhrase(E,`exchange`);case v.Workspace:return o.getPhrase(E,t?`myVideos`:`workspace`);default:return``}},mapSourceToClass(e){switch(e){case v.HostedLibrary:case v.CustomLibrary:return`bg-blue`;case v.Exchange:return`bg-green`;case v.Workspace:default:return`bg-red`}},isInteractive(e){return!!e?.interactives?.data?.length},mapTypeToSvg(e){let t={[y.Pdf]:x,[y.Image]:f,[y.PowerPoint]:S,[y.Document]:w,[y.Excel]:b,[y.Zip]:T,[y.File]:C}[e];return t||=p,t},mapTypeToClass(e){switch(e){case y.Pdf:return`icon-red`;case y.Image:return`icon-purple`;case y.Document:return`icon-blue`;case y.Excel:return`icon-green`;case y.PowerPoint:return`icon-orange`;case y.Zip:return`icon-teal`;case y.File:return`icon-gray`;default:return``}},mapTypeToExtension(e){return e?{pdf:`pdf`,image:`png`,powerpoint:`pptx`}[e.toLowerCase()]:``},mapTypeToName(e){if(!e)return``;switch(e){case y.Pdf:return o.getPhrase(E,`pdf`);case y.Image:return o.getPhrase(E,`image`);case y.Document:return o.getPhrase(E,`document`);case y.Excel:return o.getPhrase(E,`spreadsheet`);case y.PowerPoint:return o.getPhrase(E,`presentation`);case y.Zip:return o.getPhrase(E,`zipArchive`);case y.File:return o.getPhrase(E,`file`);default:return``}}},O=o.encloseNamespace(`shared.badges`),k=function(e){return e.DurationExact=`duration-exact`,e.DurationApproximate=`duration-approximate`,e.Interactive=`interactive`,e.Rating=`rating`,e.ProductionYear=`production-year`,e.Captions=`captions`,e.Status=`status`,e.Trending=`trending`,e.Count=`count`,e.Restriction=`restriction`,e.Source=`source`,e}({}),A={xs:n.ExtraSmall,sm:n.Small,std:n.Standard,lg:n.Large},j={xs:`badge-xs`,sm:`badge-sm`,std:`badge-std`,lg:`badge-lg`};function M(e){switch(e){case d.Published:case s.Published:return`bg-success`;case d.Archived:case d.Rejected:case s.Archived:return`bg-danger`;case d.Draft:case s.Draft:return`draft-badge px-2 rounded-pill text-nowrap d-flex align-items-center`;case d.Pending:case d.Processing:return`bg-warning`}}function N(e){return e.includes(m.Streamable)?`px-1 text-nowrap d-flex align-items-center ${u.streamable}`:e.includes(m.MoviesAndTv)?`bg-indigo text-white px-1 text-nowrap d-flex align-items-center`:e.includes(m.Exchange)?`bg-orange text-white px-1 text-nowrap d-flex align-items-center`:e.includes(m.Twig)?`bg-pink text-white px-1 text-nowrap d-flex align-items-center`:``}function P(e,t,n){let i=j[n],a=``;return e===k.DurationApproximate&&(a=`duration-badge-new px-2 rounded-pill text-nowrap d-flex align-items-center`),e===k.DurationExact&&(a=`duration-badge`),e===k.Interactive&&(a=`interactive-badge`),e===k.Rating&&(a=`rating-badge text-shadow ${D.mapRatingToClass(t.value)}`),e===k.ProductionYear&&(a=`production-year-badge text-shadow`),e===k.Captions?`p-0`:e===k.Status?`badge ${M(t)}`:e===k.Trending?`trending-badge px-1 d-flex align-items-center ${i}`:(e===k.Count&&(a=`count-badge px-1 rounded`),e===k.Restriction?r(`restriction-badge rounded-pill px-2 d-flex align-items-center`,l.mapRestrictionToClass(t.restrictions)):(e===k.Source&&(a=N(t)),r(`badge`,a)))}function F(e,t,n){if(e===k.Interactive)return O(`interactive`);if(e===k.DurationApproximate)return c.ToDisplayDurationNewStyle(t);if(e===k.DurationExact)return c.ToDisplayDuration(t);if(e===k.Rating)return t.code;if(e===k.ProductionYear)return t;if(e===k.Captions)return(0,h.jsx)(a,{svg:_});if(e===k.Status)return typeof t==`number`?d[t]:t;if(e===k.Trending)return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a,{svg:g,size:A[n]}),(0,h.jsx)(`span`,{className:`ps-1`,children:t})]});if(e===k.Count)return t;if(e===k.Restriction)return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a,{svg:l.mapRestrictionToSvg(t.restrictions)}),(0,h.jsx)(`span`,{children:l.mapRestrictionToText(t.restrictions,t.yearGroups)})]});if(e===k.Source){let e=t;return e.includes(m.Streamable)?`streamable`:e.includes(m.MoviesAndTv)?`movies + tv`:e.includes(m.Exchange)?`exchange`:e.includes(m.Twig)?`twig`:`-`}}function I(e,t){return e===k.Rating?{title:t.name,placement:`top`}:null}function L(e,t){return typeof t==`boolean`?!!t:e===k.Rating?t&&!!t.value:e===k.Interactive||e===k.Captions?!!t?.length||!!t?.data?.length:e===k.Status?typeof t==`number`||typeof t==`string`:!!t}function R(e){let{type:t,data:n,size:r=`std`}=e;if(!L(t,n))return(0,h.jsx)(h.Fragment,{});let a=P(t,n,r);a=`${a} ${e.inline?`d-inline-block`:`d-flex justify-content-center`} ${e.className||``}`;let o=F(t,n,r),s=I(t,n),c=e.inline&&`d-inline-block`;return s?(0,h.jsx)(`div`,{className:`badge-wrapper d-inline`,children:(0,h.jsx)(i,{...s,spanHack:!0,spanHackClassName:c,children:(0,h.jsx)(`span`,{className:a,children:o})})}):(0,h.jsx)(`span`,{className:`${a} badge-wrapper`,children:o})}export{k as n,_ as r,R as t};
2
- //# sourceMappingURL=CMw7H8FK2.chunk.js.map
1
+ import{P as e,st as t}from"./BSV_W0cK.chunk.js";import{i as n,n as r,o as i,r as a}from"./COrUmz0l.chunk.js";import{t as o}from"./Bqlm3yF_.chunk.js";import{n as s,t as c}from"./CvNkMOyE.chunk.js";import{d as l,m as u,y as d}from"./app-BeoBow2q.js";import{n as f,t as p}from"./CbaXvmNl2.chunk.js";var m=function(e){return e.Exchange=`exchange`,e.Streamable=`streamable`,e.MoviesAndTv=`movies_and_tv`,e.Twig=`twig`,e}({});t();var h=e();function g(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{fill:`currentColor`,fillRule:`evenodd`,d:`M15.333 7.333a.667.667 0 1 0 0 1.334h2.39L13 13.39l-2.862-2.862a.667.667 0 0 0-.943 0l-5 5a.667.667 0 1 0 .943.942l4.529-4.528 2.862 2.862c.26.26.682.26.942 0l5.196-5.196V12A.667.667 0 0 0 20 12V8a.667.667 0 0 0-.667-.666z`,clipRule:`evenodd`})})}function _(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M7.5 5A2.5 2.5 0 0 0 5 7.5v9A2.5 2.5 0 0 0 7.5 19h9a2.5 2.5 0 0 0 2.5-2.5v-9A2.5 2.5 0 0 0 16.5 5zm0-1h9A3.5 3.5 0 0 1 20 7.5v9a3.5 3.5 0 0 1-3.5 3.5h-9A3.5 3.5 0 0 1 4 16.5v-9A3.5 3.5 0 0 1 7.5 4M11 9a.5.5 0 1 1 0 1H9.5A1.5 1.5 0 0 0 8 11.5v1A1.5 1.5 0 0 0 9.5 14H11a.5.5 0 1 1 0 1H9.5A2.5 2.5 0 0 1 7 12.5v-1A2.5 2.5 0 0 1 9.5 9zm5 0a.5.5 0 1 1 0 1h-1.5a1.5 1.5 0 0 0-1.5 1.5v1a1.5 1.5 0 0 0 1.5 1.5H16a.5.5 0 1 1 0 1h-1.5a2.5 2.5 0 0 1-2.5-2.5v-1A2.5 2.5 0 0 1 14.5 9z`,fill:`currentColor`})})}var v=function(e){return e.Folder=`category`,e.CategoryTree=`category_tree`,e.CustomLibrary=`custom_library`,e.HostedLibrary=`hosted_library`,e.Exchange=`exchange`,e.Workspace=`workspace`,e.Video=`video`,e.Clip=`clip`,e.Interactive=`interactive`,e}({}),y=function(e){return e.Pdf=`pdf`,e.Image=`image`,e.PowerPoint=`powerpoint`,e.Document=`document`,e.Excel=`excel`,e.Zip=`archive`,e.File=`text`,e}({});function b(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.09 7-2.3-3.4h1.82l1.4 2.28 1.45-2.28h1.72l-2.29 3.41 2.49 3.73h-1.87l-1.56-2.47-1.59 2.47H8.6z`,fill:`currentColor`})})}function x(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M9.833 15.006c-.328.765-.657 1.316-.997 1.619-.35.312-.762.394-1.138.15a1.4 1.4 0 0 1-.358-.322c-.298-.402-.194-.843.165-1.2.228-.227.563-.433.983-.63.226-.106.466-.204.706-.292q.213-.539.43-1.205a42 42 0 0 0 .866-3.123c-.435-.563-.75-1.057-.924-1.473-.28-.67-.211-1.242.372-1.494.56-.24 1.047-.086 1.307.391.17.312.234.736.231 1.26a8 8 0 0 1-.086 1.088q.238.293.513.606a31 31 0 0 0 1.73 1.81 14 14 0 0 0 .863.761q.697-.106 1.213-.105c.947.002 1.554.319 1.415 1.079-.107.585-.514.888-1.06.834-.365-.036-.781-.224-1.259-.532a9 9 0 0 1-.538-.38 21 21 0 0 0-.944.191q-.586.131-1.22.3a45 45 0 0 0-2.27.667M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm4.43 8.39q-.104.315-.207.606l.055-.016a46 46 0 0 1 1.608-.459 34 34 0 0 1 1.538-.37 16 16 0 0 1-.378-.35 32 32 0 0 1-1.882-1.98l-.083.32a39 39 0 0 1-.652 2.248zm-2.157 2.603q.18-.162.382-.51a2.4 2.4 0 0 0-.553.37c-.092.092-.09.086-.083.096a.5.5 0 0 0 .138.116c.017.01.025.01.116-.072m7.434-2.3q-.07 0-.146.002c.242.132.443.209.585.223.11.011.118.005.146-.145.005-.027-.095-.079-.585-.08m-5.36-5.49q.098.235.283.53v-.05c.003-.393-.044-.696-.128-.85-.046-.086-.063-.091-.23-.02-.04.018-.05.092.075.39`,fill:`currentColor`})})}function S(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5.07 6.96h1.22q.27 0 .52-.04a1.2 1.2 0 0 0 .44-.155.84.84 0 0 0 .305-.325q.115-.21.115-.55t-.115-.55a.84.84 0 0 0-.305-.325 1.2 1.2 0 0 0-.44-.155 3 3 0 0 0-.52-.04h-1.22zM9.5 8.6h3.22q.67 0 1.14.195t.765.515.43.73a2.7 2.7 0 0 1 0 1.695q-.135.415-.43.735a2.1 2.1 0 0 1-.765.515q-.47.195-1.14.195h-1.65v2.56H9.5z`,fill:`currentColor`})})}function C(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h7l6 5v10a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m6.586 1H6v14h12V9.414zM13 10h3.5a.5.5 0 1 1 0 1h-4a.5.5 0 0 1-.5-.5v-4a.5.5 0 1 1 1 0z`,fill:`currentColor`})})}function w(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm8.77 10.74h-1.56L12 10.88h-.02l-1.19 4.86H9.2L7.31 8.6h1.57l1.13 4.86h.02l1.24-4.86h1.47l1.22 4.92h.02l1.17-4.92h1.54z`,fill:`currentColor`})})}function T(e){return(0,h.jsx)(`svg`,{...e,children:(0,h.jsx)(`path`,{d:`M6 4h12a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1m0 1v14h12V5zm5 0h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1zm-1 1h1v1h-1zm1 1h1v1h-1z`,fill:`currentColor`})})}var E=`shared.shared-utils`,D={mapRatingToClass(e){return e?(e=>{switch(!0){case e<32:return`bg-purple`;case e<48:return`bg-green`;case e<80:return`bg-blue`;case e<96:return`bg-red`;case e<128:return`bg-pink`;case e>=128:return`bg-yellow`;default:return``}})(e):``},mapSourceToDisplayName(e,t){switch(e.type){case v.HostedLibrary:case v.CustomLibrary:return e.name;case v.Exchange:return o.getPhrase(E,`exchange`);case v.Workspace:return o.getPhrase(E,t?`myVideos`:`workspace`);default:return``}},mapSourceToClass(e){switch(e){case v.HostedLibrary:case v.CustomLibrary:return`bg-blue`;case v.Exchange:return`bg-green`;case v.Workspace:default:return`bg-red`}},isInteractive(e){return!!e?.interactives?.data?.length},mapTypeToSvg(e){let t={[y.Pdf]:x,[y.Image]:f,[y.PowerPoint]:S,[y.Document]:w,[y.Excel]:b,[y.Zip]:T,[y.File]:C}[e];return t||=p,t},mapTypeToClass(e){switch(e){case y.Pdf:return`icon-red`;case y.Image:return`icon-purple`;case y.Document:return`icon-blue`;case y.Excel:return`icon-green`;case y.PowerPoint:return`icon-orange`;case y.Zip:return`icon-teal`;case y.File:return`icon-gray`;default:return``}},mapTypeToExtension(e){return e?{pdf:`pdf`,image:`png`,powerpoint:`pptx`}[e.toLowerCase()]:``},mapTypeToName(e){if(!e)return``;switch(e){case y.Pdf:return o.getPhrase(E,`pdf`);case y.Image:return o.getPhrase(E,`image`);case y.Document:return o.getPhrase(E,`document`);case y.Excel:return o.getPhrase(E,`spreadsheet`);case y.PowerPoint:return o.getPhrase(E,`presentation`);case y.Zip:return o.getPhrase(E,`zipArchive`);case y.File:return o.getPhrase(E,`file`);default:return``}}},O=o.encloseNamespace(`shared.badges`),k=function(e){return e.DurationExact=`duration-exact`,e.DurationApproximate=`duration-approximate`,e.Interactive=`interactive`,e.Rating=`rating`,e.ProductionYear=`production-year`,e.Captions=`captions`,e.Status=`status`,e.Trending=`trending`,e.Count=`count`,e.Restriction=`restriction`,e.Source=`source`,e}({}),A={xs:n.ExtraSmall,sm:n.Small,std:n.Standard,lg:n.Large},j={xs:`badge-xs`,sm:`badge-sm`,std:`badge-std`,lg:`badge-lg`};function M(e){switch(e){case d.Published:case s.Published:return`bg-success`;case d.Archived:case d.Rejected:case s.Archived:return`bg-danger`;case d.Draft:case s.Draft:return`draft-badge px-2 rounded-pill text-nowrap d-flex align-items-center`;case d.Pending:case d.Processing:return`bg-warning`}}function N(e){return e.includes(m.Streamable)?`px-1 text-nowrap d-flex align-items-center ${u.streamable}`:e.includes(m.MoviesAndTv)?`bg-indigo text-white px-1 text-nowrap d-flex align-items-center`:e.includes(m.Exchange)?`bg-orange text-white px-1 text-nowrap d-flex align-items-center`:e.includes(m.Twig)?`bg-pink text-white px-1 text-nowrap d-flex align-items-center`:``}function P(e,t,n){let i=j[n],a=``;return e===k.DurationApproximate&&(a=`duration-badge-new px-2 rounded-pill text-nowrap d-flex align-items-center`),e===k.DurationExact&&(a=`duration-badge`),e===k.Interactive&&(a=`interactive-badge`),e===k.Rating&&(a=`rating-badge text-shadow ${D.mapRatingToClass(t.value)}`),e===k.ProductionYear&&(a=`production-year-badge text-shadow`),e===k.Captions?`p-0`:e===k.Status?`badge ${M(t)}`:e===k.Trending?`trending-badge px-1 d-flex align-items-center ${i}`:(e===k.Count&&(a=`count-badge px-1 rounded`),e===k.Restriction?r(`restriction-badge rounded-pill px-2 d-flex align-items-center`,l.mapRestrictionToClass(t.restrictions)):(e===k.Source&&(a=N(t)),r(`badge`,a)))}function F(e,t,n){if(e===k.Interactive)return O(`interactive`);if(e===k.DurationApproximate)return c.ToDisplayDurationNewStyle(t);if(e===k.DurationExact)return c.ToDisplayDuration(t);if(e===k.Rating)return t.code;if(e===k.ProductionYear)return t;if(e===k.Captions)return(0,h.jsx)(a,{svg:_});if(e===k.Status)return typeof t==`number`?d[t]:t;if(e===k.Trending)return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a,{svg:g,size:A[n]}),(0,h.jsx)(`span`,{className:`ps-1`,children:t})]});if(e===k.Count)return t;if(e===k.Restriction)return(0,h.jsxs)(h.Fragment,{children:[(0,h.jsx)(a,{svg:l.mapRestrictionToSvg(t.restrictions)}),(0,h.jsx)(`span`,{children:l.mapRestrictionToText(t.restrictions,t.yearGroups)})]});if(e===k.Source){let e=t;return e.includes(m.Streamable)?`streamable`:e.includes(m.MoviesAndTv)?`movies + tv`:e.includes(m.Exchange)?`exchange`:e.includes(m.Twig)?`twig`:`-`}}function I(e,t){return e===k.Rating?{title:t.name,placement:`top`}:null}function L(e,t){return typeof t==`boolean`?!!t:e===k.Rating?t&&!!t.value:e===k.Interactive||e===k.Captions?!!t?.length||!!t?.data?.length:e===k.Status?typeof t==`number`||typeof t==`string`:!!t}function R(e){let{type:t,data:n,size:r=`std`}=e;if(!L(t,n))return(0,h.jsx)(h.Fragment,{});let a=P(t,n,r);a=`${a} ${e.inline?`d-inline-block`:`d-flex justify-content-center`} ${e.className||``}`;let o=F(t,n,r),s=I(t,n),c=e.inline&&`d-inline-block`;return s?(0,h.jsx)(`div`,{className:`badge-wrapper d-inline`,children:(0,h.jsx)(i,{...s,spanHack:!0,spanHackClassName:c,children:(0,h.jsx)(`span`,{className:a,children:o})})}):(0,h.jsx)(`span`,{className:`${a} badge-wrapper`,children:o})}export{k as n,_ as r,R as t};
2
+ //# sourceMappingURL=C1m-1G6w2.chunk.js.map