@clickview/exchange 0.63.0 → 0.64.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/.vite/manifest.json +662 -633
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/DuPOYFVx.chunk.css +1 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/0WVIsJXw.chunk.js +2 -0
  6. package/dist/scripts/0WVIsJXw.chunk.js.map +1 -0
  7. package/dist/scripts/{CoK2sqzN2.chunk.js → B0BkP9zj2.chunk.js} +2 -2
  8. package/dist/scripts/{CoK2sqzN2.chunk.js.map → B0BkP9zj2.chunk.js.map} +1 -1
  9. package/dist/scripts/{dkfSCDWH2.chunk.js → B0CItJhp2.chunk.js} +2 -2
  10. package/dist/scripts/{dkfSCDWH2.chunk.js.map → B0CItJhp2.chunk.js.map} +1 -1
  11. package/dist/scripts/B0NqlFZf.chunk.js +2 -0
  12. package/dist/scripts/B0NqlFZf.chunk.js.map +1 -0
  13. package/dist/scripts/B1i9atik.chunk.js.map +1 -1
  14. package/dist/scripts/{CYFRcx63.chunk.js → B3S7B746.chunk.js} +2 -2
  15. package/dist/scripts/{CYFRcx63.chunk.js.map → B3S7B746.chunk.js.map} +1 -1
  16. package/dist/scripts/{BnbM9YhY.chunk.js → B5B9BCxo.chunk.js} +2 -2
  17. package/dist/scripts/{BnbM9YhY.chunk.js.map → B5B9BCxo.chunk.js.map} +1 -1
  18. package/dist/scripts/{C3K3VtRR2.chunk.js → BKYpYiMb2.chunk.js} +2 -2
  19. package/dist/scripts/{C3K3VtRR2.chunk.js.map → BKYpYiMb2.chunk.js.map} +1 -1
  20. package/dist/scripts/{D3Jgk2dT.chunk.js → BLXI9pzb.chunk.js} +3 -3
  21. package/dist/scripts/{D3Jgk2dT.chunk.js.map → BLXI9pzb.chunk.js.map} +1 -1
  22. package/dist/scripts/{CDXcKno52.chunk.js → BLrooXWI2.chunk.js} +2 -2
  23. package/dist/scripts/{CDXcKno52.chunk.js.map → BLrooXWI2.chunk.js.map} +1 -1
  24. package/dist/scripts/{-x9MMtVv.chunk.js → BQVqfJL8.chunk.js} +2 -2
  25. package/dist/scripts/{-x9MMtVv.chunk.js.map → BQVqfJL8.chunk.js.map} +1 -1
  26. package/dist/scripts/{jErHNuXU2.chunk.js → BU2ULxCS2.chunk.js} +2 -2
  27. package/dist/scripts/{jErHNuXU2.chunk.js.map → BU2ULxCS2.chunk.js.map} +1 -1
  28. package/dist/scripts/{B6EmIhMh.chunk.js → BU_B6gyd.chunk.js} +2 -2
  29. package/dist/scripts/{B6EmIhMh.chunk.js.map → BU_B6gyd.chunk.js.map} +1 -1
  30. package/dist/scripts/{DHV6S1fA2.chunk.js → BbaX1lfI2.chunk.js} +2 -2
  31. package/dist/scripts/{DHV6S1fA2.chunk.js.map → BbaX1lfI2.chunk.js.map} +1 -1
  32. package/dist/scripts/{D6EZoO4S2.chunk.js → Bbaycd7V.chunk.js} +2 -2
  33. package/dist/scripts/Bbaycd7V.chunk.js.map +1 -0
  34. package/dist/scripts/{CeeAb-HT2.chunk.js → BgLWPZ7H2.chunk.js} +2 -2
  35. package/dist/scripts/{CeeAb-HT2.chunk.js.map → BgLWPZ7H2.chunk.js.map} +1 -1
  36. package/dist/scripts/{CjNkj1Q92.chunk.js → Bj6lJgAv2.chunk.js} +1 -1
  37. package/dist/scripts/{CjNkj1Q92.chunk.js.map → Bj6lJgAv2.chunk.js.map} +1 -1
  38. package/dist/scripts/{Da2KHzN02.chunk.js → BoWMmXN02.chunk.js} +2 -2
  39. package/dist/scripts/{Da2KHzN02.chunk.js.map → BoWMmXN02.chunk.js.map} +1 -1
  40. package/dist/scripts/{mkasrghR2.chunk.js → BpzuiXcd2.chunk.js} +2 -2
  41. package/dist/scripts/{mkasrghR2.chunk.js.map → BpzuiXcd2.chunk.js.map} +1 -1
  42. package/dist/scripts/{BEyI0jsC2.chunk.js → Bswd1QrZ2.chunk.js} +2 -2
  43. package/dist/scripts/{BEyI0jsC2.chunk.js.map → Bswd1QrZ2.chunk.js.map} +1 -1
  44. package/dist/scripts/{BaXT2aKo2.chunk.js → ByC5ZDQ-2.chunk.js} +2 -2
  45. package/dist/scripts/{BaXT2aKo2.chunk.js.map → ByC5ZDQ-2.chunk.js.map} +1 -1
  46. package/dist/scripts/{D-ivDlyL.chunk.js → C-jHArp-.chunk.js} +2 -2
  47. package/dist/scripts/{D-ivDlyL.chunk.js.map → C-jHArp-.chunk.js.map} +1 -1
  48. package/dist/scripts/{BrEvIvRP.chunk.js → C3cl5FmM.chunk.js} +2 -2
  49. package/dist/scripts/{BrEvIvRP.chunk.js.map → C3cl5FmM.chunk.js.map} +1 -1
  50. package/dist/scripts/{c2oA1XgG.chunk.js → C4hd6q9D.chunk.js} +2 -2
  51. package/dist/scripts/{c2oA1XgG.chunk.js.map → C4hd6q9D.chunk.js.map} +1 -1
  52. package/dist/scripts/{DsolW3Wd2.chunk.js → C8dtRvC52.chunk.js} +2 -2
  53. package/dist/scripts/{DsolW3Wd2.chunk.js.map → C8dtRvC52.chunk.js.map} +1 -1
  54. package/dist/scripts/{BmEexpMP2.chunk.js → C8lms6Rf2.chunk.js} +1 -1
  55. package/dist/scripts/{BmEexpMP2.chunk.js.map → C8lms6Rf2.chunk.js.map} +1 -1
  56. package/dist/scripts/{s776Po8a2.chunk.js → C9AjegY32.chunk.js} +2 -2
  57. package/dist/scripts/{s776Po8a2.chunk.js.map → C9AjegY32.chunk.js.map} +1 -1
  58. package/dist/scripts/{DgSFdSfV.chunk.js → CBwR65WF.chunk.js} +2 -2
  59. package/dist/scripts/{DgSFdSfV.chunk.js.map → CBwR65WF.chunk.js.map} +1 -1
  60. package/dist/scripts/{D36Shrdb2.chunk.js → CEOaf0tK2.chunk.js} +2 -2
  61. package/dist/scripts/{D36Shrdb2.chunk.js.map → CEOaf0tK2.chunk.js.map} +1 -1
  62. package/dist/scripts/CFdu6aud.chunk.js +2 -0
  63. package/dist/scripts/CFdu6aud.chunk.js.map +1 -0
  64. package/dist/scripts/{CYfnBEtT2.chunk.js → CHojcsxD2.chunk.js} +1 -1
  65. package/dist/scripts/{CYfnBEtT2.chunk.js.map → CHojcsxD2.chunk.js.map} +1 -1
  66. package/dist/scripts/{BibFbDqs.chunk.js → CIxLO-TM.chunk.js} +2 -2
  67. package/dist/scripts/{BibFbDqs.chunk.js.map → CIxLO-TM.chunk.js.map} +1 -1
  68. package/dist/scripts/{CAQAUQMB.chunk.js → CLTKXoqB.chunk.js} +2 -2
  69. package/dist/scripts/{CAQAUQMB.chunk.js.map → CLTKXoqB.chunk.js.map} +1 -1
  70. package/dist/scripts/{DGy73Ett2.chunk.js → CNuGo1LQ2.chunk.js} +2 -2
  71. package/dist/scripts/{DGy73Ett2.chunk.js.map → CNuGo1LQ2.chunk.js.map} +1 -1
  72. package/dist/scripts/{DsA2RTbF.chunk.js → CQKpvTZY.chunk.js} +2 -2
  73. package/dist/scripts/{DsA2RTbF.chunk.js.map → CQKpvTZY.chunk.js.map} +1 -1
  74. package/dist/scripts/{CL9-CkqC2.chunk.js → CRAcJqQV2.chunk.js} +2 -2
  75. package/dist/scripts/{CL9-CkqC2.chunk.js.map → CRAcJqQV2.chunk.js.map} +1 -1
  76. package/dist/scripts/{C1guWVFU2.chunk.js → CSB18s8X2.chunk.js} +2 -2
  77. package/dist/scripts/{C1guWVFU2.chunk.js.map → CSB18s8X2.chunk.js.map} +1 -1
  78. package/dist/scripts/CWZvMFYz.chunk.js +2 -0
  79. package/dist/scripts/CWZvMFYz.chunk.js.map +1 -0
  80. package/dist/scripts/{4oWF2EyV2.chunk.js → CZrMa6z92.chunk.js} +2 -2
  81. package/dist/scripts/{4oWF2EyV2.chunk.js.map → CZrMa6z92.chunk.js.map} +1 -1
  82. package/dist/scripts/{CAJOpkKZ.chunk.js → CfCxi56P.chunk.js} +2 -2
  83. package/dist/scripts/{CAJOpkKZ.chunk.js.map → CfCxi56P.chunk.js.map} +1 -1
  84. package/dist/scripts/{B0jhFNam2.chunk.js → Chib9pDe2.chunk.js} +3 -3
  85. package/dist/scripts/{B0jhFNam2.chunk.js.map → Chib9pDe2.chunk.js.map} +1 -1
  86. package/dist/scripts/{DUCTNoXj.chunk.js → CiEI8sTG.chunk.js} +2 -2
  87. package/dist/scripts/{DUCTNoXj.chunk.js.map → CiEI8sTG.chunk.js.map} +1 -1
  88. package/dist/scripts/{CAoPaL8M.chunk.js → CmIbuK_d.chunk.js} +2 -2
  89. package/dist/scripts/{CAoPaL8M.chunk.js.map → CmIbuK_d.chunk.js.map} +1 -1
  90. package/dist/scripts/{BTsePUCN2.chunk.js → CsQ6WMM92.chunk.js} +2 -2
  91. package/dist/scripts/{BTsePUCN2.chunk.js.map → CsQ6WMM92.chunk.js.map} +1 -1
  92. package/dist/scripts/{BHzUOyzG.chunk.js → Cxq38DxA.chunk.js} +2 -2
  93. package/dist/scripts/{BHzUOyzG.chunk.js.map → Cxq38DxA.chunk.js.map} +1 -1
  94. package/dist/scripts/{Cllrumah2.chunk.js → D0TX42le2.chunk.js} +2 -2
  95. package/dist/scripts/{Cllrumah2.chunk.js.map → D0TX42le2.chunk.js.map} +1 -1
  96. package/dist/scripts/{B7sWLg9v2.chunk.js → D8x02prV2.chunk.js} +2 -2
  97. package/dist/scripts/{B7sWLg9v2.chunk.js.map → D8x02prV2.chunk.js.map} +1 -1
  98. package/dist/scripts/{CCvXN2-C.chunk.js → DAQxdC_x.chunk.js} +2 -2
  99. package/dist/scripts/{CCvXN2-C.chunk.js.map → DAQxdC_x.chunk.js.map} +1 -1
  100. package/dist/scripts/{DOuiFwIH2.chunk.js → DGBrggmU2.chunk.js} +2 -2
  101. package/dist/scripts/{DOuiFwIH2.chunk.js.map → DGBrggmU2.chunk.js.map} +1 -1
  102. package/dist/scripts/{CSbvS-Cl.chunk.js → DI6eYZuV.chunk.js} +2 -2
  103. package/dist/scripts/{CSbvS-Cl.chunk.js.map → DI6eYZuV.chunk.js.map} +1 -1
  104. package/dist/scripts/DIsOuUSO2.chunk.js +2 -0
  105. package/dist/scripts/DIsOuUSO2.chunk.js.map +1 -0
  106. package/dist/scripts/{B3tq0EFi2.chunk.js → DN_CuUia2.chunk.js} +2 -2
  107. package/dist/scripts/{B3tq0EFi2.chunk.js.map → DN_CuUia2.chunk.js.map} +1 -1
  108. package/dist/scripts/{DRZvc_n5.chunk.js → DT626M1P.chunk.js} +3 -3
  109. package/dist/scripts/{DRZvc_n5.chunk.js.map → DT626M1P.chunk.js.map} +1 -1
  110. package/dist/scripts/DWVn5hOy2.chunk.js +2 -0
  111. package/dist/scripts/DWVn5hOy2.chunk.js.map +1 -0
  112. package/dist/scripts/DZ85IleM.chunk.js +2 -0
  113. package/dist/scripts/DZ85IleM.chunk.js.map +1 -0
  114. package/dist/scripts/{CsrTrVKj.chunk.js → DarQpJDR.chunk.js} +2 -2
  115. package/dist/scripts/{CsrTrVKj.chunk.js.map → DarQpJDR.chunk.js.map} +1 -1
  116. package/dist/scripts/{CGLWqKaa.chunk.js → DfWNECxe.chunk.js} +2 -2
  117. package/dist/scripts/{CGLWqKaa.chunk.js.map → DfWNECxe.chunk.js.map} +1 -1
  118. package/dist/scripts/{BEgLlK2Z2.chunk.js → Dfi_iXFg2.chunk.js} +2 -2
  119. package/dist/scripts/{BEgLlK2Z2.chunk.js.map → Dfi_iXFg2.chunk.js.map} +1 -1
  120. package/dist/scripts/{8vJGuJF-2.chunk.js → DjMOZfNJ2.chunk.js} +2 -2
  121. package/dist/scripts/{8vJGuJF-2.chunk.js.map → DjMOZfNJ2.chunk.js.map} +1 -1
  122. package/dist/scripts/{DGRBUJ6T2.chunk.js → DjUmgrOk2.chunk.js} +2 -2
  123. package/dist/scripts/{DGRBUJ6T2.chunk.js.map → DjUmgrOk2.chunk.js.map} +1 -1
  124. package/dist/scripts/DjdW7gMz.chunk.js +2 -0
  125. package/dist/scripts/DjdW7gMz.chunk.js.map +1 -0
  126. package/dist/scripts/{CAOBwDbU.chunk.js → DksIM59B.chunk.js} +2 -2
  127. package/dist/scripts/{CAOBwDbU.chunk.js.map → DksIM59B.chunk.js.map} +1 -1
  128. package/dist/scripts/{aXgcldgY.chunk.js → DpARg1IG.chunk.js} +2 -2
  129. package/dist/scripts/{aXgcldgY.chunk.js.map → DpARg1IG.chunk.js.map} +1 -1
  130. package/dist/scripts/{DM0JzOpR2.chunk.js → ErGRzsV12.chunk.js} +2 -2
  131. package/dist/scripts/{DM0JzOpR2.chunk.js.map → ErGRzsV12.chunk.js.map} +1 -1
  132. package/dist/scripts/{UK8sD-oL.chunk.js → GSm09vBX.chunk.js} +2 -2
  133. package/dist/scripts/{UK8sD-oL.chunk.js.map → GSm09vBX.chunk.js.map} +1 -1
  134. package/dist/scripts/{DDO16-at.chunk.js → HkF7AIye.chunk.js} +2 -2
  135. package/dist/scripts/{DDO16-at.chunk.js.map → HkF7AIye.chunk.js.map} +1 -1
  136. package/dist/scripts/{BI2S4EFA.chunk.js → I1XD6JKC.chunk.js} +2 -2
  137. package/dist/scripts/{BI2S4EFA.chunk.js.map → I1XD6JKC.chunk.js.map} +1 -1
  138. package/dist/scripts/MGxL1vUn.chunk.js +2 -0
  139. package/dist/scripts/MGxL1vUn.chunk.js.map +1 -0
  140. package/dist/scripts/{CBQgY9MD2.chunk.js → Tj-NqZ4q2.chunk.js} +1 -1
  141. package/dist/scripts/{CBQgY9MD2.chunk.js.map → Tj-NqZ4q2.chunk.js.map} +1 -1
  142. package/dist/scripts/{app-lnmpv5W4.js → app-fNhmX-xT.js} +4 -4
  143. package/dist/scripts/app-fNhmX-xT.js.map +1 -0
  144. package/dist/scripts/{Bu37Hprb2.chunk.js → fyOxYVvI2.chunk.js} +1 -1
  145. package/dist/scripts/{Bu37Hprb2.chunk.js.map → fyOxYVvI2.chunk.js.map} +1 -1
  146. package/dist/scripts/{Dsmr6Wly.chunk.js → gsffdqjU.chunk.js} +2 -2
  147. package/dist/scripts/{Dsmr6Wly.chunk.js.map → gsffdqjU.chunk.js.map} +1 -1
  148. package/package.json +1 -1
  149. package/dist/scripts/5Z0rGCy2.chunk.js +0 -2
  150. package/dist/scripts/5Z0rGCy2.chunk.js.map +0 -1
  151. package/dist/scripts/BjzONPz9.chunk.js +0 -2
  152. package/dist/scripts/BjzONPz9.chunk.js.map +0 -1
  153. package/dist/scripts/BuSq2beZ2.chunk.js +0 -2
  154. package/dist/scripts/BuSq2beZ2.chunk.js.map +0 -1
  155. package/dist/scripts/CHQN7xOX.chunk.js +0 -2
  156. package/dist/scripts/CHQN7xOX.chunk.js.map +0 -1
  157. package/dist/scripts/CuE3TVwa.chunk.js +0 -2
  158. package/dist/scripts/CuE3TVwa.chunk.js.map +0 -1
  159. package/dist/scripts/D6EZoO4S2.chunk.js.map +0 -1
  160. package/dist/scripts/D_PyfoSL.chunk.js +0 -2
  161. package/dist/scripts/D_PyfoSL.chunk.js.map +0 -1
  162. package/dist/scripts/DklryBsJ.chunk.js +0 -2
  163. package/dist/scripts/DklryBsJ.chunk.js.map +0 -1
  164. package/dist/scripts/app-lnmpv5W4.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{O as e}from"./B1i9atik.chunk.js";import{y as t}from"./TJBzqR6k.chunk.js";import{t as n}from"./YhCzLJGK.chunk.js";import{t as r}from"./CrBD6Z4s.chunk.js";import{t as i}from"./BIhfRmDn.chunk.js";var a=function(e){return e[e.AllResults=0]=`AllResults`,e[e.Subtitles=1]=`Subtitles`,e[e.TitleAndDescription=2]=`TitleAndDescription`,e}({});function o(){let t=i.get(`cv:holiday:dates`);return e.isObject(t)?t:{startMonth:12,startDay:15,endMonth:1,endDay:6}}var s={getFormattedDateRange(e,t){return`${n.format(e,`Do MMMM YYYY`)} - ${n.format(t,`Do MMMM YYYY`)}`},getDateBroadcastParams(e){let t=e=>n.format(e,`YYYY-MM-DD`),r=t(new Date);switch(e){case`yesterday`:return{from:t(n.subtract(r,1,`day`)),to:r};case`last-week`:return{from:t(n.subtract(r,7,`days`)),to:r};case`last-2-weeks`:return{from:t(n.subtract(r,14,`days`)),to:r}}},isHolidayPeriod(){let{startMonth:e,startDay:t,endMonth:n,endDay:r}=o(),i=new Date,a=i.getMonth()+1,s=i.getDate();return a===e&&s>=t||a===n&&s<=r}},c={regions(){return{url:`/api/tv/api/v2/regions`,key:`tv:regions`,normalize:!1}},region(e){return{url:`/api/tv/api/v2/regions/${e}`,key:`tv:region:${e}`,normalize:!1}},regionStatus(e){return{url:`/api/tv/v1/status/${e}`,key:`tv:status:${e}`,normalize:!1}},dateRange(e){return{url:`/api/tv/api/v2/regions/${e}/daterange`,key:`tv:region:${e}:daterange`,normalize:!1}},channels(e){return{url:r.urlBuilder(`/api/tv/api/v2/channels`,{region:e}),key:`tv:channels:${e}`,normalize:!1,formatData:e=>e.sort((e,t)=>e.sortOrder-t.sortOrder)}},payTvChannels(){return{url:`/api/tv/v1/pay-tv/channels/all`,key:`pay:tv:channels`,normalize:!1}},programsByChannel(e,t,n,i){return{url:r.urlBuilder(`/api/tv/api/v3/regions/${e}/channels/programs`,{channel:t,startDate:n,endDate:i}),key:[`tv:programs:by:channel`,e,t,n,i].join(`:`),normalize:!1}},programsByLetter(e,t,n,i){return{url:r.urlBuilder(`/api/tv/api/v2/Programs`,{regionCode:e,startsWith:t,startDate:n,endDate:i}),key:[`tv:programs:by:letter`,e,t,n,i].join(`:`),normalize:!1}},program(e){return{url:`/api/tv/api/v3/programs/${e}`,key:`tv:programs:${e}`,normalize:!1}},search(e,t,n){let{query:i,dateBroadcast:o,...c}=t,l=n||1,u=c.filter||a.AllResults;return{url:r.urlBuilder(`/api/tv/api/v4/search`,{region:e,query:i,filter:u,...s.getDateBroadcastParams(o),...c,page:l,size:25}),key:[`tv:search`,i,e,Object.values({filter:u,dateBroadcast:o,...c}).join(`:`),l].join(`:`),normalize:!1,formatData:e=>(e.page=l,e)}},addFullVideo(e,n){return{url:`/api/tv/api/v2/workspace/video`,key:`tv:add:full:video`,normalize:!1,type:t.POST,data:e,invalidationKeys:`tv:workspace:video:${n}`}},addAdFreeVideo(e,n){return{url:r.urlBuilder(`/api/tv/v4/programs/${e.id}/ad-free`,{customerId:e.customerId,userId:e.userId}),key:`tv:add:ad:free:video`,normalize:!1,type:t.POST,invalidationKeys:`tv:workspace:video:${n}`}},adFreeCredits(e,t,i){let a=new Date;a.setHours(0,0,0,0),a.setMinutes(a.getMinutes()+a.getTimezoneOffset());let o=n.add(a,1,`day`);return{url:r.urlBuilder(`/api/tv/v4/user-requests`,{userId:e,customerId:t,regionCode:i,from:n.convertUTCToLocal(a).toISOString(),to:n.convertUTCToLocal(o).toISOString()}),key:`tv:add:free:credits`,normalize:!1}},createAdFreeRequest(e){return{url:r.urlBuilder(`/api/tv/v4/user-requests/ad-free`,{userId:e.userId,customerId:e.customerId}),key:`tv:create:add:free:request`,normalize:!1,type:t.POST,data:{programId:e.programId,regionCode:e.regionCode},invalidationKeys:[`tv:add:free:credits`]}},workspaceVideo(e,t,n){return{url:r.urlBuilder(`/api/tv/v4/workspace/programs/${e}`,{userId:t,customerId:n}),key:`tv:workspace:video:${e}`}},requestProgram(e){return{url:`/api/tv/v1/pay-tv/user-requests`,key:`tv:request:program`,type:t.POST,data:e}}};export{s as n,c as t};
