@clickview/lite 0.50.1-rc.0 → 0.50.1-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (151) hide show
  1. package/dist/bundles.json +2 -2
  2. package/dist/css/{1313-lite-b05099b818.chunk.css → 1313-lite-6b1a20b3fe.chunk.css} +1 -1
  3. package/dist/css/{1402-lite-9489903efd.chunk.css → 1402-lite-8a07733b96.chunk.css} +1 -1
  4. package/dist/css/{3588-lite-f083d46330.chunk.css → 1407-lite-be6668ef3a.chunk.css} +1 -1
  5. package/dist/css/{5725-lite-789978250c.chunk.css → 1539-lite-a5772fefdb.chunk.css} +1 -1
  6. package/dist/css/{5769-lite-16efb24b77.chunk.css → 1567-lite-2ab4d6f863.chunk.css} +1 -1
  7. package/dist/css/{1602-lite-90df7cca5c.chunk.css → 1602-lite-8fb6cea449.chunk.css} +1 -1
  8. package/dist/css/{9818-lite-dca6b9e86d.chunk.css → 1850-lite-e9e8c03964.chunk.css} +1 -1
  9. package/dist/css/{2446-lite-6b11bdfdc1.chunk.css → 2446-lite-dfc41ecbea.chunk.css} +1 -1
  10. package/dist/css/{9211-lite-f00eb0266e.chunk.css → 2507-lite-9516182bdb.chunk.css} +1 -1
  11. package/dist/css/{2724-lite-24da60896e.chunk.css → 2724-lite-669b5b8120.chunk.css} +1 -1
  12. package/dist/css/{3070-lite-c0909f46f3.chunk.css → 3070-lite-6af4bd0c76.chunk.css} +1 -1
  13. package/dist/css/{3397-lite-dfab7385b6.chunk.css → 3397-lite-5b25e3a686.chunk.css} +1 -1
  14. package/dist/css/{3403-lite-4b92798a0c.chunk.css → 3403-lite-89bcc16133.chunk.css} +1 -1
  15. package/dist/css/{458-lite-c8a3139b8b.chunk.css → 3515-lite-66473d08ed.chunk.css} +1 -1
  16. package/dist/css/{1407-lite-f083d46330.chunk.css → 3588-lite-be6668ef3a.chunk.css} +1 -1
  17. package/dist/css/{3895-lite-b05099b818.chunk.css → 3895-lite-6b1a20b3fe.chunk.css} +1 -1
  18. package/dist/css/{4151-lite-fcc0fc8753.chunk.css → 4151-lite-9cbe9bba57.chunk.css} +1 -1
  19. package/dist/css/{3515-lite-c8a3139b8b.chunk.css → 458-lite-66473d08ed.chunk.css} +1 -1
  20. package/dist/css/{5114-lite-38330c6187.chunk.css → 5114-lite-06a1ac179b.chunk.css} +1 -1
  21. package/dist/css/{5242-lite-58cdcd1ec4.chunk.css → 5242-lite-3e960b685e.chunk.css} +1 -1
  22. package/dist/css/{5364-lite-93bfe767eb.chunk.css → 5364-lite-e8c416fe79.chunk.css} +1 -1
  23. package/dist/css/{1539-lite-789978250c.chunk.css → 5725-lite-a5772fefdb.chunk.css} +1 -1
  24. package/dist/css/{6759-lite-16efb24b77.chunk.css → 5769-lite-2ab4d6f863.chunk.css} +1 -1
  25. package/dist/css/{5803-lite-d1315afce2.chunk.css → 5803-lite-625e484692.chunk.css} +1 -1
  26. package/dist/css/{5810-lite-ba174cfe3d.chunk.css → 5810-lite-1224500e4d.chunk.css} +1 -1
  27. package/dist/css/{6181-lite-7558375a74.chunk.css → 6181-lite-ca9f6aeba1.chunk.css} +1 -1
  28. package/dist/css/{6189-lite-4c33c1b5c4.chunk.css → 6189-lite-20e4d47423.chunk.css} +1 -1
  29. package/dist/css/{6309-lite-a23dc59ecd.chunk.css → 6309-lite-bd0968a2c8.chunk.css} +1 -1
  30. package/dist/css/{6531-lite-9431296610.chunk.css → 6531-lite-1f6f3c392c.chunk.css} +1 -1
  31. package/dist/css/{1567-lite-16efb24b77.chunk.css → 6759-lite-2ab4d6f863.chunk.css} +1 -1
  32. package/dist/css/{6803-lite-16efb24b77.chunk.css → 6803-lite-2ab4d6f863.chunk.css} +1 -1
  33. package/dist/css/{6850-lite-769c93cb9e.chunk.css → 6850-lite-c1a8731a93.chunk.css} +1 -1
  34. package/dist/css/{7533-lite-d0ae59ec54.chunk.css → 7533-lite-206fce5dbd.chunk.css} +1 -1
  35. package/dist/css/{7777-lite-8067dea624.chunk.css → 7777-lite-48d916f95c.chunk.css} +1 -1
  36. package/dist/css/{8218-lite-fe8c54917b.chunk.css → 8218-lite-f54139cf27.chunk.css} +1 -1
  37. package/dist/css/{8316-lite-9083a6565c.chunk.css → 8316-lite-6036f465f0.chunk.css} +1 -1
  38. package/dist/css/{8354-lite-bc431d9d01.chunk.css → 8354-lite-8228cb401d.chunk.css} +1 -1
  39. package/dist/css/{8987-lite-95b3d79328.chunk.css → 8987-lite-6cd15b48d2.chunk.css} +1 -1
  40. package/dist/css/{9068-lite-c0341005e4.chunk.css → 9068-lite-c3a9ace963.chunk.css} +1 -1
  41. package/dist/css/{2507-lite-f00eb0266e.chunk.css → 9211-lite-9516182bdb.chunk.css} +1 -1
  42. package/dist/css/{9329-lite-a259b19412.chunk.css → 9329-lite-5f15379e31.chunk.css} +1 -1
  43. package/dist/css/{9417-lite-9083a6565c.chunk.css → 9417-lite-6036f465f0.chunk.css} +1 -1
  44. package/dist/css/{1850-lite-dca6b9e86d.chunk.css → 9818-lite-e9e8c03964.chunk.css} +1 -1
  45. package/dist/css/{lite-app-28b7b96628.css → lite-app-212404ee3a.css} +1 -1
  46. package/dist/scripts/{1313-455608bc46-lite.chunk.js → 1313-5a7170fb69-lite.chunk.js} +1 -1
  47. package/dist/scripts/{1313-455608bc46-lite.chunk.js.map → 1313-5a7170fb69-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{1402-d40dc88741-lite.chunk.js → 1402-39cb29d725-lite.chunk.js} +1 -1
  49. package/dist/scripts/{1402-d40dc88741-lite.chunk.js.map → 1402-39cb29d725-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{1407-3592ec24f2-lite.chunk.js → 1407-3bab3f00f6-lite.chunk.js} +1 -1
  51. package/dist/scripts/{1407-3592ec24f2-lite.chunk.js.map → 1407-3bab3f00f6-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{1567-edcff759b1-lite.chunk.js → 1567-b3141bc14f-lite.chunk.js} +1 -1
  53. package/dist/scripts/{1567-edcff759b1-lite.chunk.js.map → 1567-b3141bc14f-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{1602-173a4f272a-lite.chunk.js → 1602-dfe6928d65-lite.chunk.js} +1 -1
  55. package/dist/scripts/{1602-173a4f272a-lite.chunk.js.map → 1602-dfe6928d65-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{2446-acc94130ed-lite.chunk.js → 2446-eaa1d2ee7d-lite.chunk.js} +2 -2
  57. package/dist/scripts/{2446-acc94130ed-lite.chunk.js.map → 2446-eaa1d2ee7d-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js → 2507-fc744cab62-lite.chunk.js} +1 -1
  59. package/dist/scripts/{2507-bb4e17b1b3-lite.chunk.js.map → 2507-fc744cab62-lite.chunk.js.map} +1 -1
  60. package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js → 2724-060fdde41c-lite.chunk.js} +1 -1
  61. package/dist/scripts/{2724-ee3a51e0c9-lite.chunk.js.map → 2724-060fdde41c-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{3070-fb8eb47716-lite.chunk.js → 3070-b148205227-lite.chunk.js} +1 -1
  63. package/dist/scripts/{3070-fb8eb47716-lite.chunk.js.map → 3070-b148205227-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{3397-bb32e2287f-lite.chunk.js → 3397-cd6acb96c4-lite.chunk.js} +1 -1
  65. package/dist/scripts/{3397-bb32e2287f-lite.chunk.js.map → 3397-cd6acb96c4-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{3403-12c460d3f6-lite.chunk.js → 3403-d42b7125ae-lite.chunk.js} +1 -1
  67. package/dist/scripts/{3403-12c460d3f6-lite.chunk.js.map → 3403-d42b7125ae-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{3515-4de2fd7070-lite.chunk.js → 3515-0d5feefbe3-lite.chunk.js} +1 -1
  69. package/dist/scripts/{3515-4de2fd7070-lite.chunk.js.map → 3515-0d5feefbe3-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{3588-62e61bc526-lite.chunk.js → 3588-1c1c264291-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3588-62e61bc526-lite.chunk.js.map → 3588-1c1c264291-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/{3895-a54621a8c4-lite.chunk.js → 3895-cbeb003a0a-lite.chunk.js} +1 -1
  73. package/dist/scripts/{3895-a54621a8c4-lite.chunk.js.map → 3895-cbeb003a0a-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js → 4151-bb1e8aafcb-lite.chunk.js} +1 -1
  75. package/dist/scripts/{4151-ad0c6f107f-lite.chunk.js.map → 4151-bb1e8aafcb-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/{458-35c635a2ce-lite.chunk.js → 458-e3aaac093b-lite.chunk.js} +1 -1
  77. package/dist/scripts/{458-35c635a2ce-lite.chunk.js.map → 458-e3aaac093b-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js → 5114-15c4180b16-lite.chunk.js} +1 -1
  79. package/dist/scripts/{5114-fcfd260e0b-lite.chunk.js.map → 5114-15c4180b16-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{5242-2d752ff85e-lite.chunk.js → 5242-e2f40bdd0e-lite.chunk.js} +1 -1
  81. package/dist/scripts/{5242-2d752ff85e-lite.chunk.js.map → 5242-e2f40bdd0e-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js → 5364-fe4a00711f-lite.chunk.js} +1 -1
  83. package/dist/scripts/{5364-b081f5e1ca-lite.chunk.js.map → 5364-fe4a00711f-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{5725-6792ca3e92-lite.chunk.js → 5725-1592727a8f-lite.chunk.js} +1 -1
  85. package/dist/scripts/{5725-6792ca3e92-lite.chunk.js.map → 5725-1592727a8f-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/{5769-34ad224f5f-lite.chunk.js → 5769-e9f596e2b2-lite.chunk.js} +1 -1
  87. package/dist/scripts/{5769-34ad224f5f-lite.chunk.js.map → 5769-e9f596e2b2-lite.chunk.js.map} +1 -1
  88. package/dist/scripts/{5803-0005a9eb66-lite.chunk.js → 5803-7db6af5411-lite.chunk.js} +1 -1
  89. package/dist/scripts/{5803-0005a9eb66-lite.chunk.js.map → 5803-7db6af5411-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/{5810-a652483b8e-lite.chunk.js → 5810-c81d69aea8-lite.chunk.js} +2 -2
  91. package/dist/scripts/{5810-a652483b8e-lite.chunk.js.map → 5810-c81d69aea8-lite.chunk.js.map} +1 -1
  92. package/dist/scripts/{6102-f1851eca08-lite.chunk.js → 6102-38e3abf2fa-lite.chunk.js} +3 -3
  93. package/dist/scripts/{6102-f1851eca08-lite.chunk.js.map → 6102-38e3abf2fa-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js → 6181-55d2689d74-lite.chunk.js} +1 -1
  95. package/dist/scripts/{6181-7a4fc8e1e1-lite.chunk.js.map → 6181-55d2689d74-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js → 6189-b45080fab7-lite.chunk.js} +1 -1
  97. package/dist/scripts/{6189-ce9f0eeb31-lite.chunk.js.map → 6189-b45080fab7-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js → 6309-36ea0c9f2c-lite.chunk.js} +2 -2
  99. package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.map → 6309-36ea0c9f2c-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{6415-9d8b88c713-lite.chunk.js → 6415-5ac1a71471-lite.chunk.js} +1 -1
  101. package/dist/scripts/{6415-9d8b88c713-lite.chunk.js.map → 6415-5ac1a71471-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{6531-597262a181-lite.chunk.js → 6531-1325be9fb1-lite.chunk.js} +1 -1
  103. package/dist/scripts/{6531-597262a181-lite.chunk.js.map → 6531-1325be9fb1-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{6759-3f36472a49-lite.chunk.js → 6759-a7e1119553-lite.chunk.js} +1 -1
  105. package/dist/scripts/{6759-3f36472a49-lite.chunk.js.map → 6759-a7e1119553-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{6803-2275c83d96-lite.chunk.js → 6803-222bfeea55-lite.chunk.js} +1 -1
  107. package/dist/scripts/{6803-2275c83d96-lite.chunk.js.map → 6803-222bfeea55-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/6850-16bec85d3c-lite.chunk.js +3 -0
  109. package/dist/scripts/6850-16bec85d3c-lite.chunk.js.map +1 -0
  110. package/dist/scripts/{6948-84a5f8d76f-lite.chunk.js → 6948-23ec6a6370-lite.chunk.js} +2 -2
  111. package/dist/scripts/6948-23ec6a6370-lite.chunk.js.map +1 -0
  112. package/dist/scripts/{7533-e079b2af18-lite.chunk.js → 7533-9edee544c6-lite.chunk.js} +1 -1
  113. package/dist/scripts/{7533-e079b2af18-lite.chunk.js.map → 7533-9edee544c6-lite.chunk.js.map} +1 -1
  114. package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js → 7777-1c3490134e-lite.chunk.js} +1 -1
  115. package/dist/scripts/{7777-f0937ef1f5-lite.chunk.js.map → 7777-1c3490134e-lite.chunk.js.map} +1 -1
  116. package/dist/scripts/{8218-f3b81c7287-lite.chunk.js → 8218-088530bdf7-lite.chunk.js} +1 -1
  117. package/dist/scripts/{8218-f3b81c7287-lite.chunk.js.map → 8218-088530bdf7-lite.chunk.js.map} +1 -1
  118. package/dist/scripts/8316-ba6bae1f29-lite.chunk.js +2 -0
  119. package/dist/scripts/8316-ba6bae1f29-lite.chunk.js.map +1 -0
  120. package/dist/scripts/{8354-e30261b594-lite.chunk.js → 8354-d07c3bef5a-lite.chunk.js} +1 -1
  121. package/dist/scripts/{8354-e30261b594-lite.chunk.js.map → 8354-d07c3bef5a-lite.chunk.js.map} +1 -1
  122. package/dist/scripts/{8987-32190552fa-lite.chunk.js → 8987-c0c2790aab-lite.chunk.js} +1 -1
  123. package/dist/scripts/{8987-32190552fa-lite.chunk.js.map → 8987-c0c2790aab-lite.chunk.js.map} +1 -1
  124. package/dist/scripts/{9068-562c30f718-lite.chunk.js → 9068-554aa0d22b-lite.chunk.js} +1 -1
  125. package/dist/scripts/{9068-562c30f718-lite.chunk.js.map → 9068-554aa0d22b-lite.chunk.js.map} +1 -1
  126. package/dist/scripts/{9211-d4c7016679-lite.chunk.js → 9211-0381d3e715-lite.chunk.js} +1 -1
  127. package/dist/scripts/{9211-d4c7016679-lite.chunk.js.map → 9211-0381d3e715-lite.chunk.js.map} +1 -1
  128. package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js → 9329-798d826fc4-lite.chunk.js} +1 -1
  129. package/dist/scripts/{9329-5cf6baab9d-lite.chunk.js.map → 9329-798d826fc4-lite.chunk.js.map} +1 -1
  130. package/dist/scripts/9417-aa8d198d40-lite.chunk.js +2 -0
  131. package/dist/scripts/9417-aa8d198d40-lite.chunk.js.map +1 -0
  132. package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js → 9818-a2fa140139-lite.chunk.js} +1 -1
  133. package/dist/scripts/{9818-f63bdbbac4-lite.chunk.js.map → 9818-a2fa140139-lite.chunk.js.map} +1 -1
  134. package/dist/scripts/bundle-bb2e18c8ca.min.js +3 -0
  135. package/dist/scripts/{bundle-d20cb66d1a.min.js.map → bundle-bb2e18c8ca.min.js.map} +1 -1
  136. package/package.json +1 -1
  137. package/dist/scripts/6850-8770bfeefb-lite.chunk.js +0 -3
  138. package/dist/scripts/6850-8770bfeefb-lite.chunk.js.map +0 -1
  139. package/dist/scripts/6948-84a5f8d76f-lite.chunk.js.map +0 -1
  140. package/dist/scripts/8316-dad1824a5f-lite.chunk.js +0 -2
  141. package/dist/scripts/8316-dad1824a5f-lite.chunk.js.map +0 -1
  142. package/dist/scripts/9417-70c6489c67-lite.chunk.js +0 -2
  143. package/dist/scripts/9417-70c6489c67-lite.chunk.js.map +0 -1
  144. package/dist/scripts/bundle-d20cb66d1a.min.js +0 -3
  145. /package/dist/scripts/{2446-acc94130ed-lite.chunk.js.LICENSE.txt → 2446-eaa1d2ee7d-lite.chunk.js.LICENSE.txt} +0 -0
  146. /package/dist/scripts/{3588-62e61bc526-lite.chunk.js.LICENSE.txt → 3588-1c1c264291-lite.chunk.js.LICENSE.txt} +0 -0
  147. /package/dist/scripts/{5810-a652483b8e-lite.chunk.js.LICENSE.txt → 5810-c81d69aea8-lite.chunk.js.LICENSE.txt} +0 -0
  148. /package/dist/scripts/{6102-f1851eca08-lite.chunk.js.LICENSE.txt → 6102-38e3abf2fa-lite.chunk.js.LICENSE.txt} +0 -0
  149. /package/dist/scripts/{6309-dd3a8e7f21-lite.chunk.js.LICENSE.txt → 6309-36ea0c9f2c-lite.chunk.js.LICENSE.txt} +0 -0
  150. /package/dist/scripts/{6850-8770bfeefb-lite.chunk.js.LICENSE.txt → 6850-16bec85d3c-lite.chunk.js.LICENSE.txt} +0 -0
  151. /package/dist/scripts/{bundle-d20cb66d1a.min.js.LICENSE.txt → bundle-bb2e18c8ca.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/3403-12c460d3f6-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/apps/share/constants/TableTheme.ts","file:///app/packages/libs/shared/src/apps/share/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/share/components/shares-header/SharesHeader.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/partial-shared-by-me-table.scss","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/PartialSharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeViewUtils.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const imageOptions: ImageOptions = { size: ImageSize.Small };\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object) && !!props.showVideoMetadata;\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <VideoThumbnail\n video={props.object}\n imageOptions={imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n appLink={props.appLink}\n analyticsOptions={{ location: props.locationContext }}\n hideDuration\n hideMask\n size='sm'\n />\n }\n {!useVideoThumbnail &&\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n }\n </div>\n </div>\n );\n}","import { TableTheme } from 'libs/shared/components/table/Table';\n\nexport const SHARES_TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: `py-2 ps-2 text-nowrap`,\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center p-2'\n};","import { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: 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 [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\n\nexport const AnalyticsRouteHelper = {\n getObjectUrl(config: Config, object: BaseObject): string {\n const baseUrl = config.analyticsWebUrl;\n\n if (!baseUrl)\n return;\n\n let relativeUrl = '';\n\n switch (object.typeId) {\n case MasterType.Video:\n relativeUrl = `/videos/${object.id}/overview`;\n break;\n\n case MasterType.Clip:\n relativeUrl = `/clips/${object.id}/overview`;\n break;\n\n case MasterType.Interactive:\n relativeUrl = `/interactives/${object.id}/overview`;\n break;\n }\n\n if (!relativeUrl)\n return;\n\n return UrlHelper.safeUrlConcat(baseUrl, relativeUrl);\n }\n};","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'share.sharesHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SHARED_BY_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_BY_ME };\nconst SHARED_WITH_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_WITH_ME };\n\nfunction getPillTabs(): PillTab[] {\n const currentAppLink = ContextService.getCurrentRoute()?.appLink;\n\n return [\n {\n name: getPhrase('sharedByMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_BY_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_BY_ME_APP_LINK.action\n },\n {\n name: getPhrase('sharedWithMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_WITH_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_WITH_ME_APP_LINK.action\n }\n ];\n}\n\nexport function SharesHeader(): JSX.Element {\n return (\n <div className='pb-3'>\n <h1 className='h2 mb-3'>{getPhrase('shares')}</h1>\n <PillTabSelector tabs={getPillTabs()} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-secondary';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <div className={`${styles.avatarContainer} position-relative d-inline-block`}>\n <div\n className={`${styles.avatarWrapper} position-absolute w-100 h-100 bg-white rounded-circle`}\n style={{ left: `${props.index * -15}%`, zIndex: props.maxAvatars - props.index }}\n >\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </div>\n </div>\n );\n}\n\nexport function AnonymousSharedToAvatar(): JSX.Element {\n return (\n <div className={styles.avatarContainer}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} />\n </Tooltip>\n </div>\n );\n}\n\nexport function SharedLinkAvatar(): JSX.Element {\n return (\n <div className={styles.avatarContainer}>\n <Tooltip\n title={getPhrase('sharedLink')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Link} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <div>\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={styles.avatarContainer}\n getHiddenTooltip={getHiddenRecipientText}\n />\n </div>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: BaseObject[];\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\nexport function getColumns(\n index: number,\n dateHeading: string,\n getObjectAppLink: (object: BaseObject) => Core.AppLink,\n getObjectActions: (object: BaseObject) => ActionOptions[],\n imageCdnUrl: string,\n showStatus?: boolean,\n showViewCount?: boolean,\n breakpoints?: Breakpoints\n): Column<SharedByMeTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n return (\n <AppLink\n appLink={getObjectAppLink(value)}\n className='clamp-2'\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'shareRecipients',\n Cell: ({ value }) => {\n if (!value)\n return <SharedLinkAvatar />;\n\n if (!value.length)\n return <AnonymousSharedToAvatar />;\n\n return <SharedToAvatarList recipients={value} imageCdnUrl={imageCdnUrl} maxAvatars={isMobile ? 1 : 2} />;\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n \n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: BaseObject[],\n shareRecipients: BaseObject[],\n groupByDate: boolean,\n refreshTable: boolean\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects.find(o => o.id === s.objectId);\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients.find(s => s.id === r.id);\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [refreshTable]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: BaseObject[];\n shareRecipients: BaseObject[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n refreshTable?: boolean;\n breakpoints?: Breakpoints;\n}\n\nfunction SharedByMeTableMemo(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n !!props.refreshTable\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns(\n index,\n heading,\n props.getObjectAppLink,\n props.getObjectActions,\n props.imageCdnUrl,\n props.showStatus,\n props.showViewCount,\n props.breakpoints\n )}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}\n\nexport const SharedByMeTable = React.memo(SharedByMeTableMemo);","// extracted by mini-css-extract-plugin\nexport default {\"imageColumn\":\"uIOaA\",\"nameColumn\":\"Nta2B\",\"sharedToColumn\":\"XTJBC\",\"dateSharedColumn\":\"HdARK\",\"actionsColumn\":\"DXyZw\",\"heading\":\"XZ6o7\",\"image\":\"MolfU\",\"name\":\"MM43m\",\"avatar\":\"EboYM\",\"date\":\"by_XM\",\"actions\":\"_S2M_\"};","import React from 'react';\n\nimport styles from './partial-shared-by-me-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded`}>\n <div className={`d-flex align-items-center justify-content-center p-2 ${styles.imageColumn}`}>\n <div className={`partial-loading-background rounded w-100 ${styles.image}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.nameColumn}`}>\n <div className={`partial-loading-background w-75 ${styles.name}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.sharedToColumn}`}>\n <div className={`partial-loading-background ${styles.avatar}`} />\n </div>\n <div className={`d-none d-md-flex align-items-center p-2 ${styles.dateSharedColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`d-flex align-items-center justify-content-end p-2 ${styles.actionsColumn}`}>\n <div className={`partial-loading-background rounded me-2 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\ninterface PartialHeaderProps {\n fullHeader?: boolean;\n}\n\nfunction PartialHeader(props: PartialHeaderProps): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.imageColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.nameColumn} p-2`}>\n &nbsp;\n </div>\n <div className={`${styles.sharedToColumn} p-2`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <>&nbsp;</>\n }\n </div>\n <div className={`${styles.dateSharedColumn} p-2 d-none d-md-flex`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <>&nbsp;</>\n }\n </div>\n <div className={`${styles.actionsColumn} p-2`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialSharedByMeTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <PartialHeader fullHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UseBatchFetchResult } from 'libs/shared/hooks/UseBatchFetch';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, Config, DirectShare, Series, UnionShareObject } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n}\n\nexport function getRecipientIds(sentShares: UnionShareObject[]): string[] {\n return ArrayHelper.uniq(ArrayHelper.flatten(getDirectShares(sentShares).map(d => d.recipients ?? [])), 'id').map(r => r.id);\n}\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\nexport function getObjectAppLink(object: BaseObject): Core.AppLink {\n if (VideoHelper.isInteractive(object)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isClip(object)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isVideo(object)) {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Series) {\n return SeriesAppLinkHelper.getSeriesAppLink(object as Series);\n }\n}\n\nfunction getShareActionOptions(sharedObject: BaseObject, entityType: SharableEntityType): ActionOptions {\n return {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [sharedObject.id],\n params: { entityType }\n }\n };\n}\n\ninterface SeeUsageActionProps {\n label: string;\n url?: string;\n}\n\nfunction SeeUsageAction(props: SeeUsageActionProps): JSX.Element {\n return (\n <Tooltip title={props.label} spanHack>\n <a\n href={props.url}\n target='_blank'\n >\n <SvgContainer svgName={cvSvgLibrary.Chart} />\n </a>\n </Tooltip>\n );\n}\n\nfunction getSharedObjectActions(sharedObject: BaseObject, config: Config, isMobile: boolean): ActionOptions[] {\n let entityType: SharableEntityType;\n let seeUsagePhrase = 'viewUsage';\n\n if (VideoHelper.isVideo(sharedObject))\n entityType = 'video';\n\n if (VideoHelper.isInteractive(sharedObject)) {\n entityType = 'interactive';\n seeUsagePhrase = 'viewResults';\n }\n\n if (VideoHelper.isClip(sharedObject))\n entityType = 'clip';\n\n if (sharedObject.typeId === MasterType.Series)\n entityType = 'series';\n\n if (sharedObject.typeId === MasterType.Playlist)\n entityType = 'playlist';\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n }\n \n const sharedObjectActions = [getShareActionOptions(sharedObject, entityType)];\n\n const objectUrl = AnalyticsRouteHelper.getObjectUrl(config, sharedObject);\n if (objectUrl)\n sharedObjectActions.push({\n label: !isMobile\n ? () => <SeeUsageAction label={getPhrase(seeUsagePhrase)} url={objectUrl} />\n : getPhrase(seeUsagePhrase),\n className: 'btn btn-link',\n button: !isMobile,\n href: objectUrl,\n openInNewTab: true\n });\n\n return sharedObjectActions;\n}\n\nexport function useGetSharedObjectActions(breakpoints: Breakpoints): ((object: BaseObject) => ActionOptions[]) | null {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n return React.useCallback((object: BaseObject) => getSharedObjectActions(object, config.data, isMobile), [isMobile]);\n}\n\n/**\n * As we are displaying data in an infinite list, we only want to show partial loading\n * on the initial fetch.\n * Whenever a new page is fetched, `sharedObjects.data` and `recipients.data` will be `undefined`,\n * as their key will change. So instead of using those values to determine whether or not to\n * show partial loading, we save the first time that they load in state and then use that.\n */\nexport function usePartialLoading(\n sentShare: UnionShareObject[],\n hasFetchedSharedObjects: boolean,\n recipientIds: string[],\n hasFetchedRecipients: boolean,\n config: Flight.Response<Config>\n): boolean {\n const [ initialSharedObjectsLoaded, setInitialSharedObjectsLoaded ] = React.useState(hasFetchedSharedObjects);\n const [ initialRecipientsLoaded, setInitialRecipientsLoaded ] = React.useState(hasFetchedRecipients);\n\n React.useEffect(() => {\n if (hasFetchedSharedObjects)\n setInitialSharedObjectsLoaded(true);\n }, [hasFetchedSharedObjects]);\n\n React.useEffect(() => {\n if (hasFetchedRecipients)\n setInitialRecipientsLoaded(true);\n }, [hasFetchedRecipients]);\n\n if (sentShare && !sentShare.length)\n return false;\n\n return !sentShare\n || !initialSharedObjectsLoaded\n || (recipientIds.length && !initialRecipientsLoaded)\n || !config.data;\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n getBatchFetchResultAsArray,\n getObjectAppLink,\n getRecipientIds,\n useGetSharedObjectActions,\n usePartialLoading\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const dispatch = useDispatch();\n const breakpoints = useBreakpoints();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => ShareRequests.sentShare({ cursor });\n const fetchNext = (cursor?: string) => Flight.getFetch(dispatch)(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = ArrayHelper.uniq(sentShares?.map(s => s.objectId) ?? []);\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n !!sharedObjectsFetchResult.items,\n recipientIds,\n !!shareRecipientsFetchResult.items,\n config\n );\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sentSharesMemo = React.useMemo(() => sentShares, [ !!sentShares, isFetching ]);\n const sharedObjects = React.useMemo(() =>\n getBatchFetchResultAsArray(sharedObjectsFetchResult), [ !!sharedObjectsFetchResult.items, isFetching ]);\n const shareRecipients = React.useMemo(() =>\n getBatchFetchResultAsArray(shareRecipientsFetchResult), [ !!shareRecipientsFetchResult.items, isFetching ]);\n\n return (\n <div className='px-3'>\n <SharesHeader />\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentSharesMemo}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={config.data.imageCdnUrl}\n groupByDateShared\n refreshTable={isFetching}\n breakpoints={breakpoints}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["BASE_IMAGE_CLASS_NAME","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","imageOptions","size","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","type","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","useVideoThumbnail","showVideoMetadata","className","VideoThumbnail","video","textPosition","ThumbnailTextPosition","appLink","analyticsOptions","location","locationContext","hideDuration","hideMask","BaseImage","data","analyticsData","id","entity","ShareViewHelper","actionType","SHARES_TABLE_THEME","table","header","headerCell","row","cell","ShareHelper","groupByDateShared","dateToObjectMapping","Object","keys","sort","reverse","reduce","acc","date","heading","concat","mapActivityStatusToCheckMarkStatus","activityStatus","mapCheckMarkStatusToActivityStatus","checkMarkStatus","TabContents","tab","svgName","count","PillTabSelector","containerRef","borderRadius","listClassName","tabs","map","index","active","key","onClick","onSelect","onSelectTab","defaultProps","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","length","newBatches","push","forEach","find","batch","_id","filter","join","dispatch","state","idBatch","request","shouldFetch","items","isFetching","responses","i","response","v","some","k","AnalyticsRouteHelper","getObjectUrl","config","baseUrl","analyticsWebUrl","relativeUrl","mapColourToBsVariant","groupColour","getPhrase","SHARED_BY_ME_APP_LINK","application","action","SHARED_WITH_ME_APP_LINK","SharesHeader","currentAppLink","LanguageService","SharedByMeEmptyState","EmptyState","src","imageUrl","useInteractiveCopy","text","getStatusPhrase","share","ShareType","status","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","recipients","isPasswordProtected","Tooltip","title","spanHack","SvgContainer","S","spanHackClassName","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","classroomCount","groupCount","SharedToAvatar","user","item","classroom","classroomGroup","left","zIndex","maxAvatars","surname","Avatar","avatar","imageCdnUrl","initials","UserHelper","IconCircle","svgSize","variant","metadata","colour","AnonymousSharedToAvatar","SharedLinkAvatar","SharedToAvatarList","AvatarList","avatarItem","avatarContainerClassname","getHiddenTooltip","getDateShared","dateCreated","datesShared","r","dateShared","date1","date2","DateHelper","getColumns","dateHeading","getObjectAppLink","getObjectActions","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","value","minWidth","maxWidth","canNavigate","AppLink","Text","namespace","phrase","s","Actions","actions","statusColumn","viewCountColumn","splice","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","refreshTable","tableData","sharedObject","o","objectId","recipient","viewCount","Table","theme","PartialRow","PartialHeader","fullHeader","PartialSharedByMeTable","getBatchFetchResultAsArray","result","values","args","TextHelper","SeriesAppLinkHelper","getShareActionOptions","entityType","label","params","SeeUsageAction","href","target","SharedByMeView","useBreakpoints","currentUser","UserRequests","cursor","ShareRequests","fetchNext","hasMore","isFetchingSentShares","nextCursor","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","getDirectShares","d","getRecipientIds","shareRecipientsFetchResult","customerId","ConfigRequests","useSetPageMetadata","getSharedObjectActions","seeUsagePhrase","canConsume","sharedObjectActions","objectUrl","button","openInNewTab","useGetSharedObjectActions","showPartialLoading","sentShare","hasFetchedSharedObjects","hasFetchedRecipients","initialSharedObjectsLoaded","setInitialSharedObjectsLoaded","initialRecipientsLoaded","setInitialRecipientsLoaded","usePartialLoading","sentSharesMemo","InfiniteScrollFooter","ImageUrls","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","idx","floor","toString","unit"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/3403-d42b7125ae-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.tsx","file:///app/packages/libs/shared/src/apps/share/constants/TableTheme.ts","file:///app/packages/libs/shared/src/apps/share/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/share/components/shares-header/SharesHeader.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/partial-shared-by-me-table.scss","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/PartialSharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeViewUtils.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const imageOptions: ImageOptions = { size: ImageSize.Small };\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object) && !!props.showVideoMetadata;\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <VideoThumbnail\n video={props.object}\n imageOptions={imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n appLink={props.appLink}\n analyticsOptions={{ location: props.locationContext }}\n hideDuration\n hideMask\n size='sm'\n />\n }\n {!useVideoThumbnail &&\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n }\n </div>\n </div>\n );\n}","import { TableTheme } from 'libs/shared/components/table/Table';\n\nexport const SHARES_TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: `py-2 ps-2 text-nowrap`,\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center p-2'\n};","import { format } from 'timeago.js';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { CheckMarkStatus } from 'libs/shared/components/check-mark-button/CheckMarkButton';\nimport { ShareActivityStatus } from 'libs/shared/enums/ShareActivityStatus';\n\ninterface ObjectWithDateShared {\n dateShared: string;\n}\n\ntype GroupedByDate<T extends ObjectWithDateShared> = { [date: string]: T[] };\n\nexport const ShareHelper = {\n groupByDateShared<T extends ObjectWithDateShared>(data: T[]): GroupedByDate<T> {\n const dateToObjectMapping: GroupedByDate<T> = ArrayHelper.groupBy(data, 'dateShared');\n\n const sortedDates = Object.keys(dateToObjectMapping).sort().reverse();\n\n // Create a sorted mapping between dates and the \"ObjectWithDateShared\" objects\n return sortedDates.reduce((acc: GroupedByDate<T>, date) => {\n const heading = format(date);\n\n if (!acc[heading])\n acc[heading] = [];\n\n acc[heading] = acc[heading].concat(dateToObjectMapping[date]);\n return acc;\n }, {});\n },\n\n mapActivityStatusToCheckMarkStatus(activityStatus: ShareActivityStatus): CheckMarkStatus {\n switch (activityStatus) {\n case ShareActivityStatus.Complete:\n return CheckMarkStatus.Complete;\n case ShareActivityStatus.Incomplete:\n return CheckMarkStatus.Incomplete;\n case ShareActivityStatus.None:\n return CheckMarkStatus.None;\n }\n },\n\n mapCheckMarkStatusToActivityStatus(checkMarkStatus: CheckMarkStatus): ShareActivityStatus {\n switch (checkMarkStatus) {\n case CheckMarkStatus.Complete:\n return ShareActivityStatus.Complete;\n case CheckMarkStatus.Incomplete:\n return ShareActivityStatus.Incomplete;\n case CheckMarkStatus.None:\n return ShareActivityStatus.None;\n }\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: 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 [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\n\nexport const AnalyticsRouteHelper = {\n getObjectUrl(config: Config, object: BaseObject): string {\n const baseUrl = config.analyticsWebUrl;\n\n if (!baseUrl)\n return;\n\n let relativeUrl = '';\n\n switch (object.typeId) {\n case MasterType.Video:\n relativeUrl = `/videos/${object.id}/overview`;\n break;\n\n case MasterType.Clip:\n relativeUrl = `/clips/${object.id}/overview`;\n break;\n\n case MasterType.Interactive:\n relativeUrl = `/interactives/${object.id}/overview`;\n break;\n }\n\n if (!relativeUrl)\n return;\n\n return UrlHelper.safeUrlConcat(baseUrl, relativeUrl);\n }\n};","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'share.sharesHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SHARED_BY_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_BY_ME };\nconst SHARED_WITH_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_WITH_ME };\n\nfunction getPillTabs(): PillTab[] {\n const currentAppLink = ContextService.getCurrentRoute()?.appLink;\n\n return [\n {\n name: getPhrase('sharedByMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_BY_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_BY_ME_APP_LINK.action\n },\n {\n name: getPhrase('sharedWithMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_WITH_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_WITH_ME_APP_LINK.action\n }\n ];\n}\n\nexport function SharesHeader(): JSX.Element {\n return (\n <div className='pb-3'>\n <h1 className='h2 mb-3'>{getPhrase('shares')}</h1>\n <PillTabSelector tabs={getPillTabs()} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-secondary';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <div className={`${styles.avatarContainer} position-relative d-inline-block`}>\n <div\n className={`${styles.avatarWrapper} position-absolute w-100 h-100 bg-white rounded-circle`}\n style={{ left: `${props.index * -15}%`, zIndex: props.maxAvatars - props.index }}\n >\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </div>\n </div>\n );\n}\n\nexport function AnonymousSharedToAvatar(): JSX.Element {\n return (\n <div className={styles.avatarContainer}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} />\n </Tooltip>\n </div>\n );\n}\n\nexport function SharedLinkAvatar(): JSX.Element {\n return (\n <div className={styles.avatarContainer}>\n <Tooltip\n title={getPhrase('sharedLink')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Link} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <div>\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={styles.avatarContainer}\n getHiddenTooltip={getHiddenRecipientText}\n />\n </div>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: BaseObject[];\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\nexport function getColumns(\n index: number,\n dateHeading: string,\n getObjectAppLink: (object: BaseObject) => Core.AppLink,\n getObjectActions: (object: BaseObject) => ActionOptions[],\n imageCdnUrl: string,\n showStatus?: boolean,\n showViewCount?: boolean,\n breakpoints?: Breakpoints\n): Column<SharedByMeTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n return (\n <AppLink\n appLink={getObjectAppLink(value)}\n className='clamp-2'\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'shareRecipients',\n Cell: ({ value }) => {\n if (!value)\n return <SharedLinkAvatar />;\n\n if (!value.length)\n return <AnonymousSharedToAvatar />;\n\n return <SharedToAvatarList recipients={value} imageCdnUrl={imageCdnUrl} maxAvatars={isMobile ? 1 : 2} />;\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n \n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: BaseObject[],\n shareRecipients: BaseObject[],\n groupByDate: boolean,\n refreshTable: boolean\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects.find(o => o.id === s.objectId);\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients.find(s => s.id === r.id);\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [refreshTable]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: BaseObject[];\n shareRecipients: BaseObject[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n refreshTable?: boolean;\n breakpoints?: Breakpoints;\n}\n\nfunction SharedByMeTableMemo(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n !!props.refreshTable\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns(\n index,\n heading,\n props.getObjectAppLink,\n props.getObjectActions,\n props.imageCdnUrl,\n props.showStatus,\n props.showViewCount,\n props.breakpoints\n )}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}\n\nexport const SharedByMeTable = React.memo(SharedByMeTableMemo);","// extracted by mini-css-extract-plugin\nexport default {\"imageColumn\":\"uIOaA\",\"nameColumn\":\"Nta2B\",\"sharedToColumn\":\"XTJBC\",\"dateSharedColumn\":\"HdARK\",\"actionsColumn\":\"DXyZw\",\"heading\":\"XZ6o7\",\"image\":\"MolfU\",\"name\":\"MM43m\",\"avatar\":\"EboYM\",\"date\":\"by_XM\",\"actions\":\"_S2M_\"};","import React from 'react';\n\nimport styles from './partial-shared-by-me-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded`}>\n <div className={`d-flex align-items-center justify-content-center p-2 ${styles.imageColumn}`}>\n <div className={`partial-loading-background rounded w-100 ${styles.image}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.nameColumn}`}>\n <div className={`partial-loading-background w-75 ${styles.name}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.sharedToColumn}`}>\n <div className={`partial-loading-background ${styles.avatar}`} />\n </div>\n <div className={`d-none d-md-flex align-items-center p-2 ${styles.dateSharedColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`d-flex align-items-center justify-content-end p-2 ${styles.actionsColumn}`}>\n <div className={`partial-loading-background rounded me-2 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\ninterface PartialHeaderProps {\n fullHeader?: boolean;\n}\n\nfunction PartialHeader(props: PartialHeaderProps): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.imageColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.nameColumn} p-2`}>\n &nbsp;\n </div>\n <div className={`${styles.sharedToColumn} p-2`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <>&nbsp;</>\n }\n </div>\n <div className={`${styles.dateSharedColumn} p-2 d-none d-md-flex`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <>&nbsp;</>\n }\n </div>\n <div className={`${styles.actionsColumn} p-2`}>\n &nbsp;\n </div>\n </div>\n );\n}\n\nexport function PartialSharedByMeTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <PartialHeader fullHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UseBatchFetchResult } from 'libs/shared/hooks/UseBatchFetch';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, Config, DirectShare, Series, UnionShareObject } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n}\n\nexport function getRecipientIds(sentShares: UnionShareObject[]): string[] {\n return ArrayHelper.uniq(ArrayHelper.flatten(getDirectShares(sentShares).map(d => d.recipients ?? [])), 'id').map(r => r.id);\n}\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\nexport function getObjectAppLink(object: BaseObject): Core.AppLink {\n if (VideoHelper.isInteractive(object)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isClip(object)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isVideo(object)) {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Series) {\n return SeriesAppLinkHelper.getSeriesAppLink(object as Series);\n }\n}\n\nfunction getShareActionOptions(sharedObject: BaseObject, entityType: SharableEntityType): ActionOptions {\n return {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [sharedObject.id],\n params: { entityType }\n }\n };\n}\n\ninterface SeeUsageActionProps {\n label: string;\n url?: string;\n}\n\nfunction SeeUsageAction(props: SeeUsageActionProps): JSX.Element {\n return (\n <Tooltip title={props.label} spanHack>\n <a\n href={props.url}\n target='_blank'\n >\n <SvgContainer svgName={cvSvgLibrary.Chart} />\n </a>\n </Tooltip>\n );\n}\n\nfunction getSharedObjectActions(sharedObject: BaseObject, config: Config, isMobile: boolean): ActionOptions[] {\n let entityType: SharableEntityType;\n let seeUsagePhrase = 'viewUsage';\n\n if (VideoHelper.isVideo(sharedObject))\n entityType = 'video';\n\n if (VideoHelper.isInteractive(sharedObject)) {\n entityType = 'interactive';\n seeUsagePhrase = 'viewResults';\n }\n\n if (VideoHelper.isClip(sharedObject))\n entityType = 'clip';\n\n if (sharedObject.typeId === MasterType.Series)\n entityType = 'series';\n\n if (sharedObject.typeId === MasterType.Playlist)\n entityType = 'playlist';\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n }\n \n const sharedObjectActions = [getShareActionOptions(sharedObject, entityType)];\n\n const objectUrl = AnalyticsRouteHelper.getObjectUrl(config, sharedObject);\n if (objectUrl)\n sharedObjectActions.push({\n label: !isMobile\n ? () => <SeeUsageAction label={getPhrase(seeUsagePhrase)} url={objectUrl} />\n : getPhrase(seeUsagePhrase),\n className: 'btn btn-link',\n button: !isMobile,\n href: objectUrl,\n openInNewTab: true\n });\n\n return sharedObjectActions;\n}\n\nexport function useGetSharedObjectActions(breakpoints: Breakpoints): ((object: BaseObject) => ActionOptions[]) | null {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n return React.useCallback((object: BaseObject) => getSharedObjectActions(object, config.data, isMobile), [isMobile]);\n}\n\n/**\n * As we are displaying data in an infinite list, we only want to show partial loading\n * on the initial fetch.\n * Whenever a new page is fetched, `sharedObjects.data` and `recipients.data` will be `undefined`,\n * as their key will change. So instead of using those values to determine whether or not to\n * show partial loading, we save the first time that they load in state and then use that.\n */\nexport function usePartialLoading(\n sentShare: UnionShareObject[],\n hasFetchedSharedObjects: boolean,\n recipientIds: string[],\n hasFetchedRecipients: boolean,\n config: Flight.Response<Config>\n): boolean {\n const [ initialSharedObjectsLoaded, setInitialSharedObjectsLoaded ] = React.useState(hasFetchedSharedObjects);\n const [ initialRecipientsLoaded, setInitialRecipientsLoaded ] = React.useState(hasFetchedRecipients);\n\n React.useEffect(() => {\n if (hasFetchedSharedObjects)\n setInitialSharedObjectsLoaded(true);\n }, [hasFetchedSharedObjects]);\n\n React.useEffect(() => {\n if (hasFetchedRecipients)\n setInitialRecipientsLoaded(true);\n }, [hasFetchedRecipients]);\n\n if (sentShare && !sentShare.length)\n return false;\n\n return !sentShare\n || !initialSharedObjectsLoaded\n || (recipientIds.length && !initialRecipientsLoaded)\n || !config.data;\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n getBatchFetchResultAsArray,\n getObjectAppLink,\n getRecipientIds,\n useGetSharedObjectActions,\n usePartialLoading\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const dispatch = useDispatch();\n const breakpoints = useBreakpoints();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => ShareRequests.sentShare({ cursor });\n const fetchNext = (cursor?: string) => Flight.getFetch(dispatch)(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = ArrayHelper.uniq(sentShares?.map(s => s.objectId) ?? []);\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n !!sharedObjectsFetchResult.items,\n recipientIds,\n !!shareRecipientsFetchResult.items,\n config\n );\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sentSharesMemo = React.useMemo(() => sentShares, [ !!sentShares, isFetching ]);\n const sharedObjects = React.useMemo(() =>\n getBatchFetchResultAsArray(sharedObjectsFetchResult), [ !!sharedObjectsFetchResult.items, isFetching ]);\n const shareRecipients = React.useMemo(() =>\n getBatchFetchResultAsArray(shareRecipientsFetchResult), [ !!shareRecipientsFetchResult.items, isFetching ]);\n\n return (\n <div className='px-3'>\n <SharesHeader />\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentSharesMemo}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={config.data.imageCdnUrl}\n groupByDateShared\n refreshTable={isFetching}\n breakpoints={breakpoints}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["BASE_IMAGE_CLASS_NAME","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","imageOptions","size","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","type","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","useVideoThumbnail","showVideoMetadata","className","VideoThumbnail","video","textPosition","ThumbnailTextPosition","appLink","analyticsOptions","location","locationContext","hideDuration","hideMask","BaseImage","data","analyticsData","id","entity","ShareViewHelper","actionType","SHARES_TABLE_THEME","table","header","headerCell","row","cell","ShareHelper","groupByDateShared","dateToObjectMapping","Object","keys","sort","reverse","reduce","acc","date","heading","concat","mapActivityStatusToCheckMarkStatus","activityStatus","mapCheckMarkStatusToActivityStatus","checkMarkStatus","TabContents","tab","svgName","count","PillTabSelector","containerRef","borderRadius","listClassName","tabs","map","index","active","key","onClick","onSelect","onSelectTab","defaultProps","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","length","newBatches","push","forEach","find","batch","_id","filter","join","dispatch","state","idBatch","request","shouldFetch","items","isFetching","responses","i","response","v","some","k","AnalyticsRouteHelper","getObjectUrl","config","baseUrl","analyticsWebUrl","relativeUrl","mapColourToBsVariant","groupColour","getPhrase","SHARED_BY_ME_APP_LINK","application","action","SHARED_WITH_ME_APP_LINK","SharesHeader","currentAppLink","LanguageService","SharedByMeEmptyState","EmptyState","src","imageUrl","useInteractiveCopy","text","getStatusPhrase","share","ShareType","status","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","recipients","isPasswordProtected","Tooltip","title","spanHack","SvgContainer","S","spanHackClassName","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","classroomCount","groupCount","SharedToAvatar","user","item","classroom","classroomGroup","left","zIndex","maxAvatars","surname","Avatar","avatar","imageCdnUrl","initials","UserHelper","IconCircle","svgSize","variant","metadata","colour","AnonymousSharedToAvatar","SharedLinkAvatar","SharedToAvatarList","AvatarList","avatarItem","avatarContainerClassname","getHiddenTooltip","getDateShared","dateCreated","datesShared","r","dateShared","date1","date2","DateHelper","getColumns","dateHeading","getObjectAppLink","getObjectActions","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","value","minWidth","maxWidth","canNavigate","AppLink","Text","namespace","phrase","s","Actions","actions","statusColumn","viewCountColumn","splice","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","refreshTable","tableData","sharedObject","o","objectId","recipient","viewCount","Table","theme","PartialRow","PartialHeader","fullHeader","PartialSharedByMeTable","getBatchFetchResultAsArray","result","values","args","TextHelper","SeriesAppLinkHelper","getShareActionOptions","entityType","label","params","SeeUsageAction","href","target","SharedByMeView","useBreakpoints","currentUser","UserRequests","cursor","ShareRequests","fetchNext","hasMore","isFetchingSentShares","nextCursor","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","getDirectShares","d","getRecipientIds","shareRecipientsFetchResult","customerId","ConfigRequests","useSetPageMetadata","getSharedObjectActions","seeUsagePhrase","canConsume","sharedObjectActions","objectUrl","button","openInNewTab","useGetSharedObjectActions","showPartialLoading","sentShare","hasFetchedSharedObjects","hasFetchedRecipients","initialSharedObjectsLoaded","setInitialSharedObjectsLoaded","initialRecipientsLoaded","setInitialRecipientsLoaded","usePartialLoading","sentSharesMemo","InfiniteScrollFooter","ImageUrls","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","replace","format","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","idx","floor","toString","unit"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3515],{94644:(e,a,t)=>{t.d(a,{r:()=>u});var i=t(50242),n=t(81886),r=t(67058),d=t(14553),s=t(49267),o=t(49075),c={notFound:r.d,forbidden:{rating:d.q,yearLevel:d.q,region:s.a,privacy:d.q},badRequest:o._};function u(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var d=Object.assign(Object.assign({},c),a);r&&n.Q.Ry.isStatusCodeError(r)&&(r!==i.o.NotFound?r!==i.o.Forbidden?t.badRequest||n.Q.Ry.throw(new d.badRequest):t.forbidden||n.Q.Ry.throw(new d.forbidden.privacy):t.notFound||n.Q.Ry.throw(new d.notFound))}}},91286:(e,a,t)=>{t.d(a,{v:()=>d});var i=t(32735),n=t(94644);function r(e){return e.map((function(e){return e.statusCode})).join(":")}function d(e,a,t){var d=Array.isArray(e)?e:[e];(0,i.useEffect)((function(){d.forEach((function(e){(0,n.r)(e.statusCode,a,t)}))}),[r(d),a,t])}},75085:(e,a,t)=>{t.r(a),t.d(a,{PlayViewV2:()=>D});var i=t(32735),n=t(50242),r=t(81886),d=t(23481),s=t(20354),o=t(28400),c=t(65858),u=t(78417),l=t(16714),v=t(67058),f=t(61990),h=t(33803),p=t(89454),g=t(43012),m=t(39151),y=t(1666),b=t(20768),F=t(98064),C=t(31949),P=t(1575),w=t(26304),I=t(91286),R=t(22902),B=t(79612),q=t(76753),A=t(14070),V=t(97291),k=t(51855),x=t(82817),L=t(7179),O=t(49948),E=t(36873),M=t(27638),S=t(86698),_=t(35014),G=t(97816),N=t(33192),Q=t(81812),T=t(61169),U=d.T.encloseNamespace("shared.play"),j={notFound:f.l,forbidden:{privacy:h.G}};function D(e){var a,t,d,f=e.queryParams,h=f.context,D=f.contextId,H=f.playNext,Y=f.mtv,Z=(0,M.u)(c.LZ.PlayPage),z=Z.setFavourite,J=Z.canFavourite,K=(0,R.T)().hasPermissions,W=(0,k.G)().isPlugin,X=(0,S.y)().activePresentation,$=(0,_.I)(),ee=s.a.useBasicFetch(F.D.streamableLearning()),ae=s.a.useBasicFetch(C.N.currentUser()),te=s.a.useBasicFetch(P.R.video(e.id)),ie=s.a.useBasicFetch(g.e.videoClips(e.id)),ne=s.a.useBasicFetch(b.b.videoInteractives(e.id)),re=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(a=ae.data)||void 0===a?void 0:a.isAuthenticated)&&y.h.yearGroups(ae.data.customerId)),se=s.a.useBasicFetch(X&&p.O.audiencesByPresentationId(X.id)),oe=(0,Q.a)(),ce=s.a.useBasicFetch(te.statusCode===n.o.Forbidden&&P.R.video(e.id,u.r.StripMetadata)),ue=(0,x.M)(e.id,!0),le=(0,E.k)({video:te.data,context:h,contextId:D,moviesAndTv:Y,currentUser:ae.data}),ve=(0,O.l)(e.id,!0),fe=s.a.useBasicFetch(P.R.regionAlternatives(e.id));return(0,B.M)(q.CG.getVideoMetadata({content:te.data,regionAlternatives:fe.data,phraseContext:{phraseHandler:U,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:N.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:N.f.allowIndexing(),hrefLang:N.f.getContentHrefLang(fe.data,(function(e,a){return{application:V.O.VIDEOS,action:A.e.Videos.PLAY_VIDEO,args:[e,o.m.slugify(a)]}}))})),(0,I.v)(te,j,{forbidden:!0}),(0,G.V)(null!==(t=le.videos)&&void 0!==t?t:[]),(0,L.P)({id:e.id,app:"videos"}),(0,w.b)(ce),i.useEffect((function(){var e;te.data&&ee.data&&(null===(e=te.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===ee.data.objectId})))&&r.Q.Ry.throw(new v.d)}),[te.hasCompleted,ee.hasCompleted]),te.data&&ae.hasCompleted&&re.hasCompleted&&ve.hasCompleted?i.createElement(T.R,{video:te.data,clips:ie.data,interactives:ne.data,yearGroups:de.data,curriculums:ue,relatedVideos:le,setFavourite:z,canFavourite:J,imageCdnUrl:re.data.imageCdnUrl,currentUser:ae.data,pointsOfInterest:ve.items,playNext:H,featureAccess:$,audiences:se.data,params:e.queryParams,canManageVideoAccess:K(l.C.ManageVideoAccess),shouldShowSideTableOfContents:oe,tableOfContentsId:null===(d=e.queryParams)||void 0===d?void 0:d.tocId,isPlugin:W}):i.createElement(i.Fragment,null)}D.defaultProps={queryParams:{}}}}]);
2
- //# sourceMappingURL=3515-4de2fd7070-lite.chunk.js.map
2
+ //# sourceMappingURL=3515-0d5feefbe3-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/3515-4de2fd7070-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(ClipRequests.videoClips(props.id));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","interactives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","name","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/3515-0d5feefbe3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(ClipRequests.videoClips(props.id));\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(InteractiveRequests.videoInteractives(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","interactives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","name","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
@@ -1,3 +1,3 @@
1
- /*! For license information please see 3588-62e61bc526-lite.chunk.js.LICENSE.txt */
1
+ /*! For license information please see 3588-1c1c264291-lite.chunk.js.LICENSE.txt */
2
2
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3588],{94644:(t,e,r)=>{r.d(e,{r:()=>l});var n=r(50242),a=r(81886),o=r(67058),i=r(14553),c=r(49267),u=r(49075),s={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:u._};function l(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(t){var o;o="number"==typeof t?t:t.status;var i=Object.assign(Object.assign({},s),e);o&&a.Q.Ry.isStatusCodeError(o)&&(o!==n.o.NotFound?o!==n.o.Forbidden?r.badRequest||a.Q.Ry.throw(new i.badRequest):r.forbidden||a.Q.Ry.throw(new i.forbidden.privacy):r.notFound||a.Q.Ry.throw(new i.notFound))}}},91286:(t,e,r)=>{r.d(e,{v:()=>i});var n=r(32735),a=r(94644);function o(t){return t.map((function(t){return t.statusCode})).join(":")}function i(t,e,r){var i=Array.isArray(t)?t:[t];(0,n.useEffect)((function(){i.forEach((function(t){(0,a.r)(t.statusCode,e,r)}))}),[o(i),e,r])}},69630:(t,e,r)=>{r.r(e),r.d(e,{PlayView:()=>z});var n=r(32735),a=r(50242),o=r(81886),i=r(23481),c=r(20354),u=r(28400),s=r(65858),l=r(78417),d=r(16714),f=r(67058),h=r(61990),p=r(33803),v=r(89454),y=r(21750),g=r(43012),m=r(39151),w=r(1666),b=r(20768),x=r(98064),L=r(28907),E=r(31949),F=r(1575),C=r(26304),P=r(91286),k=r(22902),O=r(79612),_=r(76753),I=r(5988),j=r(14070),A=r(97291),G=r(51855),S=r(82817),N=r(7179),V=r(49948),B=r(36873),R=r(27638),T=r(86698),q=r(35014),M=r(97816),Q=r(33192);function U(t){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},U(t)}function D(){D=function(){return e};var t,e={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(t,e,r){t[e]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",c=o.asyncIterator||"@@asyncIterator",u=o.toStringTag||"@@toStringTag";function s(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),t[e]}try{s({},"")}catch(t){s=function(t,e,r){return t[e]=r}}function l(t,e,r,n){var o=e&&e.prototype instanceof g?e:g,i=Object.create(o.prototype),c=new I(n||[]);return a(i,"_invoke",{value:P(t,r,c)}),i}function d(t,e,r){try{return{type:"normal",arg:t.call(e,r)}}catch(t){return{type:"throw",arg:t}}}e.wrap=l;var f="suspendedStart",h="suspendedYield",p="executing",v="completed",y={};function g(){}function m(){}function w(){}var b={};s(b,i,(function(){return this}));var x=Object.getPrototypeOf,L=x&&x(x(j([])));L&&L!==r&&n.call(L,i)&&(b=L);var E=w.prototype=g.prototype=Object.create(b);function F(t){["next","throw","return"].forEach((function(e){s(t,e,(function(t){return this._invoke(e,t)}))}))}function C(t,e){function r(a,o,i,c){var u=d(t[a],t,o);if("throw"!==u.type){var s=u.arg,l=s.value;return l&&"object"==U(l)&&n.call(l,"__await")?e.resolve(l.__await).then((function(t){r("next",t,i,c)}),(function(t){r("throw",t,i,c)})):e.resolve(l).then((function(t){s.value=t,i(s)}),(function(t){return r("throw",t,i,c)}))}c(u.arg)}var o;a(this,"_invoke",{value:function(t,n){function a(){return new e((function(e,a){r(t,n,e,a)}))}return o=o?o.then(a,a):a()}})}function P(e,r,n){var a=f;return function(o,i){if(a===p)throw Error("Generator is already running");if(a===v){if("throw"===o)throw i;return{value:t,done:!0}}for(n.method=o,n.arg=i;;){var c=n.delegate;if(c){var u=k(c,n);if(u){if(u===y)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===f)throw a=v,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=p;var s=d(e,r,n);if("normal"===s.type){if(a=n.done?v:h,s.arg===y)continue;return{value:s.arg,done:n.done}}"throw"===s.type&&(a=v,n.method="throw",n.arg=s.arg)}}}function k(e,r){var n=r.method,a=e.iterator[n];if(a===t)return r.delegate=null,"throw"===n&&e.iterator.return&&(r.method="return",r.arg=t,k(e,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),y;var o=d(a,e.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,y;var i=o.arg;return i?i.done?(r[e.resultName]=i.value,r.next=e.nextLoc,"return"!==r.method&&(r.method="next",r.arg=t),r.delegate=null,y):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,y)}function O(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.finallyLoc=t[2],e.afterLoc=t[3]),this.tryEntries.push(e)}function _(t){var e=t.completion||{};e.type="normal",delete e.arg,t.completion=e}function I(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(O,this),this.reset(!0)}function j(e){if(e||""===e){var r=e[i];if(r)return r.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length)){var a=-1,o=function r(){for(;++a<e.length;)if(n.call(e,a))return r.value=e[a],r.done=!1,r;return r.value=t,r.done=!0,r};return o.next=o}}throw new TypeError(U(e)+" is not iterable")}return m.prototype=w,a(E,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:m,configurable:!0}),m.displayName=s(w,u,"GeneratorFunction"),e.isGeneratorFunction=function(t){var e="function"==typeof t&&t.constructor;return!!e&&(e===m||"GeneratorFunction"===(e.displayName||e.name))},e.mark=function(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,w):(t.__proto__=w,s(t,u,"GeneratorFunction")),t.prototype=Object.create(E),t},e.awrap=function(t){return{__await:t}},F(C.prototype),s(C.prototype,c,(function(){return this})),e.AsyncIterator=C,e.async=function(t,r,n,a,o){void 0===o&&(o=Promise);var i=new C(l(t,r,n,a),o);return e.isGeneratorFunction(r)?i:i.next().then((function(t){return t.done?t.value:i.next()}))},F(E),s(E,u,"Generator"),s(E,i,(function(){return this})),s(E,"toString",(function(){return"[object Generator]"})),e.keys=function(t){var e=Object(t),r=[];for(var n in e)r.push(n);return r.reverse(),function t(){for(;r.length;){var n=r.pop();if(n in e)return t.value=n,t.done=!1,t}return t.done=!0,t}},e.values=j,I.prototype={constructor:I,reset:function(e){if(this.prev=0,this.next=0,this.sent=this._sent=t,this.done=!1,this.delegate=null,this.method="next",this.arg=t,this.tryEntries.forEach(_),!e)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=t)},stop:function(){this.done=!0;var t=this.tryEntries[0].completion;if("throw"===t.type)throw t.arg;return this.rval},dispatchException:function(e){if(this.done)throw e;var r=this;function a(n,a){return c.type="throw",c.arg=e,r.next=n,a&&(r.method="next",r.arg=t),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],c=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var u=n.call(i,"catchLoc"),s=n.call(i,"finallyLoc");if(u&&s){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!s)throw Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(t,e){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===t||"continue"===t)&&o.tryLoc<=e&&e<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=t,i.arg=e,o?(this.method="next",this.next=o.finallyLoc,y):this.complete(i)},complete:function(t,e){if("throw"===t.type)throw t.arg;return"break"===t.type||"continue"===t.type?this.next=t.arg:"return"===t.type?(this.rval=this.arg=t.arg,this.method="return",this.next="end"):"normal"===t.type&&e&&(this.next=e),y},finish:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),_(r),y}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var n=r.completion;if("throw"===n.type){var a=n.arg;_(r)}return a}}throw Error("illegal catch attempt")},delegateYield:function(e,r,n){return this.delegate={iterator:j(e),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=t),y}},e}var Y=function(t,e,r,n){return new(r||(r=Promise))((function(a,o){function i(t){try{u(n.next(t))}catch(t){o(t)}}function c(t){try{u(n.throw(t))}catch(t){o(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof r?e:new r((function(t){t(e)}))).then(i,c)}u((n=n.apply(t,e||[])).next())}))},H=i.T.encloseNamespace("shared.play"),Z={notFound:h.l,forbidden:{privacy:p.G}};function z(t){var e,r,i,h,p,U=t.queryParams,z=U.context,J=U.contextId,K=U.playNext,W=U.mtv,X=c.a.useGetFetchAsync(),$=(0,R.u)(s.LZ.PlayPage),tt=$.setFavourite,et=$.canFavourite,rt=(0,G.G)().isPlugin,nt=(0,k.T)().hasPermissions,at=(0,T.y)().activePresentation,ot=(0,q.I)(),it=c.a.useBasicFetch(x.D.streamableLearning()),ct=c.a.useBasicFetch(F.R.video(t.id)),ut=c.a.useBasicFetch(ot.canViewClips&&g.e.videoClips(t.id)),st=c.a.useBasicFetch(ot.canViewInteractives&&b.b.videoInteractives(t.id)),lt=c.a.useBasicFetch(E.N.currentUser()),dt=c.a.useBasicFetch(m.L.config()),ft=c.a.useBasicFetch((null===(e=lt.data)||void 0===e?void 0:e.isAuthenticated)&&w.h.yearGroups(lt.data.customerId)),ht=c.a.useBasicFetch(at&&v.O.audiencesByPresentationId(at.id)),pt=nt(d.C.ViewVideoGlance)&&(null===(i=null===(r=ct.data)||void 0===r?void 0:r.glance)||void 0===i?void 0:i.theme),vt=c.a.useBasicFetch(pt&&L.r.themeImages(ct.data.glance.theme,ct.data.glance.type)),yt=c.a.useBasicFetch(ct.statusCode===a.o.Forbidden&&F.R.video(t.id,l.r.StripMetadata)),gt=(0,S.M)(t.id),mt=(0,B.k)({video:ct.data,context:z,contextId:J,moviesAndTv:W,currentUser:lt.data}),wt=(0,V.l)(t.id,!0),bt=c.a.useBasicFetch(F.R.regionAlternatives(t.id));(0,O.M)(_.CG.getVideoMetadata({content:ct.data,regionAlternatives:bt.data,phraseContext:{phraseHandler:H,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:Q.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:Q.f.allowIndexing(),hrefLang:Q.f.getContentHrefLang(bt.data,(function(t,e){return{application:A.O.VIDEOS,action:j.e.Videos.PLAY_VIDEO,args:[t,u.m.slugify(e)]}}))})),(0,P.v)(ct,Z,{forbidden:!0}),(0,M.V)(null!==(h=mt.videos)&&void 0!==h?h:[]),(0,N.P)({id:t.id,app:"videos"}),(0,C.b)(yt),n.useEffect((function(){var t;ct.data&&it.data&&(null===(t=ct.data.libraries)||void 0===t?void 0:t.data.find((function(t){return t.id===it.data.objectId})))&&o.Q.Ry.throw(new f.d)}),[ct.hasCompleted,it.hasCompleted]);var xt=ct.data&&lt.hasCompleted&&dt.hasCompleted&&wt.hasCompleted;return xt?n.createElement("div",{className:"px-4"},n.createElement(I.j,{video:ct.data,interactives:st.data,clips:ut.data,yearGroups:ft.data,curriculums:gt,glanceTheme:vt.data,glanceLoaded:!pt||vt.hasCompleted,relatedVideos:mt,setFavourite:tt,canFavourite:et,imageCdnUrl:dt.data.imageCdnUrl,currentUser:lt.data,pointsOfInterest:wt.items,playNext:K,featureAccess:ot,audiences:ht.data,params:t.queryParams,canManageVideoAccess:nt(d.C.ManageVideoAccess),checkAllCurriculum:function(){return Y(this,void 0,void 0,D().mark((function e(){return D().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(!xt||!gt.hasLoaded){e.next=4;break}return e.next=3,X(y.x.checkAllCurriculumsLinks(t.id,gt.availableCurriculums.map((function(t){return t.id}))));case 3:return e.abrupt("return",e.sent);case 4:return e.abrupt("return",[]);case 5:case"end":return e.stop()}}),e)})))},tableOfContentsId:null===(p=t.queryParams)||void 0===p?void 0:p.tocId,isPlugin:rt})):n.createElement(n.Fragment,null)}z.defaultProps={queryParams:{}}}}]);
3
- //# sourceMappingURL=3588-62e61bc526-lite.chunk.js.map
3
+ //# sourceMappingURL=3588-1c1c264291-lite.chunk.js.map