@clickview/exchange 0.62.0-rc.0 → 0.62.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/.vite/manifest.json +531 -531
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/Crtlho0p.chunk.css +8 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{cIPkkuhG.chunk.js → 1iKkdpYv.chunk.js} +2 -2
  6. package/dist/scripts/{cIPkkuhG.chunk.js.map → 1iKkdpYv.chunk.js.map} +1 -1
  7. package/dist/scripts/{uPFXIvcK2.chunk.js → 8pXw5z942.chunk.js} +2 -2
  8. package/dist/scripts/{uPFXIvcK2.chunk.js.map → 8pXw5z942.chunk.js.map} +1 -1
  9. package/dist/scripts/{DVVx1aiS2.chunk.js → B7m3cCi42.chunk.js} +2 -2
  10. package/dist/scripts/{DVVx1aiS2.chunk.js.map → B7m3cCi42.chunk.js.map} +1 -1
  11. package/dist/scripts/{DBJfKQKx.chunk.js → BAN6QE-X.chunk.js} +2 -2
  12. package/dist/scripts/{DBJfKQKx.chunk.js.map → BAN6QE-X.chunk.js.map} +1 -1
  13. package/dist/scripts/{YGLkoFLc.chunk.js → BHbt9wzx.chunk.js} +2 -2
  14. package/dist/scripts/{YGLkoFLc.chunk.js.map → BHbt9wzx.chunk.js.map} +1 -1
  15. package/dist/scripts/{DeevL6eQ.chunk.js → BINz0dmF.chunk.js} +2 -2
  16. package/dist/scripts/{DeevL6eQ.chunk.js.map → BINz0dmF.chunk.js.map} +1 -1
  17. package/dist/scripts/{Dg-h5qnR.chunk.js → BPYdRA7H.chunk.js} +2 -2
  18. package/dist/scripts/{Dg-h5qnR.chunk.js.map → BPYdRA7H.chunk.js.map} +1 -1
  19. package/dist/scripts/{CkH6ird3.chunk.js → BS8sYAAh.chunk.js} +2 -2
  20. package/dist/scripts/{CkH6ird3.chunk.js.map → BS8sYAAh.chunk.js.map} +1 -1
  21. package/dist/scripts/{CKrB9r9w.chunk.js → BaSi1pig.chunk.js} +2 -2
  22. package/dist/scripts/{CKrB9r9w.chunk.js.map → BaSi1pig.chunk.js.map} +1 -1
  23. package/dist/scripts/{BRQhDr-02.chunk.js → BbrEvwAi2.chunk.js} +2 -2
  24. package/dist/scripts/{BRQhDr-02.chunk.js.map → BbrEvwAi2.chunk.js.map} +1 -1
  25. package/dist/scripts/{Ct8ETEOn2.chunk.js → Bi8itw8v2.chunk.js} +2 -2
  26. package/dist/scripts/{Ct8ETEOn2.chunk.js.map → Bi8itw8v2.chunk.js.map} +1 -1
  27. package/dist/scripts/{Co_6cSBX2.chunk.js → BlOKamx72.chunk.js} +2 -2
  28. package/dist/scripts/{Co_6cSBX2.chunk.js.map → BlOKamx72.chunk.js.map} +1 -1
  29. package/dist/scripts/{B0hNKKDw2.chunk.js → BobZ5p_m2.chunk.js} +2 -2
  30. package/dist/scripts/{B0hNKKDw2.chunk.js.map → BobZ5p_m2.chunk.js.map} +1 -1
  31. package/dist/scripts/{Nx0q4bij.chunk.js → BsLLiG1-.chunk.js} +2 -2
  32. package/dist/scripts/{Nx0q4bij.chunk.js.map → BsLLiG1-.chunk.js.map} +1 -1
  33. package/dist/scripts/{D0H6Hjd-2.chunk.js → BtdygabL2.chunk.js} +2 -2
  34. package/dist/scripts/{D0H6Hjd-2.chunk.js.map → BtdygabL2.chunk.js.map} +1 -1
  35. package/dist/scripts/{UjMbny4R.chunk.js → Bue5_bLM.chunk.js} +2 -2
  36. package/dist/scripts/{UjMbny4R.chunk.js.map → Bue5_bLM.chunk.js.map} +1 -1
  37. package/dist/scripts/{DBKlntFN2.chunk.js → BvamDkjt2.chunk.js} +2 -2
  38. package/dist/scripts/{DBKlntFN2.chunk.js.map → BvamDkjt2.chunk.js.map} +1 -1
  39. package/dist/scripts/{NInuYe7b2.chunk.js → BzJLc19T2.chunk.js} +2 -2
  40. package/dist/scripts/{NInuYe7b2.chunk.js.map → BzJLc19T2.chunk.js.map} +1 -1
  41. package/dist/scripts/{DyRGf1o8.chunk.js → C03mMZ4k.chunk.js} +2 -2
  42. package/dist/scripts/{DyRGf1o8.chunk.js.map → C03mMZ4k.chunk.js.map} +1 -1
  43. package/dist/scripts/{BV2vTX2L.chunk.js → C2AXrtJf.chunk.js} +2 -2
  44. package/dist/scripts/{BV2vTX2L.chunk.js.map → C2AXrtJf.chunk.js.map} +1 -1
  45. package/dist/scripts/{Fu0bLEzl2.chunk.js → C3Hw2TpW2.chunk.js} +2 -2
  46. package/dist/scripts/{Fu0bLEzl2.chunk.js.map → C3Hw2TpW2.chunk.js.map} +1 -1
  47. package/dist/scripts/{DoTtsl0X.chunk.js → CKL4ViMC.chunk.js} +2 -2
  48. package/dist/scripts/{DoTtsl0X.chunk.js.map → CKL4ViMC.chunk.js.map} +1 -1
  49. package/dist/scripts/{DtYC8Udi2.chunk.js → CKZJ2qae2.chunk.js} +2 -2
  50. package/dist/scripts/{DtYC8Udi2.chunk.js.map → CKZJ2qae2.chunk.js.map} +1 -1
  51. package/dist/scripts/{CyAM5o2e.chunk.js → CK_CN_mA.chunk.js} +2 -2
  52. package/dist/scripts/{CyAM5o2e.chunk.js.map → CK_CN_mA.chunk.js.map} +1 -1
  53. package/dist/scripts/{B6mSouu5.chunk.js → CL9SkODG.chunk.js} +2 -2
  54. package/dist/scripts/{B6mSouu5.chunk.js.map → CL9SkODG.chunk.js.map} +1 -1
  55. package/dist/scripts/{BHKm8WQq2.chunk.js → Ca_-2JTE2.chunk.js} +2 -2
  56. package/dist/scripts/{BHKm8WQq2.chunk.js.map → Ca_-2JTE2.chunk.js.map} +1 -1
  57. package/dist/scripts/{C7OCN_w_.chunk.js → CfNYdg0m.chunk.js} +2 -2
  58. package/dist/scripts/{C7OCN_w_.chunk.js.map → CfNYdg0m.chunk.js.map} +1 -1
  59. package/dist/scripts/{CUdaR862.chunk.js → Ct_4zyE3.chunk.js} +2 -2
  60. package/dist/scripts/{CUdaR862.chunk.js.map → Ct_4zyE3.chunk.js.map} +1 -1
  61. package/dist/scripts/{RiPZGw_q2.chunk.js → CxUrOnxW2.chunk.js} +2 -2
  62. package/dist/scripts/{RiPZGw_q2.chunk.js.map → CxUrOnxW2.chunk.js.map} +1 -1
  63. package/dist/scripts/{BJxTZJOX.chunk.js → DFXpg6rF.chunk.js} +2 -2
  64. package/dist/scripts/{BJxTZJOX.chunk.js.map → DFXpg6rF.chunk.js.map} +1 -1
  65. package/dist/scripts/{CKNdXwxe2.chunk.js → DG6L7zHU2.chunk.js} +2 -2
  66. package/dist/scripts/{CKNdXwxe2.chunk.js.map → DG6L7zHU2.chunk.js.map} +1 -1
  67. package/dist/scripts/{CvQQNf_J2.chunk.js → DKz4jhnr2.chunk.js} +2 -2
  68. package/dist/scripts/{CvQQNf_J2.chunk.js.map → DKz4jhnr2.chunk.js.map} +1 -1
  69. package/dist/scripts/{BOvQpQ21.chunk.js → DSZkTUVU.chunk.js} +2 -2
  70. package/dist/scripts/{BOvQpQ21.chunk.js.map → DSZkTUVU.chunk.js.map} +1 -1
  71. package/dist/scripts/{D5qMnGHT2.chunk.js → D_k-Kl3-2.chunk.js} +2 -2
  72. package/dist/scripts/{D5qMnGHT2.chunk.js.map → D_k-Kl3-2.chunk.js.map} +1 -1
  73. package/dist/scripts/{Dp0gbhZx2.chunk.js → DfOgl-0-2.chunk.js} +2 -2
  74. package/dist/scripts/{Dp0gbhZx2.chunk.js.map → DfOgl-0-2.chunk.js.map} +1 -1
  75. package/dist/scripts/{CeCXhgoJ.chunk.js → DkB0qBxI.chunk.js} +2 -2
  76. package/dist/scripts/{CeCXhgoJ.chunk.js.map → DkB0qBxI.chunk.js.map} +1 -1
  77. package/dist/scripts/{CeHHO1Hv.chunk.js → DmVXt6_V.chunk.js} +2 -2
  78. package/dist/scripts/{CeHHO1Hv.chunk.js.map → DmVXt6_V.chunk.js.map} +1 -1
  79. package/dist/scripts/{aDegERgV2.chunk.js → DqM6hYTJ2.chunk.js} +2 -2
  80. package/dist/scripts/{aDegERgV2.chunk.js.map → DqM6hYTJ2.chunk.js.map} +1 -1
  81. package/dist/scripts/{BPgKK-d32.chunk.js → DsHiClyc2.chunk.js} +2 -2
  82. package/dist/scripts/{BPgKK-d32.chunk.js.map → DsHiClyc2.chunk.js.map} +1 -1
  83. package/dist/scripts/{D9zlZIWi2.chunk.js → DuPL-nK72.chunk.js} +2 -2
  84. package/dist/scripts/{D9zlZIWi2.chunk.js.map → DuPL-nK72.chunk.js.map} +1 -1
  85. package/dist/scripts/{ZSP3Vfha2.chunk.js → EIJf9JbR2.chunk.js} +2 -2
  86. package/dist/scripts/{ZSP3Vfha2.chunk.js.map → EIJf9JbR2.chunk.js.map} +1 -1
  87. package/dist/scripts/{CqNKzFA4.chunk.js → EO2xPuAQ.chunk.js} +2 -2
  88. package/dist/scripts/{CqNKzFA4.chunk.js.map → EO2xPuAQ.chunk.js.map} +1 -1
  89. package/dist/scripts/{o2htB_49.chunk.js → F1LOVRO_.chunk.js} +2 -2
  90. package/dist/scripts/{o2htB_49.chunk.js.map → F1LOVRO_.chunk.js.map} +1 -1
  91. package/dist/scripts/{BggsU83p2.chunk.js → G-hiM6b42.chunk.js} +2 -2
  92. package/dist/scripts/{BggsU83p2.chunk.js.map → G-hiM6b42.chunk.js.map} +1 -1
  93. package/dist/scripts/{B0VKYPiu.chunk.js → MYu2AEsL.chunk.js} +2 -2
  94. package/dist/scripts/{B0VKYPiu.chunk.js.map → MYu2AEsL.chunk.js.map} +1 -1
  95. package/dist/scripts/{B9Rb6IIb.chunk.js → NtrZI2Ef.chunk.js} +2 -2
  96. package/dist/scripts/{B9Rb6IIb.chunk.js.map → NtrZI2Ef.chunk.js.map} +1 -1
  97. package/dist/scripts/{CRHkMr9_2.chunk.js → OBYDGOgI2.chunk.js} +2 -2
  98. package/dist/scripts/{CRHkMr9_2.chunk.js.map → OBYDGOgI2.chunk.js.map} +1 -1
  99. package/dist/scripts/{zp5MUThO.chunk.js → Pixwk-h-.chunk.js} +2 -2
  100. package/dist/scripts/{zp5MUThO.chunk.js.map → Pixwk-h-.chunk.js.map} +1 -1
  101. package/dist/scripts/{Ds3cFntF2.chunk.js → SDRXIwM22.chunk.js} +3 -3
  102. package/dist/scripts/{Ds3cFntF2.chunk.js.map → SDRXIwM22.chunk.js.map} +1 -1
  103. package/dist/scripts/{C1u2qBZg2.chunk.js → U0UyGd9c2.chunk.js} +2 -2
  104. package/dist/scripts/{C1u2qBZg2.chunk.js.map → U0UyGd9c2.chunk.js.map} +1 -1
  105. package/dist/scripts/{CYUx40jk.chunk.js → amjwjus3.chunk.js} +2 -2
  106. package/dist/scripts/{CYUx40jk.chunk.js.map → amjwjus3.chunk.js.map} +1 -1
  107. package/dist/scripts/{app-DDrsm5nt.js → app-BGxmHvGl.js} +3 -3
  108. package/dist/scripts/{app-DDrsm5nt.js.map → app-BGxmHvGl.js.map} +1 -1
  109. package/dist/scripts/{CgGl8jzo.chunk.js → eUKFc6dK.chunk.js} +2 -2
  110. package/dist/scripts/{CgGl8jzo.chunk.js.map → eUKFc6dK.chunk.js.map} +1 -1
  111. package/dist/scripts/{CWsmm40y.chunk.js → l7UAnIb0.chunk.js} +2 -2
  112. package/dist/scripts/{CWsmm40y.chunk.js.map → l7UAnIb0.chunk.js.map} +1 -1
  113. package/dist/scripts/{BsSKrRku2.chunk.js → nMyWveQA2.chunk.js} +2 -2
  114. package/dist/scripts/{BsSKrRku2.chunk.js.map → nMyWveQA2.chunk.js.map} +1 -1
  115. package/dist/scripts/{CKUk2HqE.chunk.js → pOL5_XNC.chunk.js} +2 -2
  116. package/dist/scripts/{CKUk2HqE.chunk.js.map → pOL5_XNC.chunk.js.map} +1 -1
  117. package/dist/scripts/{eLmgigsW.chunk.js → sViLex0Q.chunk.js} +2 -2
  118. package/dist/scripts/{eLmgigsW.chunk.js.map → sViLex0Q.chunk.js.map} +1 -1
  119. package/dist/scripts/{Xs1Bv1h-.chunk.js → vvCGyl_q.chunk.js} +2 -2
  120. package/dist/scripts/{Xs1Bv1h-.chunk.js.map → vvCGyl_q.chunk.js.map} +1 -1
  121. package/dist/scripts/{BijIuzIs2.chunk.js → xEGWFFpD2.chunk.js} +2 -2
  122. package/dist/scripts/{BijIuzIs2.chunk.js.map → xEGWFFpD2.chunk.js.map} +1 -1
  123. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"BggsU83p2.chunk.js","names":[],"sources":["../../../../libs/shared/src/enums/ContentLicenceType.ts","../../../../libs/shared/src/flight-requests/ClipRequests.ts","../../../../libs/shared/src/flight-requests/InteractiveRequests.ts","../../../../libs/shared/src/utils/VideoHelper.ts"],"sourcesContent":["export enum ContentLicenseType {\n Screenrights = 'screenrights',\n Era = 'era',\n ClickView = 'clickview'\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Clip, CreateOrUpdateClipRequest } from 'libs/shared/interfaces';\n\nexport const ClipRequests = {\n clip(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n key: `clip:${id}:${permissionFilterOption}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.CLIP,\n permissionFilterOption\n })\n };\n },\n\n videoClips(parentId: string, permissionFilterOption?: PermissionFilterOption, cursor?: string) {\n return {\n key: `video:${parentId}:clips:${permissionFilterOption}:${cursor}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${parentId}/clips`, {\n query: SharedWithStatements.CLIP_COLLECTION,\n permissionFilterOption,\n cursor\n })\n };\n },\n\n clipWithAllInteractives(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n key: `clip:${id}:${permissionFilterOption}:interactives`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: `${SharedWithStatements.CLIP},interactives{status:[0,1]}`,\n permissionFilterOption\n }),\n normalize: false\n };\n },\n\n publicClip(\n id: string,\n shareId?: string,\n success?: (clip: Clip) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n key: `clip:${id}:public:${shareId}`,\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: '_parentVideo,_canBeConsumed,_thumbnail',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n\n sharedClip(\n id: string,\n shareId: string,\n success?: (clip: Clip) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n key: `shared:clip:${id}`,\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.CLIP\n }),\n success,\n error\n };\n },\n\n createClip(\n videoId: string,\n data: CreateOrUpdateClipRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'create:clip',\n url: `{gateway}/v1/objects/${videoId}/clips`,\n data,\n type: HttpVerbs.POST,\n invalidationKeys: [ `videos:${videoId}`, 'my:videos' ],\n success,\n error,\n always\n };\n },\n\n updateClip(\n id: string,\n data: CreateOrUpdateClipRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'update:clip',\n url: `{gateway}/v1/objects/${id}`,\n data,\n type: HttpVerbs.PUT,\n invalidationKeys: [`clip:${id}`],\n success,\n error,\n always\n };\n },\n\n deleteClip(\n id: string,\n videoId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `delete:clip`,\n url: `{gateway}/v1/objects/${id}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `videos:${videoId}`, 'my:videos', 'videos' ],\n success,\n error,\n always\n };\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { CreateInteractiveMetadataRequest, CreateInteractiveRequest, EditInteractiveMetadataOriginRequest, EditInteractiveMetadataRequest, EditInteractiveRequest, Interaction, InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport const InteractiveRequests = {\n interactiveMetadata(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.INTERACTIVE,\n permissionFilterOption\n }),\n key: `interactive:metadata:${id}:${permissionFilterOption}`\n };\n },\n\n videoInteractives(\n parentId: string,\n permissionFilterOption?: PermissionFilterOption,\n cursor?: string\n ): Flight.PublicRequest {\n return {\n key: `video:${parentId}:interactives:${permissionFilterOption}:${cursor}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${parentId}/interactives`, {\n query: SharedWithStatements.INTERACTIVE_COLLECTION,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${parentId}/interactives`, {\n query: SharedWithStatements.INTERACTIVE_COLLECTION,\n cursor\n })\n };\n },\n\n sharedInteractiveMetadata(\n id: string,\n shareId: string,\n success?: (interactiveMetadata: InteractiveMetadata) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.INTERACTIVE\n }),\n key: `shared:interactive:metadata:${id}`,\n success,\n error\n };\n },\n publicInteractiveMetadata(\n id: string,\n shareId?: string,\n success?: (interactive: InteractiveMetadata) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: '_parentVideo[_rating],_canBeConsumed,_thumbnail',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n key: `interactive:metadata:${id}:public:${shareId}`,\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n interactive(id: string): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${id}`,\n key: `interactive:${id}`,\n normalize: false\n };\n },\n createInteractive(\n data: CreateInteractiveRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: '/api/domain/v1/interactives',\n key: 'create:interactive',\n type: HttpVerbs.POST,\n invalidationKeys: ['my:videos'],\n data,\n success,\n error\n };\n },\n createInteractiveMetadata(\n videoId: string,\n data: CreateInteractiveMetadataRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${videoId}/interactives`,\n key: 'create:interactive:metadata',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n updateInteractive(\n id: string,\n data: EditInteractiveRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${id}`,\n key: 'update:interactive',\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n /* Update state because domain doesn't return the updated object */\n formatData: () => data,\n invalidationKeys: [`interactive:${id}`]\n };\n },\n updateInteractiveMetadata(\n id: string,\n data: EditInteractiveMetadataRequest | EditInteractiveMetadataOriginRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'update:interactive:metadata',\n type: HttpVerbs.PUT,\n data,\n success,\n error\n };\n },\n interactiveResultSet(interactiveId: string, interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`\n };\n },\n copyInteractive(\n interactiveId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${interactiveId}/copy`,\n key: 'copy:interactive',\n type: HttpVerbs.POST,\n invalidationKeys: [ `interactive:${interactiveId}`, 'my:videos' ],\n success,\n error\n };\n },\n deleteInteractiveMetadata(\n interactiveMetadataId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${interactiveMetadataId}`,\n key: 'delete:interactive',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `interactive:${interactiveMetadataId}`, 'my:videos', 'videos' ],\n success,\n error\n };\n },\n removeInteractiveMetadata({\n libraryId,\n categoryId,\n interactiveMetadataId\n }: {\n libraryId: string,\n categoryId: string,\n interactiveMetadataId: string\n }): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/domain/v1/libraries/${libraryId}/videos`, { categoryId, videoIds: interactiveMetadataId }),\n key: `remove:interactive:metadata:${interactiveMetadataId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `interactive:${interactiveMetadataId}`, 'my:videos', 'videos' ]\n };\n },\n contributeToCommunity(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contribute`,\n key: 'contribute:interactive',\n type: HttpVerbs.POST\n };\n },\n revokefromCommunity(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contribute`,\n key: 'contribute:interactive',\n type: HttpVerbs.DELETE\n };\n },\n isContributed(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contributed`,\n key: `iscontributed:${interactiveMetadataId}`,\n normalize: false\n };\n },\n updateInteraction(interaction: Interaction) {\n return {\n url: `/api/domain/v1/interactions/bulk/${interaction.id}`,\n key: 'contribute:interactive',\n data: interaction,\n type: HttpVerbs.PUT,\n invalidationKeys: [`interactive:${interaction.interactiveId}`]\n };\n }\n};\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { EntityType } from 'libs/analytics/interfaces';\n\nimport { ContentLicenseType } from 'libs/shared/enums/ContentLicenceType';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { BaseObject, CanBeConsumedReason, Clip, InteractiveMetadata, Rating, Thumbnail, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\n\nimport { PermissionName } from '../enums/PermissionName';\nimport { HasPermissionsFunc } from '../hooks/usePermissions';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const VideoHelper = {\n isVideo(obj: BaseObject): obj is Video {\n return obj?.typeId === MasterType.Video;\n },\n\n isClip(obj: BaseObject): obj is Clip {\n return obj?.typeId === MasterType.Clip;\n },\n\n isInteractive(obj: BaseObject): obj is InteractiveMetadata {\n return obj?.typeId === MasterType.Interactive;\n },\n\n isVideoTypeArchived(obj: VideoTypes): boolean {\n return obj?.status === CurationStatus.Archived;\n },\n\n /**\n * Returns true of the object is a video, clip or interactive\n */\n isVideoType(object: BaseObject): object is Video | Clip | InteractiveMetadata {\n return VideoHelper.isVideo(object) || VideoHelper.isInteractive(object) || VideoHelper.isClip(object);\n },\n\n hasSeries(video: Video): boolean {\n return !!video?.series?.id;\n },\n\n showVideoGuidance(hasPermissions: HasPermissionsFunc): boolean {\n return !hasPermissions(PermissionName.StudentExperience);\n },\n\n showInteractivesGuidance(video: VideoTypes): boolean {\n if (!video || VideoHelper.isInteractive(video))\n return false;\n\n const interactiveCount = video.interactives?.data?.length || 0;\n\n return !!interactiveCount;\n },\n\n showResourcesGuidance(video: VideoTypes): boolean {\n if (!video || VideoHelper.isInteractive(video))\n return false;\n\n const resourceCount = (\n (video.resources?.data?.length || 0) +\n (video.links?.data?.length || 0)\n );\n\n return !!resourceCount;\n },\n\n canViewCurriculumLinks(hasPermissions: HasPermissionsFunc, video: VideoTypes): boolean {\n const canView = (\n hasPermissions(PermissionName.ViewCurriculums) &&\n hasPermissions(PermissionName.ManagePresentations)\n );\n\n if (!canView)\n return false;\n \n if (!video || !VideoHelper.isVideo(video))\n return false;\n\n return !!video._hasCurriculumLinks?.value;\n },\n\n getVideoProgress(video: Video): number {\n if (video?.lastProgressPoint)\n return video?.lastProgressPoint;\n\n // Use virtual assoc\n if (video?._videoProgress?.progress)\n return video?._videoProgress?.progress;\n\n return 0;\n },\n\n getThumbnail(video: VideoTypes): Thumbnail {\n if (!video)\n return null;\n\n if (VideoHelper.isVideo(video))\n return video.thumbnail;\n\n if (video?._thumbnail)\n return video._thumbnail;\n\n // Fallbacks for virtual assoc if needed\n if (VideoHelper.isClip(video))\n return video.thumbnail || video._parentVideo?.thumbnail;\n\n if (VideoHelper.isInteractive(video))\n return video._parentVideo?.thumbnail || video._parentClip?.thumbnail;\n },\n\n getDuration(video: VideoTypes): number {\n if (!video)\n return;\n\n if (VideoHelper.isVideo(video))\n return video.duration;\n\n if (VideoHelper.isInteractive(video)) {\n if (video._parentClip?.id)\n return (video._parentClip.endTime - video._parentClip.startTime) * 1000;\n\n if (video._parentVideo?.duration)\n return video._parentVideo.duration;\n }\n\n if (VideoHelper.isClip(video))\n return (video.endTime - video.startTime) * 1000;\n },\n\n getAnalyticsEntity(video: VideoTypes): EntityType {\n if (VideoHelper.isVideo(video))\n return EntityType.Video;\n\n if (VideoHelper.isInteractive(video))\n return EntityType.Interactive;\n\n if (VideoHelper.isClip(video))\n return EntityType.Clip;\n },\n\n getAnalyticsData(\n video: VideoTypes,\n extraAnalyticsData: HashObject = {}\n ): HashObject {\n if (VideoHelper.isVideo(video)) {\n return {\n ...(extraAnalyticsData || {}),\n id: video.id,\n name: video.name\n };\n }\n\n if (VideoHelper.isClip(video)) {\n const data: HashObject = {\n ...(extraAnalyticsData || {}),\n id: video.id,\n name: video.name\n };\n\n if (video._parentVideo?.id)\n data.video = { id: video._parentVideo?.id, name: video._parentVideo.name };\n\n return data;\n }\n\n const data: HashObject = {\n ...extraAnalyticsData,\n id: video.id,\n interactiveId: video.interactiveId,\n name: video.name,\n status: video.status,\n originType: video.originType\n };\n\n if (video?._parentClip?.id)\n data.clip = { id: video?._parentClip?.id, name: video?._parentClip.name };\n\n if (video?._parentVideo?.id)\n data.video = { id: video?._parentVideo?.id, name: video?._parentVideo.name };\n \n return data;\n },\n\n getCanBeConsumed(video: BaseObject): {\n canNavigate: boolean,\n canConsume: boolean,\n reason?: CanBeConsumedReason\n } {\n if (!video || !VideoHelper.isVideoType(video)) {\n return {\n canNavigate: false,\n canConsume: false\n };\n }\n\n if (video._canBeConsumed) {\n return {\n /**\n * Product navigation is enabled for \"login-required\" reason to support public access. \n * The video itself cannot be consumed, however, clients can allow users to browse the platform.\n * \n * Note: canNavigate is initially available for just videos. Interactives and Clips will be supported in Y2.\n */\n canNavigate: (video._canBeConsumed?.reason === 'login-required' && VideoHelper.isVideo(video)) || video._canBeConsumed.value === true,\n canConsume: video._canBeConsumed.value,\n reason: video._canBeConsumed?.reason\n };\n }\n\n /**\n * Many of the components shared between online and lite read this value.\n * Online doesn't fetch or care about this value, which means by this point it should\n * still be null. In this case, we just set it to true so that the components can render\n * as normal.\n */\n return {\n canNavigate: true,\n canConsume: true\n };\n },\n\n getPrivacyReasoning(video: VideoTypes, showSignIn: boolean = false): string {\n const { canConsume, canNavigate, reason } = VideoHelper.getCanBeConsumed(video);\n\n const getNoLongerAvailableText = () => {\n if (VideoHelper.isClip(video))\n return getPhrase('clipParentDeleted');\n\n if (VideoHelper.isInteractive(video))\n return getPhrase('interactiveParentDeleted');\n\n return getPhrase('videoDeleted');\n };\n\n const getLoginRequiredText = () => {\n if (VideoHelper.isClip(video))\n return getPhrase('clipLoginRequired');\n\n if (VideoHelper.isInteractive(video))\n return getPhrase('interactiveLoginRequired');\n\n return getPhrase('videoLoginRequired');\n };\n\n if (!canConsume && !canNavigate) {\n if (showSignIn)\n return getLoginRequiredText();\n\n switch (reason) {\n case 'rating-not-allowed': {\n return getPhrase('ratingNotAllowed');\n }\n\n case 'video-deleted': {\n return getNoLongerAvailableText();\n }\n\n case 'clickview-private': {\n return getPhrase('clickViewPrivate');\n }\n\n case 'private': {\n return getPhrase('genericCannotAccess');\n }\n\n case 'login-required': {\n return getLoginRequiredText();\n }\n\n case 'restricted-access': {\n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n\n if (restriction?.type === RestrictionType.Custom)\n return getPhrase('awaitingApproval');\n\n return getPhrase('restrictedAccess');\n }\n\n default: {\n return getPhrase('genericCannotAccess');\n }\n }\n }\n\n if (VideoHelper.isInteractive(video) && video.status === CurationStatus.Draft)\n return getPhrase('draftInteractive');\n\n return '';\n },\n\n getTitle(video: VideoTypes): string {\n if (video.name) {\n if (VideoHelper.isInteractive(video) && video.status === CurationStatus.Draft) {\n return getPhrase('draftInteractiveTitle', { name: video.name });\n }\n\n return video.name;\n }\n\n const { canConsume, reason } = VideoHelper.getCanBeConsumed(video);\n\n if (!canConsume && reason === 'private')\n return getPhrase('privateVideo');\n\n if (!canConsume && reason === 'video-deleted')\n return getPhrase('videoUnavailable');\n\n return getPhrase('privateVideo');\n },\n\n getParentVideo(video: VideoTypes): Video | null {\n if (VideoHelper.isVideo(video))\n return video;\n\n if (VideoHelper.isClip(video) || VideoHelper.isInteractive(video))\n return video._parentVideo;\n },\n\n getRating(video: VideoTypes): Rating | null {\n if (VideoHelper.isVideo(video))\n return video._rating?.value || video.rating;\n\n return video?._parentVideo?._rating?.value;\n },\n\n getVideoRequest(\n objectId: string,\n objectTypeId: MasterType,\n shareId?: string\n ): Flight.Request {\n if (shareId) {\n switch (objectTypeId) {\n case MasterType.Video:\n return VideoRequests.sharedVideo(objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.sharedClip(objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.sharedInteractiveMetadata(objectId, shareId);\n }\n\n Core.ErrorHelper.throw(new DevError('Unsupported master type'));\n }\n\n switch (objectTypeId) {\n case MasterType.Video:\n return VideoRequests.video(objectId);\n case MasterType.Clip:\n return ClipRequests.clip(objectId);\n case MasterType.Interactive:\n return InteractiveRequests.interactiveMetadata(objectId);\n }\n\n Core.ErrorHelper.throw(new DevError('Unsupported master type'));\n },\n\n isBroadcast(video: Video): boolean {\n return !!video?.contentLicences?.data?.some(l =>\n l.systemName === ContentLicenseType.Era ||\n l.systemName === ContentLicenseType.Screenrights);\n },\n\n isUgc(video: Video): boolean {\n // if video isn't broadcast and isn't curated by the ClickView team, chances are it's UGC\n return !VideoHelper.isBroadcast(video) && !video?._isClickViewCurated?.value;\n },\n\n getReleaseDate(video: Video): string {\n if (!video)\n return '';\n\n if (video.dateReleased && VideoHelper.isBroadcast(video))\n return DateHelper.format(video.dateReleased, 'DD/MM/YYYY');\n\n return '';\n },\n\n canViewOriginalVideo(video: Clip | InteractiveMetadata): boolean {\n return !!video?._parentVideo?._canBeConsumed?.value;\n },\n\n getTrackingCode(video: VideoTypes): string | undefined {\n if (VideoHelper.isVideo(video))\n return video.trackingCode;\n\n if (VideoHelper.isClip(video) || VideoHelper.isInteractive(video))\n return video._parentVideo.trackingCode;\n },\n\n isInExchange(video: Video): boolean {\n return !!video?.libraries?.data?.some(l => l.typeId === MasterType.ExchangeCollection);\n },\n\n canViewUploadDate(video: Video): boolean {\n if (!video || !video.dateCreated)\n return false;\n\n if (!video._isClickViewCurated || video._isClickViewCurated.value)\n return false;\n\n return true;\n }\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"G-hiM6b42.chunk.js","names":[],"sources":["../../../../libs/shared/src/enums/ContentLicenceType.ts","../../../../libs/shared/src/flight-requests/ClipRequests.ts","../../../../libs/shared/src/flight-requests/InteractiveRequests.ts","../../../../libs/shared/src/utils/VideoHelper.ts"],"sourcesContent":["export enum ContentLicenseType {\n Screenrights = 'screenrights',\n Era = 'era',\n ClickView = 'clickview'\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { Clip, CreateOrUpdateClipRequest } from 'libs/shared/interfaces';\n\nexport const ClipRequests = {\n clip(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n key: `clip:${id}:${permissionFilterOption}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.CLIP,\n permissionFilterOption\n })\n };\n },\n\n videoClips(parentId: string, permissionFilterOption?: PermissionFilterOption, cursor?: string) {\n return {\n key: `video:${parentId}:clips:${permissionFilterOption}:${cursor}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${parentId}/clips`, {\n query: SharedWithStatements.CLIP_COLLECTION,\n permissionFilterOption,\n cursor\n })\n };\n },\n\n clipWithAllInteractives(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n key: `clip:${id}:${permissionFilterOption}:interactives`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: `${SharedWithStatements.CLIP},interactives{status:[0,1]}`,\n permissionFilterOption\n }),\n normalize: false\n };\n },\n\n publicClip(\n id: string,\n shareId?: string,\n success?: (clip: Clip) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n key: `clip:${id}:public:${shareId}`,\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: '_parentVideo,_canBeConsumed,_thumbnail',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n\n sharedClip(\n id: string,\n shareId: string,\n success?: (clip: Clip) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n key: `shared:clip:${id}`,\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.CLIP\n }),\n success,\n error\n };\n },\n\n createClip(\n videoId: string,\n data: CreateOrUpdateClipRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'create:clip',\n url: `{gateway}/v1/objects/${videoId}/clips`,\n data,\n type: HttpVerbs.POST,\n invalidationKeys: [ `videos:${videoId}`, 'my:videos' ],\n success,\n error,\n always\n };\n },\n\n updateClip(\n id: string,\n data: CreateOrUpdateClipRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: 'update:clip',\n url: `{gateway}/v1/objects/${id}`,\n data,\n type: HttpVerbs.PUT,\n invalidationKeys: [`clip:${id}`],\n success,\n error,\n always\n };\n },\n\n deleteClip(\n id: string,\n videoId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n key: `delete:clip`,\n url: `{gateway}/v1/objects/${id}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `videos:${videoId}`, 'my:videos', 'videos' ],\n success,\n error,\n always\n };\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { CreateInteractiveMetadataRequest, CreateInteractiveRequest, EditInteractiveMetadataOriginRequest, EditInteractiveMetadataRequest, EditInteractiveRequest, Interaction, InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport const InteractiveRequests = {\n interactiveMetadata(id: string, permissionFilterOption?: PermissionFilterOption): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}`, {\n query: SharedWithStatements.INTERACTIVE,\n permissionFilterOption\n }),\n key: `interactive:metadata:${id}:${permissionFilterOption}`\n };\n },\n\n videoInteractives(\n parentId: string,\n permissionFilterOption?: PermissionFilterOption,\n cursor?: string\n ): Flight.PublicRequest {\n return {\n key: `video:${parentId}:interactives:${permissionFilterOption}:${cursor}`,\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${parentId}/interactives`, {\n query: SharedWithStatements.INTERACTIVE_COLLECTION,\n cursor\n }),\n publicUrl: UrlHelper.urlBuilder(`/api/objects/${parentId}/interactives`, {\n query: SharedWithStatements.INTERACTIVE_COLLECTION,\n cursor\n })\n };\n },\n\n sharedInteractiveMetadata(\n id: string,\n shareId: string,\n success?: (interactiveMetadata: InteractiveMetadata) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n shareId,\n query: SharedWithStatements.INTERACTIVE\n }),\n key: `shared:interactive:metadata:${id}`,\n success,\n error\n };\n },\n publicInteractiveMetadata(\n id: string,\n shareId?: string,\n success?: (interactive: InteractiveMetadata) => void,\n error?: (xhr: Xhr) => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/objects/${id}`, {\n // Query statement here is coupled with ClickView.Lite.Common\\Services\\OpenGraph\\OpenGraphService.cs\n // in lite. If you update this, please update both.\n query: '_parentVideo[_rating],_canBeConsumed,_thumbnail',\n permissionFilterOption: PermissionFilterOption.StripMetadata,\n shareId\n }),\n key: `interactive:metadata:${id}:public:${shareId}`,\n bootstrapName: `shared:object:${id}`,\n success,\n error\n };\n },\n interactive(id: string): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${id}`,\n key: `interactive:${id}`,\n normalize: false\n };\n },\n createInteractive(\n data: CreateInteractiveRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: '/api/domain/v1/interactives',\n key: 'create:interactive',\n type: HttpVerbs.POST,\n invalidationKeys: ['my:videos'],\n data,\n success,\n error\n };\n },\n createInteractiveMetadata(\n videoId: string,\n data: CreateInteractiveMetadataRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${videoId}/interactives`,\n key: 'create:interactive:metadata',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n updateInteractive(\n id: string,\n data: EditInteractiveRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${id}`,\n key: 'update:interactive',\n type: HttpVerbs.PUT,\n data,\n success,\n error,\n /* Update state because domain doesn't return the updated object */\n formatData: () => data,\n invalidationKeys: [`interactive:${id}`]\n };\n },\n updateInteractiveMetadata(\n id: string,\n data: EditInteractiveMetadataRequest | EditInteractiveMetadataOriginRequest,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'update:interactive:metadata',\n type: HttpVerbs.PUT,\n data,\n success,\n error\n };\n },\n interactiveResultSet(interactiveId: string, interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`\n };\n },\n copyInteractive(\n interactiveId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/interactives/${interactiveId}/copy`,\n key: 'copy:interactive',\n type: HttpVerbs.POST,\n invalidationKeys: [ `interactive:${interactiveId}`, 'my:videos' ],\n success,\n error\n };\n },\n deleteInteractiveMetadata(\n interactiveMetadataId: string,\n success?: (data: any) => void,\n error?: (data: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${interactiveMetadataId}`,\n key: 'delete:interactive',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `interactive:${interactiveMetadataId}`, 'my:videos', 'videos' ],\n success,\n error\n };\n },\n removeInteractiveMetadata({\n libraryId,\n categoryId,\n interactiveMetadataId\n }: {\n libraryId: string,\n categoryId: string,\n interactiveMetadataId: string\n }): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/domain/v1/libraries/${libraryId}/videos`, { categoryId, videoIds: interactiveMetadataId }),\n key: `remove:interactive:metadata:${interactiveMetadataId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [ `interactive:${interactiveMetadataId}`, 'my:videos', 'videos' ]\n };\n },\n contributeToCommunity(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contribute`,\n key: 'contribute:interactive',\n type: HttpVerbs.POST\n };\n },\n revokefromCommunity(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contribute`,\n key: 'contribute:interactive',\n type: HttpVerbs.DELETE\n };\n },\n isContributed(interactiveMetadataId: string): Flight.Request {\n return {\n url: `/api/domain/v2/interactives/${interactiveMetadataId}/contributed`,\n key: `iscontributed:${interactiveMetadataId}`,\n normalize: false\n };\n },\n updateInteraction(interaction: Interaction) {\n return {\n url: `/api/domain/v1/interactions/bulk/${interaction.id}`,\n key: 'contribute:interactive',\n data: interaction,\n type: HttpVerbs.PUT,\n invalidationKeys: [`interactive:${interaction.interactiveId}`]\n };\n }\n};\n","import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { EntityType } from 'libs/analytics/interfaces';\n\nimport { ContentLicenseType } from 'libs/shared/enums/ContentLicenceType';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { RestrictionType } from 'libs/shared/enums/RestrictionType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { BaseObject, CanBeConsumedReason, Clip, InteractiveMetadata, Rating, Thumbnail, Video, VideoTypes } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\n\nimport { PermissionName } from '../enums/PermissionName';\nimport { HasPermissionsFunc } from '../hooks/usePermissions';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const VideoHelper = {\n isVideo(obj: BaseObject): obj is Video {\n return obj?.typeId === MasterType.Video;\n },\n\n isClip(obj: BaseObject): obj is Clip {\n return obj?.typeId === MasterType.Clip;\n },\n\n isInteractive(obj: BaseObject): obj is InteractiveMetadata {\n return obj?.typeId === MasterType.Interactive;\n },\n\n isVideoTypeArchived(obj: VideoTypes): boolean {\n return obj?.status === CurationStatus.Archived;\n },\n\n /**\n * Returns true of the object is a video, clip or interactive\n */\n isVideoType(object: BaseObject): object is Video | Clip | InteractiveMetadata {\n return VideoHelper.isVideo(object) || VideoHelper.isInteractive(object) || VideoHelper.isClip(object);\n },\n\n hasSeries(video: Video): boolean {\n return !!video?.series?.id;\n },\n\n showVideoGuidance(hasPermissions: HasPermissionsFunc): boolean {\n return !hasPermissions(PermissionName.StudentExperience);\n },\n\n showInteractivesGuidance(video: VideoTypes): boolean {\n if (!video || VideoHelper.isInteractive(video))\n return false;\n\n const interactiveCount = video.interactives?.data?.length || 0;\n\n return !!interactiveCount;\n },\n\n showResourcesGuidance(video: VideoTypes): boolean {\n if (!video || VideoHelper.isInteractive(video))\n return false;\n\n const resourceCount = (\n (video.resources?.data?.length || 0) +\n (video.links?.data?.length || 0)\n );\n\n return !!resourceCount;\n },\n\n canViewCurriculumLinks(hasPermissions: HasPermissionsFunc, video: VideoTypes): boolean {\n const canView = (\n hasPermissions(PermissionName.ViewCurriculums) &&\n hasPermissions(PermissionName.ManagePresentations)\n );\n\n if (!canView)\n return false;\n \n if (!video || !VideoHelper.isVideo(video))\n return false;\n\n return !!video._hasCurriculumLinks?.value;\n },\n\n getVideoProgress(video: Video): number {\n if (video?.lastProgressPoint)\n return video?.lastProgressPoint;\n\n // Use virtual assoc\n if (video?._videoProgress?.progress)\n return video?._videoProgress?.progress;\n\n return 0;\n },\n\n getThumbnail(video: VideoTypes): Thumbnail {\n if (!video)\n return null;\n\n if (VideoHelper.isVideo(video))\n return video.thumbnail;\n\n if (video?._thumbnail)\n return video._thumbnail;\n\n // Fallbacks for virtual assoc if needed\n if (VideoHelper.isClip(video))\n return video.thumbnail || video._parentVideo?.thumbnail;\n\n if (VideoHelper.isInteractive(video))\n return video._parentVideo?.thumbnail || video._parentClip?.thumbnail;\n },\n\n getDuration(video: VideoTypes): number {\n if (!video)\n return;\n\n if (VideoHelper.isVideo(video))\n return video.duration;\n\n if (VideoHelper.isInteractive(video)) {\n if (video._parentClip?.id)\n return (video._parentClip.endTime - video._parentClip.startTime) * 1000;\n\n if (video._parentVideo?.duration)\n return video._parentVideo.duration;\n }\n\n if (VideoHelper.isClip(video))\n return (video.endTime - video.startTime) * 1000;\n },\n\n getAnalyticsEntity(video: VideoTypes): EntityType {\n if (VideoHelper.isVideo(video))\n return EntityType.Video;\n\n if (VideoHelper.isInteractive(video))\n return EntityType.Interactive;\n\n if (VideoHelper.isClip(video))\n return EntityType.Clip;\n },\n\n getAnalyticsData(\n video: VideoTypes,\n extraAnalyticsData: HashObject = {}\n ): HashObject {\n if (VideoHelper.isVideo(video)) {\n return {\n ...(extraAnalyticsData || {}),\n id: video.id,\n name: video.name\n };\n }\n\n if (VideoHelper.isClip(video)) {\n const data: HashObject = {\n ...(extraAnalyticsData || {}),\n id: video.id,\n name: video.name\n };\n\n if (video._parentVideo?.id)\n data.video = { id: video._parentVideo?.id, name: video._parentVideo.name };\n\n return data;\n }\n\n const data: HashObject = {\n ...extraAnalyticsData,\n id: video.id,\n interactiveId: video.interactiveId,\n name: video.name,\n status: video.status,\n originType: video.originType\n };\n\n if (video?._parentClip?.id)\n data.clip = { id: video?._parentClip?.id, name: video?._parentClip.name };\n\n if (video?._parentVideo?.id)\n data.video = { id: video?._parentVideo?.id, name: video?._parentVideo.name };\n \n return data;\n },\n\n getCanBeConsumed(video: BaseObject): {\n canNavigate: boolean,\n canConsume: boolean,\n reason?: CanBeConsumedReason\n } {\n if (!video || !VideoHelper.isVideoType(video)) {\n return {\n canNavigate: false,\n canConsume: false\n };\n }\n\n if (video._canBeConsumed) {\n return {\n /**\n * Product navigation is enabled for \"login-required\" reason to support public access. \n * The video itself cannot be consumed, however, clients can allow users to browse the platform.\n * \n * Note: canNavigate is initially available for just videos. Interactives and Clips will be supported in Y2.\n */\n canNavigate: (video._canBeConsumed?.reason === 'login-required' && VideoHelper.isVideo(video)) || video._canBeConsumed.value === true,\n canConsume: video._canBeConsumed.value,\n reason: video._canBeConsumed?.reason\n };\n }\n\n /**\n * Many of the components shared between online and lite read this value.\n * Online doesn't fetch or care about this value, which means by this point it should\n * still be null. In this case, we just set it to true so that the components can render\n * as normal.\n */\n return {\n canNavigate: true,\n canConsume: true\n };\n },\n\n getPrivacyReasoning(video: VideoTypes, showSignIn: boolean = false): string {\n const { canConsume, canNavigate, reason } = VideoHelper.getCanBeConsumed(video);\n\n const getNoLongerAvailableText = () => {\n if (VideoHelper.isClip(video))\n return getPhrase('clipParentDeleted');\n\n if (VideoHelper.isInteractive(video))\n return getPhrase('interactiveParentDeleted');\n\n return getPhrase('videoDeleted');\n };\n\n const getLoginRequiredText = () => {\n if (VideoHelper.isClip(video))\n return getPhrase('clipLoginRequired');\n\n if (VideoHelper.isInteractive(video))\n return getPhrase('interactiveLoginRequired');\n\n return getPhrase('videoLoginRequired');\n };\n\n if (!canConsume && !canNavigate) {\n if (showSignIn)\n return getLoginRequiredText();\n\n switch (reason) {\n case 'rating-not-allowed': {\n return getPhrase('ratingNotAllowed');\n }\n\n case 'video-deleted': {\n return getNoLongerAvailableText();\n }\n\n case 'clickview-private': {\n return getPhrase('clickViewPrivate');\n }\n\n case 'private': {\n return getPhrase('genericCannotAccess');\n }\n\n case 'login-required': {\n return getLoginRequiredText();\n }\n\n case 'restricted-access': {\n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n\n if (restriction?.type === RestrictionType.Custom)\n return getPhrase('awaitingApproval');\n\n return getPhrase('restrictedAccess');\n }\n\n default: {\n return getPhrase('genericCannotAccess');\n }\n }\n }\n\n if (VideoHelper.isInteractive(video) && video.status === CurationStatus.Draft)\n return getPhrase('draftInteractive');\n\n return '';\n },\n\n getTitle(video: VideoTypes): string {\n if (video.name) {\n if (VideoHelper.isInteractive(video) && video.status === CurationStatus.Draft) {\n return getPhrase('draftInteractiveTitle', { name: video.name });\n }\n\n return video.name;\n }\n\n const { canConsume, reason } = VideoHelper.getCanBeConsumed(video);\n\n if (!canConsume && reason === 'private')\n return getPhrase('privateVideo');\n\n if (!canConsume && reason === 'video-deleted')\n return getPhrase('videoUnavailable');\n\n return getPhrase('privateVideo');\n },\n\n getParentVideo(video: VideoTypes): Video | null {\n if (VideoHelper.isVideo(video))\n return video;\n\n if (VideoHelper.isClip(video) || VideoHelper.isInteractive(video))\n return video._parentVideo;\n },\n\n getRating(video: VideoTypes): Rating | null {\n if (VideoHelper.isVideo(video))\n return video._rating?.value || video.rating;\n\n return video?._parentVideo?._rating?.value;\n },\n\n getVideoRequest(\n objectId: string,\n objectTypeId: MasterType,\n shareId?: string\n ): Flight.Request {\n if (shareId) {\n switch (objectTypeId) {\n case MasterType.Video:\n return VideoRequests.sharedVideo(objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.sharedClip(objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.sharedInteractiveMetadata(objectId, shareId);\n }\n\n Core.ErrorHelper.throw(new DevError('Unsupported master type'));\n }\n\n switch (objectTypeId) {\n case MasterType.Video:\n return VideoRequests.video(objectId);\n case MasterType.Clip:\n return ClipRequests.clip(objectId);\n case MasterType.Interactive:\n return InteractiveRequests.interactiveMetadata(objectId);\n }\n\n Core.ErrorHelper.throw(new DevError('Unsupported master type'));\n },\n\n isBroadcast(video: Video): boolean {\n return !!video?.contentLicences?.data?.some(l =>\n l.systemName === ContentLicenseType.Era ||\n l.systemName === ContentLicenseType.Screenrights);\n },\n\n isUgc(video: Video): boolean {\n // if video isn't broadcast and isn't curated by the ClickView team, chances are it's UGC\n return !VideoHelper.isBroadcast(video) && !video?._isClickViewCurated?.value;\n },\n\n getReleaseDate(video: Video): string {\n if (!video)\n return '';\n\n if (video.dateReleased && VideoHelper.isBroadcast(video))\n return DateHelper.format(video.dateReleased, 'DD/MM/YYYY');\n\n return '';\n },\n\n canViewOriginalVideo(video: Clip | InteractiveMetadata): boolean {\n return !!video?._parentVideo?._canBeConsumed?.value;\n },\n\n getTrackingCode(video: VideoTypes): string | undefined {\n if (VideoHelper.isVideo(video))\n return video.trackingCode;\n\n if (VideoHelper.isClip(video) || VideoHelper.isInteractive(video))\n return video._parentVideo.trackingCode;\n },\n\n isInExchange(video: Video): boolean {\n return !!video?.libraries?.data?.some(l => l.typeId === MasterType.ExchangeCollection);\n },\n\n canViewUploadDate(video: Video): boolean {\n if (!video || !video.dateCreated)\n return false;\n\n if (!video._isClickViewCurated || video._isClickViewCurated.value)\n return false;\n\n return true;\n }\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,St as n,b as r,d as i,s as a}from"./CnnBLBPY.chunk.js";import{t as o}from"./GN6vNflP.chunk.js";import{n as s,t as c}from"./Dn3hwC-o.chunk.js";import{t as l}from"./BOvQpQ21.chunk.js";t();var u=e(),d=`exchange.exchangeTabs`,f=o.encloseNamespace(d),p={categories:{application:s.EXCHANGE,action:c.Exchange.INDEX},mostRecent:{application:s.EXCHANGE,action:c.Exchange.MOST_RECENT}},m={actionType:r.Click,entity:a.Url,location:i.MagicTabs};function h(e){let{active:t}=e;return(0,u.jsx)(l,{tabs:[{name:f(`categories`),appLink:p.categories,active:t===`categories`,analyticsData:{name:f(`categories`),url:n.getHref(p.categories)},analyticsOptions:m},{name:f(`mostRecent`),appLink:p.mostRecent,active:t===`most-recent`,analyticsData:{name:o.getPhrase(d,`mostRecent`),url:n.getHref(p.mostRecent)},analyticsOptions:m}]})}export{h as t};
2
- //# sourceMappingURL=B0VKYPiu.chunk.js.map
1
+ import{C as e,D as t,St as n,b as r,d as i,s as a}from"./CnnBLBPY.chunk.js";import{t as o}from"./GN6vNflP.chunk.js";import{n as s,t as c}from"./Dn3hwC-o.chunk.js";import{t as l}from"./DSZkTUVU.chunk.js";t();var u=e(),d=`exchange.exchangeTabs`,f=o.encloseNamespace(d),p={categories:{application:s.EXCHANGE,action:c.Exchange.INDEX},mostRecent:{application:s.EXCHANGE,action:c.Exchange.MOST_RECENT}},m={actionType:r.Click,entity:a.Url,location:i.MagicTabs};function h(e){let{active:t}=e;return(0,u.jsx)(l,{tabs:[{name:f(`categories`),appLink:p.categories,active:t===`categories`,analyticsData:{name:f(`categories`),url:n.getHref(p.categories)},analyticsOptions:m},{name:f(`mostRecent`),appLink:p.mostRecent,active:t===`most-recent`,analyticsData:{name:o.getPhrase(d,`mostRecent`),url:n.getHref(p.mostRecent)},analyticsOptions:m}]})}export{h as t};
2
+ //# sourceMappingURL=MYu2AEsL.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B0VKYPiu.chunk.js","names":[],"sources":["../../src/apps/exchange/components/exchange-tabs/ExchangeTabs.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst APP_LINKS = {\n categories: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n },\n mostRecent: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.MOST_RECENT\n }\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\ninterface ExchangeTabs {\n active: 'categories' | 'most-recent' | 'featured-channels';\n}\n\nexport function ExchangeTabs(props: ExchangeTabs): JSX.Element {\n const { active } = props;\n\n return (\n <PillTabSelector\n tabs={[{\n name: getPhrase('categories'),\n appLink: APP_LINKS.categories,\n active: active === 'categories',\n analyticsData: {\n name: getPhrase('categories'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.categories)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }, {\n name: getPhrase('mostRecent'),\n appLink: APP_LINKS.mostRecent,\n active: active === 'most-recent',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'mostRecent'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.mostRecent)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }]}\n />\n );\n}\n"],"mappings":"yNAYM,EAAY,wBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAEvD,EAAY,CAChB,WAAY,CACV,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CACD,WAAY,CACV,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,YAC1B,CACF,CAEK,EAAoB,CACxB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CAMD,SAAgB,EAAa,EAAkC,CAC7D,GAAM,CAAE,UAAW,EAEnB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAM,CAAC,CACL,KAAM,EAAU,aAAa,CAC7B,QAAS,EAAU,WACnB,OAAQ,IAAW,aACnB,cAAe,CACb,KAAM,EAAU,aAAa,CAC7B,IAAA,EAAwB,QAAQ,EAAU,WAAW,CACtD,CACD,iBAAkB,EACnB,CAAE,CACD,KAAM,EAAU,aAAa,CAC7B,QAAS,EAAU,WACnB,OAAQ,IAAW,cACnB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,aAAa,CACxD,IAAA,EAAwB,QAAQ,EAAU,WAAW,CACtD,CACD,iBAAkB,EACnB,CAAC,CACF,CAAA"}
1
+ {"version":3,"file":"MYu2AEsL.chunk.js","names":[],"sources":["../../src/apps/exchange/components/exchange-tabs/ExchangeTabs.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst APP_LINKS = {\n categories: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n },\n mostRecent: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.MOST_RECENT\n }\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\ninterface ExchangeTabs {\n active: 'categories' | 'most-recent' | 'featured-channels';\n}\n\nexport function ExchangeTabs(props: ExchangeTabs): JSX.Element {\n const { active } = props;\n\n return (\n <PillTabSelector\n tabs={[{\n name: getPhrase('categories'),\n appLink: APP_LINKS.categories,\n active: active === 'categories',\n analyticsData: {\n name: getPhrase('categories'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.categories)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }, {\n name: getPhrase('mostRecent'),\n appLink: APP_LINKS.mostRecent,\n active: active === 'most-recent',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'mostRecent'),\n url: Core.AppLinkHelper.getHref(APP_LINKS.mostRecent)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n }]}\n />\n );\n}\n"],"mappings":"yNAYM,EAAY,wBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAEvD,EAAY,CAChB,WAAY,CACV,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CACD,WAAY,CACV,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,YAC1B,CACF,CAEK,EAAoB,CACxB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CAMD,SAAgB,EAAa,EAAkC,CAC7D,GAAM,CAAE,UAAW,EAEnB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,KAAM,CAAC,CACL,KAAM,EAAU,aAAa,CAC7B,QAAS,EAAU,WACnB,OAAQ,IAAW,aACnB,cAAe,CACb,KAAM,EAAU,aAAa,CAC7B,IAAA,EAAwB,QAAQ,EAAU,WAAW,CACtD,CACD,iBAAkB,EACnB,CAAE,CACD,KAAM,EAAU,aAAa,CAC7B,QAAS,EAAU,WACnB,OAAQ,IAAW,cACnB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,aAAa,CACxD,IAAA,EAAwB,QAAQ,EAAU,WAAW,CACtD,CACD,iBAAkB,EACnB,CAAC,CACF,CAAA"}
@@ -1,2 +1,2 @@
1
- import{t as e}from"./C4W8SQLT.chunk.js";import{et as t}from"./app-DDrsm5nt.js";function n(n,r){let[i,a]=e(`exchange:preview:${n}`,r?t.getPreviousRoute():void 0);return{previewContext:i,clearPreviewContext:()=>a(void 0)}}export{n as t};
2
- //# sourceMappingURL=B9Rb6IIb.chunk.js.map
1
+ import{t as e}from"./C4W8SQLT.chunk.js";import{et as t}from"./app-BGxmHvGl.js";function n(n,r){let[i,a]=e(`exchange:preview:${n}`,r?t.getPreviousRoute():void 0);return{previewContext:i,clearPreviewContext:()=>a(void 0)}}export{n as t};
2
+ //# sourceMappingURL=NtrZI2Ef.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B9Rb6IIb.chunk.js","names":[],"sources":["../../src/apps/exchange/hooks/usePreviewContext.ts"],"sourcesContent":["import { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface ContentViewModel {\n appLink: Core.AppLink;\n}\n\nexport function usePreviewContext(videoId: string, init: boolean) {\n const [ previewContext, setViewModel ] = useViewModel<ContentViewModel>(\n `exchange:preview:${videoId}`,\n init ? ContextService.getPreviousRoute() : undefined\n );\n\n return {\n previewContext,\n clearPreviewContext: () => setViewModel(undefined)\n };\n}\n"],"mappings":"+EASA,SAAgB,EAAkB,EAAiB,EAAe,CAChE,GAAM,CAAE,EAAgB,GAAiB,EACvC,oBAAoB,IACpB,EAAO,EAAe,kBAAkB,CAAG,IAAA,GAC5C,CAED,MAAO,CACL,iBACA,wBAA2B,EAAa,IAAA,GAAA,CACzC"}
1
+ {"version":3,"file":"NtrZI2Ef.chunk.js","names":[],"sources":["../../src/apps/exchange/hooks/usePreviewContext.ts"],"sourcesContent":["import { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface ContentViewModel {\n appLink: Core.AppLink;\n}\n\nexport function usePreviewContext(videoId: string, init: boolean) {\n const [ previewContext, setViewModel ] = useViewModel<ContentViewModel>(\n `exchange:preview:${videoId}`,\n init ? ContextService.getPreviousRoute() : undefined\n );\n\n return {\n previewContext,\n clearPreviewContext: () => setViewModel(undefined)\n };\n}\n"],"mappings":"+EASA,SAAgB,EAAkB,EAAiB,EAAe,CAChE,GAAM,CAAE,EAAgB,GAAiB,EACvC,oBAAoB,IACpB,EAAO,EAAe,kBAAkB,CAAG,IAAA,GAC5C,CAED,MAAO,CACL,iBACA,wBAA2B,EAAa,IAAA,GAAA,CACzC"}
@@ -1,2 +1,2 @@
1
- import{_t as e,ft as t}from"./CnnBLBPY.chunk.js";import{t as n}from"./GN6vNflP.chunk.js";import{t as r}from"./DRTfS6nN.chunk.js";import{_ as i}from"./app-DDrsm5nt.js";var a=n.encloseNamespace(`tv.getRegionInfo`);function o(n){let o={[i.AU]:{tv:a(`foxtel`),country:a(`au`),requestProgram:!0,programGuidePhraseKey:`foxtelTvGuide`,logo:r.ProgramLogos.FOXTEL,bgColor:`bg-light-yellow`},[i.UK]:{tv:a(`bbcRes`),country:a(`uk`),requestProgram:!0,programGuidePhraseKey:`bbcSearch`,logo:r.ProgramLogos.BBC,bgColor:`bg-light-blue`},[i.NZ]:{country:a(`nz`),requestProgram:!1}}[n];return o||e.throw(new t(`No region info mapped for instance region`)),o}export{o as t};
2
- //# sourceMappingURL=CRHkMr9_2.chunk.js.map
1
+ import{_t as e,ft as t}from"./CnnBLBPY.chunk.js";import{t as n}from"./GN6vNflP.chunk.js";import{t as r}from"./DRTfS6nN.chunk.js";import{_ as i}from"./app-BGxmHvGl.js";var a=n.encloseNamespace(`tv.getRegionInfo`);function o(n){let o={[i.AU]:{tv:a(`foxtel`),country:a(`au`),requestProgram:!0,programGuidePhraseKey:`foxtelTvGuide`,logo:r.ProgramLogos.FOXTEL,bgColor:`bg-light-yellow`},[i.UK]:{tv:a(`bbcRes`),country:a(`uk`),requestProgram:!0,programGuidePhraseKey:`bbcSearch`,logo:r.ProgramLogos.BBC,bgColor:`bg-light-blue`},[i.NZ]:{country:a(`nz`),requestProgram:!1}}[n];return o||e.throw(new t(`No region info mapped for instance region`)),o}export{o as t};
2
+ //# sourceMappingURL=OBYDGOgI2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CRHkMr9_2.chunk.js","names":[],"sources":["../../src/apps/tv/utils/getRegionInfo/getRegionInfo.ts"],"sourcesContent":["import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'tv.getRegionInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype RegionInfo = {\n country: string,\n requestProgram: boolean,\n tv?: string,\n programGuidePhraseKey?: string,\n logo?: string,\n bgColor?: string\n};\n\nexport function getRegionInfo(instanceRegion: InstanceRegion): RegionInfo {\n const regionMap: Partial<Record<InstanceRegion, RegionInfo>> = {\n [InstanceRegion.AU]: {\n tv: getPhrase('foxtel'),\n country: getPhrase('au'),\n requestProgram: true,\n programGuidePhraseKey: 'foxtelTvGuide',\n logo: ImageUrls.ProgramLogos.FOXTEL,\n bgColor: 'bg-light-yellow'\n },\n [InstanceRegion.UK]: {\n tv: getPhrase('bbcRes'),\n country: getPhrase('uk'),\n requestProgram: true,\n programGuidePhraseKey: 'bbcSearch',\n logo: ImageUrls.ProgramLogos.BBC,\n bgColor: 'bg-light-blue'\n },\n [InstanceRegion.NZ]: {\n country: getPhrase('nz'),\n requestProgram: false\n }\n };\n\n const regionInfo = regionMap[instanceRegion];\n\n if (!regionInfo)\n Core.ErrorHelper.throw(new DevError('No region info mapped for instance region'));\n\n return regionInfo;\n}\n"],"mappings":"uKASA,IAAM,EAAY,EAAgB,iBADhB,mBAC2C,CAW7D,SAAgB,EAAc,EAA4C,CAwBxE,IAAM,EAvByD,EAC5D,EAAe,IAAK,CACnB,GAAI,EAAU,SAAS,CACvB,QAAS,EAAU,KAAK,CACxB,eAAgB,GAChB,sBAAuB,gBACvB,KAAM,EAAU,aAAa,OAC7B,QAAS,kBACV,EACA,EAAe,IAAK,CACnB,GAAK,EAAU,SAAS,CACxB,QAAS,EAAU,KAAK,CACxB,eAAgB,GAChB,sBAAuB,YACvB,KAAM,EAAU,aAAa,IAC7B,QAAS,gBACV,EACA,EAAe,IAAK,CACnB,QAAS,EAAU,KAAK,CACxB,eAAgB,GACjB,CACF,CAE4B,GAK7B,OAHK,GACH,EAAiB,MAAM,IAAI,EAAS,4CAA4C,CAAC,CAE5E"}
1
+ {"version":3,"file":"OBYDGOgI2.chunk.js","names":[],"sources":["../../src/apps/tv/utils/getRegionInfo/getRegionInfo.ts"],"sourcesContent":["import { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'tv.getRegionInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype RegionInfo = {\n country: string,\n requestProgram: boolean,\n tv?: string,\n programGuidePhraseKey?: string,\n logo?: string,\n bgColor?: string\n};\n\nexport function getRegionInfo(instanceRegion: InstanceRegion): RegionInfo {\n const regionMap: Partial<Record<InstanceRegion, RegionInfo>> = {\n [InstanceRegion.AU]: {\n tv: getPhrase('foxtel'),\n country: getPhrase('au'),\n requestProgram: true,\n programGuidePhraseKey: 'foxtelTvGuide',\n logo: ImageUrls.ProgramLogos.FOXTEL,\n bgColor: 'bg-light-yellow'\n },\n [InstanceRegion.UK]: {\n tv: getPhrase('bbcRes'),\n country: getPhrase('uk'),\n requestProgram: true,\n programGuidePhraseKey: 'bbcSearch',\n logo: ImageUrls.ProgramLogos.BBC,\n bgColor: 'bg-light-blue'\n },\n [InstanceRegion.NZ]: {\n country: getPhrase('nz'),\n requestProgram: false\n }\n };\n\n const regionInfo = regionMap[instanceRegion];\n\n if (!regionInfo)\n Core.ErrorHelper.throw(new DevError('No region info mapped for instance region'));\n\n return regionInfo;\n}\n"],"mappings":"uKASA,IAAM,EAAY,EAAgB,iBADhB,mBAC2C,CAW7D,SAAgB,EAAc,EAA4C,CAwBxE,IAAM,EAvByD,EAC5D,EAAe,IAAK,CACnB,GAAI,EAAU,SAAS,CACvB,QAAS,EAAU,KAAK,CACxB,eAAgB,GAChB,sBAAuB,gBACvB,KAAM,EAAU,aAAa,OAC7B,QAAS,kBACV,EACA,EAAe,IAAK,CACnB,GAAK,EAAU,SAAS,CACxB,QAAS,EAAU,KAAK,CACxB,eAAgB,GAChB,sBAAuB,YACvB,KAAM,EAAU,aAAa,IAC7B,QAAS,gBACV,EACA,EAAe,IAAK,CACnB,QAAS,EAAU,KAAK,CACxB,eAAgB,GACjB,CACF,CAE4B,GAK7B,OAHK,GACH,EAAiB,MAAM,IAAI,EAAS,4CAA4C,CAAC,CAE5E"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,St as n,b as r,d as i,mn as a,s as o,yt as s}from"./CnnBLBPY.chunk.js";import{g as c,y as l}from"./DW0w8_XN.chunk.js";import{l as u}from"./D8clSITt.chunk.js";import{t as d}from"./CBDo4oAU.chunk.js";import{t as f}from"./GN6vNflP.chunk.js";import{n as p,t as m}from"./Dn3hwC-o.chunk.js";import{t as h}from"./BjaJoJzM.chunk.js";import{t as g}from"./xL848v0O.chunk.js";import{D as _,Z as v}from"./app-DDrsm5nt.js";import{t as y}from"./Bzw5oyg9.chunk.js";import{t as b}from"./CeHHO1Hv.chunk.js";import{t as x}from"./C7OCN_w_.chunk.js";import{t as S}from"./BOvQpQ21.chunk.js";import{t as C}from"./BcJCL8cu2.chunk.js";import{t as w}from"./BdSdO6n62.chunk.js";import{t as T}from"./C6jF43q92.chunk.js";import{t as E}from"./uPFXIvcK2.chunk.js";import{n as D,r as O,t as k}from"./DdwVkiCn2.chunk.js";import{n as A,t as j}from"./CvQQNf_J2.chunk.js";import{n as M,t as N}from"./6124murE2.chunk.js";import{t as P}from"./Fu0bLEzl2.chunk.js";var F=a(t()),I={pillTabSelector:`_pillTabSelector_1d8n6_1`},L=e(),R=`Custom.#.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z`.split(`.`),z={"#":`0`},B={actionType:r.Click,entity:o.Url,location:i.MagicTabs};function V(e,t){if(!e)return;if(e===`0`)return`#`;let n=R.find(t=>t.toUpperCase()===e.toUpperCase());if(!(n===`Custom`&&!t))return n}function H(e){return R.map(t=>{if(t===`Custom`&&!e.showCustom)return;let r=e.getItemAppLink(z[t]??t);return{name:t,appLink:r,active:e.selected===t,analyticsData:{name:t,url:n.getHref(r)},analyticsOptions:B}}).filter(Boolean)}function U(e){let t=H({selected:V(e.selected,e.showCustom),showCustom:e.showCustom,getItemAppLink:e.getItemAppLink});return(0,L.jsx)(`div`,{className:l(e.noMarginBottom?`mb-0`:`mb-3`,e.className),children:(0,L.jsx)(S,{tabs:t,className:I.pillTabSelector,enableSmallScreenSupport:e.enableSmallScreenSupport,formatDisplayText:e.formatDisplayText,forceSmallScreenDropdown:e.forceSmallScreenDropdown})})}var W={dateContainer:`_dateContainer_b9acj_1`,hover:`_hover_b9acj_4`,channelLogo:`_channelLogo_b9acj_7`,channelLogoContainer:`_channelLogoContainer_b9acj_10`,programsContainer:`_programsContainer_b9acj_13`,date:`_date_b9acj_1`,itemContainer:`_itemContainer_b9acj_19`,badgeWrapper:`_badgeWrapper_b9acj_22`,thumbnail:`_thumbnail_b9acj_27`};function G(e){function t(t){return d.findWhere(e.channels,{name:t})?.logoUrl}return(0,L.jsx)(`div`,{className:`mb-2`,children:e.groupedPrograms.map(([n,r])=>(0,L.jsxs)(`div`,{className:`border-top d-flex pt-3 pb-2`,children:[(0,L.jsx)(`div`,{className:`${W.channelLogoContainer} flex-shrink-0 mb-3`,children:(0,L.jsx)(`img`,{src:t(n),alt:n,className:`${W.channelLogo} ms-4`})}),(0,L.jsx)(`div`,{className:`w-100`,children:r.map(([t,n])=>(0,L.jsx)(K,{date:t,programs:n,tvPreviewUrls:e.tvPreviewUrls},t))})]},n))})}function K(e){let[t,n]=F.useState();function r(e){switch(e.programType){case k.Video:return{application:p.TV,action:m.Tv.PREVIEW,args:[e.regionCode,e.id]};case k.Audio:return{application:p.TV,action:m.Tv.RADIO_DOWNLOAD,args:[e.id]}}}function i(t){return`${e.tvPreviewUrls[t.regionCode]}/thumbnail/${t.globalId.split(`-`).join(``)}.jpg`}return(0,L.jsx)(`div`,{className:`${W.dateContainer} ${t?W.hover:``} py-2 px-3 rounded`,children:(0,L.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,L.jsx)(`div`,{className:`${W.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:(0,L.jsx)(y,{src:i(t||e.programs[0]),alt:g.format(e.date,`D MMM`),extraClasses:`w-100 rounded`})}),(0,L.jsxs)(`p`,{className:`${W.date} fw-semibold flex-shrink-0 mb-0`,children:[g.format(e.date,`D MMM`),`:`]}),(0,L.jsx)(`div`,{className:`${W.programsContainer} d-flex flex-wrap`,children:e.programs.map(e=>(0,L.jsx)(`div`,{onMouseEnter:()=>n(e),onMouseLeave:()=>n(null),children:(0,L.jsx)(c,{appLink:r(e),className:`text-decoration-none`,children:(0,L.jsx)(w,{program:e,showEndTime:!0})},e.id)},e.id))})]},e.date)})}var q=f.encloseNamespace(`tv.programs`),J=/^[a-zA-Z]/;function Y(e){let t=e.startsWith||`A`,n=u(v.config()),r=u(T.region(e.region)),i=u(T.regions()),a=u(T.dateRange(e.region)),o=u(r.data&&T.channels(r.data.code)),c=u(r.data&&a.data&&T.programsByLetter(r.data.code,t,a.data.startDate,a.data.endDate)),{setRegion:l}=P(),{liteUpgradeTypeCustomer:d}=_(null),f=F.useMemo(()=>{if(!c.data?.length)return[];let t={};c.data.forEach(n=>{e.startsWith===`0`&&J.test(n.title)||(t[n.title]||(t[n.title]=[]),t[n.title].push(n))});let n=Object.entries(t);return n=n.sort(([e],[t])=>e<t?-1:1),n.map(([e,t])=>{let n=t.reduce((e,t)=>{let n=t.channelName;e[n]||(e[n]={});let r=C(t.startTime,t.timeZone),i=g.format(r,`YYYY-MM-DD`);return e[n][i]||(e[n][i]=[]),e[n][i].push(t),e},{});return[e,Object.entries(n).map((([e,t])=>[e,Object.entries(t)]))]})},[c.data]);[...R,`0`].includes(t)||b(s.BadRequest),E(r),x([i,c]),h({title:q(`title`)});let y=r.hasCompleted&&i.hasCompleted&&a.hasCompleted&&c.hasCompleted&&n.hasCompleted;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(N,{region:r.data}),(0,L.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,L.jsx)(j,{active:`programs`,currentRegion:r.data,showTvGuide:!!d,config:n.data}),(0,L.jsx)(M,{currentRegion:r.data,regions:i.data,appLink:{application:p.TV,action:m.Tv.PROGRAMS,params:{startsWith:t}},onClick:l})]}),(0,L.jsx)(A,{dateRange:a.data,region:r.data}),(0,L.jsx)(U,{selected:t,getItemAppLink:e=>({application:p.TV,action:m.Tv.PROGRAMS,args:[r.data?.code],params:{startsWith:e}})}),y?(0,L.jsx)(L.Fragment,{children:(0,L.jsx)(O,{children:f.map(([e,t],r)=>(0,L.jsx)(O.Header,{title:e,children:(0,L.jsx)(G,{groupedPrograms:t,channels:o.data,tvPreviewUrls:n.data.tvPreviewUrls})},r))})}):(0,L.jsx)(D,{})]})}export{Y as TvProgramsView};
2
- //# sourceMappingURL=zp5MUThO.chunk.js.map
1
+ import{C as e,D as t,St as n,b as r,d as i,mn as a,s as o,yt as s}from"./CnnBLBPY.chunk.js";import{g as c,y as l}from"./DW0w8_XN.chunk.js";import{l as u}from"./D8clSITt.chunk.js";import{t as d}from"./CBDo4oAU.chunk.js";import{t as f}from"./GN6vNflP.chunk.js";import{n as p,t as m}from"./Dn3hwC-o.chunk.js";import{t as h}from"./BjaJoJzM.chunk.js";import{t as g}from"./xL848v0O.chunk.js";import{D as _,Z as v}from"./app-BGxmHvGl.js";import{t as y}from"./Bzw5oyg9.chunk.js";import{t as b}from"./DmVXt6_V.chunk.js";import{t as x}from"./CfNYdg0m.chunk.js";import{t as S}from"./DSZkTUVU.chunk.js";import{t as C}from"./BcJCL8cu2.chunk.js";import{t as w}from"./BdSdO6n62.chunk.js";import{t as T}from"./C6jF43q92.chunk.js";import{t as E}from"./8pXw5z942.chunk.js";import{n as D,r as O,t as k}from"./DdwVkiCn2.chunk.js";import{n as A,t as j}from"./DKz4jhnr2.chunk.js";import{n as M,t as N}from"./6124murE2.chunk.js";import{t as P}from"./C3Hw2TpW2.chunk.js";var F=a(t()),I={pillTabSelector:`_pillTabSelector_1d8n6_1`},L=e(),R=`Custom.#.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z`.split(`.`),z={"#":`0`},B={actionType:r.Click,entity:o.Url,location:i.MagicTabs};function V(e,t){if(!e)return;if(e===`0`)return`#`;let n=R.find(t=>t.toUpperCase()===e.toUpperCase());if(!(n===`Custom`&&!t))return n}function H(e){return R.map(t=>{if(t===`Custom`&&!e.showCustom)return;let r=e.getItemAppLink(z[t]??t);return{name:t,appLink:r,active:e.selected===t,analyticsData:{name:t,url:n.getHref(r)},analyticsOptions:B}}).filter(Boolean)}function U(e){let t=H({selected:V(e.selected,e.showCustom),showCustom:e.showCustom,getItemAppLink:e.getItemAppLink});return(0,L.jsx)(`div`,{className:l(e.noMarginBottom?`mb-0`:`mb-3`,e.className),children:(0,L.jsx)(S,{tabs:t,className:I.pillTabSelector,enableSmallScreenSupport:e.enableSmallScreenSupport,formatDisplayText:e.formatDisplayText,forceSmallScreenDropdown:e.forceSmallScreenDropdown})})}var W={dateContainer:`_dateContainer_b9acj_1`,hover:`_hover_b9acj_4`,channelLogo:`_channelLogo_b9acj_7`,channelLogoContainer:`_channelLogoContainer_b9acj_10`,programsContainer:`_programsContainer_b9acj_13`,date:`_date_b9acj_1`,itemContainer:`_itemContainer_b9acj_19`,badgeWrapper:`_badgeWrapper_b9acj_22`,thumbnail:`_thumbnail_b9acj_27`};function G(e){function t(t){return d.findWhere(e.channels,{name:t})?.logoUrl}return(0,L.jsx)(`div`,{className:`mb-2`,children:e.groupedPrograms.map(([n,r])=>(0,L.jsxs)(`div`,{className:`border-top d-flex pt-3 pb-2`,children:[(0,L.jsx)(`div`,{className:`${W.channelLogoContainer} flex-shrink-0 mb-3`,children:(0,L.jsx)(`img`,{src:t(n),alt:n,className:`${W.channelLogo} ms-4`})}),(0,L.jsx)(`div`,{className:`w-100`,children:r.map(([t,n])=>(0,L.jsx)(K,{date:t,programs:n,tvPreviewUrls:e.tvPreviewUrls},t))})]},n))})}function K(e){let[t,n]=F.useState();function r(e){switch(e.programType){case k.Video:return{application:p.TV,action:m.Tv.PREVIEW,args:[e.regionCode,e.id]};case k.Audio:return{application:p.TV,action:m.Tv.RADIO_DOWNLOAD,args:[e.id]}}}function i(t){return`${e.tvPreviewUrls[t.regionCode]}/thumbnail/${t.globalId.split(`-`).join(``)}.jpg`}return(0,L.jsx)(`div`,{className:`${W.dateContainer} ${t?W.hover:``} py-2 px-3 rounded`,children:(0,L.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,L.jsx)(`div`,{className:`${W.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:(0,L.jsx)(y,{src:i(t||e.programs[0]),alt:g.format(e.date,`D MMM`),extraClasses:`w-100 rounded`})}),(0,L.jsxs)(`p`,{className:`${W.date} fw-semibold flex-shrink-0 mb-0`,children:[g.format(e.date,`D MMM`),`:`]}),(0,L.jsx)(`div`,{className:`${W.programsContainer} d-flex flex-wrap`,children:e.programs.map(e=>(0,L.jsx)(`div`,{onMouseEnter:()=>n(e),onMouseLeave:()=>n(null),children:(0,L.jsx)(c,{appLink:r(e),className:`text-decoration-none`,children:(0,L.jsx)(w,{program:e,showEndTime:!0})},e.id)},e.id))})]},e.date)})}var q=f.encloseNamespace(`tv.programs`),J=/^[a-zA-Z]/;function Y(e){let t=e.startsWith||`A`,n=u(v.config()),r=u(T.region(e.region)),i=u(T.regions()),a=u(T.dateRange(e.region)),o=u(r.data&&T.channels(r.data.code)),c=u(r.data&&a.data&&T.programsByLetter(r.data.code,t,a.data.startDate,a.data.endDate)),{setRegion:l}=P(),{liteUpgradeTypeCustomer:d}=_(null),f=F.useMemo(()=>{if(!c.data?.length)return[];let t={};c.data.forEach(n=>{e.startsWith===`0`&&J.test(n.title)||(t[n.title]||(t[n.title]=[]),t[n.title].push(n))});let n=Object.entries(t);return n=n.sort(([e],[t])=>e<t?-1:1),n.map(([e,t])=>{let n=t.reduce((e,t)=>{let n=t.channelName;e[n]||(e[n]={});let r=C(t.startTime,t.timeZone),i=g.format(r,`YYYY-MM-DD`);return e[n][i]||(e[n][i]=[]),e[n][i].push(t),e},{});return[e,Object.entries(n).map((([e,t])=>[e,Object.entries(t)]))]})},[c.data]);[...R,`0`].includes(t)||b(s.BadRequest),E(r),x([i,c]),h({title:q(`title`)});let y=r.hasCompleted&&i.hasCompleted&&a.hasCompleted&&c.hasCompleted&&n.hasCompleted;return(0,L.jsxs)(L.Fragment,{children:[(0,L.jsx)(N,{region:r.data}),(0,L.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,L.jsx)(j,{active:`programs`,currentRegion:r.data,showTvGuide:!!d,config:n.data}),(0,L.jsx)(M,{currentRegion:r.data,regions:i.data,appLink:{application:p.TV,action:m.Tv.PROGRAMS,params:{startsWith:t}},onClick:l})]}),(0,L.jsx)(A,{dateRange:a.data,region:r.data}),(0,L.jsx)(U,{selected:t,getItemAppLink:e=>({application:p.TV,action:m.Tv.PROGRAMS,args:[r.data?.code],params:{startsWith:e}})}),y?(0,L.jsx)(L.Fragment,{children:(0,L.jsx)(O,{children:f.map(([e,t],r)=>(0,L.jsx)(O.Header,{title:e,children:(0,L.jsx)(G,{groupedPrograms:t,channels:o.data,tvPreviewUrls:n.data.tvPreviewUrls})},r))})}):(0,L.jsx)(D,{})]})}export{Y as TvProgramsView};
2
+ //# sourceMappingURL=Pixwk-h-.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zp5MUThO.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/letters-bar/letters-bar.module.scss","../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/program-selector.module.scss","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":[":local {\n .pillTabSelector {\n ul {\n width: 100%;\n display: flex!important;\n }\n\n li {\n min-width: 0!important;\n flex-grow: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const CUSTOM_LETTER_TEMPLATE = 'Custom';\n\nexport const ALPHABET = [\n CUSTOM_LETTER_TEMPLATE,\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\ntype LetterBarOptions = typeof ALPHABET[number];\n\nconst LetterParamMap: {[key in LetterBarOptions]?: string } = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showCustom: boolean): LetterBarOptions | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === CUSTOM_LETTER_TEMPLATE && !showCustom)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showCustom: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === CUSTOM_LETTER_TEMPLATE && !options.showCustom)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showCustom?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n className?: string;\n noMarginBottom?: boolean;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showCustom);\n\n const tabs = generateTabs({\n selected: localSelected,\n showCustom: props.showCustom,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className={classNames(props.noMarginBottom ? 'mb-0' : 'mb-3', props.className)}>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n forceSmallScreenDropdown={props.forceSmallScreenDropdown}\n />\n </div>\n );\n}\n",":local {\n .dateContainer {\n transition: background-color 0.25s ease-in-out;\n &.hover {\n background-color: $light-blue;\n }\n }\n\n .channelLogo {\n max-width: 4rem;\n }\n\n .channelLogoContainer {\n width: 8rem;\n }\n\n .programsContainer {\n gap: map-get($spacers, 2);\n }\n\n .date {\n width: 4.5rem;\n }\n\n .itemContainer {\n &:hover {\n background: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n width: 4rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className='border-top d-flex pt-3 pb-2' key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className='d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: {[channel: string]: {[date: string]: TvProgram[] } }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Pixwk-h-.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/letters-bar/letters-bar.module.scss","../../../../libs/shared/src/components/letters-bar/LettersBar.tsx","../../src/apps/tv/views/tv-programs/components/program-selector/program-selector.module.scss","../../src/apps/tv/views/tv-programs/components/program-selector/ProgramSelector.tsx","../../src/apps/tv/views/tv-programs/TvProgramsView.tsx"],"sourcesContent":[":local {\n .pillTabSelector {\n ul {\n width: 100%;\n display: flex!important;\n }\n\n li {\n min-width: 0!important;\n flex-grow: 1;\n }\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './letters-bar.module.scss';\n\nexport const CUSTOM_LETTER_TEMPLATE = 'Custom';\n\nexport const ALPHABET = [\n CUSTOM_LETTER_TEMPLATE,\n '#',\n 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',\n 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'\n] as const;\n\ntype LetterBarOptions = typeof ALPHABET[number];\n\nconst LetterParamMap: {[key in LetterBarOptions]?: string } = {\n '#': '0'\n};\n\nconst ANALYTICS_OPTIONS = {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n};\n\nfunction getSelectedAlphabet(selected: string, showCustom: boolean): LetterBarOptions | undefined {\n if (!selected)\n return;\n \n if (selected === '0')\n return '#';\n\n const alphabet = ALPHABET.find(letter => letter.toUpperCase() === selected.toUpperCase());\n\n if (alphabet === CUSTOM_LETTER_TEMPLATE && !showCustom)\n return;\n\n return alphabet;\n}\n\ninterface GenerateTabsOptions {\n selected: string;\n showCustom: boolean;\n getItemAppLink: (letter: string) => Core.AppLink;\n}\n\nfunction generateTabs(options: GenerateTabsOptions): PillTab[] {\n return ALPHABET.map(letter => {\n if (letter === CUSTOM_LETTER_TEMPLATE && !options.showCustom)\n return;\n\n const appLink = options.getItemAppLink(LetterParamMap[letter] ?? letter);\n\n return {\n name: letter,\n appLink,\n active: options.selected === letter,\n analyticsData: {\n name: letter,\n url: Core.AppLinkHelper.getHref(appLink)\n },\n analyticsOptions: ANALYTICS_OPTIONS\n };\n }).filter(Boolean);\n}\n\ninterface LettersBarProps {\n selected: string;\n getItemAppLink: (letter: string) => Core.AppLink;\n showCustom?: boolean;\n enableSmallScreenSupport?: boolean;\n formatDisplayText?: (name: string) => string;\n className?: string;\n noMarginBottom?: boolean;\n forceSmallScreenDropdown?: boolean;\n}\n\nexport function LettersBar(props: LettersBarProps): JSX.Element {\n const localSelected = getSelectedAlphabet(props.selected, props.showCustom);\n\n const tabs = generateTabs({\n selected: localSelected,\n showCustom: props.showCustom,\n getItemAppLink: props.getItemAppLink\n });\n \n return (\n <div className={classNames(props.noMarginBottom ? 'mb-0' : 'mb-3', props.className)}>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTabSelector}\n enableSmallScreenSupport={props.enableSmallScreenSupport}\n formatDisplayText={props.formatDisplayText}\n forceSmallScreenDropdown={props.forceSmallScreenDropdown}\n />\n </div>\n );\n}\n",":local {\n .dateContainer {\n transition: background-color 0.25s ease-in-out;\n &.hover {\n background-color: $light-blue;\n }\n }\n\n .channelLogo {\n max-width: 4rem;\n }\n\n .channelLogoContainer {\n width: 8rem;\n }\n\n .programsContainer {\n gap: map-get($spacers, 2);\n }\n\n .date {\n width: 4.5rem;\n }\n\n .itemContainer {\n &:hover {\n background: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n width: 4rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './program-selector.module.scss';\n\ninterface ProgramSelectorProps {\n groupedPrograms: [string, [string, TvProgram[]][]][];\n channels: TvChannel[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function ProgramSelector(props: ProgramSelectorProps) {\n function getChannelLogo(channel: string) {\n const matchingChannel = ArrayHelper.findWhere(props.channels, { name: channel });\n return matchingChannel?.logoUrl;\n }\n\n return (\n <div className='mb-2'>\n {props.groupedPrograms.map(([ channel, dates ]) => (\n <div className='border-top d-flex pt-3 pb-2' key={channel}>\n <div className={`${styles.channelLogoContainer} flex-shrink-0 mb-3`}>\n <img src={getChannelLogo(channel)} alt={channel} className={`${styles.channelLogo} ms-4`} />\n </div>\n\n <div className='w-100'>\n {dates.map(([ date, programs ]) => (\n <GroupedPrograms key={date} date={date} programs={programs} tvPreviewUrls={props.tvPreviewUrls} />\n ))}\n </div>\n </div>\n ))}\n </div>\n );\n}\n\ninterface GroupedProgramsProps {\n date: string;\n programs: TvProgram[];\n tvPreviewUrls: {[region: string]: string };\n}\n\nexport function GroupedPrograms(props: GroupedProgramsProps) {\n const [ hoveredProgram, setHoveredProgram ] = React.useState<TvProgram>();\n\n function getProgramAppLink(program: TvProgram) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ program.regionCode, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [program.id]\n };\n }\n }\n\n function getThumbnailUrl(program: TvProgram) {\n const previewUrl = props.tvPreviewUrls[program.regionCode];\n const globalId = program.globalId.split('-').join('');\n return `${previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div\n className={`${styles.dateContainer} ${hoveredProgram ? styles.hover : ''} py-2 px-3 rounded`}\n >\n <div key={props.date} className='d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(hoveredProgram || props.programs[0])}\n alt={DateHelper.format(props.date, 'D MMM')}\n extraClasses='w-100 rounded'\n />\n </div>\n <p className={`${styles.date} fw-semibold flex-shrink-0 mb-0`}>{DateHelper.format(props.date, 'D MMM')}:</p>\n <div className={`${styles.programsContainer} d-flex flex-wrap`}>\n {props.programs.map((program: TvProgram) => (\n <div\n key={program.id}\n onMouseEnter={() => setHoveredProgram(program)}\n onMouseLeave={() => setHoveredProgram(null)}\n >\n <AppLink appLink={getProgramAppLink(program)} key={program.id} className='text-decoration-none'>\n <TvProgramTimeBadge program={program} showEndTime />\n </AppLink>\n </div>\n ))}\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ALPHABET, LettersBar } from 'libs/shared/components/letters-bar/LettersBar';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\nimport { ProgramSelector } from 'apps/tv/views/tv-programs/components/program-selector/ProgramSelector';\n\nconst namespace = 'tv.programs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FIRST_LETTER_REGEX = /^[a-zA-Z]/;\n\ninterface TvProgramsViewProps {\n region: string;\n startsWith: string;\n}\n\nexport function TvProgramsView(props: TvProgramsViewProps): JSX.Element {\n const startsWith = props.startsWith || 'A';\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n dateRange.data &&\n TvRequests.programsByLetter(\n region.data.code,\n startsWith,\n dateRange.data.startDate,\n dateRange.data.endDate\n )\n );\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [] as any[];\n\n const groups: HashObject<TvProgram[]> = {};\n\n programs.data.forEach(program => {\n if (props.startsWith === '0' && FIRST_LETTER_REGEX.test(program.title))\n return;\n\n if (!groups[program.title])\n groups[program.title] = [];\n\n groups[program.title].push(program);\n });\n\n let sorted = Object.entries(groups);\n\n sorted = sorted.sort(([keyA], [keyB]) => (keyA < keyB ? -1 : 1));\n\n const groupedPrograms = sorted.map(([ title, data ]) => {\n const groupedProgram = data.reduce((acc: {[channel: string]: {[date: string]: TvProgram[] } }, program) => {\n const channelKey = program.channelName;\n if (!acc[channelKey]) {\n acc[channelKey] = {};\n }\n \n const startTime = toLocalTime(program.startTime, program.timeZone);\n const dateKey = DateHelper.format(startTime, 'YYYY-MM-DD');\n if (!acc[channelKey][dateKey]) {\n acc[channelKey][dateKey] = [];\n }\n\n acc[channelKey][dateKey].push(program);\n return acc;\n }, {});\n\n const groupedProgramEntries =\n Object\n .entries(groupedProgram)\n .map((([ channel, programs ]) => [ channel, Object.entries(programs) ]));\n \n return [ title, groupedProgramEntries ];\n });\n\n return groupedPrograms as [string, [string, TvProgram[]]];\n }, [programs.data]);\n\n const matchesLetters = [ ...ALPHABET, '0' ].includes(startsWith);\n if (!matchesLetters) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, programs ]);\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const dataLoaded = (\n region.hasCompleted &&\n regions.hasCompleted &&\n dateRange.hasCompleted &&\n programs.hasCompleted &&\n config.hasCompleted\n );\n\n return (\n <>\n <TvSearchBar region={region.data} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='programs'\n currentRegion={region.data}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n\n <TvRegionSelect\n currentRegion={region.data}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n params: { startsWith }\n }}\n onClick={setRegion}\n />\n </div>\n\n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n <LettersBar\n selected={startsWith}\n getItemAppLink={letter => ({\n application: AppChannels.TV,\n action: Actions.Tv.PROGRAMS,\n args: [region.data?.code],\n params: { startsWith: letter }\n })}\n />\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ title, programs ], index) => (\n <AccordionList.Header key={index} title={title}>\n <ProgramSelector\n groupedPrograms={programs}\n channels={channels.data}\n tvPreviewUrls={config.data.tvPreviewUrls}\n />\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}