2
+ //# sourceMappingURL=DWVn5hOy2.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DWVn5hOy2.chunk.js","names":[],"sources":["../../src/apps/tv/interfaces/enums/TvSearchFilter.ts","../../src/apps/tv/utils/TvUtils.ts","../../src/apps/tv/flight-requests/TvRequests.ts"],"sourcesContent":["export enum TvSearchFilter {\n AllResults = 0,\n Subtitles = 1,\n TitleAndDescription = 2\n}\n","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nfunction getHolidayDates() {\n const cvHolidayOverride = LocalStorageHelper.get('cv:holiday:dates');\n\n if (ObjectHelper.isObject(cvHolidayOverride))\n return cvHolidayOverride;\n\n return {\n // Dec 15th\n startMonth: 12,\n startDay: 15,\n // Jan 6th\n endMonth: 1,\n endDay: 6\n };\n}\n\nexport const TvUtils = {\n getFormattedDateRange(startDate: string, endDate: string) {\n return `${DateHelper.format(startDate, 'Do MMMM YYYY')} - ${DateHelper.format(endDate, 'Do MMMM YYYY')}`;\n },\n getDateBroadcastParams(dateBroadcast: string) {\n const format = (date: Date) => DateHelper.format(date, 'YYYY-MM-DD');\n const todayDate = format(new Date());\n\n switch (dateBroadcast) {\n case 'yesterday':\n return {\n from: format(DateHelper.subtract(todayDate, 1, 'day')),\n to: todayDate\n };\n case 'last-week':\n return {\n from: format(DateHelper.subtract(todayDate, 7, 'days')),\n to: todayDate\n };\n case 'last-2-weeks':\n return {\n from: format(DateHelper.subtract(todayDate, 14, 'days')),\n to: todayDate\n };\n }\n },\n isHolidayPeriod(): boolean {\n const { startMonth, startDay, endMonth, endDay } = getHolidayDates();\n\n const today = new Date();\n const month = today.getMonth() + 1;\n const day = today.getDate();\n\n return ((month === startMonth && day >= startDay) || (month === endMonth && day <= endDay));\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { TvSearchFilter } from 'apps/tv/interfaces/enums/TvSearchFilter';\nimport { AddAdFreeVideoRequest } from 'apps/tv/interfaces/requests/AddAdFreeVideoRequest';\nimport { AddFullVideoRequest } from 'apps/tv/interfaces/requests/AddFullVideoRequest';\nimport { AdFreeRequest } from 'apps/tv/interfaces/requests/AdFreeRequest';\nimport { RequestProgramRequest } from 'apps/tv/interfaces/requests/RequestProgramRequest';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nexport const TvRequests = {\n regions(): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions`,\n key: `tv:regions`,\n normalize: false\n };\n },\n\n region(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}`,\n key: `tv:region:${region}`,\n normalize: false\n };\n },\n\n regionStatus(region: string): Flight.Request {\n return {\n url: `/api/tv/v1/status/${region}`,\n key: `tv:status:${region}`,\n normalize: false\n };\n },\n\n dateRange(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}/daterange`,\n key: `tv:region:${region}:daterange`,\n normalize: false\n };\n },\n\n channels(region: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/api/v2/channels`, { region }),\n key: `tv:channels:${region}`,\n normalize: false,\n formatData: (data: any[]) => {\n return data.sort((a: any, b: any) => (a.sortOrder - b.sortOrder));\n }\n };\n },\n\n payTvChannels(): Flight.Request {\n return {\n url: '/api/tv/v1/pay-tv/channels/all',\n key: 'pay:tv:channels',\n normalize: false\n };\n },\n\n programsByChannel(\n region: string,\n channel: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v3/regions/${region}/channels/programs`, {\n channel,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:channel', region, channel, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n programsByLetter(\n regionCode: string,\n startsWith: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v2/Programs`, {\n regionCode,\n startsWith,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:letter', regionCode, startsWith, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n program(\n id: string\n ): Flight.Request {\n return {\n url: `/api/tv/api/v3/programs/${id}`,\n key: `tv:programs:${id}`,\n normalize: false\n };\n },\n\n search(\n region: string,\n queryParams: HashObject,\n pageParam: number\n ): Flight.Request {\n const { query, dateBroadcast, ...filters } = queryParams;\n const page = pageParam || 1;\n const filter = filters.filter || TvSearchFilter.AllResults;\n\n const url = UrlHelper.urlBuilder(`/api/tv/api/v4/search`, {\n region,\n query,\n filter,\n ...TvUtils.getDateBroadcastParams(dateBroadcast),\n ...filters,\n page,\n size: 25\n });\n\n const filterKeys = Object.values({ filter, dateBroadcast, ...filters }).join(':');\n const key = [ 'tv:search', query, region, filterKeys, page ].join(':');\n\n return {\n url,\n key,\n normalize: false,\n formatData: (data: any) => {\n data.page = page;\n return data;\n }\n };\n },\n\n addFullVideo(data: AddFullVideoRequest, id: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/workspace/video`,\n key: 'tv:add:full:video',\n normalize: false,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n addAdFreeVideo(data: AddAdFreeVideoRequest, id: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/programs/${data.id}/ad-free`, { customerId: data.customerId, userId: data.userId }),\n key: 'tv:add:ad:free:video',\n normalize: false,\n type: HttpVerbs.POST,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n adFreeCredits(\n userId: string,\n customerId: string,\n regionCode: string\n ): Flight.Request {\n // Start of today's date, offset by the local timezone.\n const from = new Date();\n from.setHours(0, 0, 0, 0);\n from.setMinutes(from.getMinutes() + from.getTimezoneOffset());\n\n const to = DateHelper.add(from, 1, 'day');\n\n const url = UrlHelper.urlBuilder(`/api/tv/v4/user-requests`, {\n userId,\n customerId,\n regionCode,\n from: DateHelper.convertUTCToLocal(from).toISOString(),\n to: DateHelper.convertUTCToLocal(to).toISOString()\n });\n\n return {\n url,\n key: 'tv:add:free:credits',\n normalize: false\n };\n },\n\n createAdFreeRequest(data: AdFreeRequest): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/user-requests/ad-free`, { userId: data.userId, customerId: data.customerId }),\n key: 'tv:create:add:free:request',\n normalize: false,\n type: HttpVerbs.POST,\n data: {\n programId: data.programId,\n regionCode: data.regionCode\n },\n invalidationKeys: ['tv:add:free:credits']\n };\n },\n\n workspaceVideo(videoId: string, userId: string, customerId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/workspace/programs/${videoId}`, { userId, customerId }),\n key: `tv:workspace:video:${videoId}`\n };\n },\n\n requestProgram(data: RequestProgramRequest) {\n return {\n url: `/api/tv/v1/pay-tv/user-requests`,\n key: 'tv:request:program',\n type: HttpVerbs.POST,\n data\n };\n }\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s,y as c}from"./B1i9atik.chunk.js";import{d as l,l as u}from"./TJBzqR6k.chunk.js";import{t as d}from"./CzvVp9iC.chunk.js";import{t as f}from"./YhCzLJGK.chunk.js";import{t as p}from"./DKbUI-vj.chunk.js";import{H as m,I as h,M as g,U as _,_ as v,z as y}from"./app-fNhmX-xT.js";import{i as b,n as x,t as S}from"./BpzuiXcd2.chunk.js";import{t as C}from"./Bswd1QrZ2.chunk.js";import{t as w}from"./B0CItJhp2.chunk.js";import{t as T}from"./CSB18s8X2.chunk.js";import{n as E,t as D}from"./DWVn5hOy2.chunk.js";import{t as O}from"./Bbaycd7V.chunk.js";t();var k=a(S()),A=d.encloseNamespace(`tv.requestProgramValidation`);function j(e){let t=e?{channelId:(0,k.string)().required(A(`channelRequired`))}:{};return(0,k.object)().shape({...t,title:(0,k.string)().required(A(`programRequired`)),broadcastDate:(0,k.string)().required(A(`dateRequired`)),broadcastTime:(0,k.string)().required(A(`timeRequired`)),closedCaptions:(0,k.string)(),comments:(0,k.string)()})}var M=e(),N=`tv.requestProgramForm`,P=d.encloseNamespace(N);function F(e){let t=m(),n=e.instanceRegion===v.UK,r=O(e.instanceRegion),i=f.format(f.add(new Date,4,`days`),`YYYY-MM-DD`),a=f.format(f.add(i,11,`days`),`YYYY-MM-DD`),o=f.format(new Date,`YYYY-MM-DD`),s=n?void 0:i,c=n?o:a;return(0,M.jsxs)(y,{children:[e.channels&&(0,M.jsxs)(b,{as:`select`,label:P(`channelLabel`),name:`channelId`,value:t.values.channelId,showRequiredStar:!0,children:[(0,M.jsx)(`option`,{value:``,children:d.getPhrase(N,`channelPlaceholder`)},0),e.channels.map(e=>(0,M.jsx)(`option`,{value:e.id,children:`${e.name} - (${e.number})`},e.id))]}),(0,M.jsx)(b,{label:P(`programLabel`),placeholder:P(`programPlaceholder`),type:`text`,name:`title`,value:t.values.title,showRequiredStar:!0}),(0,M.jsxs)(`div`,{className:`d-flex`,children:[(0,M.jsx)(`div`,{className:`w-50 me-2`,children:(0,M.jsx)(b,{label:P(`broadcastDateLabel`),type:`date`,name:`broadcastDate`,value:t.values.broadcastDate,min:s,max:c,showRequiredStar:!0})}),(0,M.jsx)(`div`,{className:`w-50`,children:(0,M.jsx)(b,{label:P(`broadcastTimeLabel`),type:`time`,name:`broadcastTime`,value:t.values.broadcastTime,className:`mb-0`,showRequiredStar:!0})})]}),(0,M.jsx)(`p`,{className:`mt-n1`,children:(0,M.jsx)(`small`,{children:(0,M.jsx)(h,{namespace:N,phrase:r.programGuidePhraseKey})})}),(0,M.jsxs)(`div`,{className:`d-flex`,children:[(0,M.jsx)(`div`,{className:`w-50 me-2`,children:(0,M.jsxs)(b,{as:`select`,label:P(`ccLabel`),name:`closedCaptions`,value:t.values.closedCaptions,children:[(0,M.jsx)(`option`,{value:``,children:d.getPhrase(N,`ccNo`)}),(0,M.jsx)(`option`,{value:`yes`,children:d.getPhrase(N,`ccYes`)})]})}),(0,M.jsx)(`div`,{className:`w-50`})]}),(0,M.jsx)(b,{label:P(`commentsLabel`),placeholder:P(`commentsPlaceholder`),type:`text`,name:`comments`,value:t.values.comments}),(0,M.jsx)(`p`,{children:(0,M.jsx)(h,{namespace:N,phrase:`note`,options:{tv:r.tv}})}),(0,M.jsxs)(g,{children:[(0,M.jsx)(g.Cancel,{text:P(`cancel`),onClick:e.onClickCancel,variant:`link`}),(0,M.jsx)(T,{variant:`dark`,submitText:P(`request`)})]})]})}var I=`1`,L={channelId:``,title:``,broadcastDate:``,broadcastTime:``,closedCaptions:``,comments:``},R=`tv.requestProgram`,z=d.encloseNamespace(R);function B(e){let t=l(),a=C(),d=u(p.currentUser()),f=d.data?.instanceRegion,m=f===v.AU,g=u(m&&D.payTvChannels()),y=O(f);function b(){e.closePopup()}let{loading:S,handleGenerateReportError:T}=w();function k(t){if(m){let l=g.data?.find(e=>String(e.id)===t.channelId);a.success(z(`successChannel`,{tv:y.tv,program:t.title,channel:l?.name})),s.logUserAction({channel:l.id,name:l.name,program:t.title,region:e.region},{actionType:r.Submit,entity:o.Video,location:i.Popup,workflowPhase:n.Complete,descriptor:c.RequestProgram})}else a.success(z(`successNoChannel`,{tv:y.tv,program:t.title})),s.logUserAction({program:t.title,region:e.region},{actionType:r.Submit,entity:o.Video,location:i.Popup,workflowPhase:n.Complete,descriptor:c.RequestProgram})}function A(t){let{broadcastDate:n,broadcastTime:r,closedCaptions:i,...a}=t,o=f===v.UK;return{title:a.title,comments:a.comments,channelId:o?I:a.channelId,closedCaptions:!!i,regionCode:e.region,programDateTime:`${n}T${r}`,userId:d.data?.id,customerId:d.data?.customerId}}async function N(n,r){let i=A(n);try{await t(D.requestProgram(i)),r(),k(n)}catch(e){T(e,z(`error`),z(`noEmailError`))}e.closePopup()}let P=d.hasCompleted&&(m&&g.hasCompleted||!m);return(0,M.jsxs)(_,{title:z(`title`,{tv:y.tv}),closePopup:e.closePopup,showLoadingSpinner:!P||S,children:[E.isHolidayPeriod()&&(0,M.jsxs)(`div`,{className:`alert alert-warning`,role:`alert`,children:[(0,M.jsx)(`h3`,{className:`h5`,children:(0,M.jsx)(h,{namespace:R,phrase:`requestAlertHeading`})}),(0,M.jsx)(`p`,{className:`m-0`,children:(0,M.jsx)(h,{namespace:R,phrase:`requestAlertBody`,options:{tv:y.tv}})})]}),(0,M.jsx)(`p`,{children:(0,M.jsx)(h,{namespace:R,phrase:`description`,options:{tv:y.tv}})}),(0,M.jsx)(`p`,{children:(0,M.jsx)(h,{namespace:R,phrase:`moreInfo`})}),g&&(0,M.jsx)(x,{initialValues:L,validationSchema:j(m),onSubmit:N,children:(0,M.jsx)(F,{onClickCancel:b,channels:m&&g.data,instanceRegion:f})})]})}export{B as TvRequestProgramView};
2
+ //# sourceMappingURL=DZ85IleM.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DZ85IleM.chunk.js","names":[],"sources":["../../src/apps/tv/utils/validation/RequestProgramValidation.ts","../../src/apps/tv/views/tv-request-program/components/TvRequestProgramForm.tsx","../../src/apps/tv/views/tv-request-program/TvRequestProgramView.tsx"],"sourcesContent":["import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'tv.requestProgramValidation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function RequestProgramValidation(requireChannel: boolean) {\n const channelValidation = requireChannel ?\n { channelId: string().required(getPhrase('channelRequired')) } :\n {};\n\n return object().shape({\n ...channelValidation,\n title: string().required(getPhrase('programRequired')),\n broadcastDate: string().required(getPhrase('dateRequired')),\n broadcastTime: string().required(getPhrase('timeRequired')),\n closedCaptions: string(),\n comments: string()\n });\n}\n","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\nimport { RequestProgramModel } from 'apps/tv/interfaces/models/RequestProgram';\nimport { PayTvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { RequestProgramRequest } from 'apps/tv/interfaces/requests/RequestProgramRequest';\nimport { getRegionInfo } from 'apps/tv/utils/getRegionInfo/getRegionInfo';\n\nconst namespace = 'tv.requestProgramForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TvRequestProgramFormProps {\n channels?: PayTvChannel[];\n instanceRegion: InstanceRegion;\n onClickCancel: () => void;\n}\n\nexport function TvRequestProgramForm(props: TvRequestProgramFormProps) {\n const formikProps = useFormikContext<RequestProgramModel>();\n const isUK = props.instanceRegion === InstanceRegion.UK;\n const regionInfo = getRegionInfo(props.instanceRegion);\n\n // AU (Foxtel): request an upcoming broadcast — selectable from 4 to 15 days ahead.\n // UK (BBC RES): request a program that has already aired — past dates only, up to today.\n const auMinDate = DateHelper.format(DateHelper.add(new Date(), 4, 'days'), 'YYYY-MM-DD');\n const auMaxDate = DateHelper.format(DateHelper.add(auMinDate, 11, 'days'), 'YYYY-MM-DD');\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n const minDate = isUK ? undefined : auMinDate;\n const maxDate = isUK ? today : auMaxDate;\n\n return (\n <Form>\n {props.channels && (\n <FormField\n as='select'\n label={getPhrase('channelLabel')}\n name='channelId'\n value={formikProps.values.channelId}\n showRequiredStar\n >\n <option key={0} value=''>{LanguageService.getPhrase(namespace, 'channelPlaceholder')}</option>\n {props.channels.map(channel => (\n <option key={channel.id} value={channel.id}>{`${channel.name} - (${channel.number})`}</option>\n ))}\n </FormField>)\n }\n\n <FormField\n label={getPhrase('programLabel')}\n placeholder={getPhrase('programPlaceholder')}\n type='text'\n name='title'\n value={formikProps.values.title}\n showRequiredStar\n />\n\n <div className='d-flex'>\n <div className='w-50 me-2'>\n <FormField\n label={getPhrase('broadcastDateLabel')}\n type='date'\n name='broadcastDate'\n value={formikProps.values.broadcastDate}\n min={minDate}\n max={maxDate}\n showRequiredStar\n />\n </div>\n <div className='w-50'>\n <FormField\n label={getPhrase('broadcastTimeLabel')}\n type='time'\n name='broadcastTime'\n value={formikProps.values.broadcastTime}\n className='mb-0'\n showRequiredStar\n />\n </div>\n </div>\n\n <p className='mt-n1'>\n <small><Text namespace={namespace} phrase={regionInfo.programGuidePhraseKey} /></small>\n </p>\n\n <div className='d-flex'>\n <div className='w-50 me-2'>\n <FormField\n as='select'\n label={getPhrase('ccLabel')}\n name='closedCaptions'\n value={formikProps.values.closedCaptions}\n >\n <option value=''>{LanguageService.getPhrase(namespace, 'ccNo')}</option>\n <option value='yes'>{LanguageService.getPhrase(namespace, 'ccYes')}</option>\n </FormField>\n </div>\n <div className='w-50'></div>\n </div>\n\n <FormField\n label={getPhrase('commentsLabel')}\n placeholder={getPhrase('commentsPlaceholder')}\n type='text'\n name='comments'\n value={formikProps.values.comments}\n />\n\n <p><Text namespace={namespace} phrase='note' options={{ tv: regionInfo.tv }} /></p>\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('cancel')}\n onClick={props.onClickCancel}\n variant='link'\n />\n <FormButtons<RequestProgramRequest> variant='dark' submitText={getPhrase('request')}/>\n </PopupButtons>\n </Form>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, TvDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { CurrentUser, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { RequestProgramModel } from 'apps/tv/interfaces/models/RequestProgram';\nimport { PayTvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { RequestProgramRequest } from 'apps/tv/interfaces/requests/RequestProgramRequest';\nimport { getRegionInfo } from 'apps/tv/utils/getRegionInfo/getRegionInfo';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\nimport { RequestProgramValidation } from 'apps/tv/utils/validation/RequestProgramValidation';\nimport { TvRequestProgramForm } from 'apps/tv/views/tv-request-program/components/TvRequestProgramForm';\n\n// UK is hardcoded to the single BBC RES channel.\nconst BBC_RES_PAY_TV_CHANNEL_ID = '1';\n\nconst INITIAL_VALUES = {\n channelId: '',\n title: '',\n broadcastDate: '',\n broadcastTime: '',\n closedCaptions: '',\n comments: ''\n};\n\nconst namespace = 'tv.requestProgram';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TvRequestProgramProps extends PopupViewProps {\n region: string;\n}\n\nexport function TvRequestProgramView(props: TvRequestProgramProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const instanceRegion = currentUser.data?.instanceRegion;\n const showChannelSelector = instanceRegion === InstanceRegion.AU;\n\n const channels = Flight.useBasicFetch<PayTvChannel[]>(\n showChannelSelector && TvRequests.payTvChannels()\n );\n\n const regionInfo = getRegionInfo(instanceRegion);\n\n function onClickCancel() {\n props.closePopup();\n }\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n function alertAndLogging(requestData: RequestProgramModel) {\n if (showChannelSelector) {\n const channel = channels.data?.find(channel => String(channel.id) === requestData.channelId);\n alerts.success(\n getPhrase(\n 'successChannel',\n {\n tv: regionInfo.tv,\n program: requestData.title,\n channel: channel?.name\n }\n )\n );\n AnalyticsHelper.logUserAction(\n { channel: channel.id, name: channel.name, program: requestData.title, region: props.region },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: TvDescriptor.RequestProgram\n }\n );\n } else {\n alerts.success(\n getPhrase(\n 'successNoChannel',\n {\n tv: regionInfo.tv,\n program: requestData.title\n }\n )\n );\n AnalyticsHelper.logUserAction(\n { program: requestData.title, region: props.region },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: TvDescriptor.RequestProgram\n }\n );\n }\n }\n\n function getRequestData(values: RequestProgramModel): RequestProgramRequest {\n const { broadcastDate, broadcastTime, closedCaptions, ...requestData } = values;\n const isUK = instanceRegion === InstanceRegion.UK;\n\n return {\n title: requestData.title,\n comments: requestData.comments,\n // UK has no channel selector — pin requests to the BBC RES pay-TV channel.\n channelId: isUK ? BBC_RES_PAY_TV_CHANNEL_ID : requestData.channelId,\n closedCaptions: Boolean(closedCaptions),\n regionCode: props.region,\n programDateTime: `${broadcastDate}T${broadcastTime}`,\n userId: currentUser.data?.id,\n customerId: currentUser.data?.customerId\n };\n }\n\n async function onClickRequest(\n values: RequestProgramModel,\n onDone: () => void\n ) {\n const requestData = getRequestData(values);\n\n try {\n await fetchAsync(TvRequests.requestProgram(requestData));\n onDone();\n alertAndLogging(values);\n } catch (xhr) {\n handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError'));\n }\n\n props.closePopup();\n }\n\n const hasLoaded = (\n currentUser.hasCompleted && ((showChannelSelector && channels.hasCompleted) || !showChannelSelector)\n );\n\n return (\n <Popup\n title={getPhrase('title', { tv: regionInfo.tv })}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded || loading}\n >\n {TvUtils.isHolidayPeriod() &&\n <div className='alert alert-warning' role='alert'>\n <h3 className='h5'>\n <Text namespace={namespace} phrase='requestAlertHeading'/>\n </h3>\n <p className='m-0'>\n <Text namespace={namespace} phrase='requestAlertBody' options={{\n tv: regionInfo.tv\n }} />\n </p>\n </div>\n }\n <p>\n <Text\n namespace={namespace}\n phrase='description'\n options={{ tv: regionInfo.tv }}\n />\n </p>\n <p>\n <Text\n namespace={namespace}\n phrase='moreInfo'\n />\n </p>\n {channels &&\n <FormWrapper<RequestProgramModel>\n initialValues={INITIAL_VALUES}\n validationSchema={RequestProgramValidation(showChannelSelector)}\n onSubmit={onClickRequest}\n >\n <TvRequestProgramForm\n onClickCancel={onClickCancel}\n channels={showChannelSelector && channels.data}\n instanceRegion={instanceRegion}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,bt as n,fn as r}from"./B1i9atik.chunk.js";import{n as i,t as a}from"./Dn3hwC-o.chunk.js";import{D as o}from"./app-lnmpv5W4.js";var s=r(t()),c=e();function l(){let{exchangeTvProductOption:e,isLoadingSettings:t}=o(null);return s.useEffect(()=>{if(!t){if(e===`tv`){n.trigger({application:i.TV,action:a.Tv.INDEX});return}n.trigger({application:i.EXCHANGE,action:a.Exchange.INDEX})}},[e,t]),(0,c.jsx)(c.Fragment,{})}export{l as RedirectView};
2
- //# sourceMappingURL=CsrTrVKj.chunk.js.map
1
+ import{C as e,D as t,bt as n,fn as r}from"./B1i9atik.chunk.js";import{n as i,t as a}from"./Dn3hwC-o.chunk.js";import{D as o}from"./app-fNhmX-xT.js";var s=r(t()),c=e();function l(){let{exchangeTvProductOption:e,isLoadingSettings:t}=o(null);return s.useEffect(()=>{if(!t){if(e===`tv`){n.trigger({application:i.TV,action:a.Tv.INDEX});return}n.trigger({application:i.EXCHANGE,action:a.Exchange.INDEX})}},[e,t]),(0,c.jsx)(c.Fragment,{})}export{l as RedirectView};
2
+ //# sourceMappingURL=DarQpJDR.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CsrTrVKj.chunk.js","names":[],"sources":["../../src/apps/default/views/redirect/RedirectView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function RedirectView() {\n const { exchangeTvProductOption, isLoadingSettings } = useSettings(null);\n\n React.useEffect(() => {\n if (isLoadingSettings) return;\n\n if (exchangeTvProductOption === 'tv') {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.INDEX\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n });\n }, [ exchangeTvProductOption, isLoadingSettings ]);\n\n return (\n <></>\n );\n}\n"],"mappings":"uKAUA,SAAgB,GAAe,CAC7B,GAAM,CAAE,0BAAyB,qBAAsB,EAAY,KAAK,CAmBxE,OAjBA,EAAM,cAAgB,CAChB,MAEJ,IAAI,IAA4B,KAAM,CACpC,EAAmB,QAAQ,CACzB,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,MACpB,CAAC,CACF,OAGF,EAAmB,QAAQ,CACzB,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CAAC,GACD,CAAE,EAAyB,EAAmB,CAAC,EAGhD,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
1
+ {"version":3,"file":"DarQpJDR.chunk.js","names":[],"sources":["../../src/apps/default/views/redirect/RedirectView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function RedirectView() {\n const { exchangeTvProductOption, isLoadingSettings } = useSettings(null);\n\n React.useEffect(() => {\n if (isLoadingSettings) return;\n\n if (exchangeTvProductOption === 'tv') {\n Core.AppLinkHelper.trigger({\n application: AppChannels.TV,\n action: Actions.Tv.INDEX\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.INDEX\n });\n }, [ exchangeTvProductOption, isLoadingSettings ]);\n\n return (\n <></>\n );\n}\n"],"mappings":"uKAUA,SAAgB,GAAe,CAC7B,GAAM,CAAE,0BAAyB,qBAAsB,EAAY,KAAK,CAmBxE,OAjBA,EAAM,cAAgB,CAChB,MAEJ,IAAI,IAA4B,KAAM,CACpC,EAAmB,QAAQ,CACzB,YAAa,EAAY,GACzB,OAAQ,EAAQ,GAAG,MACpB,CAAC,CACF,OAGF,EAAmB,QAAQ,CACzB,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,MAC1B,CAAC,GACD,CAAE,EAAyB,EAAmB,CAAC,EAGhD,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA"}
@@ -1,2 +1,2 @@
1
- import{S as e,b as t,d as n,s as r,x as i}from"./B1i9atik.chunk.js";import{l as a,p as o,u as s}from"./TJBzqR6k.chunk.js";import{t as c}from"./CzvVp9iC.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{t as d}from"./CrBD6Z4s.chunk.js";import{t as f}from"./DKbUI-vj.chunk.js";import{t as p}from"./D_PyfoSL.chunk.js";import{C as m,S as h,Z as g,l as _,tt as v}from"./app-lnmpv5W4.js";import{t as y}from"./jErHNuXU2.chunk.js";import{t as b}from"./DM0JzOpR2.chunk.js";import{n as x}from"./M-OKfIH7.chunk.js";var S=function(e){return e.Developer=`Curator Devs`,e.Content=`Content`,e.Curator=`Curators`,e.Support=`Support`,e.SalesSupport=`Sales Support`,e.GraphicDesigner=`Graphic Designers`,e.MetadataEditor=`Metadata Editors`,e.ResourcingManager=`Resourcing Managers`,e.SeniorContentManager=`Senior Content Manager`,e.Marketing=`Marketing`,e.Sales=`Sales Representatives`,e.StreamableCurator=`Streamable Curator`,e.SupportExtraPermission=`Support - Extra Permissions`,e.SeoManager=`SEO Manager`,e.ContentReviewer=`Content Reviewer`,e}({}),C=c.encloseNamespace(`shared.hooks`);function w(e,t,n,r){let i=d.safeUrlConcat(e,`manage`),a=d.safeUrlConcat(e,`exchange`),o=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`subjects/presentations/${r}/classifications/${n}/edit`);case v.Video:return o(i,`videos`,n);case v.Playlist:return o(i,`playlists`,n);case v.Series:return o(i,`series`,n);case v.Company:return o(i,`companies`,n);case v.Interactive:return o(i,`interactives`,n);case v.Clip:return o(i,`clips`,n);case v.Category:return o(a,`categories`,n)}}function T(e,t,n,r){let i=d.safeUrlConcat(e,`streamable-learning`),a=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`${r}/classifications/${n}/edit`);case v.Video:return a(i,`videos`,n);case v.Company:return a(i,`companies`,n)}}function E(e,t,n,r,i=`clickview`){return i===`clickview-live`?T(e,t,n,r):w(e,t,n,r)}function D(){return C(`openInCurationStudio`)}var O=[S.Curator,S.Content,S.Developer],k=[S.StreamableCurator];function A(e=`clickview`){let t=a(f.currentUser()),{data:n}=a(t.data?.id&&f.groups(t.data?.id)),r=a(g.config()),i=e===`clickview-live`?k:O;function o(){return i.some(e=>n?.data.find(t=>t.name===e))}return{openInCurationStudioLabel:D(),isUserCurator:o(),getOpenInCurationStudioLink:(t,n,i)=>E(r.data?.curatorUrl,t,n,i,e)}}var j=function(e){return e[e.PlayPage=0]=`PlayPage`,e}({});function M(e){let t=o(),n=s();function r(t){return e.type===j.PlayPage?b.getVideoRequest(t.id,t.typeId,e.shareId):null}function i(e){let i=r(e);t(i.key).shouldFetch&&n(i)}function a(e){return t(r(e).key).hasCompleted}return{hydrate:i,isHydrated:a}}var N=c.encloseNamespace(`exchange.exchangeHooks`),P={lazyPlaceholder:!0};function F(o){let{hasPermissions:s}=m(),{isUserCurator:c,openInCurationStudioLabel:d,getOpenInCurationStudioLink:f}=A(),b=a(g.config()),S=a(s(p.ContributeVideo)&&y.libraryRequestLibraries()),{hydrate:C,isHydrated:w}=M({type:j.PlayPage});function T(a){let s=o===`preview`,p={id:a.id,name:a.name},m=s?n.VideoItemPreview:n.VideoListItem,g=[{order:10,label:s?N(`openInClickView`):``,svg:h,tooltip:s?``:N(`openInClickView`),className:s?`btn btn-dark me-2`:``,button:!0,href:b.data&&_.safeUrlConcat(b.data.liteUrl,`/videos/${a.id}`),analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.OpenInClickView,location:m,workflowPhase:e.Start}},{order:20,label:s?N(`addVideo`):null,svg:s?void 0:x,tooltip:s?``:N(`addVideo`),button:!s,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.AddToWorkspace,location:m,workflowPhase:e.Start}},{order:30,label:N(`suggest`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.SUGGEST_EDIT,args:[a.id],params:{location:m}},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.SuggestEdit,location:m,workflowPhase:e.Start}}];return w(a)?(a._canAddToLibrary?.customLibrary&&S.data?.length&&g.push({order:25,label:N(`addToLibrary`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD_TO_LIBRARY,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Create,entity:r.LibraryRequest,workflowPhase:e.Start,location:m}}),a._canDownload?.value&&g.push({order:40,label:N(`download`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.DOWNLOAD_VIDEO,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Download,entity:r.Video,workflowPhase:e.Start,location:m}}),c&&g.push({order:50,label:d,openInNewTab:!0,href:f(v.Video,a.id)}),g):[...g,P]}return{getVideoActions:T,fetchMoreActions:e=>C(e)}}export{A as n,F as t};
2
- //# sourceMappingURL=CGLWqKaa.chunk.js.map
1
+ import{S as e,b as t,d as n,s as r,x as i}from"./B1i9atik.chunk.js";import{l as a,p as o,u as s}from"./TJBzqR6k.chunk.js";import{t as c}from"./CzvVp9iC.chunk.js";import{n as l,t as u}from"./Dn3hwC-o.chunk.js";import{t as d}from"./CrBD6Z4s.chunk.js";import{t as f}from"./DKbUI-vj.chunk.js";import{t as p}from"./B0NqlFZf.chunk.js";import{C as m,S as h,Z as g,l as _,tt as v}from"./app-fNhmX-xT.js";import{t as y}from"./BU2ULxCS2.chunk.js";import{t as b}from"./ErGRzsV12.chunk.js";import{n as x}from"./M-OKfIH7.chunk.js";var S=function(e){return e.Developer=`Curator Devs`,e.Content=`Content`,e.Curator=`Curators`,e.Support=`Support`,e.SalesSupport=`Sales Support`,e.GraphicDesigner=`Graphic Designers`,e.MetadataEditor=`Metadata Editors`,e.ResourcingManager=`Resourcing Managers`,e.SeniorContentManager=`Senior Content Manager`,e.Marketing=`Marketing`,e.Sales=`Sales Representatives`,e.StreamableCurator=`Streamable Curator`,e.SupportExtraPermission=`Support - Extra Permissions`,e.SeoManager=`SEO Manager`,e.ContentReviewer=`Content Reviewer`,e}({}),C=c.encloseNamespace(`shared.hooks`);function w(e,t,n,r){let i=d.safeUrlConcat(e,`manage`),a=d.safeUrlConcat(e,`exchange`),o=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`subjects/presentations/${r}/classifications/${n}/edit`);case v.Video:return o(i,`videos`,n);case v.Playlist:return o(i,`playlists`,n);case v.Series:return o(i,`series`,n);case v.Company:return o(i,`companies`,n);case v.Interactive:return o(i,`interactives`,n);case v.Clip:return o(i,`clips`,n);case v.Category:return o(a,`categories`,n)}}function T(e,t,n,r){let i=d.safeUrlConcat(e,`streamable-learning`),a=(e,t,n)=>d.safeUrlConcat(e,`${t}/${n}`);switch(t){case v.Subject:return d.safeUrlConcat(i,`${r}/classifications/${n}/edit`);case v.Video:return a(i,`videos`,n);case v.Company:return a(i,`companies`,n)}}function E(e,t,n,r,i=`clickview`){return i===`clickview-live`?T(e,t,n,r):w(e,t,n,r)}function D(){return C(`openInCurationStudio`)}var O=[S.Curator,S.Content,S.Developer],k=[S.StreamableCurator];function A(e=`clickview`){let t=a(f.currentUser()),{data:n}=a(t.data?.id&&f.groups(t.data?.id)),r=a(g.config()),i=e===`clickview-live`?k:O;function o(){return i.some(e=>n?.data.find(t=>t.name===e))}return{openInCurationStudioLabel:D(),isUserCurator:o(),getOpenInCurationStudioLink:(t,n,i)=>E(r.data?.curatorUrl,t,n,i,e)}}var j=function(e){return e[e.PlayPage=0]=`PlayPage`,e}({});function M(e){let t=o(),n=s();function r(t){return e.type===j.PlayPage?b.getVideoRequest(t.id,t.typeId,e.shareId):null}function i(e){let i=r(e);t(i.key).shouldFetch&&n(i)}function a(e){return t(r(e).key).hasCompleted}return{hydrate:i,isHydrated:a}}var N=c.encloseNamespace(`exchange.exchangeHooks`),P={lazyPlaceholder:!0};function F(o){let{hasPermissions:s}=m(),{isUserCurator:c,openInCurationStudioLabel:d,getOpenInCurationStudioLink:f}=A(),b=a(g.config()),S=a(s(p.ContributeVideo)&&y.libraryRequestLibraries()),{hydrate:C,isHydrated:w}=M({type:j.PlayPage});function T(a){let s=o===`preview`,p={id:a.id,name:a.name},m=s?n.VideoItemPreview:n.VideoListItem,g=[{order:10,label:s?N(`openInClickView`):``,svg:h,tooltip:s?``:N(`openInClickView`),className:s?`btn btn-dark me-2`:``,button:!0,href:b.data&&_.safeUrlConcat(b.data.liteUrl,`/videos/${a.id}`),analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.OpenInClickView,location:m,workflowPhase:e.Start}},{order:20,label:s?N(`addVideo`):null,svg:s?void 0:x,tooltip:s?``:N(`addVideo`),button:!s,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.AddToWorkspace,location:m,workflowPhase:e.Start}},{order:30,label:N(`suggest`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.SUGGEST_EDIT,args:[a.id],params:{location:m}},analyticsData:p,analyticsOptions:{actionType:t.Click,entity:r.Video,descriptor:i.SuggestEdit,location:m,workflowPhase:e.Start}}];return w(a)?(a._canAddToLibrary?.customLibrary&&S.data?.length&&g.push({order:25,label:N(`addToLibrary`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.ADD_TO_LIBRARY,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Create,entity:r.LibraryRequest,workflowPhase:e.Start,location:m}}),a._canDownload?.value&&g.push({order:40,label:N(`download`),className:``,appLink:{application:l.EXCHANGE,action:u.Exchange.DOWNLOAD_VIDEO,args:[a.id]},analyticsData:p,analyticsOptions:{actionType:t.Download,entity:r.Video,workflowPhase:e.Start,location:m}}),c&&g.push({order:50,label:d,openInNewTab:!0,href:f(v.Video,a.id)}),g):[...g,P]}return{getVideoActions:T,fetchMoreActions:e=>C(e)}}export{A as n,F as t};
2
+ //# sourceMappingURL=DfWNECxe.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CGLWqKaa.chunk.js","names":[],"sources":["../../../../libs/shared/src/enums/CuratorGroup.ts","../../../../libs/shared/src/hooks/useCurationStudio.ts","../../../../libs/shared/src/hooks/useVideohydration.ts","../../src/apps/exchange/hooks/useGetExchangeActions.ts"],"sourcesContent":["/**\n * The values in this enum directly\n * map to the group names in Master.\n */\nexport enum CuratorGroup {\n Developer = 'Curator Devs',\n Content = 'Content',\n Curator = 'Curators',\n Support = 'Support',\n SalesSupport = 'Sales Support',\n GraphicDesigner = 'Graphic Designers',\n MetadataEditor = 'Metadata Editors',\n ResourcingManager = 'Resourcing Managers',\n SeniorContentManager = 'Senior Content Manager',\n Marketing = 'Marketing',\n Sales = 'Sales Representatives',\n StreamableCurator = 'Streamable Curator',\n SupportExtraPermission = 'Support - Extra Permissions',\n SeoManager = 'SEO Manager',\n ContentReviewer = 'Content Reviewer'\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CuratorUserGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type CurationStudioType = 'clickview' | 'clickview-live';\n\nfunction getClickViewLink(baseUrl: string, objectType: MasterType | string, id: string, presentationId?: string) {\n const baseManageUrl = UrlHelper.safeUrlConcat(baseUrl, 'manage');\n const baseExchangeUrl = UrlHelper.safeUrlConcat(baseUrl, 'exchange');\n const href = (base: string, path: string, id: string) => UrlHelper.safeUrlConcat(base, `${path}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseManageUrl, `subjects/presentations/${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseManageUrl, 'videos', id);\n case MasterType.Playlist:\n return href(baseManageUrl, 'playlists', id);\n case MasterType.Series:\n return href(baseManageUrl, 'series', id);\n case MasterType.Company:\n return href(baseManageUrl, 'companies', id);\n case MasterType.Interactive:\n return href(baseManageUrl, 'interactives', id);\n case MasterType.Clip:\n return href(baseManageUrl, 'clips', id);\n case MasterType.Category:\n return href(baseExchangeUrl, 'categories', id);\n }\n}\n\nfunction getClickViewLiveLink(baseUrl: string, objectType: MasterType | string, id: string, presentationId?: string) {\n const baseSLUrl = UrlHelper.safeUrlConcat(baseUrl, 'streamable-learning');\n const href = (base: string, path: string, id: string) => UrlHelper.safeUrlConcat(base, `${path}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseSLUrl, `${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseSLUrl, 'videos', id);\n case MasterType.Company:\n return href(baseSLUrl, 'companies', id);\n }\n}\n\nexport function getOpenInCurationStudioLink(\n baseUrl: string,\n objectType: MasterType | string,\n id: string,\n presentationId?: string,\n type: CurationStudioType = 'clickview'\n) {\n if (type === 'clickview-live')\n return getClickViewLiveLink(baseUrl, objectType, id, presentationId);\n\n return getClickViewLink(baseUrl, objectType, id, presentationId);\n}\n\nexport function getOpenInCurationStudioLabel(): string {\n return getPhrase('openInCurationStudio');\n}\n\nconst CLICKVIEW_CURATOR_GROUPS = [ CuratorGroup.Curator, CuratorGroup.Content, CuratorGroup.Developer ];\nconst CLICKVIEW_LIVE_CURATOR_GROUPS = [CuratorGroup.StreamableCurator];\n\nexport function useCurationStudio(type: CurationStudioType = 'clickview') {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { data: userGroups } = Flight.useBasicFetch<CuratorUserGroupCollection>(\n (currentUser.data?.id) && UserRequests.groups(currentUser.data?.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const curatorGroups = type === 'clickview-live' ? CLICKVIEW_LIVE_CURATOR_GROUPS : CLICKVIEW_CURATOR_GROUPS;\n\n function isUserCurator(): boolean {\n return curatorGroups.some(group => userGroups?.data.find(userGroup => userGroup.name === group));\n }\n\n return {\n openInCurationStudioLabel: getOpenInCurationStudioLabel(),\n isUserCurator: isUserCurator(),\n getOpenInCurationStudioLink: (objectType: MasterType | string, id: string, presentationId?: string) =>\n getOpenInCurationStudioLink(config.data?.curatorUrl, objectType, id, presentationId, type)\n };\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport enum VideoHydrationType {\n PlayPage\n}\n\ninterface UseVideoHydrationOptions {\n type: VideoHydrationType;\n shareId?: string;\n}\n\nexport function useVideoHydration(options: UseVideoHydrationOptions) {\n const getResponse = Flight.useGetResponseFunc();\n const fetch = Flight.useGetFetch();\n \n function getRequest(video: VideoTypes): Flight.Request {\n if (options.type !== VideoHydrationType.PlayPage)\n return null;\n\n return VideoHelper.getVideoRequest(video.id, video.typeId, options.shareId);\n }\n \n function hydrate(video: VideoTypes): void {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n resp.shouldFetch && fetch(request);\n }\n\n function isHydrated(video: VideoTypes): boolean {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n return resp.hasCompleted;\n }\n\n return { hydrate, isHydrated };\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useVideoHydration, VideoHydrationType } from 'libs/shared/hooks/useVideohydration';\nimport { AddVideoSvg } from 'libs/shared/images/svg/actions/AddVideoSvg';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Config, Library, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeHooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Location = 'preview' | 'video-list';\n\nconst FETCH_MORE_ACTION_OPTION: ActionOptions = {\n lazyPlaceholder: true\n};\n\nexport function useGetExchangeActions(location: Location) {\n const { hasPermissions } = usePermissions();\n\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestLibraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ContributeVideo) &&\n LibraryRequests.libraryRequestLibraries()\n );\n\n const { hydrate, isHydrated } = useVideoHydration({\n type: VideoHydrationType.PlayPage\n });\n \n function getVideoActions(video: Video): ActionOptions[] {\n const isPreview = location === 'preview';\n const analyticsData = { id: video.id, name: video.name };\n const locationContext = isPreview ? LocationContext.VideoItemPreview : LocationContext.VideoListItem;\n\n const actions: ActionOptions[] = [{\n order: 10,\n label: isPreview ? getPhrase('openInClickView') : '',\n svg: NewWindowSvg,\n tooltip: isPreview ? '' : getPhrase('openInClickView'),\n className: isPreview ? 'btn btn-dark me-2' : '',\n button: true,\n href: config.data && UrlHelper.safeUrlConcat(config.data.liteUrl, `/videos/${video.id}`),\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.OpenInClickView,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 20,\n label: isPreview ? getPhrase('addVideo') : null,\n svg: !isPreview ? AddVideoSvg : undefined,\n tooltip: isPreview ? '' : getPhrase('addVideo'),\n button: !isPreview,\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 30,\n label: getPhrase('suggest'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.SUGGEST_EDIT,\n args: [video.id],\n params: { location: locationContext }\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }];\n\n if (!isHydrated(video)) {\n return [ ...actions, FETCH_MORE_ACTION_OPTION ];\n }\n\n if (video._canAddToLibrary?.customLibrary && requestLibraries.data?.length) {\n actions.push({\n order: 25,\n label: getPhrase('addToLibrary'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD_TO_LIBRARY,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.LibraryRequest,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (video._canDownload?.value) {\n actions.push({\n order: 40,\n label: getPhrase('download'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.DOWNLOAD_VIDEO,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Download,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (isUserCurator) {\n actions.push({\n order: 50,\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Video, video.id)\n });\n }\n\n return actions;\n }\n\n return {\n getVideoActions,\n fetchMoreActions: (video: VideoTypes) => hydrate(video)\n };\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DfWNECxe.chunk.js","names":[],"sources":["../../../../libs/shared/src/enums/CuratorGroup.ts","../../../../libs/shared/src/hooks/useCurationStudio.ts","../../../../libs/shared/src/hooks/useVideohydration.ts","../../src/apps/exchange/hooks/useGetExchangeActions.ts"],"sourcesContent":["/**\n * The values in this enum directly\n * map to the group names in Master.\n */\nexport enum CuratorGroup {\n Developer = 'Curator Devs',\n Content = 'Content',\n Curator = 'Curators',\n Support = 'Support',\n SalesSupport = 'Sales Support',\n GraphicDesigner = 'Graphic Designers',\n MetadataEditor = 'Metadata Editors',\n ResourcingManager = 'Resourcing Managers',\n SeniorContentManager = 'Senior Content Manager',\n Marketing = 'Marketing',\n Sales = 'Sales Representatives',\n StreamableCurator = 'Streamable Curator',\n SupportExtraPermission = 'Support - Extra Permissions',\n SeoManager = 'SEO Manager',\n ContentReviewer = 'Content Reviewer'\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CuratorUserGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type CurationStudioType = 'clickview' | 'clickview-live';\n\nfunction getClickViewLink(baseUrl: string, objectType: MasterType | string, id: string, presentationId?: string) {\n const baseManageUrl = UrlHelper.safeUrlConcat(baseUrl, 'manage');\n const baseExchangeUrl = UrlHelper.safeUrlConcat(baseUrl, 'exchange');\n const href = (base: string, path: string, id: string) => UrlHelper.safeUrlConcat(base, `${path}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseManageUrl, `subjects/presentations/${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseManageUrl, 'videos', id);\n case MasterType.Playlist:\n return href(baseManageUrl, 'playlists', id);\n case MasterType.Series:\n return href(baseManageUrl, 'series', id);\n case MasterType.Company:\n return href(baseManageUrl, 'companies', id);\n case MasterType.Interactive:\n return href(baseManageUrl, 'interactives', id);\n case MasterType.Clip:\n return href(baseManageUrl, 'clips', id);\n case MasterType.Category:\n return href(baseExchangeUrl, 'categories', id);\n }\n}\n\nfunction getClickViewLiveLink(baseUrl: string, objectType: MasterType | string, id: string, presentationId?: string) {\n const baseSLUrl = UrlHelper.safeUrlConcat(baseUrl, 'streamable-learning');\n const href = (base: string, path: string, id: string) => UrlHelper.safeUrlConcat(base, `${path}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseSLUrl, `${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseSLUrl, 'videos', id);\n case MasterType.Company:\n return href(baseSLUrl, 'companies', id);\n }\n}\n\nexport function getOpenInCurationStudioLink(\n baseUrl: string,\n objectType: MasterType | string,\n id: string,\n presentationId?: string,\n type: CurationStudioType = 'clickview'\n) {\n if (type === 'clickview-live')\n return getClickViewLiveLink(baseUrl, objectType, id, presentationId);\n\n return getClickViewLink(baseUrl, objectType, id, presentationId);\n}\n\nexport function getOpenInCurationStudioLabel(): string {\n return getPhrase('openInCurationStudio');\n}\n\nconst CLICKVIEW_CURATOR_GROUPS = [ CuratorGroup.Curator, CuratorGroup.Content, CuratorGroup.Developer ];\nconst CLICKVIEW_LIVE_CURATOR_GROUPS = [CuratorGroup.StreamableCurator];\n\nexport function useCurationStudio(type: CurationStudioType = 'clickview') {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { data: userGroups } = Flight.useBasicFetch<CuratorUserGroupCollection>(\n (currentUser.data?.id) && UserRequests.groups(currentUser.data?.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const curatorGroups = type === 'clickview-live' ? CLICKVIEW_LIVE_CURATOR_GROUPS : CLICKVIEW_CURATOR_GROUPS;\n\n function isUserCurator(): boolean {\n return curatorGroups.some(group => userGroups?.data.find(userGroup => userGroup.name === group));\n }\n\n return {\n openInCurationStudioLabel: getOpenInCurationStudioLabel(),\n isUserCurator: isUserCurator(),\n getOpenInCurationStudioLink: (objectType: MasterType | string, id: string, presentationId?: string) =>\n getOpenInCurationStudioLink(config.data?.curatorUrl, objectType, id, presentationId, type)\n };\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport enum VideoHydrationType {\n PlayPage\n}\n\ninterface UseVideoHydrationOptions {\n type: VideoHydrationType;\n shareId?: string;\n}\n\nexport function useVideoHydration(options: UseVideoHydrationOptions) {\n const getResponse = Flight.useGetResponseFunc();\n const fetch = Flight.useGetFetch();\n \n function getRequest(video: VideoTypes): Flight.Request {\n if (options.type !== VideoHydrationType.PlayPage)\n return null;\n\n return VideoHelper.getVideoRequest(video.id, video.typeId, options.shareId);\n }\n \n function hydrate(video: VideoTypes): void {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n resp.shouldFetch && fetch(request);\n }\n\n function isHydrated(video: VideoTypes): boolean {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n return resp.hasCompleted;\n }\n\n return { hydrate, isHydrated };\n}\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useVideoHydration, VideoHydrationType } from 'libs/shared/hooks/useVideohydration';\nimport { AddVideoSvg } from 'libs/shared/images/svg/actions/AddVideoSvg';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { Config, Library, Video, VideoTypes } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nconst namespace = 'exchange.exchangeHooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Location = 'preview' | 'video-list';\n\nconst FETCH_MORE_ACTION_OPTION: ActionOptions = {\n lazyPlaceholder: true\n};\n\nexport function useGetExchangeActions(location: Location) {\n const { hasPermissions } = usePermissions();\n\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestLibraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ContributeVideo) &&\n LibraryRequests.libraryRequestLibraries()\n );\n\n const { hydrate, isHydrated } = useVideoHydration({\n type: VideoHydrationType.PlayPage\n });\n \n function getVideoActions(video: Video): ActionOptions[] {\n const isPreview = location === 'preview';\n const analyticsData = { id: video.id, name: video.name };\n const locationContext = isPreview ? LocationContext.VideoItemPreview : LocationContext.VideoListItem;\n\n const actions: ActionOptions[] = [{\n order: 10,\n label: isPreview ? getPhrase('openInClickView') : '',\n svg: NewWindowSvg,\n tooltip: isPreview ? '' : getPhrase('openInClickView'),\n className: isPreview ? 'btn btn-dark me-2' : '',\n button: true,\n href: config.data && UrlHelper.safeUrlConcat(config.data.liteUrl, `/videos/${video.id}`),\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.OpenInClickView,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 20,\n label: isPreview ? getPhrase('addVideo') : null,\n svg: !isPreview ? AddVideoSvg : undefined,\n tooltip: isPreview ? '' : getPhrase('addVideo'),\n button: !isPreview,\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }, {\n order: 30,\n label: getPhrase('suggest'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.SUGGEST_EDIT,\n args: [video.id],\n params: { location: locationContext }\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: locationContext,\n workflowPhase: WorkflowPhase.Start\n }\n }];\n\n if (!isHydrated(video)) {\n return [ ...actions, FETCH_MORE_ACTION_OPTION ];\n }\n\n if (video._canAddToLibrary?.customLibrary && requestLibraries.data?.length) {\n actions.push({\n order: 25,\n label: getPhrase('addToLibrary'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.ADD_TO_LIBRARY,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.LibraryRequest,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (video._canDownload?.value) {\n actions.push({\n order: 40,\n label: getPhrase('download'),\n className: '',\n appLink: {\n application: AppChannels.EXCHANGE,\n action: Actions.Exchange.DOWNLOAD_VIDEO,\n args: [video.id]\n },\n analyticsData,\n analyticsOptions: {\n actionType: UserAction.Download,\n entity: EntityType.Video,\n workflowPhase: WorkflowPhase.Start,\n location: locationContext\n }\n });\n }\n\n if (isUserCurator) {\n actions.push({\n order: 50,\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Video, video.id)\n });\n }\n\n return actions;\n }\n\n return {\n getVideoActions,\n fetchMoreActions: (video: VideoTypes) => hydrate(video)\n };\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t}from"./B1i9atik.chunk.js";import{v as n}from"./NpQVkKE2.chunk.js";import{t as r}from"./BG5Aor0J.chunk.js";import{t as i}from"./BBMcrXvX.chunk.js";import{U as a}from"./app-lnmpv5W4.js";t();var o=e();function s(e){let t=e.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?n.isFunction(e.onDone)&&e.onDone():n.isFunction(e.onFail)&&e.onFail(),e.closePopup()},type:t.type,close:t.close}));return t=r.sortBy(t,`close`),(0,o.jsxs)(a,{title:e.title,closePopup:e.closePopup,children:[(0,o.jsx)(`p`,{dangerouslySetInnerHTML:{__html:i.sanitize(e.text)}}),(0,o.jsx)(`div`,{className:`d-flex justify-content-end border-top pt-3 px-3 mx-n3`,children:t.map((e,t)=>(0,o.jsx)(`button`,{className:e.className,onClick:e.onClick,type:e.type,children:e.buttonText},t))})]})}export{s as DialogView};
2
- //# sourceMappingURL=BEgLlK2Z2.chunk.js.map
1
+ import{C as e,D as t}from"./B1i9atik.chunk.js";import{v as n}from"./NpQVkKE2.chunk.js";import{t as r}from"./BG5Aor0J.chunk.js";import{t as i}from"./BBMcrXvX.chunk.js";import{U as a}from"./app-fNhmX-xT.js";t();var o=e();function s(e){let t=e.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?n.isFunction(e.onDone)&&e.onDone():n.isFunction(e.onFail)&&e.onFail(),e.closePopup()},type:t.type,close:t.close}));return t=r.sortBy(t,`close`),(0,o.jsxs)(a,{title:e.title,closePopup:e.closePopup,children:[(0,o.jsx)(`p`,{dangerouslySetInnerHTML:{__html:i.sanitize(e.text)}}),(0,o.jsx)(`div`,{className:`d-flex justify-content-end border-top pt-3 px-3 mx-n3`,children:t.map((e,t)=>(0,o.jsx)(`button`,{className:e.className,onClick:e.onClick,type:e.type,children:e.buttonText},t))})]})}export{s as DialogView};
2
+ //# sourceMappingURL=Dfi_iXFg2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BEgLlK2Z2.chunk.js","names":[],"sources":["../../../../libs/shared/src/views/dialog/DialogView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { DialogOptions, PopupViewProps } from 'libs/shared/interfaces';\n\ninterface DialogViewProps extends DialogOptions {\n onDone?: () => void;\n onFail?: () => void;\n}\n\ntype PropTypes = React.PropsWithChildren<DialogViewProps & PopupViewProps>;\n\nexport function DialogView(props: PropTypes): React.ReactElement {\n let buttons = props.buttons.map(b => {\n const onClick = () => {\n if (b.success)\n FunctionHelper.isFunction(props.onDone) && props.onDone();\n else\n FunctionHelper.isFunction(props.onFail) && props.onFail();\n\n props.closePopup();\n };\n\n return {\n buttonText: b.text,\n className: b.className,\n onClick,\n type: b.type,\n close: b.close\n };\n });\n\n /**\n * The dismiss action should always be on the left side of the popup\n */\n buttons = ArrayHelper.sortBy(buttons, 'close');\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <p dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(props.text) }} />\n <div className='d-flex justify-content-end border-top pt-3 px-3 mx-n3'>\n {buttons.map((b, idx) => (\n <button key={idx} className={b.className} onClick={b.onClick} type={b.type}>\n {b.buttonText}\n </button>\n ))}\n </div>\n </Popup>\n );\n}\n"],"mappings":"2NAgBA,SAAgB,EAAW,EAAsC,CAC/D,IAAI,EAAU,EAAM,QAAQ,IAAI,IAUvB,CACL,WAAY,EAAE,KACd,UAAW,EAAE,UACb,YAZoB,CAChB,EAAE,QACJ,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAEzD,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAE3D,EAAM,YAAY,EAOlB,KAAM,EAAE,KACR,MAAO,EAAE,MACV,EACD,CAOF,MAFA,GAAU,EAAY,OAAO,EAAS,QAAQ,EAG5C,EAAA,EAAA,MAAC,EAAD,CAAO,MAAO,EAAM,MAAO,WAAY,EAAM,oBAA7C,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,wBAAyB,CAAE,OAAQ,EAAW,SAAS,EAAM,KAAK,CAAE,CAAI,CAAA,EAC3E,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iEACZ,EAAQ,KAAK,EAAG,KACf,EAAA,EAAA,KAAC,SAAD,CAAkB,UAAW,EAAE,UAAW,QAAS,EAAE,QAAS,KAAM,EAAE,cACnE,EAAE,WACI,CAFI,EAEJ,CACT,CACE,CAAA,CACA"}
1
+ {"version":3,"file":"Dfi_iXFg2.chunk.js","names":[],"sources":["../../../../libs/shared/src/views/dialog/DialogView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { DialogOptions, PopupViewProps } from 'libs/shared/interfaces';\n\ninterface DialogViewProps extends DialogOptions {\n onDone?: () => void;\n onFail?: () => void;\n}\n\ntype PropTypes = React.PropsWithChildren<DialogViewProps & PopupViewProps>;\n\nexport function DialogView(props: PropTypes): React.ReactElement {\n let buttons = props.buttons.map(b => {\n const onClick = () => {\n if (b.success)\n FunctionHelper.isFunction(props.onDone) && props.onDone();\n else\n FunctionHelper.isFunction(props.onFail) && props.onFail();\n\n props.closePopup();\n };\n\n return {\n buttonText: b.text,\n className: b.className,\n onClick,\n type: b.type,\n close: b.close\n };\n });\n\n /**\n * The dismiss action should always be on the left side of the popup\n */\n buttons = ArrayHelper.sortBy(buttons, 'close');\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <p dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(props.text) }} />\n <div className='d-flex justify-content-end border-top pt-3 px-3 mx-n3'>\n {buttons.map((b, idx) => (\n <button key={idx} className={b.className} onClick={b.onClick} type={b.type}>\n {b.buttonText}\n </button>\n ))}\n </div>\n </Popup>\n );\n}\n"],"mappings":"2NAgBA,SAAgB,EAAW,EAAsC,CAC/D,IAAI,EAAU,EAAM,QAAQ,IAAI,IAUvB,CACL,WAAY,EAAE,KACd,UAAW,EAAE,UACb,YAZoB,CAChB,EAAE,QACJ,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAEzD,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAE3D,EAAM,YAAY,EAOlB,KAAM,EAAE,KACR,MAAO,EAAE,MACV,EACD,CAOF,MAFA,GAAU,EAAY,OAAO,EAAS,QAAQ,EAG5C,EAAA,EAAA,MAAC,EAAD,CAAO,MAAO,EAAM,MAAO,WAAY,EAAM,oBAA7C,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,wBAAyB,CAAE,OAAQ,EAAW,SAAS,EAAM,KAAK,CAAE,CAAI,CAAA,EAC3E,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iEACZ,EAAQ,KAAK,EAAG,KACf,EAAA,EAAA,KAAC,SAAD,CAAkB,UAAW,EAAE,UAAW,QAAS,EAAE,QAAS,KAAM,EAAE,cACnE,EAAE,WACI,CAFI,EAEJ,CACT,CACE,CAAA,CACA"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t,S as n,b as r,bt as i,d as a,fn as o,k as s,s as c,t as l,x as u}from"./B1i9atik.chunk.js";import{_ as d}from"./NpQVkKE2.chunk.js";import{d as f,l as p}from"./TJBzqR6k.chunk.js";import{t as m}from"./CzvVp9iC.chunk.js";import{t as h}from"./Cw-_K29Z.chunk.js";import{n as g}from"./DJQC03A3.chunk.js";import{t as _}from"./YhCzLJGK.chunk.js";import{t as v}from"./DKbUI-vj.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-lnmpv5W4.js";import{i as T,n as E,t as D}from"./mkasrghR2.chunk.js";import{t as O}from"./s776Po8a2.chunk.js";import{t as k}from"./BEyI0jsC2.chunk.js";import{t as A}from"./dkfSCDWH2.chunk.js";import{t as j}from"./CnWmhvi9.chunk.js";import{t as ee}from"./BwAvKeam.chunk.js";import{t as te}from"./CCvXN2-C.chunk.js";import{t as M}from"./c2oA1XgG.chunk.js";import{t as N}from"./Bu37Hprb2.chunk.js";import{t as P}from"./C1guWVFU2.chunk.js";var F=o(s()),I=o(t()),L=e(),R=`shared.flagRemovalRadio`,z=m.encloseNamespace(R);function B(){let e=y();function t(t){e.setFieldValue(`suggestion`,t)}function n(){return[z(`nonEducational`),z(`poorQuality`),z(`offensive`),z(`copyright`),z(`ageAppropriate`),z(`audio`),z(`other`)]}return(0,L.jsxs)(`div`,{className:`mb-3`,children:[(0,L.jsxs)(`label`,{className:`form-label`,children:[(0,L.jsx)(b,{namespace:R,phrase:`flagRemovalReasonLabel`}),(0,L.jsx)(`span`,{className:`text-danger`,children:`*`})]}),n().map((n,r)=>(0,L.jsx)(g.Check,{type:`radio`,label:n,name:n,id:`flag-${r}`,onChange:()=>t(n),checked:e.values.suggestion===n,className:`mb-2`},r))]})}var V=`shared.suggestEditForm`;function H(e){let t=y(),[n,r]=I.useState(),[i,a]=I.useState(!1);function o(n){let i=t?.values.property&&e.metadataValue===n.name;t.setFieldValue(`suggestion`,i?``:n.name),r(n),a(i)}return(0,L.jsxs)(`div`,{className:`form-group`,children:[(0,L.jsx)(`label`,{className:`form-label`,children:(0,L.jsx)(b,{namespace:V,phrase:`suggestLabel`})}),(0,L.jsx)(`div`,{"aria-describedby":`suggestEditRatingError`,children:(0,L.jsx)(h,{children:e.ratings.map(e=>(0,L.jsx)(d,{onClick:()=>o(e),className:`btn ${e.id===n?.id?`btn-dark`:`btn-outline-dark`}`,children:e.code},e.id))})}),i&&(0,L.jsx)(j,{name:`suggestEditRating`,children:(0,L.jsx)(b,{namespace:V,phrase:`ratingError`})})]})}var U=o(D()),W=m.encloseNamespace(`shared.suggestEditValidation`);function G(){return(0,U.object)().shape({property:(0,U.string)().required(W(`metadata`)),reason:(0,U.string)().when(`property`,{is:e=>e===`FlagRemoval`,then:(0,U.string)().notRequired(),otherwise:(0,U.string)().required(W(`reason`))}),suggestion:(0,U.string)().required(W(`suggestion`)),currentValue:(0,U.string)()})}var K=function(e){return e.VideoTitle=`video title`,e.Description=`description`,e.Rating=`rating`,e.SeriesTitle=`series title`,e.Season=`season number`,e.EpisodeNumber=`episode number`,e.BroadcastDate=`broadcast date`,e.Channel=`channel`,e.ProductionYear=`production year`,e.Distributors=`distributors`,e.ProductionCompanies=`production companies`,e.Directors=`directors`,e.Producers=`producers`,e.FlagRemoval=`flag for removal`,e.Other=`other`,e}({}),q={VideoTitle:{name:K.VideoTitle,property:`name`},Description:{name:K.Description,property:`description`},Rating:{name:K.Rating,property:`rating.name`},SeriesTitle:{name:K.SeriesTitle,property:`series.name`},Season:{name:K.Season,property:`season.number`},EpisodeNumber:{name:K.EpisodeNumber,property:`episodeNumber`},BroadcastDate:{name:K.BroadcastDate,property:`dateBroadcast`},Channel:{name:K.Channel,property:`channel.name`},ProductionYear:{name:K.ProductionYear,property:`productionYear`},Distributors:{name:K.Distributors,property:`distributors`,collection:!0},ProductionCompanies:{name:K.ProductionCompanies,property:`productionCompanies`,collection:!0},Directors:{name:K.Directors,property:`directors`,collection:!0},Producers:{name:K.Producers,property:`producers`,collection:!0},FlagRemoval:{name:K.FlagRemoval},Other:{name:K.Other}},J=`shared.suggestEditForm`,Y=m.encloseNamespace(J),X={property:``,suggestion:``,reason:``,currentValue:``};function Z(e){let t=e.ratings?.filter(e=>e.code),n=y(),[r,i]=I.useState(),a=n?.values.property;I.useEffect(()=>{let e=o();n.setValues({property:a,reason:``,suggestion:``,currentValue:e||``}),n.setTouched({}),i(e)},[a]);function o(){let t=q[a];if(!t||!t.property)return null;let n=(0,F.default)(e.video,t.property);if(!n||t.collection&&!n.data.length)return Y(`none`);switch(t.collection&&(n=n.data.map(e=>e.name).join(`, `)),a){case`BroadcastDate`:return _.format(n,`D MMMM YYYY`);default:return n}}return(0,L.jsxs)(w,{children:[(0,L.jsxs)(T,{as:`select`,label:Y(`metadataLabel`),id:`property`,name:`property`,value:a,className:`text-capitalize`,showRequiredStar:!0,children:[(0,L.jsx)(`option`,{value:``,children:Y(`metadataPlaceholder`)}),Object.keys(q).map((e,t)=>(0,L.jsx)(`option`,{value:e,children:q[e].name},t))]}),a&&(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`p`,{className:`fw-semibold mb-0`,children:[(0,L.jsx)(b,{namespace:J,phrase:`currentValueLabel`}),` `,(0,L.jsx)(`span`,{children:q[a]?.name})]}),(0,L.jsx)(`p`,{children:r})]}),a===`Rating`&&(0,L.jsx)(H,{ratings:t,metadataValue:r}),a===`FlagRemoval`&&(0,L.jsx)(B,{}),a!==`Rating`&&a!==`FlagRemoval`&&(0,L.jsx)(T,{label:Y(`suggestLabel`),placeholder:Y(`suggestPlaceholder`),type:`text`,id:`suggestion`,name:`suggestion`,value:n?.values.suggestion,showRequiredStar:!0}),a===`FlagRemoval`?(0,L.jsx)(T,{label:Y(`flagRemovalCommentsLabel`),placeholder:Y(`flagRemovalCommentsPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason}):(0,L.jsx)(T,{label:Y(`reasonLabel`),placeholder:Y(`reasonPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason,showRequiredStar:!0})]}),(0,L.jsxs)(x,{children:[(0,L.jsx)(x.Cancel,{text:Y(`cancel`),onClick:e.closePopup,variant:`link`}),(0,L.jsx)(P,{variant:`dark`,submitText:Y(`submit`)})]})]})}function ne(e){return(0,L.jsx)(E,{initialValues:X,validationSchema:G(),onSubmit:e.onClickSubmit,children:(0,L.jsx)(Z,{...e})})}var Q=`exchange.suggestEdit`,$=m.encloseNamespace(Q);function re(e){let t=f(),o=k(),{loading:s,handleGenerateReportError:d}=A(),m=p(C.config()),h=p(v.currentUser()),g=p(O.video(e.videoId)),_=p(N.ratings()),{previewContext:y,clearPreviewContext:x}=M(e.videoId,!1);async function w(e,i){try{await t(te.suggestEdit(g.data.id,e)),o.success($(`success`)),T(),l.logUserAction({id:g.data.id,name:g.data.name},{actionType:r.Submit,entity:c.Video,descriptor:u.SuggestEdit,location:a.Popup,workflowPhase:n.Complete})}catch(e){d(e,$(`error`),$(`noEmailError`))}finally{i()}}function T(){e.closePopup(),y?.appLink&&(ee.preventScrollTop(),i.trigger(y.appLink),x())}return m.hasCompleted&&h.hasCompleted&&g.hasCompleted&&_.hasCompleted?(0,L.jsxs)(S,{title:$(`title`),closePopup:T,showLoadingSpinner:s,children:[(0,L.jsx)(`p`,{children:(0,L.jsx)(b,{namespace:Q,phrase:`description`})}),(0,L.jsx)(ne,{video:g.data,ratings:_.data,closePopup:T,onClickSubmit:w})]}):(0,L.jsx)(L.Fragment,{})}export{re as ExchangeSuggestEditView};
2
- //# sourceMappingURL=8vJGuJF-2.chunk.js.map
1
+ import{C as e,D as t,S as n,b as r,bt as i,d as a,fn as o,k as s,s as c,t as l,x as u}from"./B1i9atik.chunk.js";import{_ as d}from"./NpQVkKE2.chunk.js";import{d as f,l as p}from"./TJBzqR6k.chunk.js";import{t as m}from"./CzvVp9iC.chunk.js";import{t as h}from"./Cw-_K29Z.chunk.js";import{n as g}from"./DJQC03A3.chunk.js";import{t as _}from"./YhCzLJGK.chunk.js";import{t as v}from"./DKbUI-vj.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-fNhmX-xT.js";import{i as T,n as E,t as D}from"./BpzuiXcd2.chunk.js";import{t as O}from"./C9AjegY32.chunk.js";import{t as k}from"./Bswd1QrZ2.chunk.js";import{t as A}from"./B0CItJhp2.chunk.js";import{t as j}from"./CnWmhvi9.chunk.js";import{t as ee}from"./BwAvKeam.chunk.js";import{t as te}from"./DAQxdC_x.chunk.js";import{t as M}from"./C4hd6q9D.chunk.js";import{t as N}from"./fyOxYVvI2.chunk.js";import{t as P}from"./CSB18s8X2.chunk.js";var F=o(s()),I=o(t()),L=e(),R=`shared.flagRemovalRadio`,z=m.encloseNamespace(R);function B(){let e=y();function t(t){e.setFieldValue(`suggestion`,t)}function n(){return[z(`nonEducational`),z(`poorQuality`),z(`offensive`),z(`copyright`),z(`ageAppropriate`),z(`audio`),z(`other`)]}return(0,L.jsxs)(`div`,{className:`mb-3`,children:[(0,L.jsxs)(`label`,{className:`form-label`,children:[(0,L.jsx)(b,{namespace:R,phrase:`flagRemovalReasonLabel`}),(0,L.jsx)(`span`,{className:`text-danger`,children:`*`})]}),n().map((n,r)=>(0,L.jsx)(g.Check,{type:`radio`,label:n,name:n,id:`flag-${r}`,onChange:()=>t(n),checked:e.values.suggestion===n,className:`mb-2`},r))]})}var V=`shared.suggestEditForm`;function H(e){let t=y(),[n,r]=I.useState(),[i,a]=I.useState(!1);function o(n){let i=t?.values.property&&e.metadataValue===n.name;t.setFieldValue(`suggestion`,i?``:n.name),r(n),a(i)}return(0,L.jsxs)(`div`,{className:`form-group`,children:[(0,L.jsx)(`label`,{className:`form-label`,children:(0,L.jsx)(b,{namespace:V,phrase:`suggestLabel`})}),(0,L.jsx)(`div`,{"aria-describedby":`suggestEditRatingError`,children:(0,L.jsx)(h,{children:e.ratings.map(e=>(0,L.jsx)(d,{onClick:()=>o(e),className:`btn ${e.id===n?.id?`btn-dark`:`btn-outline-dark`}`,children:e.code},e.id))})}),i&&(0,L.jsx)(j,{name:`suggestEditRating`,children:(0,L.jsx)(b,{namespace:V,phrase:`ratingError`})})]})}var U=o(D()),W=m.encloseNamespace(`shared.suggestEditValidation`);function G(){return(0,U.object)().shape({property:(0,U.string)().required(W(`metadata`)),reason:(0,U.string)().when(`property`,{is:e=>e===`FlagRemoval`,then:(0,U.string)().notRequired(),otherwise:(0,U.string)().required(W(`reason`))}),suggestion:(0,U.string)().required(W(`suggestion`)),currentValue:(0,U.string)()})}var K=function(e){return e.VideoTitle=`video title`,e.Description=`description`,e.Rating=`rating`,e.SeriesTitle=`series title`,e.Season=`season number`,e.EpisodeNumber=`episode number`,e.BroadcastDate=`broadcast date`,e.Channel=`channel`,e.ProductionYear=`production year`,e.Distributors=`distributors`,e.ProductionCompanies=`production companies`,e.Directors=`directors`,e.Producers=`producers`,e.FlagRemoval=`flag for removal`,e.Other=`other`,e}({}),q={VideoTitle:{name:K.VideoTitle,property:`name`},Description:{name:K.Description,property:`description`},Rating:{name:K.Rating,property:`rating.name`},SeriesTitle:{name:K.SeriesTitle,property:`series.name`},Season:{name:K.Season,property:`season.number`},EpisodeNumber:{name:K.EpisodeNumber,property:`episodeNumber`},BroadcastDate:{name:K.BroadcastDate,property:`dateBroadcast`},Channel:{name:K.Channel,property:`channel.name`},ProductionYear:{name:K.ProductionYear,property:`productionYear`},Distributors:{name:K.Distributors,property:`distributors`,collection:!0},ProductionCompanies:{name:K.ProductionCompanies,property:`productionCompanies`,collection:!0},Directors:{name:K.Directors,property:`directors`,collection:!0},Producers:{name:K.Producers,property:`producers`,collection:!0},FlagRemoval:{name:K.FlagRemoval},Other:{name:K.Other}},J=`shared.suggestEditForm`,Y=m.encloseNamespace(J),X={property:``,suggestion:``,reason:``,currentValue:``};function Z(e){let t=e.ratings?.filter(e=>e.code),n=y(),[r,i]=I.useState(),a=n?.values.property;I.useEffect(()=>{let e=o();n.setValues({property:a,reason:``,suggestion:``,currentValue:e||``}),n.setTouched({}),i(e)},[a]);function o(){let t=q[a];if(!t||!t.property)return null;let n=(0,F.default)(e.video,t.property);if(!n||t.collection&&!n.data.length)return Y(`none`);switch(t.collection&&(n=n.data.map(e=>e.name).join(`, `)),a){case`BroadcastDate`:return _.format(n,`D MMMM YYYY`);default:return n}}return(0,L.jsxs)(w,{children:[(0,L.jsxs)(T,{as:`select`,label:Y(`metadataLabel`),id:`property`,name:`property`,value:a,className:`text-capitalize`,showRequiredStar:!0,children:[(0,L.jsx)(`option`,{value:``,children:Y(`metadataPlaceholder`)}),Object.keys(q).map((e,t)=>(0,L.jsx)(`option`,{value:e,children:q[e].name},t))]}),a&&(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`p`,{className:`fw-semibold mb-0`,children:[(0,L.jsx)(b,{namespace:J,phrase:`currentValueLabel`}),` `,(0,L.jsx)(`span`,{children:q[a]?.name})]}),(0,L.jsx)(`p`,{children:r})]}),a===`Rating`&&(0,L.jsx)(H,{ratings:t,metadataValue:r}),a===`FlagRemoval`&&(0,L.jsx)(B,{}),a!==`Rating`&&a!==`FlagRemoval`&&(0,L.jsx)(T,{label:Y(`suggestLabel`),placeholder:Y(`suggestPlaceholder`),type:`text`,id:`suggestion`,name:`suggestion`,value:n?.values.suggestion,showRequiredStar:!0}),a===`FlagRemoval`?(0,L.jsx)(T,{label:Y(`flagRemovalCommentsLabel`),placeholder:Y(`flagRemovalCommentsPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason}):(0,L.jsx)(T,{label:Y(`reasonLabel`),placeholder:Y(`reasonPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason,showRequiredStar:!0})]}),(0,L.jsxs)(x,{children:[(0,L.jsx)(x.Cancel,{text:Y(`cancel`),onClick:e.closePopup,variant:`link`}),(0,L.jsx)(P,{variant:`dark`,submitText:Y(`submit`)})]})]})}function ne(e){return(0,L.jsx)(E,{initialValues:X,validationSchema:G(),onSubmit:e.onClickSubmit,children:(0,L.jsx)(Z,{...e})})}var Q=`exchange.suggestEdit`,$=m.encloseNamespace(Q);function re(e){let t=f(),o=k(),{loading:s,handleGenerateReportError:d}=A(),m=p(C.config()),h=p(v.currentUser()),g=p(O.video(e.videoId)),_=p(N.ratings()),{previewContext:y,clearPreviewContext:x}=M(e.videoId,!1);async function w(e,i){try{await t(te.suggestEdit(g.data.id,e)),o.success($(`success`)),T(),l.logUserAction({id:g.data.id,name:g.data.name},{actionType:r.Submit,entity:c.Video,descriptor:u.SuggestEdit,location:a.Popup,workflowPhase:n.Complete})}catch(e){d(e,$(`error`),$(`noEmailError`))}finally{i()}}function T(){e.closePopup(),y?.appLink&&(ee.preventScrollTop(),i.trigger(y.appLink),x())}return m.hasCompleted&&h.hasCompleted&&g.hasCompleted&&_.hasCompleted?(0,L.jsxs)(S,{title:$(`title`),closePopup:T,showLoadingSpinner:s,children:[(0,L.jsx)(`p`,{children:(0,L.jsx)(b,{namespace:Q,phrase:`description`})}),(0,L.jsx)(ne,{video:g.data,ratings:_.data,closePopup:T,onClickSubmit:w})]}):(0,L.jsx)(L.Fragment,{})}export{re as ExchangeSuggestEditView};
2
+ //# sourceMappingURL=DjMOZfNJ2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"8vJGuJF-2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval.tsx","../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector.tsx","../../../../libs/shared/src/components/suggest-edit-form/validation/SuggestEditValidation.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditMetadataTypes.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditForm.tsx","../../src/apps/exchange/views/exchange-suggest-edit/ExchangeSuggestEditView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.flagRemovalRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditFlagRemoval() {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n function onSelectOption(option: string) {\n formikProps.setFieldValue('suggestion', option);\n }\n\n function flagRemovalRadioOptions() {\n return [\n getPhrase('nonEducational'),\n getPhrase('poorQuality'),\n getPhrase('offensive'),\n getPhrase('copyright'),\n getPhrase('ageAppropriate'),\n getPhrase('audio'),\n getPhrase('other')\n ];\n }\n\n return (\n <div className='mb-3'>\n <label className='form-label'>\n <Text namespace={namespace} phrase='flagRemovalReasonLabel' />\n <span className='text-danger'>*</span>\n </label>\n {flagRemovalRadioOptions().map((option, index) => (\n <Form.Check\n type='radio'\n key={index}\n label={option}\n name={option}\n id={`flag-${index}`}\n onChange={() => onSelectOption(option)}\n checked={formikProps.values.suggestion === option}\n className='mb-2'\n />\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { ButtonGroup } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { Rating } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.suggestEditForm';\n\ninterface SuggestEditRatingSelectorProps {\n ratings: Rating[];\n metadataValue: string;\n}\n\nexport function SuggestEditRatingSelector(props: SuggestEditRatingSelectorProps) {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ selectedRating, setSelectedRating ] = React.useState<Rating>();\n const [ isRatingInvalid, setIsRatingInvalid ] = React.useState<boolean>(false);\n \n function onRatingSelect(rating: Rating) {\n const isRatingInvalid = formikProps?.values.property && props.metadataValue === rating.name;\n formikProps.setFieldValue('suggestion', !isRatingInvalid ? rating.name : '');\n setSelectedRating(rating);\n setIsRatingInvalid(isRatingInvalid);\n }\n\n return (\n <div className='form-group'>\n <label className='form-label'><Text namespace={namespace} phrase='suggestLabel' /></label>\n <div aria-describedby='suggestEditRatingError'>\n <ButtonGroup>\n {props.ratings.map(rating => (\n <DivButton key={rating.id} onClick={() => onRatingSelect(rating)} className={`btn ${rating.id === selectedRating?.id ? 'btn-dark' : 'btn-outline-dark'}`}>\n {rating.code}\n </DivButton>\n ))}\n </ButtonGroup>\n </div>\n {isRatingInvalid && <FormFeedback name='suggestEditRating'><Text namespace={namespace} phrase='ratingError' /></FormFeedback>}\n </div>\n );\n}\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.suggestEditValidation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditValidation() {\n return object().shape({\n property: string().required((getPhrase('metadata'))),\n reason: string().when('property', {\n is: propertyValue => propertyValue === 'FlagRemoval',\n then: string().notRequired(),\n otherwise: string().required(getPhrase('reason'))\n }),\n suggestion: string().required(getPhrase('suggestion')),\n currentValue: string()\n });\n}\n","export enum MetadataType {\n VideoTitle = 'video title',\n Description = 'description',\n Rating = 'rating',\n SeriesTitle = 'series title',\n Season = 'season number',\n EpisodeNumber = 'episode number',\n BroadcastDate = 'broadcast date',\n Channel = 'channel',\n ProductionYear = 'production year',\n Distributors = 'distributors',\n ProductionCompanies = 'production companies',\n Directors = 'directors',\n Producers = 'producers',\n FlagRemoval = 'flag for removal',\n Other = 'other'\n}\n\nexport type MetadataTypeKey = keyof typeof MetadataType;\n\nexport type MetadataTypeMap = {\n [K in MetadataTypeKey]: {\n name: MetadataType,\n property?: string,\n collection?: boolean\n };\n};\n\nexport const MetadataTypes: MetadataTypeMap = {\n VideoTitle: {\n name: MetadataType.VideoTitle,\n property: 'name'\n },\n Description: {\n name: MetadataType.Description,\n property: 'description'\n },\n Rating: {\n name: MetadataType.Rating,\n property: 'rating.name'\n },\n SeriesTitle: {\n name: MetadataType.SeriesTitle,\n property: 'series.name'\n },\n Season: {\n name: MetadataType.Season,\n property: 'season.number'\n },\n EpisodeNumber: {\n name: MetadataType.EpisodeNumber,\n property: 'episodeNumber'\n },\n BroadcastDate: {\n name: MetadataType.BroadcastDate,\n property: 'dateBroadcast'\n },\n Channel: {\n name: MetadataType.Channel,\n property: 'channel.name'\n },\n ProductionYear: {\n name: MetadataType.ProductionYear,\n property: 'productionYear'\n },\n Distributors: {\n name: MetadataType.Distributors,\n property: 'distributors',\n collection: true\n },\n ProductionCompanies: {\n name: MetadataType.ProductionCompanies,\n property: 'productionCompanies',\n collection: true\n },\n Directors: {\n name: MetadataType.Directors,\n property: 'directors',\n collection: true\n },\n Producers: {\n name: MetadataType.Producers,\n property: 'producers',\n collection: true\n },\n FlagRemoval: {\n name: MetadataType.FlagRemoval\n },\n Other: {\n name: MetadataType.Other\n }\n};\n","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\nimport get from 'lodash/get';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { SuggestEditFlagRemoval } from 'libs/shared/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval';\nimport { SuggestEditRatingSelector } from 'libs/shared/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { SuggestEditValidation } from './validation/SuggestEditValidation';\nimport { MetadataTypeKey, MetadataTypes } from './SuggestEditMetadataTypes';\n\nconst namespace = 'shared.suggestEditForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst INITIAL_VALUES = {\n property: '',\n suggestion: '',\n reason: '',\n currentValue: ''\n};\n\ninterface SuggestEditFormProps {\n video: Video;\n ratings: Rating[];\n onClickSubmit: (\n data: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) => void;\n closePopup: () => void;\n}\n\nfunction SuggestEditForm(props: SuggestEditFormProps) {\n const ratings = props.ratings?.filter(rating => rating.code);\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ metadataValue, setMetadataValue ] = React.useState<string>();\n\n const metadata = formikProps?.values.property as MetadataTypeKey;\n\n React.useEffect(() => {\n const metadataValue = getMetadataValue();\n formikProps.setValues({\n property: metadata,\n reason: '',\n suggestion: '',\n currentValue: metadataValue || ''\n });\n formikProps.setTouched({});\n setMetadataValue(metadataValue);\n }, [metadata]);\n\n function getMetadataValue(): string {\n const metadataType = MetadataTypes[metadata];\n\n if (!metadataType || !metadataType.property)\n return null;\n\n let currentValue = get(props.video, metadataType.property);\n\n if (!currentValue || (metadataType.collection && !currentValue.data.length))\n return getPhrase('none');\n\n if (metadataType.collection) {\n currentValue = (currentValue.data as BaseObject[]).map(obj => obj.name).join(', ');\n }\n\n switch (metadata) {\n case 'BroadcastDate':\n return DateHelper.format(currentValue, 'D MMMM YYYY');\n default:\n return currentValue;\n }\n }\n\n return (\n <Form>\n <FormField\n as='select'\n label={getPhrase('metadataLabel')}\n id='property'\n name='property'\n value={metadata}\n className='text-capitalize'\n showRequiredStar\n >\n <option value=''>{getPhrase('metadataPlaceholder')}</option>\n {Object.keys(MetadataTypes).map((metadata, index) => (\n <option key={index} value={metadata}>\n {MetadataTypes[metadata as keyof typeof MetadataTypes].name}\n </option>\n ))}\n </FormField>\n\n {metadata &&\n <>\n {metadataValue && (\n <>\n <p className='fw-semibold mb-0'>\n <Text namespace={namespace} phrase='currentValueLabel' /> <span>{MetadataTypes[metadata as MetadataTypeKey]?.name}</span>\n </p>\n <p>{metadataValue}</p>\n </>\n )}\n\n {metadata === 'Rating' && <SuggestEditRatingSelector ratings={ratings} metadataValue={metadataValue} />}\n {metadata === 'FlagRemoval' && <SuggestEditFlagRemoval />}\n {metadata !== 'Rating' && metadata !== 'FlagRemoval' &&\n <FormField\n label={getPhrase('suggestLabel')}\n placeholder={getPhrase('suggestPlaceholder')}\n type='text'\n id='suggestion'\n name='suggestion'\n value={formikProps?.values.suggestion}\n showRequiredStar\n />\n }\n\n {\n metadata === 'FlagRemoval' ? (\n <FormField\n label={getPhrase('flagRemovalCommentsLabel')}\n placeholder={getPhrase('flagRemovalCommentsPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n />\n ) : (\n <FormField\n label={getPhrase('reasonLabel')}\n placeholder={getPhrase('reasonPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n showRequiredStar\n />\n )\n }\n </>\n }\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('cancel')}\n onClick={props.closePopup}\n variant='link'\n />\n <FormButtons variant='dark' submitText={getPhrase('submit')} />\n </PopupButtons>\n </Form>\n );\n}\n\nexport function SuggestEditFormWrapper(props: SuggestEditFormProps) {\n return (\n <FormWrapper<SuggestEditModel>\n initialValues={INITIAL_VALUES}\n validationSchema={SuggestEditValidation()}\n onSubmit={props.onClickSubmit}\n >\n <SuggestEditForm {...props} />\n </FormWrapper>\n );\n}\n","\nimport React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SuggestEditFormWrapper } from 'libs/shared/components/suggest-edit-form/SuggestEditForm';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { Config, CurrentUser, PopupViewProps, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\nconst namespace = 'exchange.suggestEdit';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSuggestEditProps extends PopupViewProps {\n videoId: string;\n}\n\nexport function ExchangeSuggestEditView(props: ExchangeSuggestEditProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.videoId, false);\n\n async function onClickSubmit(\n values: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) {\n try {\n await fetchAsync(ExchangeRequests.suggestEdit(video.data.id, values));\n alerts.success(getPhrase('success'));\n closePopup();\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch (xhr) {\n handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError'));\n } finally {\n onDone();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n const hasLoaded = (\n config.hasCompleted &&\n currentUser.hasCompleted &&\n video.hasCompleted &&\n ratings.hasCompleted\n );\n\n if (!hasLoaded) {\n return <></>;\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={loading}\n >\n <p><Text namespace={namespace} phrase='description' /></p>\n\n <SuggestEditFormWrapper\n video={video.data}\n ratings={ratings.data}\n closePopup={closePopup}\n onClickSubmit={onClickSubmit}\n />\n </Popup>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"DjMOZfNJ2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval.tsx","../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector.tsx","../../../../libs/shared/src/components/suggest-edit-form/validation/SuggestEditValidation.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditMetadataTypes.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditForm.tsx","../../src/apps/exchange/views/exchange-suggest-edit/ExchangeSuggestEditView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.flagRemovalRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditFlagRemoval() {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n function onSelectOption(option: string) {\n formikProps.setFieldValue('suggestion', option);\n }\n\n function flagRemovalRadioOptions() {\n return [\n getPhrase('nonEducational'),\n getPhrase('poorQuality'),\n getPhrase('offensive'),\n getPhrase('copyright'),\n getPhrase('ageAppropriate'),\n getPhrase('audio'),\n getPhrase('other')\n ];\n }\n\n return (\n <div className='mb-3'>\n <label className='form-label'>\n <Text namespace={namespace} phrase='flagRemovalReasonLabel' />\n <span className='text-danger'>*</span>\n </label>\n {flagRemovalRadioOptions().map((option, index) => (\n <Form.Check\n type='radio'\n key={index}\n label={option}\n name={option}\n id={`flag-${index}`}\n onChange={() => onSelectOption(option)}\n checked={formikProps.values.suggestion === option}\n className='mb-2'\n />\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { ButtonGroup } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { Rating } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.suggestEditForm';\n\ninterface SuggestEditRatingSelectorProps {\n ratings: Rating[];\n metadataValue: string;\n}\n\nexport function SuggestEditRatingSelector(props: SuggestEditRatingSelectorProps) {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ selectedRating, setSelectedRating ] = React.useState<Rating>();\n const [ isRatingInvalid, setIsRatingInvalid ] = React.useState<boolean>(false);\n \n function onRatingSelect(rating: Rating) {\n const isRatingInvalid = formikProps?.values.property && props.metadataValue === rating.name;\n formikProps.setFieldValue('suggestion', !isRatingInvalid ? rating.name : '');\n setSelectedRating(rating);\n setIsRatingInvalid(isRatingInvalid);\n }\n\n return (\n <div className='form-group'>\n <label className='form-label'><Text namespace={namespace} phrase='suggestLabel' /></label>\n <div aria-describedby='suggestEditRatingError'>\n <ButtonGroup>\n {props.ratings.map(rating => (\n <DivButton key={rating.id} onClick={() => onRatingSelect(rating)} className={`btn ${rating.id === selectedRating?.id ? 'btn-dark' : 'btn-outline-dark'}`}>\n {rating.code}\n </DivButton>\n ))}\n </ButtonGroup>\n </div>\n {isRatingInvalid && <FormFeedback name='suggestEditRating'><Text namespace={namespace} phrase='ratingError' /></FormFeedback>}\n </div>\n );\n}\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.suggestEditValidation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditValidation() {\n return object().shape({\n property: string().required((getPhrase('metadata'))),\n reason: string().when('property', {\n is: propertyValue => propertyValue === 'FlagRemoval',\n then: string().notRequired(),\n otherwise: string().required(getPhrase('reason'))\n }),\n suggestion: string().required(getPhrase('suggestion')),\n currentValue: string()\n });\n}\n","export enum MetadataType {\n VideoTitle = 'video title',\n Description = 'description',\n Rating = 'rating',\n SeriesTitle = 'series title',\n Season = 'season number',\n EpisodeNumber = 'episode number',\n BroadcastDate = 'broadcast date',\n Channel = 'channel',\n ProductionYear = 'production year',\n Distributors = 'distributors',\n ProductionCompanies = 'production companies',\n Directors = 'directors',\n Producers = 'producers',\n FlagRemoval = 'flag for removal',\n Other = 'other'\n}\n\nexport type MetadataTypeKey = keyof typeof MetadataType;\n\nexport type MetadataTypeMap = {\n [K in MetadataTypeKey]: {\n name: MetadataType,\n property?: string,\n collection?: boolean\n };\n};\n\nexport const MetadataTypes: MetadataTypeMap = {\n VideoTitle: {\n name: MetadataType.VideoTitle,\n property: 'name'\n },\n Description: {\n name: MetadataType.Description,\n property: 'description'\n },\n Rating: {\n name: MetadataType.Rating,\n property: 'rating.name'\n },\n SeriesTitle: {\n name: MetadataType.SeriesTitle,\n property: 'series.name'\n },\n Season: {\n name: MetadataType.Season,\n property: 'season.number'\n },\n EpisodeNumber: {\n name: MetadataType.EpisodeNumber,\n property: 'episodeNumber'\n },\n BroadcastDate: {\n name: MetadataType.BroadcastDate,\n property: 'dateBroadcast'\n },\n Channel: {\n name: MetadataType.Channel,\n property: 'channel.name'\n },\n ProductionYear: {\n name: MetadataType.ProductionYear,\n property: 'productionYear'\n },\n Distributors: {\n name: MetadataType.Distributors,\n property: 'distributors',\n collection: true\n },\n ProductionCompanies: {\n name: MetadataType.ProductionCompanies,\n property: 'productionCompanies',\n collection: true\n },\n Directors: {\n name: MetadataType.Directors,\n property: 'directors',\n collection: true\n },\n Producers: {\n name: MetadataType.Producers,\n property: 'producers',\n collection: true\n },\n FlagRemoval: {\n name: MetadataType.FlagRemoval\n },\n Other: {\n name: MetadataType.Other\n }\n};\n","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\nimport get from 'lodash/get';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { SuggestEditFlagRemoval } from 'libs/shared/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval';\nimport { SuggestEditRatingSelector } from 'libs/shared/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { SuggestEditValidation } from './validation/SuggestEditValidation';\nimport { MetadataTypeKey, MetadataTypes } from './SuggestEditMetadataTypes';\n\nconst namespace = 'shared.suggestEditForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst INITIAL_VALUES = {\n property: '',\n suggestion: '',\n reason: '',\n currentValue: ''\n};\n\ninterface SuggestEditFormProps {\n video: Video;\n ratings: Rating[];\n onClickSubmit: (\n data: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) => void;\n closePopup: () => void;\n}\n\nfunction SuggestEditForm(props: SuggestEditFormProps) {\n const ratings = props.ratings?.filter(rating => rating.code);\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ metadataValue, setMetadataValue ] = React.useState<string>();\n\n const metadata = formikProps?.values.property as MetadataTypeKey;\n\n React.useEffect(() => {\n const metadataValue = getMetadataValue();\n formikProps.setValues({\n property: metadata,\n reason: '',\n suggestion: '',\n currentValue: metadataValue || ''\n });\n formikProps.setTouched({});\n setMetadataValue(metadataValue);\n }, [metadata]);\n\n function getMetadataValue(): string {\n const metadataType = MetadataTypes[metadata];\n\n if (!metadataType || !metadataType.property)\n return null;\n\n let currentValue = get(props.video, metadataType.property);\n\n if (!currentValue || (metadataType.collection && !currentValue.data.length))\n return getPhrase('none');\n\n if (metadataType.collection) {\n currentValue = (currentValue.data as BaseObject[]).map(obj => obj.name).join(', ');\n }\n\n switch (metadata) {\n case 'BroadcastDate':\n return DateHelper.format(currentValue, 'D MMMM YYYY');\n default:\n return currentValue;\n }\n }\n\n return (\n <Form>\n <FormField\n as='select'\n label={getPhrase('metadataLabel')}\n id='property'\n name='property'\n value={metadata}\n className='text-capitalize'\n showRequiredStar\n >\n <option value=''>{getPhrase('metadataPlaceholder')}</option>\n {Object.keys(MetadataTypes).map((metadata, index) => (\n <option key={index} value={metadata}>\n {MetadataTypes[metadata as keyof typeof MetadataTypes].name}\n </option>\n ))}\n </FormField>\n\n {metadata &&\n <>\n {metadataValue && (\n <>\n <p className='fw-semibold mb-0'>\n <Text namespace={namespace} phrase='currentValueLabel' /> <span>{MetadataTypes[metadata as MetadataTypeKey]?.name}</span>\n </p>\n <p>{metadataValue}</p>\n </>\n )}\n\n {metadata === 'Rating' && <SuggestEditRatingSelector ratings={ratings} metadataValue={metadataValue} />}\n {metadata === 'FlagRemoval' && <SuggestEditFlagRemoval />}\n {metadata !== 'Rating' && metadata !== 'FlagRemoval' &&\n <FormField\n label={getPhrase('suggestLabel')}\n placeholder={getPhrase('suggestPlaceholder')}\n type='text'\n id='suggestion'\n name='suggestion'\n value={formikProps?.values.suggestion}\n showRequiredStar\n />\n }\n\n {\n metadata === 'FlagRemoval' ? (\n <FormField\n label={getPhrase('flagRemovalCommentsLabel')}\n placeholder={getPhrase('flagRemovalCommentsPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n />\n ) : (\n <FormField\n label={getPhrase('reasonLabel')}\n placeholder={getPhrase('reasonPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n showRequiredStar\n />\n )\n }\n </>\n }\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('cancel')}\n onClick={props.closePopup}\n variant='link'\n />\n <FormButtons variant='dark' submitText={getPhrase('submit')} />\n </PopupButtons>\n </Form>\n );\n}\n\nexport function SuggestEditFormWrapper(props: SuggestEditFormProps) {\n return (\n <FormWrapper<SuggestEditModel>\n initialValues={INITIAL_VALUES}\n validationSchema={SuggestEditValidation()}\n onSubmit={props.onClickSubmit}\n >\n <SuggestEditForm {...props} />\n </FormWrapper>\n );\n}\n","\nimport React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SuggestEditFormWrapper } from 'libs/shared/components/suggest-edit-form/SuggestEditForm';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { Config, CurrentUser, PopupViewProps, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\nconst namespace = 'exchange.suggestEdit';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSuggestEditProps extends PopupViewProps {\n videoId: string;\n}\n\nexport function ExchangeSuggestEditView(props: ExchangeSuggestEditProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.videoId, false);\n\n async function onClickSubmit(\n values: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) {\n try {\n await fetchAsync(ExchangeRequests.suggestEdit(video.data.id, values));\n alerts.success(getPhrase('success'));\n closePopup();\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch (xhr) {\n handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError'));\n } finally {\n onDone();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n const hasLoaded = (\n config.hasCompleted &&\n currentUser.hasCompleted &&\n video.hasCompleted &&\n ratings.hasCompleted\n );\n\n if (!hasLoaded) {\n return <></>;\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={loading}\n >\n <p><Text namespace={namespace} phrase='description' /></p>\n\n <SuggestEditFormWrapper\n video={video.data}\n ratings={ratings.data}\n closePopup={closePopup}\n onClickSubmit={onClickSubmit}\n />\n </Popup>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{D as e,_t as t,fn as n,ht as r}from"./B1i9atik.chunk.js";import{k as i}from"./app-lnmpv5W4.js";import{t as a}from"./D-ivDlyL.chunk.js";var o=n(e());function s(e,n){o.useEffect(()=>{e.hasCompleted&&(e.data||(e.hasError&&a(e.statusCode),n?r.throw(new i):a(t.BadRequest)))},[e.hasCompleted,e.data])}export{s as t};
2
- //# sourceMappingURL=DGRBUJ6T2.chunk.js.map
1
+ import{D as e,_t as t,fn as n,ht as r}from"./B1i9atik.chunk.js";import{k as i}from"./app-fNhmX-xT.js";import{t as a}from"./C-jHArp-.chunk.js";var o=n(e());function s(e,n){o.useEffect(()=>{e.hasCompleted&&(e.data||(e.hasError&&a(e.statusCode),n?r.throw(new i):a(t.BadRequest)))},[e.hasCompleted,e.data])}export{s as t};
2
+ //# sourceMappingURL=DjUmgrOk2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DGRBUJ6T2.chunk.js","names":[],"sources":["../../src/apps/tv/hooks/useHandleRegionError.ts"],"sourcesContent":["import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nexport function useHandleRegionError(response: Flight.Response<TvRegion>, popup?: boolean): void {\n React.useEffect(() => {\n if (!response.hasCompleted)\n return;\n\n if (response.data)\n return;\n\n if (response.hasError) {\n handleHttpError(response.statusCode);\n }\n\n if (popup)\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n else {\n handleHttpError(HttpStatus.BadRequest);\n }\n }, [ response.hasCompleted, response.data ]);\n}\n"],"mappings":"2JAWA,SAAgB,EAAqB,EAAqC,EAAuB,CAC/F,EAAM,cAAgB,CACf,EAAS,eAGV,EAAS,OAGT,EAAS,UACX,EAAgB,EAAS,WAAW,CAGlC,EACF,EAAiB,MAAM,IAAI,EAAyB,CAEpD,EAAgB,EAAW,WAAW,IAEvC,CAAE,EAAS,aAAc,EAAS,KAAM,CAAC"}
1
+ {"version":3,"file":"DjUmgrOk2.chunk.js","names":[],"sources":["../../src/apps/tv/hooks/useHandleRegionError.ts"],"sourcesContent":["import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\nexport function useHandleRegionError(response: Flight.Response<TvRegion>, popup?: boolean): void {\n React.useEffect(() => {\n if (!response.hasCompleted)\n return;\n\n if (response.data)\n return;\n\n if (response.hasError) {\n handleHttpError(response.statusCode);\n }\n\n if (popup)\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n else {\n handleHttpError(HttpStatus.BadRequest);\n }\n }, [ response.hasCompleted, response.data ]);\n}\n"],"mappings":"2JAWA,SAAgB,EAAqB,EAAqC,EAAuB,CAC/F,EAAM,cAAgB,CACf,EAAS,eAGV,EAAS,OAGT,EAAS,UACX,EAAgB,EAAS,WAAW,CAGlC,EACF,EAAiB,MAAM,IAAI,EAAyB,CAEpD,EAAgB,EAAW,WAAW,IAEvC,CAAE,EAAS,aAAc,EAAS,KAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ import{C as e,D as t,fn as n}from"./B1i9atik.chunk.js";import{n as r,t as i,y as a}from"./NpQVkKE2.chunk.js";import{n as o}from"./CBwR65WF.chunk.js";import{t as s}from"./DIsOuUSO2.chunk.js";import{t as c}from"./Bj6lJgAv2.chunk.js";var l={},u=n(t()),d=e();function f(e){let[t,n]=u.useState(e.message);return u.useEffect(()=>{async function r(){let r=await o.parse(e.message,{focusableLinks:!0});t!==r&&n(r)}r()},[e.message]),t?(0,d.jsxs)(`div`,{className:a(`rounded-1 p-2 d-flex align-items-center justify-content-start gap-2`,`bg-light-red`,e.className),children:[(0,d.jsx)(i,{size:r.Medium,svg:s,className:`svg-container text-red`}),(0,d.jsx)(`p`,{className:`${l.container}`,dangerouslySetInnerHTML:{__html:t}})]}):(0,d.jsx)(d.Fragment,{})}function p(e){return(0,d.jsxs)(d.Fragment,{children:[e.message&&(0,d.jsx)(f,{className:`mb-3`,message:e.message}),(0,d.jsx)(c,{region:e.currentRegion,query:e.query})]})}export{p as t};
2
+ //# sourceMappingURL=DjdW7gMz.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DjdW7gMz.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/tv-banner/tv-banner.module.scss","../../../../libs/shared/src/components/tv-banner/TvBanner.tsx","../../src/apps/tv/components/tv-header/TvHeader.tsx"],"sourcesContent":[":local {\n p {\n margin-bottom: 0;\n }\n}","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WarningOutlineSvg } from 'libs/shared/images/svg/status/WarningOutlineSvg';\nimport { TopicFaqHelper } from 'libs/shared/utils/topic-faq-helper/TopicFaqHelper';\n\nimport styles from './tv-banner.module.scss';\n\ninterface TvBannerProps {\n className?: string;\n message: string;\n}\n\nexport function TvBanner(props: TvBannerProps) {\n const [ markdown, setMarkdown ] = React.useState(props.message);\n\n React.useEffect(() => {\n async function update() {\n const newMarkdown = await TopicFaqHelper.parse(props.message, { focusableLinks: true });\n if (markdown === newMarkdown) return;\n setMarkdown(newMarkdown);\n }\n\n update();\n }, [props.message]);\n\n if (!markdown) return <></>;\n\n return (\n <div\n className={classNames(`rounded-1 p-2 d-flex align-items-center justify-content-start gap-2`, 'bg-light-red', props.className)}\n >\n <SvgContainer size={SvgContainerSize.Medium} svg={WarningOutlineSvg} className='svg-container text-red'/>\n <p\n className={`${styles.container}`}\n dangerouslySetInnerHTML={{ __html: markdown }}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { TvBanner } from 'libs/shared/components/tv-banner/TvBanner';\n\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvRegion } from 'apps/tv/interfaces/models/TvRegion';\n\ninterface TvHeaderProps {\n currentRegion: TvRegion;\n query?: string;\n message?: string;\n}\n\nexport function TvHeader(props: TvHeaderProps) {\n return (\n <>\n {props.message && <TvBanner className='mb-3' message={props.message}/>}\n <TvSearchBar region={props.currentRegion} query={props.query}/>\n </>\n );\n}\n"],"mappings":"+PCeA,SAAgB,EAAS,EAAsB,CAC7C,GAAM,CAAE,EAAU,GAAA,EAAsB,SAAS,EAAM,QAAQ,CAc/D,OAZA,EAAM,cAAgB,CACpB,eAAe,GAAS,CACtB,IAAM,EAAc,MAAM,EAAe,MAAM,EAAM,QAAS,CAAE,eAAgB,GAAM,CAAC,CACnF,IAAa,GACjB,EAAY,EAAY,CAG1B,GAAQ,EACP,CAAC,EAAM,QAAQ,CAAC,CAEd,GAGH,EAAA,EAAA,MAAC,MAAD,CACE,UAAW,EAAW,sEAAuE,eAAgB,EAAM,UAAU,UAD/H,EAGE,EAAA,EAAA,KAAC,EAAD,CAAc,KAAM,EAAiB,OAAQ,IAAK,EAAmB,UAAU,yBAA0B,CAAA,EACzG,EAAA,EAAA,KAAC,IAAD,CACE,UAAW,GAAG,EAAO,YACrB,wBAAyB,CAAE,OAAQ,EAAA,CACnC,CAAA,CAAA,IAVgB,EAAA,EAAA,KAAA,EAAA,SAAA,EAAK,CAAA,CCf7B,SAAgB,EAAS,EAAsB,CAC7C,OACE,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,CACG,EAAM,UAAW,EAAA,EAAA,KAAC,EAAD,CAAU,UAAU,OAAO,QAAS,EAAM,QAAU,CAAA,EACtE,EAAA,EAAA,KAAC,EAAD,CAAa,OAAQ,EAAM,cAAe,MAAO,EAAM,MAAQ,CAAA,CAC9D,CAAA,CAAA"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n,u as r}from"./TJBzqR6k.chunk.js";import{t as i}from"./CzvVp9iC.chunk.js";import{i as a,o,s}from"./CYFRcx63.chunk.js";import{t as c}from"./DgSFdSfV.chunk.js";import{t as l}from"./BEyI0jsC2.chunk.js";import{h as u,m as d,t as f}from"./DRZvc_n5.chunk.js";import{t as p}from"./CCvXN2-C.chunk.js";import{t as m}from"./D-ivDlyL.chunk.js";import{t as h}from"./CGLWqKaa.chunk.js";import{t as g}from"./RNP3-R8c.chunk.js";import{t as _}from"./Dsmr6Wly.chunk.js";import{r as v}from"./DUCTNoXj.chunk.js";t();var y=e(),b=i.encloseNamespace(`exchange.mostRecent`);function x(){let e=r(),t=l(),i=n(p.exchange()),x=h(`video-list`),{commonVideoProps:S}=d();c({title:b(`title`)});let{items:C,hasMore:w,isFetching:T,nextCursor:E}=s(i.data&&D,O,k);function D(e){return p.mostRecentVideos(i.data.id,e)}function O(t){return e(D(t))}function k(e,n){if(e===1)return m(n);t.error(b(`error`))}return(0,y.jsxs)(u.Provider,{value:x,children:[(0,y.jsxs)(`div`,{className:`mb-2`,children:[(0,y.jsx)(g,{}),(0,y.jsx)(_,{active:`most-recent`})]}),C?(0,y.jsx)(f,{videos:C,getVideoAppLink:v,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:S}):(0,y.jsx)(`div`,{className:`mx-n2`,children:(0,y.jsx)(a,{})}),(w||T)&&(0,y.jsx)(o,{isFetching:T,fetchNext:O,nextCursor:E})]})}export{x as ExchangeMostRecentView};
2
- //# sourceMappingURL=CAOBwDbU.chunk.js.map
1
+ import{C as e,D as t}from"./B1i9atik.chunk.js";import{l as n,u as r}from"./TJBzqR6k.chunk.js";import{t as i}from"./CzvVp9iC.chunk.js";import{i as a,o,s}from"./B3S7B746.chunk.js";import{t as c}from"./CBwR65WF.chunk.js";import{t as l}from"./Bswd1QrZ2.chunk.js";import{h as u,m as d,t as f}from"./DT626M1P.chunk.js";import{t as p}from"./DAQxdC_x.chunk.js";import{t as m}from"./C-jHArp-.chunk.js";import{t as h}from"./DfWNECxe.chunk.js";import{t as g}from"./RNP3-R8c.chunk.js";import{t as _}from"./gsffdqjU.chunk.js";import{r as v}from"./CiEI8sTG.chunk.js";t();var y=e(),b=i.encloseNamespace(`exchange.mostRecent`);function x(){let e=r(),t=l(),i=n(p.exchange()),x=h(`video-list`),{commonVideoProps:S}=d();c({title:b(`title`)});let{items:C,hasMore:w,isFetching:T,nextCursor:E}=s(i.data&&D,O,k);function D(e){return p.mostRecentVideos(i.data.id,e)}function O(t){return e(D(t))}function k(e,n){if(e===1)return m(n);t.error(b(`error`))}return(0,y.jsxs)(u.Provider,{value:x,children:[(0,y.jsxs)(`div`,{className:`mb-2`,children:[(0,y.jsx)(g,{}),(0,y.jsx)(_,{active:`most-recent`})]}),C?(0,y.jsx)(f,{videos:C,getVideoAppLink:v,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:S}):(0,y.jsx)(`div`,{className:`mx-n2`,children:(0,y.jsx)(a,{})}),(w||T)&&(0,y.jsx)(o,{isFetching:T,fetchNext:O,nextCursor:E})]})}export{x as ExchangeMostRecentView};
2
+ //# sourceMappingURL=DksIM59B.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CAOBwDbU.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-most-recent/ExchangeMostRecentView.tsx"],"sourcesContent":["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/react/index';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Library, Video } from 'libs/shared/interfaces';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nconst namespace = 'exchange.mostRecent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ExchangeMostRecentView() {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n \n const videoActions = useGetExchangeActions('video-list');\n\n const { commonVideoProps } = useCommonVideoProps();\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(exchange.data && getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.mostRecentVideos(exchange.data.id, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='mb-2'>\n <ExchangeSearchBar />\n <ExchangeTabs active='most-recent' />\n </div>\n\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />\n ) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"ujBAwBM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,GAAyB,CACvC,IAAM,EAAQ,GAAoB,CAC5B,EAAS,GAAW,CAEpB,EAAW,EAA8B,EAAiB,UAAU,CAAC,CAErE,EAAe,EAAsB,aAAa,CAElD,CAAE,oBAAqB,GAAqB,CAElD,EAAmB,CAAE,MAAO,EAAU,QAAQ,CAAE,CAAC,CAEjD,GAAM,CACJ,MAAO,EACP,UACA,aACA,cACE,EAAuB,EAAS,MAAQ,EAAkB,EAAiB,EAAQ,CAEvF,SAAS,EAAiB,EAAiC,CACzD,OAAO,EAAiB,iBAAiB,EAAS,KAAK,GAAI,EAAO,CAGpE,SAAS,EAAgB,EAAuB,CAC9C,OAAO,EAAM,EAAiB,EAAO,CAAC,CAGxC,SAAS,EAAQ,EAAoB,EAA8B,CACjE,GAAI,IAAe,EACjB,OAAO,EAAgB,EAAW,CAEpC,EAAO,MAAM,EAAU,QAAQ,CAAC,CAGlC,OACE,EAAA,EAAA,MAAC,EAAoB,SAArB,CAA8B,MAAO,WAArC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,EACrB,EAAA,EAAA,KAAC,EAAD,CAAc,OAAO,cAAgB,CAAA,CACjC,GAEL,GACC,EAAA,EAAA,KAAC,EAAD,CACU,SACS,kBACjB,sBAAuB,KACvB,+BAAkC,KAClC,mBAAsB,GACtB,kBAAA,GACkB,mBAClB,CAAA,EAEF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,EAGN,GAAW,KACX,EAAA,EAAA,KAAC,EAAD,CACc,aACZ,UAAW,EACC,aACZ,CAAA,CAEyB"}
1
+ {"version":3,"file":"DksIM59B.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-most-recent/ExchangeMostRecentView.tsx"],"sourcesContent":["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/react/index';\n\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Library, Video } from 'libs/shared/interfaces';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\n\nconst namespace = 'exchange.mostRecent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function ExchangeMostRecentView() {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n \n const videoActions = useGetExchangeActions('video-list');\n\n const { commonVideoProps } = useCommonVideoProps();\n\n useSetPageMetadata({ title: getPhrase('title') });\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(exchange.data && getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.mostRecentVideos(exchange.data.id, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='mb-2'>\n <ExchangeSearchBar />\n <ExchangeTabs active='most-recent' />\n </div>\n\n {videos ? (\n <VideoList\n videos={videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={commonVideoProps}\n />\n ) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(hasMore || isFetching) && (\n <InfiniteScrollFooter\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n />\n )}\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"ujBAwBM,EAAY,EAAgB,iBADhB,sBAC2C,CAE7D,SAAgB,GAAyB,CACvC,IAAM,EAAQ,GAAoB,CAC5B,EAAS,GAAW,CAEpB,EAAW,EAA8B,EAAiB,UAAU,CAAC,CAErE,EAAe,EAAsB,aAAa,CAElD,CAAE,oBAAqB,GAAqB,CAElD,EAAmB,CAAE,MAAO,EAAU,QAAQ,CAAE,CAAC,CAEjD,GAAM,CACJ,MAAO,EACP,UACA,aACA,cACE,EAAuB,EAAS,MAAQ,EAAkB,EAAiB,EAAQ,CAEvF,SAAS,EAAiB,EAAiC,CACzD,OAAO,EAAiB,iBAAiB,EAAS,KAAK,GAAI,EAAO,CAGpE,SAAS,EAAgB,EAAuB,CAC9C,OAAO,EAAM,EAAiB,EAAO,CAAC,CAGxC,SAAS,EAAQ,EAAoB,EAA8B,CACjE,GAAI,IAAe,EACjB,OAAO,EAAgB,EAAW,CAEpC,EAAO,MAAM,EAAU,QAAQ,CAAC,CAGlC,OACE,EAAA,EAAA,MAAC,EAAoB,SAArB,CAA8B,MAAO,WAArC,EACE,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,gBAAf,EACE,EAAA,EAAA,KAAC,EAAD,EAAqB,CAAA,EACrB,EAAA,EAAA,KAAC,EAAD,CAAc,OAAO,cAAgB,CAAA,CACjC,GAEL,GACC,EAAA,EAAA,KAAC,EAAD,CACU,SACS,kBACjB,sBAAuB,KACvB,+BAAkC,KAClC,mBAAsB,GACtB,kBAAA,GACkB,mBAClB,CAAA,EAEF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,kBACb,EAAA,EAAA,KAAC,EAAD,EAAoB,CAAA,CAChB,CAAA,EAGN,GAAW,KACX,EAAA,EAAA,KAAC,EAAD,CACc,aACZ,UAAW,EACC,aACZ,CAAA,CAEyB"}