@clickview/streamable-learning 0.48.0-rc.0 → 0.48.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/dist/.vite/manifest.json +646 -646
  2. package/dist/bundles.json +1 -1
  3. package/dist/css/DU3tPCD_.chunk.css +12 -0
  4. package/dist/en.json +1 -1
  5. package/dist/scripts/{m9QbGES0.chunk.js → ACTQklJQ.chunk.js} +2 -2
  6. package/dist/scripts/{m9QbGES0.chunk.js.map → ACTQklJQ.chunk.js.map} +1 -1
  7. package/dist/scripts/{B7if0Lk52.chunk.js → B-qOny0I2.chunk.js} +2 -2
  8. package/dist/scripts/{B7if0Lk52.chunk.js.map → B-qOny0I2.chunk.js.map} +1 -1
  9. package/dist/scripts/{BSjm_rCE.chunk.js → B5jBIPaP.chunk.js} +2 -2
  10. package/dist/scripts/{BSjm_rCE.chunk.js.map → B5jBIPaP.chunk.js.map} +1 -1
  11. package/dist/scripts/{CPkKuTSK2.chunk.js → B703cBe72.chunk.js} +2 -2
  12. package/dist/scripts/{CPkKuTSK2.chunk.js.map → B703cBe72.chunk.js.map} +1 -1
  13. package/dist/scripts/{DNNNPLMp.chunk.js → B7iwtSij.chunk.js} +2 -2
  14. package/dist/scripts/{DNNNPLMp.chunk.js.map → B7iwtSij.chunk.js.map} +1 -1
  15. package/dist/scripts/{CXNve4Wq2.chunk.js → BCBfXCYM2.chunk.js} +2 -2
  16. package/dist/scripts/{CXNve4Wq2.chunk.js.map → BCBfXCYM2.chunk.js.map} +1 -1
  17. package/dist/scripts/{CoYNU7We2.chunk.js → BKnxYKDu2.chunk.js} +2 -2
  18. package/dist/scripts/{CoYNU7We2.chunk.js.map → BKnxYKDu2.chunk.js.map} +1 -1
  19. package/dist/scripts/{BoxedFO8.chunk.js → BLrjbrp8.chunk.js} +2 -2
  20. package/dist/scripts/{BoxedFO8.chunk.js.map → BLrjbrp8.chunk.js.map} +1 -1
  21. package/dist/scripts/{CibcLNJP2.chunk.js → BTYwcYPL2.chunk.js} +2 -2
  22. package/dist/scripts/{CibcLNJP2.chunk.js.map → BTYwcYPL2.chunk.js.map} +1 -1
  23. package/dist/scripts/{CwI-7tep2.chunk.js → BXJetawx2.chunk.js} +2 -2
  24. package/dist/scripts/{CwI-7tep2.chunk.js.map → BXJetawx2.chunk.js.map} +1 -1
  25. package/dist/scripts/{BV74ZRR22.chunk.js → BZOcEcTA2.chunk.js} +2 -2
  26. package/dist/scripts/{BV74ZRR22.chunk.js.map → BZOcEcTA2.chunk.js.map} +1 -1
  27. package/dist/scripts/{DxsW8K0n2.chunk.js → BaMNOAYj2.chunk.js} +2 -2
  28. package/dist/scripts/{DxsW8K0n2.chunk.js.map → BaMNOAYj2.chunk.js.map} +1 -1
  29. package/dist/scripts/{DrDQfaFN2.chunk.js → BihZ4r0z2.chunk.js} +3 -3
  30. package/dist/scripts/{DrDQfaFN2.chunk.js.map → BihZ4r0z2.chunk.js.map} +1 -1
  31. package/dist/scripts/{CK6c6uHp2.chunk.js → BpgHKWR52.chunk.js} +2 -2
  32. package/dist/scripts/{CK6c6uHp2.chunk.js.map → BpgHKWR52.chunk.js.map} +1 -1
  33. package/dist/scripts/{JtFbyaXc.chunk.js → Br0Uc4GG.chunk.js} +2 -2
  34. package/dist/scripts/{JtFbyaXc.chunk.js.map → Br0Uc4GG.chunk.js.map} +1 -1
  35. package/dist/scripts/{Dd8r1SE32.chunk.js → BsAo7Lri2.chunk.js} +2 -2
  36. package/dist/scripts/{Dd8r1SE32.chunk.js.map → BsAo7Lri2.chunk.js.map} +1 -1
  37. package/dist/scripts/{BMjES83N2.chunk.js → BvJXPFoz2.chunk.js} +2 -2
  38. package/dist/scripts/{BMjES83N2.chunk.js.map → BvJXPFoz2.chunk.js.map} +1 -1
  39. package/dist/scripts/{CpFOQcL7.chunk.js → BxypZGPK.chunk.js} +2 -2
  40. package/dist/scripts/{CpFOQcL7.chunk.js.map → BxypZGPK.chunk.js.map} +1 -1
  41. package/dist/scripts/C4MLxDS-.chunk.js +1 -0
  42. package/dist/scripts/{DLp7yHzT2.chunk.js → C5i1HsPp2.chunk.js} +2 -2
  43. package/dist/scripts/{DLp7yHzT2.chunk.js.map → C5i1HsPp2.chunk.js.map} +1 -1
  44. package/dist/scripts/{Bkv1Tbyu.chunk.js → CCoZQmgX.chunk.js} +2 -2
  45. package/dist/scripts/{Bkv1Tbyu.chunk.js.map → CCoZQmgX.chunk.js.map} +1 -1
  46. package/dist/scripts/{Clh6wBrg.chunk.js → CGxa1Jzq.chunk.js} +2 -2
  47. package/dist/scripts/{Clh6wBrg.chunk.js.map → CGxa1Jzq.chunk.js.map} +1 -1
  48. package/dist/scripts/{DAvXFgC62.chunk.js → CKdklY2o2.chunk.js} +2 -2
  49. package/dist/scripts/{DAvXFgC62.chunk.js.map → CKdklY2o2.chunk.js.map} +1 -1
  50. package/dist/scripts/{CeWjJPIz.chunk.js → CN8PeBwg.chunk.js} +2 -2
  51. package/dist/scripts/{CeWjJPIz.chunk.js.map → CN8PeBwg.chunk.js.map} +1 -1
  52. package/dist/scripts/{B1jitqYS2.chunk.js → CNJrD44-2.chunk.js} +2 -2
  53. package/dist/scripts/{B1jitqYS2.chunk.js.map → CNJrD44-2.chunk.js.map} +1 -1
  54. package/dist/scripts/{DIHDe4Sg.chunk.js → CNmmq34f.chunk.js} +2 -2
  55. package/dist/scripts/{DIHDe4Sg.chunk.js.map → CNmmq34f.chunk.js.map} +1 -1
  56. package/dist/scripts/{CikSQKH-.chunk.js → CUUUI6pl.chunk.js} +2 -2
  57. package/dist/scripts/{CikSQKH-.chunk.js.map → CUUUI6pl.chunk.js.map} +1 -1
  58. package/dist/scripts/{DNO0KpY72.chunk.js → CWFInhB82.chunk.js} +2 -2
  59. package/dist/scripts/{DNO0KpY72.chunk.js.map → CWFInhB82.chunk.js.map} +1 -1
  60. package/dist/scripts/{i2-k6ULv2.chunk.js → CbLL7dIz2.chunk.js} +2 -2
  61. package/dist/scripts/{i2-k6ULv2.chunk.js.map → CbLL7dIz2.chunk.js.map} +1 -1
  62. package/dist/scripts/{KCdpQ8qv2.chunk.js → Ce1TZZdV2.chunk.js} +2 -2
  63. package/dist/scripts/{KCdpQ8qv2.chunk.js.map → Ce1TZZdV2.chunk.js.map} +1 -1
  64. package/dist/scripts/{NV4_mMU8.chunk.js → Ces-KTwe.chunk.js} +2 -2
  65. package/dist/scripts/{NV4_mMU8.chunk.js.map → Ces-KTwe.chunk.js.map} +1 -1
  66. package/dist/scripts/{0xQRFMBY.chunk.js → CkYqp83j.chunk.js} +2 -2
  67. package/dist/scripts/{0xQRFMBY.chunk.js.map → CkYqp83j.chunk.js.map} +1 -1
  68. package/dist/scripts/{DvL3J2BU.chunk.js → CrCAJmt6.chunk.js} +2 -2
  69. package/dist/scripts/{DvL3J2BU.chunk.js.map → CrCAJmt6.chunk.js.map} +1 -1
  70. package/dist/scripts/{CcDgbmw52.chunk.js → CsC3VVvE2.chunk.js} +2 -2
  71. package/dist/scripts/{CcDgbmw52.chunk.js.map → CsC3VVvE2.chunk.js.map} +1 -1
  72. package/dist/scripts/{C9UjF0q6.chunk.js → D0SYGnyF.chunk.js} +2 -2
  73. package/dist/scripts/{C9UjF0q6.chunk.js.map → D0SYGnyF.chunk.js.map} +1 -1
  74. package/dist/scripts/{BqO6i89w2.chunk.js → D7tastET2.chunk.js} +2 -2
  75. package/dist/scripts/{BqO6i89w2.chunk.js.map → D7tastET2.chunk.js.map} +1 -1
  76. package/dist/scripts/{CeI-LCE-.chunk.js → DIavEegC.chunk.js} +2 -2
  77. package/dist/scripts/{CeI-LCE-.chunk.js.map → DIavEegC.chunk.js.map} +1 -1
  78. package/dist/scripts/{BKbKu9Rp.chunk.js → DK3xia1t.chunk.js} +2 -2
  79. package/dist/scripts/{BKbKu9Rp.chunk.js.map → DK3xia1t.chunk.js.map} +1 -1
  80. package/dist/scripts/{BCdnm1Nn.chunk.js → DKnZ8BaN.chunk.js} +2 -2
  81. package/dist/scripts/{BCdnm1Nn.chunk.js.map → DKnZ8BaN.chunk.js.map} +1 -1
  82. package/dist/scripts/{awemA_vU2.chunk.js → DO8_mR5i2.chunk.js} +2 -2
  83. package/dist/scripts/{awemA_vU2.chunk.js.map → DO8_mR5i2.chunk.js.map} +1 -1
  84. package/dist/scripts/{DlQrdOls.chunk.js → DR80oZtZ.chunk.js} +2 -2
  85. package/dist/scripts/{DlQrdOls.chunk.js.map → DR80oZtZ.chunk.js.map} +1 -1
  86. package/dist/scripts/{DMq5Gp-U2.chunk.js → DU1SE31v2.chunk.js} +2 -2
  87. package/dist/scripts/{DMq5Gp-U2.chunk.js.map → DU1SE31v2.chunk.js.map} +1 -1
  88. package/dist/scripts/{XnBhLH-02.chunk.js → Dj4AeYQQ2.chunk.js} +2 -2
  89. package/dist/scripts/{XnBhLH-02.chunk.js.map → Dj4AeYQQ2.chunk.js.map} +1 -1
  90. package/dist/scripts/{CmrPRojb.chunk.js → DnSy_Myx.chunk.js} +2 -2
  91. package/dist/scripts/{CmrPRojb.chunk.js.map → DnSy_Myx.chunk.js.map} +1 -1
  92. package/dist/scripts/{D0vsmyva.chunk.js → Dr1flAez.chunk.js} +2 -2
  93. package/dist/scripts/{D0vsmyva.chunk.js.map → Dr1flAez.chunk.js.map} +1 -1
  94. package/dist/scripts/{BXT8nHry2.chunk.js → DwzBzBlI2.chunk.js} +2 -2
  95. package/dist/scripts/{BXT8nHry2.chunk.js.map → DwzBzBlI2.chunk.js.map} +1 -1
  96. package/dist/scripts/{CvqqZmNo2.chunk.js → DyT1OGvP2.chunk.js} +2 -2
  97. package/dist/scripts/{CvqqZmNo2.chunk.js.map → DyT1OGvP2.chunk.js.map} +1 -1
  98. package/dist/scripts/{E9tNds1l.chunk.js → Llxar-VU.chunk.js} +2 -2
  99. package/dist/scripts/{E9tNds1l.chunk.js.map → Llxar-VU.chunk.js.map} +1 -1
  100. package/dist/scripts/{app-B1XBsz23.js → app-BIigh9wv.js} +4 -4
  101. package/dist/scripts/{app-B1XBsz23.js.map → app-BIigh9wv.js.map} +1 -1
  102. package/dist/scripts/{BMl02f_62.chunk.js → bycmewy72.chunk.js} +2 -2
  103. package/dist/scripts/{BMl02f_62.chunk.js.map → bycmewy72.chunk.js.map} +1 -1
  104. package/dist/scripts/{DmfbtOlu.chunk.js → jWpq99N3.chunk.js} +2 -2
  105. package/dist/scripts/{DmfbtOlu.chunk.js.map → jWpq99N3.chunk.js.map} +1 -1
  106. package/dist/scripts/{BDliRFoa.chunk.js → oTYyWWB-.chunk.js} +2 -2
  107. package/dist/scripts/{BDliRFoa.chunk.js.map → oTYyWWB-.chunk.js.map} +1 -1
  108. package/dist/scripts/{lokG7Sha2.chunk.js → qcrBN1zR2.chunk.js} +2 -2
  109. package/dist/scripts/{lokG7Sha2.chunk.js.map → qcrBN1zR2.chunk.js.map} +1 -1
  110. package/dist/scripts/{UAcFqQzZ.chunk.js → smdLElLq.chunk.js} +2 -2
  111. package/dist/scripts/{UAcFqQzZ.chunk.js.map → smdLElLq.chunk.js.map} +1 -1
  112. package/dist/scripts/{D8_5yfHY2.chunk.js → tYi-sUb22.chunk.js} +2 -2
  113. package/dist/scripts/{D8_5yfHY2.chunk.js.map → tYi-sUb22.chunk.js.map} +1 -1
  114. package/package.json +1 -1
  115. package/dist/scripts/D5Jnyjf8.chunk.js +0 -1
