@clickview/exchange 0.63.0-rc.0 → 0.63.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +525 -525
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{XXzDL37Y.chunk.js → -x9MMtVv.chunk.js} +2 -2
- package/dist/scripts/{XXzDL37Y.chunk.js.map → -x9MMtVv.chunk.js.map} +1 -1
- package/dist/scripts/{BRJldyG42.chunk.js → 4oWF2EyV2.chunk.js} +2 -2
- package/dist/scripts/{BRJldyG42.chunk.js.map → 4oWF2EyV2.chunk.js.map} +1 -1
- package/dist/scripts/{Bbv7q795.chunk.js → 5Z0rGCy2.chunk.js} +2 -2
- package/dist/scripts/{Bbv7q795.chunk.js.map → 5Z0rGCy2.chunk.js.map} +1 -1
- package/dist/scripts/{Buz0cl_A2.chunk.js → 8vJGuJF-2.chunk.js} +2 -2
- package/dist/scripts/{Buz0cl_A2.chunk.js.map → 8vJGuJF-2.chunk.js.map} +1 -1
- package/dist/scripts/{DHyCd_bU2.chunk.js → B0jhFNam2.chunk.js} +3 -3
- package/dist/scripts/{DHyCd_bU2.chunk.js.map → B0jhFNam2.chunk.js.map} +1 -1
- package/dist/scripts/{C56J8vQn2.chunk.js → B3tq0EFi2.chunk.js} +2 -2
- package/dist/scripts/{C56J8vQn2.chunk.js.map → B3tq0EFi2.chunk.js.map} +1 -1
- package/dist/scripts/{z3xPIUA8.chunk.js → B6EmIhMh.chunk.js} +2 -2
- package/dist/scripts/{z3xPIUA8.chunk.js.map → B6EmIhMh.chunk.js.map} +1 -1
- package/dist/scripts/{CvGdC4sR2.chunk.js → BEgLlK2Z2.chunk.js} +2 -2
- package/dist/scripts/{CvGdC4sR2.chunk.js.map → BEgLlK2Z2.chunk.js.map} +1 -1
- package/dist/scripts/{DZzghMqE2.chunk.js → BEyI0jsC2.chunk.js} +2 -2
- package/dist/scripts/{DZzghMqE2.chunk.js.map → BEyI0jsC2.chunk.js.map} +1 -1
- package/dist/scripts/{hZmx1ZBr.chunk.js → BHzUOyzG.chunk.js} +2 -2
- package/dist/scripts/{hZmx1ZBr.chunk.js.map → BHzUOyzG.chunk.js.map} +1 -1
- package/dist/scripts/{CBskpS-O.chunk.js → BI2S4EFA.chunk.js} +2 -2
- package/dist/scripts/{CBskpS-O.chunk.js.map → BI2S4EFA.chunk.js.map} +1 -1
- package/dist/scripts/{_yGE4YHL2.chunk.js → BTsePUCN2.chunk.js} +2 -2
- package/dist/scripts/{_yGE4YHL2.chunk.js.map → BTsePUCN2.chunk.js.map} +1 -1
- package/dist/scripts/{CSI2paIO2.chunk.js → BaXT2aKo2.chunk.js} +2 -2
- package/dist/scripts/{CSI2paIO2.chunk.js.map → BaXT2aKo2.chunk.js.map} +1 -1
- package/dist/scripts/{CmvWR08f.chunk.js → BibFbDqs.chunk.js} +2 -2
- package/dist/scripts/{CmvWR08f.chunk.js.map → BibFbDqs.chunk.js.map} +1 -1
- package/dist/scripts/{DUcxhK9t.chunk.js → BjzONPz9.chunk.js} +2 -2
- package/dist/scripts/{DUcxhK9t.chunk.js.map → BjzONPz9.chunk.js.map} +1 -1
- package/dist/scripts/{DRwPcxvr.chunk.js → BnbM9YhY.chunk.js} +2 -2
- package/dist/scripts/{DRwPcxvr.chunk.js.map → BnbM9YhY.chunk.js.map} +1 -1
- package/dist/scripts/{l5SFnLQO.chunk.js → BrEvIvRP.chunk.js} +2 -2
- package/dist/scripts/{l5SFnLQO.chunk.js.map → BrEvIvRP.chunk.js.map} +1 -1
- package/dist/scripts/{CcQK2DGq2.chunk.js → C1guWVFU2.chunk.js} +2 -2
- package/dist/scripts/{CcQK2DGq2.chunk.js.map → C1guWVFU2.chunk.js.map} +1 -1
- package/dist/scripts/{BWVFXuZ42.chunk.js → C3K3VtRR2.chunk.js} +2 -2
- package/dist/scripts/{BWVFXuZ42.chunk.js.map → C3K3VtRR2.chunk.js.map} +1 -1
- package/dist/scripts/{lWeC_K_B.chunk.js → CAJOpkKZ.chunk.js} +2 -2
- package/dist/scripts/{lWeC_K_B.chunk.js.map → CAJOpkKZ.chunk.js.map} +1 -1
- package/dist/scripts/{feXppHqr.chunk.js → CAOBwDbU.chunk.js} +2 -2
- package/dist/scripts/{feXppHqr.chunk.js.map → CAOBwDbU.chunk.js.map} +1 -1
- package/dist/scripts/{BTP30DaC.chunk.js → CAQAUQMB.chunk.js} +2 -2
- package/dist/scripts/{BTP30DaC.chunk.js.map → CAQAUQMB.chunk.js.map} +1 -1
- package/dist/scripts/{4onqOCbS.chunk.js → CAoPaL8M.chunk.js} +2 -2
- package/dist/scripts/{4onqOCbS.chunk.js.map → CAoPaL8M.chunk.js.map} +1 -1
- package/dist/scripts/{YL1EBDd_.chunk.js → CCvXN2-C.chunk.js} +2 -2
- package/dist/scripts/{YL1EBDd_.chunk.js.map → CCvXN2-C.chunk.js.map} +1 -1
- package/dist/scripts/{D7MdAl-52.chunk.js → CDXcKno52.chunk.js} +2 -2
- package/dist/scripts/{D7MdAl-52.chunk.js.map → CDXcKno52.chunk.js.map} +1 -1
- package/dist/scripts/{B1_Y3iw-.chunk.js → CGLWqKaa.chunk.js} +2 -2
- package/dist/scripts/{B1_Y3iw-.chunk.js.map → CGLWqKaa.chunk.js.map} +1 -1
- package/dist/scripts/{BX4WdpiX.chunk.js → CHQN7xOX.chunk.js} +2 -2
- package/dist/scripts/{BX4WdpiX.chunk.js.map → CHQN7xOX.chunk.js.map} +1 -1
- package/dist/scripts/{3OI-aLOc.chunk.js → CSbvS-Cl.chunk.js} +2 -2
- package/dist/scripts/{3OI-aLOc.chunk.js.map → CSbvS-Cl.chunk.js.map} +1 -1
- package/dist/scripts/{CWY-sFVd.chunk.js → CYFRcx63.chunk.js} +2 -2
- package/dist/scripts/{CWY-sFVd.chunk.js.map → CYFRcx63.chunk.js.map} +1 -1
- package/dist/scripts/{DfMfBgzn2.chunk.js → CeeAb-HT2.chunk.js} +2 -2
- package/dist/scripts/{DfMfBgzn2.chunk.js.map → CeeAb-HT2.chunk.js.map} +1 -1
- package/dist/scripts/{DspWTyv22.chunk.js → Cllrumah2.chunk.js} +2 -2
- package/dist/scripts/{DspWTyv22.chunk.js.map → Cllrumah2.chunk.js.map} +1 -1
- package/dist/scripts/{CPzPIQB92.chunk.js → CoK2sqzN2.chunk.js} +2 -2
- package/dist/scripts/{CPzPIQB92.chunk.js.map → CoK2sqzN2.chunk.js.map} +1 -1
- package/dist/scripts/{DUVTdegJ.chunk.js → CsrTrVKj.chunk.js} +2 -2
- package/dist/scripts/{DUVTdegJ.chunk.js.map → CsrTrVKj.chunk.js.map} +1 -1
- package/dist/scripts/{C-mZmrh2.chunk.js → CuE3TVwa.chunk.js} +2 -2
- package/dist/scripts/{C-mZmrh2.chunk.js.map → CuE3TVwa.chunk.js.map} +1 -1
- package/dist/scripts/{D9yYpvIx.chunk.js → D-ivDlyL.chunk.js} +2 -2
- package/dist/scripts/{D9yYpvIx.chunk.js.map → D-ivDlyL.chunk.js.map} +1 -1
- package/dist/scripts/{ZgHZpHus2.chunk.js → D36Shrdb2.chunk.js} +2 -2
- package/dist/scripts/{ZgHZpHus2.chunk.js.map → D36Shrdb2.chunk.js.map} +1 -1
- package/dist/scripts/{DiivzK1E.chunk.js → D3Jgk2dT.chunk.js} +2 -2
- package/dist/scripts/{DiivzK1E.chunk.js.map → D3Jgk2dT.chunk.js.map} +1 -1
- package/dist/scripts/{DDU0lRB02.chunk.js → D6EZoO4S2.chunk.js} +2 -2
- package/dist/scripts/{DDU0lRB02.chunk.js.map → D6EZoO4S2.chunk.js.map} +1 -1
- package/dist/scripts/{Ca1aJXXk.chunk.js → DDO16-at.chunk.js} +2 -2
- package/dist/scripts/{Ca1aJXXk.chunk.js.map → DDO16-at.chunk.js.map} +1 -1
- package/dist/scripts/{DQhm12vh2.chunk.js → DGRBUJ6T2.chunk.js} +2 -2
- package/dist/scripts/{DQhm12vh2.chunk.js.map → DGRBUJ6T2.chunk.js.map} +1 -1
- package/dist/scripts/{PVFChK662.chunk.js → DGy73Ett2.chunk.js} +2 -2
- package/dist/scripts/{PVFChK662.chunk.js.map → DGy73Ett2.chunk.js.map} +1 -1
- package/dist/scripts/{BhygUKHG2.chunk.js → DHV6S1fA2.chunk.js} +2 -2
- package/dist/scripts/{BhygUKHG2.chunk.js.map → DHV6S1fA2.chunk.js.map} +1 -1
- package/dist/scripts/{ClJxBHin2.chunk.js → DM0JzOpR2.chunk.js} +2 -2
- package/dist/scripts/{ClJxBHin2.chunk.js.map → DM0JzOpR2.chunk.js.map} +1 -1
- package/dist/scripts/{Ovy1FgPr2.chunk.js → DOuiFwIH2.chunk.js} +2 -2
- package/dist/scripts/{Ovy1FgPr2.chunk.js.map → DOuiFwIH2.chunk.js.map} +1 -1
- package/dist/scripts/{C5zVzLiv.chunk.js → DRZvc_n5.chunk.js} +2 -2
- package/dist/scripts/{C5zVzLiv.chunk.js.map → DRZvc_n5.chunk.js.map} +1 -1
- package/dist/scripts/{e-cJ9kRJ.chunk.js → DUCTNoXj.chunk.js} +2 -2
- package/dist/scripts/{e-cJ9kRJ.chunk.js.map → DUCTNoXj.chunk.js.map} +1 -1
- package/dist/scripts/{MsShPjH12.chunk.js → Da2KHzN02.chunk.js} +2 -2
- package/dist/scripts/{MsShPjH12.chunk.js.map → Da2KHzN02.chunk.js.map} +1 -1
- package/dist/scripts/{VrblzwSV.chunk.js → DklryBsJ.chunk.js} +2 -2
- package/dist/scripts/{VrblzwSV.chunk.js.map → DklryBsJ.chunk.js.map} +1 -1
- package/dist/scripts/{V1sSszjJ.chunk.js → DsA2RTbF.chunk.js} +2 -2
- package/dist/scripts/{V1sSszjJ.chunk.js.map → DsA2RTbF.chunk.js.map} +1 -1
- package/dist/scripts/{kAq4UzUo.chunk.js → Dsmr6Wly.chunk.js} +2 -2
- package/dist/scripts/{kAq4UzUo.chunk.js.map → Dsmr6Wly.chunk.js.map} +1 -1
- package/dist/scripts/{PVKBLI-T2.chunk.js → DsolW3Wd2.chunk.js} +2 -2
- package/dist/scripts/{PVKBLI-T2.chunk.js.map → DsolW3Wd2.chunk.js.map} +1 -1
- package/dist/scripts/{C4y3yewN.chunk.js → UK8sD-oL.chunk.js} +2 -2
- package/dist/scripts/{C4y3yewN.chunk.js.map → UK8sD-oL.chunk.js.map} +1 -1
- package/dist/scripts/{C79TzhHV.chunk.js → aXgcldgY.chunk.js} +2 -2
- package/dist/scripts/{C79TzhHV.chunk.js.map → aXgcldgY.chunk.js.map} +1 -1
- package/dist/scripts/{app-DddMB3QD.js → app-lnmpv5W4.js} +3 -3
- package/dist/scripts/app-lnmpv5W4.js.map +1 -0
- package/dist/scripts/{CRtOlUhH.chunk.js → c2oA1XgG.chunk.js} +2 -2
- package/dist/scripts/{CRtOlUhH.chunk.js.map → c2oA1XgG.chunk.js.map} +1 -1
- package/dist/scripts/{CKC7r8Ck2.chunk.js → dkfSCDWH2.chunk.js} +2 -2
- package/dist/scripts/{CKC7r8Ck2.chunk.js.map → dkfSCDWH2.chunk.js.map} +1 -1
- package/dist/scripts/{Dwhojt8g2.chunk.js → jErHNuXU2.chunk.js} +2 -2
- package/dist/scripts/{Dwhojt8g2.chunk.js.map → jErHNuXU2.chunk.js.map} +1 -1
- package/dist/scripts/{BXh_8LxI2.chunk.js → mkasrghR2.chunk.js} +2 -2
- package/dist/scripts/{BXh_8LxI2.chunk.js.map → mkasrghR2.chunk.js.map} +1 -1
- package/dist/scripts/{D2D0ku9V2.chunk.js → s776Po8a2.chunk.js} +2 -2
- package/dist/scripts/{D2D0ku9V2.chunk.js.map → s776Po8a2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/app-DddMB3QD.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,S as n,b as r,d as i,s as a}from"./B1i9atik.chunk.js";import{n as o}from"./NpQVkKE2.chunk.js";import{l as s,u as c}from"./TJBzqR6k.chunk.js";import{t as l}from"./CzvVp9iC.chunk.js";import{i as u,o as d,s as f}from"./
|
|
2
|
-
//# sourceMappingURL
|
|
1
|
+
import{C as e,D as t,S as n,b as r,d as i,s as a}from"./B1i9atik.chunk.js";import{n as o}from"./NpQVkKE2.chunk.js";import{l as s,u as c}from"./TJBzqR6k.chunk.js";import{t as l}from"./CzvVp9iC.chunk.js";import{i as u,o as d,s as f}from"./CYFRcx63.chunk.js";import{t as p}from"./C1F_DBsV.chunk.js";import{t as m}from"./DgSFdSfV.chunk.js";import{t as h}from"./DRTfS6nN.chunk.js";import{t as g}from"./DKbUI-vj.chunk.js";import{$ as _,F as v,I as y,Q as b,tt as x}from"./app-lnmpv5W4.js";import{t as S}from"./DXN-HToH2.chunk.js";import{t as C}from"./jErHNuXU2.chunk.js";import{t as w}from"./BEyI0jsC2.chunk.js";import{h as T,m as E,t as D}from"./DRZvc_n5.chunk.js";import{t as O}from"./CCvXN2-C.chunk.js";import{n as k,r as A,t as j}from"./BI2S4EFA.chunk.js";import{t as M}from"./D-ivDlyL.chunk.js";import{n as N,t as P}from"./CGLWqKaa.chunk.js";import{t as F}from"./CAJOpkKZ.chunk.js";import{t as I}from"./RNP3-R8c.chunk.js";import{t as L}from"./Dsmr6Wly.chunk.js";import{i as R,r as z,t as B}from"./DUCTNoXj.chunk.js";import{n as V,r as H,t as U}from"./DDO16-at.chunk.js";t();var W=e(),G=`exchange.exchangeFolderEmptyState`;function K(){return(0,W.jsx)(v.Provider,{value:G,children:(0,W.jsxs)(p,{children:[(0,W.jsx)(p.Image,{src:h.EmptyStates.FOLDER}),(0,W.jsx)(p.Heading,{children:(0,W.jsx)(y,{phrase:`heading`})})]})})}function q(e){return!e.videos?.length&&!e.isFetching?(0,W.jsx)(K,{}):(0,W.jsxs)(`div`,{children:[(0,W.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center mb-2`,children:[(0,W.jsx)(V,{breadcrumbs:e.breadcrumbs}),(0,W.jsx)(U,{variant:`outline-dark`,type:e.sort,getSortAppLink:e.getSortAppLink,analyticsOptions:{location:i.VideoListHeader,entity:a.Video,actionType:r.Sort,workflowPhase:n.Complete},includeProductionYear:!0})]}),e.videos?(0,W.jsx)(D,{videos:e.videos,getVideoAppLink:z,presentationAudiences:null,getPreviewQuestionsAppLink:()=>null,hasPermissions:()=>!1,hideVideoGuidance:!0,commonVideoProps:e.commonVideoProps}):(0,W.jsx)(`div`,{className:`mx-n2`,children:(0,W.jsx)(u,{})}),(e.hasMore||e.isFetching)&&(0,W.jsx)(d,{isFetching:e.isFetching,fetchNext:e.fetchNext,nextCursor:e.nextCursor})]})}function J(){return(0,W.jsxs)(W.Fragment,{children:[(0,W.jsx)(`div`,{className:`partial-loading-background h2 mb-3 w-25`,children:`\xA0`}),(0,W.jsx)(`div`,{className:`mt-1 mb-2`,children:(0,W.jsx)(j,{})}),(0,W.jsxs)(`div`,{className:`mb-3`,children:[(0,W.jsx)(`div`,{className:`mb-3`,children:(0,W.jsx)(H,{})}),(0,W.jsx)(`div`,{className:`mx-n2`,children:(0,W.jsx)(u,{})})]})]})}var Y=l.encloseNamespace(`exchange.exchangeFolder`);function X(e){let t=c(),n=w(),r=s(g.currentUser()),i=s(C.folder(e.folderId)),{isUserCurator:a,openInCurationStudioLabel:l,getOpenInCurationStudioLink:u}=N(),d=e=>C.childFolders(i.data.id,e),p=k(i.data&&d,e=>t(d(e)));m({title:i.data?.name}),F([i]);let{commonVideoProps:h}=E(),v=!!r.data&&b.getOrSetSortType(r.data.id,e.sort,_.ProductionYear),{items:y,hasMore:D,isFetching:j,nextCursor:z}=f(V,H,U);function V(t){return O.folderVideos(e.folderId,v,t)}function H(e){return t(V(e))}function U(e,t){if(e===1)return M(t);n.error(Y(`error`))}function G(){return a?[{label:l,openInNewTab:!0,href:u(x.Category,i.data.id)}]:[]}let K=R(e.folderId,e.sort),X=P(`video-list`),Z=p?.items?.length>0,Q=i.hasCompleted&&r.hasCompleted&&p.hasCompleted;return(0,W.jsxs)(T.Provider,{value:X,children:[(0,W.jsxs)(`div`,{className:`mb-3`,children:[(0,W.jsx)(I,{}),(0,W.jsx)(L,{active:`categories`})]}),Q?(0,W.jsxs)(W.Fragment,{children:[i.data&&(0,W.jsxs)(`div`,{className:`d-flex mb-3`,children:[(0,W.jsx)(`h1`,{className:`h2 me-1 mb-0`,children:i.data.name}),(0,W.jsx)(S,{actions:G(),actionsDropdownClassName:`btn btn-sm`,dropdownToggleSvgSize:o.Standard})]}),Z&&(0,W.jsx)(`div`,{className:`mx-n2`,children:(0,W.jsx)(A,{folders:p.items,getAppLink:e=>B(e,v),expandFolders:!y?.length})}),(0,W.jsx)(`div`,{className:`pb-3`,children:(0,W.jsx)(q,{videos:y,hasSubFolders:Z,hasMore:D,isFetching:j,fetchNext:H,nextCursor:z,sort:v,breadcrumbs:K,getSortAppLink:e=>B(i.data,e),commonVideoProps:h})})]}):(0,W.jsx)(J,{})]})}export{X as ExchangeFolderView};
|
|
2
|
+
//# sourceMappingURL=-x9MMtVv.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"XXzDL37Y.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/empty-state/ExchangeFolderEmptyState.tsx","../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/ExchangeFolderVideos.tsx","../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/partial-loading/ExchangeFolderPartialLoading.tsx","../../src/apps/exchange/views/exchange-folder/ExchangeFolderView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'exchange.exchangeFolderEmptyState';\n\nexport function ExchangeFolderEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.FOLDER} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\nimport { ExchangeFolderEmptyState } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/empty-state/ExchangeFolderEmptyState';\n\ninterface ExchangeFolderVideosProps {\n videos: Video[];\n hasSubFolders: boolean;\n sort: VideoSortType;\n isFetching: boolean;\n hasMore: boolean;\n nextCursor?: string;\n breadcrumbs: Breadcrumb[];\n getSortAppLink: (sort: VideoSortType) => Core.AppLink;\n fetchNext: (cursor: string) => void;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ExchangeFolderVideos(props: ExchangeFolderVideosProps): JSX.Element {\n if (!props.videos?.length && !props.isFetching)\n return <ExchangeFolderEmptyState />;\n\n return (\n <div>\n <div className='d-flex justify-content-between align-items-center mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={props.sort}\n getSortAppLink={props.getSortAppLink}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n {props.videos ? (\n <VideoList\n videos={props.videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={props.commonVideoProps}\n />\n ) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(props.hasMore || props.isFetching) && (\n <InfiniteScrollFooter\n isFetching={props.isFetching}\n fetchNext={props.fetchNext}\n nextCursor={props.nextCursor}\n />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function ExchangeFolderPartialLoading(): JSX.Element {\n return (\n <>\n <div\n className='partial-loading-background h2 mb-3 w-25'>\n \n </div>\n\n <div className='mt-1 mb-2'>\n <PartialFolderList />\n </div>\n\n <div className='mb-3'>\n <div className='mb-3'>\n <PartialBreadcrumbs />\n </div>\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Folder, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getFolderAppLink, useGetFolderBreadcrumbs } from 'apps/exchange/utils/ExchangeUtils';\nimport { ExchangeFolderVideos } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/ExchangeFolderVideos';\nimport { ExchangeFolderPartialLoading } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/partial-loading/ExchangeFolderPartialLoading';\n\nconst namespace = 'exchange.exchangeFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeFolderViewProps {\n folderId: string;\n sort?: VideoSortType;\n}\n\nexport function ExchangeFolderView(props: ExchangeFolderViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.folderId));\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n \n const getFolderRequest = (cursor: string) => LibraryRequests.childFolders(folder.data.id, cursor);\n const fetchNextFolder = (cursor: string) => fetch(getFolderRequest(cursor));\n const subfolders = useFetchAll(folder.data && getFolderRequest, fetchNextFolder);\n\n useSetPageMetadata({ title: folder.data?.name });\n useHandleObjectError([folder]);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear);\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.folderVideos(props.folderId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n function getActions(): ActionOptions[] {\n if (!isUserCurator)\n return [];\n\n return [\n {\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Category, folder.data.id)\n }\n ];\n }\n\n const breadcrumbs = useGetFolderBreadcrumbs(props.folderId, props.sort);\n\n const videoActions = useGetExchangeActions('video-list');\n\n const hasSubfolders = subfolders?.items?.length > 0;\n\n const dataLoaded = (\n folder.hasCompleted &&\n currentUser.hasCompleted &&\n subfolders.hasCompleted\n );\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='mb-3'>\n <ExchangeSearchBar />\n <ExchangeTabs active='categories' />\n </div>\n\n {dataLoaded ? (\n <>\n {folder.data && (\n <div className='d-flex mb-3'>\n <h1 className='h2 me-1 mb-0'>{folder.data.name}</h1>\n <Actions\n actions={getActions()}\n actionsDropdownClassName='btn btn-sm'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n />\n </div>\n )}\n\n {hasSubfolders && (\n <div className='mx-n2'>\n <FolderList\n folders={subfolders.items}\n getAppLink={(f: Folder) => getFolderAppLink(f, sort)}\n expandFolders={!videos?.length}\n />\n </div>\n )}\n\n <div className='pb-3'>\n <ExchangeFolderVideos\n videos={videos}\n hasSubFolders={hasSubfolders}\n hasMore={hasMore}\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n sort={sort}\n breadcrumbs={breadcrumbs}\n getSortAppLink={sort => getFolderAppLink(folder.data, sort)}\n commonVideoProps={commonVideoProps}\n />\n </div>\n </>\n ) : <ExchangeFolderPartialLoading />}\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"-x9MMtVv.chunk.js","names":[],"sources":["../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/empty-state/ExchangeFolderEmptyState.tsx","../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/ExchangeFolderVideos.tsx","../../src/apps/exchange/views/exchange-folder/components/exchange-folder-videos/partial-loading/ExchangeFolderPartialLoading.tsx","../../src/apps/exchange/views/exchange-folder/ExchangeFolderView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'exchange.exchangeFolderEmptyState';\n\nexport function ExchangeFolderEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.FOLDER} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { VideoSortSelect } from 'libs/shared/components/video-sort-select/VideoSortSelect';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { Video } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { getVideoAppLink } from 'apps/exchange/utils/ExchangeUtils';\nimport { ExchangeFolderEmptyState } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/empty-state/ExchangeFolderEmptyState';\n\ninterface ExchangeFolderVideosProps {\n videos: Video[];\n hasSubFolders: boolean;\n sort: VideoSortType;\n isFetching: boolean;\n hasMore: boolean;\n nextCursor?: string;\n breadcrumbs: Breadcrumb[];\n getSortAppLink: (sort: VideoSortType) => Core.AppLink;\n fetchNext: (cursor: string) => void;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function ExchangeFolderVideos(props: ExchangeFolderVideosProps): JSX.Element {\n if (!props.videos?.length && !props.isFetching)\n return <ExchangeFolderEmptyState />;\n\n return (\n <div>\n <div className='d-flex justify-content-between align-items-center mb-2'>\n <Breadcrumbs breadcrumbs={props.breadcrumbs} />\n\n <VideoSortSelect\n variant='outline-dark'\n type={props.sort}\n getSortAppLink={props.getSortAppLink}\n analyticsOptions={{\n location: LocationContext.VideoListHeader,\n entity: EntityType.Video,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n includeProductionYear\n />\n </div>\n\n {props.videos ? (\n <VideoList\n videos={props.videos}\n getVideoAppLink={getVideoAppLink}\n presentationAudiences={null}\n getPreviewQuestionsAppLink={() => null}\n hasPermissions={() => false}\n hideVideoGuidance\n commonVideoProps={props.commonVideoProps}\n />\n ) : (\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n )}\n\n {(props.hasMore || props.isFetching) && (\n <InfiniteScrollFooter\n isFetching={props.isFetching}\n fetchNext={props.fetchNext}\n nextCursor={props.nextCursor}\n />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialFolderList } from 'libs/shared/components/folder-list/partial-loading/PartialFolderList';\nimport { PartialVideoList } from 'libs/shared/components/video-list/partial-loading/PartialVideoList';\n\nexport function ExchangeFolderPartialLoading(): JSX.Element {\n return (\n <>\n <div\n className='partial-loading-background h2 mb-3 w-25'>\n \n </div>\n\n <div className='mt-1 mb-2'>\n <PartialFolderList />\n </div>\n\n <div className='mb-3'>\n <div className='mb-3'>\n <PartialBreadcrumbs />\n </div>\n <div className='mx-n2'>\n <PartialVideoList />\n </div>\n </div>\n </>\n );\n}\n","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { FolderList } from 'libs/shared/components/folder-list/FolderList';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoSortType } from 'libs/shared/enums/VideoSortType';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { CurrentUser, Folder, Video } from 'libs/shared/interfaces';\nimport { VideoSortHelper } from 'libs/shared/utils/VideoSortHelper';\n\nimport { ExchangeSearchBar } from 'apps/exchange/components/exchange-search-bar/ExchangeSearchBar';\nimport { ExchangeTabs } from 'apps/exchange/components/exchange-tabs/ExchangeTabs';\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { useCommonVideoProps } from 'apps/exchange/hooks/useCommonVideoProps';\nimport { useGetExchangeActions } from 'apps/exchange/hooks/useGetExchangeActions';\nimport { getFolderAppLink, useGetFolderBreadcrumbs } from 'apps/exchange/utils/ExchangeUtils';\nimport { ExchangeFolderVideos } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/ExchangeFolderVideos';\nimport { ExchangeFolderPartialLoading } from 'apps/exchange/views/exchange-folder/components/exchange-folder-videos/partial-loading/ExchangeFolderPartialLoading';\n\nconst namespace = 'exchange.exchangeFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeFolderViewProps {\n folderId: string;\n sort?: VideoSortType;\n}\n\nexport function ExchangeFolderView(props: ExchangeFolderViewProps): JSX.Element {\n const fetch = Flight.useGetFetch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.folderId));\n const { isUserCurator, openInCurationStudioLabel, getOpenInCurationStudioLink } = useCurationStudio();\n \n const getFolderRequest = (cursor: string) => LibraryRequests.childFolders(folder.data.id, cursor);\n const fetchNextFolder = (cursor: string) => fetch(getFolderRequest(cursor));\n const subfolders = useFetchAll(folder.data && getFolderRequest, fetchNextFolder);\n\n useSetPageMetadata({ title: folder.data?.name });\n useHandleObjectError([folder]);\n\n const { commonVideoProps } = useCommonVideoProps();\n\n // Must be before the video fetching, as the getVideosRequest has a closure over the sort\n const sort = !!currentUser.data\n && VideoSortHelper.getOrSetSortType(currentUser.data.id, props.sort, VideoSortType.ProductionYear);\n\n const {\n items: videos,\n hasMore,\n isFetching,\n nextCursor\n } = useInfiniteList<Video>(getVideosRequest, fetchNextVideos, onError);\n\n function getVideosRequest(cursor?: string): Flight.Request {\n return ExchangeRequests.folderVideos(props.folderId, sort, cursor);\n }\n\n function fetchNextVideos(cursor?: string): void {\n return fetch(getVideosRequest(cursor));\n }\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n function getActions(): ActionOptions[] {\n if (!isUserCurator)\n return [];\n\n return [\n {\n label: openInCurationStudioLabel,\n openInNewTab: true,\n href: getOpenInCurationStudioLink(MasterType.Category, folder.data.id)\n }\n ];\n }\n\n const breadcrumbs = useGetFolderBreadcrumbs(props.folderId, props.sort);\n\n const videoActions = useGetExchangeActions('video-list');\n\n const hasSubfolders = subfolders?.items?.length > 0;\n\n const dataLoaded = (\n folder.hasCompleted &&\n currentUser.hasCompleted &&\n subfolders.hasCompleted\n );\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='mb-3'>\n <ExchangeSearchBar />\n <ExchangeTabs active='categories' />\n </div>\n\n {dataLoaded ? (\n <>\n {folder.data && (\n <div className='d-flex mb-3'>\n <h1 className='h2 me-1 mb-0'>{folder.data.name}</h1>\n <Actions\n actions={getActions()}\n actionsDropdownClassName='btn btn-sm'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n />\n </div>\n )}\n\n {hasSubfolders && (\n <div className='mx-n2'>\n <FolderList\n folders={subfolders.items}\n getAppLink={(f: Folder) => getFolderAppLink(f, sort)}\n expandFolders={!videos?.length}\n />\n </div>\n )}\n\n <div className='pb-3'>\n <ExchangeFolderVideos\n videos={videos}\n hasSubFolders={hasSubfolders}\n hasMore={hasMore}\n isFetching={isFetching}\n fetchNext={fetchNextVideos}\n nextCursor={nextCursor}\n sort={sort}\n breadcrumbs={breadcrumbs}\n getSortAppLink={sort => getFolderAppLink(folder.data, sort)}\n commonVideoProps={commonVideoProps}\n />\n </div>\n </>\n ) : <ExchangeFolderPartialLoading />}\n </VideoActionsContext.Provider>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{D as e,fn as t,ht as n}from"./B1i9atik.chunk.js";import{k as r}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{D as e,fn as t,ht as n}from"./B1i9atik.chunk.js";import{k as r}from"./app-lnmpv5W4.js";var i=t(e());function a(...e){i.useEffect(()=>{e.length&&e.some(n.isStatusCodeError)&&n.throw(new r)},e)}export{a as t};
|
|
2
|
+
//# sourceMappingURL=4oWF2EyV2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"4oWF2EyV2.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseHandleDialogError.ts"],"sourcesContent":["import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\n\nexport function useHandleDialogError(...statusCodes: HttpStatus[]): void {\n React.useEffect(() => {\n if (!statusCodes.length)\n return;\n\n const hasErrorCode = statusCodes.some(Core.ErrorHelper.isStatusCodeError);\n\n if (!hasErrorCode)\n return;\n\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n }, statusCodes);\n}\n"],"mappings":"2GAOA,SAAgB,EAAqB,GAAG,EAAiC,CACvE,EAAM,cAAgB,CACf,EAAY,QAGI,EAAY,KAAA,EAAsB,kBAAkB,EAKzE,EAAiB,MAAM,IAAI,EAAyB,EACnD,EAAY"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s,y as c}from"./B1i9atik.chunk.js";import{d as l,l as u}from"./TJBzqR6k.chunk.js";import{t as d}from"./CzvVp9iC.chunk.js";import{t as f}from"./YhCzLJGK.chunk.js";import{t as p}from"./DKbUI-vj.chunk.js";import{H as m,I as h,M as g,U as _,_ as v,m as y,z as b}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,S as n,b as r,d as i,fn as a,s as o,t as s,y as c}from"./B1i9atik.chunk.js";import{d as l,l as u}from"./TJBzqR6k.chunk.js";import{t as d}from"./CzvVp9iC.chunk.js";import{t as f}from"./YhCzLJGK.chunk.js";import{t as p}from"./DKbUI-vj.chunk.js";import{H as m,I as h,M as g,U as _,_ as v,m as y,z as b}from"./app-lnmpv5W4.js";import{i as x,n as S,t as C}from"./mkasrghR2.chunk.js";import{t as w}from"./BEyI0jsC2.chunk.js";import{t as T}from"./dkfSCDWH2.chunk.js";import{t as E}from"./C1guWVFU2.chunk.js";import{n as D,t as O}from"./BuSq2beZ2.chunk.js";import{t as k}from"./D6EZoO4S2.chunk.js";t();var A=function(e){return e[e.BbcRes=0]=`BbcRes`,e}({}),j=a(C()),M=d.encloseNamespace(`tv.requestProgramValidation`);function N(e){return e?(0,j.object)().shape({channelId:(0,j.string)().required(M(`channelRequired`)),title:(0,j.string)().required(M(`programRequired`)),broadcastDate:(0,j.string)().required(M(`dateRequired`)),broadcastTime:(0,j.string)().required(M(`timeRequired`)),closedCaptions:(0,j.string)(),comments:(0,j.string)()}):(0,j.object)().shape({title:(0,j.string)().required(M(`programRequired`)),comments:(0,j.string)()})}var P=e(),F=`tv.requestProgramForm`,I=d.encloseNamespace(F);function L(e){let t=m(),n=f.format(f.add(new Date,4,`days`),`YYYY-MM-DD`),r=f.format(f.add(n,11,`days`),`YYYY-MM-DD`),i=k(e.instanceRegion);return(0,P.jsxs)(b,{children:[e.channels&&(0,P.jsxs)(x,{as:`select`,label:I(`channelLabel`),name:`channelId`,value:t.values.channelId,showRequiredStar:!0,children:[(0,P.jsx)(`option`,{value:``,children:d.getPhrase(F,`channelPlaceholder`)},0),e.channels.map(e=>(0,P.jsx)(`option`,{value:e.id,children:`${e.name} - (${e.number})`},e.id))]}),(0,P.jsx)(x,{label:I(`programLabel`),placeholder:I(`programPlaceholder`),type:`text`,name:`title`,value:t.values.title,showRequiredStar:!0}),e.channels&&(0,P.jsxs)(`div`,{className:`d-flex`,children:[(0,P.jsx)(`div`,{className:`w-50 me-2`,children:(0,P.jsx)(x,{label:I(`broadcastDateLabel`),type:`date`,name:`broadcastDate`,value:t.values.broadcastDate,min:n,max:r,showRequiredStar:!0})}),(0,P.jsx)(`div`,{className:`w-50`,children:(0,P.jsx)(x,{label:I(`broadcastTimeLabel`),type:`time`,name:`broadcastTime`,value:t.values.broadcastTime,className:`mb-0`,showRequiredStar:!0})})]}),(0,P.jsx)(`p`,{className:`mt-n1`,children:(0,P.jsx)(`small`,{children:(0,P.jsx)(h,{namespace:F,phrase:i.programGuidePhraseKey})})}),e.channels&&(0,P.jsxs)(`div`,{className:`d-flex`,children:[(0,P.jsx)(`div`,{className:`w-50 me-2`,children:(0,P.jsxs)(x,{as:`select`,label:I(`ccLabel`),name:`closedCaptions`,value:t.values.closedCaptions,children:[(0,P.jsx)(`option`,{value:``,children:d.getPhrase(F,`ccNo`)}),(0,P.jsx)(`option`,{value:`yes`,children:d.getPhrase(F,`ccYes`)})]})}),(0,P.jsx)(`div`,{className:`w-50`})]}),(0,P.jsx)(x,{label:I(e.channels?`commentsLabel`:`additionalInfoLabel`),placeholder:I(e.channels?`commentsPlaceholder`:`additionalInfoPlaceholder`),type:`text`,name:`comments`,value:t.values.comments}),(0,P.jsx)(`p`,{children:(0,P.jsx)(h,{namespace:F,phrase:`note`,options:{tv:i.tv}})}),(0,P.jsxs)(g,{children:[(0,P.jsx)(g.Cancel,{text:I(`cancel`),onClick:e.onClickCancel,variant:`link`}),(0,P.jsx)(E,{variant:`dark`,submitText:I(`request`)})]})]})}var R={channelId:``,title:``,broadcastDate:``,broadcastTime:``,closedCaptions:``,comments:``},z=`tv.requestProgram`,B=d.encloseNamespace(z);function V(e){let t=l(),a=w(),d=u(p.currentUser()),f=d.data?.instanceRegion,m=f===v.AU,g=f===v.UK,b=u(g&&y.customer(d.data.customerId)),x=u(m&&O.payTvChannels()),C=k(f);function E(){e.closePopup()}let{loading:j,handleGenerateReportError:M}=T();function F(t){if(m){let l=x.data?.find(e=>String(e.id)===t.channelId);a.success(B(`successChannel`,{tv:C.tv,program:t.title,channel:l?.name})),s.logUserAction({channel:l.id,name:l.name,program:t.title,region:e.region},{actionType:r.Submit,entity:o.Video,location:i.Popup,workflowPhase:n.Complete,descriptor:c.RequestProgram})}else a.success(B(`successNoChannel`,{tv:C.tv,program:t.title})),s.logUserAction({program:t.title,region:e.region},{actionType:r.Submit,entity:o.Video,location:i.Popup,workflowPhase:n.Complete,descriptor:c.RequestProgram})}function I(t){let{broadcastDate:n,broadcastTime:r,closedCaptions:i,...a}=t;return g?{title:a.title,comments:a.comments,crmId:b.data.crmId,customerName:b.data.name,email:d.data.email,type:A.BbcRes,username:d.data.username}:m?{...a,closedCaptions:!!i,regionCode:e.region,programDateTime:`${n}T${r}`,userId:d.data?.id,customerId:d.data?.customerId}:{...a,regionCode:e.region,userId:d.data?.id,customerId:d.data?.customerId}}async function V(n,r){let i=I(n),a=g?O.requestProgramUk(i):O.requestProgram(i);try{await t(a),r(),F(n)}catch(e){M(e,B(`error`),B(`noEmailError`))}e.closePopup()}let H=d.hasCompleted&&(m&&x.hasCompleted||!m);return(0,P.jsxs)(_,{title:B(`title`,{tv:C.tv}),closePopup:e.closePopup,showLoadingSpinner:!H||j,children:[D.isHolidayPeriod()&&(0,P.jsxs)(`div`,{className:`alert alert-warning`,role:`alert`,children:[(0,P.jsx)(`h3`,{className:`h5`,children:(0,P.jsx)(h,{namespace:z,phrase:`requestAlertHeading`})}),(0,P.jsx)(`p`,{className:`m-0`,children:(0,P.jsx)(h,{namespace:z,phrase:`requestAlertBody`,options:{tv:C.tv}})})]}),(0,P.jsx)(`p`,{children:(0,P.jsx)(h,{namespace:z,phrase:`description`,options:{tv:C.tv}})}),(0,P.jsx)(`p`,{children:(0,P.jsx)(h,{namespace:z,phrase:`moreInfo`})}),x&&(0,P.jsx)(S,{initialValues:R,validationSchema:N(m),onSubmit:V,children:(0,P.jsx)(L,{onClickCancel:E,channels:m&&x.data,instanceRegion:f})})]})}export{V as TvRequestProgramView};
|
|
2
|
+
//# sourceMappingURL=5Z0rGCy2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bbv7q795.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":"umBAiBA,IAAA,EAAA,SAAA,EAAA,OACE,GAAA,EAAA,OAAA,GAAA,yBCbI,EAAY,EAAgB,iBADhB,8BAC2C,CAE7D,SAAgB,EAAyB,EAAsB,CAC7D,OAAO,GAAA,EAAA,EAAA,SACG,CAAC,MAAM,CACb,WAAA,EAAA,EAAA,SAAmB,CAAC,SAAS,EAAU,kBAAkB,CAAC,CAC1D,OAAA,EAAA,EAAA,SAAe,CAAC,SAAS,EAAU,kBAAkB,CAAC,CACtD,eAAA,EAAA,EAAA,SAAuB,CAAC,SAAS,EAAU,eAAe,CAAC,CAC3D,eAAA,EAAA,EAAA,SAAuB,CAAC,SAAS,EAAU,eAAe,CAAC,CAC3D,gBAAA,EAAA,EAAA,SAAwB,CACxB,UAAA,EAAA,EAAA,SAAkB,CACnB,CAAC,EAAA,EAAA,EAAA,SACM,CAAC,MAAM,CACb,OAAA,EAAA,EAAA,SAAe,CAAC,SAAS,EAAU,kBAAkB,CAAC,CACtD,UAAA,EAAA,EAAA,SAAkB,CACnB,CAAC,WCHA,EAAY,wBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAQ7D,SAAgB,EAAqB,EAAkC,CACrE,IAAM,EAAc,GAAuC,CAErD,EAAU,EAAW,OAAO,EAAW,IAAI,IAAI,KAAQ,EAAG,OAAO,CAAE,aAAa,CAChF,EAAU,EAAW,OAAO,EAAW,IAAI,EAAS,GAAI,OAAO,CAAE,aAAa,CAE9E,EAAa,EAAc,EAAM,eAAe,CAEtD,OACE,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,CACG,EAAM,WACL,EAAA,EAAA,MAAC,EAAD,CACE,GAAG,SACH,MAAO,EAAU,eAAe,CAChC,KAAK,YACL,MAAO,EAAY,OAAO,UAC1B,iBAAA,YALF,EAOE,EAAA,EAAA,KAAC,SAAD,CAAgB,MAAM,YAAI,EAAgB,UAAU,EAAW,qBAAA,CAA+B,CAAjF,EAAiF,CAC7F,EAAM,SAAS,IAAI,IAClB,EAAA,EAAA,KAAC,SAAD,CAAyB,MAAO,EAAQ,YAAK,GAAG,EAAQ,KAAK,MAAM,EAAQ,OAAO,GAAY,CAAjF,EAAQ,GAAyE,CAC9F,CAAA,IAIN,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,eAAe,CAChC,YAAa,EAAU,qBAAqB,CAC5C,KAAK,OACL,KAAK,QACL,MAAO,EAAY,OAAO,MAC1B,iBAAA,GACA,CAAA,CAED,EAAM,WACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kBAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,qBAAqB,CACtC,KAAK,OACL,KAAK,gBACL,MAAO,EAAY,OAAO,cAC1B,IAAK,EACL,IAAK,EACL,iBAAA,GACA,CAAA,CACE,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,qBAAqB,CACtC,KAAK,OACL,KAAK,gBACL,MAAO,EAAY,OAAO,cAC1B,UAAU,OACV,iBAAA,GACA,CAAA,CACE,CAAA,CAAA,IAIV,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,kBACX,EAAA,EAAA,KAAC,QAAD,CAAA,UAAO,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAQ,EAAW,sBAAyB,CAAA,CAAQ,CAAA,CACrF,CAAA,CAEH,EAAM,WACL,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,kBAAf,EACE,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,sBACb,EAAA,EAAA,MAAC,EAAD,CACE,GAAG,SACH,MAAO,EAAU,UAAU,CAC3B,KAAK,iBACL,MAAO,EAAY,OAAO,wBAJ5B,EAME,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,YAAI,EAAgB,UAAU,EAAW,OAAA,CAAiB,CAAA,EACxE,EAAA,EAAA,KAAC,SAAD,CAAQ,MAAM,eAAO,EAAgB,UAAU,EAAW,QAAA,CAAkB,CAAA,CAAA,GAE1E,CAAA,EACN,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,OAAa,CAAA,CAAA,IAIhC,EAAA,EAAA,KAAC,EAAD,CACE,MAAO,EAAU,EAAM,SAAW,gBAAkB,sBAAsB,CAC1E,YAAa,EAAU,EAAM,SAAW,sBAAwB,4BAA4B,CAC5F,KAAK,OACL,KAAK,WACL,MAAO,EAAY,OAAO,SAC1B,CAAA,EAEF,EAAA,EAAA,KAAC,IAAD,CAAA,UAAG,EAAA,EAAA,KAAC,EAAD,CAAiB,UAAA,EAAW,OAAO,OAAO,QAAS,CAAE,GAAI,EAAW,GAAA,CAAQ,CAAA,CAAI,CAAA,EAEnF,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAU,SAAS,CACzB,QAAS,EAAM,cACf,QAAQ,OACR,CAAA,EACF,EAAA,EAAA,KAAC,EAAD,CAAoC,QAAQ,OAAO,WAAY,EAAU,UAAA,CAAa,CAAA,CACzE,CAAA,CAAA,CACV,CAAA,CAAA,CClGX,IAAM,EAAiB,CACrB,UAAW,GACX,MAAO,GACP,cAAe,GACf,cAAe,GACf,eAAgB,GAChB,SAAU,GACX,CAEK,EAAY,oBACZ,EAAY,EAAgB,iBAAiB,EAAU,CAM7D,SAAgB,EAAqB,EAA8B,CACjE,IAAM,EAAa,GAAyB,CACtC,EAAS,GAAW,CAEpB,EAAc,EAAkC,EAAa,aAAa,CAAC,CAC3E,EAAiB,EAAY,MAAM,eACnC,EAAmB,IAAmB,EAAe,GACrD,EAAO,IAAmB,EAAe,GACzC,EAAW,EAA+B,GAAQ,EAAiB,SAAS,EAAY,KAAK,WAAW,CAAC,CAEzG,EAAW,EACf,GAAoB,EAAW,eAAe,CAC/C,CAEK,EAAa,EAAc,EAAe,CAEhD,SAAS,GAAgB,CACvB,EAAM,YAAY,CAGpB,GAAM,CAAE,UAAS,6BAA8B,GAAsC,CAErF,SAAS,EAAgB,EAAkC,CACzD,GAAI,EAAkB,CACpB,IAAM,EAAU,EAAS,MAAM,KAAK,GAAW,OAAO,EAAQ,GAAG,GAAK,EAAY,UAAU,CAC5F,EAAO,QACL,EACE,iBACA,CACE,GAAI,EAAW,GACf,QAAS,EAAY,MACrB,QAAS,GAAS,KACnB,CACF,CACF,CACD,EAAgB,cACd,CAAE,QAAS,EAAQ,GAAI,KAAM,EAAQ,KAAM,QAAS,EAAY,MAAO,OAAQ,EAAM,OAAQ,CAC7F,CACE,WAAY,EAAW,OACvB,OAAQ,EAAW,MACnB,SAAU,EAAgB,MAC1B,cAAe,EAAc,SAC7B,WAAY,EAAa,eAC1B,CACF,MAED,EAAO,QACL,EACE,mBACA,CACE,GAAI,EAAW,GACf,QAAS,EAAY,MACtB,CACF,CACF,CACD,EAAgB,cACd,CAAE,QAAS,EAAY,MAAO,OAAQ,EAAM,OAAQ,CACpD,CACE,WAAY,EAAW,OACvB,OAAQ,EAAW,MACnB,SAAU,EAAgB,MAC1B,cAAe,EAAc,SAC7B,WAAY,EAAa,eAC1B,CACF,CAIL,SAAS,EAAe,EAA8E,CACpG,GAAM,CAAE,gBAAe,gBAAe,iBAAgB,GAAG,GAAgB,EAyBzE,OAvBI,EACK,CACL,MAAO,EAAY,MACnB,SAAU,EAAY,SACtB,MAAO,EAAS,KAAK,MACrB,aAAc,EAAS,KAAK,KAC5B,MAAO,EAAY,KAAK,MACxB,KAAM,EAAmB,OACzB,SAAU,EAAY,KAAK,SAC5B,CAGC,EACK,CACL,GAAG,EACH,eAAgB,EAAQ,EACxB,WAAY,EAAM,OAClB,gBAAiB,GAAG,EAAc,GAAG,IACrC,OAAQ,EAAY,MAAM,GAC1B,WAAY,EAAY,MAAM,WAC/B,CAGI,CACL,GAAG,EACH,WAAY,EAAM,OAClB,OAAQ,EAAY,MAAM,GAC1B,WAAY,EAAY,MAAM,WAC/B,CAGH,eAAe,EACb,EACA,EACA,CACA,IAAM,EAAc,EAAe,EAAO,CACpC,EAAU,EACd,EAAW,iBAAiB,EAAuC,CACnE,EAAW,eAAe,EAAqC,CAEjE,GAAI,CACF,MAAM,EAAW,EAAQ,CACzB,GAAQ,CACR,EAAgB,EAAO,OAChB,EAAK,CACZ,EAA0B,EAAK,EAAU,QAAQ,CAAE,EAAU,eAAe,CAAC,CAG/E,EAAM,YAAY,CAGpB,IAAM,EAAa,EAAY,eAAkB,GAAoB,EAAS,cAAiB,CAAC,GAEhG,OACE,EAAA,EAAA,MAAC,EAAD,CACE,MAAO,EAAU,QAAS,CAAE,GAAI,EAAW,GAAI,CAAC,CAChD,WAAY,EAAM,WAClB,mBAAoB,CAAC,GAAa,WAHpC,CAKG,EAAQ,iBAAiB,GACxB,EAAA,EAAA,MAAC,MAAD,CAAK,UAAU,sBAAsB,KAAK,iBAA1C,EACE,EAAA,EAAA,KAAC,KAAD,CAAI,UAAU,eACZ,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,sBAAuB,CAAA,CACvD,CAAA,EACL,EAAA,EAAA,KAAC,IAAD,CAAG,UAAU,gBACX,EAAA,EAAA,KAAC,EAAD,CAAiB,YAAW,OAAO,mBAAmB,QAAS,CAC7D,GAAI,EAAW,GAAA,CACZ,CAAA,CACH,CAAA,CAAA,IAGR,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CACa,YACX,OAAO,cACP,QAAS,CAAE,GAAI,EAAW,GAAA,CAC1B,CAAA,CACA,CAAA,EACJ,EAAA,EAAA,KAAC,IAAD,CAAA,UACE,EAAA,EAAA,KAAC,EAAD,CACa,YACX,OAAO,WACP,CAAA,CACA,CAAA,CACH,IACC,EAAA,EAAA,KAAC,EAAD,CACE,cAAe,EACf,iBAAkB,EAAyB,EAAiB,CAC5D,SAAU,YAEV,EAAA,EAAA,KAAC,EAAD,CACiB,gBACf,SAAU,GAAoB,EAAS,KACvB,iBAChB,CAAA,CACU,CAAA"}
|
|
1
|
+
{"version":3,"file":"5Z0rGCy2.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,S as n,b as r,bt as i,d as a,fn as o,k as s,s as c,t as l,x as u}from"./B1i9atik.chunk.js";import{_ as d}from"./NpQVkKE2.chunk.js";import{d as f,l as p}from"./TJBzqR6k.chunk.js";import{t as m}from"./CzvVp9iC.chunk.js";import{t as h}from"./Cw-_K29Z.chunk.js";import{n as g}from"./DJQC03A3.chunk.js";import{t as _}from"./YhCzLJGK.chunk.js";import{t as v}from"./DKbUI-vj.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{C as e,D as t,S as n,b as r,bt as i,d as a,fn as o,k as s,s as c,t as l,x as u}from"./B1i9atik.chunk.js";import{_ as d}from"./NpQVkKE2.chunk.js";import{d as f,l as p}from"./TJBzqR6k.chunk.js";import{t as m}from"./CzvVp9iC.chunk.js";import{t as h}from"./Cw-_K29Z.chunk.js";import{n as g}from"./DJQC03A3.chunk.js";import{t as _}from"./YhCzLJGK.chunk.js";import{t as v}from"./DKbUI-vj.chunk.js";import{H as y,I as b,M as x,U as S,Z as C,z as w}from"./app-lnmpv5W4.js";import{i as T,n as E,t as D}from"./mkasrghR2.chunk.js";import{t as O}from"./s776Po8a2.chunk.js";import{t as k}from"./BEyI0jsC2.chunk.js";import{t as A}from"./dkfSCDWH2.chunk.js";import{t as j}from"./CnWmhvi9.chunk.js";import{t as ee}from"./BwAvKeam.chunk.js";import{t as te}from"./CCvXN2-C.chunk.js";import{t as M}from"./c2oA1XgG.chunk.js";import{t as N}from"./Bu37Hprb2.chunk.js";import{t as P}from"./C1guWVFU2.chunk.js";var F=o(s()),I=o(t()),L=e(),R=`shared.flagRemovalRadio`,z=m.encloseNamespace(R);function B(){let e=y();function t(t){e.setFieldValue(`suggestion`,t)}function n(){return[z(`nonEducational`),z(`poorQuality`),z(`offensive`),z(`copyright`),z(`ageAppropriate`),z(`audio`),z(`other`)]}return(0,L.jsxs)(`div`,{className:`mb-3`,children:[(0,L.jsxs)(`label`,{className:`form-label`,children:[(0,L.jsx)(b,{namespace:R,phrase:`flagRemovalReasonLabel`}),(0,L.jsx)(`span`,{className:`text-danger`,children:`*`})]}),n().map((n,r)=>(0,L.jsx)(g.Check,{type:`radio`,label:n,name:n,id:`flag-${r}`,onChange:()=>t(n),checked:e.values.suggestion===n,className:`mb-2`},r))]})}var V=`shared.suggestEditForm`;function H(e){let t=y(),[n,r]=I.useState(),[i,a]=I.useState(!1);function o(n){let i=t?.values.property&&e.metadataValue===n.name;t.setFieldValue(`suggestion`,i?``:n.name),r(n),a(i)}return(0,L.jsxs)(`div`,{className:`form-group`,children:[(0,L.jsx)(`label`,{className:`form-label`,children:(0,L.jsx)(b,{namespace:V,phrase:`suggestLabel`})}),(0,L.jsx)(`div`,{"aria-describedby":`suggestEditRatingError`,children:(0,L.jsx)(h,{children:e.ratings.map(e=>(0,L.jsx)(d,{onClick:()=>o(e),className:`btn ${e.id===n?.id?`btn-dark`:`btn-outline-dark`}`,children:e.code},e.id))})}),i&&(0,L.jsx)(j,{name:`suggestEditRating`,children:(0,L.jsx)(b,{namespace:V,phrase:`ratingError`})})]})}var U=o(D()),W=m.encloseNamespace(`shared.suggestEditValidation`);function G(){return(0,U.object)().shape({property:(0,U.string)().required(W(`metadata`)),reason:(0,U.string)().when(`property`,{is:e=>e===`FlagRemoval`,then:(0,U.string)().notRequired(),otherwise:(0,U.string)().required(W(`reason`))}),suggestion:(0,U.string)().required(W(`suggestion`)),currentValue:(0,U.string)()})}var K=function(e){return e.VideoTitle=`video title`,e.Description=`description`,e.Rating=`rating`,e.SeriesTitle=`series title`,e.Season=`season number`,e.EpisodeNumber=`episode number`,e.BroadcastDate=`broadcast date`,e.Channel=`channel`,e.ProductionYear=`production year`,e.Distributors=`distributors`,e.ProductionCompanies=`production companies`,e.Directors=`directors`,e.Producers=`producers`,e.FlagRemoval=`flag for removal`,e.Other=`other`,e}({}),q={VideoTitle:{name:K.VideoTitle,property:`name`},Description:{name:K.Description,property:`description`},Rating:{name:K.Rating,property:`rating.name`},SeriesTitle:{name:K.SeriesTitle,property:`series.name`},Season:{name:K.Season,property:`season.number`},EpisodeNumber:{name:K.EpisodeNumber,property:`episodeNumber`},BroadcastDate:{name:K.BroadcastDate,property:`dateBroadcast`},Channel:{name:K.Channel,property:`channel.name`},ProductionYear:{name:K.ProductionYear,property:`productionYear`},Distributors:{name:K.Distributors,property:`distributors`,collection:!0},ProductionCompanies:{name:K.ProductionCompanies,property:`productionCompanies`,collection:!0},Directors:{name:K.Directors,property:`directors`,collection:!0},Producers:{name:K.Producers,property:`producers`,collection:!0},FlagRemoval:{name:K.FlagRemoval},Other:{name:K.Other}},J=`shared.suggestEditForm`,Y=m.encloseNamespace(J),X={property:``,suggestion:``,reason:``,currentValue:``};function Z(e){let t=e.ratings?.filter(e=>e.code),n=y(),[r,i]=I.useState(),a=n?.values.property;I.useEffect(()=>{let e=o();n.setValues({property:a,reason:``,suggestion:``,currentValue:e||``}),n.setTouched({}),i(e)},[a]);function o(){let t=q[a];if(!t||!t.property)return null;let n=(0,F.default)(e.video,t.property);if(!n||t.collection&&!n.data.length)return Y(`none`);switch(t.collection&&(n=n.data.map(e=>e.name).join(`, `)),a){case`BroadcastDate`:return _.format(n,`D MMMM YYYY`);default:return n}}return(0,L.jsxs)(w,{children:[(0,L.jsxs)(T,{as:`select`,label:Y(`metadataLabel`),id:`property`,name:`property`,value:a,className:`text-capitalize`,showRequiredStar:!0,children:[(0,L.jsx)(`option`,{value:``,children:Y(`metadataPlaceholder`)}),Object.keys(q).map((e,t)=>(0,L.jsx)(`option`,{value:e,children:q[e].name},t))]}),a&&(0,L.jsxs)(L.Fragment,{children:[r&&(0,L.jsxs)(L.Fragment,{children:[(0,L.jsxs)(`p`,{className:`fw-semibold mb-0`,children:[(0,L.jsx)(b,{namespace:J,phrase:`currentValueLabel`}),` `,(0,L.jsx)(`span`,{children:q[a]?.name})]}),(0,L.jsx)(`p`,{children:r})]}),a===`Rating`&&(0,L.jsx)(H,{ratings:t,metadataValue:r}),a===`FlagRemoval`&&(0,L.jsx)(B,{}),a!==`Rating`&&a!==`FlagRemoval`&&(0,L.jsx)(T,{label:Y(`suggestLabel`),placeholder:Y(`suggestPlaceholder`),type:`text`,id:`suggestion`,name:`suggestion`,value:n?.values.suggestion,showRequiredStar:!0}),a===`FlagRemoval`?(0,L.jsx)(T,{label:Y(`flagRemovalCommentsLabel`),placeholder:Y(`flagRemovalCommentsPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason}):(0,L.jsx)(T,{label:Y(`reasonLabel`),placeholder:Y(`reasonPlaceholder`),type:`text`,id:`reason`,name:`reason`,value:n?.values.reason,showRequiredStar:!0})]}),(0,L.jsxs)(x,{children:[(0,L.jsx)(x.Cancel,{text:Y(`cancel`),onClick:e.closePopup,variant:`link`}),(0,L.jsx)(P,{variant:`dark`,submitText:Y(`submit`)})]})]})}function ne(e){return(0,L.jsx)(E,{initialValues:X,validationSchema:G(),onSubmit:e.onClickSubmit,children:(0,L.jsx)(Z,{...e})})}var Q=`exchange.suggestEdit`,$=m.encloseNamespace(Q);function re(e){let t=f(),o=k(),{loading:s,handleGenerateReportError:d}=A(),m=p(C.config()),h=p(v.currentUser()),g=p(O.video(e.videoId)),_=p(N.ratings()),{previewContext:y,clearPreviewContext:x}=M(e.videoId,!1);async function w(e,i){try{await t(te.suggestEdit(g.data.id,e)),o.success($(`success`)),T(),l.logUserAction({id:g.data.id,name:g.data.name},{actionType:r.Submit,entity:c.Video,descriptor:u.SuggestEdit,location:a.Popup,workflowPhase:n.Complete})}catch(e){d(e,$(`error`),$(`noEmailError`))}finally{i()}}function T(){e.closePopup(),y?.appLink&&(ee.preventScrollTop(),i.trigger(y.appLink),x())}return m.hasCompleted&&h.hasCompleted&&g.hasCompleted&&_.hasCompleted?(0,L.jsxs)(S,{title:$(`title`),closePopup:T,showLoadingSpinner:s,children:[(0,L.jsx)(`p`,{children:(0,L.jsx)(b,{namespace:Q,phrase:`description`})}),(0,L.jsx)(ne,{video:g.data,ratings:_.data,closePopup:T,onClickSubmit:w})]}):(0,L.jsx)(L.Fragment,{})}export{re as ExchangeSuggestEditView};
|
|
2
|
+
//# sourceMappingURL=8vJGuJF-2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Buz0cl_A2.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":"8vJGuJF-2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval.tsx","../../../../libs/shared/src/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector.tsx","../../../../libs/shared/src/components/suggest-edit-form/validation/SuggestEditValidation.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditMetadataTypes.ts","../../../../libs/shared/src/components/suggest-edit-form/SuggestEditForm.tsx","../../src/apps/exchange/views/exchange-suggest-edit/ExchangeSuggestEditView.tsx"],"sourcesContent":["import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.flagRemovalRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditFlagRemoval() {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n function onSelectOption(option: string) {\n formikProps.setFieldValue('suggestion', option);\n }\n\n function flagRemovalRadioOptions() {\n return [\n getPhrase('nonEducational'),\n getPhrase('poorQuality'),\n getPhrase('offensive'),\n getPhrase('copyright'),\n getPhrase('ageAppropriate'),\n getPhrase('audio'),\n getPhrase('other')\n ];\n }\n\n return (\n <div className='mb-3'>\n <label className='form-label'>\n <Text namespace={namespace} phrase='flagRemovalReasonLabel' />\n <span className='text-danger'>*</span>\n </label>\n {flagRemovalRadioOptions().map((option, index) => (\n <Form.Check\n type='radio'\n key={index}\n label={option}\n name={option}\n id={`flag-${index}`}\n onChange={() => onSelectOption(option)}\n checked={formikProps.values.suggestion === option}\n className='mb-2'\n />\n ))}\n </div>\n );\n}\n","import React from 'react';\nimport { ButtonGroup } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { Rating } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nconst namespace = 'shared.suggestEditForm';\n\ninterface SuggestEditRatingSelectorProps {\n ratings: Rating[];\n metadataValue: string;\n}\n\nexport function SuggestEditRatingSelector(props: SuggestEditRatingSelectorProps) {\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ selectedRating, setSelectedRating ] = React.useState<Rating>();\n const [ isRatingInvalid, setIsRatingInvalid ] = React.useState<boolean>(false);\n \n function onRatingSelect(rating: Rating) {\n const isRatingInvalid = formikProps?.values.property && props.metadataValue === rating.name;\n formikProps.setFieldValue('suggestion', !isRatingInvalid ? rating.name : '');\n setSelectedRating(rating);\n setIsRatingInvalid(isRatingInvalid);\n }\n\n return (\n <div className='form-group'>\n <label className='form-label'><Text namespace={namespace} phrase='suggestLabel' /></label>\n <div aria-describedby='suggestEditRatingError'>\n <ButtonGroup>\n {props.ratings.map(rating => (\n <DivButton key={rating.id} onClick={() => onRatingSelect(rating)} className={`btn ${rating.id === selectedRating?.id ? 'btn-dark' : 'btn-outline-dark'}`}>\n {rating.code}\n </DivButton>\n ))}\n </ButtonGroup>\n </div>\n {isRatingInvalid && <FormFeedback name='suggestEditRating'><Text namespace={namespace} phrase='ratingError' /></FormFeedback>}\n </div>\n );\n}\n","import { object, string } from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.suggestEditValidation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SuggestEditValidation() {\n return object().shape({\n property: string().required((getPhrase('metadata'))),\n reason: string().when('property', {\n is: propertyValue => propertyValue === 'FlagRemoval',\n then: string().notRequired(),\n otherwise: string().required(getPhrase('reason'))\n }),\n suggestion: string().required(getPhrase('suggestion')),\n currentValue: string()\n });\n}\n","export enum MetadataType {\n VideoTitle = 'video title',\n Description = 'description',\n Rating = 'rating',\n SeriesTitle = 'series title',\n Season = 'season number',\n EpisodeNumber = 'episode number',\n BroadcastDate = 'broadcast date',\n Channel = 'channel',\n ProductionYear = 'production year',\n Distributors = 'distributors',\n ProductionCompanies = 'production companies',\n Directors = 'directors',\n Producers = 'producers',\n FlagRemoval = 'flag for removal',\n Other = 'other'\n}\n\nexport type MetadataTypeKey = keyof typeof MetadataType;\n\nexport type MetadataTypeMap = {\n [K in MetadataTypeKey]: {\n name: MetadataType,\n property?: string,\n collection?: boolean\n };\n};\n\nexport const MetadataTypes: MetadataTypeMap = {\n VideoTitle: {\n name: MetadataType.VideoTitle,\n property: 'name'\n },\n Description: {\n name: MetadataType.Description,\n property: 'description'\n },\n Rating: {\n name: MetadataType.Rating,\n property: 'rating.name'\n },\n SeriesTitle: {\n name: MetadataType.SeriesTitle,\n property: 'series.name'\n },\n Season: {\n name: MetadataType.Season,\n property: 'season.number'\n },\n EpisodeNumber: {\n name: MetadataType.EpisodeNumber,\n property: 'episodeNumber'\n },\n BroadcastDate: {\n name: MetadataType.BroadcastDate,\n property: 'dateBroadcast'\n },\n Channel: {\n name: MetadataType.Channel,\n property: 'channel.name'\n },\n ProductionYear: {\n name: MetadataType.ProductionYear,\n property: 'productionYear'\n },\n Distributors: {\n name: MetadataType.Distributors,\n property: 'distributors',\n collection: true\n },\n ProductionCompanies: {\n name: MetadataType.ProductionCompanies,\n property: 'productionCompanies',\n collection: true\n },\n Directors: {\n name: MetadataType.Directors,\n property: 'directors',\n collection: true\n },\n Producers: {\n name: MetadataType.Producers,\n property: 'producers',\n collection: true\n },\n FlagRemoval: {\n name: MetadataType.FlagRemoval\n },\n Other: {\n name: MetadataType.Other\n }\n};\n","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\nimport get from 'lodash/get';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { SuggestEditFlagRemoval } from 'libs/shared/components/suggest-edit-form/suggest-edit-flag-removal/SuggestEditFlagRemoval';\nimport { SuggestEditRatingSelector } from 'libs/shared/components/suggest-edit-form/suggest-edit-rating-selector/suggest-edit-rating-selector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BaseObject, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { SuggestEditValidation } from './validation/SuggestEditValidation';\nimport { MetadataTypeKey, MetadataTypes } from './SuggestEditMetadataTypes';\n\nconst namespace = 'shared.suggestEditForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst INITIAL_VALUES = {\n property: '',\n suggestion: '',\n reason: '',\n currentValue: ''\n};\n\ninterface SuggestEditFormProps {\n video: Video;\n ratings: Rating[];\n onClickSubmit: (\n data: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) => void;\n closePopup: () => void;\n}\n\nfunction SuggestEditForm(props: SuggestEditFormProps) {\n const ratings = props.ratings?.filter(rating => rating.code);\n const formikProps = useFormikContext<SuggestEditModel>();\n\n const [ metadataValue, setMetadataValue ] = React.useState<string>();\n\n const metadata = formikProps?.values.property as MetadataTypeKey;\n\n React.useEffect(() => {\n const metadataValue = getMetadataValue();\n formikProps.setValues({\n property: metadata,\n reason: '',\n suggestion: '',\n currentValue: metadataValue || ''\n });\n formikProps.setTouched({});\n setMetadataValue(metadataValue);\n }, [metadata]);\n\n function getMetadataValue(): string {\n const metadataType = MetadataTypes[metadata];\n\n if (!metadataType || !metadataType.property)\n return null;\n\n let currentValue = get(props.video, metadataType.property);\n\n if (!currentValue || (metadataType.collection && !currentValue.data.length))\n return getPhrase('none');\n\n if (metadataType.collection) {\n currentValue = (currentValue.data as BaseObject[]).map(obj => obj.name).join(', ');\n }\n\n switch (metadata) {\n case 'BroadcastDate':\n return DateHelper.format(currentValue, 'D MMMM YYYY');\n default:\n return currentValue;\n }\n }\n\n return (\n <Form>\n <FormField\n as='select'\n label={getPhrase('metadataLabel')}\n id='property'\n name='property'\n value={metadata}\n className='text-capitalize'\n showRequiredStar\n >\n <option value=''>{getPhrase('metadataPlaceholder')}</option>\n {Object.keys(MetadataTypes).map((metadata, index) => (\n <option key={index} value={metadata}>\n {MetadataTypes[metadata as keyof typeof MetadataTypes].name}\n </option>\n ))}\n </FormField>\n\n {metadata &&\n <>\n {metadataValue && (\n <>\n <p className='fw-semibold mb-0'>\n <Text namespace={namespace} phrase='currentValueLabel' /> <span>{MetadataTypes[metadata as MetadataTypeKey]?.name}</span>\n </p>\n <p>{metadataValue}</p>\n </>\n )}\n\n {metadata === 'Rating' && <SuggestEditRatingSelector ratings={ratings} metadataValue={metadataValue} />}\n {metadata === 'FlagRemoval' && <SuggestEditFlagRemoval />}\n {metadata !== 'Rating' && metadata !== 'FlagRemoval' &&\n <FormField\n label={getPhrase('suggestLabel')}\n placeholder={getPhrase('suggestPlaceholder')}\n type='text'\n id='suggestion'\n name='suggestion'\n value={formikProps?.values.suggestion}\n showRequiredStar\n />\n }\n\n {\n metadata === 'FlagRemoval' ? (\n <FormField\n label={getPhrase('flagRemovalCommentsLabel')}\n placeholder={getPhrase('flagRemovalCommentsPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n />\n ) : (\n <FormField\n label={getPhrase('reasonLabel')}\n placeholder={getPhrase('reasonPlaceholder')}\n type='text'\n id='reason'\n name='reason'\n value={formikProps?.values.reason}\n showRequiredStar\n />\n )\n }\n </>\n }\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('cancel')}\n onClick={props.closePopup}\n variant='link'\n />\n <FormButtons variant='dark' submitText={getPhrase('submit')} />\n </PopupButtons>\n </Form>\n );\n}\n\nexport function SuggestEditFormWrapper(props: SuggestEditFormProps) {\n return (\n <FormWrapper<SuggestEditModel>\n initialValues={INITIAL_VALUES}\n validationSchema={SuggestEditValidation()}\n onSubmit={props.onClickSubmit}\n >\n <SuggestEditForm {...props} />\n </FormWrapper>\n );\n}\n","\nimport React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { SuggestEditFormWrapper } from 'libs/shared/components/suggest-edit-form/SuggestEditForm';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useVerifiedEmailRequiredErrorHandler } from 'libs/shared/hooks/useVerifiedEmailRequiredErrorHandler';\nimport { Config, CurrentUser, PopupViewProps, Rating, Video } from 'libs/shared/interfaces';\nimport { SuggestEditModel } from 'libs/shared/interfaces/models/SuggestEdit';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\nconst namespace = 'exchange.suggestEdit';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeSuggestEditProps extends PopupViewProps {\n videoId: string;\n}\n\nexport function ExchangeSuggestEditView(props: ExchangeSuggestEditProps) {\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const { loading, handleGenerateReportError } = useVerifiedEmailRequiredErrorHandler();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.videoId));\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.videoId, false);\n\n async function onClickSubmit(\n values: SuggestEditModel,\n onDone: (options?: FormSubmissionOptions<SuggestEditModel>) => void\n ) {\n try {\n await fetchAsync(ExchangeRequests.suggestEdit(video.data.id, values));\n alerts.success(getPhrase('success'));\n closePopup();\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.SuggestEdit,\n location: LocationContext.Popup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n } catch (xhr) {\n handleGenerateReportError(xhr, getPhrase('error'), getPhrase('noEmailError'));\n } finally {\n onDone();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n const hasLoaded = (\n config.hasCompleted &&\n currentUser.hasCompleted &&\n video.hasCompleted &&\n ratings.hasCompleted\n );\n\n if (!hasLoaded) {\n return <></>;\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={loading}\n >\n <p><Text namespace={namespace} phrase='description' /></p>\n\n <SuggestEditFormWrapper\n video={video.data}\n ratings={ratings.data}\n closePopup={closePopup}\n onClickSubmit={onClickSubmit}\n />\n </Popup>\n );\n}\n"],"mappings":"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"}
|