@clickview/streamable-learning 0.48.0-rc.0 → 0.48.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +650 -650
- package/dist/bundles.json +1 -1
- package/dist/css/DU3tPCD_.chunk.css +12 -0
- package/dist/en.json +1 -1
- package/dist/scripts/{CeWjJPIz.chunk.js → BIisq8ZO.chunk.js} +2 -2
- package/dist/scripts/{CeWjJPIz.chunk.js.map → BIisq8ZO.chunk.js.map} +1 -1
- package/dist/scripts/{DxsW8K0n2.chunk.js → BWU6_pPN2.chunk.js} +2 -2
- package/dist/scripts/{DxsW8K0n2.chunk.js.map → BWU6_pPN2.chunk.js.map} +1 -1
- package/dist/scripts/{BMjES83N2.chunk.js → BcZFo9Vw2.chunk.js} +2 -2
- package/dist/scripts/{BMjES83N2.chunk.js.map → BcZFo9Vw2.chunk.js.map} +1 -1
- package/dist/scripts/Bd2bbHru.chunk.js +1 -0
- package/dist/scripts/{0xQRFMBY.chunk.js → BfNy0Hvk.chunk.js} +2 -2
- package/dist/scripts/{0xQRFMBY.chunk.js.map → BfNy0Hvk.chunk.js.map} +1 -1
- package/dist/scripts/{C9UjF0q6.chunk.js → BivP7X20.chunk.js} +2 -2
- package/dist/scripts/{C9UjF0q6.chunk.js.map → BivP7X20.chunk.js.map} +1 -1
- package/dist/scripts/{DrDQfaFN2.chunk.js → BjbY4Fbp2.chunk.js} +3 -3
- package/dist/scripts/{DrDQfaFN2.chunk.js.map → BjbY4Fbp2.chunk.js.map} +1 -1
- package/dist/scripts/{awemA_vU2.chunk.js → BmxcE73n2.chunk.js} +2 -2
- package/dist/scripts/{awemA_vU2.chunk.js.map → BmxcE73n2.chunk.js.map} +1 -1
- package/dist/scripts/{BMl02f_62.chunk.js → BnEMhkEE2.chunk.js} +2 -2
- package/dist/scripts/{BMl02f_62.chunk.js.map → BnEMhkEE2.chunk.js.map} +1 -1
- package/dist/scripts/{DmfbtOlu.chunk.js → Buc8GegC.chunk.js} +2 -2
- package/dist/scripts/{DmfbtOlu.chunk.js.map → Buc8GegC.chunk.js.map} +1 -1
- package/dist/scripts/{DvL3J2BU.chunk.js → Byczy1lS.chunk.js} +2 -2
- package/dist/scripts/{DvL3J2BU.chunk.js.map → Byczy1lS.chunk.js.map} +1 -1
- package/dist/scripts/{BV74ZRR22.chunk.js → C2itEpvc2.chunk.js} +2 -2
- package/dist/scripts/{BV74ZRR22.chunk.js.map → C2itEpvc2.chunk.js.map} +1 -1
- package/dist/scripts/{UAcFqQzZ.chunk.js → CEFKXxac.chunk.js} +2 -2
- package/dist/scripts/{UAcFqQzZ.chunk.js.map → CEFKXxac.chunk.js.map} +1 -1
- package/dist/scripts/{B7if0Lk52.chunk.js → CEYjJAp52.chunk.js} +2 -2
- package/dist/scripts/{B7if0Lk52.chunk.js.map → CEYjJAp52.chunk.js.map} +1 -1
- package/dist/scripts/{B1jitqYS2.chunk.js → CJSc4YDq2.chunk.js} +2 -2
- package/dist/scripts/{B1jitqYS2.chunk.js.map → CJSc4YDq2.chunk.js.map} +1 -1
- package/dist/scripts/{JtFbyaXc.chunk.js → CKUA5J3R.chunk.js} +2 -2
- package/dist/scripts/{JtFbyaXc.chunk.js.map → CKUA5J3R.chunk.js.map} +1 -1
- package/dist/scripts/{DNO0KpY72.chunk.js → CYrzupmS2.chunk.js} +2 -2
- package/dist/scripts/{DNO0KpY72.chunk.js.map → CYrzupmS2.chunk.js.map} +1 -1
- package/dist/scripts/{E9tNds1l.chunk.js → CcGYZb9f.chunk.js} +2 -2
- package/dist/scripts/{E9tNds1l.chunk.js.map → CcGYZb9f.chunk.js.map} +1 -1
- package/dist/scripts/{CibcLNJP2.chunk.js → CeQGaFi-2.chunk.js} +2 -2
- package/dist/scripts/{CibcLNJP2.chunk.js.map → CeQGaFi-2.chunk.js.map} +1 -1
- package/dist/scripts/{BqO6i89w2.chunk.js → Cr3Blj6H2.chunk.js} +2 -2
- package/dist/scripts/{BqO6i89w2.chunk.js.map → Cr3Blj6H2.chunk.js.map} +1 -1
- package/dist/scripts/{D0vsmyva.chunk.js → CxCkwLio.chunk.js} +2 -2
- package/dist/scripts/{D0vsmyva.chunk.js.map → CxCkwLio.chunk.js.map} +1 -1
- package/dist/scripts/{CvqqZmNo2.chunk.js → Cxj75Dqe2.chunk.js} +2 -2
- package/dist/scripts/{CvqqZmNo2.chunk.js.map → Cxj75Dqe2.chunk.js.map} +1 -1
- package/dist/scripts/{CcDgbmw52.chunk.js → D-VNmhoM2.chunk.js} +2 -2
- package/dist/scripts/{CcDgbmw52.chunk.js.map → D-VNmhoM2.chunk.js.map} +1 -1
- package/dist/scripts/{DAvXFgC62.chunk.js → D2FqnK9m2.chunk.js} +2 -2
- package/dist/scripts/{DAvXFgC62.chunk.js.map → D2FqnK9m2.chunk.js.map} +1 -1
- package/dist/scripts/{lokG7Sha2.chunk.js → D3sdyN2Q2.chunk.js} +2 -2
- package/dist/scripts/{lokG7Sha2.chunk.js.map → D3sdyN2Q2.chunk.js.map} +1 -1
- package/dist/scripts/{KCdpQ8qv2.chunk.js → D6IzS-bj2.chunk.js} +2 -2
- package/dist/scripts/{KCdpQ8qv2.chunk.js.map → D6IzS-bj2.chunk.js.map} +1 -1
- package/dist/scripts/{CPkKuTSK2.chunk.js → D8g6nOG92.chunk.js} +2 -2
- package/dist/scripts/{CPkKuTSK2.chunk.js.map → D8g6nOG92.chunk.js.map} +1 -1
- package/dist/scripts/{Bkv1Tbyu.chunk.js → DCKKwz9L.chunk.js} +2 -2
- package/dist/scripts/{Bkv1Tbyu.chunk.js.map → DCKKwz9L.chunk.js.map} +1 -1
- package/dist/scripts/{CeI-LCE-.chunk.js → DL4UFxRK.chunk.js} +2 -2
- package/dist/scripts/{CeI-LCE-.chunk.js.map → DL4UFxRK.chunk.js.map} +1 -1
- package/dist/scripts/{DLp7yHzT2.chunk.js → DLofRa642.chunk.js} +2 -2
- package/dist/scripts/{DLp7yHzT2.chunk.js.map → DLofRa642.chunk.js.map} +1 -1
- package/dist/scripts/{BSjm_rCE.chunk.js → DMZ--ok1.chunk.js} +2 -2
- package/dist/scripts/{BSjm_rCE.chunk.js.map → DMZ--ok1.chunk.js.map} +1 -1
- package/dist/scripts/{CikSQKH-.chunk.js → DQFcbMMk.chunk.js} +2 -2
- package/dist/scripts/{CikSQKH-.chunk.js.map → DQFcbMMk.chunk.js.map} +1 -1
- package/dist/scripts/{XnBhLH-02.chunk.js → DVeqPzBe2.chunk.js} +2 -2
- package/dist/scripts/{XnBhLH-02.chunk.js.map → DVeqPzBe2.chunk.js.map} +1 -1
- package/dist/scripts/{Clh6wBrg.chunk.js → DWerltCT.chunk.js} +2 -2
- package/dist/scripts/{Clh6wBrg.chunk.js.map → DWerltCT.chunk.js.map} +1 -1
- package/dist/scripts/{i2-k6ULv2.chunk.js → DatscYpA2.chunk.js} +2 -2
- package/dist/scripts/{i2-k6ULv2.chunk.js.map → DatscYpA2.chunk.js.map} +1 -1
- package/dist/scripts/{BXT8nHry2.chunk.js → DkaGC5IU2.chunk.js} +2 -2
- package/dist/scripts/{BXT8nHry2.chunk.js.map → DkaGC5IU2.chunk.js.map} +1 -1
- package/dist/scripts/{BoxedFO8.chunk.js → DqZWSPDJ.chunk.js} +2 -2
- package/dist/scripts/{BoxedFO8.chunk.js.map → DqZWSPDJ.chunk.js.map} +1 -1
- package/dist/scripts/{CoYNU7We2.chunk.js → Dql-1E6g2.chunk.js} +2 -2
- package/dist/scripts/{CoYNU7We2.chunk.js.map → Dql-1E6g2.chunk.js.map} +1 -1
- package/dist/scripts/{DNNNPLMp.chunk.js → DuBHin02.chunk.js} +2 -2
- package/dist/scripts/{DNNNPLMp.chunk.js.map → DuBHin02.chunk.js.map} +1 -1
- package/dist/scripts/{CK6c6uHp2.chunk.js → QMuFwiiF2.chunk.js} +2 -2
- package/dist/scripts/{CK6c6uHp2.chunk.js.map → QMuFwiiF2.chunk.js.map} +1 -1
- package/dist/scripts/{NV4_mMU8.chunk.js → U_sIlzAD.chunk.js} +2 -2
- package/dist/scripts/{NV4_mMU8.chunk.js.map → U_sIlzAD.chunk.js.map} +1 -1
- package/dist/scripts/{m9QbGES0.chunk.js → WLyOm9Lj.chunk.js} +2 -2
- package/dist/scripts/{m9QbGES0.chunk.js.map → WLyOm9Lj.chunk.js.map} +1 -1
- package/dist/scripts/{DlQrdOls.chunk.js → Ymq7JLkU.chunk.js} +2 -2
- package/dist/scripts/{DlQrdOls.chunk.js.map → Ymq7JLkU.chunk.js.map} +1 -1
- package/dist/scripts/{app-B1XBsz23.js → app-gjHxcZG3.js} +4 -4
- package/dist/scripts/app-gjHxcZG3.js.map +1 -0
- package/dist/scripts/{DIHDe4Sg.chunk.js → djRnI462.chunk.js} +2 -2
- package/dist/scripts/{DIHDe4Sg.chunk.js.map → djRnI462.chunk.js.map} +1 -1
- package/dist/scripts/{BDliRFoa.chunk.js → e2K2YU7z.chunk.js} +2 -2
- package/dist/scripts/{BDliRFoa.chunk.js.map → e2K2YU7z.chunk.js.map} +1 -1
- package/dist/scripts/{CpFOQcL7.chunk.js → fnfhCa1P.chunk.js} +2 -2
- package/dist/scripts/{CpFOQcL7.chunk.js.map → fnfhCa1P.chunk.js.map} +1 -1
- package/dist/scripts/{Dd8r1SE32.chunk.js → iyIL3kim2.chunk.js} +2 -2
- package/dist/scripts/{Dd8r1SE32.chunk.js.map → iyIL3kim2.chunk.js.map} +1 -1
- package/dist/scripts/{BKbKu9Rp.chunk.js → kfFYr9dc.chunk.js} +2 -2
- package/dist/scripts/{BKbKu9Rp.chunk.js.map → kfFYr9dc.chunk.js.map} +1 -1
- package/dist/scripts/{CwI-7tep2.chunk.js → kts5xiiM2.chunk.js} +2 -2
- package/dist/scripts/{CwI-7tep2.chunk.js.map → kts5xiiM2.chunk.js.map} +1 -1
- package/dist/scripts/{D8_5yfHY2.chunk.js → lLAYbgAy2.chunk.js} +2 -2
- package/dist/scripts/{D8_5yfHY2.chunk.js.map → lLAYbgAy2.chunk.js.map} +1 -1
- package/dist/scripts/{CXNve4Wq2.chunk.js → p9ukva5a2.chunk.js} +2 -2
- package/dist/scripts/{CXNve4Wq2.chunk.js.map → p9ukva5a2.chunk.js.map} +1 -1
- package/dist/scripts/{BCdnm1Nn.chunk.js → wOeN2ls0.chunk.js} +2 -2
- package/dist/scripts/{BCdnm1Nn.chunk.js.map → wOeN2ls0.chunk.js.map} +1 -1
- package/dist/scripts/{DMq5Gp-U2.chunk.js → zp2BHOp82.chunk.js} +2 -2
- package/dist/scripts/{DMq5Gp-U2.chunk.js.map → zp2BHOp82.chunk.js.map} +1 -1
- package/dist/scripts/{CmrPRojb.chunk.js → zyVwH8JF.chunk.js} +2 -2
- package/dist/scripts/{CmrPRojb.chunk.js.map → zyVwH8JF.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/D5Jnyjf8.chunk.js +0 -1
- package/dist/scripts/app-B1XBsz23.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./Dp9qJj1C.chunk.js";import{lt as e,ut as t}from"./Dun43GrB.chunk.js";import{a as n,i as r,r as i,t as a}from"./D2om474U2.chunk.js";import{l as o}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./Dp9qJj1C.chunk.js";import{lt as e,ut as t}from"./Dun43GrB.chunk.js";import{a as n,i as r,r as i,t as a}from"./D2om474U2.chunk.js";import{l as o}from"./app-gjHxcZG3.js";import{t as s}from"./CnDOpuFK.chunk.js";import{t as c}from"./NrXAMmgy2.chunk.js";import{t as l}from"./LdxNQaUZ2.chunk.js";var u={imageStyle:`_imageStyle_9s5en_1`,imageTypeResource:`_imageTypeResource_9s5en_6`,fallBackImage:`_fallBackImage_9s5en_12`};t();var d=e(),f={width:200,resizeType:n.Cover};function p(e,t,l){let u=l??f,d=m(t);if(`thumbnail`in t&&t.thumbnail?.url)return a.createUrl(t.thumbnail?.url,{...u});let p=o.safeUrlConcat(e,`/v1/previews`);return s.isResource(t)?d===r.Pdf?t.metadata.type===c.Pdf?a.createResourceImage(p,t.url,{...u}):a.createResourceImage(p,t.pdf?.url,{...u}):t.metadata.type===c.Zip?`/images/zip-resource.png`:a.createUrl(t.url,l??{size:i.Medium,resizeType:n.Cover}):a.createResourceImage(p,t.url,{...u})}function m(e){return s.isResource(e)?e.metadata.type===c.Pdf||e.pdf?.url?r.Pdf:r.Thumbnails:r.Link}function h(e){let t=null,n=0;return s.isResource(e.resource)&&(t=e.resource.metadata,n=e.resource.thumbnail?.metadata?.rotation??0),(0,d.jsx)(l,{data:p(e.imageCdnUrl,e.resource,e.dynamicRatioImageOptions),imageType:m(e.resource),imageStyle:{transform:`rotate(${n}deg)`},alt:e.resource.name,errorFallbackImageSrc:e.imageErrorFallbackUrl,errorFallbackImageClassName:u.fallBackImage,imageClassName:t?.type===c.Image?`${u.imageTypeResource} ${u.imageStyle}`:``,preload:e.preloadImage,preventLoad:!e.preloadImage})}var g={getResourceTypeName(e){switch(e){case`additional-materials`:return`Additional Materials`;case`atom-guide`:return`ATOM Guide`;case`teacher-pack`:return`Teacher Pack`;case`student-activity`:return`Student Activity`;default:return`N/A`}}};export{h as n,g as t};
|
|
2
|
+
//# sourceMappingURL=fnfhCa1P.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"fnfhCa1P.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/resource-thumbnail/resource-thumbnail.module.scss","../../../../libs/shared/src/components/resource-thumbnail/ResourceThumbnail.tsx","../../../../libs/shared/src/utils/ResourceHelper.ts"],"sourcesContent":[":local {\n .imageStyle {\n border-top-left-radius: $border-radius-lg;\n border-top-right-radius: $border-radius-lg;\n filter: drop-shadow(0px -1px 4px rgba(0, 0, 0, 0.1));\n }\n\n .imageTypeResource {\n width: auto;\n object-fit: contain;\n left: 50% !important;\n transform: translateX(-50%);\n }\n\n .fallBackImage {\n top:auto !important;\n bottom: 0 !important;\n }\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { ResourceFileType } from 'libs/shared/enums/ResourceFileType';\nimport { Link, Resource } from 'libs/shared/interfaces';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { BaseImage } from '../image/BaseImage';\n\nimport styles from './resource-thumbnail.module.scss';\n\n// Used for both PDFs and Links where we don't know the image ratio\nconst DYNAMIC_RATIO_IMAGE_OPTIONS: ImageOptions = {\n width: 200,\n resizeType: ResizeType.Cover\n};\n\nexport function getThumbnailUrl(\n imageCdnUrl: string,\n resource: Resource | Link,\n imageOptions?: ImageOptions\n): string {\n const options = imageOptions ?? DYNAMIC_RATIO_IMAGE_OPTIONS;\n const imageType = getImageType(resource);\n\n // Use the thumbnail if defined\n if ('thumbnail' in resource && resource.thumbnail?.url)\n return ImageHelper.createUrl(resource.thumbnail?.url, { ...options });\n \n const previewUrl = UrlHelper.safeUrlConcat(imageCdnUrl, '/v1/previews');\n\n if (!MasterTypeHelper.isResource(resource))\n return ImageHelper.createResourceImage(previewUrl, resource.url, { ...options });\n\n if (imageType === ImageType.Pdf) {\n return resource.metadata.type === ResourceFileType.Pdf ?\n ImageHelper.createResourceImage(previewUrl, resource.url, { ...options }) :\n ImageHelper.createResourceImage(previewUrl, resource.pdf?.url, { ...options });\n }\n\n if (resource.metadata.type !== ResourceFileType.Zip) {\n return ImageHelper.createUrl(\n resource.url,\n imageOptions ?? { size: ImageSize.Medium, resizeType: ResizeType.Cover }\n );\n }\n\n return '/images/zip-resource.png';\n}\n\nfunction getImageType(resource: Resource | Link): ImageType {\n if (!MasterTypeHelper.isResource(resource))\n return ImageType.Link;\n\n if (resource.metadata.type === ResourceFileType.Pdf || resource.pdf?.url)\n return ImageType.Pdf;\n\n return ImageType.Thumbnails;\n}\n\ninterface ResourceThumbnailProps {\n imageCdnUrl: string;\n resource: Resource | Link;\n imageErrorFallbackUrl: string;\n preloadImage: boolean;\n dynamicRatioImageOptions?: ImageOptions;\n}\n\nexport function ResourceThumbnail(props: ResourceThumbnailProps): JSX.Element {\n let metadata = null;\n let rotation = 0;\n\n if (MasterTypeHelper.isResource(props.resource)) {\n metadata = props.resource.metadata;\n rotation = props.resource.thumbnail?.metadata?.rotation ?? 0;\n }\n\n const thumbnailUrl = getThumbnailUrl(props.imageCdnUrl, props.resource, props.dynamicRatioImageOptions);\n\n return (\n <BaseImage\n data={thumbnailUrl}\n imageType={getImageType(props.resource)}\n imageStyle={{ transform: `rotate(${rotation}deg)` }}\n alt={props.resource.name}\n errorFallbackImageSrc={props.imageErrorFallbackUrl}\n errorFallbackImageClassName={styles.fallBackImage}\n imageClassName={metadata?.type === ResourceFileType.Image ? `${styles.imageTypeResource} ${styles.imageStyle}` : ''}\n preload={props.preloadImage}\n preventLoad={!props.preloadImage}\n >\n </BaseImage>\n );\n}\n","import { ResourceType } from 'libs/shared/interfaces';\n\nexport const ResourceHelper = {\n getResourceTypeName(resourceType: ResourceType): string {\n switch (resourceType) {\n case 'additional-materials':\n return 'Additional Materials';\n\n case 'atom-guide':\n return 'ATOM Guide';\n\n case 'teacher-pack':\n return 'Teacher Pack';\n\n case 'student-activity':\n return 'Student Activity';\n\n default:\n return 'N/A';\n }\n }\n};\n"],"mappings":"ybCeM,EAA4C,CAChD,MAAO,IACP,WAAY,EAAW,MACxB,CAED,SAAgB,EACd,EACA,EACA,EACQ,CACR,IAAM,EAAU,GAAgB,EAC1B,EAAY,EAAa,EAAS,CAGxC,GAAI,cAAe,GAAY,EAAS,WAAW,IACjD,OAAO,EAAY,UAAU,EAAS,WAAW,IAAK,CAAE,GAAG,EAAS,CAAC,CAEvE,IAAM,EAAa,EAAU,cAAc,EAAa,eAAe,CAkBvE,OAhBK,EAAiB,WAAW,EAAS,CAGtC,IAAc,EAAU,IACnB,EAAS,SAAS,OAAS,EAAiB,IACjD,EAAY,oBAAoB,EAAY,EAAS,IAAK,CAAE,GAAG,EAAS,CAAC,CACzE,EAAY,oBAAoB,EAAY,EAAS,KAAK,IAAK,CAAE,GAAG,EAAS,CAAC,CAG9E,EAAS,SAAS,OAAS,EAAiB,IAOzC,2BANE,EAAY,UACjB,EAAS,IACT,GAAgB,CAAE,KAAM,EAAU,OAAQ,WAAY,EAAW,MAAO,CACzE,CAZM,EAAY,oBAAoB,EAAY,EAAS,IAAK,CAAE,GAAG,EAAS,CAAC,CAkBpF,SAAS,EAAa,EAAsC,CAO1D,OANK,EAAiB,WAAW,EAAS,CAGtC,EAAS,SAAS,OAAS,EAAiB,KAAO,EAAS,KAAK,IAC5D,EAAU,IAEZ,EAAU,WALR,EAAU,KAgBrB,SAAgB,EAAkB,EAA4C,CAC5E,IAAI,EAAW,KACX,EAAW,EASf,OAPI,EAAiB,WAAW,EAAM,SAAS,GAC7C,EAAW,EAAM,SAAS,SAC1B,EAAW,EAAM,SAAS,WAAW,UAAU,UAAY,IAM3D,EAAA,EAAA,KAAC,EAAD,CACE,KAJiB,EAAgB,EAAM,YAAa,EAAM,SAAU,EAAM,yBAAyB,CAKnG,UAAW,EAAa,EAAM,SAAS,CACvC,WAAY,CAAE,UAAW,UAAU,EAAS,MAAO,CACnD,IAAK,EAAM,SAAS,KACpB,sBAAuB,EAAM,sBAC7B,4BAA6B,EAAO,cACpC,eAAgB,GAAU,OAAS,EAAiB,MAAQ,GAAG,EAAO,kBAAkB,GAAG,EAAO,aAAe,GACjH,QAAS,EAAM,aACf,YAAa,CAAC,EAAM,aAEV,CAAA,CC5FhB,IAAa,EAAiB,CAC5B,oBAAoB,EAAoC,CACtD,OAAQ,EAAR,CACE,IAAK,uBACH,MAAO,uBAET,IAAK,aACH,MAAO,aAET,IAAK,eACH,MAAO,eAET,IAAK,mBACH,MAAO,mBAET,QACE,MAAO,QAGd"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{n as e,t}from"./CFXUbsBS.chunk.js";import{t as n}from"./B7tm2CBz.chunk.js";import{t as r}from"./XBXkyvJG.chunk.js";import{d as i}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{n as e,t}from"./CFXUbsBS.chunk.js";import{t as n}from"./B7tm2CBz.chunk.js";import{t as r}from"./XBXkyvJG.chunk.js";import{d as i}from"./app-gjHxcZG3.js";var a=new Date(`2023-01-01`),o=12;function s(e){let n=t.daysInMonth(e),r=[];for(let i=1;i<=n;i++){let n=t.set(e,`date`,i);r.push(Object.assign(n,{notCurrentMonth:!1}))}return r}function c(e,n){let r=t.startOf(e,`month`),i=t.getWeekday(r),a=[],o=n?i===0?6:i-1:i;for(let e=n?1:0;e<=o;e++){let n=r,o=t.weekday(n,i-e);a.push(Object.assign(o,{notCurrentMonth:!0}))}return a.reverse()}function l(e,n){let r=t.endOf(e,`month`),i=t.getWeekday(r),a=[],o=n?7-(i===0?7:i):7-i;for(let e=1;e<=o;e+=1){let n=t.add(r,e,`days`);a.push(Object.assign(n,{notCurrentMonth:!0}))}return a}function u(e){let n=e?[1,2,3,4,5,6,0]:[0,1,2,3,4,5,6],r=new Date;return n.map(e=>t.format(t.weekday(r,e),`ddd`))}function d(e,n){let r=[],i={},a=c(e,n).concat(s(e)).concat(l(e,n));for(let e=0,n=0;e<a.length;e+=7){let o=a.slice(e,e+7);o.forEach((e,r)=>{i[t.format(e,`YYYY-MM-DD`)]={row:n,col:r}}),r.push(o),n++}return{datePositionMap:i,weeksTable:r}}function f(e){let r=t.startOf(e,`month`);return t.getWeekday(r)===1?r:n.first(c(e,!0))}function p(e){let r=t.endOf(e,`month`);return t.getWeekday(r)===0?r:n.last(l(e,!0))}function m(e){return[f(e),p(e)]}function h(e){return e.charAt(0).toUpperCase()+e.slice(1)}function g(e){if(!e)return!0;let n=h(e);if(!t.formatIsValid(n,`MMMM-YYYY`,!0))return!1;let r=t.parseDateString(n,`MMMM-YYYY`);return t.isSame(r,a,`month`)||t.isAfter(r,a,`month`)}var _=new Date;function v(e){let n=t.diffBetween(t.startOf(e,`month`),t.startOf(_,`month`),`months`);return{showPrev:t.isAfter(e,a,`month`),showNext:n<o}}function y(e){if(!e)return t.parseDateString();let n=h(e);return t.parseDateString(n,`MMMM-YYYY`)}function b(e){let t=new Set;return e.filter(e=>t.has(e.specialEventId)?!1:(t.add(e.specialEventId),!0))}var x={getDisplayDate(n,a){return a?n.slice(5,7)===a.slice(5,7)?e.getCurrentRegion()===i[r.US]?`${t.format(n,`MMM`)} ${t.format(n,`D`)} - ${t.format(a,`D`)}`:`${t.format(n,`D`)} - ${t.format(a,`D`)} ${t.format(n,`MMM`)}`:`${t.format(n,`D MMM`)} - ${t.format(a,`D MMM`)}`:t.format(n,`D MMM`)},getEventsInMonth(e,n){return e.filter(e=>t.format(e.startDate,`YYYY-MM`)===t.format(n,`YYYY-MM`))},getOrdinalDate(e){return`${t.getLocalDateOrdinal(t.get(e,`date`))} ${t.format(e,`MMMM`)}`},isEventFromPreviousMonth(e,n){return e.endDate?t.format(e.startDate,`YYYY-MM`)<t.format(n,`YYYY-MM`)&&e.endDate>=t.format(n,`YYYY-MM-DD`):!1},getEventsForDay(e,n,r=[],i){let a=n.filter(n=>t.isSame(e,n.startDate))||[];return t.isSame(f(i),e,`day`)?b([...a,...r]):a},getCrossMonthEventsForDate(e,n,r){return t.isSame(f(r),e,`day`)?n.filter(n=>{let r=x.isEventFromPreviousMonth(n,e),i=t.isSame(e,n.startDate);return r&&!i}):[]},getAllEventsForDate(e,n,r){let i=t.format(e,`YYYY-MM-DD`),a=n.filter(e=>e.startDate===i),o=x.getCrossMonthEventsForDate(e,n,r);return b([...a,...o])}};export{g as a,m as i,d as n,u as o,v as r,y as s,x as t};
|
|
2
|
+
//# sourceMappingURL=iyIL3kim2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dd8r1SE32.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/utils/CalendarHelper.ts","../../../../libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts"],"sourcesContent":["/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean };\nexport type WeeksTable = PatchedDate[][];\nexport type DatePositionMap = Record<string, { row: number, col: number }>;\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nexport function getFirstCellInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastCellInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstCellInCalendar(monthDate), getLastCellInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { RegionDateFormatHelper } from 'libs/common/react/utils/RegionDateFormatHelper';\n\nimport { getFirstCellInCalendar } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { COMMON_REGION_MAP } from 'libs/shared/constants/CommonRegionMap';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nfunction deduplicateEvents(events: CalendarEvent<CalendarEventContent>[]): CalendarEvent<CalendarEventContent>[] {\n const seen = new Set<string>();\n return events.filter(event => {\n if (seen.has(event.specialEventId)) {\n return false;\n }\n seen.add(event.specialEventId);\n return true;\n });\n}\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n // same month event\n\n if (RegionDateFormatHelper.getCurrentRegion() === COMMON_REGION_MAP[InstanceRegion.US])\n return `${DateHelper.format(startDate, 'MMM')} ${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')}`;\n\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n },\n\n isEventFromPreviousMonth(event: CalendarEvent<CalendarEventContent>, month: Date): boolean {\n if (!event.endDate) return false;\n\n const eventStartMonth = DateHelper.format(event.startDate, 'YYYY-MM');\n const targetMonth = DateHelper.format(month, 'YYYY-MM');\n\n return eventStartMonth < targetMonth && event.endDate >= DateHelper.format(month, 'YYYY-MM-DD');\n },\n\n getEventsForDay(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n crossMonthEventsForFirstDay: CalendarEvent<CalendarEventContent>[] = [],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const eventsStartingOnDay = allEvents.filter(e => DateHelper.isSame(date, e.startDate)) || [];\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n\n if (isFirstCellOfCalendar) {\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEventsForFirstDay ]);\n }\n\n return eventsStartingOnDay;\n },\n\n getCrossMonthEventsForDate(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n if (!isFirstCellOfCalendar) return [];\n\n return allEvents.filter(e => {\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, date);\n // Only include if the event's start date is not the same as the target date\n const startDateIsSameDay = DateHelper.isSame(date, e.startDate);\n return isFromPreviousMonth && !startDateIsSameDay;\n });\n },\n\n getAllEventsForDate(\n date: Date,\n allEvents: CalendarEvent[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const dateStr = DateHelper.format(date, 'YYYY-MM-DD');\n const eventsStartingOnDay = allEvents.filter(e => e.startDate === dateStr);\n const crossMonthEvents = SpecialEventHelper.getCrossMonthEventsForDate(date, allEvents, monthDate);\n\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEvents ]);\n }\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"iyIL3kim2.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/calendar/utils/CalendarHelper.ts","../../../../libs/shared/src/apps/calendar/utils/SpecialEventHelper.ts"],"sourcesContent":["/**\n * Inspired by nghilevi/moment-calendar-2\n */\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nexport type PatchedDate = Date & { notCurrentMonth: boolean };\nexport type WeeksTable = PatchedDate[][];\nexport type DatePositionMap = Record<string, { row: number, col: number }>;\n\nconst CALENDAR_START_DATE = new Date('2023-01-01');\nconst NEXT_MONTH_LIMIT = 12; // in month\n\nfunction getDaysOfMonth(date: Date): PatchedDate[] {\n const numberOfDays = DateHelper.daysInMonth(date);\n\n const daysArray = [];\n\n for (let i = 1; i <= numberOfDays; i++) {\n const day = DateHelper.set(date, 'date', i);\n daysArray.push(Object.assign(day, { notCurrentMonth: false }));\n }\n\n return daysArray;\n}\n\n// Get days from previous month overlapping current month\nfunction getPreviousMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const firstDay = DateHelper.startOf(date, 'month');\n const firstWeekDay = DateHelper.getWeekday(firstDay);\n const prevMonthDays = [];\n const prevMonthDaysCount = startAtMon ? firstWeekDay === 0 ? 6 : firstWeekDay - 1 : firstWeekDay;\n\n for (let i = startAtMon ? 1 : 0; i <= prevMonthDaysCount; i++) {\n const originalDay = firstDay;\n const preDay = DateHelper.weekday(originalDay, firstWeekDay - i);\n prevMonthDays.push(Object.assign(preDay, { notCurrentMonth: true }));\n }\n\n return prevMonthDays.reverse();\n}\n\n// Get days from previous month overlapping current month\nfunction getNextMonthOverlappingDays(date: Date, startAtMon: boolean): PatchedDate[] {\n const lastDay = DateHelper.endOf(date, 'month');\n const lastWeekDay = DateHelper.getWeekday(lastDay);\n const nextMonthDays = [];\n const nextMonthDaysCount = startAtMon ? 7 - (lastWeekDay === 0 ? 7 : lastWeekDay) : 7 - lastWeekDay;\n\n for (let i = 1; i <= nextMonthDaysCount; i += 1) {\n const nextDay = DateHelper.add(lastDay, i, 'days');\n nextMonthDays.push(Object.assign(nextDay, { notCurrentMonth: true }));\n }\n\n return nextMonthDays;\n}\n\nexport function initWeekDays(startAtMon: boolean): string[] {\n const weekdays = startAtMon ? [ 1, 2, 3, 4, 5, 6, 0 ] : [ 0, 1, 2, 3, 4, 5, 6 ];\n const date = new Date();\n return weekdays.map(w => DateHelper.format(DateHelper.weekday(date, w), 'ddd'));\n}\n\nexport function buildWeeksTable(date: Date, startAtMon: boolean) {\n const weeksTable: WeeksTable = [];\n const datePositionMap: DatePositionMap = {};\n\n const monthDays = getPreviousMonthOverlappingDays(date, startAtMon)\n .concat(getDaysOfMonth(date))\n .concat(getNextMonthOverlappingDays(date, startAtMon));\n\n for (let j = 0, rowId = 0; j < monthDays.length; j = j + 7) {\n const week = monthDays.slice(j, j + 7);\n week.forEach((day, colId) => {\n datePositionMap[DateHelper.format(day, 'YYYY-MM-DD')] = { row: rowId, col: colId };\n });\n\n weeksTable.push(week);\n rowId++;\n }\n\n return {\n datePositionMap,\n weeksTable\n };\n}\n\nexport function getFirstCellInCalendar(monthDate: Date) {\n const firstDayOfMonth = DateHelper.startOf(monthDate, 'month');\n if (DateHelper.getWeekday(firstDayOfMonth) === 1) {\n return firstDayOfMonth;\n }\n return ArrayHelper.first(getPreviousMonthOverlappingDays(monthDate, true));\n}\n\nfunction getLastCellInCalendar(monthDate: Date) {\n const lastDayOfMonth = DateHelper.endOf(monthDate, 'month');\n if (DateHelper.getWeekday(lastDayOfMonth) === 0) {\n return lastDayOfMonth;\n }\n return ArrayHelper.last(getNextMonthOverlappingDays(monthDate, true));\n}\n\nexport function getCalendarRange(monthDate: Date) {\n return [ getFirstCellInCalendar(monthDate), getLastCellInCalendar(monthDate) ];\n}\n\nfunction capitalizeMonthString(monthStr: string) {\n return monthStr.charAt(0).toUpperCase() + monthStr.slice(1);\n}\n\nexport function getIsValidMonth(monthDateString: string) {\n if (!monthDateString)\n return true;\n const capitalized = capitalizeMonthString(monthDateString);\n const isValidMonthString = DateHelper.formatIsValid(capitalized, 'MMMM-YYYY', true);\n\n if (!isValidMonthString)\n return false;\n\n const monthDate = DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n\n return DateHelper.isSame(monthDate, CALENDAR_START_DATE, 'month') || DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n}\n\nconst CUR_DATE = new Date();\nexport function canNavToOtherMonths(monthDate: Date) {\n const monthDiff = DateHelper.diffBetween(DateHelper.startOf(monthDate, 'month'), DateHelper.startOf(CUR_DATE, 'month'), 'months');\n const showPrev = DateHelper.isAfter(monthDate, CALENDAR_START_DATE, 'month');\n const showNext = monthDiff < NEXT_MONTH_LIMIT;\n return { showPrev, showNext };\n}\n\nexport function parseMonthString(monthStr: string) {\n if (!monthStr)\n return DateHelper.parseDateString();\n\n const capitalized = capitalizeMonthString(monthStr);\n return DateHelper.parseDateString(capitalized, 'MMMM-YYYY');\n}\n","import { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { RegionDateFormatHelper } from 'libs/common/react/utils/RegionDateFormatHelper';\n\nimport { getFirstCellInCalendar } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { COMMON_REGION_MAP } from 'libs/shared/constants/CommonRegionMap';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nfunction deduplicateEvents(events: CalendarEvent<CalendarEventContent>[]): CalendarEvent<CalendarEventContent>[] {\n const seen = new Set<string>();\n return events.filter(event => {\n if (seen.has(event.specialEventId)) {\n return false;\n }\n seen.add(event.specialEventId);\n return true;\n });\n}\n\nexport const SpecialEventHelper = {\n getDisplayDate(startDate: string, endDate: string): string {\n if (!endDate)\n // one day event\n return DateHelper.format(startDate, 'D MMM');\n\n if (startDate.slice(5, 7) !== endDate.slice(5, 7))\n // span across months\n return `${DateHelper.format(startDate, 'D MMM')} - ${DateHelper.format(endDate, 'D MMM')}`;\n // same month event\n\n if (RegionDateFormatHelper.getCurrentRegion() === COMMON_REGION_MAP[InstanceRegion.US])\n return `${DateHelper.format(startDate, 'MMM')} ${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')}`;\n\n return `${DateHelper.format(startDate, 'D')} - ${DateHelper.format(endDate, 'D')} ${DateHelper.format(startDate, 'MMM')}`;\n },\n\n getEventsInMonth(calendarEvents: CalendarEvent[], month: Date) {\n return calendarEvents.filter(e => DateHelper.format(e.startDate, 'YYYY-MM') === DateHelper.format(month, 'YYYY-MM'));\n },\n\n getOrdinalDate(date: string): string {\n return `${DateHelper.getLocalDateOrdinal(DateHelper.get(date, 'date'))} ${DateHelper.format(date, 'MMMM')}`;\n },\n\n isEventFromPreviousMonth(event: CalendarEvent<CalendarEventContent>, month: Date): boolean {\n if (!event.endDate) return false;\n\n const eventStartMonth = DateHelper.format(event.startDate, 'YYYY-MM');\n const targetMonth = DateHelper.format(month, 'YYYY-MM');\n\n return eventStartMonth < targetMonth && event.endDate >= DateHelper.format(month, 'YYYY-MM-DD');\n },\n\n getEventsForDay(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n crossMonthEventsForFirstDay: CalendarEvent<CalendarEventContent>[] = [],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const eventsStartingOnDay = allEvents.filter(e => DateHelper.isSame(date, e.startDate)) || [];\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n\n if (isFirstCellOfCalendar) {\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEventsForFirstDay ]);\n }\n\n return eventsStartingOnDay;\n },\n\n getCrossMonthEventsForDate(\n date: Date,\n allEvents: CalendarEvent<CalendarEventContent>[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const isFirstCellOfCalendar = DateHelper.isSame(getFirstCellInCalendar(monthDate), date, 'day');\n if (!isFirstCellOfCalendar) return [];\n\n return allEvents.filter(e => {\n const isFromPreviousMonth = SpecialEventHelper.isEventFromPreviousMonth(e, date);\n // Only include if the event's start date is not the same as the target date\n const startDateIsSameDay = DateHelper.isSame(date, e.startDate);\n return isFromPreviousMonth && !startDateIsSameDay;\n });\n },\n\n getAllEventsForDate(\n date: Date,\n allEvents: CalendarEvent[],\n monthDate: Date\n ): CalendarEvent<CalendarEventContent>[] {\n const dateStr = DateHelper.format(date, 'YYYY-MM-DD');\n const eventsStartingOnDay = allEvents.filter(e => e.startDate === dateStr);\n const crossMonthEvents = SpecialEventHelper.getCrossMonthEventsForDate(date, allEvents, monthDate);\n\n return deduplicateEvents([ ...eventsStartingOnDay, ...crossMonthEvents ]);\n }\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{gt as e}from"./Dp9qJj1C.chunk.js";import{t,v as n}from"./BJvPfCvt.chunk.js";import{t as r}from"./ImQRQGZr.chunk.js";import{c as i,lt as a,m as o,ut as s}from"./Dun43GrB.chunk.js";import{t as c}from"./B20k2DA32.chunk.js";import{t as l}from"./Ca1QPe-q2.chunk.js";import{n as u,t as d}from"./B8R4YVaF2.chunk.js";import{i as f}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{gt as e}from"./Dp9qJj1C.chunk.js";import{t,v as n}from"./BJvPfCvt.chunk.js";import{t as r}from"./ImQRQGZr.chunk.js";import{c as i,lt as a,m as o,ut as s}from"./Dun43GrB.chunk.js";import{t as c}from"./B20k2DA32.chunk.js";import{t as l}from"./Ca1QPe-q2.chunk.js";import{n as u,t as d}from"./B8R4YVaF2.chunk.js";import{i as f}from"./app-gjHxcZG3.js";var p=e(s()),m=a();function h(e){return(0,m.jsx)(`svg`,{...e,children:(0,m.jsx)(`path`,{d:`m13.026 4.377 8.5 14A1.2 1.2 0 0 1 20.5 20.2h-17a1.2 1.2 0 0 1-1.026-1.823l8.5-14a1.2 1.2 0 0 1 2.052 0M12 5 3.5 19h17zm0 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2m.75-3.677a.69.69 0 0 1-.7.677.69.69 0 0 1-.7-.677V8.677c0-.374.313-.677.7-.677s.7.303.7.677z`,fill:`currentColor`})})}var g={widgetTextButton:`_widgetTextButton_em1zx_1`},_=r.encloseNamespace(`shared.widgetHeader`);function v(e){return(0,m.jsx)(`div`,{className:`ms-3 ${g.widgetTextButton}`,children:(0,m.jsx)(l,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:{location:o.SlidingList,...e.analyticsOptions,descriptor:i.SeeMore},className:`text-decoration-none ${e.appLink?`curated-widget-link`:``}`,children:(0,m.jsx)(`p`,{className:`hover-text-underline text-dark curated-widget-heading`,children:_(`seeAll`)})})})}function y(e){return(0,m.jsx)(`div`,{className:`ms-3 ${g.widgetTextButton} text-decoration-none cursor-pointer`,onClick:e.onClose,children:(0,m.jsx)(`p`,{className:`hover-text-underline text-dark curated-widget-heading`,children:_(`hide`)})})}function b(e){return(0,m.jsx)(`div`,{className:`ms-3 ${g.widgetTextButton} text-decoration-none`,children:e.showFollowSpinner?(0,m.jsx)(c,{as:`span`,animation:`border`,role:`status`,size:`sm`}):(0,m.jsx)(`p`,{className:`hover-text-underline text-dark curated-widget-heading cursor-pointer`,onClick:()=>e.onFollow(!e.isFollowing),children:_(e.isFollowing?`unfollow`:`follow`)})})}function x(e){let r=!!e.description;if(!e.name&&!e.description)return(0,m.jsx)(m.Fragment,{});let i=d.isBelowContentMinimum(e.content,e.widgetTypeId),a=u[e.widgetTypeId]?.minContent??0;return(0,m.jsxs)(`div`,{className:`curated-widget-header`,children:[(0,m.jsxs)(`div`,{className:`d-flex justify-content-between`,children:[!!e.name&&(0,m.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,m.jsx)(l,{appLink:e.appLink,analyticsData:e.analyticsData,className:`text-decoration-none ${e.appLink?`curated-widget-link text-reset`:``}`,onClick:e.onAppLinkClick,children:(0,m.jsxs)(`h2`,{className:`h4 curated-widget-heading`,children:[e.isPreviewing&&i&&(0,m.jsx)(t,{svg:h,title:`Widget is below the minimum content threshold of ${a} and won't be displayed.`,tooltipSpanHack:!0,tooltipSpanHackClassName:`d-inline text-danger me-1`}),e.name]})}),!!p.isValidElement(e.badgeComponent)&&e.badgeComponent]}),(0,m.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center gap-2`,children:[!!e.appLink&&!r&&!!e.showSeeMoreLink&&(0,m.jsx)(v,{...e}),n.isFunction(e.onFollow)&&(0,m.jsx)(b,{isFollowing:e.isFollowing,onFollow:e.onFollow,showFollowSpinner:e.showFollowSpinner}),n.isFunction(e.onClose)&&(0,m.jsx)(y,{onClose:e.onClose})]})]}),r&&(0,m.jsxs)(`div`,{className:`d-flex justify-content-between align-items-end`,children:[(0,m.jsx)(`p`,{className:`description curated-widget-description`,children:(0,m.jsx)(`span`,{children:e.description})}),!!e.appLink&&!!e.showSeeMoreLink&&(0,m.jsx)(v,{...e})]})]})}var S=400;function C(e){let{type:t,state:n,containerRef:r,mediaQuery:i}=e,[a,o]=p.useState(!1),[s,c]=p.useState({}),[l,u]=p.useState(null),d=p.useMemo(()=>f.isTouchScreen(),[]);p.useEffect(()=>{t!==`dynamic`||!r.current||!n.containerLeftPosition||d||setTimeout(()=>m(),S+50)},[r.current,i,n.offset,n.containerLeftPosition]);function m(){let e=n;r.current?.children&&c(Array.from(r.current.children).reduce((t,n)=>{let r=n?.getBoundingClientRect(),i=r.left<e.containerRightPosition&&r.right>e.containerLeftPosition;return{...t,[n.id]:i?{"aria-hidden":!1}:{"aria-hidden":!0,inert:`true`}}},{}))}function h(e){let t=n;return d||e>=t.offset-t.viewableItems&&e<t.offset?{"aria-hidden":!1}:{inert:`true`,"aria-hidden":!0}}function g(){setTimeout(()=>{if(!r.current)return;let e=r.current.querySelectorAll(`li[aria-hidden]`),t=null;for(let n=l+1;n<e.length&&!t;n++)t=e[n].querySelector(`a[tabindex="0"]`);t&&t.focus()},S+100)}function _(){setTimeout(()=>{if(!r.current)return;let e=r.current.querySelectorAll(`li[aria-hidden]`),t=null;for(let n=l-1;n>=0&&!t;n--)t=e[n].querySelector(`a[tabindex="0"]`);t&&t.focus()},S+100)}function v(e){document.querySelector(`.user-is-tabbing`)&&(o(!0),u(e))}function y(){document.querySelector(`.user-is-tabbing`)||(o(!1),u(null))}return{isTabbing:a,onFocusWidget:v,onBlurWidget:y,getFixedAttributes:h,dynamicAttributes:s,focusNext:g,focusPrev:_}}var w=function(e){return e.Percentage=`%`,e.Pixels=`px`,e}({}),T=new Image;T.src=`data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=`;var E={hideDragImage(e){!e.dataTransfer.setDragImage||!n.isFunction(e.dataTransfer.setDragImage)||e.dataTransfer.setDragImage(T,0,0)}},D=f.isTouchScreen(),O=(e,t,n)=>(t===w.Percentage&&n&&(e-=n),{transform:`translate3d(${e}${t}, 0px, 0px)`,transition:`transform .4s ease-in-out`}),k=p.forwardRef((e,t)=>{let{children:n,positionType:r,onDrag:i,onDragEnd:a,onTouchMove:o,onTouchEnd:s,percentageDragged:c,position:l=0}=e;function u(){let e={};return i&&a&&(e.draggable=!0,e.onDragEnd=a,e.onDragStart=E.hideDragImage,e.onDragOver=i),o&&s&&D&&(e.onTouchMoveCapture=o,e.onTouchEndCapture=s),e}return(0,m.jsx)(`ul`,{className:`list-unstyled d-flex flex-nowrap position-relative w-100 mb-0`,style:O(l,r,c),ref:t,...u(),children:n})}),A=function(e){return e.Init=`init`,e.Next=`next`,e.Previous=`previous`,e.Resize=`resize`,e.Drag=`drag`,e.Update=`update`,e.JumpToIndex=`jump-to-index`,e}({});export{x as a,C as i,k as n,w as r,A as t};
|
|
2
|
+
//# sourceMappingURL=kfFYr9dc.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BKbKu9Rp.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/status/WarningOutlineSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","../../../../libs/shared/src/components/widgets/hooks/useWidgetKeyboard.ts","../../../../libs/shared/src/enums/CssMeasurement.ts","../../../../libs/shared/src/utils/DragHelper.ts","../../../../libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","../../../../libs/shared/src/enums/WidgetInteraction.ts"],"sourcesContent":["import React from 'react';\n\nexport function WarningOutlineSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m13.026 4.377 8.5 14A1.2 1.2 0 0 1 20.5 20.2h-17a1.2 1.2 0 0 1-1.026-1.823l8.5-14a1.2 1.2 0 0 1 2.052 0M12 5 3.5 19h17zm0 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2m.75-3.677a.69.69 0 0 1-.7.677.69.69 0 0 1-.7-.677V8.677c0-.374.313-.677.7-.677s.7.303.7.677z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .widgetTextButton {\n margin-top: 0.1rem;\n flex-shrink: 0;\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WarningOutlineSvg } from 'libs/shared/images/svg/status/WarningOutlineSvg';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-header.module.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description?: string | JSX.Element;\n isPreviewing?: boolean;\n content?: any[];\n widgetTypeId?: WidgetTypeId;\n badgeComponent?: JSX.Element;\n\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n \n showSeeMoreLink?: boolean;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{\n location: LocationContext.SlidingList,\n ...props.analyticsOptions,\n descriptor: ClickDescriptor.SeeMore\n }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nfunction CloseWidgetButton(props: { onClose: () => void }) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none cursor-pointer`} onClick={props.onClose}>\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('hide')}</p>\n </div>\n );\n}\n\nfunction FollowWidgetButton(props: {\n isFollowing: boolean,\n onFollow: (shouldFollow: boolean) => void,\n showFollowSpinner: boolean\n}) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none`}>\n {\n props.showFollowSpinner ?\n <Spinner as='span' animation='border' role='status' size='sm' /> :\n <p className='hover-text-underline text-dark curated-widget-heading cursor-pointer' onClick={() => props.onFollow(!props.isFollowing)}>\n {getPhrase(props.isFollowing ? 'unfollow' : 'follow')}\n </p>\n }\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n const isBelowMinimum = WidgetHelper.isBelowContentMinimum(props.content, props.widgetTypeId);\n const minContent = WidgetTypeIdConfig[props.widgetTypeId]?.minContent ?? 0;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className='d-flex align-items-center'>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link text-reset' : ''}`}\n onClick={props.onAppLinkClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.isPreviewing && isBelowMinimum && (\n <SvgContainer\n svg={WarningOutlineSvg}\n title={`Widget is below the minimum content threshold of ${minContent} and won't be displayed.`}\n tooltipSpanHack\n tooltipSpanHackClassName='d-inline text-danger me-1'\n />\n )}\n {props.name}\n </h2>\n </AppLink>\n {!!React.isValidElement(props.badgeComponent) && props.badgeComponent}\n </div>\n )}\n <div className='d-flex justify-content-between align-items-center gap-2'>\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n {FunctionHelper.isFunction(props.onFollow) &&\n <FollowWidgetButton\n isFollowing={props.isFollowing}\n onFollow={props.onFollow}\n showFollowSpinner={props.showFollowSpinner}\n />\n }\n {FunctionHelper.isFunction(props.onClose) && <CloseWidgetButton onClose={props.onClose}/>}\n </div>\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className='description curated-widget-description'>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidgetState } from 'libs/shared/components/widgets/dynamic-widget';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\n\n// Sync with transition time in SlidingListContainer.tsx\nconst SLIDER_ANIMATION_TIME = 400;\n\ntype FixedWidgetKeyboardOptions = {\n type: 'fixed',\n state: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>,\n mediaQuery?: never\n};\n\ntype DynamicWidgetKeyboardOptions = {\n type: 'dynamic',\n state: DynamicWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>,\n mediaQuery: string\n};\n\ntype UseWidgetKeyboard = FixedWidgetKeyboardOptions | DynamicWidgetKeyboardOptions;\n\nexport function useWidgetKeyboard(options: UseWidgetKeyboard) {\n const { type, state, containerRef, mediaQuery } = options;\n\n const [ isTabbing, setIsTabbing ] = React.useState(false);\n const [ dynamicAttributes, setDynamicAttributes ] = React.useState<HashObject>({});\n const [ focusedWidgetIndex, setFocusedWidgetIndex ] = React.useState(null);\n\n const isTouch = React.useMemo(() => UserAgentHelper.isTouchScreen(), []);\n\n /**\n * Get accessibility attributes for dynamic widget items\n * */\n React.useEffect(() => {\n if (type !== 'dynamic' || !containerRef.current || !(state as DynamicWidgetState).containerLeftPosition || isTouch) return;\n\n setTimeout(() => getDynamicAttributes(), SLIDER_ANIMATION_TIME + 50);\n }, [\n containerRef.current,\n mediaQuery,\n (state as DynamicWidgetState).offset,\n (state as DynamicWidgetState).containerLeftPosition\n ]);\n\n function getDynamicAttributes() {\n const dynamicWidgetState = state as DynamicWidgetState;\n\n if (!containerRef.current?.children)\n return;\n\n const focusableItems = Array.from(containerRef.current.children).reduce((acc, item) => {\n const rect = item?.getBoundingClientRect();\n\n /**\n * When any part of the widget item is visible it should be focusable,\n * otherwise prevent interaction and the slider should be the next focusable element\n * */\n const isItemVisable =\n rect.left < dynamicWidgetState.containerRightPosition &&\n rect.right > dynamicWidgetState.containerLeftPosition;\n\n return {\n ...acc,\n [item.id]: isItemVisable ?\n {\n 'aria-hidden': false\n } : {\n 'aria-hidden': true,\n 'inert': 'true'\n }\n };\n }, {});\n\n setDynamicAttributes(focusableItems);\n }\n\n /**\n * Get accessibility attributes for fixed widget items\n * */\n function getFixedAttributes(index?: number) {\n const fixedWidgetState = state as FixedWidgetState;\n\n const isItemVisible =\n isTouch ||\n index >= (fixedWidgetState.offset - fixedWidgetState.viewableItems) &&\n index < fixedWidgetState.offset;\n if (isItemVisible) {\n return {\n 'aria-hidden': false\n };\n }\n\n return {\n 'inert': 'true',\n 'aria-hidden': true\n };\n }\n\n /**\n * When the user is not signed in, there may be videos which are not focusable.\n * setTimeout is required because the transition time is 400ms\n */\n function focusNext() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let nextFocusableElement: HTMLElement = null;\n\n for (let i = (focusedWidgetIndex + 1); i < items.length; i++) {\n if (nextFocusableElement)\n break;\n\n nextFocusableElement = items[i].querySelector('a[tabindex=\"0\"]');\n }\n\n if (nextFocusableElement)\n nextFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function focusPrev() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let prevFocusableElement: HTMLElement = null;\n for (let i = focusedWidgetIndex - 1; i >= 0; i--) {\n if (prevFocusableElement) break;\n\n const item = items[i];\n prevFocusableElement = item.querySelector('a[tabindex=\"0\"]');\n }\n\n if (prevFocusableElement)\n prevFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function onFocusWidget(index: number) {\n if (document.querySelector('.user-is-tabbing')) {\n setIsTabbing(true);\n setFocusedWidgetIndex(index);\n }\n }\n\n function onBlurWidget() {\n if (!document.querySelector('.user-is-tabbing')) {\n setIsTabbing(false);\n setFocusedWidgetIndex(null);\n }\n }\n\n return {\n isTabbing,\n onFocusWidget,\n onBlurWidget,\n getFixedAttributes,\n dynamicAttributes,\n focusNext,\n focusPrev\n };\n}\n","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};\n","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n \n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n // Sync with transition time in useWidgetKeyboard.ts\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLUListElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLUListElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLUListElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <ul\n className='list-unstyled d-flex flex-nowrap position-relative w-100 mb-0'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </ul>\n );\n});\n","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"kfFYr9dc.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/status/WarningOutlineSvg.tsx","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.module.scss","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","../../../../libs/shared/src/components/widgets/hooks/useWidgetKeyboard.ts","../../../../libs/shared/src/enums/CssMeasurement.ts","../../../../libs/shared/src/utils/DragHelper.ts","../../../../libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","../../../../libs/shared/src/enums/WidgetInteraction.ts"],"sourcesContent":["import React from 'react';\n\nexport function WarningOutlineSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m13.026 4.377 8.5 14A1.2 1.2 0 0 1 20.5 20.2h-17a1.2 1.2 0 0 1-1.026-1.823l8.5-14a1.2 1.2 0 0 1 2.052 0M12 5 3.5 19h17zm0 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2m.75-3.677a.69.69 0 0 1-.7.677.69.69 0 0 1-.7-.677V8.677c0-.374.313-.677.7-.677s.7.303.7.677z'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n .widgetTextButton {\n margin-top: 0.1rem;\n flex-shrink: 0;\n }\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WarningOutlineSvg } from 'libs/shared/images/svg/status/WarningOutlineSvg';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-header.module.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description?: string | JSX.Element;\n isPreviewing?: boolean;\n content?: any[];\n widgetTypeId?: WidgetTypeId;\n badgeComponent?: JSX.Element;\n\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n \n showSeeMoreLink?: boolean;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{\n location: LocationContext.SlidingList,\n ...props.analyticsOptions,\n descriptor: ClickDescriptor.SeeMore\n }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nfunction CloseWidgetButton(props: { onClose: () => void }) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none cursor-pointer`} onClick={props.onClose}>\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('hide')}</p>\n </div>\n );\n}\n\nfunction FollowWidgetButton(props: {\n isFollowing: boolean,\n onFollow: (shouldFollow: boolean) => void,\n showFollowSpinner: boolean\n}) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none`}>\n {\n props.showFollowSpinner ?\n <Spinner as='span' animation='border' role='status' size='sm' /> :\n <p className='hover-text-underline text-dark curated-widget-heading cursor-pointer' onClick={() => props.onFollow(!props.isFollowing)}>\n {getPhrase(props.isFollowing ? 'unfollow' : 'follow')}\n </p>\n }\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n const isBelowMinimum = WidgetHelper.isBelowContentMinimum(props.content, props.widgetTypeId);\n const minContent = WidgetTypeIdConfig[props.widgetTypeId]?.minContent ?? 0;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className='d-flex align-items-center'>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link text-reset' : ''}`}\n onClick={props.onAppLinkClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.isPreviewing && isBelowMinimum && (\n <SvgContainer\n svg={WarningOutlineSvg}\n title={`Widget is below the minimum content threshold of ${minContent} and won't be displayed.`}\n tooltipSpanHack\n tooltipSpanHackClassName='d-inline text-danger me-1'\n />\n )}\n {props.name}\n </h2>\n </AppLink>\n {!!React.isValidElement(props.badgeComponent) && props.badgeComponent}\n </div>\n )}\n <div className='d-flex justify-content-between align-items-center gap-2'>\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n {FunctionHelper.isFunction(props.onFollow) &&\n <FollowWidgetButton\n isFollowing={props.isFollowing}\n onFollow={props.onFollow}\n showFollowSpinner={props.showFollowSpinner}\n />\n }\n {FunctionHelper.isFunction(props.onClose) && <CloseWidgetButton onClose={props.onClose}/>}\n </div>\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className='description curated-widget-description'>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DynamicWidgetState } from 'libs/shared/components/widgets/dynamic-widget';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\n\n// Sync with transition time in SlidingListContainer.tsx\nconst SLIDER_ANIMATION_TIME = 400;\n\ntype FixedWidgetKeyboardOptions = {\n type: 'fixed',\n state: FixedWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>,\n mediaQuery?: never\n};\n\ntype DynamicWidgetKeyboardOptions = {\n type: 'dynamic',\n state: DynamicWidgetState,\n containerRef: React.MutableRefObject<HTMLElement>,\n mediaQuery: string\n};\n\ntype UseWidgetKeyboard = FixedWidgetKeyboardOptions | DynamicWidgetKeyboardOptions;\n\nexport function useWidgetKeyboard(options: UseWidgetKeyboard) {\n const { type, state, containerRef, mediaQuery } = options;\n\n const [ isTabbing, setIsTabbing ] = React.useState(false);\n const [ dynamicAttributes, setDynamicAttributes ] = React.useState<HashObject>({});\n const [ focusedWidgetIndex, setFocusedWidgetIndex ] = React.useState(null);\n\n const isTouch = React.useMemo(() => UserAgentHelper.isTouchScreen(), []);\n\n /**\n * Get accessibility attributes for dynamic widget items\n * */\n React.useEffect(() => {\n if (type !== 'dynamic' || !containerRef.current || !(state as DynamicWidgetState).containerLeftPosition || isTouch) return;\n\n setTimeout(() => getDynamicAttributes(), SLIDER_ANIMATION_TIME + 50);\n }, [\n containerRef.current,\n mediaQuery,\n (state as DynamicWidgetState).offset,\n (state as DynamicWidgetState).containerLeftPosition\n ]);\n\n function getDynamicAttributes() {\n const dynamicWidgetState = state as DynamicWidgetState;\n\n if (!containerRef.current?.children)\n return;\n\n const focusableItems = Array.from(containerRef.current.children).reduce((acc, item) => {\n const rect = item?.getBoundingClientRect();\n\n /**\n * When any part of the widget item is visible it should be focusable,\n * otherwise prevent interaction and the slider should be the next focusable element\n * */\n const isItemVisable =\n rect.left < dynamicWidgetState.containerRightPosition &&\n rect.right > dynamicWidgetState.containerLeftPosition;\n\n return {\n ...acc,\n [item.id]: isItemVisable ?\n {\n 'aria-hidden': false\n } : {\n 'aria-hidden': true,\n 'inert': 'true'\n }\n };\n }, {});\n\n setDynamicAttributes(focusableItems);\n }\n\n /**\n * Get accessibility attributes for fixed widget items\n * */\n function getFixedAttributes(index?: number) {\n const fixedWidgetState = state as FixedWidgetState;\n\n const isItemVisible =\n isTouch ||\n index >= (fixedWidgetState.offset - fixedWidgetState.viewableItems) &&\n index < fixedWidgetState.offset;\n if (isItemVisible) {\n return {\n 'aria-hidden': false\n };\n }\n\n return {\n 'inert': 'true',\n 'aria-hidden': true\n };\n }\n\n /**\n * When the user is not signed in, there may be videos which are not focusable.\n * setTimeout is required because the transition time is 400ms\n */\n function focusNext() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let nextFocusableElement: HTMLElement = null;\n\n for (let i = (focusedWidgetIndex + 1); i < items.length; i++) {\n if (nextFocusableElement)\n break;\n\n nextFocusableElement = items[i].querySelector('a[tabindex=\"0\"]');\n }\n\n if (nextFocusableElement)\n nextFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function focusPrev() {\n setTimeout(() => {\n if (!containerRef.current)\n return;\n\n const items = containerRef.current.querySelectorAll('li[aria-hidden]');\n\n let prevFocusableElement: HTMLElement = null;\n for (let i = focusedWidgetIndex - 1; i >= 0; i--) {\n if (prevFocusableElement) break;\n\n const item = items[i];\n prevFocusableElement = item.querySelector('a[tabindex=\"0\"]');\n }\n\n if (prevFocusableElement)\n prevFocusableElement.focus();\n }, SLIDER_ANIMATION_TIME + 100);\n }\n\n function onFocusWidget(index: number) {\n if (document.querySelector('.user-is-tabbing')) {\n setIsTabbing(true);\n setFocusedWidgetIndex(index);\n }\n }\n\n function onBlurWidget() {\n if (!document.querySelector('.user-is-tabbing')) {\n setIsTabbing(false);\n setFocusedWidgetIndex(null);\n }\n }\n\n return {\n isTabbing,\n onFocusWidget,\n onBlurWidget,\n getFixedAttributes,\n dynamicAttributes,\n focusNext,\n focusPrev\n };\n}\n","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}\n","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};\n","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n \n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n // Sync with transition time in useWidgetKeyboard.ts\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLUListElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLUListElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLUListElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <ul\n className='list-unstyled d-flex flex-nowrap position-relative w-100 mb-0'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </ul>\n );\n});\n","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\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=
|
|
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-gjHxcZG3.js";import{t as N}from"./BlQ4coEt.chunk.js";import{a as P,i as me,r as he,t as F}from"./wOeN2ls0.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"./DLofRa642.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"./D8g6nOG92.chunk.js";import{t as Pe}from"./Dql-1E6g2.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=kts5xiiM2.chunk.js.map
|