@@ -1,2 +1,2 @@
1
- import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{dt as t,lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./B-OL6Vs7.chunk.js";import{l as a}from"./BQ5XMoHG.chunk.js";import{t as o}from"./ibuOpDkQ.chunk.js";import{t as s}from"./DeldjYRc.chunk.js";import{i as c}from"./CEsevkum.chunk.js";import{t as l}from"./DjIdG9LL2.chunk.js";import{n as u,t as d}from"./CL1ST5J62.chunk.js";import{a as f}from"./D2om474U2.chunk.js";import{a as p,i as m}from"./B8R4YVaF2.chunk.js";import{X as h,q as g}from"./app-B1XBsz23.js";import{t as _}from"./DlFudnBx.chunk.js";import{n as v,t as y}from"./C9tPKnK22.chunk.js";import{n as b}from"./DvL3J2BU.chunk.js";import{n as x,t as S}from"./BSjm_rCE.chunk.js";import{t as C}from"./UAcFqQzZ.chunk.js";import{n as w,t as T}from"./D0vsmyva.chunk.js";import{n as E}from"./CIGsvs1s.chunk.js";r();var D={classificationPane:`_classificationPane_sns98_1`},O=n(),k=e.encloseNamespace(`subjects.classificationsView`);function A(e,t){let n=a(e&&_.classification(e,t));return e?n?.data:{name:k(`exploreAllTopicsHeading`),banner:{url:v.Images.STREAMABLE_TOPIC_BANNER}}}function j(e){let t=a(e&&_.path(e));return e?t?.data:[]}function M(e){let n=a(o.currentUser()),r=a(h.config()),v=a(g.streamablePresentation()),M=A(e.id,n.data?.id),N=j(e.id);l({title:k(`exploreAllTopicsHeading`)});let P=a(e.id?_.children(e.id):v.data&&_.topLevelTopics(v.data?.id)),[F]=u(d.AUDIENCE_FILTER,void 0,{storage:c.SessionStorage}),I=e=>{let n=y.getAudienceParams(F);return{application:i.SUBJECTS,action:s.Subjects.CLASSIFICATION,args:e?[e.id,t.slugify(e.name)]:[],params:n||{}}};function L(){let t=[{name:k(`discover`),appLink:{application:i.DASHBOARD,action:s.Dashboard.HOME}},{name:k(`exploreAllTopicsHeading`),appLink:{application:i.SUBJECTS,action:s.Subjects.CLASSIFICATION_ALL},active:!e.id}];return N.forEach(e=>{t.push({name:e.name,appLink:I(e)})}),e.id&&t.push({name:k(`subview`),active:!0}),t}let R=(e.id?!!M:!0)&&!!r.data&&P.data,z=!!N,B={presentationId:v.data?.id,presentationName:v.data?.name,currentClassificationName:M?.name,widgetId:m.Classifications,templateId:p.CoverFixedPillListLarge};return(0,O.jsxs)(`main`,{className:`bg-white px-4`,children:[R?(0,O.jsx)(S,{heading:M?.name,banner:M?.banner,imageCdnUrl:r.data.imageCdnUrl,actions:[],imageOptions:!e.id&&{resizeType:f.Cover}}):(0,O.jsx)(x,{}),(0,O.jsx)(`div`,{className:`py-3 mb-3 border-bottom`,children:z?(0,O.jsx)(T,{breadcrumbs:L()}):(0,O.jsx)(w,{})}),(0,O.jsx)(`div`,{className:D.classificationPane,children:R?(0,O.jsx)(C,{name:``,description:``,analyticsData:B,content:P?.data,appLinks:{classification:I},hasTableOfContents:!1,settings:{hasTopicDirectories:!1}}):(0,O.jsx)(b,{partialLoadingComponent:E})})]})}export{M as StreamableClassificationsView};
2
- //# sourceMappingURL=CibcLNJP2.chunk.js.map
1
+ import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{dt as t,lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./B-OL6Vs7.chunk.js";import{l as a}from"./BQ5XMoHG.chunk.js";import{t as o}from"./ibuOpDkQ.chunk.js";import{t as s}from"./DeldjYRc.chunk.js";import{i as c}from"./CEsevkum.chunk.js";import{t as l}from"./DjIdG9LL2.chunk.js";import{n as u,t as d}from"./CL1ST5J62.chunk.js";import{a as f}from"./D2om474U2.chunk.js";import{a as p,i as m}from"./B8R4YVaF2.chunk.js";import{X as h,q as g}from"./app-BIigh9wv.js";import{t as _}from"./DlFudnBx.chunk.js";import{n as v,t as y}from"./C9tPKnK22.chunk.js";import{n as b}from"./CrCAJmt6.chunk.js";import{n as x,t as S}from"./B5jBIPaP.chunk.js";import{t as C}from"./smdLElLq.chunk.js";import{n as w,t as T}from"./Dr1flAez.chunk.js";import{n as E}from"./CIGsvs1s.chunk.js";r();var D={classificationPane:`_classificationPane_sns98_1`},O=n(),k=e.encloseNamespace(`subjects.classificationsView`);function A(e,t){let n=a(e&&_.classification(e,t));return e?n?.data:{name:k(`exploreAllTopicsHeading`),banner:{url:v.Images.STREAMABLE_TOPIC_BANNER}}}function j(e){let t=a(e&&_.path(e));return e?t?.data:[]}function M(e){let n=a(o.currentUser()),r=a(h.config()),v=a(g.streamablePresentation()),M=A(e.id,n.data?.id),N=j(e.id);l({title:k(`exploreAllTopicsHeading`)});let P=a(e.id?_.children(e.id):v.data&&_.topLevelTopics(v.data?.id)),[F]=u(d.AUDIENCE_FILTER,void 0,{storage:c.SessionStorage}),I=e=>{let n=y.getAudienceParams(F);return{application:i.SUBJECTS,action:s.Subjects.CLASSIFICATION,args:e?[e.id,t.slugify(e.name)]:[],params:n||{}}};function L(){let t=[{name:k(`discover`),appLink:{application:i.DASHBOARD,action:s.Dashboard.HOME}},{name:k(`exploreAllTopicsHeading`),appLink:{application:i.SUBJECTS,action:s.Subjects.CLASSIFICATION_ALL},active:!e.id}];return N.forEach(e=>{t.push({name:e.name,appLink:I(e)})}),e.id&&t.push({name:k(`subview`),active:!0}),t}let R=(e.id?!!M:!0)&&!!r.data&&P.data,z=!!N,B={presentationId:v.data?.id,presentationName:v.data?.name,currentClassificationName:M?.name,widgetId:m.Classifications,templateId:p.CoverFixedPillListLarge};return(0,O.jsxs)(`main`,{className:`bg-white px-4`,children:[R?(0,O.jsx)(S,{heading:M?.name,banner:M?.banner,imageCdnUrl:r.data.imageCdnUrl,actions:[],imageOptions:!e.id&&{resizeType:f.Cover}}):(0,O.jsx)(x,{}),(0,O.jsx)(`div`,{className:`py-3 mb-3 border-bottom`,children:z?(0,O.jsx)(T,{breadcrumbs:L()}):(0,O.jsx)(w,{})}),(0,O.jsx)(`div`,{className:D.classificationPane,children:R?(0,O.jsx)(C,{name:``,description:``,analyticsData:B,content:P?.data,appLinks:{classification:I},hasTableOfContents:!1,settings:{hasTopicDirectories:!1}}):(0,O.jsx)(b,{partialLoadingComponent:E})})]})}export{M as StreamableClassificationsView};
2
+ //# sourceMappingURL=BTYwcYPL2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CibcLNJP2.chunk.js","names":[],"sources":["../../src/apps/subjects/views/classifications/classifications.module.scss","../../src/apps/subjects/views/classifications/StreamableClassificationsView.tsx"],"sourcesContent":[":local {\n .classificationPane {\n min-height: 70vh;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ResizeType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\nimport styles from './classifications.module.scss';\n\nconst namespace = 'subjects.classificationsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction useGetClassification(\n id?: string,\n userId?: string\n): Classification {\n /**\n * With an id, we're fetching the classification to show the child topics in the\n * classification list.\n */\n const classification = Flight.useBasicFetch<Classification>(\n id &&\n ClassificationRequests.classification(id, userId)\n );\n\n /**\n * Without an id, we should be displaying the All Subjects page. So we'll construct\n * a synthetic classification.\n */\n if (!id)\n return {\n name: getPhrase('exploreAllTopicsHeading'),\n banner: {\n url: HardCoded.Images.STREAMABLE_TOPIC_BANNER\n }\n } as Classification;\n\n return classification?.data;\n}\n\nfunction useGetPaths(id?: string): Classification[] {\n const path = Flight.useBasicFetch<Classification[]>(id && ClassificationRequests.path(id));\n\n if (!id)\n return [];\n\n return path?.data;\n}\n\ninterface StreamableClassificationsViewProps {\n id?: string;\n}\n\nexport function StreamableClassificationsView(props: StreamableClassificationsViewProps): JSX.Element {\n /**\n * Data fetching\n */\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const classification = useGetClassification(\n props.id,\n currentUser.data?.id\n );\n\n const paths = useGetPaths(props.id);\n\n useSetPageMetadata({ title: getPhrase('exploreAllTopicsHeading') });\n\n /**\n * With an id, we'll fetch the classification's children.\n * With a presentationId, we'll fetch the presentation's top level topics.\n * For public access, we will always have a presentationId available.\n */\n const request = props.id ?\n ClassificationRequests.children(props.id) :\n presentation.data && ClassificationRequests.topLevelTopics(presentation.data?.id);\n\n const children = Flight.useBasicFetch<Classification[]>(request);\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const classificationAppLinkFn = (classification?: Classification) => {\n const params = AudienceHelper.getAudienceParams(activeAudiences);\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.CLASSIFICATION,\n args: classification ? [ classification.id, TextHelper.slugify(classification.name) ] : [],\n params: params || {}\n };\n };\n\n function getBreadcrumbs(): Breadcrumb[] {\n const breadcrumbs: Breadcrumb[] = [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: getPhrase('exploreAllTopicsHeading'),\n appLink: { application: AppChannels.SUBJECTS, action: Actions.Subjects.CLASSIFICATION_ALL },\n active: !props.id\n }];\n\n paths.forEach(item => {\n breadcrumbs.push({\n name: item.name,\n appLink: classificationAppLinkFn(item)\n });\n });\n\n if (props.id)\n breadcrumbs.push({\n name: getPhrase('subview'),\n active: true\n });\n\n return breadcrumbs;\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = (props.id ? !!classification : true) && !!config.data && children.data;\n const breadcrumbsDataLoaded = !!paths;\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationName: classification?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n return (\n <main className='bg-white px-4'>\n {dataLoaded ?\n (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n actions={[]}\n imageOptions={!props.id && { resizeType: ResizeType.Cover }}\n />\n ) : <PartialBannerHeader />\n }\n <div className='py-3 mb-3 border-bottom'>\n {(() => {\n if (!breadcrumbsDataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ?\n (\n <CoverFixedPillListLargeWidgetTemplate\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{\n hasTopicDirectories: false\n }}\n />\n ) : <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />}\n </div>\n </main>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BTYwcYPL2.chunk.js","names":[],"sources":["../../src/apps/subjects/views/classifications/classifications.module.scss","../../src/apps/subjects/views/classifications/StreamableClassificationsView.tsx"],"sourcesContent":[":local {\n .classificationPane {\n min-height: 70vh;\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs, PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { CoverFixedPillListLargeWidgetTemplate } from 'libs/shared/components/widgets/curated-widgets/templates/cover-fixed-pill-list-large/CoverFixedPillListLargeWidgetTemplate';\nimport { PartialDynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { PartialSubjectWidgetItem } from 'libs/shared/components/widgets/items/subject-widget-item';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ResizeType } from 'libs/shared/enums/Images';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, Config, CurrentUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { PresentationRequests } from 'shared/flight-requests/PresentationRequests';\n\nimport styles from './classifications.module.scss';\n\nconst namespace = 'subjects.classificationsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction useGetClassification(\n id?: string,\n userId?: string\n): Classification {\n /**\n * With an id, we're fetching the classification to show the child topics in the\n * classification list.\n */\n const classification = Flight.useBasicFetch<Classification>(\n id &&\n ClassificationRequests.classification(id, userId)\n );\n\n /**\n * Without an id, we should be displaying the All Subjects page. So we'll construct\n * a synthetic classification.\n */\n if (!id)\n return {\n name: getPhrase('exploreAllTopicsHeading'),\n banner: {\n url: HardCoded.Images.STREAMABLE_TOPIC_BANNER\n }\n } as Classification;\n\n return classification?.data;\n}\n\nfunction useGetPaths(id?: string): Classification[] {\n const path = Flight.useBasicFetch<Classification[]>(id && ClassificationRequests.path(id));\n\n if (!id)\n return [];\n\n return path?.data;\n}\n\ninterface StreamableClassificationsViewProps {\n id?: string;\n}\n\nexport function StreamableClassificationsView(props: StreamableClassificationsViewProps): JSX.Element {\n /**\n * Data fetching\n */\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const presentation = Flight.useBasicFetch<Presentation>(\n PresentationRequests.streamablePresentation()\n );\n\n const classification = useGetClassification(\n props.id,\n currentUser.data?.id\n );\n\n const paths = useGetPaths(props.id);\n\n useSetPageMetadata({ title: getPhrase('exploreAllTopicsHeading') });\n\n /**\n * With an id, we'll fetch the classification's children.\n * With a presentationId, we'll fetch the presentation's top level topics.\n * For public access, we will always have a presentationId available.\n */\n const request = props.id ?\n ClassificationRequests.children(props.id) :\n presentation.data && ClassificationRequests.topLevelTopics(presentation.data?.id);\n\n const children = Flight.useBasicFetch<Classification[]>(request);\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const classificationAppLinkFn = (classification?: Classification) => {\n const params = AudienceHelper.getAudienceParams(activeAudiences);\n return {\n application: AppChannels.SUBJECTS,\n action: Actions.Subjects.CLASSIFICATION,\n args: classification ? [ classification.id, TextHelper.slugify(classification.name) ] : [],\n params: params || {}\n };\n };\n\n function getBreadcrumbs(): Breadcrumb[] {\n const breadcrumbs: Breadcrumb[] = [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }\n }, {\n name: getPhrase('exploreAllTopicsHeading'),\n appLink: { application: AppChannels.SUBJECTS, action: Actions.Subjects.CLASSIFICATION_ALL },\n active: !props.id\n }];\n\n paths.forEach(item => {\n breadcrumbs.push({\n name: item.name,\n appLink: classificationAppLinkFn(item)\n });\n });\n\n if (props.id)\n breadcrumbs.push({\n name: getPhrase('subview'),\n active: true\n });\n\n return breadcrumbs;\n }\n\n /**\n * Render Variable\n */\n const dataLoaded = (props.id ? !!classification : true) && !!config.data && children.data;\n const breadcrumbsDataLoaded = !!paths;\n\n /**\n * Additional subjects data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationName: classification?.name,\n widgetId: WidgetTypeId.Classifications,\n templateId: WidgetTemplate.CoverFixedPillListLarge\n };\n\n return (\n <main className='bg-white px-4'>\n {dataLoaded ?\n (\n <BannerHeader\n heading={classification?.name}\n banner={classification?.banner}\n imageCdnUrl={config.data.imageCdnUrl}\n actions={[]}\n imageOptions={!props.id && { resizeType: ResizeType.Cover }}\n />\n ) : <PartialBannerHeader />\n }\n <div className='py-3 mb-3 border-bottom'>\n {(() => {\n if (!breadcrumbsDataLoaded)\n return <PartialBreadcrumbs />;\n\n return <Breadcrumbs breadcrumbs={getBreadcrumbs()} />;\n })()}\n </div>\n <div className={styles.classificationPane}>\n {dataLoaded ?\n (\n <CoverFixedPillListLargeWidgetTemplate\n name=''\n description=''\n analyticsData={analyticsData}\n content={children?.data}\n appLinks={{ classification: classificationAppLinkFn }}\n hasTableOfContents={false}\n settings={{\n hasTopicDirectories: false\n }}\n />\n ) : <PartialDynamicWidget partialLoadingComponent={PartialSubjectWidgetItem} />}\n </div>\n </main>\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{gt as e,p as t,v as n}from"./Dp9qJj1C.chunk.js";import{n as r,t as i}from"./BJvPfCvt.chunk.js";import{t as a}from"./ImQRQGZr.chunk.js";import{C as o,E as s,dt as c,l,lt as u,m as d,n as f,p,ut as m}from"./Dun43GrB.chunk.js";import{t as ee}from"./Xo0rk19-.chunk.js";import{t as h}from"./CFXUbsBS.chunk.js";import{t as g}from"./B-OL6Vs7.chunk.js";import{d as te,l as _,y as v}from"./BQ5XMoHG.chunk.js";import{n as ne}from"./C9ET3pjZ.chunk.js";import{n as re}from"./CAEQvGr_.chunk.js";import{t as ie}from"./ibuOpDkQ.chunk.js";import{t as y}from"./CxwN2xIE.chunk.js";import{t as b}from"./DeldjYRc.chunk.js";import{i as ae}from"./CEsevkum.chunk.js";import{t as x}from"./BYYiNmLB.chunk.js";import{t as S}from"./Ca1QPe-q2.chunk.js";import{i as C,t as w}from"./ClfNVaoj2.chunk.js";import{n as T}from"./D7d5XFW82.chunk.js";import{n as oe,t as se}from"./DjIdG9LL2.chunk.js";import{n as ce}from"./CL1ST5J62.chunk.js";import{r as E,t as D}from"./D2om474U2.chunk.js";import{t as O}from"./DOjVjWkc.chunk.js";import{t as le}from"./CoualKDX.chunk.js";import{t as k}from"./DIVzVtlg.chunk.js";import{I as ue,K as de,M as fe,Q as A,X as pe,Z as j,z as M}from"./app-B1XBsz23.js";import{t as N}from"./BlQ4coEt.chunk.js";import{a as P,i as me,r as he,t as F}from"./BCdnm1Nn.chunk.js";import{n as ge}from"./EF7Q4oN02.chunk.js";import{t as _e}from"./BbCIyIf_2.chunk.js";import{t as I}from"./DpDQnXqh2.chunk.js";import{t as L}from"./LdxNQaUZ2.chunk.js";import{n as ve,t as ye}from"./DLp7yHzT2.chunk.js";import{t as be}from"./C9tPKnK22.chunk.js";import{t as xe}from"./BEYV13jP2.chunk.js";import{t as Se}from"./BF6BdGN-.chunk.js";import{t as Ce}from"./BlBCp_pE.chunk.js";import{r as we,t as Te}from"./BBWlVBxr.chunk.js";import{t as Ee}from"./BOTX-kIq.chunk.js";import{a as De,c as R,i as Oe,l as ke,n as Ae,o as je,r as Me,s as Ne,t as z}from"./CPkKuTSK2.chunk.js";import{t as Pe}from"./CoYNU7We2.chunk.js";var Fe=N(),B=e(m()),Ie={logoContainer:`_logoContainer_vn3gg_1`},V=u(),Le=`streamable.livestreamDetails`;function H(e){function t(){return`${h.diffBetween(e.endTime,e.startTime,`minutes`)}m`}function n(e){return j.convertUTCToTimezoneDate(e)}function a(e){return h.format(n(e),`h:mma`)}function o(e){return h.format(n(e),`Do MMMM`)}function s(e){return A[e]?.name}function c(){return be.getMergedPresentationAudienceString(e.audiences)?.name}let l=Te(e.companyName,we);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`d-flex align-items-center mb-2`,children:[e.logoUrl&&(0,V.jsx)(S,{appLink:e.companyAppLink,children:(0,V.jsx)(`div`,{className:`${Ie.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`,children:(0,V.jsx)(L,{data:D.createUrl(e.logoUrl,{size:E.Small}),alt:e.companyName,className:!e.logoBgColour&&l,imageStyle:{backgroundColor:e.logoBgColour},preload:!0})})}),(0,V.jsxs)(`div`,{className:`d-flex flex-column justify-content-between`,children:[e.companyName&&(0,V.jsx)(S,{appLink:e.companyAppLink,className:`text-uppercase text-wrap d-block text-truncate mb-0`,title:e.companyName,children:e.companyName}),(0,V.jsx)(`h1`,{className:`h4 mb-0`,children:e.eventName})]})]}),(0,V.jsxs)(`div`,{className:`d-flex gap-2 mb-3`,children:[!!e.audiences?.length&&(0,V.jsx)(`div`,{className:`rounded-pill border border-dark px-2`,children:c()}),(0,V.jsx)(`div`,{className:`rounded-pill fw-semibold bg-dark text-white px-2`,children:(0,V.jsx)(`span`,{className:`align-middle`,children:t()})})]}),e.isPastLivestream&&(0,V.jsxs)(`div`,{className:`d-inline-block bg-light-green rounded-pill mb-3`,children:[(0,V.jsx)(i,{svg:ve}),(0,V.jsx)(`p`,{className:`d-inline ms-1 mb-0`,children:(0,V.jsx)(T,{namespace:Le,phrase:`pastEvent`})})]}),!e.isPastLivestream&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`mb-2`,children:[(0,V.jsx)(i,{svg:_e,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:a(e.startTime)})]}),(0,V.jsxs)(`p`,{className:`mb-2`,children:[(0,V.jsx)(i,{svg:xe,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:o(e.startTime)})]}),(0,V.jsxs)(`p`,{className:`mb-3`,children:[(0,V.jsx)(i,{svg:Se,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:s(e.timezone)})]})]}),e.description&&(0,V.jsx)(`p`,{className:`mb-3 pre-wrap text-break`,dangerouslySetInnerHTML:{__html:I.linkifyText(e.description)}})]})}var Re={createBooking(e){return{publicUrl:`/api/integrations/api/v1/bookings`,url:`{gateway}/v1/events/booking`,key:`streamable:create:booking`,type:v.POST,data:e}}},ze={logo:`_logo_1uhpx_1`},U=`streamable.bookingSuccess`;function Be(e){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:`${ze.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,V.jsx)(L,{data:D.createUrl(e.livestream.company.logo?.url,{size:E.Small}),alt:e.livestream.company.name,preload:!0})}),(0,V.jsxs)(`div`,{className:`d-flex align-items-center justify-content-center mb-3 gap-1`,children:[(0,V.jsx)(i,{svg:O,className:`svg-container std text-success`}),(0,V.jsx)(`h1`,{className:`h3 mb-0 fw-semibold`,children:(0,V.jsx)(T,{namespace:U,phrase:`booked`})})]}),(0,V.jsx)(`div`,{className:`my-3`,children:(0,V.jsx)(H,{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,timezone:e.livestream.timezone})}),(0,V.jsx)(`p`,{children:(0,V.jsx)(T,{namespace:U,phrase:`emailReminder`})})]})}var W={image:`_image_e4ebg_1`},G=`streamable.bookingError`;function Ve(e){return(0,V.jsxs)(`div`,{className:`d-flex flex-column justify-content-center`,children:[(0,V.jsx)(`div`,{className:`${W.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,V.jsx)(`img`,{className:W.image,src:x.General.LOST_MESSAGE_BOTTLE})}),(0,V.jsx)(`h3`,{className:`text-center mb-3`,children:(0,V.jsx)(T,{namespace:G,phrase:`heading`})}),(0,V.jsx)(`p`,{className:`text-center mb-3`,children:(0,V.jsx)(T,{namespace:G,phrase:`description`})}),(0,V.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onTryAgain,children:(0,V.jsx)(T,{namespace:G,phrase:`buttonLabel`})})]})}function K(e){return(0,V.jsx)(`div`,{className:`${e.className}`,style:e.coverImageUrl&&{backgroundImage:`url(${D._createUrl(e.coverImageUrl,{size:E.Large})})`}})}var q=e(he()),J=`streamable.livestreamView`,Y=a.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`))}),He=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 Ue(e){let t=P(),[n,r]=B.useState({}),[i,a]=B.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,V.jsxs)(C,{children:[(0,V.jsxs)(`div`,{className:`row my-3`,children:[(0,V.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,V.jsx)(F,{label:Y(`firstName`),name:`firstName`,placeholder:Y(`firstNamePlaceholder`),value:t.values?.firstName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,V.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,V.jsx)(F,{label:Y(`lastName`),name:`lastName`,placeholder:Y(`lastNamePlaceholder`),value:t.values?.lastName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,V.jsx)(`div`,{className:`col-12`,children:(0,V.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,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:`col-12`,children:i?(0,V.jsx)(F,{label:Y(`schoolOrDistrict`),name:`schoolOrDistrict`,value:t.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:Y(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Ae,{data:n,setData:s,clearData:c,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:e.googleMapsApiKey,required:!0,hideOnBlur:!0}),(0,V.jsx)(z,{data:n,setData:l,clearData:u,disabled:!n.schoolLocality,searchUrl:e.searchProspectsUrl,onClickNoSuggestions:d,required:!0,placeholder:!n.schoolLocality&&Y(`schoolPlaceholder`),hideOnBlur:!0})]})}),(0,V.jsx)(`div`,{className:`col-12`,children:(0,V.jsx)(Me,{id:`job-title`,error:t.touched?.jobTitle&&t.errors?.jobTitle,countryCode:k.US,initialValue:t.values?.jobTitle,onChange:e=>t.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0})})]}),(0,V.jsx)(`div`,{className:`col-12 col-sm-6 col-xl-4`,children:(0,V.jsx)(F,{type:`number`,label:Y(`attendees`),name:`attendees`,placeholder:Y(`attendeesPlaceholder`),min:1,value:t.values?.attendees,showRequiredStar:!0})}),!e.isAuthenticated&&(0,V.jsx)(`div`,{className:`col`,children:(0,V.jsx)(F,{label:Y(`phoneNumber`),name:`phoneNumber`,placeholder:Y(`phoneNumberPlaceholder`),value:t.values?.phoneNumber,showRequiredStar:!0})})]}),(0,V.jsx)(w,{type:`submit`,className:`w-100`,variant:`dark`,showSpinner:e.showSpinner,disabled:!t.isValid,children:(0,V.jsx)(T,{namespace:J,phrase:`book`})})]})}function We(e){return(0,V.jsx)(me,{initialValues:e.initialValues,validationSchema:e.isAuthenticated?X:He,validateOnMount:!0,onSubmit:e.onSubmit,children:(0,V.jsx)(Ue,{emailAddress:e.emailAddress,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}var Z={noRecording:`_noRecording_uwnqe_1`,coverImage:`_coverImage_uwnqe_4`,popup:`_popup_uwnqe_10`,page:`_page_uwnqe_15`},Q=`streamable.livestreamView`,Ge=a.encloseNamespace(Q);function $(e){let t=n.getHref(n.getCurrentAppLink()),r=t===`/`?{}:{redirectUrl:t},i=e.origin===`newsletter`,a=!e.isAuthenticated&&!i&&!e.livestream.recording,o=!e.isPastLivestream&&!e.formStage&&(e.isAuthenticated&&!e.isStudent||i),s={application:g.DEFAULT,action:b.Default.CHALLENGE,params:r},l={application:g.DASHBOARD,action:b.Dashboard.COMPANY_DASHBOARD,args:[e.livestream.company.id,c.slugify(e.livestream.company.name)]};return(0,V.jsxs)(V.Fragment,{children:[!e.success&&!e.error&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(H,{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,timezone:e.livestream.timezone,description:!e.formStage&&e.livestream.description,isPastLivestream:e.isPastLivestream,companyAppLink:l}),e.formStage&&(0,V.jsx)(We,{emailAddress:e.emailAddress,initialValues:e.initialValues,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),o&&(0,V.jsx)(`button`,{className:`btn btn-dark w-100`,onClick:()=>e.setFormStage(!0),children:(0,V.jsx)(T,{namespace:Q,phrase:`book`})}),e.isPastLivestream&&!e.livestream.recording&&(0,V.jsx)(`div`,{className:`${Z.noRecording} p-2 rounded`,children:(0,V.jsx)(T,{namespace:Q,phrase:`noRecording`})}),e.livestream.recording&&(0,V.jsx)(S,{appLink:{application:g.VIDEOS,action:b.Videos.PLAY_VIDEO,args:[e.livestream.recording.id,c.slugify(e.livestream.recording.name)]},children:(0,V.jsx)(`button`,{className:`btn btn-outline-dark w-100`,children:(0,V.jsx)(T,{namespace:Q,phrase:`recording`})})}),a&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(S,{className:`mt-3 btn btn-dark w-100`,appLink:s,children:(0,V.jsx)(T,{namespace:Q,phrase:`signInButton`})}),(0,V.jsx)(S,{className:`d-flex justify-content-center align-items-center mt-3 text-info`,appLink:{application:g.DEFAULT,action:b.Default.CONTACT_US_POPUP},children:(0,V.jsx)(T,{namespace:Q,phrase:`contactUsLink`})})]})]}),e.success&&(0,V.jsx)(Be,{livestream:e.livestream}),e.error&&(0,V.jsx)(Ve,{onTryAgain:e.onTryAgain})]})}function Ke(e){function t(){e.closePopup(),Ee.preventScrollTop();let t=y.getCurrentRoute().appLink;t.application===g.LIVESTREAMS&&t.action===b.Livestreams.LIVESTREAM&&n.trigger(y.getPreviousRoute()?.appLink)}return(0,V.jsxs)(M,{size:`xl`,bodyClassName:`rounded-3 overflow-hidden p-0`,closePopup:t,children:[(0,V.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,V.jsxs)(`div`,{className:`row g-0`,children:[(0,V.jsx)(`div`,{className:`col-12 col-lg-6`,children:(0,V.jsx)(K,{className:`${Z.coverImage} ${Z.popup}`,coverImageUrl:e.livestream.company.cover?.url})}),(0,V.jsx)(`div`,{className:`col-12 col-lg p-4 m-lg-2`,children:(0,V.jsx)($,{...e})})]})]})}function qe(e){return(0,V.jsxs)(`div`,{className:`row g-0 px-3`,children:[(0,V.jsx)(`div`,{className:`col-12 col-md-6 col-lg-5`,children:(0,V.jsx)(K,{className:`${Z.coverImage} ${Z.page} rounded`,coverImageUrl:e.livestream.company.cover?.url})}),(0,V.jsx)(`div`,{className:`col-12 col-md px-md-3 pt-2 pt-md-0`,children:(0,V.jsx)($,{...e})})]})}function Je(e){let n=_(pe.config()),r=te(),i=Oe(),[a,c]=B.useState(!1),[u,m]=B.useState(!1),[g,v]=B.useState(!1),[y,b]=B.useState(!1),[x,S]=B.useState({firstName:``,lastName:``,email:``,attendees:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:C}=Ne(),[w]=ce(de,null,{storage:ae.SessionStorage}),T=_(ie.currentUser()),E=_(ye.livestream(e.id)),{hasPermissions:D}=fe(),O=D(ne.StudentExperience);se({...oe.getDefaultMetadata({title:E.data?.name,description:E.data?.description,phraseContext:{phraseHandler:Ge,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:Ce.getCanonicalLink({customAppLink:le.livestream(E.data)}),allowIndexing:!0,product:ue.PRODUCT_NAME}),_isPopupUp:!e.fromPageLoad}),Pe(E),B.useEffect(()=>{!E.data||E.data?.status===ge.Published||t.throw(new ee)},[E.data?.status]),B.useEffect(()=>{T.data?.isAuthenticated&&S({...x,firstName:T.data.givenName,lastName:T.data.familyName,email:T.data.email})},[T.data?.isAuthenticated]);async function k(e){try{b(!0),S(e),await r(Re.createBooking({eventId:E.data.id,eventType:`Livestream`,firstName:e.firstName,lastName:e.lastName,email:e.email,attendees:e.attendees,status:1})),T.data?.isAuthenticated||C({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),M(s.Complete),N(e),m(!0)}catch{v(!0),c(!1)}finally{b(!1)}}function A(){v(!1),c(!0)}function j(){c(!0),M(s.Start)}function M(t){f.logUserAction({id:E.data.id,name:E.data.name},{entity:l.Livestream,actionType:o.Submit,location:d.LivestreamBookingForm,descriptor:e.fromPageLoad?p.FullPage:p.Popup,workflowPhase:t})}async function N(e){try{let t=await r(R.checkEmail(e.email)),n;e.prospectId&&(n=(await r(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,syncToCrm:t?.users?.length?void 0:!0,crmId:n||void 0}};i.logFormSubmission({eventType:Fe.StreamableFormEvent.LivestreamBookingFormSubmit,source:De.LivestreamBooking,conversion:je.LivestreamBooking,user:a,productType:`sl`})}catch(e){console.error(`Failed to log submission event to Braze`,e)}}if(!(E.hasCompleted&&n.hasCompleted))return(0,V.jsx)(V.Fragment,{});let P={livestream:E.data,formStage:a,initialValues:x,isAuthenticated:T.data?.isAuthenticated,isStudent:O,success:u,error:g,isPastLivestream:h.isBefore(E.data.endDateTime,new Date),showSpinner:y,origin:w,onSubmit:k,onTryAgain:A,setFormStage:j,googleMapsApiKey:n.data.googleMapsApiKey,searchProspectsUrl:re.safeUrlConcat(n.data.gatewayApiUrl,`/v1/search/prospects`),emailAddress:T.data?.email};return e.fromPageLoad?(0,V.jsx)(qe,{...P}):(0,V.jsx)(Ke,{...P,closePopup:e.closePopup})}export{Je as LivestreamView};
2
- //# sourceMappingURL=CwI-7tep2.chunk.js.map
1
+ import{gt as e,p as t,v as n}from"./Dp9qJj1C.chunk.js";import{n as r,t as i}from"./BJvPfCvt.chunk.js";import{t as a}from"./ImQRQGZr.chunk.js";import{C as o,E as s,dt as c,l,lt as u,m as d,n as f,p,ut as m}from"./Dun43GrB.chunk.js";import{t as ee}from"./Xo0rk19-.chunk.js";import{t as h}from"./CFXUbsBS.chunk.js";import{t as g}from"./B-OL6Vs7.chunk.js";import{d as te,l as _,y as v}from"./BQ5XMoHG.chunk.js";import{n as ne}from"./C9ET3pjZ.chunk.js";import{n as re}from"./CAEQvGr_.chunk.js";import{t as ie}from"./ibuOpDkQ.chunk.js";import{t as y}from"./CxwN2xIE.chunk.js";import{t as b}from"./DeldjYRc.chunk.js";import{i as ae}from"./CEsevkum.chunk.js";import{t as x}from"./BYYiNmLB.chunk.js";import{t as S}from"./Ca1QPe-q2.chunk.js";import{i as C,t as w}from"./ClfNVaoj2.chunk.js";import{n as T}from"./D7d5XFW82.chunk.js";import{n as oe,t as se}from"./DjIdG9LL2.chunk.js";import{n as ce}from"./CL1ST5J62.chunk.js";import{r as E,t as D}from"./D2om474U2.chunk.js";import{t as O}from"./DOjVjWkc.chunk.js";import{t as le}from"./CoualKDX.chunk.js";import{t as k}from"./DIVzVtlg.chunk.js";import{I as ue,K as de,M as fe,Q as A,X as pe,Z as j,z as M}from"./app-BIigh9wv.js";import{t as N}from"./BlQ4coEt.chunk.js";import{a as P,i as me,r as he,t as F}from"./DKnZ8BaN.chunk.js";import{n as ge}from"./EF7Q4oN02.chunk.js";import{t as _e}from"./BbCIyIf_2.chunk.js";import{t as I}from"./DpDQnXqh2.chunk.js";import{t as L}from"./LdxNQaUZ2.chunk.js";import{n as ve,t as ye}from"./C5i1HsPp2.chunk.js";import{t as be}from"./C9tPKnK22.chunk.js";import{t as xe}from"./BEYV13jP2.chunk.js";import{t as Se}from"./BF6BdGN-.chunk.js";import{t as Ce}from"./BlBCp_pE.chunk.js";import{r as we,t as Te}from"./BBWlVBxr.chunk.js";import{t as Ee}from"./BOTX-kIq.chunk.js";import{a as De,c as R,i as Oe,l as ke,n as Ae,o as je,r as Me,s as Ne,t as z}from"./B703cBe72.chunk.js";import{t as Pe}from"./BKnxYKDu2.chunk.js";var Fe=N(),B=e(m()),Ie={logoContainer:`_logoContainer_vn3gg_1`},V=u(),Le=`streamable.livestreamDetails`;function H(e){function t(){return`${h.diffBetween(e.endTime,e.startTime,`minutes`)}m`}function n(e){return j.convertUTCToTimezoneDate(e)}function a(e){return h.format(n(e),`h:mma`)}function o(e){return h.format(n(e),`Do MMMM`)}function s(e){return A[e]?.name}function c(){return be.getMergedPresentationAudienceString(e.audiences)?.name}let l=Te(e.companyName,we);return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`div`,{className:`d-flex align-items-center mb-2`,children:[e.logoUrl&&(0,V.jsx)(S,{appLink:e.companyAppLink,children:(0,V.jsx)(`div`,{className:`${Ie.logoContainer} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background me-2`,children:(0,V.jsx)(L,{data:D.createUrl(e.logoUrl,{size:E.Small}),alt:e.companyName,className:!e.logoBgColour&&l,imageStyle:{backgroundColor:e.logoBgColour},preload:!0})})}),(0,V.jsxs)(`div`,{className:`d-flex flex-column justify-content-between`,children:[e.companyName&&(0,V.jsx)(S,{appLink:e.companyAppLink,className:`text-uppercase text-wrap d-block text-truncate mb-0`,title:e.companyName,children:e.companyName}),(0,V.jsx)(`h1`,{className:`h4 mb-0`,children:e.eventName})]})]}),(0,V.jsxs)(`div`,{className:`d-flex gap-2 mb-3`,children:[!!e.audiences?.length&&(0,V.jsx)(`div`,{className:`rounded-pill border border-dark px-2`,children:c()}),(0,V.jsx)(`div`,{className:`rounded-pill fw-semibold bg-dark text-white px-2`,children:(0,V.jsx)(`span`,{className:`align-middle`,children:t()})})]}),e.isPastLivestream&&(0,V.jsxs)(`div`,{className:`d-inline-block bg-light-green rounded-pill mb-3`,children:[(0,V.jsx)(i,{svg:ve}),(0,V.jsx)(`p`,{className:`d-inline ms-1 mb-0`,children:(0,V.jsx)(T,{namespace:Le,phrase:`pastEvent`})})]}),!e.isPastLivestream&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsxs)(`p`,{className:`mb-2`,children:[(0,V.jsx)(i,{svg:_e,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:a(e.startTime)})]}),(0,V.jsxs)(`p`,{className:`mb-2`,children:[(0,V.jsx)(i,{svg:xe,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:o(e.startTime)})]}),(0,V.jsxs)(`p`,{className:`mb-3`,children:[(0,V.jsx)(i,{svg:Se,size:r.Small}),(0,V.jsx)(`span`,{className:`ms-1`,children:s(e.timezone)})]})]}),e.description&&(0,V.jsx)(`p`,{className:`mb-3 pre-wrap text-break`,dangerouslySetInnerHTML:{__html:I.linkifyText(e.description)}})]})}var Re={createBooking(e){return{publicUrl:`/api/integrations/api/v1/bookings`,url:`{gateway}/v1/events/booking`,key:`streamable:create:booking`,type:v.POST,data:e}}},ze={logo:`_logo_1uhpx_1`},U=`streamable.bookingSuccess`;function Be(e){return(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:`${ze.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,V.jsx)(L,{data:D.createUrl(e.livestream.company.logo?.url,{size:E.Small}),alt:e.livestream.company.name,preload:!0})}),(0,V.jsxs)(`div`,{className:`d-flex align-items-center justify-content-center mb-3 gap-1`,children:[(0,V.jsx)(i,{svg:O,className:`svg-container std text-success`}),(0,V.jsx)(`h1`,{className:`h3 mb-0 fw-semibold`,children:(0,V.jsx)(T,{namespace:U,phrase:`booked`})})]}),(0,V.jsx)(`div`,{className:`my-3`,children:(0,V.jsx)(H,{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,timezone:e.livestream.timezone})}),(0,V.jsx)(`p`,{children:(0,V.jsx)(T,{namespace:U,phrase:`emailReminder`})})]})}var W={image:`_image_e4ebg_1`},G=`streamable.bookingError`;function Ve(e){return(0,V.jsxs)(`div`,{className:`d-flex flex-column justify-content-center`,children:[(0,V.jsx)(`div`,{className:`${W.logo} rounded-circle flex-shrink-0 overflow-hidden partial-loading-background mx-auto mb-3`,children:(0,V.jsx)(`img`,{className:W.image,src:x.General.LOST_MESSAGE_BOTTLE})}),(0,V.jsx)(`h3`,{className:`text-center mb-3`,children:(0,V.jsx)(T,{namespace:G,phrase:`heading`})}),(0,V.jsx)(`p`,{className:`text-center mb-3`,children:(0,V.jsx)(T,{namespace:G,phrase:`description`})}),(0,V.jsx)(`button`,{className:`btn btn-dark`,onClick:e.onTryAgain,children:(0,V.jsx)(T,{namespace:G,phrase:`buttonLabel`})})]})}function K(e){return(0,V.jsx)(`div`,{className:`${e.className}`,style:e.coverImageUrl&&{backgroundImage:`url(${D._createUrl(e.coverImageUrl,{size:E.Large})})`}})}var q=e(he()),J=`streamable.livestreamView`,Y=a.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`))}),He=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 Ue(e){let t=P(),[n,r]=B.useState({}),[i,a]=B.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,V.jsxs)(C,{children:[(0,V.jsxs)(`div`,{className:`row my-3`,children:[(0,V.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,V.jsx)(F,{label:Y(`firstName`),name:`firstName`,placeholder:Y(`firstNamePlaceholder`),value:t.values?.firstName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,V.jsx)(`div`,{className:`col-12 col-sm-6`,children:(0,V.jsx)(F,{label:Y(`lastName`),name:`lastName`,placeholder:Y(`lastNamePlaceholder`),value:t.values?.lastName,disabled:e.isAuthenticated,showRequiredStar:!e.isAuthenticated})}),(0,V.jsx)(`div`,{className:`col-12`,children:(0,V.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,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(`div`,{className:`col-12`,children:i?(0,V.jsx)(F,{label:Y(`schoolOrDistrict`),name:`schoolOrDistrict`,value:t.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:Y(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(Ae,{data:n,setData:s,clearData:c,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:e.googleMapsApiKey,required:!0,hideOnBlur:!0}),(0,V.jsx)(z,{data:n,setData:l,clearData:u,disabled:!n.schoolLocality,searchUrl:e.searchProspectsUrl,onClickNoSuggestions:d,required:!0,placeholder:!n.schoolLocality&&Y(`schoolPlaceholder`),hideOnBlur:!0})]})}),(0,V.jsx)(`div`,{className:`col-12`,children:(0,V.jsx)(Me,{id:`job-title`,error:t.touched?.jobTitle&&t.errors?.jobTitle,countryCode:k.US,initialValue:t.values?.jobTitle,onChange:e=>t.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0})})]}),(0,V.jsx)(`div`,{className:`col-12 col-sm-6 col-xl-4`,children:(0,V.jsx)(F,{type:`number`,label:Y(`attendees`),name:`attendees`,placeholder:Y(`attendeesPlaceholder`),min:1,value:t.values?.attendees,showRequiredStar:!0})}),!e.isAuthenticated&&(0,V.jsx)(`div`,{className:`col`,children:(0,V.jsx)(F,{label:Y(`phoneNumber`),name:`phoneNumber`,placeholder:Y(`phoneNumberPlaceholder`),value:t.values?.phoneNumber,showRequiredStar:!0})})]}),(0,V.jsx)(w,{type:`submit`,className:`w-100`,variant:`dark`,showSpinner:e.showSpinner,disabled:!t.isValid,children:(0,V.jsx)(T,{namespace:J,phrase:`book`})})]})}function We(e){return(0,V.jsx)(me,{initialValues:e.initialValues,validationSchema:e.isAuthenticated?X:He,validateOnMount:!0,onSubmit:e.onSubmit,children:(0,V.jsx)(Ue,{emailAddress:e.emailAddress,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}var Z={noRecording:`_noRecording_uwnqe_1`,coverImage:`_coverImage_uwnqe_4`,popup:`_popup_uwnqe_10`,page:`_page_uwnqe_15`},Q=`streamable.livestreamView`,Ge=a.encloseNamespace(Q);function $(e){let t=n.getHref(n.getCurrentAppLink()),r=t===`/`?{}:{redirectUrl:t},i=e.origin===`newsletter`,a=!e.isAuthenticated&&!i&&!e.livestream.recording,o=!e.isPastLivestream&&!e.formStage&&(e.isAuthenticated&&!e.isStudent||i),s={application:g.DEFAULT,action:b.Default.CHALLENGE,params:r},l={application:g.DASHBOARD,action:b.Dashboard.COMPANY_DASHBOARD,args:[e.livestream.company.id,c.slugify(e.livestream.company.name)]};return(0,V.jsxs)(V.Fragment,{children:[!e.success&&!e.error&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(H,{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,timezone:e.livestream.timezone,description:!e.formStage&&e.livestream.description,isPastLivestream:e.isPastLivestream,companyAppLink:l}),e.formStage&&(0,V.jsx)(We,{emailAddress:e.emailAddress,initialValues:e.initialValues,isAuthenticated:e.isAuthenticated,showSpinner:e.showSpinner,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),o&&(0,V.jsx)(`button`,{className:`btn btn-dark w-100`,onClick:()=>e.setFormStage(!0),children:(0,V.jsx)(T,{namespace:Q,phrase:`book`})}),e.isPastLivestream&&!e.livestream.recording&&(0,V.jsx)(`div`,{className:`${Z.noRecording} p-2 rounded`,children:(0,V.jsx)(T,{namespace:Q,phrase:`noRecording`})}),e.livestream.recording&&(0,V.jsx)(S,{appLink:{application:g.VIDEOS,action:b.Videos.PLAY_VIDEO,args:[e.livestream.recording.id,c.slugify(e.livestream.recording.name)]},children:(0,V.jsx)(`button`,{className:`btn btn-outline-dark w-100`,children:(0,V.jsx)(T,{namespace:Q,phrase:`recording`})})}),a&&(0,V.jsxs)(V.Fragment,{children:[(0,V.jsx)(S,{className:`mt-3 btn btn-dark w-100`,appLink:s,children:(0,V.jsx)(T,{namespace:Q,phrase:`signInButton`})}),(0,V.jsx)(S,{className:`d-flex justify-content-center align-items-center mt-3 text-info`,appLink:{application:g.DEFAULT,action:b.Default.CONTACT_US_POPUP},children:(0,V.jsx)(T,{namespace:Q,phrase:`contactUsLink`})})]})]}),e.success&&(0,V.jsx)(Be,{livestream:e.livestream}),e.error&&(0,V.jsx)(Ve,{onTryAgain:e.onTryAgain})]})}function Ke(e){function t(){e.closePopup(),Ee.preventScrollTop();let t=y.getCurrentRoute().appLink;t.application===g.LIVESTREAMS&&t.action===b.Livestreams.LIVESTREAM&&n.trigger(y.getPreviousRoute()?.appLink)}return(0,V.jsxs)(M,{size:`xl`,bodyClassName:`rounded-3 overflow-hidden p-0`,closePopup:t,children:[(0,V.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,V.jsxs)(`div`,{className:`row g-0`,children:[(0,V.jsx)(`div`,{className:`col-12 col-lg-6`,children:(0,V.jsx)(K,{className:`${Z.coverImage} ${Z.popup}`,coverImageUrl:e.livestream.company.cover?.url})}),(0,V.jsx)(`div`,{className:`col-12 col-lg p-4 m-lg-2`,children:(0,V.jsx)($,{...e})})]})]})}function qe(e){return(0,V.jsxs)(`div`,{className:`row g-0 px-3`,children:[(0,V.jsx)(`div`,{className:`col-12 col-md-6 col-lg-5`,children:(0,V.jsx)(K,{className:`${Z.coverImage} ${Z.page} rounded`,coverImageUrl:e.livestream.company.cover?.url})}),(0,V.jsx)(`div`,{className:`col-12 col-md px-md-3 pt-2 pt-md-0`,children:(0,V.jsx)($,{...e})})]})}function Je(e){let n=_(pe.config()),r=te(),i=Oe(),[a,c]=B.useState(!1),[u,m]=B.useState(!1),[g,v]=B.useState(!1),[y,b]=B.useState(!1),[x,S]=B.useState({firstName:``,lastName:``,email:``,attendees:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:C}=Ne(),[w]=ce(de,null,{storage:ae.SessionStorage}),T=_(ie.currentUser()),E=_(ye.livestream(e.id)),{hasPermissions:D}=fe(),O=D(ne.StudentExperience);se({...oe.getDefaultMetadata({title:E.data?.name,description:E.data?.description,phraseContext:{phraseHandler:Ge,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:Ce.getCanonicalLink({customAppLink:le.livestream(E.data)}),allowIndexing:!0,product:ue.PRODUCT_NAME}),_isPopupUp:!e.fromPageLoad}),Pe(E),B.useEffect(()=>{!E.data||E.data?.status===ge.Published||t.throw(new ee)},[E.data?.status]),B.useEffect(()=>{T.data?.isAuthenticated&&S({...x,firstName:T.data.givenName,lastName:T.data.familyName,email:T.data.email})},[T.data?.isAuthenticated]);async function k(e){try{b(!0),S(e),await r(Re.createBooking({eventId:E.data.id,eventType:`Livestream`,firstName:e.firstName,lastName:e.lastName,email:e.email,attendees:e.attendees,status:1})),T.data?.isAuthenticated||C({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),M(s.Complete),N(e),m(!0)}catch{v(!0),c(!1)}finally{b(!1)}}function A(){v(!1),c(!0)}function j(){c(!0),M(s.Start)}function M(t){f.logUserAction({id:E.data.id,name:E.data.name},{entity:l.Livestream,actionType:o.Submit,location:d.LivestreamBookingForm,descriptor:e.fromPageLoad?p.FullPage:p.Popup,workflowPhase:t})}async function N(e){try{let t=await r(R.checkEmail(e.email)),n;e.prospectId&&(n=(await r(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,syncToCrm:t?.users?.length?void 0:!0,crmId:n||void 0}};i.logFormSubmission({eventType:Fe.StreamableFormEvent.LivestreamBookingFormSubmit,source:De.LivestreamBooking,conversion:je.LivestreamBooking,user:a,productType:`sl`})}catch(e){console.error(`Failed to log submission event to Braze`,e)}}if(!(E.hasCompleted&&n.hasCompleted))return(0,V.jsx)(V.Fragment,{});let P={livestream:E.data,formStage:a,initialValues:x,isAuthenticated:T.data?.isAuthenticated,isStudent:O,success:u,error:g,isPastLivestream:h.isBefore(E.data.endDateTime,new Date),showSpinner:y,origin:w,onSubmit:k,onTryAgain:A,setFormStage:j,googleMapsApiKey:n.data.googleMapsApiKey,searchProspectsUrl:re.safeUrlConcat(n.data.gatewayApiUrl,`/v1/search/prospects`),emailAddress:T.data?.email};return e.fromPageLoad?(0,V.jsx)(qe,{...P}):(0,V.jsx)(Ke,{...P,closePopup:e.closePopup})}export{Je as LivestreamView};
2
+ //# sourceMappingURL=BXJetawx2.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"CwI-7tep2.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/apps/streamable-learning/flight-requests/BookingRequests.ts","../../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-boooking-error/livestream-booking-error.module.scss","../../src/apps/livestreams/components/livestream-boooking-error/LivestreamBookingError.tsx","../../src/apps/livestreams/components/livestream-cover-image/LivestreamCoverImage.tsx","../../src/apps/livestreams/components/livestream-form/LivestreamForm.tsx","../../src/apps/livestreams/views/livestream.module.scss","../../src/apps/livestreams/views/LivestreamView.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';\n\nimport { Timezone, TIMEZONES_US } from 'libs/shared/apps/streamable-learning/constants/Timezones';\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 timezone: Timezone;\n description?: string;\n isPastLivestream?: boolean;\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: Timezone): string {\n return TIMEZONES_US[timezone]?.name;\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: LinkifyHelper.linkifyText(props.description) }} />}\n </>\n );\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CreateBookingRequest } from 'libs/shared/apps/streamable-learning/requests/CreateBookingRequest';\n\nexport const BookingRequests = {\n createBooking(data: CreateBookingRequest): Flight.PublicRequest {\n return {\n publicUrl: '/api/integrations/api/v1/bookings',\n url: '{gateway}/v1/events/booking',\n key: `streamable:create:booking`,\n type: HttpVerbs.POST,\n data\n };\n }\n};\n",":local {\n .logo {\n height: 9.25rem;\n width: 9.25rem;\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 = 'streamable.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 timezone={props.livestream.timezone}\n />\n </div>\n <p><Text namespace={namespace} phrase='emailReminder' /></p>\n </>\n );\n}\n",":local {\n .image {\n height: 9.25rem;\n width: 9.25rem;\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 = 'streamable.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.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 { 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 = 'streamable.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 function triggerValidation() {\n // For whatever reason, forcing the form the validate needs to happen in a setTimeout to work\n // I genuinely have no idea why - Sha\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 '~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}","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 { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\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 { BrazeCheckEmailResponse, BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BookingRequests } from 'libs/shared/apps/streamable-learning/flight-requests/BookingRequests';\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 { 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/StreamableActions';\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { BrazeConversion } from 'shared/enums/BrazeConversion';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\nimport { PUBLIC_ORIGIN_VIEW_MODEL_KEY, PublicOriginViewModel } from 'shared/filters/OriginFilter';\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { useStreamableBrazeClientService } from 'shared/hooks/useStreamableBrazeClientService';\nimport { StreamableAppLinks } from 'shared/utils/StreamableAppLinks';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { LivestreamBookingSuccess } from 'apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess';\nimport { LivestreamBookingError } from 'apps/livestreams/components/livestream-boooking-error/LivestreamBookingError';\nimport { LivestreamCoverImage } from 'apps/livestreams/components/livestream-cover-image/LivestreamCoverImage';\nimport { LivestreamBookingFormValues, LivestreamForm } from 'apps/livestreams/components/livestream-form/LivestreamForm';\n\nimport styles from './livestream.module.scss';\n\nconst namespace = 'streamable.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 success: boolean;\n error: boolean;\n isPastLivestream: boolean;\n showSpinner: boolean;\n origin?: PublicOriginViewModel;\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}\n\nfunction LivestreamContent(props: LivestreamBookingProps) {\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n const signInParams = redirectUrl !== '/' ? { redirectUrl } : {};\n const originNewsletter = props.origin === 'newsletter';\n const showSignInLink = !props.isAuthenticated && !originNewsletter && !props.livestream.recording;\n const showBook =\n !props.isPastLivestream &&\n !props.formStage &&\n ((props.isAuthenticated && !props.isStudent) || originNewsletter);\n\n const signInLink = {\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: signInParams\n };\n\n const companyAppLink = {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.COMPANY_DASHBOARD,\n args: [ 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 timezone={props.livestream.timezone}\n description={!props.formStage && props.livestream.description}\n isPastLivestream={props.isPastLivestream}\n companyAppLink={companyAppLink}\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='btn btn-dark w-100'\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: [ props.livestream.recording.id, TextHelper.slugify(props.livestream.recording.name) ]\n }}>\n <button className='btn btn-outline-dark w-100'><Text namespace={namespace} phrase='recording' /></button>\n </AppLink>\n }\n {showSignInLink &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInButton' />\n </AppLink>\n <AppLink\n className='d-flex justify-content-center align-items-center mt-3 text-info'\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.CONTACT_US_POPUP\n }}\n >\n <Text namespace={namespace} phrase='contactUsLink' />\n </AppLink>\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}\n\nexport function LivestreamView(props: LivestreamViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const fetchAsync = useGetFetchAsync();\n const braze = useStreamableBrazeClientService();\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\n const [origin] = useViewModel<PublicOriginViewModel>(\n PUBLIC_ORIGIN_VIEW_MODEL_KEY,\n null,\n { storage: StorageType.SessionStorage }\n );\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 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: StreamableAppLinks.livestream(livestream.data)\n }),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\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 try {\n setSubmitting(true);\n setInitialValues(values);\n\n await fetchAsync(BookingRequests.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 try {\n const checkEmail = await fetchAsync<BrazeCheckEmailResponse>(BrazeRequests.checkEmail(values.email));\n\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 syncToCrm: checkEmail?.users?.length ? undefined : true,\n crmId: crmId || undefined\n }\n };\n\n braze.logFormSubmission({\n eventType: StreamableFormEvent.LivestreamBookingFormSubmit,\n source: BrazeSource.LivestreamBooking,\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 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 success,\n error,\n isPastLivestream: DateHelper.isBefore(livestream.data.endDateTime, new Date()),\n showSpinner: submitting,\n origin,\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 };\n\n if (props.fromPageLoad) {\n return (\n <LivestreamPage {...livestreamBookingProps} />\n );\n }\n\n return <LivestreamPopup {...livestreamBookingProps} closePopup={props.closePopup} />;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"BXJetawx2.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/apps/streamable-learning/flight-requests/BookingRequests.ts","../../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-boooking-error/livestream-booking-error.module.scss","../../src/apps/livestreams/components/livestream-boooking-error/LivestreamBookingError.tsx","../../src/apps/livestreams/components/livestream-cover-image/LivestreamCoverImage.tsx","../../src/apps/livestreams/components/livestream-form/LivestreamForm.tsx","../../src/apps/livestreams/views/livestream.module.scss","../../src/apps/livestreams/views/LivestreamView.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';\n\nimport { Timezone, TIMEZONES_US } from 'libs/shared/apps/streamable-learning/constants/Timezones';\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 timezone: Timezone;\n description?: string;\n isPastLivestream?: boolean;\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: Timezone): string {\n return TIMEZONES_US[timezone]?.name;\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: LinkifyHelper.linkifyText(props.description) }} />}\n </>\n );\n}\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CreateBookingRequest } from 'libs/shared/apps/streamable-learning/requests/CreateBookingRequest';\n\nexport const BookingRequests = {\n createBooking(data: CreateBookingRequest): Flight.PublicRequest {\n return {\n publicUrl: '/api/integrations/api/v1/bookings',\n url: '{gateway}/v1/events/booking',\n key: `streamable:create:booking`,\n type: HttpVerbs.POST,\n data\n };\n }\n};\n",":local {\n .logo {\n height: 9.25rem;\n width: 9.25rem;\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 = 'streamable.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 timezone={props.livestream.timezone}\n />\n </div>\n <p><Text namespace={namespace} phrase='emailReminder' /></p>\n </>\n );\n}\n",":local {\n .image {\n height: 9.25rem;\n width: 9.25rem;\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 = 'streamable.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.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 { 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 = 'streamable.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 function triggerValidation() {\n // For whatever reason, forcing the form the validate needs to happen in a setTimeout to work\n // I genuinely have no idea why - Sha\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 '~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}","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 { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\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 { BrazeCheckEmailResponse, BrazeHelper } from 'libs/shared/apps/sign-up/helpers/BrazeHelper';\nimport { LivestreamDetails } from 'libs/shared/apps/streamable-learning/components/livestream-details/LivestreamDetails';\nimport { BookingRequests } from 'libs/shared/apps/streamable-learning/flight-requests/BookingRequests';\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 { 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/StreamableActions';\nimport { StreamableConstants } from 'shared/constants/StreamableConstants';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { BrazeConversion } from 'shared/enums/BrazeConversion';\nimport { BrazeSource } from 'shared/enums/BrazeSource';\nimport { PUBLIC_ORIGIN_VIEW_MODEL_KEY, PublicOriginViewModel } from 'shared/filters/OriginFilter';\nimport { LivestreamRequests } from 'shared/flight-requests/LivestreamRequests';\nimport { useStreamableBrazeClientService } from 'shared/hooks/useStreamableBrazeClientService';\nimport { StreamableAppLinks } from 'shared/utils/StreamableAppLinks';\nimport { SeoHelper } from 'shared/utils/StreamableSeoHelper';\n\nimport { LivestreamBookingSuccess } from 'apps/livestreams/components/livestream-booking-success/LivestreamBookingSuccess';\nimport { LivestreamBookingError } from 'apps/livestreams/components/livestream-boooking-error/LivestreamBookingError';\nimport { LivestreamCoverImage } from 'apps/livestreams/components/livestream-cover-image/LivestreamCoverImage';\nimport { LivestreamBookingFormValues, LivestreamForm } from 'apps/livestreams/components/livestream-form/LivestreamForm';\n\nimport styles from './livestream.module.scss';\n\nconst namespace = 'streamable.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 success: boolean;\n error: boolean;\n isPastLivestream: boolean;\n showSpinner: boolean;\n origin?: PublicOriginViewModel;\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}\n\nfunction LivestreamContent(props: LivestreamBookingProps) {\n const redirectUrl = Core.AppLinkHelper.getHref(Core.AppLinkHelper.getCurrentAppLink());\n const signInParams = redirectUrl !== '/' ? { redirectUrl } : {};\n const originNewsletter = props.origin === 'newsletter';\n const showSignInLink = !props.isAuthenticated && !originNewsletter && !props.livestream.recording;\n const showBook =\n !props.isPastLivestream &&\n !props.formStage &&\n ((props.isAuthenticated && !props.isStudent) || originNewsletter);\n\n const signInLink = {\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: signInParams\n };\n\n const companyAppLink = {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.COMPANY_DASHBOARD,\n args: [ 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 timezone={props.livestream.timezone}\n description={!props.formStage && props.livestream.description}\n isPastLivestream={props.isPastLivestream}\n companyAppLink={companyAppLink}\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='btn btn-dark w-100'\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: [ props.livestream.recording.id, TextHelper.slugify(props.livestream.recording.name) ]\n }}>\n <button className='btn btn-outline-dark w-100'><Text namespace={namespace} phrase='recording' /></button>\n </AppLink>\n }\n {showSignInLink &&\n <>\n <AppLink\n className='mt-3 btn btn-dark w-100'\n appLink={signInLink}\n >\n <Text namespace={namespace} phrase='signInButton' />\n </AppLink>\n <AppLink\n className='d-flex justify-content-center align-items-center mt-3 text-info'\n appLink={{\n application: AppChannels.DEFAULT,\n action: Actions.Default.CONTACT_US_POPUP\n }}\n >\n <Text namespace={namespace} phrase='contactUsLink' />\n </AppLink>\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}\n\nexport function LivestreamView(props: LivestreamViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const fetchAsync = useGetFetchAsync();\n const braze = useStreamableBrazeClientService();\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\n const [origin] = useViewModel<PublicOriginViewModel>(\n PUBLIC_ORIGIN_VIEW_MODEL_KEY,\n null,\n { storage: StorageType.SessionStorage }\n );\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 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: StreamableAppLinks.livestream(livestream.data)\n }),\n allowIndexing: true,\n product: StreamableConstants.PRODUCT_NAME\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 try {\n setSubmitting(true);\n setInitialValues(values);\n\n await fetchAsync(BookingRequests.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 try {\n const checkEmail = await fetchAsync<BrazeCheckEmailResponse>(BrazeRequests.checkEmail(values.email));\n\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 syncToCrm: checkEmail?.users?.length ? undefined : true,\n crmId: crmId || undefined\n }\n };\n\n braze.logFormSubmission({\n eventType: StreamableFormEvent.LivestreamBookingFormSubmit,\n source: BrazeSource.LivestreamBooking,\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 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 success,\n error,\n isPastLivestream: DateHelper.isBefore(livestream.data.endDateTime, new Date()),\n showSpinner: submitting,\n origin,\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 };\n\n if (props.fromPageLoad) {\n return (\n <LivestreamPage {...livestreamBookingProps} />\n );\n }\n\n return <LivestreamPopup {...livestreamBookingProps} closePopup={props.closePopup} />;\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{t as n}from"./ImQRQGZr.chunk.js";import{lt as r,ut as i}from"./Dun43GrB.chunk.js";import{t as a}from"./B-OL6Vs7.chunk.js";import{d as o,l as s}from"./BQ5XMoHG.chunk.js";import{n as c}from"./CAEQvGr_.chunk.js";import{t as l}from"./ibuOpDkQ.chunk.js";import{t as u}from"./CxwN2xIE.chunk.js";import{t as d}from"./DeldjYRc.chunk.js";import{t as f}from"./BYYiNmLB.chunk.js";import{t as p}from"./Ca1QPe-q2.chunk.js";import{i as m,t as h}from"./ClfNVaoj2.chunk.js";import{n as g}from"./D7d5XFW82.chunk.js";import{n as _,t as v}from"./DjIdG9LL2.chunk.js";import{t as y}from"./iTHYgnO8.chunk.js";import{t as b}from"./DIVzVtlg.chunk.js";import{D as x,I as S,X as C,z as ee}from"./app-B1XBsz23.js";import{t as w}from"./BlQ4coEt.chunk.js";import{a as T,i as E,r as D,t as O}from"./BCdnm1Nn.chunk.js";import{t as k}from"./BlBCp_pE.chunk.js";import{t as te}from"./BOTX-kIq.chunk.js";import{a as ne,c as A,i as re,l as ie,n as ae,o as j,r as M,s as N,t as P}from"./CPkKuTSK2.chunk.js";var F=w(),I=e(i(),1),L={image:`_image_13xy1_1`},R=r(),z=`default.contactUsError`,B=n.encloseNamespace(z);function V({className:e=``,onTryAgain:t}){return(0,R.jsxs)(y,{className:e,children:[(0,R.jsx)(y.Image,{className:L.image,src:f.General.LOST_MESSAGE_BOTTLE}),(0,R.jsx)(y.Heading,{className:`w-100`,children:(0,R.jsx)(g,{namespace:z,phrase:`errorHeading`})}),(0,R.jsx)(y.Info,{className:`w-100`,children:(0,R.jsx)(g,{namespace:z,phrase:`errorMessage`})}),(0,R.jsx)(y.Cta,{text:B(`buttonLabel`),className:`btn btn-dark w-100`,onClick:t})]})}var H=e(D(),1),U=`default.contactUsForm`,W=n.encloseNamespace(U),G=H.object({firstName:H.string().required(W(`firstNameRequired`)),lastName:H.string().required(W(`lastNameRequired`)),email:H.string().email(W(`emailValid`)).required(W(`emailRequired`)),jobTitle:H.string().required(W(`jobTitleRequired`)),phoneNumber:H.string().required(W(`phoneNumberRequired`)).matches(/^[0-9]+$/,W(`phoneNumberValid`)),schoolOrDistrict:H.string().required(W(`schoolOrDistrictRequired`))});function K(e){return(0,R.jsx)(E,{initialValues:e.initialValues,validateOnMount:!0,validationSchema:G,onSubmit:e.onSubmit,children:(0,R.jsx)(q,{showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}function q(e){let{showSpinner:t,googleMapsApiKey:n,searchProspectsUrl:r}=e,i=T(),[a,o]=I.useState({}),[s,c]=I.useState(!1);function l(){i.setFieldValue(`schoolOrDistrict`,``),i.setFieldValue(`country`,``),i.setFieldValue(`province`,``),i.setFieldValue(`prospectId`,``),v()}function u(e){o({...a,...e}),l()}function d(){o({}),l()}function f(e){o({...a,...e}),i.setFieldValue(`schoolOrDistrict`,e.schoolName),i.setFieldValue(`country`,e.country),i.setFieldValue(`province`,e.province),i.setFieldValue(`prospectId`,e.prospectId),v()}function p(){o({...a,prospectId:void 0,schoolName:void 0,schoolPostCode:void 0}),l()}function _(e){c(!0),i.setFieldValue(`schoolOrDistrict`,e),v()}function v(){window.setTimeout(()=>i.validateForm(),0)}return(0,R.jsxs)(m,{children:[(0,R.jsx)(O,{label:W(`firstName`),name:`firstName`,value:i.values?.firstName,showRequiredStar:!0,placeholder:W(`firstNamePlaceholder`)}),(0,R.jsx)(O,{label:W(`lastName`),name:`lastName`,value:i.values?.lastName,showRequiredStar:!0,placeholder:W(`lastNamePlaceholder`)}),(0,R.jsx)(O,{label:W(`email`),name:`email`,value:i.values?.email,showRequiredStar:!0,placeholder:W(`emailPlaceholder`)}),s?(0,R.jsx)(O,{label:W(`schoolOrDistrict`),name:`schoolOrDistrict`,value:i.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:W(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ae,{data:a,setData:u,clearData:d,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:n,required:!0,hideOnBlur:!0}),(0,R.jsx)(P,{data:a,setData:f,clearData:p,disabled:!a.schoolLocality,searchUrl:r,onClickNoSuggestions:_,required:!0,placeholder:!a.schoolLocality&&W(`schoolPlaceholder`),hideOnBlur:!0})]}),(0,R.jsx)(M,{id:`job-title`,error:i.touched?.jobTitle&&i.errors?.jobTitle,countryCode:b.US,initialValue:i.values?.jobTitle,onChange:e=>i.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0}),(0,R.jsx)(O,{label:W(`phoneNumber`),name:`phoneNumber`,value:i.values?.phoneNumber,showRequiredStar:!0,placeholder:W(`phoneNumberPlaceholder`)}),(0,R.jsx)(h,{type:`submit`,className:`w-100 mt-3`,variant:`dark`,showSpinner:t,disabled:!i.isValid,children:(0,R.jsx)(g,{namespace:U,phrase:`contactUsButton`})})]})}var oe={image:`_image_13xy1_1`},J=`default.contactUsSuccess`,se=n.encloseNamespace(J);function ce({className:e=``,onClose:t}){return(0,R.jsxs)(y,{className:e,children:[(0,R.jsx)(y.Image,{className:oe.image,src:f.General.EMAIL_SENT}),(0,R.jsx)(y.Heading,{className:`w-100`,children:(0,R.jsx)(g,{namespace:J,phrase:`successHeading`})}),(0,R.jsx)(y.Info,{className:`w-100`,children:(0,R.jsx)(g,{namespace:J,phrase:`successMessage`})}),t&&(0,R.jsx)(y.Cta,{text:se(`buttonLabel`),className:`btn btn-dark w-100`,onClick:t})]})}var Y={logo:`_logo_c400r_1`,pageContainer:`_pageContainer_c400r_5`},X=`default.contactUs`,Z=n.encloseNamespace(X);function Q(e){return(0,R.jsxs)(R.Fragment,{children:[e.formStage===`data-entry`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`h1`,{className:`h2 text-center`,children:(0,R.jsx)(g,{namespace:X,phrase:`contactUsHeading`})}),(0,R.jsx)(`p`,{className:`text-center mb-3`,children:(0,R.jsx)(g,{namespace:X,phrase:`contactUsDescription`})}),(0,R.jsx)(K,{initialValues:e.initialFormValues,showSpinner:e.submitting,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),e.showSignIn&&(0,R.jsx)(p,{className:`d-flex justify-content-center align-items-center mt-3 text-info`,appLink:{application:a.DEFAULT,action:d.Default.CHALLENGE,params:e.loginParams},children:(0,R.jsx)(g,{namespace:X,phrase:`signInLink`})})]}),e.formStage===`error`&&(0,R.jsx)(V,{onTryAgain:e.onTryAgain}),e.formStage===`success`&&(0,R.jsx)(ce,{onClose:e.closePopup})]})}function le(e){return v(_.getDefaultMetadata({title:Z(`title`),phraseContext:{phraseHandler:Z,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:k.getCanonicalLink(),allowIndexing:!0,product:S.PRODUCT_NAME})),(0,R.jsx)(`div`,{className:`${Y.pageContainer} bg-white mt-4 mx-4 mx-sm-auto p-3 mb-3 border border-gray-400 rounded-3 shadow-sm`,children:(0,R.jsx)(Q,{formStage:e.formStage,initialFormValues:e.initialFormValues,loginParams:e.loginParams,onSubmit:e.onSubmit,onTryAgain:e.onTryAgain,submitting:e.submitting,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl,showSignIn:e.showSignIn})})}function $(e){function t(){e.closePopup(),te.preventScrollTop()}return(0,R.jsxs)(ee,{title:Z(`title`),closePopup:t,bodyClassName:`p-5`,hideTitle:!0,children:[(0,R.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,R.jsx)(`div`,{className:`${Y.logo} position-absolute top-0 start-0 m-3`,children:(0,R.jsx)(x,{})}),(0,R.jsx)(Q,{formStage:e.formStage,initialFormValues:e.initialFormValues,loginParams:e.loginParams,onSubmit:e.onSubmit,onTryAgain:e.onTryAgain,submitting:e.submitting,closePopup:t,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl,showSignIn:e.showSignIn})]})}function ue(e){let n=o(),r=s(C.config()),i=s(l.currentUser()),a=re(),[d,f]=I.useState(`data-entry`),[p,m]=I.useState(!1),[h,g]=I.useState({firstName:``,lastName:``,email:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:_}=N(),v=t.getHref(u.getCurrentRoute().appLink),y=v===`/`?{}:{redirectUrl:v};I.useEffect(()=>{i.data?.isAuthenticated&&g({...h,firstName:i.data.givenName,lastName:i.data.familyName,email:i.data.email})},[i.data?.isAuthenticated]);async function b(e){try{m(!0),g(e);let t=await n(A.checkEmail(e.email)),r;e.prospectId&&(r=(await n(A.prospectLookups(e.prospectId)))?.find(e=>e.type===`crm_id`)?.externalId);let i={email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,custom:{accountAddress:e?.province?{countryCode:e?.country,province:ie.parseProvince(e?.province||``)}:void 0,accountName:e.schoolOrDistrict,jobTitle:e.jobTitle,syncToCrm:t?.users?.length?void 0:!0,crmId:r||void 0}};_({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),a.logFormSubmission({user:i,eventType:F.StreamableFormEvent.ContactUsFormSubmit,source:ne.ContactUs,conversion:j.ContactUs,productType:`sl`}),f(`success`)}catch(e){console.warn(e),f(`error`)}finally{m(!1)}}function x(){f(`data-entry`)}if(!r.hasCompleted||!i.hasCompleted)return(0,R.jsx)(R.Fragment,{});let S={formStage:d,initialFormValues:h,submitting:p,loginParams:y,onSubmit:b,onTryAgain:x,closePopup:e.closePopup,googleMapsApiKey:r.data.googleMapsApiKey,searchProspectsUrl:c.safeUrlConcat(r.data.gatewayApiUrl,`/v1/search/prospects`),showSignIn:!i.data.isAuthenticated};return e.fromPageLoad?(0,R.jsx)(le,{...S}):(0,R.jsx)($,{...S})}export{ue as ContactUsView};
2
- //# sourceMappingURL=BV74ZRR22.chunk.js.map
1
+ import{gt as e,v as t}from"./Dp9qJj1C.chunk.js";import{t as n}from"./ImQRQGZr.chunk.js";import{lt as r,ut as i}from"./Dun43GrB.chunk.js";import{t as a}from"./B-OL6Vs7.chunk.js";import{d as o,l as s}from"./BQ5XMoHG.chunk.js";import{n as c}from"./CAEQvGr_.chunk.js";import{t as l}from"./ibuOpDkQ.chunk.js";import{t as u}from"./CxwN2xIE.chunk.js";import{t as d}from"./DeldjYRc.chunk.js";import{t as f}from"./BYYiNmLB.chunk.js";import{t as p}from"./Ca1QPe-q2.chunk.js";import{i as m,t as h}from"./ClfNVaoj2.chunk.js";import{n as g}from"./D7d5XFW82.chunk.js";import{n as _,t as v}from"./DjIdG9LL2.chunk.js";import{t as y}from"./iTHYgnO8.chunk.js";import{t as b}from"./DIVzVtlg.chunk.js";import{D as x,I as S,X as C,z as ee}from"./app-BIigh9wv.js";import{t as w}from"./BlQ4coEt.chunk.js";import{a as T,i as E,r as D,t as O}from"./DKnZ8BaN.chunk.js";import{t as k}from"./BlBCp_pE.chunk.js";import{t as te}from"./BOTX-kIq.chunk.js";import{a as ne,c as A,i as re,l as ie,n as ae,o as j,r as M,s as N,t as P}from"./B703cBe72.chunk.js";var F=w(),I=e(i(),1),L={image:`_image_13xy1_1`},R=r(),z=`default.contactUsError`,B=n.encloseNamespace(z);function V({className:e=``,onTryAgain:t}){return(0,R.jsxs)(y,{className:e,children:[(0,R.jsx)(y.Image,{className:L.image,src:f.General.LOST_MESSAGE_BOTTLE}),(0,R.jsx)(y.Heading,{className:`w-100`,children:(0,R.jsx)(g,{namespace:z,phrase:`errorHeading`})}),(0,R.jsx)(y.Info,{className:`w-100`,children:(0,R.jsx)(g,{namespace:z,phrase:`errorMessage`})}),(0,R.jsx)(y.Cta,{text:B(`buttonLabel`),className:`btn btn-dark w-100`,onClick:t})]})}var H=e(D(),1),U=`default.contactUsForm`,W=n.encloseNamespace(U),G=H.object({firstName:H.string().required(W(`firstNameRequired`)),lastName:H.string().required(W(`lastNameRequired`)),email:H.string().email(W(`emailValid`)).required(W(`emailRequired`)),jobTitle:H.string().required(W(`jobTitleRequired`)),phoneNumber:H.string().required(W(`phoneNumberRequired`)).matches(/^[0-9]+$/,W(`phoneNumberValid`)),schoolOrDistrict:H.string().required(W(`schoolOrDistrictRequired`))});function K(e){return(0,R.jsx)(E,{initialValues:e.initialValues,validateOnMount:!0,validationSchema:G,onSubmit:e.onSubmit,children:(0,R.jsx)(q,{showSpinner:e.showSpinner,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl})})}function q(e){let{showSpinner:t,googleMapsApiKey:n,searchProspectsUrl:r}=e,i=T(),[a,o]=I.useState({}),[s,c]=I.useState(!1);function l(){i.setFieldValue(`schoolOrDistrict`,``),i.setFieldValue(`country`,``),i.setFieldValue(`province`,``),i.setFieldValue(`prospectId`,``),v()}function u(e){o({...a,...e}),l()}function d(){o({}),l()}function f(e){o({...a,...e}),i.setFieldValue(`schoolOrDistrict`,e.schoolName),i.setFieldValue(`country`,e.country),i.setFieldValue(`province`,e.province),i.setFieldValue(`prospectId`,e.prospectId),v()}function p(){o({...a,prospectId:void 0,schoolName:void 0,schoolPostCode:void 0}),l()}function _(e){c(!0),i.setFieldValue(`schoolOrDistrict`,e),v()}function v(){window.setTimeout(()=>i.validateForm(),0)}return(0,R.jsxs)(m,{children:[(0,R.jsx)(O,{label:W(`firstName`),name:`firstName`,value:i.values?.firstName,showRequiredStar:!0,placeholder:W(`firstNamePlaceholder`)}),(0,R.jsx)(O,{label:W(`lastName`),name:`lastName`,value:i.values?.lastName,showRequiredStar:!0,placeholder:W(`lastNamePlaceholder`)}),(0,R.jsx)(O,{label:W(`email`),name:`email`,value:i.values?.email,showRequiredStar:!0,placeholder:W(`emailPlaceholder`)}),s?(0,R.jsx)(O,{label:W(`schoolOrDistrict`),name:`schoolOrDistrict`,value:i.values?.schoolOrDistrict,showRequiredStar:!0,placeholder:W(`schoolOrDistrictPlaceholder`),autoFocus:!0}):(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(ae,{data:a,setData:u,clearData:d,labelClassName:`form-label`,geoLocation:{countryCode:`US`},googleMapsApiKey:n,required:!0,hideOnBlur:!0}),(0,R.jsx)(P,{data:a,setData:f,clearData:p,disabled:!a.schoolLocality,searchUrl:r,onClickNoSuggestions:_,required:!0,placeholder:!a.schoolLocality&&W(`schoolPlaceholder`),hideOnBlur:!0})]}),(0,R.jsx)(M,{id:`job-title`,error:i.touched?.jobTitle&&i.errors?.jobTitle,countryCode:b.US,initialValue:i.values?.jobTitle,onChange:e=>i.setFieldValue(`jobTitle`,e,!1),labelClassName:`form-label`,isTertiary:!1,required:!0}),(0,R.jsx)(O,{label:W(`phoneNumber`),name:`phoneNumber`,value:i.values?.phoneNumber,showRequiredStar:!0,placeholder:W(`phoneNumberPlaceholder`)}),(0,R.jsx)(h,{type:`submit`,className:`w-100 mt-3`,variant:`dark`,showSpinner:t,disabled:!i.isValid,children:(0,R.jsx)(g,{namespace:U,phrase:`contactUsButton`})})]})}var oe={image:`_image_13xy1_1`},J=`default.contactUsSuccess`,se=n.encloseNamespace(J);function ce({className:e=``,onClose:t}){return(0,R.jsxs)(y,{className:e,children:[(0,R.jsx)(y.Image,{className:oe.image,src:f.General.EMAIL_SENT}),(0,R.jsx)(y.Heading,{className:`w-100`,children:(0,R.jsx)(g,{namespace:J,phrase:`successHeading`})}),(0,R.jsx)(y.Info,{className:`w-100`,children:(0,R.jsx)(g,{namespace:J,phrase:`successMessage`})}),t&&(0,R.jsx)(y.Cta,{text:se(`buttonLabel`),className:`btn btn-dark w-100`,onClick:t})]})}var Y={logo:`_logo_c400r_1`,pageContainer:`_pageContainer_c400r_5`},X=`default.contactUs`,Z=n.encloseNamespace(X);function Q(e){return(0,R.jsxs)(R.Fragment,{children:[e.formStage===`data-entry`&&(0,R.jsxs)(R.Fragment,{children:[(0,R.jsx)(`h1`,{className:`h2 text-center`,children:(0,R.jsx)(g,{namespace:X,phrase:`contactUsHeading`})}),(0,R.jsx)(`p`,{className:`text-center mb-3`,children:(0,R.jsx)(g,{namespace:X,phrase:`contactUsDescription`})}),(0,R.jsx)(K,{initialValues:e.initialFormValues,showSpinner:e.submitting,onSubmit:e.onSubmit,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl}),e.showSignIn&&(0,R.jsx)(p,{className:`d-flex justify-content-center align-items-center mt-3 text-info`,appLink:{application:a.DEFAULT,action:d.Default.CHALLENGE,params:e.loginParams},children:(0,R.jsx)(g,{namespace:X,phrase:`signInLink`})})]}),e.formStage===`error`&&(0,R.jsx)(V,{onTryAgain:e.onTryAgain}),e.formStage===`success`&&(0,R.jsx)(ce,{onClose:e.closePopup})]})}function le(e){return v(_.getDefaultMetadata({title:Z(`title`),phraseContext:{phraseHandler:Z,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:k.getCanonicalLink(),allowIndexing:!0,product:S.PRODUCT_NAME})),(0,R.jsx)(`div`,{className:`${Y.pageContainer} bg-white mt-4 mx-4 mx-sm-auto p-3 mb-3 border border-gray-400 rounded-3 shadow-sm`,children:(0,R.jsx)(Q,{formStage:e.formStage,initialFormValues:e.initialFormValues,loginParams:e.loginParams,onSubmit:e.onSubmit,onTryAgain:e.onTryAgain,submitting:e.submitting,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl,showSignIn:e.showSignIn})})}function $(e){function t(){e.closePopup(),te.preventScrollTop()}return(0,R.jsxs)(ee,{title:Z(`title`),closePopup:t,bodyClassName:`p-5`,hideTitle:!0,children:[(0,R.jsx)(`button`,{className:`btn-close position-absolute top-0 end-0 p-3`,onClick:t}),(0,R.jsx)(`div`,{className:`${Y.logo} position-absolute top-0 start-0 m-3`,children:(0,R.jsx)(x,{})}),(0,R.jsx)(Q,{formStage:e.formStage,initialFormValues:e.initialFormValues,loginParams:e.loginParams,onSubmit:e.onSubmit,onTryAgain:e.onTryAgain,submitting:e.submitting,closePopup:t,googleMapsApiKey:e.googleMapsApiKey,searchProspectsUrl:e.searchProspectsUrl,showSignIn:e.showSignIn})]})}function ue(e){let n=o(),r=s(C.config()),i=s(l.currentUser()),a=re(),[d,f]=I.useState(`data-entry`),[p,m]=I.useState(!1),[h,g]=I.useState({firstName:``,lastName:``,email:``,schoolOrDistrict:``,jobTitle:``,phoneNumber:``,country:``,province:``,prospectId:``}),{createOrUpdateProfile:_}=N(),v=t.getHref(u.getCurrentRoute().appLink),y=v===`/`?{}:{redirectUrl:v};I.useEffect(()=>{i.data?.isAuthenticated&&g({...h,firstName:i.data.givenName,lastName:i.data.familyName,email:i.data.email})},[i.data?.isAuthenticated]);async function b(e){try{m(!0),g(e);let t=await n(A.checkEmail(e.email)),r;e.prospectId&&(r=(await n(A.prospectLookups(e.prospectId)))?.find(e=>e.type===`crm_id`)?.externalId);let i={email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,custom:{accountAddress:e?.province?{countryCode:e?.country,province:ie.parseProvince(e?.province||``)}:void 0,accountName:e.schoolOrDistrict,jobTitle:e.jobTitle,syncToCrm:t?.users?.length?void 0:!0,crmId:r||void 0}};_({email:e.email,firstName:e.firstName,lastName:e.lastName,phone:e.phoneNumber,countryCode:e.country}),a.logFormSubmission({user:i,eventType:F.StreamableFormEvent.ContactUsFormSubmit,source:ne.ContactUs,conversion:j.ContactUs,productType:`sl`}),f(`success`)}catch(e){console.warn(e),f(`error`)}finally{m(!1)}}function x(){f(`data-entry`)}if(!r.hasCompleted||!i.hasCompleted)return(0,R.jsx)(R.Fragment,{});let S={formStage:d,initialFormValues:h,submitting:p,loginParams:y,onSubmit:b,onTryAgain:x,closePopup:e.closePopup,googleMapsApiKey:r.data.googleMapsApiKey,searchProspectsUrl:c.safeUrlConcat(r.data.gatewayApiUrl,`/v1/search/prospects`),showSignIn:!i.data.isAuthenticated};return e.fromPageLoad?(0,R.jsx)(le,{...S}):(0,R.jsx)($,{...S})}export{ue as ContactUsView};
2
+ //# sourceMappingURL=BZOcEcTA2.chunk.js.map