@clickview/lite 0.104.0-rc.6 → 0.104.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 +807 -806
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{Dnz8CbEu.chunk.js → -QIG2ZHc.chunk.js} +3 -3
- package/dist/scripts/{Dnz8CbEu.chunk.js.map → -QIG2ZHc.chunk.js.map} +1 -1
- package/dist/scripts/{CEv1_bDW.chunk.js → -brFp4w1.chunk.js} +2 -2
- package/dist/scripts/{CEv1_bDW.chunk.js.map → -brFp4w1.chunk.js.map} +1 -1
- package/dist/scripts/{CX6c7KRp2.chunk.js → 0mx04bmJ2.chunk.js} +2 -2
- package/dist/scripts/{CX6c7KRp2.chunk.js.map → 0mx04bmJ2.chunk.js.map} +1 -1
- package/dist/scripts/{CMHxOVI7.chunk.js → 41LJfkjO.chunk.js} +2 -2
- package/dist/scripts/{CMHxOVI7.chunk.js.map → 41LJfkjO.chunk.js.map} +1 -1
- package/dist/scripts/{BBWnpWNB2.chunk.js → 7uvJMXC12.chunk.js} +2 -2
- package/dist/scripts/{BBWnpWNB2.chunk.js.map → 7uvJMXC12.chunk.js.map} +1 -1
- package/dist/scripts/{CaCm4N_d2.chunk.js → B-HfRX562.chunk.js} +2 -2
- package/dist/scripts/{CaCm4N_d2.chunk.js.map → B-HfRX562.chunk.js.map} +1 -1
- package/dist/scripts/{D9wxi5or2.chunk.js → B2_RD6Px2.chunk.js} +2 -2
- package/dist/scripts/{D9wxi5or2.chunk.js.map → B2_RD6Px2.chunk.js.map} +1 -1
- package/dist/scripts/{DSPMbDdF.chunk.js → B3_lC6bW.chunk.js} +2 -2
- package/dist/scripts/{DSPMbDdF.chunk.js.map → B3_lC6bW.chunk.js.map} +1 -1
- package/dist/scripts/{8JGe5Ug_2.chunk.js → B5GEXNkP2.chunk.js} +2 -2
- package/dist/scripts/{8JGe5Ug_2.chunk.js.map → B5GEXNkP2.chunk.js.map} +1 -1
- package/dist/scripts/{0Fek4oFk.chunk.js → BLE8DLAY.chunk.js} +2 -2
- package/dist/scripts/{0Fek4oFk.chunk.js.map → BLE8DLAY.chunk.js.map} +1 -1
- package/dist/scripts/{BgPye7Nd2.chunk.js → BRt-Kdnn2.chunk.js} +2 -2
- package/dist/scripts/{BgPye7Nd2.chunk.js.map → BRt-Kdnn2.chunk.js.map} +1 -1
- package/dist/scripts/BTWmC6pW.chunk.js +5 -0
- package/dist/scripts/BTWmC6pW.chunk.js.map +1 -0
- package/dist/scripts/{D3ncynN72.chunk.js → BVBpDZoT2.chunk.js} +3 -3
- package/dist/scripts/{D3ncynN72.chunk.js.map → BVBpDZoT2.chunk.js.map} +1 -1
- package/dist/scripts/{5PKjjI4Y.chunk.js → BapoiGsj.chunk.js} +2 -2
- package/dist/scripts/{5PKjjI4Y.chunk.js.map → BapoiGsj.chunk.js.map} +1 -1
- package/dist/scripts/{CNfmLVE82.chunk.js → Bc1JT5Y-2.chunk.js} +2 -2
- package/dist/scripts/{CNfmLVE82.chunk.js.map → Bc1JT5Y-2.chunk.js.map} +1 -1
- package/dist/scripts/{cDv6zuhh.chunk.js → BhE5KhcC.chunk.js} +2 -2
- package/dist/scripts/{cDv6zuhh.chunk.js.map → BhE5KhcC.chunk.js.map} +1 -1
- package/dist/scripts/{Bzk4AwVx2.chunk.js → BncgzKKQ2.chunk.js} +2 -2
- package/dist/scripts/{Bzk4AwVx2.chunk.js.map → BncgzKKQ2.chunk.js.map} +1 -1
- package/dist/scripts/{CV-fOLNI2.chunk.js → Bpf3Tyy12.chunk.js} +2 -2
- package/dist/scripts/{CV-fOLNI2.chunk.js.map → Bpf3Tyy12.chunk.js.map} +1 -1
- package/dist/scripts/{DPZnaz74.chunk.js → C1OiUBQI.chunk.js} +2 -2
- package/dist/scripts/{DPZnaz74.chunk.js.map → C1OiUBQI.chunk.js.map} +1 -1
- package/dist/scripts/{B1TqilLB.chunk.js → C6z8ii6C.chunk.js} +2 -2
- package/dist/scripts/{B1TqilLB.chunk.js.map → C6z8ii6C.chunk.js.map} +1 -1
- package/dist/scripts/{fMgBORUX.chunk.js → C8x-QH43.chunk.js} +2 -2
- package/dist/scripts/{fMgBORUX.chunk.js.map → C8x-QH43.chunk.js.map} +1 -1
- package/dist/scripts/{BiWUSyJr.chunk.js → CAkqvKfy.chunk.js} +2 -2
- package/dist/scripts/{BiWUSyJr.chunk.js.map → CAkqvKfy.chunk.js.map} +1 -1
- package/dist/scripts/{CjOMeOwb2.chunk.js → CGv0OFnc2.chunk.js} +2 -2
- package/dist/scripts/{CjOMeOwb2.chunk.js.map → CGv0OFnc2.chunk.js.map} +1 -1
- package/dist/scripts/{B82m7K0U.chunk.js → CJGWbJ4m.chunk.js} +2 -2
- package/dist/scripts/{B82m7K0U.chunk.js.map → CJGWbJ4m.chunk.js.map} +1 -1
- package/dist/scripts/{D-iyHqNw2.chunk.js → CLvImDXv2.chunk.js} +3 -3
- package/dist/scripts/{D-iyHqNw2.chunk.js.map → CLvImDXv2.chunk.js.map} +1 -1
- package/dist/scripts/{Cqq1N9xw.chunk.js → CM8248d7.chunk.js} +2 -2
- package/dist/scripts/{Cqq1N9xw.chunk.js.map → CM8248d7.chunk.js.map} +1 -1
- package/dist/scripts/Cr6TXzQQ2.chunk.js.map +1 -1
- package/dist/scripts/{B_TE5XUR2.chunk.js → CvilnM0u2.chunk.js} +2 -2
- package/dist/scripts/{B_TE5XUR2.chunk.js.map → CvilnM0u2.chunk.js.map} +1 -1
- package/dist/scripts/{AEOAlemi.chunk.js → Cwocc8uV.chunk.js} +2 -2
- package/dist/scripts/{AEOAlemi.chunk.js.map → Cwocc8uV.chunk.js.map} +1 -1
- package/dist/scripts/{Bld7iWR52.chunk.js → D-pn0sNx2.chunk.js} +2 -2
- package/dist/scripts/{Bld7iWR52.chunk.js.map → D-pn0sNx2.chunk.js.map} +1 -1
- package/dist/scripts/{Cyit3dMk.chunk.js → D78QEASE.chunk.js} +2 -2
- package/dist/scripts/{Cyit3dMk.chunk.js.map → D78QEASE.chunk.js.map} +1 -1
- package/dist/scripts/{Dtag-27K.chunk.js → DER8311r.chunk.js} +2 -2
- package/dist/scripts/{Dtag-27K.chunk.js.map → DER8311r.chunk.js.map} +1 -1
- package/dist/scripts/{CAD-W-lP.chunk.js → DFFJpTVB.chunk.js} +2 -2
- package/dist/scripts/{CAD-W-lP.chunk.js.map → DFFJpTVB.chunk.js.map} +1 -1
- package/dist/scripts/{CmnbQiBA.chunk.js → DSZaceCq.chunk.js} +2 -2
- package/dist/scripts/{CmnbQiBA.chunk.js.map → DSZaceCq.chunk.js.map} +1 -1
- package/dist/scripts/{CfNYFxJl2.chunk.js → D_1m0b_a2.chunk.js} +2 -2
- package/dist/scripts/{CfNYFxJl2.chunk.js.map → D_1m0b_a2.chunk.js.map} +1 -1
- package/dist/scripts/{-KvTbeQV.chunk.js → DhcRnxkp.chunk.js} +2 -2
- package/dist/scripts/{-KvTbeQV.chunk.js.map → DhcRnxkp.chunk.js.map} +1 -1
- package/dist/scripts/{DKDWcWxk.chunk.js → Dqn0sInF.chunk.js} +2 -2
- package/dist/scripts/{DKDWcWxk.chunk.js.map → Dqn0sInF.chunk.js.map} +1 -1
- package/dist/scripts/{DICsRDM42.chunk.js → Dz8KlJhf2.chunk.js} +2 -2
- package/dist/scripts/{DICsRDM42.chunk.js.map → Dz8KlJhf2.chunk.js.map} +1 -1
- package/dist/scripts/{D0b_r0MV.chunk.js → KjTtF4IH.chunk.js} +2 -2
- package/dist/scripts/{D0b_r0MV.chunk.js.map → KjTtF4IH.chunk.js.map} +1 -1
- package/dist/scripts/{CAs2Sere2.chunk.js → MW7W80HY2.chunk.js} +2 -2
- package/dist/scripts/{CAs2Sere2.chunk.js.map → MW7W80HY2.chunk.js.map} +1 -1
- package/dist/scripts/{CwFYdvvA.chunk.js → Okf3Hn0s.chunk.js} +2 -2
- package/dist/scripts/{CwFYdvvA.chunk.js.map → Okf3Hn0s.chunk.js.map} +1 -1
- package/dist/scripts/{Dt5731Ay.chunk.js → _lqYS5Jx.chunk.js} +2 -2
- package/dist/scripts/{Dt5731Ay.chunk.js.map → _lqYS5Jx.chunk.js.map} +1 -1
- package/dist/scripts/{app-DxHnJ6f2.js → app-H3wSQ-PR.js} +4 -4
- package/dist/scripts/{app-DxHnJ6f2.js.map → app-H3wSQ-PR.js.map} +1 -1
- package/dist/scripts/{Bkp6sdnZ2.chunk.js → dVOiGqhu2.chunk.js} +2 -2
- package/dist/scripts/{Bkp6sdnZ2.chunk.js.map → dVOiGqhu2.chunk.js.map} +1 -1
- package/dist/scripts/{B3AhKFfz.chunk.js → ftYw2FVB.chunk.js} +2 -2
- package/dist/scripts/{B3AhKFfz.chunk.js.map → ftYw2FVB.chunk.js.map} +1 -1
- package/dist/scripts/{DyE6EUDb.chunk.js → kjRiUKIL.chunk.js} +2 -2
- package/dist/scripts/{DyE6EUDb.chunk.js.map → kjRiUKIL.chunk.js.map} +1 -1
- package/dist/scripts/{B3y60nT5.chunk.js → pDWQ8Uj5.chunk.js} +2 -2
- package/dist/scripts/{B3y60nT5.chunk.js.map → pDWQ8Uj5.chunk.js.map} +1 -1
- package/dist/scripts/{BCqRKj1E2.chunk.js → s6NJOjzU2.chunk.js} +2 -2
- package/dist/scripts/{BCqRKj1E2.chunk.js.map → s6NJOjzU2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/DCT6XY8t.chunk.js +0 -5
- package/dist/scripts/DCT6XY8t.chunk.js.map +0 -1
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["scripts/
|
|
2
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{t as i}from"./CZgWQFsJ.chunk.js";import{t as a}from"./D_gWf2lC.chunk.js";var o=e(t()),s={embeddedPlayer:`_embeddedPlayer_1cqbo_1`,placeholder:`_placeholder_1cqbo_8`},c=n();function l(e){let t=r(a.config()),n=t.hasCompleted,l=o.useMemo(()=>o.lazy(()=>i(()=>import(`./
|
|
3
|
-
//# sourceMappingURL
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["scripts/CAkqvKfy.chunk.js","scripts/DAXXjFlN.chunk.js","scripts/BftnFbcr.chunk.js","scripts/CMDJWWg3.chunk.js","scripts/DPtsihFR.chunk.js","scripts/DMnm3Ewv.chunk.js","scripts/C2w0pmFW.chunk.js","scripts/wrLrTezN.chunk.js","scripts/NlCAcBdo.chunk.js","scripts/Dyy-PWHO.chunk.js","scripts/snXCXfT6.chunk.js","scripts/e57H3T-k.chunk.js","scripts/BVnMI-dl.chunk.js","scripts/Dr3Lux2e.chunk.js","scripts/wdQVW3s5.chunk.js","scripts/BGGL8m_U.chunk.js","scripts/B_N30_Kb.chunk.js","scripts/rPN1bfU12.chunk.js","scripts/BIzu5ufQ.chunk.js","scripts/CVHQXNzi2.chunk.js","scripts/_GCZ-60i.chunk.js","scripts/DFZS3Ffo.chunk.js","scripts/Bbp2U9GK.chunk.js","scripts/CduNFx13.chunk.js","css/9awfngRG.chunk.css","scripts/B2INd6bh.chunk.js","scripts/5ONJSThP.chunk.js","scripts/C7HU4huj.chunk.js","scripts/BRrNQXpU2.chunk.js","css/DVhPtkT7.chunk.css","scripts/WvK58Ge12.chunk.js","scripts/D3-wtcxf2.chunk.js","scripts/B3fF5gkg.chunk.js","scripts/DEZqrbCm.chunk.js","scripts/CQyJ7YGa.chunk.js","scripts/BDwjs8qz2.chunk.js","scripts/C0exjRXJ.chunk.js","scripts/Chgge8yX2.chunk.js","scripts/BteVhTv7.chunk.js","scripts/De16zmhB.chunk.js","scripts/BBEIIgZ6.chunk.js","css/BgzV9aK4.chunk.css","scripts/BicQH0Al.chunk.js","scripts/YjWbDb2Y.chunk.js","scripts/BRcHS92O2.chunk.js","scripts/Bs2PKr1I2.chunk.js","scripts/DZX1tZ-D2.chunk.js","scripts/BiqmNDlz2.chunk.js","scripts/BlGyXBAH2.chunk.js","scripts/Dc1hYuQ12.chunk.js","css/CuSUr3Gp.chunk.css","css/D5JKYURg.chunk.css","scripts/B1r_1ubU.chunk.js","scripts/C5f0lBCw2.chunk.js","css/DBshtiPC.chunk.css","scripts/Dqn0sInF.chunk.js","scripts/c7DC36s9.chunk.js","scripts/BVm7hIyo.chunk.js","scripts/BYSskNbK.chunk.js","scripts/FAs_d-DP.chunk.js","scripts/Bzihudtn.chunk.js","scripts/BFXddaSP.chunk.js","scripts/B3TDTJSl.chunk.js","scripts/CYSDN6kj.chunk.js","scripts/CVqxBe99.chunk.js","scripts/CNxJMwxC.chunk.js","scripts/CQRza4Ga.chunk.js","scripts/ByIC_M_8.chunk.js","scripts/Epqx0J1v.chunk.js","scripts/BUnh3rN0.chunk.js","css/zFl67mql.chunk.css","scripts/CXnhm0VS2.chunk.js","scripts/iZ7EqNA72.chunk.js","scripts/OL3Z6Yp62.chunk.js","scripts/TTO6HcNP.chunk.js","scripts/BJUbYu222.chunk.js","scripts/BBDxSGT52.chunk.js","scripts/jAbfamoi.chunk.js","scripts/DUXPuDp72.chunk.js","scripts/CdYjo8_g2.chunk.js","scripts/CbOJtYeK.chunk.js","scripts/CvHvrB-t.chunk.js","scripts/B6bB9two.chunk.js","scripts/BbgQJe-T.chunk.js","scripts/C1SLt-ar.chunk.js","scripts/CpFtf-tI2.chunk.js","scripts/CKOWgMyj2.chunk.js","scripts/D5yUWL7p2.chunk.js","scripts/xa4cS6Fq.chunk.js","scripts/DGmmTRu72.chunk.js","scripts/B_BV48Fy.chunk.js","scripts/BX0wDJmp.chunk.js","scripts/BruX4yYB.chunk.js","scripts/CqrjHjAN.chunk.js","scripts/Ky1--4w3.chunk.js","scripts/CZgWQFsJ.chunk.js","scripts/BGswYbRT.chunk.js","scripts/B9VCwo3g2.chunk.js","scripts/DsBWAM3I2.chunk.js","scripts/_42F7SIA2.chunk.js","scripts/Cr6TXzQQ2.chunk.js","scripts/CjA4Q5pm.chunk.js","scripts/CmcCVXi32.chunk.js","scripts/BcibGFe42.chunk.js","scripts/Cy6lZVxk.chunk.js","scripts/DYKH_3un.chunk.js","scripts/CunDpHqX2.chunk.js","css/0ZqRj7up.chunk.css","scripts/B5XaBzZh.chunk.js","scripts/DIENjKhZ.chunk.js","css/D2t3ESms.chunk.css","scripts/B_9JhhOa.chunk.js","scripts/BPavmm8c.chunk.js","css/DnhOr8Y7.chunk.css","scripts/CnnDkGmK.chunk.js","scripts/C3Wa868y.chunk.js","css/DvO5Hl4o.chunk.css","scripts/BhE5KhcC.chunk.js","scripts/CM8248d7.chunk.js","scripts/lhZ5v-iN2.chunk.js","css/BU5l8u5C.chunk.css","scripts/BiKac8UT2.chunk.js","scripts/Bc1JT5Y-2.chunk.js","scripts/CcI-EKxs.chunk.js","scripts/CsF4wDV1.chunk.js","scripts/6ZXIO06e.chunk.js","scripts/DlEtkSBj2.chunk.js","scripts/CnsLb4V9.chunk.js","scripts/Dhx_Wqdc.chunk.js","scripts/DaT2nTfp.chunk.js","scripts/CDeqAwMc.chunk.js","scripts/ss6ZpC3s.chunk.js","scripts/GvIHspQt.chunk.js","scripts/FFbkHQcg.chunk.js","scripts/ClpxGEGl.chunk.js","scripts/CvNHBl0q.chunk.js","scripts/C-k6FY-f.chunk.js","scripts/BLm6PYXX.chunk.js","scripts/BM2EJL9g.chunk.js","scripts/DqXpeRGy.chunk.js","scripts/CCrnRkGN2.chunk.js","scripts/CXVBjdpb.chunk.js","scripts/gl4k7dtw.chunk.js","scripts/CQ0MgG2c.chunk.js","scripts/_jJAx6fU.chunk.js","scripts/CLjADRa42.chunk.js","css/DVdh6HWj.chunk.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{t}from"./C2w0pmFW.chunk.js";import{t as n}from"./wrLrTezN.chunk.js";import{u as r}from"./BX0wDJmp.chunk.js";import{t as i}from"./CZgWQFsJ.chunk.js";import{t as a}from"./D_gWf2lC.chunk.js";var o=e(t()),s={embeddedPlayer:`_embeddedPlayer_1cqbo_1`,placeholder:`_placeholder_1cqbo_8`},c=n();function l(e){let t=r(a.config()),n=t.hasCompleted,l=o.useMemo(()=>o.lazy(()=>i(()=>import(`./CAkqvKfy.chunk.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146]))),[]);if(!n)return(0,c.jsx)(c.Fragment,{});let u=l;return(0,c.jsx)(o.Suspense,{fallback:(0,c.jsx)(`div`,{className:s.placeholder}),children:(0,c.jsx)(u,{viewKey:e.viewKey,playerApi:new URL(t.data.playerApiUrl),imageCdnUrl:t.data.imageCdnUrl,autoplay:!0,embed:!0,hotkeyElQuerySelector:`body`,className:s.embeddedPlayer})})}export{l as SmartEmbedView};
|
|
3
|
+
//# sourceMappingURL=-QIG2ZHc.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"mappings":";8UAgBA,SAAgB,EAAe,EAAyC,CACtE,IAAM,EAAS,EAA6B,EAAe,OAAO,CAAC,EAE7D,EACJ,EAAO,aAGH,IAAmB,cAAoB,eAAW,OAAO,wgBAA+B,EAAG,CAAC,CAAC,EAEnG,GAAI,CAAC,EACH,OAAO,qBAAI,GAEb,IAAM,EAAS,EACf,OACE,WAAO,SAAP,CAAgB,UAAU,SAAC,MAAD,CAAK,UAAW,EAAO,WAAc,aAC7D,SAAC,EAAD,CAEE,QAAS,EAAM,QACf,UAAW,IAAI,IAAI,EAAO,KAAK,YAAY,EAC3C,YAAa,EAAO,KAAK,YAGzB,YACA,SAGA,sBAAsB,OACtB,UAAW,EAAO,cACnB,EACa,EAEpB","names":[],"ignoreList":[],"sources":["../../src/apps/embed/views/smart-embed/SmartEmbedView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\n\nimport type { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport styles from './smart-embed.module.scss';\n\ninterface SmartEmbedViewProps {\n viewKey: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SmartEmbedView(props: SmartEmbedViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const hasLoaded = (\n config.hasCompleted\n );\n\n const LazyPlayer = React.useMemo(() => React.lazy(() => import('projects/player/react/Player')), []);\n\n if (!hasLoaded)\n return <></>;\n\n const Player = LazyPlayer as typeof ClickViewPlayer;\n return (\n <React.Suspense fallback={<div className={styles.placeholder} />}>\n <Player\n // Fetched\n viewKey={props.viewKey}\n playerApi={new URL(config.data.playerApiUrl)}\n imageCdnUrl={config.data.imageCdnUrl}\n\n // Options\n autoplay\n embed\n\n // Static\n hotkeyElQuerySelector='body'\n className={styles.embeddedPlayer}\n />\n </React.Suspense>\n );\n}\n"],"file":"
|
|
1
|
+
{"version":3,"mappings":";8UAgBA,SAAgB,EAAe,EAAyC,CACtE,IAAM,EAAS,EAA6B,EAAe,OAAO,CAAC,EAE7D,EACJ,EAAO,aAGH,IAAmB,cAAoB,eAAW,OAAO,wgBAA+B,EAAG,CAAC,CAAC,EAEnG,GAAI,CAAC,EACH,OAAO,qBAAI,GAEb,IAAM,EAAS,EACf,OACE,WAAO,SAAP,CAAgB,UAAU,SAAC,MAAD,CAAK,UAAW,EAAO,WAAc,aAC7D,SAAC,EAAD,CAEE,QAAS,EAAM,QACf,UAAW,IAAI,IAAI,EAAO,KAAK,YAAY,EAC3C,YAAa,EAAO,KAAK,YAGzB,YACA,SAGA,sBAAsB,OACtB,UAAW,EAAO,cACnB,EACa,EAEpB","names":[],"ignoreList":[],"sources":["../../src/apps/embed/views/smart-embed/SmartEmbedView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\n\nimport type { ClickViewPlayer } from 'projects/player/react/Player';\n\nimport styles from './smart-embed.module.scss';\n\ninterface SmartEmbedViewProps {\n viewKey: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function SmartEmbedView(props: SmartEmbedViewProps): JSX.Element {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const hasLoaded = (\n config.hasCompleted\n );\n\n const LazyPlayer = React.useMemo(() => React.lazy(() => import('projects/player/react/Player')), []);\n\n if (!hasLoaded)\n return <></>;\n\n const Player = LazyPlayer as typeof ClickViewPlayer;\n return (\n <React.Suspense fallback={<div className={styles.placeholder} />}>\n <Player\n // Fetched\n viewKey={props.viewKey}\n playerApi={new URL(config.data.playerApiUrl)}\n imageCdnUrl={config.data.imageCdnUrl}\n\n // Options\n autoplay\n embed\n\n // Static\n hotkeyElQuerySelector='body'\n className={styles.embeddedPlayer}\n />\n </React.Suspense>\n );\n}\n"],"file":"-QIG2ZHc.chunk.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,t as n}from"./snXCXfT6.chunk.js";import{_ as r,y as i}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n as a}from"./B785hxeE.chunk.js";import{t as o}from"./CQyJ7YGa.chunk.js";import{t as s}from"./e57H3T-k.chunk.js";import{t as c}from"./C2w0pmFW.chunk.js";import{t as l}from"./wrLrTezN.chunk.js";import{t as u}from"./BXTI9cmX.chunk.js";import{p as d,u as f}from"./BX0wDJmp.chunk.js";import{t as p}from"./CjA4Q5pm.chunk.js";import{U as m,l as ee,v as h,y as te,z as ne}from"./NlCAcBdo.chunk.js";import{t as g}from"./RjGIOTdP.chunk.js";import{t as _}from"./DTGfiG8Y.chunk.js";import{t as re}from"./DZX1tZ-D2.chunk.js";import{n as ie}from"./BDwjs8qz2.chunk.js";import{t as v}from"./DQgG9njb.chunk.js";import{t as y}from"./CqrjHjAN.chunk.js";import{t as b}from"./eoAypzU3.chunk.js";import{t as ae}from"./D_gWf2lC.chunk.js";import{t as oe}from"./_GCZ-60i.chunk.js";import{n as x}from"./CsF4wDV1.chunk.js";import{n as S}from"./sb8Be8SQ.chunk.js";import{t as se}from"./XIE88U01.chunk.js";import{t as C}from"./7-GJWRH82.chunk.js";import{n as w}from"./BRcHS92O2.chunk.js";import{t as T}from"./Bs2PKr1I2.chunk.js";import{t as E}from"./DpCWroEe2.chunk.js";import{n as D}from"./C0exjRXJ.chunk.js";import{t as O}from"./CduNFx13.chunk.js";import{n as ce,t as le}from"./C6-aC3vu.chunk.js";import{t as ue}from"./B3gsVN-_.chunk.js";import{t as de}from"./B_-pJtOI2.chunk.js";import{n as k}from"./CpFtf-tI2.chunk.js";import{n as A}from"./OL3Z6Yp62.chunk.js";import{t as j}from"./C3q_xvci.chunk.js";import{t as M}from"./Bv4_l1OV.chunk.js";import{t as N}from"./DaT2nTfp.chunk.js";import{i as fe}from"./CXVBjdpb.chunk.js";import{t as pe}from"./CQ0MgG2c.chunk.js";import{t as me}from"./C4SwJrBy.chunk.js";import{n as he}from"./ChnNWPOK2.chunk.js";import{t as P}from"./BiqmNDlz2.chunk.js";import{r as ge,t as _e}from"./C5uTRLOC2.chunk.js";import{t as ve}from"./CfwSprmF.chunk.js";import{t as ye}from"./CdYjo8_g2.chunk.js";import{n as F}from"./DduFT_FA.chunk.js";import{n as be,t as xe}from"./D5WAilZl.chunk.js";import{t as Se}from"./B_HsEzOv.chunk.js";import{t as Ce}from"./CSRpjM7n2.chunk.js";import{t as I}from"./BZFomoIH2.chunk.js";import{t as we}from"./tnBD84bg2.chunk.js";import{n as Te,t as L}from"./CtBGtgb32.chunk.js";import{t as Ee}from"./C9XBZFiR.chunk.js";import{t as De}from"./CLOak4u5.chunk.js";import{t as Oe}from"./DInbp0A6.chunk.js";import{t as ke}from"./C-mD9tw7.chunk.js";import{a as Ae,n as je,t as Me}from"./rC7x7DZa.chunk.js";import{t as R}from"./DcYW5Mhp.chunk.js";var z=e(c()),Ne=me(),Pe={logoContainer:`_logoContainer_vn3gg_1`},B=l(),Fe=`streamable.livestreamDetails`;function V(e){function r(){return`${p.diffBetween(e.endTime,e.startTime,`minutes`)}m`}function i(e){return I.convertUTCToTimezoneDate(e)}function a(e){return p.format(i(e),`h:mma`)}function o(e){return p.format(i(e),`Do MMMM`)}function c(e){return I.getTimezoneInfo(e).longGeneric}function l(){return g.getMergedPresentationAudienceString(e.audiences)?.name}let u=_e(e.companyName,ge);return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`d-flex align-items-center mb-2`,children:[e.logoUrl&&(0,B.jsx)(O,{appLink:e.companyAppLink,children:(0,B.jsx)(`div`,{className:`${Pe.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`,children:(0,B.jsx)(P,{data:T.createUrl(e.logoUrl,{size:w.Small}),alt:e.companyName,className:!e.logoBgColour&&u,imageStyle:{backgroundColor:e.logoBgColour},preload:!0})})}),(0,B.jsxs)(`div`,{className:`d-flex flex-column justify-content-between`,children:[e.companyName&&(0,B.jsx)(O,{appLink:e.companyAppLink,className:`text-uppercase text-wrap d-block text-truncate mb-0`,title:e.companyName,children:e.companyName}),(0,B.jsx)(`h1`,{className:`h4 mb-0`,children:e.eventName})]})]}),(0,B.jsxs)(`div`,{className:`d-flex gap-2 mb-3`,children:[!!e.audiences?.length&&(0,B.jsx)(`div`,{className:`rounded-pill border border-dark px-2`,children:l()}),(0,B.jsx)(`div`,{className:`rounded-pill fw-semibold bg-dark text-white px-2`,children:(0,B.jsx)(`span`,{className:`align-middle`,children:r()})})]}),e.isPastLivestream&&(0,B.jsxs)(`div`,{className:`d-inline-block bg-light-green rounded-pill mb-3`,children:[(0,B.jsx)(n,{svg:Te}),(0,B.jsx)(`p`,{className:`d-inline ms-1 mb-0`,children:(0,B.jsx)(k,{namespace:Fe,phrase:`pastEvent`})})]}),!e.isPastLivestream&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`p`,{className:`mb-2`,children:[(0,B.jsx)(n,{svg:v,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:a(e.startTime)})]}),(0,B.jsxs)(`p`,{className:`mb-2`,children:[(0,B.jsx)(n,{svg:ve,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:o(e.startTime)})]}),(0,B.jsxs)(`p`,{className:`mb-3`,children:[(0,B.jsx)(n,{svg:ye,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:c(e.timezone)})]})]}),e.description&&(0,B.jsx)(`p`,{className:`mb-3 pre-wrap text-break`,dangerouslySetInnerHTML:{__html:s.sanitize(we.linkifyText(e.description))}})]})}function Ie(e,t){return{...e,custom:{...e?.custom,source:t.source},event:{...e?.event,conversion:t.conversion}}}function Le(){let e=A(x.BrazeClient);function t({user:t,additionalData:n,source:r,eventType:i,conversion:a,productType:o,callback:s}){let c=Ie(t,{source:r,conversion:a});e.setUserInit(c),e.logFormEvent({eventType:i,additionalData:n,callback:s,internalOptions:{subscriptionGroups:o}})}return{client:e,logFormSubmission:t}}var Re=function(e){return e.LivestreamBooking=`cv_product_livestream`,e}({}),ze=function(e){return e.LivestreamBooking=`Submit - Livestream Booking`,e}({});function Be(){let{accessPolicy:e,isLoaded:t}=S(),n=f(y.currentUser()),r=!!e?.metadata?.maxLiveBookings,i=f(n.data?.isAuthenticated&&r&&L.customerLifetimeBookingCount()),a=n.hasCompleted&&(!r||i.hasCompleted&&t),o=e?.metadata?.maxLiveBookings??2**53-1,s=i.data?.count??0;return{isLoaded:a,accessPolicy:e,bookingsUsed:s,totalBookingsAvailable:o,hasReachedBookingLimit:s>=o,hasBookingLimitations:r}}var H={logo:`_logo_igal3_1`,image:`_image_igal3_2`},U=`livestream.bookingError`;function Ve(e){return(0,B.jsxs)(`div`,{className:`d-flex flex-column justify-content-center`,children:[(0,B.jsx)(`div`,{className:`${H.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,B.jsx)(`img`,{className:H.image,src:C.Live.General.LOST_MESSAGE_BOTTLE})}),(0,B.jsx)(`h3`,{className:`text-center mb-3`,children:(0,B.jsx)(k,{namespace:U,phrase:`heading`})}),(0,B.jsx)(`p`,{className:`text-center mb-3`,children:(0,B.jsx)(k,{namespace:U,phrase:`description`})}),(0,B.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onTryAgain,children:(0,B.jsx)(k,{namespace:U,phrase:`buttonLabel`})})]})}var W=`livestream.liveStreamBookingQuota`;function He(e){return(0,B.jsxs)(`div`,{className:`bg-light-blue rounded p-2 mt-3 d-flex flex-column gap-2`,role:`alert`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:(0,B.jsx)(k,{namespace:W,phrase:`bookingQuota`})}),`\xA0`,(0,B.jsx)(k,{namespace:W,phrase:`bookingQuotaUsed`,options:{bookingQuota:e.max,bookingQuotaUsed:e.used}})]}),e.showUpgrade&&(0,B.jsxs)(`div`,{children:[(0,B.jsx)(k,{namespace:W,phrase:`bookingQuotaReached`}),`\xA0`,(0,B.jsx)(k,{namespace:W,phrase:`requestUpgradePrefix`}),`\xA0`,(0,B.jsx)(O,{className:`btn-link d-inline-block text-info`,appLink:e.upgradeAppLink,children:(0,B.jsx)(k,{namespace:W,phrase:`requestUpgrade`})}),`.`]})]})}var Ue={logo:`_logo_1uhpx_1`},G=`livestream.bookingSuccess`;function We(e){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${Ue.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,B.jsx)(P,{data:T.createUrl(e.livestream.company.logo?.url,{size:w.Small}),alt:e.livestream.company.name,preload:!0})}),(0,B.jsxs)(`div`,{className:`d-flex align-items-center justify-content-center mb-3 gap-1`,children:[(0,B.jsx)(n,{svg:j,className:`svg-container std text-success`}),(0,B.jsx)(`h1`,{className:`h3 mb-0 fw-semibold`,children:(0,B.jsx)(k,{namespace:G,phrase:`booked`})})]}),(0,B.jsx)(`div`,{className:`my-3`,children:(0,B.jsx)(V,{companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime})}),(0,B.jsx)(`p`,{children:(0,B.jsx)(k,{namespace:G,phrase:`emailReminder`})})]})}function K(e){return(0,B.jsx)(`div`,{className:`${e.className}`,style:e.coverImageUrl&&{backgroundImage:`url(${T._createUrl(e.coverImageUrl,{size:w.Large})})`}})}var q=e(Se()),J=`livestream.livestreamView`,Y=o.encloseNamespace(J),X=q.object({firstName:q.string().required(Y(`firstNameRequired`)),lastName:q.string().required(Y(`lastNameRequired`)),email:q.string().email(Y(`emailValid`)).required(Y(`emailRequired`)),attendees:q.string().required(Y(`attendeesRequired`))}),Ge=X.concat(q.object({schoolOrDistrict:q.string().required(Y(`schoolOrDistrictRequired`)),jobTitle:q.string().required(Y(`jobTitleRequired`)),phoneNumber:q.string().required(Y(`phoneNumberRequired`)).matches(/^[0-9]+$/,Y(`phoneNumberValid`))}));function Ke(e){let t=be(),[n,r]=z.useState({}),[i,a]=z.useState(!1);function o(){t.setFieldValue(`schoolOrDistrict`,``),t.setFieldValue(`country`,``),t.setFieldValue(`province`,``),t.setFieldValue(`prospectId`,``),f()}function s(e){r({...n,...e}),o()}function c(){r({}),o()}function l(e){r({...n,...e}),t.setFieldValue(`schoolOrDistrict`,e.schoolName),t.setFieldValue(`country`,e.country),t.setFieldValue(`province`,e.province),t.setFieldValue(`prospectId`,e.prospectId),f()}function u(){r({...n,prospectId:void 0,schoolName:void 0,schoolPostCode:void 0}),o()}function d(e){a(!0),t.setFieldValue(`schoolOrDistrict`,e),f()}function f(){window.setTimeout(()=>t.validateForm(),0)}return(0,B.jsxs)(fe,{children:[(0,B.jsxs)(`div`,{className:`row my-3`,children:[(0,B.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,B.jsx)(F,{label:Y(`firstName`),name:`firstName`,placeholder:Y(`firstNamePlaceholder`),value:t.values?.firstName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,B.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,B.jsx)(F,{label:Y(`lastName`),name:`lastName`,placeholder:Y(`lastNamePlaceholder`),value:t.values?.lastName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,B.jsx)(`div`,{className:`col-12`,children:(0,B.jsx)(F,{label:Y(`email`),name:`email`,placeholder:Y(`emailPlaceholder`),value:t.values?.email,disabled:e.isAuthenticated&&!!e.emailAddress,showRequiredStar:!e.isAuthenticated||!e.emailAddress})}),!e.isAuthenticated&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`col-12`,children:i?(0,B.jsx)(F,{label:Y(`schoolOrDistrict`),name:`schoolOrDistrict`,value:t.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:Y(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Ae,{data:n,setData:s,clearData:c,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:e.googleMapsApiKey,required:!0,hideOnBlur:!0}),(0,B.jsx)(je,{data:n,setData:l,clearData:u,disabled:!n.schoolLocality,searchUrl:e.searchProspectsUrl,onClickNoSuggestions:d,required:!0,placeholder:!n.schoolLocality&&Y(`schoolPlaceholder`),hideOnBlur:!0})]})}),(0,B.jsx)(`div`,{className:`col-12`,children:(0,B.jsx)(Oe,{id:`job-title`,error:t.touched?.jobTitle&&t.errors?.jobTitle,countryCode:M.US,initialValue:t.values?.jobTitle,onChange:e=>t.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0})})]}),(0,B.jsx)(`div`,{className:`col-12 col-sm-6 col-xl-4`,children:(0,B.jsx)(F,{type:`number`,label:Y(`attendees`),name:`attendees`,placeholder:Y(`attendeesPlaceholder`),min:1,value:t.values?.attendees,showRequiredStar:!0})}),!e.isAuthenticated&&(0,B.jsx)(`div`,{className:`col`,children:(0,B.jsx)(F,{label:Y(`phoneNumber`),name:`phoneNumber`,placeholder:Y(`phoneNumberPlaceholder`),value:t.values?.phoneNumber,showRequiredStar:!0})})]}),(0,B.jsx)(pe,{type:`submit`,className:`w-100`,variant:`dark`,showSpinner:e.showSpinner,disabled:!t.isValid,children:(0,B.jsx)(k,{namespace:J,phrase:`book`})})]})}function qe(e){return(0,B.jsx)(xe,{initialValues:e.initialValues,validationSchema:e.isAuthenticated?X:Ge,validateOnMount:!0,onSubmit:e.onSubmit,children:(0,B.jsx)(Ke,{emailAddress:e.emailAddress,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}function Je(e,t){return{application:u.LIVESTREAMS,action:b.Livestreams.LIVESTREAM,args:[t,e?.id,s.slugify(e?.name)]}}var Z={noRecording:`_noRecording_uwnqe_1`,coverImage:`_coverImage_uwnqe_4`,popup:`_popup_uwnqe_10`,page:`_page_uwnqe_15`},Q=`livestream.livestreamView`,Ye=o.encloseNamespace(Q);function Xe(e){let t=!e.isAuthenticated&&!e.livestream.recording,n=e.bookingQuota.limitReached&&e.isAuthenticated&&!e.isStudent,r=!n&&!e.isPastLivestream&&!e.formStage&&e.isAuthenticated&&!e.isStudent,a={application:u.SIGN_UP,action:b.SignUp.SIGN_UP},o=i.getHref(i.getCurrentAppLink()),c={application:u.DEFAULT,action:b.Default.CHALLENGE,params:o===`/`?{}:{redirectUrl:o}},l={application:u.SIGN_UP,action:b.SignUp.UPGRADE},d={application:u.DASHBOARD,action:b.Dashboard.PARTNER_DASHBOARD,args:[e.presentationSlug,e.livestream.company.id,s.slugify(e.livestream.company.name)]};return(0,B.jsxs)(B.Fragment,{children:[!e.success&&!e.error&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(V,{logoUrl:e.livestream.company.logo?.url,logoBgColour:e.livestream.company.metadata?.colour,companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime,description:!e.formStage&&e.livestream.description,isPastLivestream:e.isPastLivestream,companyAppLink:d}),e.bookingQuota.showInfo&&(0,B.jsx)(He,{showUpgrade:n,max:e.bookingQuota.max,used:e.bookingQuota.used,upgradeAppLink:l}),e.formStage&&(0,B.jsx)(qe,{emailAddress:e.emailAddress,initialValues:e.initialValues,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),r&&(0,B.jsx)(`button`,{className:D(`btn btn-dark w-100`,{"mt-3":e.bookingQuota.showInfo}),onClick:()=>e.setFormStage(!0),children:(0,B.jsx)(k,{namespace:Q,phrase:`book`})}),e.isPastLivestream&&!e.livestream.recording&&(0,B.jsx)(`div`,{className:`${Z.noRecording} p-2 rounded`,children:(0,B.jsx)(k,{namespace:Q,phrase:`noRecording`})}),e.livestream.recording&&(0,B.jsx)(O,{appLink:{application:u.VIDEOS,action:b.Videos.PLAY_VIDEO,args:[e.presentationSlug,e.livestream.recording.id,s.slugify(e.livestream.recording.name)]},children:(0,B.jsx)(`button`,{className:`btn btn-outline-dark w-100`,children:(0,B.jsx)(k,{namespace:Q,phrase:`recording`})})}),t&&e.preferSignIn&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(O,{className:`mt-3 btn btn-dark w-100`,appLink:c,children:(0,B.jsx)(k,{namespace:Q,phrase:`signInToBookButton`})}),(0,B.jsxs)(`p`,{className:`mt-3 mb-0 text-center small text-secondary`,children:[(0,B.jsx)(k,{namespace:Q,phrase:`noAccount`}),(0,B.jsx)(O,{className:`info-link d-inline ms-1`,appLink:a,children:(0,B.jsx)(k,{namespace:Q,phrase:`signUpLink`})})]})]}),t&&!e.preferSignIn&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(O,{className:`mt-3 btn btn-dark w-100`,appLink:a,children:(0,B.jsx)(k,{namespace:Q,phrase:`signUpButton`})}),(0,B.jsxs)(`p`,{className:`mt-3 mb-0 text-center small text-secondary`,children:[(0,B.jsx)(k,{namespace:Q,phrase:`alreadyHaveAccount`}),(0,B.jsx)(O,{className:`info-link ms-1`,appLink:c,children:(0,B.jsx)(k,{namespace:Q,phrase:`signInButton`})})]})]})]}),e.success&&(0,B.jsx)(We,{livestream:e.livestream}),e.error&&(0,B.jsx)(Ve,{onTryAgain:e.onTryAgain})]})}function Ze(e){function t(){e.closePopup(),De.preventScrollTop();let t=E.getCurrentRoute().appLink;t.application===u.LIVESTREAMS&&t.action===b.Livestreams.LIVESTREAM&&i.trigger(E.getPreviousRoute()?.appLink)}return(0,B.jsxs)(N,{size:`xl`,bodyClassName:`rounded-3 overflow-hidden p-0`,closePopup:t,children:[(0,B.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,B.jsxs)(`div`,{className:`row g-0`,children:[(0,B.jsx)(`div`,{className:`col-12 col-lg-6`,children:(0,B.jsx)(K,{className:`${Z.coverImage} ${Z.popup}`,coverImageUrl:e.livestream.company.cover?.url})}),(0,B.jsx)(`div`,{className:`col-12 col-lg p-4 m-lg-2`,children:(0,B.jsx)(Xe,{...e})})]})]})}function Qe(e){return(0,B.jsxs)(`div`,{className:`row g-0 px-3`,children:[(0,B.jsx)(`div`,{className:`col-12 col-md-6 col-lg-5`,children:(0,B.jsx)(K,{className:`${Z.coverImage} ${Z.page} rounded`,coverImageUrl:e.livestream.company.cover?.url})}),(0,B.jsx)(`div`,{className:`col-12 col-md px-md-3 pt-2 pt-md-0`,children:(0,B.jsx)(Xe,{...e})})]})}function $e(e){let t=f(ae.config()),n=d(),i=Le(),[o,s]=z.useState(!1),[c,l]=z.useState(!1),[u,g]=z.useState(!1),[_,v]=z.useState(!1),[b,x]=z.useState({firstName:``,lastName:``,email:``,attendees:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:S}=Me(),C=Be(),w=f(y.currentUser()),T=f(L.livestream(e.id)),{hasPermissions:E}=ue(),D=E(a.StudentExperience);he({id:e.id,app:`livestreams`}),le({...ce.getDefaultMetadata({title:T.data?.name,description:T.data?.description,phraseContext:{phraseHandler:Ye,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:de.getCanonicalLink({customAppLink:Je(T.data,e.presentationSlug)}),allowIndexing:!0}),_isPopupUp:!e.fromPageLoad}),Ee(T),z.useEffect(()=>{!T.data||T.data?.status===ie.Published||r.throw(new se)},[T.data?.status]),z.useEffect(()=>{w.data?.isAuthenticated&&x({...b,firstName:w.data.givenName,lastName:w.data.familyName,email:w.data.email})},[w.data?.isAuthenticated]);async function O(e){if(C.hasBookingLimitations&&C.hasReachedBookingLimit){g(!0);return}try{v(!0),x(e),await n(L.createBooking({eventId:T.data.id,eventType:`Livestream`,firstName:e.firstName,lastName:e.lastName,email:e.email,attendees:e.attendees,status:1})),w.data?.isAuthenticated||S({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),j(m.Complete),M(e),l(!0)}catch{g(!0),s(!1)}finally{v(!1)}}function k(){g(!1),s(!0)}function A(){s(!0),j(m.Start)}function j(t){oe.logUserAction({id:T.data.id,name:T.data.name},{entity:ee.Livestream,actionType:ne.Submit,location:te.LivestreamBookingForm,descriptor:e.fromPageLoad?h.FullPage:h.Popup,workflowPhase:t})}async function M(e){let t=Re.LivestreamBooking;try{await n(R.createUser({email:e.email,source:t,instanceRegion:w.data?.instanceRegion,syncToCrm:!0}))}catch{}try{let r;e.prospectId&&(r=(await n(R.prospectLookups(e.prospectId)))?.find(e=>e.type===`crm_id`)?.externalId);let a={email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,custom:{accountAddress:e?.province?{countryCode:e?.country,province:ke.parseProvince(e?.province||``)}:void 0,accountName:e.schoolOrDistrict,jobTitle:e.jobTitle,crmId:r||void 0}};i.logFormSubmission({eventType:Ne.StreamableFormEvent.LivestreamBookingFormSubmit,source:t,conversion:ze.LivestreamBooking,user:a,productType:`sl`})}catch(e){console.error(`Failed to log submission event to Braze`,e)}}if(!(T.hasCompleted&&C.isLoaded&&t.hasCompleted))return(0,B.jsx)(B.Fragment,{});let N={livestream:T.data,formStage:o,initialValues:b,isAuthenticated:w.data?.isAuthenticated,isStudent:D,preferSignIn:e.preferSignIn,success:c,error:u,isPastLivestream:p.isBefore(T.data.endDateTime,new Date),showSpinner:_,onSubmit:O,onTryAgain:k,setFormStage:A,googleMapsApiKey:t.data.googleMapsApiKey,searchProspectsUrl:re.safeUrlConcat(t.data.gatewayApiUrl,`/v1/search/prospects`),emailAddress:w.data?.email,presentationSlug:e.presentationSlug,bookingQuota:{showInfo:C.hasBookingLimitations,limitReached:C.hasReachedBookingLimit,used:C.bookingsUsed,max:C.totalBookingsAvailable}};return e.fromPageLoad?(0,B.jsx)(Qe,{...N}):(0,B.jsx)(Ze,{...N,closePopup:e.closePopup})}var $=Ce({[_.StreamableLearning]:e=>(0,B.jsx)($e,{id:e.id,fromPageLoad:e.fromPageLoad,preferSignIn:e.preferSignIn,closePopup:e.closePopup,presentationSlug:e.presentationSlug})});$.displayName=`BaseLivestreamView`;export{$ as BaseLivestreamView};
|
|
2
|
-
//# sourceMappingURL
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,t as n}from"./snXCXfT6.chunk.js";import{_ as r,y as i}from"./BftnFbcr.chunk.js";import"./DFZS3Ffo.chunk.js";import{n as a}from"./B785hxeE.chunk.js";import{t as o}from"./CQyJ7YGa.chunk.js";import{t as s}from"./e57H3T-k.chunk.js";import{t as c}from"./C2w0pmFW.chunk.js";import{t as l}from"./wrLrTezN.chunk.js";import{t as u}from"./BXTI9cmX.chunk.js";import{p as d,u as f}from"./BX0wDJmp.chunk.js";import{t as p}from"./CjA4Q5pm.chunk.js";import{U as m,l as ee,v as h,y as te,z as ne}from"./NlCAcBdo.chunk.js";import{t as g}from"./RjGIOTdP.chunk.js";import{t as _}from"./DTGfiG8Y.chunk.js";import{t as re}from"./DZX1tZ-D2.chunk.js";import{n as ie}from"./BDwjs8qz2.chunk.js";import{t as v}from"./DQgG9njb.chunk.js";import{t as y}from"./CqrjHjAN.chunk.js";import{t as b}from"./eoAypzU3.chunk.js";import{t as ae}from"./D_gWf2lC.chunk.js";import{t as oe}from"./_GCZ-60i.chunk.js";import{n as x}from"./CsF4wDV1.chunk.js";import{n as S}from"./sb8Be8SQ.chunk.js";import{t as se}from"./XIE88U01.chunk.js";import{t as C}from"./7-GJWRH82.chunk.js";import{n as w}from"./BRcHS92O2.chunk.js";import{t as T}from"./Bs2PKr1I2.chunk.js";import{t as E}from"./DpCWroEe2.chunk.js";import{n as D}from"./C0exjRXJ.chunk.js";import{t as O}from"./CduNFx13.chunk.js";import{n as ce,t as le}from"./C6-aC3vu.chunk.js";import{t as ue}from"./B3gsVN-_.chunk.js";import{t as de}from"./B_-pJtOI2.chunk.js";import{n as k}from"./CpFtf-tI2.chunk.js";import{n as A}from"./OL3Z6Yp62.chunk.js";import{t as j}from"./C3q_xvci.chunk.js";import{t as M}from"./Bv4_l1OV.chunk.js";import{t as N}from"./DaT2nTfp.chunk.js";import{i as fe}from"./CXVBjdpb.chunk.js";import{t as pe}from"./CQ0MgG2c.chunk.js";import{t as me}from"./C4SwJrBy.chunk.js";import{n as he}from"./ChnNWPOK2.chunk.js";import{t as P}from"./BiqmNDlz2.chunk.js";import{r as ge,t as _e}from"./C5uTRLOC2.chunk.js";import{t as ve}from"./CfwSprmF.chunk.js";import{t as ye}from"./CdYjo8_g2.chunk.js";import{n as F}from"./DduFT_FA.chunk.js";import{n as be,t as xe}from"./D5WAilZl.chunk.js";import{t as Se}from"./B_HsEzOv.chunk.js";import{t as Ce}from"./CSRpjM7n2.chunk.js";import{t as I}from"./BZFomoIH2.chunk.js";import{t as we}from"./tnBD84bg2.chunk.js";import{n as Te,t as L}from"./CtBGtgb32.chunk.js";import{t as Ee}from"./C9XBZFiR.chunk.js";import{t as De}from"./CLOak4u5.chunk.js";import{t as Oe}from"./DInbp0A6.chunk.js";import{t as ke}from"./C-mD9tw7.chunk.js";import{a as Ae,n as je,t as Me}from"./rC7x7DZa.chunk.js";import{t as R}from"./DcYW5Mhp.chunk.js";var z=e(c()),Ne=me(),Pe={logoContainer:`_logoContainer_vn3gg_1`},B=l(),Fe=`streamable.livestreamDetails`;function V(e){function r(){return`${p.diffBetween(e.endTime,e.startTime,`minutes`)}m`}function i(e){return I.convertUTCToTimezoneDate(e)}function a(e){return p.format(i(e),`h:mma`)}function o(e){return p.format(i(e),`Do MMMM`)}function c(e){return I.getTimezoneInfo(e).longGeneric}function l(){return g.getMergedPresentationAudienceString(e.audiences)?.name}let u=_e(e.companyName,ge);return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{className:`d-flex align-items-center mb-2`,children:[e.logoUrl&&(0,B.jsx)(O,{appLink:e.companyAppLink,children:(0,B.jsx)(`div`,{className:`${Pe.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`,children:(0,B.jsx)(P,{data:T.createUrl(e.logoUrl,{size:w.Small}),alt:e.companyName,className:!e.logoBgColour&&u,imageStyle:{backgroundColor:e.logoBgColour},preload:!0})})}),(0,B.jsxs)(`div`,{className:`d-flex flex-column justify-content-between`,children:[e.companyName&&(0,B.jsx)(O,{appLink:e.companyAppLink,className:`text-uppercase text-wrap d-block text-truncate mb-0`,title:e.companyName,children:e.companyName}),(0,B.jsx)(`h1`,{className:`h4 mb-0`,children:e.eventName})]})]}),(0,B.jsxs)(`div`,{className:`d-flex gap-2 mb-3`,children:[!!e.audiences?.length&&(0,B.jsx)(`div`,{className:`rounded-pill border border-dark px-2`,children:l()}),(0,B.jsx)(`div`,{className:`rounded-pill fw-semibold bg-dark text-white px-2`,children:(0,B.jsx)(`span`,{className:`align-middle`,children:r()})})]}),e.isPastLivestream&&(0,B.jsxs)(`div`,{className:`d-inline-block bg-light-green rounded-pill mb-3`,children:[(0,B.jsx)(n,{svg:Te}),(0,B.jsx)(`p`,{className:`d-inline ms-1 mb-0`,children:(0,B.jsx)(k,{namespace:Fe,phrase:`pastEvent`})})]}),!e.isPastLivestream&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`p`,{className:`mb-2`,children:[(0,B.jsx)(n,{svg:v,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:a(e.startTime)})]}),(0,B.jsxs)(`p`,{className:`mb-2`,children:[(0,B.jsx)(n,{svg:ve,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:o(e.startTime)})]}),(0,B.jsxs)(`p`,{className:`mb-3`,children:[(0,B.jsx)(n,{svg:ye,size:t.Small}),(0,B.jsx)(`span`,{className:`ms-1`,children:c(e.timezone)})]})]}),e.description&&(0,B.jsx)(`p`,{className:`mb-3 pre-wrap text-break`,dangerouslySetInnerHTML:{__html:s.sanitize(we.linkifyText(e.description))}})]})}function Ie(e,t){return{...e,custom:{...e?.custom,source:t.source},event:{...e?.event,conversion:t.conversion}}}function Le(){let e=A(x.BrazeClient);function t({user:t,additionalData:n,source:r,eventType:i,conversion:a,productType:o,callback:s}){let c=Ie(t,{source:r,conversion:a});e.setUserInit(c),e.logFormEvent({eventType:i,additionalData:n,callback:s,internalOptions:{subscriptionGroups:o}})}return{client:e,logFormSubmission:t}}var Re=function(e){return e.LivestreamBooking=`cv_product_livestream`,e}({}),ze=function(e){return e.LivestreamBooking=`Submit - Livestream Booking`,e}({});function Be(){let{accessPolicy:e,isLoaded:t}=S(),n=f(y.currentUser()),r=!!e?.metadata?.maxLiveBookings,i=f(n.data?.isAuthenticated&&r&&L.customerLifetimeBookingCount()),a=n.hasCompleted&&(!r||i.hasCompleted&&t),o=e?.metadata?.maxLiveBookings??2**53-1,s=i.data?.count??0;return{isLoaded:a,accessPolicy:e,bookingsUsed:s,totalBookingsAvailable:o,hasReachedBookingLimit:s>=o,hasBookingLimitations:r}}var H={logo:`_logo_igal3_1`,image:`_image_igal3_2`},U=`livestream.bookingError`;function Ve(e){return(0,B.jsxs)(`div`,{className:`d-flex flex-column justify-content-center`,children:[(0,B.jsx)(`div`,{className:`${H.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,B.jsx)(`img`,{className:H.image,src:C.Live.General.LOST_MESSAGE_BOTTLE})}),(0,B.jsx)(`h3`,{className:`text-center mb-3`,children:(0,B.jsx)(k,{namespace:U,phrase:`heading`})}),(0,B.jsx)(`p`,{className:`text-center mb-3`,children:(0,B.jsx)(k,{namespace:U,phrase:`description`})}),(0,B.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onTryAgain,children:(0,B.jsx)(k,{namespace:U,phrase:`buttonLabel`})})]})}var W=`livestream.liveStreamBookingQuota`;function He(e){return(0,B.jsxs)(`div`,{className:`bg-light-blue rounded p-2 mt-3 d-flex flex-column gap-2`,role:`alert`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:(0,B.jsx)(k,{namespace:W,phrase:`bookingQuota`})}),`\xA0`,(0,B.jsx)(k,{namespace:W,phrase:`bookingQuotaUsed`,options:{bookingQuota:e.max,bookingQuotaUsed:e.used}})]}),e.showUpgrade&&(0,B.jsxs)(`div`,{children:[(0,B.jsx)(k,{namespace:W,phrase:`bookingQuotaReached`}),`\xA0`,(0,B.jsx)(k,{namespace:W,phrase:`requestUpgradePrefix`}),`\xA0`,(0,B.jsx)(O,{className:`btn-link d-inline-block text-info`,appLink:e.upgradeAppLink,children:(0,B.jsx)(k,{namespace:W,phrase:`requestUpgrade`})}),`.`]})]})}var Ue={logo:`_logo_1uhpx_1`},G=`livestream.bookingSuccess`;function We(e){return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`${Ue.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,B.jsx)(P,{data:T.createUrl(e.livestream.company.logo?.url,{size:w.Small}),alt:e.livestream.company.name,preload:!0})}),(0,B.jsxs)(`div`,{className:`d-flex align-items-center justify-content-center mb-3 gap-1`,children:[(0,B.jsx)(n,{svg:j,className:`svg-container std text-success`}),(0,B.jsx)(`h1`,{className:`h3 mb-0 fw-semibold`,children:(0,B.jsx)(k,{namespace:G,phrase:`booked`})})]}),(0,B.jsx)(`div`,{className:`my-3`,children:(0,B.jsx)(V,{companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime})}),(0,B.jsx)(`p`,{children:(0,B.jsx)(k,{namespace:G,phrase:`emailReminder`})})]})}function K(e){return(0,B.jsx)(`div`,{className:`${e.className}`,style:e.coverImageUrl&&{backgroundImage:`url(${T._createUrl(e.coverImageUrl,{size:w.Large})})`}})}var q=e(Se()),J=`livestream.livestreamView`,Y=o.encloseNamespace(J),X=q.object({firstName:q.string().required(Y(`firstNameRequired`)),lastName:q.string().required(Y(`lastNameRequired`)),email:q.string().email(Y(`emailValid`)).required(Y(`emailRequired`)),attendees:q.string().required(Y(`attendeesRequired`))}),Ge=X.concat(q.object({schoolOrDistrict:q.string().required(Y(`schoolOrDistrictRequired`)),jobTitle:q.string().required(Y(`jobTitleRequired`)),phoneNumber:q.string().required(Y(`phoneNumberRequired`)).matches(/^[0-9]+$/,Y(`phoneNumberValid`))}));function Ke(e){let t=be(),[n,r]=z.useState({}),[i,a]=z.useState(!1);function o(){t.setFieldValue(`schoolOrDistrict`,``),t.setFieldValue(`country`,``),t.setFieldValue(`province`,``),t.setFieldValue(`prospectId`,``),f()}function s(e){r({...n,...e}),o()}function c(){r({}),o()}function l(e){r({...n,...e}),t.setFieldValue(`schoolOrDistrict`,e.schoolName),t.setFieldValue(`country`,e.country),t.setFieldValue(`province`,e.province),t.setFieldValue(`prospectId`,e.prospectId),f()}function u(){r({...n,prospectId:void 0,schoolName:void 0,schoolPostCode:void 0}),o()}function d(e){a(!0),t.setFieldValue(`schoolOrDistrict`,e),f()}function f(){window.setTimeout(()=>t.validateForm(),0)}return(0,B.jsxs)(fe,{children:[(0,B.jsxs)(`div`,{className:`row my-3`,children:[(0,B.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,B.jsx)(F,{label:Y(`firstName`),name:`firstName`,placeholder:Y(`firstNamePlaceholder`),value:t.values?.firstName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,B.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,B.jsx)(F,{label:Y(`lastName`),name:`lastName`,placeholder:Y(`lastNamePlaceholder`),value:t.values?.lastName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,B.jsx)(`div`,{className:`col-12`,children:(0,B.jsx)(F,{label:Y(`email`),name:`email`,placeholder:Y(`emailPlaceholder`),value:t.values?.email,disabled:e.isAuthenticated&&!!e.emailAddress,showRequiredStar:!e.isAuthenticated||!e.emailAddress})}),!e.isAuthenticated&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`div`,{className:`col-12`,children:i?(0,B.jsx)(F,{label:Y(`schoolOrDistrict`),name:`schoolOrDistrict`,value:t.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:Y(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(Ae,{data:n,setData:s,clearData:c,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:e.googleMapsApiKey,required:!0,hideOnBlur:!0}),(0,B.jsx)(je,{data:n,setData:l,clearData:u,disabled:!n.schoolLocality,searchUrl:e.searchProspectsUrl,onClickNoSuggestions:d,required:!0,placeholder:!n.schoolLocality&&Y(`schoolPlaceholder`),hideOnBlur:!0})]})}),(0,B.jsx)(`div`,{className:`col-12`,children:(0,B.jsx)(Oe,{id:`job-title`,error:t.touched?.jobTitle&&t.errors?.jobTitle,countryCode:M.US,initialValue:t.values?.jobTitle,onChange:e=>t.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0})})]}),(0,B.jsx)(`div`,{className:`col-12 col-sm-6 col-xl-4`,children:(0,B.jsx)(F,{type:`number`,label:Y(`attendees`),name:`attendees`,placeholder:Y(`attendeesPlaceholder`),min:1,value:t.values?.attendees,showRequiredStar:!0})}),!e.isAuthenticated&&(0,B.jsx)(`div`,{className:`col`,children:(0,B.jsx)(F,{label:Y(`phoneNumber`),name:`phoneNumber`,placeholder:Y(`phoneNumberPlaceholder`),value:t.values?.phoneNumber,showRequiredStar:!0})})]}),(0,B.jsx)(pe,{type:`submit`,className:`w-100`,variant:`dark`,showSpinner:e.showSpinner,disabled:!t.isValid,children:(0,B.jsx)(k,{namespace:J,phrase:`book`})})]})}function qe(e){return(0,B.jsx)(xe,{initialValues:e.initialValues,validationSchema:e.isAuthenticated?X:Ge,validateOnMount:!0,onSubmit:e.onSubmit,children:(0,B.jsx)(Ke,{emailAddress:e.emailAddress,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}function Je(e,t){return{application:u.LIVESTREAMS,action:b.Livestreams.LIVESTREAM,args:[t,e?.id,s.slugify(e?.name)]}}var Z={noRecording:`_noRecording_uwnqe_1`,coverImage:`_coverImage_uwnqe_4`,popup:`_popup_uwnqe_10`,page:`_page_uwnqe_15`},Q=`livestream.livestreamView`,Ye=o.encloseNamespace(Q);function Xe(e){let t=!e.isAuthenticated&&!e.livestream.recording,n=e.bookingQuota.limitReached&&e.isAuthenticated&&!e.isStudent,r=!n&&!e.isPastLivestream&&!e.formStage&&e.isAuthenticated&&!e.isStudent,a={application:u.SIGN_UP,action:b.SignUp.SIGN_UP},o=i.getHref(i.getCurrentAppLink()),c={application:u.DEFAULT,action:b.Default.CHALLENGE,params:o===`/`?{}:{redirectUrl:o}},l={application:u.SIGN_UP,action:b.SignUp.UPGRADE},d={application:u.DASHBOARD,action:b.Dashboard.PARTNER_DASHBOARD,args:[e.presentationSlug,e.livestream.company.id,s.slugify(e.livestream.company.name)]};return(0,B.jsxs)(B.Fragment,{children:[!e.success&&!e.error&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(V,{logoUrl:e.livestream.company.logo?.url,logoBgColour:e.livestream.company.metadata?.colour,companyId:e.livestream.company.id,companyName:e.livestream.company.name,eventName:e.livestream.name,audiences:e.livestream.audiences,startTime:e.livestream.startDateTime,endTime:e.livestream.endDateTime,description:!e.formStage&&e.livestream.description,isPastLivestream:e.isPastLivestream,companyAppLink:d}),e.bookingQuota.showInfo&&(0,B.jsx)(He,{showUpgrade:n,max:e.bookingQuota.max,used:e.bookingQuota.used,upgradeAppLink:l}),e.formStage&&(0,B.jsx)(qe,{emailAddress:e.emailAddress,initialValues:e.initialValues,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),r&&(0,B.jsx)(`button`,{className:D(`btn btn-dark w-100`,{"mt-3":e.bookingQuota.showInfo}),onClick:()=>e.setFormStage(!0),children:(0,B.jsx)(k,{namespace:Q,phrase:`book`})}),e.isPastLivestream&&!e.livestream.recording&&(0,B.jsx)(`div`,{className:`${Z.noRecording} p-2 rounded`,children:(0,B.jsx)(k,{namespace:Q,phrase:`noRecording`})}),e.livestream.recording&&(0,B.jsx)(O,{appLink:{application:u.VIDEOS,action:b.Videos.PLAY_VIDEO,args:[e.presentationSlug,e.livestream.recording.id,s.slugify(e.livestream.recording.name)]},children:(0,B.jsx)(`button`,{className:`btn btn-outline-dark w-100`,children:(0,B.jsx)(k,{namespace:Q,phrase:`recording`})})}),t&&e.preferSignIn&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(O,{className:`mt-3 btn btn-dark w-100`,appLink:c,children:(0,B.jsx)(k,{namespace:Q,phrase:`signInToBookButton`})}),(0,B.jsxs)(`p`,{className:`mt-3 mb-0 text-center small text-secondary`,children:[(0,B.jsx)(k,{namespace:Q,phrase:`noAccount`}),(0,B.jsx)(O,{className:`info-link d-inline ms-1`,appLink:a,children:(0,B.jsx)(k,{namespace:Q,phrase:`signUpLink`})})]})]}),t&&!e.preferSignIn&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(O,{className:`mt-3 btn btn-dark w-100`,appLink:a,children:(0,B.jsx)(k,{namespace:Q,phrase:`signUpButton`})}),(0,B.jsxs)(`p`,{className:`mt-3 mb-0 text-center small text-secondary`,children:[(0,B.jsx)(k,{namespace:Q,phrase:`alreadyHaveAccount`}),(0,B.jsx)(O,{className:`info-link ms-1`,appLink:c,children:(0,B.jsx)(k,{namespace:Q,phrase:`signInButton`})})]})]})]}),e.success&&(0,B.jsx)(We,{livestream:e.livestream}),e.error&&(0,B.jsx)(Ve,{onTryAgain:e.onTryAgain})]})}function Ze(e){function t(){e.closePopup(),De.preventScrollTop();let t=E.getCurrentRoute().appLink;t.application===u.LIVESTREAMS&&t.action===b.Livestreams.LIVESTREAM&&i.trigger(E.getPreviousRoute()?.appLink)}return(0,B.jsxs)(N,{size:`xl`,bodyClassName:`rounded-3 overflow-hidden p-0`,closePopup:t,children:[(0,B.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,B.jsxs)(`div`,{className:`row g-0`,children:[(0,B.jsx)(`div`,{className:`col-12 col-lg-6`,children:(0,B.jsx)(K,{className:`${Z.coverImage} ${Z.popup}`,coverImageUrl:e.livestream.company.cover?.url})}),(0,B.jsx)(`div`,{className:`col-12 col-lg p-4 m-lg-2`,children:(0,B.jsx)(Xe,{...e})})]})]})}function Qe(e){return(0,B.jsxs)(`div`,{className:`row g-0 px-3`,children:[(0,B.jsx)(`div`,{className:`col-12 col-md-6 col-lg-5`,children:(0,B.jsx)(K,{className:`${Z.coverImage} ${Z.page} rounded`,coverImageUrl:e.livestream.company.cover?.url})}),(0,B.jsx)(`div`,{className:`col-12 col-md px-md-3 pt-2 pt-md-0`,children:(0,B.jsx)(Xe,{...e})})]})}function $e(e){let t=f(ae.config()),n=d(),i=Le(),[o,s]=z.useState(!1),[c,l]=z.useState(!1),[u,g]=z.useState(!1),[_,v]=z.useState(!1),[b,x]=z.useState({firstName:``,lastName:``,email:``,attendees:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:S}=Me(),C=Be(),w=f(y.currentUser()),T=f(L.livestream(e.id)),{hasPermissions:E}=ue(),D=E(a.StudentExperience);he({id:e.id,app:`livestreams`}),le({...ce.getDefaultMetadata({title:T.data?.name,description:T.data?.description,phraseContext:{phraseHandler:Ye,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:de.getCanonicalLink({customAppLink:Je(T.data,e.presentationSlug)}),allowIndexing:!0}),_isPopupUp:!e.fromPageLoad}),Ee(T),z.useEffect(()=>{!T.data||T.data?.status===ie.Published||r.throw(new se)},[T.data?.status]),z.useEffect(()=>{w.data?.isAuthenticated&&x({...b,firstName:w.data.givenName,lastName:w.data.familyName,email:w.data.email})},[w.data?.isAuthenticated]);async function O(e){if(C.hasBookingLimitations&&C.hasReachedBookingLimit){g(!0);return}try{v(!0),x(e),await n(L.createBooking({eventId:T.data.id,eventType:`Livestream`,firstName:e.firstName,lastName:e.lastName,email:e.email,attendees:e.attendees,status:1})),w.data?.isAuthenticated||(S({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),M(e)),j(m.Complete,e),l(!0)}catch{g(!0),s(!1)}finally{v(!1)}}function k(){g(!1),s(!0)}function A(){s(!0),j(m.Start)}function j(t,n){oe.logUserAction({id:T.data.id,name:T.data.name,...n?.attendees&&{attendees:n.attendees}},{entity:ee.Livestream,actionType:ne.Submit,location:te.LivestreamBookingForm,descriptor:e.fromPageLoad?h.FullPage:h.Popup,workflowPhase:t})}async function M(e){let t=Re.LivestreamBooking;try{await n(R.createUser({email:e.email,source:t,instanceRegion:w.data?.instanceRegion,syncToCrm:!0}))}catch{}try{let r;e.prospectId&&(r=(await n(R.prospectLookups(e.prospectId)))?.find(e=>e.type===`crm_id`)?.externalId);let a={email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,custom:{accountAddress:e?.province?{countryCode:e?.country,province:ke.parseProvince(e?.province||``)}:void 0,accountName:e.schoolOrDistrict,jobTitle:e.jobTitle,crmId:r||void 0}};i.logFormSubmission({eventType:Ne.StreamableFormEvent.LivestreamBookingFormSubmit,source:t,conversion:ze.LivestreamBooking,user:a,productType:`sl`})}catch(e){console.error(`Failed to log submission event to Braze`,e)}}if(!(T.hasCompleted&&C.isLoaded&&t.hasCompleted))return(0,B.jsx)(B.Fragment,{});let N={livestream:T.data,formStage:o,initialValues:b,isAuthenticated:w.data?.isAuthenticated,isStudent:D,preferSignIn:e.preferSignIn,success:c,error:u,isPastLivestream:p.isBefore(T.data.endDateTime,new Date),showSpinner:_,onSubmit:O,onTryAgain:k,setFormStage:A,googleMapsApiKey:t.data.googleMapsApiKey,searchProspectsUrl:re.safeUrlConcat(t.data.gatewayApiUrl,`/v1/search/prospects`),emailAddress:w.data?.email,presentationSlug:e.presentationSlug,bookingQuota:{showInfo:C.hasBookingLimitations,limitReached:C.hasReachedBookingLimit,used:C.bookingsUsed,max:C.totalBookingsAvailable}};return e.fromPageLoad?(0,B.jsx)(Qe,{...N}):(0,B.jsx)(Ze,{...N,closePopup:e.closePopup})}var $=Ce({[_.StreamableLearning]:e=>(0,B.jsx)($e,{id:e.id,fromPageLoad:e.fromPageLoad,preferSignIn:e.preferSignIn,closePopup:e.closePopup,presentationSlug:e.presentationSlug})});$.displayName=`BaseLivestreamView`;export{$ as BaseLivestreamView};
|
|
2
|
+
//# sourceMappingURL=-brFp4w1.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CEv1_bDW.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/streamable-learning/components/livestream-details/livestream-details.module.scss","../../../../libs/shared/src/apps/streamable-learning/components/livestream-details/LivestreamDetails.tsx","../../../../libs/shared/src/hooks/useBrazeClientService.ts","../../src/shared/enums/BrazeSource.ts","../../src/shared/enums/BrazeTopic.ts","../../src/shared/hooks/useBookingQuota.ts","../../src/apps/livestreams/components/livestream-booking-error/livestream-booking-error.module.scss","../../src/apps/livestreams/components/livestream-booking-error/LivestreamBookingError.tsx","../../src/apps/livestreams/components/livestream-booking-quota/LivestreamBookingQuota.tsx","../../src/apps/livestreams/components/livestream-booking-success/livestream-booking-success.module.scss","../../src/apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess.tsx","../../src/apps/livestreams/components/livestream-cover-image/LivestreamCoverImage.tsx","../../src/apps/livestreams/components/livestream-form/LivestreamForm.tsx","../../src/apps/livestreams/views/livestream/LivestreamViewUtils.ts","../../src/apps/livestreams/views/livestream/livestream/livestream.module.scss","../../src/apps/livestreams/views/livestream/livestream/LivestreamView.tsx","../../src/apps/livestreams/views/livestream/BaseLivestreamView.tsx"],"sourcesContent":[":local {\n .logoContainer {\n width: 3.75rem;\n height: 3.75rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarCheckSvg } from 'libs/shared/images/svg/objects/CalendarCheckSvg';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { GlobeSvg } from 'libs/shared/images/svg/objects/GlobeSvg';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\nimport { Audience, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-details.module.scss';\n\nconst namespace = 'streamable.livestreamDetails';\n\ninterface LivestreamDetailsProps {\n logoUrl?: string;\n logoBgColour?: string;\n companyId?: string;\n companyName?: string;\n companyAppLink?: Core.AppLink;\n eventName: string;\n audiences?: Audience[];\n startTime: string;\n endTime: string;\n description?: string;\n isPastLivestream?: boolean;\n timezone?: string;\n}\n\nexport function LivestreamDetails(props: LivestreamDetailsProps) {\n function getDuration() {\n return `${DateHelper.diffBetween(props.endTime, props.startTime, 'minutes')}m`;\n }\n\n function getTimezoneDateTime(dateTime: string): Date {\n return TimezoneHelper.convertUTCToTimezoneDate(dateTime);\n }\n\n function getTime(time: string): string {\n return DateHelper.format(getTimezoneDateTime(time), 'h:mma');\n }\n\n function getDate(date: string): string {\n return DateHelper.format(getTimezoneDateTime(date), 'Do MMMM');\n }\n\n function getDisplayTimezone(timezone?: string): string {\n return TimezoneHelper.getTimezoneInfo(timezone).longGeneric;\n }\n\n function getMergedAudienceName(): string {\n return AudienceHelper.getMergedPresentationAudienceString(props.audiences as PresentationAudience[])?.name;\n }\n\n const logoFallbackBgClassName = getBgColorClass(props.companyName, BG_COLOUR_CLASS_NAMES);\n\n return (\n <>\n <div className='d-flex align-items-center mb-2'>\n {props.logoUrl && (\n <AppLink\n appLink={props.companyAppLink}\n >\n <div className={`${styles.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`}>\n <BaseImage\n data={ImageHelper.createUrl(props.logoUrl, { size: ImageSize.Small })}\n alt={props.companyName}\n className={!props.logoBgColour && logoFallbackBgClassName}\n imageStyle={{\n backgroundColor: props.logoBgColour\n }}\n preload\n />\n </div>\n </AppLink>\n\n )}\n <div className='d-flex flex-column justify-content-between'>\n {props.companyName &&\n <AppLink\n appLink={props.companyAppLink}\n className='text-uppercase text-wrap d-block text-truncate mb-0'\n title={props.companyName}\n >\n {props.companyName}\n </AppLink>\n }\n <h1 className='h4 mb-0'>{props.eventName}</h1>\n </div>\n </div>\n\n <div className='d-flex gap-2 mb-3'>\n {!!props.audiences?.length && (\n <div className='rounded-pill border border-dark px-2'>\n {getMergedAudienceName()}\n </div>\n )}\n <div className='rounded-pill fw-semibold bg-dark text-white px-2'>\n <span className='align-middle'>{getDuration()}</span>\n </div>\n </div>\n\n {props.isPastLivestream && (\n <div className='d-inline-block bg-light-green rounded-pill mb-3'>\n <SvgContainer svg={CalendarCheckSvg} />\n <p className='d-inline ms-1 mb-0'><Text namespace={namespace} phrase='pastEvent' /></p>\n </div>\n )}\n\n {!props.isPastLivestream && (\n <>\n <p className='mb-2'>\n <SvgContainer svg={TimerSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getTime(props.startTime)}</span>\n </p>\n <p className='mb-2'>\n <SvgContainer svg={CalendarSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDate(props.startTime)}</span>\n </p>\n <p className='mb-3'>\n <SvgContainer svg={GlobeSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDisplayTimezone(props.timezone)}</span>\n </p>\n </>\n )}\n\n {props.description && <p className='mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(LinkifyHelper.linkifyText(props.description)) }} />}\n </>\n );\n}\n","import { type BrazeUser, type FormEventType } from '@clickview/braze-client';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\ninterface HydrateUserDataOptions {\n conversion: string;\n source: string;\n}\n\nfunction hydrateUserData(user: BrazeUser, data: HydrateUserDataOptions): BrazeUser {\n return {\n ...user,\n custom: {\n ...user?.custom,\n source: data.source\n },\n event: {\n ...user?.event,\n conversion: data.conversion\n }\n };\n}\n\nexport interface LogFormSubmissionOptions<TConversion extends string, TSource extends string> {\n conversion: TConversion;\n source: TSource;\n eventType: FormEventType;\n user: BrazeUser;\n productType: 'cv' | 'sl';\n additionalData?: Record<string, any>;\n callback?: (success: boolean) => void;\n}\n\nexport function useBrazeClientService<TConversion extends string, TSource extends string>() {\n const braze = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n\n function logFormSubmission({\n user,\n additionalData,\n source,\n eventType,\n conversion,\n productType,\n callback\n }: LogFormSubmissionOptions<TConversion, TSource>) {\n const brazeUser = hydrateUserData(user, {\n source,\n conversion\n });\n\n braze.setUserInit(brazeUser);\n \n braze.logFormEvent({\n eventType,\n additionalData,\n callback,\n internalOptions: {\n subscriptionGroups: productType\n }\n });\n }\n\n return {\n client: braze,\n logFormSubmission\n };\n}\n","export enum BrazeSource {\n LivestreamBooking = 'cv_product_livestream'\n}\n","export enum BrazeConversion {\n LivestreamBooking = 'Submit - Livestream Booking'\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\n\nexport function useBookingQuota() {\n const { accessPolicy, isLoaded: accessPolicyLoaded } = useAccessPolicy();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const hasBookingLimitations = !!accessPolicy?.metadata?.maxLiveBookings;\n\n const bookingCount = Flight.useBasicFetch<{ count: number }>(\n currentUser.data?.isAuthenticated &&\n hasBookingLimitations &&\n LivestreamRequests.customerLifetimeBookingCount()\n );\n\n const isLoaded = currentUser.hasCompleted\n && (hasBookingLimitations ?\n bookingCount.hasCompleted && accessPolicyLoaded :\n true\n );\n\n // Flat cap — no referral bonus (unlike streams).\n const totalBookingsAvailable = accessPolicy?.metadata?.maxLiveBookings ?? Number.MAX_SAFE_INTEGER;\n const bookingsUsed = bookingCount.data?.count ?? 0;\n const hasReachedBookingLimit = bookingsUsed >= totalBookingsAvailable;\n\n return {\n isLoaded,\n accessPolicy,\n bookingsUsed,\n totalBookingsAvailable,\n hasReachedBookingLimit,\n hasBookingLimitations\n };\n}\n",":local {\n .logo,\n .image {\n height: 9.25rem;\n width: 9.25rem;\n }\n}\n","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './livestream-booking-error.module.scss';\n\nconst namespace = 'livestream.bookingError';\n\ninterface LivestreamBookingErrorProps {\n onTryAgain: () => void;\n}\n\nexport function LivestreamBookingError(props: LivestreamBookingErrorProps) {\n return (\n <div className='d-flex flex-column justify-content-center'>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <img\n className={styles.image}\n src={ImageUrls.Live.General.LOST_MESSAGE_BOTTLE}\n />\n </div>\n <h3 className='text-center mb-3'><Text namespace={namespace} phrase='heading' /></h3>\n <p className='text-center mb-3'><Text namespace={namespace} phrase='description' /></p>\n <button className='btn btn-dark' onClick={props.onTryAgain}><Text namespace={namespace} phrase='buttonLabel' /></button>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'livestream.liveStreamBookingQuota';\n\ninterface LivestreamBookingQuotaProps {\n showUpgrade: boolean;\n upgradeAppLink: Core.AppLink;\n max: number;\n used: number;\n}\n\nexport function LivestreamBookingQuota(props: LivestreamBookingQuotaProps) {\n return (\n <div className='bg-light-blue rounded p-2 mt-3 d-flex flex-column gap-2' role='alert'>\n <div>\n <strong><Text namespace={namespace} phrase='bookingQuota' /></strong>\n \n <Text namespace={namespace} phrase='bookingQuotaUsed' options={{\n bookingQuota: props.max,\n bookingQuotaUsed: props.used\n }} />\n </div>\n {props.showUpgrade && (\n <div >\n <Text namespace={namespace} phrase='bookingQuotaReached' />\n \n <Text namespace={namespace} phrase='requestUpgradePrefix' />\n \n <AppLink\n className='btn-link d-inline-block text-info'\n appLink={props.upgradeAppLink}\n >\n <Text namespace={namespace} phrase='requestUpgrade' />\n </AppLink>\n .\n </div>\n )}\n </div>\n );\n}\n",":local {\n .logo {\n height: 9.25rem;\n width: 9.25rem;\n }\n}\n","import React from 'react';\n\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-booking-success.module.scss';\n\nconst namespace = 'livestream.bookingSuccess';\n\ninterface LivestreamBookingSuccessProps {\n livestream: Livestream;\n}\n\nexport function LivestreamBookingSuccess(props: LivestreamBookingSuccessProps) {\n return (\n <>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <BaseImage\n data={ImageHelper.createUrl(props.livestream.company.logo?.url, { size: ImageSize.Small })}\n alt={props.livestream.company.name}\n preload\n />\n </div>\n <div className='d-flex align-items-center justify-content-center mb-3 gap-1'>\n <SvgContainer svg={CheckCircleSvg} className='svg-container std text-success' />\n <h1 className='h3 mb-0 fw-semibold'><Text namespace={namespace} phrase='booked' /></h1>\n </div>\n <div className='my-3'>\n <LivestreamDetails\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n />\n </div>\n <p><Text namespace={namespace} phrase='emailReminder' /></p>\n </>\n );\n}\n","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\ninterface LivestreamCoverImageProps {\n coverImageUrl: string;\n className?: string;\n}\n\nexport function LivestreamCoverImage(props: LivestreamCoverImageProps) {\n return (\n <div\n className={`${props.className}`}\n style={props.coverImageUrl && { backgroundImage: `url(${ImageHelper._createUrl(props.coverImageUrl, { size: ImageSize.Large })})` }}\n />\n );\n}\n","import React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { JobTitleInput } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput';\nimport { SearchLocalityInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput';\nimport { SearchSchoolInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst namespace = 'livestream.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseValidationSchema = Yup.object({\n firstName: Yup.string().required(getPhrase('firstNameRequired')),\n lastName: Yup.string().required(getPhrase('lastNameRequired')),\n email: Yup.string().email(getPhrase('emailValid')).required(getPhrase('emailRequired')),\n attendees: Yup.string().required(getPhrase('attendeesRequired'))\n});\n\nconst guestValidationSchema = baseValidationSchema.concat(Yup.object({\n schoolOrDistrict: Yup.string().required(getPhrase('schoolOrDistrictRequired')),\n jobTitle: Yup.string().required(getPhrase('jobTitleRequired')),\n phoneNumber: Yup.string().required(getPhrase('phoneNumberRequired')).matches(/^[0-9]+$/, getPhrase('phoneNumberValid'))\n}));\n\ninterface LivestreamFormFieldsProps {\n isAuthenticated: boolean;\n showSpinner: boolean;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nfunction LivestreamFormFields(props: LivestreamFormFieldsProps) {\n const formikProps = useFormikContextWrapper<LivestreamBookingFormValues>();\n\n const [ searchSchoolData, setSearchSchoolData ] = React.useState<SearchSchoolData>({});\n const [ cantFindSchool, setCantFindSchool ] = React.useState<boolean>(false);\n\n function clearFormikSchoolData() {\n formikProps.setFieldValue('schoolOrDistrict', '');\n formikProps.setFieldValue('country', '');\n formikProps.setFieldValue('province', '');\n formikProps.setFieldValue('prospectId', '');\n triggerValidation();\n }\n\n function setLocalityData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n clearFormikSchoolData();\n }\n\n function clearLocalityData(): void {\n setSearchSchoolData({});\n clearFormikSchoolData();\n }\n\n function setSchoolData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n\n formikProps.setFieldValue('schoolOrDistrict', data.schoolName);\n formikProps.setFieldValue('country', data.country);\n formikProps.setFieldValue('province', data.province);\n formikProps.setFieldValue('prospectId', data.prospectId);\n\n triggerValidation();\n }\n\n function clearSchooldata(): void {\n setSearchSchoolData({\n ...searchSchoolData,\n prospectId: undefined,\n schoolName: undefined,\n schoolPostCode: undefined\n });\n clearFormikSchoolData();\n }\n\n function onClickNoSuggestions(name: string) {\n setCantFindSchool(true);\n\n formikProps.setFieldValue('schoolOrDistrict', name);\n\n triggerValidation();\n }\n\n // Forcing the form to validate needs to happen in a setTimeout to work — Formik quirk.\n function triggerValidation() {\n window.setTimeout(() => formikProps.validateForm(), 0);\n }\n\n return (\n <Form>\n <div className='row my-3'>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('firstName')}\n name='firstName'\n placeholder={getPhrase('firstNamePlaceholder')}\n value={formikProps.values?.firstName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('lastName')}\n name='lastName'\n placeholder={getPhrase('lastNamePlaceholder')}\n value={formikProps.values?.lastName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12'>\n <FormField\n label={getPhrase('email')}\n name='email'\n placeholder={getPhrase('emailPlaceholder')}\n value={formikProps.values?.email}\n disabled={props.isAuthenticated && !!props.emailAddress}\n showRequiredStar={!props.isAuthenticated || !props.emailAddress}\n />\n </div>\n {!props.isAuthenticated &&\n <>\n <div className='col-12'>\n {!cantFindSchool ?\n <>\n <SearchLocalityInput\n data={searchSchoolData}\n setData={setLocalityData}\n clearData={clearLocalityData}\n labelClassName='form-label'\n geoLocation={{ countryCode: 'US' }}\n googleMapsApiKey={props.googleMapsApiKey}\n required\n hideOnBlur\n />\n <SearchSchoolInput\n data={searchSchoolData}\n setData={setSchoolData}\n clearData={clearSchooldata}\n disabled={!searchSchoolData.schoolLocality}\n searchUrl={props.searchProspectsUrl}\n onClickNoSuggestions={onClickNoSuggestions}\n required\n placeholder={!searchSchoolData.schoolLocality && getPhrase('schoolPlaceholder')}\n hideOnBlur\n />\n </> :\n <FormField\n label={getPhrase('schoolOrDistrict')}\n name='schoolOrDistrict'\n value={formikProps.values?.schoolOrDistrict}\n showRequiredStar={true}\n placeholder={getPhrase('schoolOrDistrictPlaceholder')}\n autoFocus\n />\n }\n </div>\n <div className='col-12'>\n <JobTitleInput\n id='job-title'\n error={formikProps.touched?.jobTitle && formikProps.errors?.jobTitle}\n countryCode={CountryCode.US}\n initialValue={formikProps.values?.jobTitle}\n onChange={jobTitle => formikProps.setFieldValue('jobTitle', jobTitle, false)}\n labelClassName='form-label'\n isTertiary={false}\n required\n />\n </div>\n </>\n }\n <div className='col-12 col-sm-6 col-xl-4'>\n <FormField\n type='number'\n label={getPhrase('attendees')}\n name='attendees'\n placeholder={getPhrase('attendeesPlaceholder')}\n min={1}\n value={formikProps.values?.attendees}\n showRequiredStar\n />\n </div>\n {!props.isAuthenticated && (\n <div className='col'>\n <FormField\n label={getPhrase('phoneNumber')}\n name='phoneNumber'\n placeholder={getPhrase('phoneNumberPlaceholder')}\n value={formikProps.values?.phoneNumber}\n showRequiredStar\n />\n </div>\n )}\n </div>\n <SpinnerButton type='submit' className='w-100' variant='dark' showSpinner={props.showSpinner} disabled={!formikProps.isValid} >\n <Text namespace={namespace} phrase='book' />\n </SpinnerButton>\n </Form>\n );\n}\n\nexport interface LivestreamBookingFormValues {\n firstName: string;\n lastName: string;\n email: string;\n attendees: string;\n schoolOrDistrict: string;\n jobTitle: string;\n phoneNumber: string;\n country: string;\n province: string;\n prospectId: string;\n}\n\ninterface LivestreamFormProps {\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n showSpinner: boolean;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nexport function LivestreamForm(props: LivestreamFormProps) {\n return (\n <FormWrapper<LivestreamBookingFormValues>\n initialValues={props.initialValues}\n validationSchema={props.isAuthenticated ? baseValidationSchema : guestValidationSchema}\n validateOnMount={true}\n onSubmit={props.onSubmit}>\n <LivestreamFormFields\n emailAddress={props.emailAddress}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n </FormWrapper>\n );\n}\n","import { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Livestream } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getLivestreamAppLink(\n livestream: Livestream,\n presentationSlug: string | null\n): Core.AppLink {\n return {\n application: AppChannels.LIVESTREAMS,\n action: Actions.Livestreams.LIVESTREAM,\n args: [ presentationSlug, livestream?.id, TextHelper.slugify(livestream?.name) ]\n };\n}\n","@import '~styles/utils/include-media';\n:local {\n .noRecording {\n background-color: $gray-100;\n }\n\n .coverImage {\n height: 100px;\n background-position: center 40%;\n background-size: cover;\n\n &.popup {\n @include media('>lg') {\n height: 100%;\n }\n }\n\n &.page {\n @include media('>md') {\n height: 100%;\n }\n }\n }\n}\n","import React from 'react';\nimport { type BrazeUser, StreamableFormEvent } from '@clickview/braze-client';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LivestreamBookingDescriptor, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ProspectLookup } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { BrazeRequests } from 'libs/shared/flight-requests/BrazeRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBrazeClientService } from 'libs/shared/hooks/useBrazeClientService';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProfileApiClient } from 'libs/shared/hooks/UseProfileApiClient';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Livestream } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\nimport { BrazeConversion } from 'shared/enums/BrazeTopic';\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { useBookingQuota } from 'shared/hooks/useBookingQuota';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport {\n LivestreamBookingError\n} from 'apps/livestreams/components/livestream-booking-error/LivestreamBookingError';\nimport { LivestreamBookingQuota } from 'apps/livestreams/components/livestream-booking-quota/LivestreamBookingQuota';\nimport {\n LivestreamBookingSuccess\n} from 'apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess';\nimport {\n LivestreamCoverImage\n} from 'apps/livestreams/components/livestream-cover-image/LivestreamCoverImage';\nimport {\n LivestreamBookingFormValues,\n LivestreamForm\n} from 'apps/livestreams/components/livestream-form/LivestreamForm';\nimport {\n getLivestreamAppLink\n} from 'apps/livestreams/views/livestream/LivestreamViewUtils';\n\nimport styles from './livestream.module.scss';\n\nconst namespace = 'livestream.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LivestreamBookingProps {\n livestream: Livestream;\n formStage: boolean;\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n isStudent: boolean;\n preferSignIn: boolean;\n success: boolean;\n error: boolean;\n isPastLivestream: boolean;\n showSpinner: boolean;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n onTryAgain: () => void;\n setFormStage: React.Dispatch<React.SetStateAction<boolean>>;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n presentationSlug: string | null;\n bookingQuota: {\n showInfo: boolean,\n limitReached: boolean,\n used: number,\n max: number\n };\n}\n\nfunction LivestreamContent(props: LivestreamBookingProps) {\n const showAuthLinks = !props.isAuthenticated && !props.livestream.recording;\n const showUpgrade = props.bookingQuota.limitReached && props.isAuthenticated && !props.isStudent;\n const showBook =\n !showUpgrade &&\n !props.isPastLivestream &&\n !props.formStage &&\n (props.isAuthenticated && !props.isStudent);\n\n // \"Sign up to book\" opens the in-Lite sign-up popup (same path as the header CTA) so the\n // trial is created with the correct variant (clickview-live) and appLink (livestream:<id>),\n // both sourced from view-models the livestream page already populates (useDeepLinks).\n // No redirectUrl param here — those view-models drive the post-sign-up destination.\n const signUpLink = {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n\n const signInLink = {\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: redirectUrl !== '/' ? { redirectUrl } : {}\n };\n\n const upgradeLink = {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n };\n\n const companyAppLink = {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.PARTNER_DASHBOARD,\n args: [ props.presentationSlug, props.livestream.company.id, TextHelper.slugify(props.livestream.company.name) ]\n };\n \n return (\n <>\n {!props.success && !props.error && (\n <>\n <LivestreamDetails\n logoUrl={props.livestream.company.logo?.url}\n logoBgColour={props.livestream.company.metadata?.colour}\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n description={!props.formStage && props.livestream.description}\n isPastLivestream={props.isPastLivestream}\n companyAppLink={companyAppLink}\n />\n {props.bookingQuota.showInfo && (\n <LivestreamBookingQuota\n showUpgrade={showUpgrade}\n max={props.bookingQuota.max}\n used={props.bookingQuota.used}\n upgradeAppLink={upgradeLink}\n />\n )}\n {props.formStage && (\n <LivestreamForm\n emailAddress={props.emailAddress}\n initialValues={props.initialValues}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n onSubmit={props.onSubmit}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n )}\n {showBook && (\n <button\n className={classNames('btn btn-dark w-100', { 'mt-3': props.bookingQuota.showInfo })}\n onClick={() => props.setFormStage(true)}\n >\n <Text namespace={namespace} phrase='book' />\n </button>\n )}\n {props.isPastLivestream && !props.livestream.recording &&\n <div className={`${styles.noRecording} p-2 rounded`}>\n <Text namespace={namespace} phrase='noRecording' />\n </div>\n }\n {props.livestream.recording &&\n <AppLink\n appLink={{\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n props.presentationSlug,\n props.livestream.recording.id,\n TextHelper.slugify(props.livestream.recording.name)\n ]\n }}>\n <button className='btn btn-outline-dark w-100'><Text namespace={namespace} phrase='recording' /></button>\n </AppLink>\n }\n\n {showAuthLinks && props.preferSignIn &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInToBookButton' />\n </AppLink>\n <p className='mt-3 mb-0 text-center small text-secondary'>\n <Text namespace={namespace} phrase='noAccount' />\n <AppLink\n className='info-link d-inline ms-1'\n appLink={signUpLink}\n >\n <Text namespace={namespace} phrase='signUpLink' />\n </AppLink>\n </p>\n </>\n }\n {showAuthLinks && !props.preferSignIn &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signUpLink}\n >\n <Text namespace={namespace} phrase='signUpButton' />\n </AppLink>\n <p className='mt-3 mb-0 text-center small text-secondary'>\n <Text namespace={namespace} phrase='alreadyHaveAccount' />\n <AppLink\n className='info-link ms-1'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInButton' />\n </AppLink>\n </p>\n </>\n }\n </>\n )}\n {props.success && (\n <LivestreamBookingSuccess livestream={props.livestream} />\n )}\n {props.error && (\n <LivestreamBookingError onTryAgain={props.onTryAgain} />\n )}\n </>\n );\n}\n\ninterface LivestreamPopupProps extends LivestreamBookingProps {\n closePopup: () => void;\n}\n\nfunction LivestreamPopup(props: LivestreamPopupProps) {\n function onClose() {\n props.closePopup();\n\n ScrollHelper.preventScrollTop();\n\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n const isLivestreamAppLink =\n currentAppLink.application === AppChannels.LIVESTREAMS &&\n currentAppLink.action === Actions.Livestreams.LIVESTREAM;\n if (isLivestreamAppLink)\n Core.AppLinkHelper.trigger(ContextService.getPreviousRoute()?.appLink);\n }\n\n return (\n <Popup\n size='xl'\n bodyClassName='rounded-3 overflow-hidden p-0'\n closePopup={onClose}\n >\n <button className='btn-close position-absolute top-0 end-0 p-3' onClick={onClose} />\n\n <div className='row g-0'>\n <div className='col-12 col-lg-6'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.popup}`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className='col-12 col-lg p-4 m-lg-2'>\n <LivestreamContent {...props} />\n </div>\n </div>\n </Popup>\n );\n}\n\ninterface LivestreamPageProps extends LivestreamBookingProps { }\n\nfunction LivestreamPage(props: LivestreamPageProps) {\n return (\n <div className='row g-0 px-3'>\n <div className='col-12 col-md-6 col-lg-5'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.page} rounded`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className='col-12 col-md px-md-3 pt-2 pt-md-0'>\n <LivestreamContent {...props} />\n </div>\n </div>\n );\n}\n\ninterface LivestreamViewProps extends PopupProps {\n id: string;\n fromPageLoad: boolean;\n presentationSlug: string | null;\n preferSignIn: boolean;\n}\n\nexport function LivestreamView(props: LivestreamViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const fetchAsync = useGetFetchAsync();\n const braze = useBrazeClientService<BrazeConversion, BrazeSource>();\n const [ formStage, _setFormStage ] = React.useState(false);\n const [ success, setSuccess ] = React.useState(false);\n const [ error, setError ] = React.useState(false);\n const [ submitting, setSubmitting ] = React.useState(false);\n const [ initialValues, setInitialValues ] = React.useState<LivestreamBookingFormValues>({\n firstName: '',\n lastName: '',\n email: '',\n attendees: '',\n schoolOrDistrict: '',\n jobTitle: '',\n phoneNumber: '',\n country: '',\n province: '',\n prospectId: ''\n });\n\n const { createOrUpdateProfile } = useProfileApiClient();\n const bookingQuota = useBookingQuota();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const livestream = Flight.useBasicFetch<Livestream>(LivestreamRequests.livestream(props.id));\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n useDeepLinks({ id: props.id, app: 'livestreams' });\n\n const pageMetadata = PageMetadataHelper.getDefaultMetadata({\n title: livestream.data?.name,\n description: livestream.data?.description,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: getLivestreamAppLink(livestream.data, props.presentationSlug)\n }),\n allowIndexing: true\n });\n\n useSetPageMetadata({\n ...pageMetadata,\n _isPopupUp: !props.fromPageLoad\n });\n\n useHandleObjectError(livestream);\n\n React.useEffect(() => {\n if (!livestream.data || livestream.data?.status === CurationStatusString.Published) return;\n\n Core.ErrorHelper.throw(new NotFoundError());\n }, [livestream.data?.status]);\n\n React.useEffect(() => {\n if (!currentUser.data?.isAuthenticated) return;\n\n setInitialValues({\n ...initialValues,\n firstName: currentUser.data.givenName,\n lastName: currentUser.data.familyName,\n email: currentUser.data.email\n });\n }, [currentUser.data?.isAuthenticated]);\n\n async function onSubmit(values: LivestreamBookingFormValues) {\n if (bookingQuota.hasBookingLimitations && bookingQuota.hasReachedBookingLimit) {\n setError(true);\n return;\n }\n \n try {\n setSubmitting(true);\n setInitialValues(values);\n\n await fetchAsync(LivestreamRequests.createBooking({\n eventId: livestream.data.id,\n eventType: 'Livestream',\n firstName: values.firstName,\n lastName: values.lastName,\n email: values.email,\n attendees: values.attendees,\n status: 1\n }));\n\n if (!currentUser.data?.isAuthenticated) {\n createOrUpdateProfile({\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n countryCode: values.country\n });\n }\n\n logAnalyticsEvent(WorkflowPhase.Complete);\n logBrazeEvent(values);\n\n setSuccess(true);\n } catch {\n setError(true);\n _setFormStage(false);\n } finally {\n setSubmitting(false);\n }\n }\n\n function onTryAgain() {\n setError(false);\n _setFormStage(true);\n }\n\n function setFormStage() {\n _setFormStage(true);\n logAnalyticsEvent(WorkflowPhase.Start);\n }\n\n function logAnalyticsEvent(workflowPhase: WorkflowPhase) {\n AnalyticsHelper.logUserAction({\n id: livestream.data.id,\n name: livestream.data.name\n }, {\n entity: EntityType.Livestream,\n actionType: UserAction.Submit,\n location: LocationContext.LivestreamBookingForm,\n descriptor: props.fromPageLoad ?\n LivestreamBookingDescriptor.FullPage :\n LivestreamBookingDescriptor.Popup,\n workflowPhase\n });\n }\n\n async function logBrazeEvent(values: LivestreamBookingFormValues) {\n const eventSource = BrazeSource.LivestreamBooking;\n \n try {\n await fetchAsync(BrazeRequests.createUser({\n email: values.email,\n source: eventSource,\n instanceRegion: currentUser.data?.instanceRegion,\n syncToCrm: true\n }));\n } catch {}\n \n try {\n let crmId: string;\n\n if (values.prospectId) {\n const prospectLookups = await fetchAsync<ProspectLookup[]>(BrazeRequests.prospectLookups(values.prospectId));\n crmId = prospectLookups?.find(l => l.type === 'crm_id')?.externalId;\n }\n\n const brazeUser: BrazeUser = {\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n custom: {\n accountAddress: values?.province ? {\n countryCode: values?.country,\n province: BrazeHelper.parseProvince(values?.province || '')\n } : undefined,\n accountName: values.schoolOrDistrict,\n jobTitle: values.jobTitle,\n crmId: crmId || undefined\n }\n };\n\n braze.logFormSubmission({\n eventType: StreamableFormEvent.LivestreamBookingFormSubmit,\n source: eventSource,\n conversion: BrazeConversion.LivestreamBooking,\n user: brazeUser,\n productType: 'sl'\n });\n } catch (err) {\n console.error('Failed to log submission event to Braze', err);\n }\n }\n\n const hasLoaded = (\n livestream.hasCompleted &&\n bookingQuota.isLoaded &&\n config.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n const livestreamBookingProps: LivestreamBookingProps = {\n livestream: livestream.data,\n formStage,\n initialValues,\n isAuthenticated: currentUser.data?.isAuthenticated,\n isStudent,\n preferSignIn: props.preferSignIn,\n success,\n error,\n isPastLivestream: DateHelper.isBefore(livestream.data.endDateTime, new Date()),\n showSpinner: submitting,\n onSubmit,\n onTryAgain,\n setFormStage,\n googleMapsApiKey: config.data.googleMapsApiKey,\n searchProspectsUrl: UrlHelper.safeUrlConcat(config.data.gatewayApiUrl, '/v1/search/prospects'),\n emailAddress: currentUser.data?.email,\n presentationSlug: props.presentationSlug,\n bookingQuota: {\n showInfo: bookingQuota.hasBookingLimitations,\n limitReached: bookingQuota.hasReachedBookingLimit,\n used: bookingQuota.bookingsUsed,\n max: bookingQuota.totalBookingsAvailable\n }\n };\n\n if (props.fromPageLoad) {\n return (\n <LivestreamPage {...livestreamBookingProps} />\n );\n }\n\n return <LivestreamPopup {...livestreamBookingProps} closePopup={props.closePopup} />;\n}\n","import React from 'react';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\n\nimport { createPresentationDispatcherView } from 'shared/utils/createPresentationDispatcherView';\n\nimport {\n LivestreamView\n} from 'apps/livestreams/views/livestream/livestream/LivestreamView';\n\ninterface LivestreamRouteProps {\n presentationSlug: string | null;\n id: string;\n fromPageLoad: boolean;\n preferSignIn: boolean;\n closePopup: () => void;\n}\n\nexport const BaseLivestreamView = createPresentationDispatcherView<LivestreamRouteProps>({\n [PresentationType.StreamableLearning]: ctx => (\n <LivestreamView\n id={ctx.id}\n fromPageLoad={ctx.fromPageLoad}\n preferSignIn={ctx.preferSignIn}\n closePopup={ctx.closePopup}\n presentationSlug={ctx.presentationSlug}\n />\n )\n});\n\nBaseLivestreamView.displayName = 'BaseLivestreamView';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"-brFp4w1.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/streamable-learning/components/livestream-details/livestream-details.module.scss","../../../../libs/shared/src/apps/streamable-learning/components/livestream-details/LivestreamDetails.tsx","../../../../libs/shared/src/hooks/useBrazeClientService.ts","../../src/shared/enums/BrazeSource.ts","../../src/shared/enums/BrazeTopic.ts","../../src/shared/hooks/useBookingQuota.ts","../../src/apps/livestreams/components/livestream-booking-error/livestream-booking-error.module.scss","../../src/apps/livestreams/components/livestream-booking-error/LivestreamBookingError.tsx","../../src/apps/livestreams/components/livestream-booking-quota/LivestreamBookingQuota.tsx","../../src/apps/livestreams/components/livestream-booking-success/livestream-booking-success.module.scss","../../src/apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess.tsx","../../src/apps/livestreams/components/livestream-cover-image/LivestreamCoverImage.tsx","../../src/apps/livestreams/components/livestream-form/LivestreamForm.tsx","../../src/apps/livestreams/views/livestream/LivestreamViewUtils.ts","../../src/apps/livestreams/views/livestream/livestream/livestream.module.scss","../../src/apps/livestreams/views/livestream/livestream/LivestreamView.tsx","../../src/apps/livestreams/views/livestream/BaseLivestreamView.tsx"],"sourcesContent":[":local {\n .logoContainer {\n width: 3.75rem;\n height: 3.75rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { TimezoneHelper } from 'libs/shared/apps/streamable-learning/utils/TimezoneHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CalendarCheckSvg } from 'libs/shared/images/svg/objects/CalendarCheckSvg';\nimport { CalendarSvg } from 'libs/shared/images/svg/objects/CalendarSvg';\nimport { GlobeSvg } from 'libs/shared/images/svg/objects/GlobeSvg';\nimport { TimerSvg } from 'libs/shared/images/svg/status/TimerSvg';\nimport { Audience, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-details.module.scss';\n\nconst namespace = 'streamable.livestreamDetails';\n\ninterface LivestreamDetailsProps {\n logoUrl?: string;\n logoBgColour?: string;\n companyId?: string;\n companyName?: string;\n companyAppLink?: Core.AppLink;\n eventName: string;\n audiences?: Audience[];\n startTime: string;\n endTime: string;\n description?: string;\n isPastLivestream?: boolean;\n timezone?: string;\n}\n\nexport function LivestreamDetails(props: LivestreamDetailsProps) {\n function getDuration() {\n return `${DateHelper.diffBetween(props.endTime, props.startTime, 'minutes')}m`;\n }\n\n function getTimezoneDateTime(dateTime: string): Date {\n return TimezoneHelper.convertUTCToTimezoneDate(dateTime);\n }\n\n function getTime(time: string): string {\n return DateHelper.format(getTimezoneDateTime(time), 'h:mma');\n }\n\n function getDate(date: string): string {\n return DateHelper.format(getTimezoneDateTime(date), 'Do MMMM');\n }\n\n function getDisplayTimezone(timezone?: string): string {\n return TimezoneHelper.getTimezoneInfo(timezone).longGeneric;\n }\n\n function getMergedAudienceName(): string {\n return AudienceHelper.getMergedPresentationAudienceString(props.audiences as PresentationAudience[])?.name;\n }\n\n const logoFallbackBgClassName = getBgColorClass(props.companyName, BG_COLOUR_CLASS_NAMES);\n\n return (\n <>\n <div className='d-flex align-items-center mb-2'>\n {props.logoUrl && (\n <AppLink\n appLink={props.companyAppLink}\n >\n <div className={`${styles.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`}>\n <BaseImage\n data={ImageHelper.createUrl(props.logoUrl, { size: ImageSize.Small })}\n alt={props.companyName}\n className={!props.logoBgColour && logoFallbackBgClassName}\n imageStyle={{\n backgroundColor: props.logoBgColour\n }}\n preload\n />\n </div>\n </AppLink>\n\n )}\n <div className='d-flex flex-column justify-content-between'>\n {props.companyName &&\n <AppLink\n appLink={props.companyAppLink}\n className='text-uppercase text-wrap d-block text-truncate mb-0'\n title={props.companyName}\n >\n {props.companyName}\n </AppLink>\n }\n <h1 className='h4 mb-0'>{props.eventName}</h1>\n </div>\n </div>\n\n <div className='d-flex gap-2 mb-3'>\n {!!props.audiences?.length && (\n <div className='rounded-pill border border-dark px-2'>\n {getMergedAudienceName()}\n </div>\n )}\n <div className='rounded-pill fw-semibold bg-dark text-white px-2'>\n <span className='align-middle'>{getDuration()}</span>\n </div>\n </div>\n\n {props.isPastLivestream && (\n <div className='d-inline-block bg-light-green rounded-pill mb-3'>\n <SvgContainer svg={CalendarCheckSvg} />\n <p className='d-inline ms-1 mb-0'><Text namespace={namespace} phrase='pastEvent' /></p>\n </div>\n )}\n\n {!props.isPastLivestream && (\n <>\n <p className='mb-2'>\n <SvgContainer svg={TimerSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getTime(props.startTime)}</span>\n </p>\n <p className='mb-2'>\n <SvgContainer svg={CalendarSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDate(props.startTime)}</span>\n </p>\n <p className='mb-3'>\n <SvgContainer svg={GlobeSvg} size={SvgContainerSize.Small} />\n <span className='ms-1'>{getDisplayTimezone(props.timezone)}</span>\n </p>\n </>\n )}\n\n {props.description && <p className='mb-3 pre-wrap text-break' dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(LinkifyHelper.linkifyText(props.description)) }} />}\n </>\n );\n}\n","import { type BrazeUser, type FormEventType } from '@clickview/braze-client';\n\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\ninterface HydrateUserDataOptions {\n conversion: string;\n source: string;\n}\n\nfunction hydrateUserData(user: BrazeUser, data: HydrateUserDataOptions): BrazeUser {\n return {\n ...user,\n custom: {\n ...user?.custom,\n source: data.source\n },\n event: {\n ...user?.event,\n conversion: data.conversion\n }\n };\n}\n\nexport interface LogFormSubmissionOptions<TConversion extends string, TSource extends string> {\n conversion: TConversion;\n source: TSource;\n eventType: FormEventType;\n user: BrazeUser;\n productType: 'cv' | 'sl';\n additionalData?: Record<string, any>;\n callback?: (success: boolean) => void;\n}\n\nexport function useBrazeClientService<TConversion extends string, TSource extends string>() {\n const braze = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n\n function logFormSubmission({\n user,\n additionalData,\n source,\n eventType,\n conversion,\n productType,\n callback\n }: LogFormSubmissionOptions<TConversion, TSource>) {\n const brazeUser = hydrateUserData(user, {\n source,\n conversion\n });\n\n braze.setUserInit(brazeUser);\n \n braze.logFormEvent({\n eventType,\n additionalData,\n callback,\n internalOptions: {\n subscriptionGroups: productType\n }\n });\n }\n\n return {\n client: braze,\n logFormSubmission\n };\n}\n","export enum BrazeSource {\n LivestreamBooking = 'cv_product_livestream'\n}\n","export enum BrazeConversion {\n LivestreamBooking = 'Submit - Livestream Booking'\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\n\nexport function useBookingQuota() {\n const { accessPolicy, isLoaded: accessPolicyLoaded } = useAccessPolicy();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const hasBookingLimitations = !!accessPolicy?.metadata?.maxLiveBookings;\n\n const bookingCount = Flight.useBasicFetch<{ count: number }>(\n currentUser.data?.isAuthenticated &&\n hasBookingLimitations &&\n LivestreamRequests.customerLifetimeBookingCount()\n );\n\n const isLoaded = currentUser.hasCompleted\n && (hasBookingLimitations ?\n bookingCount.hasCompleted && accessPolicyLoaded :\n true\n );\n\n // Flat cap — no referral bonus (unlike streams).\n const totalBookingsAvailable = accessPolicy?.metadata?.maxLiveBookings ?? Number.MAX_SAFE_INTEGER;\n const bookingsUsed = bookingCount.data?.count ?? 0;\n const hasReachedBookingLimit = bookingsUsed >= totalBookingsAvailable;\n\n return {\n isLoaded,\n accessPolicy,\n bookingsUsed,\n totalBookingsAvailable,\n hasReachedBookingLimit,\n hasBookingLimitations\n };\n}\n",":local {\n .logo,\n .image {\n height: 9.25rem;\n width: 9.25rem;\n }\n}\n","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './livestream-booking-error.module.scss';\n\nconst namespace = 'livestream.bookingError';\n\ninterface LivestreamBookingErrorProps {\n onTryAgain: () => void;\n}\n\nexport function LivestreamBookingError(props: LivestreamBookingErrorProps) {\n return (\n <div className='d-flex flex-column justify-content-center'>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <img\n className={styles.image}\n src={ImageUrls.Live.General.LOST_MESSAGE_BOTTLE}\n />\n </div>\n <h3 className='text-center mb-3'><Text namespace={namespace} phrase='heading' /></h3>\n <p className='text-center mb-3'><Text namespace={namespace} phrase='description' /></p>\n <button className='btn btn-dark' onClick={props.onTryAgain}><Text namespace={namespace} phrase='buttonLabel' /></button>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'livestream.liveStreamBookingQuota';\n\ninterface LivestreamBookingQuotaProps {\n showUpgrade: boolean;\n upgradeAppLink: Core.AppLink;\n max: number;\n used: number;\n}\n\nexport function LivestreamBookingQuota(props: LivestreamBookingQuotaProps) {\n return (\n <div className='bg-light-blue rounded p-2 mt-3 d-flex flex-column gap-2' role='alert'>\n <div>\n <strong><Text namespace={namespace} phrase='bookingQuota' /></strong>\n \n <Text namespace={namespace} phrase='bookingQuotaUsed' options={{\n bookingQuota: props.max,\n bookingQuotaUsed: props.used\n }} />\n </div>\n {props.showUpgrade && (\n <div >\n <Text namespace={namespace} phrase='bookingQuotaReached' />\n \n <Text namespace={namespace} phrase='requestUpgradePrefix' />\n \n <AppLink\n className='btn-link d-inline-block text-info'\n appLink={props.upgradeAppLink}\n >\n <Text namespace={namespace} phrase='requestUpgrade' />\n </AppLink>\n .\n </div>\n )}\n </div>\n );\n}\n",":local {\n .logo {\n height: 9.25rem;\n width: 9.25rem;\n }\n}\n","import React from 'react';\n\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { CheckCircleSvg } from 'libs/shared/images/svg/status/CheckCircleSvg';\nimport { Livestream } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './livestream-booking-success.module.scss';\n\nconst namespace = 'livestream.bookingSuccess';\n\ninterface LivestreamBookingSuccessProps {\n livestream: Livestream;\n}\n\nexport function LivestreamBookingSuccess(props: LivestreamBookingSuccessProps) {\n return (\n <>\n <div\n className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`}\n >\n <BaseImage\n data={ImageHelper.createUrl(props.livestream.company.logo?.url, { size: ImageSize.Small })}\n alt={props.livestream.company.name}\n preload\n />\n </div>\n <div className='d-flex align-items-center justify-content-center mb-3 gap-1'>\n <SvgContainer svg={CheckCircleSvg} className='svg-container std text-success' />\n <h1 className='h3 mb-0 fw-semibold'><Text namespace={namespace} phrase='booked' /></h1>\n </div>\n <div className='my-3'>\n <LivestreamDetails\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n />\n </div>\n <p><Text namespace={namespace} phrase='emailReminder' /></p>\n </>\n );\n}\n","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\ninterface LivestreamCoverImageProps {\n coverImageUrl: string;\n className?: string;\n}\n\nexport function LivestreamCoverImage(props: LivestreamCoverImageProps) {\n return (\n <div\n className={`${props.className}`}\n style={props.coverImageUrl && { backgroundImage: `url(${ImageHelper._createUrl(props.coverImageUrl, { size: ImageSize.Large })})` }}\n />\n );\n}\n","import React from 'react';\nimport { Form } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { JobTitleInput } from 'libs/shared/apps/sign-up/components/steps/add-to-braze-step-item/JobTitleInput';\nimport { SearchLocalityInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchLocalityInput';\nimport { SearchSchoolInput } from 'libs/shared/apps/sign-up/components/steps/search-school-step-item/SearchSchoolInput';\nimport { SearchSchoolData } from 'libs/shared/apps/sign-up/interfaces/SearchSchoolData';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { FormWrapper, useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\n\nconst namespace = 'livestream.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseValidationSchema = Yup.object({\n firstName: Yup.string().required(getPhrase('firstNameRequired')),\n lastName: Yup.string().required(getPhrase('lastNameRequired')),\n email: Yup.string().email(getPhrase('emailValid')).required(getPhrase('emailRequired')),\n attendees: Yup.string().required(getPhrase('attendeesRequired'))\n});\n\nconst guestValidationSchema = baseValidationSchema.concat(Yup.object({\n schoolOrDistrict: Yup.string().required(getPhrase('schoolOrDistrictRequired')),\n jobTitle: Yup.string().required(getPhrase('jobTitleRequired')),\n phoneNumber: Yup.string().required(getPhrase('phoneNumberRequired')).matches(/^[0-9]+$/, getPhrase('phoneNumberValid'))\n}));\n\ninterface LivestreamFormFieldsProps {\n isAuthenticated: boolean;\n showSpinner: boolean;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nfunction LivestreamFormFields(props: LivestreamFormFieldsProps) {\n const formikProps = useFormikContextWrapper<LivestreamBookingFormValues>();\n\n const [ searchSchoolData, setSearchSchoolData ] = React.useState<SearchSchoolData>({});\n const [ cantFindSchool, setCantFindSchool ] = React.useState<boolean>(false);\n\n function clearFormikSchoolData() {\n formikProps.setFieldValue('schoolOrDistrict', '');\n formikProps.setFieldValue('country', '');\n formikProps.setFieldValue('province', '');\n formikProps.setFieldValue('prospectId', '');\n triggerValidation();\n }\n\n function setLocalityData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n clearFormikSchoolData();\n }\n\n function clearLocalityData(): void {\n setSearchSchoolData({});\n clearFormikSchoolData();\n }\n\n function setSchoolData(data: SearchSchoolData): void {\n setSearchSchoolData({ ...searchSchoolData, ...data });\n\n formikProps.setFieldValue('schoolOrDistrict', data.schoolName);\n formikProps.setFieldValue('country', data.country);\n formikProps.setFieldValue('province', data.province);\n formikProps.setFieldValue('prospectId', data.prospectId);\n\n triggerValidation();\n }\n\n function clearSchooldata(): void {\n setSearchSchoolData({\n ...searchSchoolData,\n prospectId: undefined,\n schoolName: undefined,\n schoolPostCode: undefined\n });\n clearFormikSchoolData();\n }\n\n function onClickNoSuggestions(name: string) {\n setCantFindSchool(true);\n\n formikProps.setFieldValue('schoolOrDistrict', name);\n\n triggerValidation();\n }\n\n // Forcing the form to validate needs to happen in a setTimeout to work — Formik quirk.\n function triggerValidation() {\n window.setTimeout(() => formikProps.validateForm(), 0);\n }\n\n return (\n <Form>\n <div className='row my-3'>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('firstName')}\n name='firstName'\n placeholder={getPhrase('firstNamePlaceholder')}\n value={formikProps.values?.firstName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12 col-sm-6'>\n <FormField\n label={getPhrase('lastName')}\n name='lastName'\n placeholder={getPhrase('lastNamePlaceholder')}\n value={formikProps.values?.lastName}\n disabled={props.isAuthenticated}\n showRequiredStar={!props.isAuthenticated}\n />\n </div>\n <div className='col-12'>\n <FormField\n label={getPhrase('email')}\n name='email'\n placeholder={getPhrase('emailPlaceholder')}\n value={formikProps.values?.email}\n disabled={props.isAuthenticated && !!props.emailAddress}\n showRequiredStar={!props.isAuthenticated || !props.emailAddress}\n />\n </div>\n {!props.isAuthenticated &&\n <>\n <div className='col-12'>\n {!cantFindSchool ?\n <>\n <SearchLocalityInput\n data={searchSchoolData}\n setData={setLocalityData}\n clearData={clearLocalityData}\n labelClassName='form-label'\n geoLocation={{ countryCode: 'US' }}\n googleMapsApiKey={props.googleMapsApiKey}\n required\n hideOnBlur\n />\n <SearchSchoolInput\n data={searchSchoolData}\n setData={setSchoolData}\n clearData={clearSchooldata}\n disabled={!searchSchoolData.schoolLocality}\n searchUrl={props.searchProspectsUrl}\n onClickNoSuggestions={onClickNoSuggestions}\n required\n placeholder={!searchSchoolData.schoolLocality && getPhrase('schoolPlaceholder')}\n hideOnBlur\n />\n </> :\n <FormField\n label={getPhrase('schoolOrDistrict')}\n name='schoolOrDistrict'\n value={formikProps.values?.schoolOrDistrict}\n showRequiredStar={true}\n placeholder={getPhrase('schoolOrDistrictPlaceholder')}\n autoFocus\n />\n }\n </div>\n <div className='col-12'>\n <JobTitleInput\n id='job-title'\n error={formikProps.touched?.jobTitle && formikProps.errors?.jobTitle}\n countryCode={CountryCode.US}\n initialValue={formikProps.values?.jobTitle}\n onChange={jobTitle => formikProps.setFieldValue('jobTitle', jobTitle, false)}\n labelClassName='form-label'\n isTertiary={false}\n required\n />\n </div>\n </>\n }\n <div className='col-12 col-sm-6 col-xl-4'>\n <FormField\n type='number'\n label={getPhrase('attendees')}\n name='attendees'\n placeholder={getPhrase('attendeesPlaceholder')}\n min={1}\n value={formikProps.values?.attendees}\n showRequiredStar\n />\n </div>\n {!props.isAuthenticated && (\n <div className='col'>\n <FormField\n label={getPhrase('phoneNumber')}\n name='phoneNumber'\n placeholder={getPhrase('phoneNumberPlaceholder')}\n value={formikProps.values?.phoneNumber}\n showRequiredStar\n />\n </div>\n )}\n </div>\n <SpinnerButton type='submit' className='w-100' variant='dark' showSpinner={props.showSpinner} disabled={!formikProps.isValid} >\n <Text namespace={namespace} phrase='book' />\n </SpinnerButton>\n </Form>\n );\n}\n\nexport interface LivestreamBookingFormValues {\n firstName: string;\n lastName: string;\n email: string;\n attendees: string;\n schoolOrDistrict: string;\n jobTitle: string;\n phoneNumber: string;\n country: string;\n province: string;\n prospectId: string;\n}\n\ninterface LivestreamFormProps {\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n showSpinner: boolean;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n}\n\nexport function LivestreamForm(props: LivestreamFormProps) {\n return (\n <FormWrapper<LivestreamBookingFormValues>\n initialValues={props.initialValues}\n validationSchema={props.isAuthenticated ? baseValidationSchema : guestValidationSchema}\n validateOnMount={true}\n onSubmit={props.onSubmit}>\n <LivestreamFormFields\n emailAddress={props.emailAddress}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n </FormWrapper>\n );\n}\n","import { Core } from 'libs/common/core';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Livestream } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getLivestreamAppLink(\n livestream: Livestream,\n presentationSlug: string | null\n): Core.AppLink {\n return {\n application: AppChannels.LIVESTREAMS,\n action: Actions.Livestreams.LIVESTREAM,\n args: [ presentationSlug, livestream?.id, TextHelper.slugify(livestream?.name) ]\n };\n}\n","@import '~styles/utils/include-media';\n:local {\n .noRecording {\n background-color: $gray-100;\n }\n\n .coverImage {\n height: 100px;\n background-position: center 40%;\n background-size: cover;\n\n &.popup {\n @include media('>lg') {\n height: 100%;\n }\n }\n\n &.page {\n @include media('>md') {\n height: 100%;\n }\n }\n }\n}\n","import React from 'react';\nimport { type BrazeUser, StreamableFormEvent } from '@clickview/braze-client';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { Flight } from 'libs/common/react/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LivestreamBookingDescriptor, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ProspectLookup } from 'libs/shared/apps/sign-up/enums/ProspectLookup';\nimport { BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatusString } from 'libs/shared/enums/CurationStatus';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { BrazeRequests } from 'libs/shared/flight-requests/BrazeRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBrazeClientService } from 'libs/shared/hooks/useBrazeClientService';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProfileApiClient } from 'libs/shared/hooks/UseProfileApiClient';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Livestream } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\nimport { BrazeConversion } from 'shared/enums/BrazeTopic';\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { useBookingQuota } from 'shared/hooks/useBookingQuota';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport {\n LivestreamBookingError\n} from 'apps/livestreams/components/livestream-booking-error/LivestreamBookingError';\nimport { LivestreamBookingQuota } from 'apps/livestreams/components/livestream-booking-quota/LivestreamBookingQuota';\nimport {\n LivestreamBookingSuccess\n} from 'apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess';\nimport {\n LivestreamCoverImage\n} from 'apps/livestreams/components/livestream-cover-image/LivestreamCoverImage';\nimport {\n LivestreamBookingFormValues,\n LivestreamForm\n} from 'apps/livestreams/components/livestream-form/LivestreamForm';\nimport {\n getLivestreamAppLink\n} from 'apps/livestreams/views/livestream/LivestreamViewUtils';\n\nimport styles from './livestream.module.scss';\n\nconst namespace = 'livestream.livestreamView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LivestreamBookingProps {\n livestream: Livestream;\n formStage: boolean;\n initialValues: LivestreamBookingFormValues;\n isAuthenticated: boolean;\n isStudent: boolean;\n preferSignIn: boolean;\n success: boolean;\n error: boolean;\n isPastLivestream: boolean;\n showSpinner: boolean;\n onSubmit: (values: LivestreamBookingFormValues) => void;\n onTryAgain: () => void;\n setFormStage: React.Dispatch<React.SetStateAction<boolean>>;\n googleMapsApiKey: string;\n searchProspectsUrl: string;\n emailAddress: string;\n presentationSlug: string | null;\n bookingQuota: {\n showInfo: boolean,\n limitReached: boolean,\n used: number,\n max: number\n };\n}\n\nfunction LivestreamContent(props: LivestreamBookingProps) {\n const showAuthLinks = !props.isAuthenticated && !props.livestream.recording;\n const showUpgrade = props.bookingQuota.limitReached && props.isAuthenticated && !props.isStudent;\n const showBook =\n !showUpgrade &&\n !props.isPastLivestream &&\n !props.formStage &&\n (props.isAuthenticated && !props.isStudent);\n\n // \"Sign up to book\" opens the in-Lite sign-up popup (same path as the header CTA) so the\n // trial is created with the correct variant (clickview-live) and appLink (livestream:<id>),\n // both sourced from view-models the livestream page already populates (useDeepLinks).\n // No redirectUrl param here — those view-models drive the post-sign-up destination.\n const signUpLink = {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n };\n\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n\n const signInLink = {\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: redirectUrl !== '/' ? { redirectUrl } : {}\n };\n\n const upgradeLink = {\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n };\n\n const companyAppLink = {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.PARTNER_DASHBOARD,\n args: [ props.presentationSlug, props.livestream.company.id, TextHelper.slugify(props.livestream.company.name) ]\n };\n \n return (\n <>\n {!props.success && !props.error && (\n <>\n <LivestreamDetails\n logoUrl={props.livestream.company.logo?.url}\n logoBgColour={props.livestream.company.metadata?.colour}\n companyId={props.livestream.company.id}\n companyName={props.livestream.company.name}\n eventName={props.livestream.name}\n audiences={props.livestream.audiences}\n startTime={props.livestream.startDateTime}\n endTime={props.livestream.endDateTime}\n description={!props.formStage && props.livestream.description}\n isPastLivestream={props.isPastLivestream}\n companyAppLink={companyAppLink}\n />\n {props.bookingQuota.showInfo && (\n <LivestreamBookingQuota\n showUpgrade={showUpgrade}\n max={props.bookingQuota.max}\n used={props.bookingQuota.used}\n upgradeAppLink={upgradeLink}\n />\n )}\n {props.formStage && (\n <LivestreamForm\n emailAddress={props.emailAddress}\n initialValues={props.initialValues}\n isAuthenticated={props.isAuthenticated}\n showSpinner={props.showSpinner}\n onSubmit={props.onSubmit}\n googleMapsApiKey={props.googleMapsApiKey}\n searchProspectsUrl={props.searchProspectsUrl}\n />\n )}\n {showBook && (\n <button\n className={classNames('btn btn-dark w-100', { 'mt-3': props.bookingQuota.showInfo })}\n onClick={() => props.setFormStage(true)}\n >\n <Text namespace={namespace} phrase='book' />\n </button>\n )}\n {props.isPastLivestream && !props.livestream.recording &&\n <div className={`${styles.noRecording} p-2 rounded`}>\n <Text namespace={namespace} phrase='noRecording' />\n </div>\n }\n {props.livestream.recording &&\n <AppLink\n appLink={{\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [\n props.presentationSlug,\n props.livestream.recording.id,\n TextHelper.slugify(props.livestream.recording.name)\n ]\n }}>\n <button className='btn btn-outline-dark w-100'><Text namespace={namespace} phrase='recording' /></button>\n </AppLink>\n }\n\n {showAuthLinks && props.preferSignIn &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInToBookButton' />\n </AppLink>\n <p className='mt-3 mb-0 text-center small text-secondary'>\n <Text namespace={namespace} phrase='noAccount' />\n <AppLink\n className='info-link d-inline ms-1'\n appLink={signUpLink}\n >\n <Text namespace={namespace} phrase='signUpLink' />\n </AppLink>\n </p>\n </>\n }\n {showAuthLinks && !props.preferSignIn &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signUpLink}\n >\n <Text namespace={namespace} phrase='signUpButton' />\n </AppLink>\n <p className='mt-3 mb-0 text-center small text-secondary'>\n <Text namespace={namespace} phrase='alreadyHaveAccount' />\n <AppLink\n className='info-link ms-1'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInButton' />\n </AppLink>\n </p>\n </>\n }\n </>\n )}\n {props.success && (\n <LivestreamBookingSuccess livestream={props.livestream} />\n )}\n {props.error && (\n <LivestreamBookingError onTryAgain={props.onTryAgain} />\n )}\n </>\n );\n}\n\ninterface LivestreamPopupProps extends LivestreamBookingProps {\n closePopup: () => void;\n}\n\nfunction LivestreamPopup(props: LivestreamPopupProps) {\n function onClose() {\n props.closePopup();\n\n ScrollHelper.preventScrollTop();\n\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n const isLivestreamAppLink =\n currentAppLink.application === AppChannels.LIVESTREAMS &&\n currentAppLink.action === Actions.Livestreams.LIVESTREAM;\n if (isLivestreamAppLink)\n Core.AppLinkHelper.trigger(ContextService.getPreviousRoute()?.appLink);\n }\n\n return (\n <Popup\n size='xl'\n bodyClassName='rounded-3 overflow-hidden p-0'\n closePopup={onClose}\n >\n <button className='btn-close position-absolute top-0 end-0 p-3' onClick={onClose} />\n\n <div className='row g-0'>\n <div className='col-12 col-lg-6'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.popup}`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className='col-12 col-lg p-4 m-lg-2'>\n <LivestreamContent {...props} />\n </div>\n </div>\n </Popup>\n );\n}\n\ninterface LivestreamPageProps extends LivestreamBookingProps { }\n\nfunction LivestreamPage(props: LivestreamPageProps) {\n return (\n <div className='row g-0 px-3'>\n <div className='col-12 col-md-6 col-lg-5'>\n <LivestreamCoverImage className={`${styles.coverImage} ${styles.page} rounded`} coverImageUrl={props.livestream.company.cover?.url} />\n </div>\n <div className='col-12 col-md px-md-3 pt-2 pt-md-0'>\n <LivestreamContent {...props} />\n </div>\n </div>\n );\n}\n\ninterface LivestreamViewProps extends PopupProps {\n id: string;\n fromPageLoad: boolean;\n presentationSlug: string | null;\n preferSignIn: boolean;\n}\n\nexport function LivestreamView(props: LivestreamViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const fetchAsync = useGetFetchAsync();\n const braze = useBrazeClientService<BrazeConversion, BrazeSource>();\n const [ formStage, _setFormStage ] = React.useState(false);\n const [ success, setSuccess ] = React.useState(false);\n const [ error, setError ] = React.useState(false);\n const [ submitting, setSubmitting ] = React.useState(false);\n const [ initialValues, setInitialValues ] = React.useState<LivestreamBookingFormValues>({\n firstName: '',\n lastName: '',\n email: '',\n attendees: '',\n schoolOrDistrict: '',\n jobTitle: '',\n phoneNumber: '',\n country: '',\n province: '',\n prospectId: ''\n });\n\n const { createOrUpdateProfile } = useProfileApiClient();\n const bookingQuota = useBookingQuota();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const livestream = Flight.useBasicFetch<Livestream>(LivestreamRequests.livestream(props.id));\n\n const { hasPermissions } = usePermissions();\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n useDeepLinks({ id: props.id, app: 'livestreams' });\n\n const pageMetadata = PageMetadataHelper.getDefaultMetadata({\n title: livestream.data?.name,\n description: livestream.data?.description,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: getLivestreamAppLink(livestream.data, props.presentationSlug)\n }),\n allowIndexing: true\n });\n\n useSetPageMetadata({\n ...pageMetadata,\n _isPopupUp: !props.fromPageLoad\n });\n\n useHandleObjectError(livestream);\n\n React.useEffect(() => {\n if (!livestream.data || livestream.data?.status === CurationStatusString.Published) return;\n\n Core.ErrorHelper.throw(new NotFoundError());\n }, [livestream.data?.status]);\n\n React.useEffect(() => {\n if (!currentUser.data?.isAuthenticated) return;\n\n setInitialValues({\n ...initialValues,\n firstName: currentUser.data.givenName,\n lastName: currentUser.data.familyName,\n email: currentUser.data.email\n });\n }, [currentUser.data?.isAuthenticated]);\n\n async function onSubmit(values: LivestreamBookingFormValues) {\n if (bookingQuota.hasBookingLimitations && bookingQuota.hasReachedBookingLimit) {\n setError(true);\n return;\n }\n \n try {\n setSubmitting(true);\n setInitialValues(values);\n\n await fetchAsync(LivestreamRequests.createBooking({\n eventId: livestream.data.id,\n eventType: 'Livestream',\n firstName: values.firstName,\n lastName: values.lastName,\n email: values.email,\n attendees: values.attendees,\n status: 1\n }));\n\n /**\n * Authenticated users already exist in Braze and are identified on startup.\n * Anonymous bookings need to be created in Braze and logged as a lead.\n */\n if (!currentUser.data?.isAuthenticated) {\n createOrUpdateProfile({\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n countryCode: values.country\n });\n\n logBrazeEvent(values);\n }\n\n logAnalyticsEvent(WorkflowPhase.Complete, values);\n\n setSuccess(true);\n } catch {\n setError(true);\n _setFormStage(false);\n } finally {\n setSubmitting(false);\n }\n }\n\n function onTryAgain() {\n setError(false);\n _setFormStage(true);\n }\n\n function setFormStage() {\n _setFormStage(true);\n logAnalyticsEvent(WorkflowPhase.Start);\n }\n\n function logAnalyticsEvent(workflowPhase: WorkflowPhase, values?: LivestreamBookingFormValues) {\n AnalyticsHelper.logUserAction({\n id: livestream.data.id,\n name: livestream.data.name,\n ...(values?.attendees && { attendees: values.attendees })\n }, {\n entity: EntityType.Livestream,\n actionType: UserAction.Submit,\n location: LocationContext.LivestreamBookingForm,\n descriptor: props.fromPageLoad ?\n LivestreamBookingDescriptor.FullPage :\n LivestreamBookingDescriptor.Popup,\n workflowPhase\n });\n }\n\n async function logBrazeEvent(values: LivestreamBookingFormValues) {\n const eventSource = BrazeSource.LivestreamBooking;\n \n try {\n await fetchAsync(BrazeRequests.createUser({\n email: values.email,\n source: eventSource,\n instanceRegion: currentUser.data?.instanceRegion,\n syncToCrm: true\n }));\n } catch {}\n \n try {\n let crmId: string;\n\n if (values.prospectId) {\n const prospectLookups = await fetchAsync<ProspectLookup[]>(BrazeRequests.prospectLookups(values.prospectId));\n crmId = prospectLookups?.find(l => l.type === 'crm_id')?.externalId;\n }\n\n const brazeUser: BrazeUser = {\n email: values.email,\n firstName: values.firstName,\n lastName: values.lastName,\n phone: values.phoneNumber,\n custom: {\n accountAddress: values?.province ? {\n countryCode: values?.country,\n province: BrazeHelper.parseProvince(values?.province || '')\n } : undefined,\n accountName: values.schoolOrDistrict,\n jobTitle: values.jobTitle,\n crmId: crmId || undefined\n }\n };\n\n braze.logFormSubmission({\n eventType: StreamableFormEvent.LivestreamBookingFormSubmit,\n source: eventSource,\n conversion: BrazeConversion.LivestreamBooking,\n user: brazeUser,\n productType: 'sl'\n });\n } catch (err) {\n console.error('Failed to log submission event to Braze', err);\n }\n }\n\n const hasLoaded = (\n livestream.hasCompleted &&\n bookingQuota.isLoaded &&\n config.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n const livestreamBookingProps: LivestreamBookingProps = {\n livestream: livestream.data,\n formStage,\n initialValues,\n isAuthenticated: currentUser.data?.isAuthenticated,\n isStudent,\n preferSignIn: props.preferSignIn,\n success,\n error,\n isPastLivestream: DateHelper.isBefore(livestream.data.endDateTime, new Date()),\n showSpinner: submitting,\n onSubmit,\n onTryAgain,\n setFormStage,\n googleMapsApiKey: config.data.googleMapsApiKey,\n searchProspectsUrl: UrlHelper.safeUrlConcat(config.data.gatewayApiUrl, '/v1/search/prospects'),\n emailAddress: currentUser.data?.email,\n presentationSlug: props.presentationSlug,\n bookingQuota: {\n showInfo: bookingQuota.hasBookingLimitations,\n limitReached: bookingQuota.hasReachedBookingLimit,\n used: bookingQuota.bookingsUsed,\n max: bookingQuota.totalBookingsAvailable\n }\n };\n\n if (props.fromPageLoad) {\n return (\n <LivestreamPage {...livestreamBookingProps} />\n );\n }\n\n return <LivestreamPopup {...livestreamBookingProps} closePopup={props.closePopup} />;\n}\n","import React from 'react';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\n\nimport { createPresentationDispatcherView } from 'shared/utils/createPresentationDispatcherView';\n\nimport {\n LivestreamView\n} from 'apps/livestreams/views/livestream/livestream/LivestreamView';\n\ninterface LivestreamRouteProps {\n presentationSlug: string | null;\n id: string;\n fromPageLoad: boolean;\n preferSignIn: boolean;\n closePopup: () => void;\n}\n\nexport const BaseLivestreamView = createPresentationDispatcherView<LivestreamRouteProps>({\n [PresentationType.StreamableLearning]: ctx => (\n <LivestreamView\n id={ctx.id}\n fromPageLoad={ctx.fromPageLoad}\n preferSignIn={ctx.preferSignIn}\n closePopup={ctx.closePopup}\n presentationSlug={ctx.presentationSlug}\n />\n )\n});\n\nBaseLivestreamView.displayName = 'BaseLivestreamView';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,r as n,t as r}from"./snXCXfT6.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u}from"./BX0wDJmp.chunk.js";import{i as d,t as f}from"./BMKh-xhT2.chunk.js";import{t as p}from"./BDwjs8qz2.chunk.js";import{t as m}from"./CVHQXNzi2.chunk.js";import{t as h}from"./BrbeV-Gn2.chunk.js";import{t as g}from"./CqrjHjAN.chunk.js";import{t as _}from"./eoAypzU3.chunk.js";import{t as v}from"./QCFxJYkI2.chunk.js";import{t as y}from"./CduNFx13.chunk.js";import{t as b}from"./B3gsVN-_.chunk.js";import{t as x}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{n as t,r as n,t as r}from"./snXCXfT6.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u}from"./BX0wDJmp.chunk.js";import{i as d,t as f}from"./BMKh-xhT2.chunk.js";import{t as p}from"./BDwjs8qz2.chunk.js";import{t as m}from"./CVHQXNzi2.chunk.js";import{t as h}from"./BrbeV-Gn2.chunk.js";import{t as g}from"./CqrjHjAN.chunk.js";import{t as _}from"./eoAypzU3.chunk.js";import{t as v}from"./QCFxJYkI2.chunk.js";import{t as y}from"./CduNFx13.chunk.js";import{t as b}from"./B3gsVN-_.chunk.js";import{t as x}from"./CLvImDXv2.chunk.js";import{t as S}from"./Dfw0sxVt2.chunk.js";import{n as C,t as w}from"./CpFtf-tI2.chunk.js";import{t as T}from"./DBkEQkKm2.chunk.js";import{t as E}from"./CCrnRkGN2.chunk.js";import{n as D,r as O}from"./BGswYbRT.chunk.js";import{n as k}from"./xa4cS6Fq.chunk.js";import{t as A}from"./Z4RlHaVG.chunk.js";import{l as j,o as M}from"./BOJK8LI1.chunk.js";import{t as N}from"./DzgAvoez.chunk.js";import{n as P,t as F}from"./CvtZ8ZFA2.chunk.js";import{t as I}from"./pP_cpHCu2.chunk.js";import{a as L,i as R,n as z,r as B,t as V}from"./Bf9r1ZoF2.chunk.js";import{t as H}from"./7I0L5W4N2.chunk.js";function U(e){let{hasPermissions:t}=b(),{hasProduct:n}=S(),r=u(g.currentUser());return!t(i.StudentExperience)&&n(v.Primary)&&r.data.isAuthenticated&&(!e||e.version===`v1`)}var W=e(s(),1),G=c(),K=`interactives.interactiveTitleAndActions`;function q(e){let t,n;return e._parentClip?(t=e._parentClip.name,n={application:l.CLIPS,action:_.Clips.PLAY_CLIP,args:[e._parentClip.id,o.slugify(e._parentClip.name)]}):(t=e._parentVideo.name,n={application:l.VIDEOS,action:_.Videos.PLAY_VIDEO,args:[null,e._parentVideo.id,o.slugify(e._parentVideo.name)]}),[t,n]}function J(e){let{hasPermissions:t}=b(),n=P({location:e.location,shareId:e.shareId,presentationSlug:null}),r=t(i.StudentExperience),a=e.interactive.status===p.Draft,[o,s]=q(e.interactive);return(0,G.jsx)(w.Provider,{value:K,children:(0,G.jsx)(`div`,{className:`d-flex justify-content-between align-items-center`,children:(0,G.jsxs)(`div`,{className:`inline-block w-100`,children:[(0,G.jsx)(`div`,{className:`ms-2 float-end`,children:!r&&(0,G.jsx)(A,{actions:n.getVideoActions(e.interactive),actionsDropdownClassName:`btn btn-outline-dark`,fetchMore:()=>n.fetchMoreActions(e.interactive)})}),(0,G.jsxs)(`h1`,{className:`h3 mb-2`,children:[a&&(0,G.jsx)(`div`,{className:`badge draft-badge me-2 align-bottom flex-shrink-0 h-auto lh-base`,children:(0,G.jsx)(C,{phrase:`draft`})}),e.interactive.name,!r&&(0,G.jsx)(M,{tooltipPlacement:`right`,className:`ps-1 d-inline-block`,video:e.interactive,yearGroups:e.commonVideoProps.yearGroups})]}),h.canViewOriginalVideo(e.interactive)&&(0,G.jsxs)(`div`,{className:`mb-1 me-3 clamp-1`,children:[(0,G.jsx)(C,{phrase:`viewOriginal`}),`\xA0`,(0,G.jsx)(y,{appLink:s,className:`text-info`,children:o})]})]})})})}function Y(e){let[t,n]=W.useState(!0),r=h.isVideoTypeArchived(e.interactive),a=W.useMemo(()=>O(),[]),{hasPermissions:o}=b();function s(e){n(!e)}return(0,G.jsxs)(`div`,{className:`px-3`,children:[r&&(0,G.jsx)(L,{typeId:e.interactive.typeId,hasStudentExperience:!0}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(x,{config:e.config,video:e.interactive,currentUser:e.currentUser,shareLink:e.shareLink,viewKey:e.viewKey,startTime:e.startTime,presentationSlug:null,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,relatedVideos:e.relatedVideos?.videos,onShowSummary:s,summaryPortalNode:a,token:e.token,collectAnonResults:e.collectAnonResults})}),(0,G.jsx)(`div`,{children:t&&(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,commonVideoProps:e.commonVideoProps,shareId:e.shareLink?.id})}),(0,G.jsx)(D,{node:a}),!o(i.StudentExperience)&&(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,relatedVideos:e.relatedVideos,audiences:e.audiences,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareLink?.id,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})}var X=a.encloseNamespace(`interactives.previewInteractive`);function Z(e){return(0,G.jsxs)(`div`,{className:`alert text-dark bg-light-blue px-2 rounded d-flex flex-column flex-lg-row justify-content-between mb-3 align-items-center`,role:`alert`,children:[e.isArchived?(0,G.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,G.jsx)(r,{svg:I,size:t.Standard,className:`me-2 svg-container`}),(0,G.jsxs)(`div`,{className:`w-100`,children:[(0,G.jsx)(`p`,{className:`fw-semibold mb-0`,children:X(`archivedInfoTitle`)}),(0,G.jsx)(`p`,{className:`mb-1`,children:X(`archivedInfo`)})]})]}):(0,G.jsx)(C,{phrase:`alert`}),e.isPreviewPreventScrubbingEnabled&&(0,G.jsx)(n,{title:X(`previewPreventScrubbingExplain`),trigger:[`hover`,`focus`],spanHack:!0,children:(0,G.jsxs)(`div`,{className:`d-flex mt-1 mt-lg-0`,children:[(0,G.jsx)(`div`,{className:`me-2`,children:(0,G.jsx)(C,{phrase:`previewPreventScrubbing`})}),(0,G.jsx)(E,{on:e.isPreviewingPreventScrubbing,onClick:e.toggleStudentMode})]})})]})}function Q(e,t){W.useEffect(()=>{t()},[e])}var $=`interactives.previewInteractive`,ee=a.encloseNamespace($);function te(e){let t=k(),[n,r]=W.useState(!1),{canConsume:i}=h.getCanBeConsumed(e.interactive);Q(n,a);function a(){t.playerRef?.current?.togglePreviewPreventScrubbing?.()}function s(){r(!n)}let c=e.interactives?.filter(t=>t.id.toString()!==e.interactive.id.toString());return(0,G.jsx)(w.Provider,{value:$,children:(0,G.jsxs)(`div`,{className:`px-4`,children:[!!e.breadcrumbs?.length&&(0,G.jsx)(`div`,{className:`mb-2`,children:(0,G.jsx)(N,{breadcrumbs:e.breadcrumbs})}),(0,G.jsx)(V,{restrictions:e.interactive._restrictions,yearGroups:e.commonVideoProps.yearGroups,objectId:e.interactive.id,objectTypeId:m.Interactive,canManageVideoAccess:e.canManageVideoAccess}),(0,G.jsx)(Z,{isPreviewPreventScrubbingEnabled:e.isPreviewPreventScrubbingEnabled,isPreviewingPreventScrubbing:n,toggleStudentMode:s,isArchived:h.isVideoTypeArchived(e.interactive)}),(0,G.jsx)(`div`,{className:`mb-3`,children:i&&(0,G.jsx)(j,{objectId:e.interactive.id,objectTypeId:e.interactive.typeId,shareId:e.shareId,startTime:e.queryParams.t??e.queryParams.startTime,context:e.queryParams?.context,contextId:e.queryParams?.contextId,playNext:e.queryParams?.playNext,mode:`default`,location:`play-page`,token:e.token},e.interactive.id)}),(0,G.jsx)(J,{interactive:e.interactive,location:F.PlayPage,shareId:e.shareId,commonVideoProps:e.commonVideoProps}),e.interactive.description&&(0,G.jsx)(H,{lines:5,children:()=>(0,G.jsx)(`p`,{className:`mb-0 d-inline`,children:e.interactive.description})}),(0,G.jsx)(`div`,{className:`mb-3`,children:(0,G.jsx)(D,{node:t.questionListPortalNode})}),!!c?.length&&(0,G.jsx)(`div`,{className:`pb-3`,children:(0,G.jsx)(f,{name:ee(`otherInteractives`,{count:c.length}),contents:d.Interactives,collection:c,prefetched:!0,getChildAppLink:e=>({application:l.INTERACTIVES,action:_.Interactives.VIEW_INTERACTIVE,args:[e.id,o.slugify(e.name)]}),childComponent:B,extraChildComponentProps:{questionsAppLink:{application:l.INTERACTIVES,action:_.Interactives.PREVIEW_QUESTIONS},commonVideoProps:e.commonVideoProps},analyticsData:{widgetId:`interactives`}})}),!h.isUgc(e.interactive)&&(0,G.jsx)(z,{media:e.interactive,parentVideo:e.interactive._parentClip||e.interactive._parentVideo,contentRegion:e.currentUser.contentRegion,shareId:e.shareId,presentationSlug:null}),(0,G.jsx)(R,{presentationSlug:null,currentVideo:e.interactive,currentUser:e.currentUser,audiences:e.audiences,relatedVideos:e.relatedVideos,getVideoAppLink:(t,n)=>T.getAppLink(t,{...n,context:e.queryParams.context,contextId:e.queryParams.contextId,playNext:e.queryParams.playNext,shareId:e.shareId,moviesAndTv:e.queryParams.mtv,includeContext:e.currentUser?.isAuthenticated},null),moviesAndTv:e.queryParams.mtv,commonVideoProps:e.commonVideoProps})]})})}export{Y as n,U as r,te as t};
|
|
2
|
+
//# sourceMappingURL=0mx04bmJ2.chunk.js.map
|