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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/.vite/manifest.json +531 -531
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/Crtlho0p.chunk.css +8 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{cIPkkuhG.chunk.js → 1iKkdpYv.chunk.js} +2 -2
  6. package/dist/scripts/{cIPkkuhG.chunk.js.map → 1iKkdpYv.chunk.js.map} +1 -1
  7. package/dist/scripts/{uPFXIvcK2.chunk.js → 8pXw5z942.chunk.js} +2 -2
  8. package/dist/scripts/{uPFXIvcK2.chunk.js.map → 8pXw5z942.chunk.js.map} +1 -1
  9. package/dist/scripts/{DVVx1aiS2.chunk.js → B7m3cCi42.chunk.js} +2 -2
  10. package/dist/scripts/{DVVx1aiS2.chunk.js.map → B7m3cCi42.chunk.js.map} +1 -1
  11. package/dist/scripts/{DBJfKQKx.chunk.js → BAN6QE-X.chunk.js} +2 -2
  12. package/dist/scripts/{DBJfKQKx.chunk.js.map → BAN6QE-X.chunk.js.map} +1 -1
  13. package/dist/scripts/{YGLkoFLc.chunk.js → BHbt9wzx.chunk.js} +2 -2
  14. package/dist/scripts/{YGLkoFLc.chunk.js.map → BHbt9wzx.chunk.js.map} +1 -1
  15. package/dist/scripts/{DeevL6eQ.chunk.js → BINz0dmF.chunk.js} +2 -2
  16. package/dist/scripts/{DeevL6eQ.chunk.js.map → BINz0dmF.chunk.js.map} +1 -1
  17. package/dist/scripts/{Dg-h5qnR.chunk.js → BPYdRA7H.chunk.js} +2 -2
  18. package/dist/scripts/{Dg-h5qnR.chunk.js.map → BPYdRA7H.chunk.js.map} +1 -1
  19. package/dist/scripts/{CkH6ird3.chunk.js → BS8sYAAh.chunk.js} +2 -2
  20. package/dist/scripts/{CkH6ird3.chunk.js.map → BS8sYAAh.chunk.js.map} +1 -1
  21. package/dist/scripts/{CKrB9r9w.chunk.js → BaSi1pig.chunk.js} +2 -2
  22. package/dist/scripts/{CKrB9r9w.chunk.js.map → BaSi1pig.chunk.js.map} +1 -1
  23. package/dist/scripts/{BRQhDr-02.chunk.js → BbrEvwAi2.chunk.js} +2 -2
  24. package/dist/scripts/{BRQhDr-02.chunk.js.map → BbrEvwAi2.chunk.js.map} +1 -1
  25. package/dist/scripts/{Ct8ETEOn2.chunk.js → Bi8itw8v2.chunk.js} +2 -2
  26. package/dist/scripts/{Ct8ETEOn2.chunk.js.map → Bi8itw8v2.chunk.js.map} +1 -1
  27. package/dist/scripts/{Co_6cSBX2.chunk.js → BlOKamx72.chunk.js} +2 -2
  28. package/dist/scripts/{Co_6cSBX2.chunk.js.map → BlOKamx72.chunk.js.map} +1 -1
  29. package/dist/scripts/{B0hNKKDw2.chunk.js → BobZ5p_m2.chunk.js} +2 -2
  30. package/dist/scripts/{B0hNKKDw2.chunk.js.map → BobZ5p_m2.chunk.js.map} +1 -1
  31. package/dist/scripts/{Nx0q4bij.chunk.js → BsLLiG1-.chunk.js} +2 -2
  32. package/dist/scripts/{Nx0q4bij.chunk.js.map → BsLLiG1-.chunk.js.map} +1 -1
  33. package/dist/scripts/{D0H6Hjd-2.chunk.js → BtdygabL2.chunk.js} +2 -2
  34. package/dist/scripts/{D0H6Hjd-2.chunk.js.map → BtdygabL2.chunk.js.map} +1 -1
  35. package/dist/scripts/{UjMbny4R.chunk.js → Bue5_bLM.chunk.js} +2 -2
  36. package/dist/scripts/{UjMbny4R.chunk.js.map → Bue5_bLM.chunk.js.map} +1 -1
  37. package/dist/scripts/{DBKlntFN2.chunk.js → BvamDkjt2.chunk.js} +2 -2
  38. package/dist/scripts/{DBKlntFN2.chunk.js.map → BvamDkjt2.chunk.js.map} +1 -1
  39. package/dist/scripts/{NInuYe7b2.chunk.js → BzJLc19T2.chunk.js} +2 -2
  40. package/dist/scripts/{NInuYe7b2.chunk.js.map → BzJLc19T2.chunk.js.map} +1 -1
  41. package/dist/scripts/{DyRGf1o8.chunk.js → C03mMZ4k.chunk.js} +2 -2
  42. package/dist/scripts/{DyRGf1o8.chunk.js.map → C03mMZ4k.chunk.js.map} +1 -1
  43. package/dist/scripts/{BV2vTX2L.chunk.js → C2AXrtJf.chunk.js} +2 -2
  44. package/dist/scripts/{BV2vTX2L.chunk.js.map → C2AXrtJf.chunk.js.map} +1 -1
  45. package/dist/scripts/{Fu0bLEzl2.chunk.js → C3Hw2TpW2.chunk.js} +2 -2
  46. package/dist/scripts/{Fu0bLEzl2.chunk.js.map → C3Hw2TpW2.chunk.js.map} +1 -1
  47. package/dist/scripts/{DoTtsl0X.chunk.js → CKL4ViMC.chunk.js} +2 -2
  48. package/dist/scripts/{DoTtsl0X.chunk.js.map → CKL4ViMC.chunk.js.map} +1 -1
  49. package/dist/scripts/{DtYC8Udi2.chunk.js → CKZJ2qae2.chunk.js} +2 -2
  50. package/dist/scripts/{DtYC8Udi2.chunk.js.map → CKZJ2qae2.chunk.js.map} +1 -1
  51. package/dist/scripts/{CyAM5o2e.chunk.js → CK_CN_mA.chunk.js} +2 -2
  52. package/dist/scripts/{CyAM5o2e.chunk.js.map → CK_CN_mA.chunk.js.map} +1 -1
  53. package/dist/scripts/{B6mSouu5.chunk.js → CL9SkODG.chunk.js} +2 -2
  54. package/dist/scripts/{B6mSouu5.chunk.js.map → CL9SkODG.chunk.js.map} +1 -1
  55. package/dist/scripts/{BHKm8WQq2.chunk.js → Ca_-2JTE2.chunk.js} +2 -2
  56. package/dist/scripts/{BHKm8WQq2.chunk.js.map → Ca_-2JTE2.chunk.js.map} +1 -1
  57. package/dist/scripts/{C7OCN_w_.chunk.js → CfNYdg0m.chunk.js} +2 -2
  58. package/dist/scripts/{C7OCN_w_.chunk.js.map → CfNYdg0m.chunk.js.map} +1 -1
  59. package/dist/scripts/{CUdaR862.chunk.js → Ct_4zyE3.chunk.js} +2 -2
  60. package/dist/scripts/{CUdaR862.chunk.js.map → Ct_4zyE3.chunk.js.map} +1 -1
  61. package/dist/scripts/{RiPZGw_q2.chunk.js → CxUrOnxW2.chunk.js} +2 -2
  62. package/dist/scripts/{RiPZGw_q2.chunk.js.map → CxUrOnxW2.chunk.js.map} +1 -1
  63. package/dist/scripts/{BJxTZJOX.chunk.js → DFXpg6rF.chunk.js} +2 -2
  64. package/dist/scripts/{BJxTZJOX.chunk.js.map → DFXpg6rF.chunk.js.map} +1 -1
  65. package/dist/scripts/{CKNdXwxe2.chunk.js → DG6L7zHU2.chunk.js} +2 -2
  66. package/dist/scripts/{CKNdXwxe2.chunk.js.map → DG6L7zHU2.chunk.js.map} +1 -1
  67. package/dist/scripts/{CvQQNf_J2.chunk.js → DKz4jhnr2.chunk.js} +2 -2
  68. package/dist/scripts/{CvQQNf_J2.chunk.js.map → DKz4jhnr2.chunk.js.map} +1 -1
  69. package/dist/scripts/{BOvQpQ21.chunk.js → DSZkTUVU.chunk.js} +2 -2
  70. package/dist/scripts/{BOvQpQ21.chunk.js.map → DSZkTUVU.chunk.js.map} +1 -1
  71. package/dist/scripts/{D5qMnGHT2.chunk.js → D_k-Kl3-2.chunk.js} +2 -2
  72. package/dist/scripts/{D5qMnGHT2.chunk.js.map → D_k-Kl3-2.chunk.js.map} +1 -1
  73. package/dist/scripts/{Dp0gbhZx2.chunk.js → DfOgl-0-2.chunk.js} +2 -2
  74. package/dist/scripts/{Dp0gbhZx2.chunk.js.map → DfOgl-0-2.chunk.js.map} +1 -1
  75. package/dist/scripts/{CeCXhgoJ.chunk.js → DkB0qBxI.chunk.js} +2 -2
  76. package/dist/scripts/{CeCXhgoJ.chunk.js.map → DkB0qBxI.chunk.js.map} +1 -1
  77. package/dist/scripts/{CeHHO1Hv.chunk.js → DmVXt6_V.chunk.js} +2 -2
  78. package/dist/scripts/{CeHHO1Hv.chunk.js.map → DmVXt6_V.chunk.js.map} +1 -1
  79. package/dist/scripts/{aDegERgV2.chunk.js → DqM6hYTJ2.chunk.js} +2 -2
  80. package/dist/scripts/{aDegERgV2.chunk.js.map → DqM6hYTJ2.chunk.js.map} +1 -1
  81. package/dist/scripts/{BPgKK-d32.chunk.js → DsHiClyc2.chunk.js} +2 -2
  82. package/dist/scripts/{BPgKK-d32.chunk.js.map → DsHiClyc2.chunk.js.map} +1 -1
  83. package/dist/scripts/{D9zlZIWi2.chunk.js → DuPL-nK72.chunk.js} +2 -2
  84. package/dist/scripts/{D9zlZIWi2.chunk.js.map → DuPL-nK72.chunk.js.map} +1 -1
  85. package/dist/scripts/{ZSP3Vfha2.chunk.js → EIJf9JbR2.chunk.js} +2 -2
  86. package/dist/scripts/{ZSP3Vfha2.chunk.js.map → EIJf9JbR2.chunk.js.map} +1 -1
  87. package/dist/scripts/{CqNKzFA4.chunk.js → EO2xPuAQ.chunk.js} +2 -2
  88. package/dist/scripts/{CqNKzFA4.chunk.js.map → EO2xPuAQ.chunk.js.map} +1 -1
  89. package/dist/scripts/{o2htB_49.chunk.js → F1LOVRO_.chunk.js} +2 -2
  90. package/dist/scripts/{o2htB_49.chunk.js.map → F1LOVRO_.chunk.js.map} +1 -1
  91. package/dist/scripts/{BggsU83p2.chunk.js → G-hiM6b42.chunk.js} +2 -2
  92. package/dist/scripts/{BggsU83p2.chunk.js.map → G-hiM6b42.chunk.js.map} +1 -1
  93. package/dist/scripts/{B0VKYPiu.chunk.js → MYu2AEsL.chunk.js} +2 -2
  94. package/dist/scripts/{B0VKYPiu.chunk.js.map → MYu2AEsL.chunk.js.map} +1 -1
  95. package/dist/scripts/{B9Rb6IIb.chunk.js → NtrZI2Ef.chunk.js} +2 -2
  96. package/dist/scripts/{B9Rb6IIb.chunk.js.map → NtrZI2Ef.chunk.js.map} +1 -1
  97. package/dist/scripts/{CRHkMr9_2.chunk.js → OBYDGOgI2.chunk.js} +2 -2
  98. package/dist/scripts/{CRHkMr9_2.chunk.js.map → OBYDGOgI2.chunk.js.map} +1 -1
  99. package/dist/scripts/{zp5MUThO.chunk.js → Pixwk-h-.chunk.js} +2 -2
  100. package/dist/scripts/{zp5MUThO.chunk.js.map → Pixwk-h-.chunk.js.map} +1 -1
  101. package/dist/scripts/{Ds3cFntF2.chunk.js → SDRXIwM22.chunk.js} +3 -3
  102. package/dist/scripts/{Ds3cFntF2.chunk.js.map → SDRXIwM22.chunk.js.map} +1 -1
  103. package/dist/scripts/{C1u2qBZg2.chunk.js → U0UyGd9c2.chunk.js} +2 -2
  104. package/dist/scripts/{C1u2qBZg2.chunk.js.map → U0UyGd9c2.chunk.js.map} +1 -1
  105. package/dist/scripts/{CYUx40jk.chunk.js → amjwjus3.chunk.js} +2 -2
  106. package/dist/scripts/{CYUx40jk.chunk.js.map → amjwjus3.chunk.js.map} +1 -1
  107. package/dist/scripts/{app-DDrsm5nt.js → app-BGxmHvGl.js} +3 -3
  108. package/dist/scripts/{app-DDrsm5nt.js.map → app-BGxmHvGl.js.map} +1 -1
  109. package/dist/scripts/{CgGl8jzo.chunk.js → eUKFc6dK.chunk.js} +2 -2
  110. package/dist/scripts/{CgGl8jzo.chunk.js.map → eUKFc6dK.chunk.js.map} +1 -1
  111. package/dist/scripts/{CWsmm40y.chunk.js → l7UAnIb0.chunk.js} +2 -2
  112. package/dist/scripts/{CWsmm40y.chunk.js.map → l7UAnIb0.chunk.js.map} +1 -1
  113. package/dist/scripts/{BsSKrRku2.chunk.js → nMyWveQA2.chunk.js} +2 -2
  114. package/dist/scripts/{BsSKrRku2.chunk.js.map → nMyWveQA2.chunk.js.map} +1 -1
  115. package/dist/scripts/{CKUk2HqE.chunk.js → pOL5_XNC.chunk.js} +2 -2
  116. package/dist/scripts/{CKUk2HqE.chunk.js.map → pOL5_XNC.chunk.js.map} +1 -1
  117. package/dist/scripts/{eLmgigsW.chunk.js → sViLex0Q.chunk.js} +2 -2
  118. package/dist/scripts/{eLmgigsW.chunk.js.map → sViLex0Q.chunk.js.map} +1 -1
  119. package/dist/scripts/{Xs1Bv1h-.chunk.js → vvCGyl_q.chunk.js} +2 -2
  120. package/dist/scripts/{Xs1Bv1h-.chunk.js.map → vvCGyl_q.chunk.js.map} +1 -1
  121. package/dist/scripts/{BijIuzIs2.chunk.js → xEGWFFpD2.chunk.js} +2 -2
  122. package/dist/scripts/{BijIuzIs2.chunk.js.map → xEGWFFpD2.chunk.js.map} +1 -1
  123. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"CKrB9r9w.chunk.js","names":[],"sources":["../../src/apps/tv/interfaces/requests/RequestProgramRequest.ts","../../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":["export enum FulfillmentStatus {\n Unfulfilled = 0,\n CurrentlyBeingProcessed = 1,\n Fulfilled = 2\n}\n\nexport interface RequestProgramRequest {\n title: string;\n comments: string;\n regionCode: string;\n userId: string;\n customerId: string;\n channelId?: string;\n programDateTime?: string;\n closedCaptions?: boolean;\n}\n\nexport enum ProgramRequestType {\n BbcRes\n}\n\nexport interface RequestProgramUkRequest {\n title: string;\n comments: string;\n customerName: string;\n email: string;\n crmId: string;\n type: 0;\n username: string;\n}\n","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(hasChannels: boolean) {\n return hasChannels ?\n object().shape({\n channelId: string().required(getPhrase('channelRequired')),\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 object().shape({\n title: string().required(getPhrase('programRequired')),\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\n const minDate = DateHelper.format(DateHelper.add(new Date(), 4, 'days'), 'YYYY-MM-DD');\n const maxDate = DateHelper.format(DateHelper.add(minDate, 11, 'days'), 'YYYY-MM-DD');\n\n const regionInfo = getRegionInfo(props.instanceRegion);\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 {props.channels && (\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\n <p className='mt-n1'>\n <small><Text namespace={namespace} phrase={regionInfo.programGuidePhraseKey} /></small>\n </p>\n\n {props.channels && (\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 \n <FormField\n label={getPhrase(props.channels ? 'commentsLabel' : 'additionalInfoLabel')}\n placeholder={getPhrase(props.channels ? 'commentsPlaceholder' : 'additionalInfoPlaceholder')}\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 { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { CurrentUser, Customer, 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 { ProgramRequestType, RequestProgramRequest, RequestProgramUkRequest } 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\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 hasPayTvChannels = instanceRegion === InstanceRegion.AU;\n const isUK = instanceRegion === InstanceRegion.UK;\n const customer = Flight.useBasicFetch<Customer>(isUK && CustomerRequests.customer(currentUser.data.customerId));\n\n const channels = Flight.useBasicFetch<PayTvChannel[]>(\n hasPayTvChannels && 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 (hasPayTvChannels) {\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 | RequestProgramUkRequest {\n const { broadcastDate, broadcastTime, closedCaptions, ...requestData } = values;\n\n if (isUK) {\n return {\n title: requestData.title,\n comments: requestData.comments,\n crmId: customer.data.crmId,\n customerName: customer.data.name,\n email: currentUser.data.email,\n type: ProgramRequestType.BbcRes,\n username: currentUser.data.username\n };\n }\n\n if (hasPayTvChannels) {\n return {\n ...requestData,\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 return {\n ...requestData,\n regionCode: props.region,\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 const request = isUK ?\n TvRequests.requestProgramUk(requestData as RequestProgramUkRequest) :\n TvRequests.requestProgram(requestData as RequestProgramRequest);\n\n try {\n await fetchAsync(request);\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 = (currentUser.hasCompleted && ((hasPayTvChannels && channels.hasCompleted) || !hasPayTvChannels));\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(hasPayTvChannels)}\n onSubmit={onClickRequest}\n >\n <TvRequestProgramForm\n onClickCancel={onClickCancel}\n channels={hasPayTvChannels && channels.data}\n instanceRegion={instanceRegion}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BaSi1pig.chunk.js","names":[],"sources":["../../src/apps/tv/interfaces/requests/RequestProgramRequest.ts","../../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":["export enum FulfillmentStatus {\n Unfulfilled = 0,\n CurrentlyBeingProcessed = 1,\n Fulfilled = 2\n}\n\nexport interface RequestProgramRequest {\n title: string;\n comments: string;\n regionCode: string;\n userId: string;\n customerId: string;\n channelId?: string;\n programDateTime?: string;\n closedCaptions?: boolean;\n}\n\nexport enum ProgramRequestType {\n BbcRes\n}\n\nexport interface RequestProgramUkRequest {\n title: string;\n comments: string;\n customerName: string;\n email: string;\n crmId: string;\n type: 0;\n username: string;\n}\n","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(hasChannels: boolean) {\n return hasChannels ?\n object().shape({\n channelId: string().required(getPhrase('channelRequired')),\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 object().shape({\n title: string().required(getPhrase('programRequired')),\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\n const minDate = DateHelper.format(DateHelper.add(new Date(), 4, 'days'), 'YYYY-MM-DD');\n const maxDate = DateHelper.format(DateHelper.add(minDate, 11, 'days'), 'YYYY-MM-DD');\n\n const regionInfo = getRegionInfo(props.instanceRegion);\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 {props.channels && (\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\n <p className='mt-n1'>\n <small><Text namespace={namespace} phrase={regionInfo.programGuidePhraseKey} /></small>\n </p>\n\n {props.channels && (\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 \n <FormField\n label={getPhrase(props.channels ? 'commentsLabel' : 'additionalInfoLabel')}\n placeholder={getPhrase(props.channels ? 'commentsPlaceholder' : 'additionalInfoPlaceholder')}\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 { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { CurrentUser, Customer, 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 { ProgramRequestType, RequestProgramRequest, RequestProgramUkRequest } 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\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 hasPayTvChannels = instanceRegion === InstanceRegion.AU;\n const isUK = instanceRegion === InstanceRegion.UK;\n const customer = Flight.useBasicFetch<Customer>(isUK && CustomerRequests.customer(currentUser.data.customerId));\n\n const channels = Flight.useBasicFetch<PayTvChannel[]>(\n hasPayTvChannels && 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 (hasPayTvChannels) {\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 | RequestProgramUkRequest {\n const { broadcastDate, broadcastTime, closedCaptions, ...requestData } = values;\n\n if (isUK) {\n return {\n title: requestData.title,\n comments: requestData.comments,\n crmId: customer.data.crmId,\n customerName: customer.data.name,\n email: currentUser.data.email,\n type: ProgramRequestType.BbcRes,\n username: currentUser.data.username\n };\n }\n\n if (hasPayTvChannels) {\n return {\n ...requestData,\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 return {\n ...requestData,\n regionCode: props.region,\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 const request = isUK ?\n TvRequests.requestProgramUk(requestData as RequestProgramUkRequest) :\n TvRequests.requestProgram(requestData as RequestProgramRequest);\n\n try {\n await fetchAsync(request);\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 = (currentUser.hasCompleted && ((hasPayTvChannels && channels.hasCompleted) || !hasPayTvChannels));\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(hasPayTvChannels)}\n onSubmit={onClickRequest}\n >\n <TvRequestProgramForm\n onClickCancel={onClickCancel}\n channels={hasPayTvChannels && 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,mn as n,yt as r}from"./CnnBLBPY.chunk.js";import{g as i}from"./DW0w8_XN.chunk.js";import{l as a}from"./D8clSITt.chunk.js";import{n as o,t as s}from"./Dn3hwC-o.chunk.js";import{t as c}from"./BjaJoJzM.chunk.js";import{t as l}from"./xL848v0O.chunk.js";import{D as u,Z as d}from"./app-DDrsm5nt.js";import{t as f}from"./Bzw5oyg9.chunk.js";import{t as p}from"./CeHHO1Hv.chunk.js";import{t as m}from"./C7OCN_w_.chunk.js";import{t as h}from"./C1u2qBZg2.chunk.js";import{t as g}from"./BcJCL8cu2.chunk.js";import{t as _}from"./BdSdO6n62.chunk.js";import{t as v}from"./C6jF43q92.chunk.js";import{t as y}from"./uPFXIvcK2.chunk.js";import{n as b,r as x,t as S}from"./DdwVkiCn2.chunk.js";import{n as C,t as w}from"./CvQQNf_J2.chunk.js";import{n as T,t as E}from"./6124murE2.chunk.js";import{t as D}from"./Fu0bLEzl2.chunk.js";var O=n(t()),k={itemContainer:`_itemContainer_84hxn_1`,badgeWrapper:`_badgeWrapper_84hxn_7`,thumbnail:`_thumbnail_84hxn_12`},A=e();function j(e){function t(e,t){switch(e.programType){case S.Video:return{application:o.TV,action:s.Tv.PREVIEW,args:[t,e.id]};case S.Audio:return{application:o.TV,action:s.Tv.RADIO_DOWNLOAD,args:[t,e.id]}}}function n(t){let n=t.globalId.split(`-`).join(``);return`${e.previewUrl}/thumbnail/${n}.jpg`}return(0,A.jsx)(`div`,{className:`${k.itemContainer} rounded mx-4 px-2`,children:(0,A.jsxs)(i,{appLink:t(e.program,e.region),className:`d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none`,children:[(0,A.jsxs)(`div`,{className:`w-50 d-flex align-items-center`,children:[(0,A.jsx)(`div`,{className:`${k.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:(0,A.jsx)(f,{src:n(e.program),alt:e.program.title,extraClasses:`w-100 rounded`})}),(0,A.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,A.jsx)(`span`,{className:`me-1`,children:e.name}),e.program.hasAdsFree&&(0,A.jsx)(h,{small:!0})]})]}),(0,A.jsx)(_,{program:e.program,className:`pointer-events-none`,showEndTime:!0})]},e.program.id)})}function M(e){let{channel:t}=e;return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`d-flex align-items-center me-3`,style:{maxWidth:`7.5rem`},children:(0,A.jsx)(`img`,{className:`w-100`,src:t.logoUrl})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`h3`,children:t.displayName}),(0,A.jsx)(`p`,{className:`mb-0`,children:t.description})]})]})}function N(){return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background d-flex align-items-center me-3`,children:(0,A.jsx)(`div`,{style:{width:`7.5rem`}})}),(0,A.jsxs)(`div`,{className:`w-100`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background w-25 h3`,children:`\xA0`}),(0,A.jsx)(`p`,{className:`partial-loading-background w-100 mb-0`,children:`\xA0`})]})]})}function P(e){let t=a(d.config()),n=a(v.region(e.region)),i=a(v.regions()),f=a(v.dateRange(e.region)),h=a(n.data&&v.channels(n.data.code)),_=O.useMemo(()=>h.data?.find(t=>t.id.toString()===e.channelId.toString()),[h.data]),{setRegion:S}=D(),{liteUpgradeTypeCustomer:k}=u(null),P=a(n.data&&_&&v.programsByChannel(n.data.code,_.name,_.startTime,_.stopTime)),F=O.useMemo(()=>P.data?[...P.data].sort((e,t)=>t.startTime.localeCompare(e.startTime)):[],[P.data]),I=O.useMemo(()=>{if(!P.data?.length)return[];let e={};return F.forEach(t=>{let n=l.format(g(t.startTime,t.timeZone),`dddd Do MMMM`);e[n]||(e[n]=[]),e[n].push(t)}),Object.entries(e).map(([e,t])=>[e,t.reverse()])},[P]);h.hasCompleted&&!_&&p(r.BadRequest),y(n),m([i,h,P]),c({title:_?.displayName});let L=n.hasCompleted&&i.hasCompleted&&h.hasCompleted&&_&&P.hasCompleted;function R(){return e.selectedRegion?i.data?.find(t=>t.code===e.selectedRegion):n.data}let z=R();return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(E,{region:z}),(0,A.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,A.jsx)(w,{active:`channels`,currentRegion:z,showTvGuide:!!k,config:t.data}),(0,A.jsx)(T,{currentRegion:z,regions:i.data,appLink:{application:o.TV,action:s.Tv.CHANNELS},onClick:S})]}),(0,A.jsx)(C,{dateRange:f.data,region:n.data}),_?(0,A.jsx)(M,{channel:_}):(0,A.jsx)(N,{}),L?(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(x,{children:I.map(([e,r],i)=>(0,A.jsx)(x.Header,{title:e,children:(0,A.jsx)(`div`,{className:`mt-2 pb-2`,children:r&&r.map(e=>(0,A.jsx)(j,{name:e.title,program:e,region:n.data.code,previewUrl:t.data?.tvPreviewUrls[n.data?.code]},e.id))})},i))})}):(0,A.jsx)(b,{})]})}export{P as TvChannelView};
2
- //# sourceMappingURL=BRQhDr-02.chunk.js.map
1
+ import{C as e,D as t,mn as n,yt as r}from"./CnnBLBPY.chunk.js";import{g as i}from"./DW0w8_XN.chunk.js";import{l as a}from"./D8clSITt.chunk.js";import{n as o,t as s}from"./Dn3hwC-o.chunk.js";import{t as c}from"./BjaJoJzM.chunk.js";import{t as l}from"./xL848v0O.chunk.js";import{D as u,Z as d}from"./app-BGxmHvGl.js";import{t as f}from"./Bzw5oyg9.chunk.js";import{t as p}from"./DmVXt6_V.chunk.js";import{t as m}from"./CfNYdg0m.chunk.js";import{t as h}from"./U0UyGd9c2.chunk.js";import{t as g}from"./BcJCL8cu2.chunk.js";import{t as _}from"./BdSdO6n62.chunk.js";import{t as v}from"./C6jF43q92.chunk.js";import{t as y}from"./8pXw5z942.chunk.js";import{n as b,r as x,t as S}from"./DdwVkiCn2.chunk.js";import{n as C,t as w}from"./DKz4jhnr2.chunk.js";import{n as T,t as E}from"./6124murE2.chunk.js";import{t as D}from"./C3Hw2TpW2.chunk.js";var O=n(t()),k={itemContainer:`_itemContainer_84hxn_1`,badgeWrapper:`_badgeWrapper_84hxn_7`,thumbnail:`_thumbnail_84hxn_12`},A=e();function j(e){function t(e,t){switch(e.programType){case S.Video:return{application:o.TV,action:s.Tv.PREVIEW,args:[t,e.id]};case S.Audio:return{application:o.TV,action:s.Tv.RADIO_DOWNLOAD,args:[t,e.id]}}}function n(t){let n=t.globalId.split(`-`).join(``);return`${e.previewUrl}/thumbnail/${n}.jpg`}return(0,A.jsx)(`div`,{className:`${k.itemContainer} rounded mx-4 px-2`,children:(0,A.jsxs)(i,{appLink:t(e.program,e.region),className:`d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none`,children:[(0,A.jsxs)(`div`,{className:`w-50 d-flex align-items-center`,children:[(0,A.jsx)(`div`,{className:`${k.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`,children:(0,A.jsx)(f,{src:n(e.program),alt:e.program.title,extraClasses:`w-100 rounded`})}),(0,A.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,A.jsx)(`span`,{className:`me-1`,children:e.name}),e.program.hasAdsFree&&(0,A.jsx)(h,{small:!0})]})]}),(0,A.jsx)(_,{program:e.program,className:`pointer-events-none`,showEndTime:!0})]},e.program.id)})}function M(e){let{channel:t}=e;return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`d-flex align-items-center me-3`,style:{maxWidth:`7.5rem`},children:(0,A.jsx)(`img`,{className:`w-100`,src:t.logoUrl})}),(0,A.jsxs)(`div`,{children:[(0,A.jsx)(`h1`,{className:`h3`,children:t.displayName}),(0,A.jsx)(`p`,{className:`mb-0`,children:t.description})]})]})}function N(){return(0,A.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background d-flex align-items-center me-3`,children:(0,A.jsx)(`div`,{style:{width:`7.5rem`}})}),(0,A.jsxs)(`div`,{className:`w-100`,children:[(0,A.jsx)(`div`,{className:`partial-loading-background w-25 h3`,children:`\xA0`}),(0,A.jsx)(`p`,{className:`partial-loading-background w-100 mb-0`,children:`\xA0`})]})]})}function P(e){let t=a(d.config()),n=a(v.region(e.region)),i=a(v.regions()),f=a(v.dateRange(e.region)),h=a(n.data&&v.channels(n.data.code)),_=O.useMemo(()=>h.data?.find(t=>t.id.toString()===e.channelId.toString()),[h.data]),{setRegion:S}=D(),{liteUpgradeTypeCustomer:k}=u(null),P=a(n.data&&_&&v.programsByChannel(n.data.code,_.name,_.startTime,_.stopTime)),F=O.useMemo(()=>P.data?[...P.data].sort((e,t)=>t.startTime.localeCompare(e.startTime)):[],[P.data]),I=O.useMemo(()=>{if(!P.data?.length)return[];let e={};return F.forEach(t=>{let n=l.format(g(t.startTime,t.timeZone),`dddd Do MMMM`);e[n]||(e[n]=[]),e[n].push(t)}),Object.entries(e).map(([e,t])=>[e,t.reverse()])},[P]);h.hasCompleted&&!_&&p(r.BadRequest),y(n),m([i,h,P]),c({title:_?.displayName});let L=n.hasCompleted&&i.hasCompleted&&h.hasCompleted&&_&&P.hasCompleted;function R(){return e.selectedRegion?i.data?.find(t=>t.code===e.selectedRegion):n.data}let z=R();return(0,A.jsxs)(A.Fragment,{children:[(0,A.jsx)(E,{region:z}),(0,A.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[(0,A.jsx)(w,{active:`channels`,currentRegion:z,showTvGuide:!!k,config:t.data}),(0,A.jsx)(T,{currentRegion:z,regions:i.data,appLink:{application:o.TV,action:s.Tv.CHANNELS},onClick:S})]}),(0,A.jsx)(C,{dateRange:f.data,region:n.data}),_?(0,A.jsx)(M,{channel:_}):(0,A.jsx)(N,{}),L?(0,A.jsx)(A.Fragment,{children:(0,A.jsx)(x,{children:I.map(([e,r],i)=>(0,A.jsx)(x.Header,{title:e,children:(0,A.jsx)(`div`,{className:`mt-2 pb-2`,children:r&&r.map(e=>(0,A.jsx)(j,{name:e.title,program:e,region:n.data.code,previewUrl:t.data?.tvPreviewUrls[n.data?.code]},e.id))})},i))})}):(0,A.jsx)(b,{})]})}export{P as TvChannelView};
2
+ //# sourceMappingURL=BbrEvwAi2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"BRQhDr-02.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-accordion-list-item/tv-accordion-list-item.module.scss","../../src/apps/tv/components/tv-accordion-list-item/TvAccordionListItem.tsx","../../src/apps/tv/views/tv-channel/components/tv-channel-header/TvChannelHeader.tsx","../../src/apps/tv/views/tv-channel/partial-loading/PartialTvChannelPrograms.tsx","../../src/apps/tv/views/tv-channel/TvChannelView.tsx"],"sourcesContent":[":local {\n .itemContainer {\n transition: background-color 0.25s ease-in-out;\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n height: 2rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './tv-accordion-list-item.module.scss';\n\ninterface TvAccordionListItemProps {\n name: string;\n program: TvProgram;\n region: string;\n showDate?: boolean;\n previewUrl: string;\n}\n\nexport function TvAccordionListItem(props: TvAccordionListItemProps) {\n function getProgramAppLink(program: TvProgram, region: string) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [ region, program.id ]\n };\n }\n }\n \n function getThumbnailUrl(program: TvProgram) {\n const globalId = program.globalId.split('-').join('');\n return `${props.previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div className={`${styles.itemContainer} rounded mx-4 px-2`}>\n <AppLink\n key={props.program.id}\n appLink={getProgramAppLink(props.program, props.region)}\n className='d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none'\n >\n <div className='w-50 d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(props.program)}\n alt={props.program.title}\n extraClasses='w-100 rounded'\n />\n </div>\n <div className='d-flex align-items-center'>\n <span className='me-1'>{props.name}</span>\n {props.program.hasAdsFree && <TvAdFreeBadge small />}\n </div>\n </div>\n <TvProgramTimeBadge program={props.program} className='pointer-events-none' showEndTime />\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\n\ninterface TvChannelHeaderProps {\n channel: TvChannel;\n}\n\nexport function TvChannelHeader(props: TvChannelHeaderProps): JSX.Element {\n const { channel } = props;\n\n return (\n <div className='d-flex mb-3'>\n <div\n className='d-flex align-items-center me-3'\n style={{ maxWidth: '7.5rem' }}>\n <img\n className='w-100'\n src={channel.logoUrl}\n />\n </div>\n <div>\n <h1 className='h3'>{channel.displayName}</h1>\n <p className='mb-0'>{channel.description}</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialTvChannel() {\n return (\n <div className='d-flex mb-3'>\n <div className='partial-loading-background d-flex align-items-center me-3'>\n <div style={{ width: '7.5rem' }}/>\n </div>\n <div className='w-100'>\n <div className='partial-loading-background w-25 h3'>&nbsp;</div>\n <p className='partial-loading-background w-100 mb-0'>&nbsp;</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAccordionListItem } from 'apps/tv/components/tv-accordion-list-item/TvAccordionListItem';\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport { TvChannelHeader } from './components/tv-channel-header/TvChannelHeader';\nimport { PartialTvChannel } from './partial-loading/PartialTvChannelPrograms';\n\ninterface TvChannelViewProps {\n region: string;\n channelId: string;\n selectedRegion?: string;\n}\n\nexport function TvChannelView(props: TvChannelViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n const channel = React.useMemo(() => {\n return channels.data?.find(c => c.id.toString() === props.channelId.toString());\n }, [channels.data]);\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n channel &&\n TvRequests.programsByChannel(\n region.data.code,\n channel.name,\n channel.startTime,\n channel.stopTime\n )\n );\n\n const sortedPrograms = React.useMemo(() => {\n if (!programs.data) return [];\n return [...programs.data].sort((a, b) => b.startTime.localeCompare(a.startTime));\n }, [programs.data]);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [];\n\n const groups: HashObject<TvProgram[]> = {};\n\n sortedPrograms.forEach(program => {\n const startTime = DateHelper.format(toLocalTime(program.startTime, program.timeZone), 'dddd Do MMMM');\n\n if (!groups[startTime])\n groups[startTime] = [];\n\n groups[startTime].push(program);\n });\n const grouped = Object.entries(groups);\n return grouped.map(([ date, program ]) => [ date, program.reverse() ]);\n }, [programs]);\n\n if ((channels.hasCompleted && !channel)) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels, programs ]);\n\n useSetPageMetadata({ title: channel?.displayName });\n\n const dataLoaded =\n region.hasCompleted && regions.hasCompleted && channels.hasCompleted && channel && programs.hasCompleted;\n\n function getCurrentRegion(): TvRegion {\n if (!props.selectedRegion) return region.data;\n\n return regions.data?.find(region => region.code === props.selectedRegion);\n }\n\n const currentRegion = getCurrentRegion();\n\n return (\n <>\n <TvSearchBar region={currentRegion} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='channels'\n currentRegion={currentRegion}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n <TvRegionSelect\n currentRegion={currentRegion}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS\n }}\n onClick={setRegion}\n />\n </div>\n \n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n {channel ? <TvChannelHeader channel={channel} /> : <PartialTvChannel />}\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ date, programs ]: [string, TvProgram[]], index) => (\n <AccordionList.Header\n key={index}\n title={date}\n >\n <div className='mt-2 pb-2'>\n {programs && programs.map(program => (\n <TvAccordionListItem\n key={program.id}\n name={program.title}\n program={program}\n region={region.data.code}\n previewUrl={config.data?.tvPreviewUrls[region.data?.code]}\n />\n ))}\n </div>\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BbrEvwAi2.chunk.js","names":[],"sources":["../../src/apps/tv/components/tv-accordion-list-item/tv-accordion-list-item.module.scss","../../src/apps/tv/components/tv-accordion-list-item/TvAccordionListItem.tsx","../../src/apps/tv/views/tv-channel/components/tv-channel-header/TvChannelHeader.tsx","../../src/apps/tv/views/tv-channel/partial-loading/PartialTvChannelPrograms.tsx","../../src/apps/tv/views/tv-channel/TvChannelView.tsx"],"sourcesContent":[":local {\n .itemContainer {\n transition: background-color 0.25s ease-in-out;\n &:hover {\n background-color: $light-blue;\n }\n }\n\n .badgeWrapper {\n position: absolute;\n right: -3.5rem;\n top: 0;\n }\n\n .thumbnail {\n height: 2rem;\n aspect-ratio: 16 / 9;\n }\n}","import React from 'react';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\n\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAdFreeBadge } from 'apps/tv/components/tv-ad-free-badge/TvAdFreeBadge';\nimport { TvProgramTimeBadge } from 'apps/tv/components/tv-program-time-badge/TvProgramTimeBadge';\nimport { ProgramType } from 'apps/tv/interfaces/enums/ProgramType';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\n\nimport styles from './tv-accordion-list-item.module.scss';\n\ninterface TvAccordionListItemProps {\n name: string;\n program: TvProgram;\n region: string;\n showDate?: boolean;\n previewUrl: string;\n}\n\nexport function TvAccordionListItem(props: TvAccordionListItemProps) {\n function getProgramAppLink(program: TvProgram, region: string) {\n switch (program.programType) {\n case ProgramType.Video:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.PREVIEW,\n args: [ region, program.id ]\n };\n case ProgramType.Audio:\n return {\n application: AppChannels.TV,\n action: Actions.Tv.RADIO_DOWNLOAD,\n args: [ region, program.id ]\n };\n }\n }\n \n function getThumbnailUrl(program: TvProgram) {\n const globalId = program.globalId.split('-').join('');\n return `${props.previewUrl}/thumbnail/${globalId}.jpg`;\n }\n\n return (\n <div className={`${styles.itemContainer} rounded mx-4 px-2`}>\n <AppLink\n key={props.program.id}\n appLink={getProgramAppLink(props.program, props.region)}\n className='d-flex align-items-center justify-content-between py-2 px-3 text-decoration-none'\n >\n <div className='w-50 d-flex align-items-center'>\n <div className={`${styles.thumbnail} flex-shrink-0 me-3 partial-loading-background rounded`}>\n <LazyImage\n src={getThumbnailUrl(props.program)}\n alt={props.program.title}\n extraClasses='w-100 rounded'\n />\n </div>\n <div className='d-flex align-items-center'>\n <span className='me-1'>{props.name}</span>\n {props.program.hasAdsFree && <TvAdFreeBadge small />}\n </div>\n </div>\n <TvProgramTimeBadge program={props.program} className='pointer-events-none' showEndTime />\n </AppLink>\n </div>\n );\n}\n","import React from 'react';\n\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\n\ninterface TvChannelHeaderProps {\n channel: TvChannel;\n}\n\nexport function TvChannelHeader(props: TvChannelHeaderProps): JSX.Element {\n const { channel } = props;\n\n return (\n <div className='d-flex mb-3'>\n <div\n className='d-flex align-items-center me-3'\n style={{ maxWidth: '7.5rem' }}>\n <img\n className='w-100'\n src={channel.logoUrl}\n />\n </div>\n <div>\n <h1 className='h3'>{channel.displayName}</h1>\n <p className='mb-0'>{channel.description}</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nexport function PartialTvChannel() {\n return (\n <div className='d-flex mb-3'>\n <div className='partial-loading-background d-flex align-items-center me-3'>\n <div style={{ width: '7.5rem' }}/>\n </div>\n <div className='w-100'>\n <div className='partial-loading-background w-25 h3'>&nbsp;</div>\n <p className='partial-loading-background w-100 mb-0'>&nbsp;</p>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { AccordionList } from 'shared/components/accordion-list/AccordionList';\nimport { PartialAccordionList } from 'shared/components/accordion-list/partial-loading/PartialAccordionList';\nimport { Actions } from 'shared/constants/ExchangeActions';\nimport { AppChannels } from 'shared/constants/ExchangeRadioChannels';\n\nimport { TvAccordionListItem } from 'apps/tv/components/tv-accordion-list-item/TvAccordionListItem';\nimport { TvInfoAlert } from 'apps/tv/components/tv-info-alert/TvInfoAlert';\nimport { TvRegionSelect } from 'apps/tv/components/tv-region-select/TvRegionSelect';\nimport { TvSearchBar } from 'apps/tv/components/tv-search-bar/TvSearchBar';\nimport { TvTabs } from 'apps/tv/components/tv-tabs/TvTabs';\nimport { TvRequests } from 'apps/tv/flight-requests/TvRequests';\nimport { useHandleRegionError } from 'apps/tv/hooks/useHandleRegionError';\nimport { useSelectedRegion } from 'apps/tv/hooks/useSelectedRegion';\nimport { TvChannel } from 'apps/tv/interfaces/models/TvChannel';\nimport { TvProgram } from 'apps/tv/interfaces/models/TvProgram';\nimport { TvDateRange, TvRegion } from 'apps/tv/interfaces/models/TvRegion';\nimport { toLocalTime } from 'apps/tv/utils/toLocalTime';\n\nimport { TvChannelHeader } from './components/tv-channel-header/TvChannelHeader';\nimport { PartialTvChannel } from './partial-loading/PartialTvChannelPrograms';\n\ninterface TvChannelViewProps {\n region: string;\n channelId: string;\n selectedRegion?: string;\n}\n\nexport function TvChannelView(props: TvChannelViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const region = Flight.useBasicFetch<TvRegion>(TvRequests.region(props.region));\n const regions = Flight.useBasicFetch<TvRegion[]>(TvRequests.regions());\n const dateRange = Flight.useBasicFetch<TvDateRange>(TvRequests.dateRange(props.region));\n const channels = Flight.useBasicFetch<TvChannel[]>(\n region.data && TvRequests.channels(region.data.code)\n );\n const channel = React.useMemo(() => {\n return channels.data?.find(c => c.id.toString() === props.channelId.toString());\n }, [channels.data]);\n\n const { setRegion } = useSelectedRegion();\n const { liteUpgradeTypeCustomer } = useSettings(null);\n\n const programs = Flight.useBasicFetch<TvProgram[]>(\n region.data &&\n channel &&\n TvRequests.programsByChannel(\n region.data.code,\n channel.name,\n channel.startTime,\n channel.stopTime\n )\n );\n\n const sortedPrograms = React.useMemo(() => {\n if (!programs.data) return [];\n return [...programs.data].sort((a, b) => b.startTime.localeCompare(a.startTime));\n }, [programs.data]);\n\n const grouped = React.useMemo(() => {\n if (!programs.data?.length)\n return [];\n\n const groups: HashObject<TvProgram[]> = {};\n\n sortedPrograms.forEach(program => {\n const startTime = DateHelper.format(toLocalTime(program.startTime, program.timeZone), 'dddd Do MMMM');\n\n if (!groups[startTime])\n groups[startTime] = [];\n\n groups[startTime].push(program);\n });\n const grouped = Object.entries(groups);\n return grouped.map(([ date, program ]) => [ date, program.reverse() ]);\n }, [programs]);\n\n if ((channels.hasCompleted && !channel)) {\n handleHttpError(HttpStatus.BadRequest);\n }\n\n useHandleRegionError(region);\n useHandleObjectError([ regions, channels, programs ]);\n\n useSetPageMetadata({ title: channel?.displayName });\n\n const dataLoaded =\n region.hasCompleted && regions.hasCompleted && channels.hasCompleted && channel && programs.hasCompleted;\n\n function getCurrentRegion(): TvRegion {\n if (!props.selectedRegion) return region.data;\n\n return regions.data?.find(region => region.code === props.selectedRegion);\n }\n\n const currentRegion = getCurrentRegion();\n\n return (\n <>\n <TvSearchBar region={currentRegion} />\n\n <div className='d-flex justify-content-between'>\n <TvTabs\n active='channels'\n currentRegion={currentRegion}\n showTvGuide={!!liteUpgradeTypeCustomer}\n config={config.data}\n />\n <TvRegionSelect\n currentRegion={currentRegion}\n regions={regions.data}\n appLink={{\n application: AppChannels.TV,\n action: Actions.Tv.CHANNELS\n }}\n onClick={setRegion}\n />\n </div>\n \n <TvInfoAlert dateRange={dateRange.data} region={region.data} />\n\n {channel ? <TvChannelHeader channel={channel} /> : <PartialTvChannel />}\n\n {dataLoaded ? (\n <>\n <AccordionList>\n {grouped.map(([ date, programs ]: [string, TvProgram[]], index) => (\n <AccordionList.Header\n key={index}\n title={date}\n >\n <div className='mt-2 pb-2'>\n {programs && programs.map(program => (\n <TvAccordionListItem\n key={program.id}\n name={program.title}\n program={program}\n region={region.data.code}\n previewUrl={config.data?.tvPreviewUrls[region.data?.code]}\n />\n ))}\n </div>\n </AccordionList.Header>\n ))}\n </AccordionList>\n </>\n ) : (\n <PartialAccordionList />\n )}\n </>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{C as e,D as t}from"./CnnBLBPY.chunk.js";import{v as n}from"./DW0w8_XN.chunk.js";import{t as r}from"./CBDo4oAU.chunk.js";import{t as i}from"./DXNyYUq4.chunk.js";import{U as a}from"./app-DDrsm5nt.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=Ct8ETEOn2.chunk.js.map
1
+ import{C as e,D as t}from"./CnnBLBPY.chunk.js";import{v as n}from"./DW0w8_XN.chunk.js";import{t as r}from"./CBDo4oAU.chunk.js";import{t as i}from"./DXNyYUq4.chunk.js";import{U as a}from"./app-BGxmHvGl.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=Bi8itw8v2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Ct8ETEOn2.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":"Bi8itw8v2.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,St as r,b as i,d as a,j as o,mn as s,s as c,t as l,x as u}from"./CnnBLBPY.chunk.js";import{_ as d}from"./DW0w8_XN.chunk.js";import{d as f,l as p}from"./D8clSITt.chunk.js";import{t as m}from"./GN6vNflP.chunk.js";import{t as h}from"./BhEzDZi8.chunk.js";import{n as g}from"./BBOUqG_Y.chunk.js";import{t as _}from"./xL848v0O.chunk.js";import{t as v}from"./CRRZVEmA.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-DDrsm5nt.js";import{i as T,n as E,t as D}from"./BPgKK-d32.chunk.js";import{t as O}from"./CKNdXwxe2.chunk.js";import{t as k}from"./D9zlZIWi2.chunk.js";import{t as A}from"./B0hNKKDw2.chunk.js";import{t as j}from"./ELGa0n8y.chunk.js";import{t as ee}from"./DrVEkVd5.chunk.js";import{t as te}from"./CyAM5o2e.chunk.js";import{t as M}from"./B9Rb6IIb.chunk.js";import{t as N}from"./Bu37Hprb2.chunk.js";import{t as P}from"./BHKm8WQq2.chunk.js";var F=s(o()),I=s(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=s(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,r){try{await t(te.suggestEdit(g.data.id,e)),o.success($(`success`)),T(),l.logUserAction({id:g.data.id,name:g.data.name},{actionType:i.Submit,entity:c.Video,descriptor:u.SuggestEdit,location:a.Popup,workflowPhase:n.Complete})}catch(e){d(e,$(`error`),$(`noEmailError`))}finally{r()}}function T(){e.closePopup(),y?.appLink&&(ee.preventScrollTop(),r.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=Co_6cSBX2.chunk.js.map
1
+ import{C as e,D as t,S as n,St as r,b as i,d as a,j as o,mn as s,s as c,t as l,x as u}from"./CnnBLBPY.chunk.js";import{_ as d}from"./DW0w8_XN.chunk.js";import{d as f,l as p}from"./D8clSITt.chunk.js";import{t as m}from"./GN6vNflP.chunk.js";import{t as h}from"./BhEzDZi8.chunk.js";import{n as g}from"./BBOUqG_Y.chunk.js";import{t as _}from"./xL848v0O.chunk.js";import{t as v}from"./CRRZVEmA.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-BGxmHvGl.js";import{i as T,n as E,t as D}from"./DsHiClyc2.chunk.js";import{t as O}from"./DG6L7zHU2.chunk.js";import{t as k}from"./DuPL-nK72.chunk.js";import{t as A}from"./BobZ5p_m2.chunk.js";import{t as j}from"./ELGa0n8y.chunk.js";import{t as ee}from"./DrVEkVd5.chunk.js";import{t as te}from"./CK_CN_mA.chunk.js";import{t as M}from"./NtrZI2Ef.chunk.js";import{t as N}from"./Bu37Hprb2.chunk.js";import{t as P}from"./Ca_-2JTE2.chunk.js";var F=s(o()),I=s(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=s(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,r){try{await t(te.suggestEdit(g.data.id,e)),o.success($(`success`)),T(),l.logUserAction({id:g.data.id,name:g.data.name},{actionType:i.Submit,entity:c.Video,descriptor:u.SuggestEdit,location:a.Popup,workflowPhase:n.Complete})}catch(e){d(e,$(`error`),$(`noEmailError`))}finally{r()}}function T(){e.closePopup(),y?.appLink&&(ee.preventScrollTop(),r.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=BlOKamx72.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Co_6cSBX2.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":"BlOKamx72.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{_t as e}from"./CnnBLBPY.chunk.js";import{l as t}from"./D8clSITt.chunk.js";import{t as n}from"./GN6vNflP.chunk.js";import{t as r}from"./CrBD6Z4s.chunk.js";import{t as i}from"./CRRZVEmA.chunk.js";import{t as a}from"./Bc5CRVkD.chunk.js";import{X as o,Z as s,at as c}from"./app-DDrsm5nt.js";import{t as l}from"./D9zlZIWi2.chunk.js";var u=`shared.verifiedEmailError`,d=class extends a{constructor(e,t,n){super(`VerifiedEmailRequiredError`),this.message=e,this.liteUrl=t,this.hasLite=n}get name(){return`VerifiedEmailRequiredError`}get dialogOptions(){let e=r.safeUrlConcat(this.liteUrl,`settings/account`);return{title:n.getPhrase(u,`heading`),text:this.hasLite?`${this.message} ${n.getPhrase(u,`visitSettings`,{href:e})}`:this.message,buttons:[{text:n.getPhrase(u,`close`),className:`btn btn-dark`,success:!0}]}}},f=()=>{let e=t(t(i.currentUser()).data?.isAuthenticated&&o.userProducts()),n=!e.hasCompleted;return{hasProduct:t=>n||e.hasError||!e.data?.length?!1:e.data.some(e=>e.id===t),products:e,isLoadingProducts:n}};function p(){let n=l(),{hasProduct:r,isLoadingProducts:i}=f(),a=t(s.config());function o(t,i,o){if(!t.responseJSON||t.responseJSON?.type!==`no-email`){n.error(i);return}e.throw(new d(o,a.data.liteUrl,r(c.Primary)))}return{handleGenerateReportError:o,loading:!a.hasCompleted||i}}export{p as t};
2
- //# sourceMappingURL=B0hNKKDw2.chunk.js.map
1
+ import{_t as e}from"./CnnBLBPY.chunk.js";import{l as t}from"./D8clSITt.chunk.js";import{t as n}from"./GN6vNflP.chunk.js";import{t as r}from"./CrBD6Z4s.chunk.js";import{t as i}from"./CRRZVEmA.chunk.js";import{t as a}from"./Bc5CRVkD.chunk.js";import{X as o,Z as s,at as c}from"./app-BGxmHvGl.js";import{t as l}from"./DuPL-nK72.chunk.js";var u=`shared.verifiedEmailError`,d=class extends a{constructor(e,t,n){super(`VerifiedEmailRequiredError`),this.message=e,this.liteUrl=t,this.hasLite=n}get name(){return`VerifiedEmailRequiredError`}get dialogOptions(){let e=r.safeUrlConcat(this.liteUrl,`settings/account`);return{title:n.getPhrase(u,`heading`),text:this.hasLite?`${this.message} ${n.getPhrase(u,`visitSettings`,{href:e})}`:this.message,buttons:[{text:n.getPhrase(u,`close`),className:`btn btn-dark`,success:!0}]}}},f=()=>{let e=t(t(i.currentUser()).data?.isAuthenticated&&o.userProducts()),n=!e.hasCompleted;return{hasProduct:t=>n||e.hasError||!e.data?.length?!1:e.data.some(e=>e.id===t),products:e,isLoadingProducts:n}};function p(){let n=l(),{hasProduct:r,isLoadingProducts:i}=f(),a=t(s.config());function o(t,i,o){if(!t.responseJSON||t.responseJSON?.type!==`no-email`){n.error(i);return}e.throw(new d(o,a.data.liteUrl,r(c.Primary)))}return{handleGenerateReportError:o,loading:!a.hasCompleted||i}}export{p as t};
2
+ //# sourceMappingURL=BobZ5p_m2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"B0hNKKDw2.chunk.js","names":[],"sources":["../../../../libs/shared/src/errors/general/verified-email/VerifiedEmailRequiredError.ts","../../../../libs/shared/src/hooks/UseProducts.ts","../../../../libs/shared/src/hooks/useVerifiedEmailRequiredErrorHandler.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.verifiedEmailError';\n\nexport class VerifiedEmailRequiredError extends DialogError {\n public message: string;\n public liteUrl: string;\n public hasLite: boolean;\n\n constructor(message: string, liteUrl: string, hasLite: boolean) {\n super('VerifiedEmailRequiredError');\n\n this.message = message;\n this.liteUrl = liteUrl;\n this.hasLite = hasLite;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'VerifiedEmailRequiredError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n const href = UrlHelper.safeUrlConcat(this.liteUrl, 'settings/account');\n\n return {\n title: LanguageService.getPhrase(namespace, 'heading'),\n text: this.hasLite ?\n `${this.message} ${LanguageService.getPhrase(namespace, 'visitSettings', { href })}` :\n this.message,\n buttons: [{\n text: LanguageService.getPhrase(namespace, 'close'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Product } from 'libs/shared/interfaces';\n\nexport type HasProductFunc = (productId: ProductId) => boolean;\n\nexport interface UseProductsResponse {\n hasProduct: (product: ProductId) => boolean;\n products: Flight.Response<Product[]>;\n isLoadingProducts: boolean;\n}\n\nexport const useProducts = (): UseProductsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const products = Flight.useBasicFetch<Product[]>(currentUser.data?.isAuthenticated && ProductRequests.userProducts());\n const isLoadingProducts = !products.hasCompleted;\n\n const hasProduct = (productId: ProductId) => {\n if (isLoadingProducts || products.hasError)\n return false;\n\n if (!products.data?.length)\n return false;\n\n return products.data.some(product => product.id === productId);\n };\n\n return {\n hasProduct,\n products,\n isLoadingProducts\n };\n};\n","import { Core } from 'libs/common/backbone/index';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VerifiedEmailRequiredError } from 'libs/shared/errors/general/verified-email/VerifiedEmailRequiredError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useVerifiedEmailRequiredErrorHandler() {\n const alerts = useAlerts();\n const { hasProduct, isLoadingProducts } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function handleGenerateReportError(xhr: Xhr, message: string, noEmailError: string) {\n if (!xhr.responseJSON || xhr.responseJSON?.type !== 'no-email') {\n alerts.error(message);\n return;\n }\n\n Core.ErrorHelper.throw(\n new VerifiedEmailRequiredError(noEmailError, config.data.liteUrl, hasProduct(ProductId.Primary))\n );\n }\n\n return {\n handleGenerateReportError,\n loading: !config.hasCompleted || isLoadingProducts\n };\n}\n"],"mappings":"+UAMA,IAAM,EAAY,4BAEL,EAAb,cAAgD,CAAY,CAK1D,YAAY,EAAiB,EAAiB,EAAkB,CAC9D,MAAM,6BAA6B,CAEnC,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,QAAU,EAIjB,IAAW,MAAe,CACxB,MAAO,6BAIT,IAAW,eAA+B,CACxC,IAAM,EAAO,EAAU,cAAc,KAAK,QAAS,mBAAmB,CAEtE,MAAO,CACL,MAAO,EAAgB,UAAU,EAAW,UAAU,CACtD,KAAM,KAAK,QACT,GAAG,KAAK,QAAQ,GAAG,EAAgB,UAAU,EAAW,gBAAiB,CAAE,OAAM,CAAC,GAClF,KAAK,QACP,QAAS,CAAC,CACR,KAAM,EAAgB,UAAU,EAAW,QAAQ,CACnD,UAAW,eACX,QAAS,GACV,CAAA,CACF,GCzBQ,MAAyC,CAEpD,IAAM,EAAW,EADG,EAAkC,EAAa,aAAa,CAAC,CACpB,MAAM,iBAAmB,EAAgB,cAAc,CAAC,CAC/G,EAAoB,CAAC,EAAS,aAYpC,MAAO,CACL,WAXkB,GACd,GAAqB,EAAS,UAG9B,CAAC,EAAS,MAAM,OACX,GAEF,EAAS,KAAK,KAAK,GAAW,EAAQ,KAAO,EAAU,CAK9D,WACA,oBACD,ECvBH,SAAgB,GAAuC,CACrD,IAAM,EAAS,GAAW,CACpB,CAAE,aAAY,qBAAsB,GAAa,CACjD,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAEpE,SAAS,EAA0B,EAAU,EAAiB,EAAsB,CAClF,GAAI,CAAC,EAAI,cAAgB,EAAI,cAAc,OAAS,WAAY,CAC9D,EAAO,MAAM,EAAQ,CACrB,OAGF,EAAiB,MACf,IAAI,EAA2B,EAAc,EAAO,KAAK,QAAS,EAAW,EAAU,QAAQ,CAAC,CACjG,CAGH,MAAO,CACL,4BACA,QAAS,CAAC,EAAO,cAAgB,EAClC"}
1
+ {"version":3,"file":"BobZ5p_m2.chunk.js","names":[],"sources":["../../../../libs/shared/src/errors/general/verified-email/VerifiedEmailRequiredError.ts","../../../../libs/shared/src/hooks/UseProducts.ts","../../../../libs/shared/src/hooks/useVerifiedEmailRequiredErrorHandler.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.verifiedEmailError';\n\nexport class VerifiedEmailRequiredError extends DialogError {\n public message: string;\n public liteUrl: string;\n public hasLite: boolean;\n\n constructor(message: string, liteUrl: string, hasLite: boolean) {\n super('VerifiedEmailRequiredError');\n\n this.message = message;\n this.liteUrl = liteUrl;\n this.hasLite = hasLite;\n }\n\n // @ts-ignore\n public get name(): string {\n return 'VerifiedEmailRequiredError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n const href = UrlHelper.safeUrlConcat(this.liteUrl, 'settings/account');\n\n return {\n title: LanguageService.getPhrase(namespace, 'heading'),\n text: this.hasLite ?\n `${this.message} ${LanguageService.getPhrase(namespace, 'visitSettings', { href })}` :\n this.message,\n buttons: [{\n text: LanguageService.getPhrase(namespace, 'close'),\n className: 'btn btn-dark',\n success: true\n }]\n };\n }\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Product } from 'libs/shared/interfaces';\n\nexport type HasProductFunc = (productId: ProductId) => boolean;\n\nexport interface UseProductsResponse {\n hasProduct: (product: ProductId) => boolean;\n products: Flight.Response<Product[]>;\n isLoadingProducts: boolean;\n}\n\nexport const useProducts = (): UseProductsResponse => {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const products = Flight.useBasicFetch<Product[]>(currentUser.data?.isAuthenticated && ProductRequests.userProducts());\n const isLoadingProducts = !products.hasCompleted;\n\n const hasProduct = (productId: ProductId) => {\n if (isLoadingProducts || products.hasError)\n return false;\n\n if (!products.data?.length)\n return false;\n\n return products.data.some(product => product.id === productId);\n };\n\n return {\n hasProduct,\n products,\n isLoadingProducts\n };\n};\n","import { Core } from 'libs/common/backbone/index';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VerifiedEmailRequiredError } from 'libs/shared/errors/general/verified-email/VerifiedEmailRequiredError';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { Config } from 'libs/shared/interfaces';\n\nexport function useVerifiedEmailRequiredErrorHandler() {\n const alerts = useAlerts();\n const { hasProduct, isLoadingProducts } = useProducts();\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n function handleGenerateReportError(xhr: Xhr, message: string, noEmailError: string) {\n if (!xhr.responseJSON || xhr.responseJSON?.type !== 'no-email') {\n alerts.error(message);\n return;\n }\n\n Core.ErrorHelper.throw(\n new VerifiedEmailRequiredError(noEmailError, config.data.liteUrl, hasProduct(ProductId.Primary))\n );\n }\n\n return {\n handleGenerateReportError,\n loading: !config.hasCompleted || isLoadingProducts\n };\n}\n"],"mappings":"+UAMA,IAAM,EAAY,4BAEL,EAAb,cAAgD,CAAY,CAK1D,YAAY,EAAiB,EAAiB,EAAkB,CAC9D,MAAM,6BAA6B,CAEnC,KAAK,QAAU,EACf,KAAK,QAAU,EACf,KAAK,QAAU,EAIjB,IAAW,MAAe,CACxB,MAAO,6BAIT,IAAW,eAA+B,CACxC,IAAM,EAAO,EAAU,cAAc,KAAK,QAAS,mBAAmB,CAEtE,MAAO,CACL,MAAO,EAAgB,UAAU,EAAW,UAAU,CACtD,KAAM,KAAK,QACT,GAAG,KAAK,QAAQ,GAAG,EAAgB,UAAU,EAAW,gBAAiB,CAAE,OAAM,CAAC,GAClF,KAAK,QACP,QAAS,CAAC,CACR,KAAM,EAAgB,UAAU,EAAW,QAAQ,CACnD,UAAW,eACX,QAAS,GACV,CAAA,CACF,GCzBQ,MAAyC,CAEpD,IAAM,EAAW,EADG,EAAkC,EAAa,aAAa,CAAC,CACpB,MAAM,iBAAmB,EAAgB,cAAc,CAAC,CAC/G,EAAoB,CAAC,EAAS,aAYpC,MAAO,CACL,WAXkB,GACd,GAAqB,EAAS,UAG9B,CAAC,EAAS,MAAM,OACX,GAEF,EAAS,KAAK,KAAK,GAAW,EAAQ,KAAO,EAAU,CAK9D,WACA,oBACD,ECvBH,SAAgB,GAAuC,CACrD,IAAM,EAAS,GAAW,CACpB,CAAE,aAAY,qBAAsB,GAAa,CACjD,EAAS,EAA6B,EAAe,QAAQ,CAAC,CAEpE,SAAS,EAA0B,EAAU,EAAiB,EAAsB,CAClF,GAAI,CAAC,EAAI,cAAgB,EAAI,cAAc,OAAS,WAAY,CAC9D,EAAO,MAAM,EAAQ,CACrB,OAGF,EAAiB,MACf,IAAI,EAA2B,EAAc,EAAO,KAAK,QAAS,EAAW,EAAU,QAAQ,CAAC,CACjG,CAGH,MAAO,CACL,4BACA,QAAS,CAAC,EAAO,cAAgB,EAClC"}