@clickview/lite 0.48.1 → 0.48.3

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.
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[823],{53364:(e,t,n)=>{n.d(t,{b:()=>m});var r=n(32735),a=n(72688),i=n(99504),o=n(86664);const l={idpButton:"FDoJA",idpImage:"bjN_j",divider:"FfyN0"};var c=[{name:"ClassLink",logoUrl:"https://img.clickviewapp.com/v2/logos/ZA2ew5",url:"/login?idp=classlink"},{name:"Clever",logoUrl:"https://img.clickviewapp.com/v2/logos/LqlKgd",url:"/login?idp=clever"},{name:"Google",logoUrl:"https://img.clickviewapp.com/v2/logos/l5x0jL",url:"/login?idp=google"},{name:"Microsoft",logoUrl:"https://img.clickviewapp.com/v2/logos/xAxGPP",url:"/login?idp=microsoft"}],s=[];function u(e){var t=e.idp,n=e.last;return r.createElement("button",{className:"btn btn-lg btn-outline-dark w-100 ".concat(n?"":"mb-3"," ").concat(l.idpButton),onClick:function(){if(e.onClick)e.onClick(t);else{var n=window.location.pathname+window.location.search,r=JSON.stringify(function(){var e={},t=a.N.getEncodedAttributionData();t&&(e.r=t);var n=i.F.getUtmParameters();return n&&(e.utms=n),e}());window.location.href=t.url+"&redirectUrl="+encodeURIComponent(n)+"&attribution="+encodeURIComponent(r)}}},t.logoUrl&&r.createElement("img",{src:t.logoUrl,className:l.idpImage}),"Continue with ",t.name)}function m(e){var t,n,a="idps"in e?e.idps:null;return!(null==a?void 0:a.length)&&"geoLocation"in e&&(a=[].concat(s),o.I.isCountryCodeUS(null===(t=e.geoLocation)||void 0===t?void 0:t.countryCode)&&(n=a).unshift.apply(n,c)),a.length?r.createElement("div",{className:"".concat(e.className?e.className:"")},r.createElement("div",{className:"my-3 border-bottom position-relative ".concat(l.divider)}),a.map((function(t,n){return r.createElement(u,{idp:t,key:n,onClick:"onClick"in e?e.onClick:null})}))):r.createElement(r.Fragment,null)}},19623:(e,t,n)=>{n.d(t,{P:()=>p});var r=n(32735),a=n(81886),i=n(23481),o=n(53364),l=n(36848),c=n(83345),s=n(14070),u=n(97291),m="launchpad.signInButtons",d=i.T.encloseNamespace(m);function p(e){r.useEffect((function(){e.skipPrompt&&a.Q.Ab.PageLoad(a.Q.C$.getHref(t))}),[]);var t=function(){var t=a.Q.Ab.GetQuery(),n={};if(e.customerId&&(n.customerId=e.customerId,delete t.customerId),e.skipPrompt&&delete t.skipPrompt,e.redirectUrl)n.redirectUrl=e.redirectUrl;else{var r=a.Q.Ab.SerializeQueryParams(t);n.redirectUrl=a.Q.Ab.GetCurrentPath()+(r?"?"+r:"")}return e.showSignUp&&(n.showSignUp=!0),{application:u.O.DEFAULT,action:s.e.Default.LOG_IN,params:n}}();return r.createElement(r.Fragment,null,r.createElement(l.F,{className:"btn btn-lg btn-dark w-100 mt-4",appLink:t},r.createElement(c.x,{namespace:m,phrase:e.pageAppLinkString?"signInToWatch":"signIn"})),e.showJoinCode?r.createElement(l.F,{className:"btn btn-link info-link btn-lg w-100 mt-2",appLink:{application:u.O.LAUNCHPAD,action:s.e.Launchpad.JOIN_CLASSROOM_PROMPT}},d("enterCode")):r.createElement(r.Fragment,null,r.createElement(l.F,{className:"btn btn-lg btn-outline-dark w-100 mt-3",appLink:{application:u.O.LAUNCHPAD,action:s.e.SignUp.SIGN_UP,params:{pageAppLinkString:e.pageAppLinkString}}},d("signUp")),r.createElement(o.b,{geoLocation:e.geoLocation})))}},30823:(e,t,n)=>{n.r(t),n.d(t,{LoginLandingView:()=>E});var r=n(32735),a=n(23481),i=n(20354),o=n(65858),l=n(2786),c=n(11882),s=n(4594),u=n(43012),m=n(20768),d=n(1575),p=n(31908),g=n(83421),f=n(7179),v=n(19623),b=n(17762),h=n(408);const y={logo:"Je2Pi",formContainer:"MfLVl"};var k=a.T.encloseNamespace("classrooms.loginLanding");function E(e){var t,n,a,E,C,w,L=(0,b.M)(),U=(0,f.P)({id:e.objectId,app:(0,f.e)(e.objectType)},o.LZ.Launchpad),A=U.deepLink,N=U.showDeepLink,I=U.onClickDeepLink,S=(0,h.B)().trialAppLinkString,P=(C=e.objectId,w=e.objectType,i.a.useBasicFetch(function(){switch(w){case s.E.Video:return d.R.publicVideo(C);case s.E.Interactive:return m.b.publicInteractiveMetadata(C);case s.E.Clip:return u.e.publicClip(C);default:return null}}()));return e.skipPrompt||P.isFetching?r.createElement(r.Fragment,null):r.createElement(g.Z,{title:null===(t=P.data)||void 0===t?void 0:t.name,imageUrl:null===(n=p.M.getThumbnail(P.data))||void 0===n?void 0:n.url,objectType:e.objectType,links:[{text:k("openInApp"),url:A,hide:!N,onClick:I}]},r.createElement("div",{className:"".concat(y.formContainer," m-auto")},r.createElement("div",{className:"".concat(y.logo," mb-4 mx-auto")},r.createElement(l.$S,null)),!!(null===(a=P.data)||void 0===a?void 0:a.name)&&r.createElement("h1",{className:"h3"},p.M.isVideo(P.data)&&r.createElement(c.$,{type:"series",video:P.data,analyticsOptions:{},size:"sm"}),P.data.name),(null===(E=P.data)||void 0===E?void 0:E.description)&&r.createElement("p",{className:"mb-0 clamp-3"},P.data.description),r.createElement(v.P,{geoLocation:L,customerId:e.customerId,skipPrompt:e.skipPrompt,showJoinCode:e.showJoinCode,redirectUrl:null,pageAppLinkString:S,showSignUp:e.showSignUp})))}},17762:(e,t,n)=>{n.d(t,{M:()=>l});var r=n(39202),a=n(20354),i=n(39151),o={countryCode:"us",isFallback:!0};function l(){var e,t,n=a.a.useBasicFetch(i.L.geoLocation()),l=null===(t=null===(e=r.Ab.GetQuery())||void 0===e?void 0:e.countryCode)||void 0===t?void 0:t.toLowerCase();return l?{countryCode:l}:n.hasCompleted&&!n.data?o:n.data}},408:(e,t,n)=>{n.d(t,{B:()=>o});var r=n(2948),a=n(86702);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function o(){var e,t,n=(e=(0,r.D)(a.y.OPEN_IN_APP_DATA),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return{trialAppLinkString:function(){if(n&&["videos","clips","series","playlists","topics","interactives"].includes(n.app)){var e=n.id;switch(n.app){case"videos":return"video:".concat(e);case"playlists":return"playlist:".concat(e);case"series":return"series:".concat(e);case"topics":return"topic:".concat(e);case"interactives":return"interactive:".concat(e);case"clips":return"clip:".concat(e)}}}()}}},83421:(e,t,n)=>{n.d(t,{Z:()=>p});var r=n(32735),a=n(54610),i=n(4594),o=n(67453),l=n(99742);const c={left:"vIypY",leftTextImage:"YViNj",right:"MkD4u",blur:"X6mCh",imageContainer:"bc7kz",imagePosition:"JOhEj",image:"Ef2QR",thumbnail:"Gdurb",tallposter:"fjVNK",cover:"o3j31",linksContainer:"AT9Dk"};function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=i.call(n)).done)&&(l.push(r.value),l.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw a}}return l}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}var m=[{bgUrl:l.W.LaunchPad.BG_1},{bgUrl:l.W.LaunchPad.BG_2},{bgUrl:l.W.LaunchPad.BG_3},{bgUrl:l.W.LaunchPad.BG_4},{bgUrl:l.W.LaunchPad.BG_5}];function d(e){switch(e){case i.E.Video:case i.E.Interactive:case i.E.Clip:return c.thumbnail;case i.E.Subject:case i.E.Playlist:return c.cover;case i.E.Series:return c.tallposter;default:return""}}function p(e){var t,n=s(r.useState(!1),2),i=n[0],l=n[1],u=s(r.useState(""),2),p=u[0],g=u[1],f=s(r.useState(""),2),v=f[0],b=f[1],h=o.j.createUrl(e.imageUrl,{size:a.h2.Large}),y=m;return r.useEffect((function(){if(!h&&y&&0!==y.length){var e,t=(e=y)[Math.floor(Math.random()*e.length)];t.bgUrl&&g(t.bgUrl),t.textUrl&&b(t.textUrl)}}),[]),r.useEffect((function(){if(h){var e=new Image;return e.onload=function(){return l(!0)},e.src=h,function(){return e.onload=null}}}),[]),r.createElement("div",{className:"d-flex"},e.leftComponent?e.leftComponent():r.createElement("div",{className:"".concat(c.left," bg-light"),style:{backgroundImage:"url('".concat(p,"')")}},v&&r.createElement("div",{className:c.leftTextImage,style:{backgroundImage:"url('".concat(v,"')")}}),i&&r.createElement(r.Fragment,null,r.createElement("div",{className:c.blur,style:{backgroundImage:"url('".concat(h,"')")}}),r.createElement("div",{className:"".concat(c.imageContainer," ").concat(d(e.objectType))},r.createElement("div",{className:c.imagePosition},r.createElement("img",{className:c.image,src:h,alt:e.title}))))),r.createElement("div",{className:"".concat(c.right," bg-white d-flex flex-column")},r.createElement("div",{className:"position-absolute d-flex align-items-center ".concat(c.linksContainer)},null===(t=e.links)||void 0===t?void 0:t.map((function(e,t){return e.hide?r.createElement(r.Fragment,{key:t}):r.createElement("a",{key:t,href:e.url,className:"info-link fw-semibold",onClick:e.onClick},e.text)}))),e.children))}}}]);
2
+ //# sourceMappingURL=823-e821e91140-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/823-33c5207c68-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/global-idps.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/GlobalIdps.tsx","file:///app/packages/projects/lite/src/apps/launchpad/components/sign-in-buttons/SignInButtons.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/login-landing/login-landing.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/login-landing/LoginLandingView.tsx","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useGeoLocation.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useTrialAppLink.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"idpButton\":\"FDoJA\",\"idpImage\":\"bjN_j\",\"divider\":\"FfyN0\"};","import React from 'react';\n\nimport { HashObject } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { IdentityProvider } from 'libs/shared/apps/sign-up/interfaces/IdentityProvider';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './global-idps.scss';\n\nconst US_ONLY_IDPS: IdentityProvider[] = [\n {\n name: 'ClassLink',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/ZA2ew5',\n url: '/login?idp=classlink'\n },\n {\n name: 'Clever',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/LqlKgd',\n url: '/login?idp=clever'\n }\n];\n\nconst GLOBAL_IDPS: IdentityProvider[] = [\n {\n name: 'Google',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/l5x0jL',\n url: '/login?idp=google'\n },\n {\n name: 'Microsoft',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/xAxGPP',\n url: '/login?idp=microsoft'\n }\n];\n\ninterface GlobalIdpButtonProps {\n idp: IdentityProvider;\n /**\n * Because rendering globalIdps is conditional. We have a \"Don't have an account\" link at the bottom\n * which uses margin top. So the last item in this view must not have a margin bottom. - Sha\n */\n last?: boolean;\n onClick?: (idp: IdentityProvider) => void;\n}\n\nfunction getAttributionParams() {\n const params: HashObject = {};\n \n const encodedReferrer = AttributionHelper.getEncodedAttributionData();\n if (encodedReferrer)\n params.r = encodedReferrer;\n\n const utms = UtmHelper.getUtmParameters();\n if (utms)\n params.utms = utms;\n\n return params;\n}\n\nexport function GlobalIdpButton(props: GlobalIdpButtonProps): React.ReactElement {\n const {\n idp,\n last\n } = props;\n\n function onClick(): void {\n if (props.onClick) {\n props.onClick(idp);\n return;\n }\n\n const currentPathAndQuery = window.location.pathname + window.location.search;\n const attributionData = JSON.stringify(getAttributionParams());\n\n /**\n * Intentionally not using LocationUtils as to not bring a large number of dependencies into Auth - Sha\n */\n window.location.href = idp.url\n + '&redirectUrl=' + encodeURIComponent(currentPathAndQuery)\n + '&attribution=' + encodeURIComponent(attributionData);\n }\n\n return (\n <button\n className={`btn btn-lg btn-outline-dark w-100 ${last ? '' : 'mb-3'} ${styles.idpButton}`}\n onClick={onClick}\n >\n {idp.logoUrl && <img src={idp.logoUrl} className={styles.idpImage} />}\n Continue with {idp.name}\n </button>\n );\n}\n\ninterface AuthIdpProps {\n idps: IdentityProvider[];\n onClick: (idp: IdentityProvider) => void;\n className?: string;\n}\n\ninterface LiteIdpProps {\n geoLocation: GeoLocation;\n className?: string;\n}\n\ntype GlobalIdpsProps = AuthIdpProps | LiteIdpProps\n\nexport function GlobalIdps(props: GlobalIdpsProps): JSX.Element {\n let idps = 'idps' in props ? props.idps : null;\n\n if (!idps?.length && 'geoLocation' in props) {\n idps = [...GLOBAL_IDPS];\n\n if (LocalityHelper.isCountryCodeUS(props.geoLocation?.countryCode))\n idps.unshift(...US_ONLY_IDPS);\n }\n\n return (\n <div className={`${props.className ? props.className : ''}`}>\n <div className={`my-3 border-bottom position-relative ${styles.divider}`}></div>\n {idps.map((p, i) => (\n <GlobalIdpButton idp={p} key={i} onClick={'onClick' in props ? props.onClick : null} />\n ))}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { GlobalIdps } from 'libs/shared/apps/sign-up/components/general/global-idps/GlobalIdps';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'launchpad.signInButtons';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SignInButtonsProps {\n geoLocation: GeoLocation;\n customerId: string;\n skipPrompt: boolean;\n showJoinCode: boolean;\n redirectUrl: string;\n pageAppLinkString: string;\n showSignUp: boolean;\n}\n\nexport function SignInButtons(props: SignInButtonsProps): JSX.Element {\n React.useEffect(() => {\n if (!props.skipPrompt)\n return;\n\n Core.LocationUtils.PageLoad(Core.AppLinkHelper.getHref(appLink));\n }, []);\n\n function getAppLink(): Core.AppLink {\n const currentQuery = Core.LocationUtils.GetQuery();\n const params: HashObject = {};\n\n /**\n * Add customerId to the login url and remove it from the redirect url\n */\n if (props.customerId) {\n params.customerId = props.customerId;\n delete currentQuery.customerId;\n }\n\n /**\n * Remove skip prompt from the return url\n */\n if (props.skipPrompt)\n delete currentQuery.skipPrompt;\n\n if (props.redirectUrl) {\n params.redirectUrl = props.redirectUrl;\n } else {\n const serializedQuery = Core.LocationUtils.SerializeQueryParams(currentQuery);\n params.redirectUrl = Core.LocationUtils.GetCurrentPath() + (serializedQuery ? ('?' + serializedQuery) : '');\n }\n\n if (props.showSignUp)\n params.showSignUp = true;\n\n return {\n application: AppChannels.DEFAULT,\n action: Actions.Default.LOG_IN,\n params\n };\n }\n\n const appLink = getAppLink();\n\n return (\n <>\n <AppLink\n className='btn btn-lg btn-dark w-100 mt-4'\n appLink={appLink}\n >\n <Text namespace={namespace} phrase={props.pageAppLinkString ? 'signInToWatch' : 'signIn'} />\n </AppLink>\n {props.showJoinCode ?\n <AppLink\n className='btn btn-link info-link btn-lg w-100 mt-2'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.Launchpad.JOIN_CLASSROOM_PROMPT\n }}\n >\n {getPhrase('enterCode')}\n </AppLink> :\n <>\n <AppLink\n className='btn btn-lg btn-outline-dark w-100 mt-3'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.SignUp.SIGN_UP,\n params: { pageAppLinkString: props.pageAppLinkString }\n }}\n >\n {getPhrase('signUp')}\n </AppLink>\n <GlobalIdps geoLocation={props.geoLocation} />\n </>\n }\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Je2Pi\",\"formContainer\":\"MfLVl\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { DeepLinkViewModel, mapMasterTypeToDeepLinkApp, useDeepLinks } from 'shared/hooks/useDeepLinks';\n\nimport { SignInButtons } from 'apps/launchpad/components/sign-in-buttons/SignInButtons';\nimport { useGeoLocation } from 'apps/sign-up/hooks/useGeoLocation';\nimport { useTrialAppLink } from 'apps/sign-up/hooks/useTrialAppLink';\n\nimport styles from './login-landing.scss';\n\nconst namespace = 'classrooms.loginLanding';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction useFetchObject(objectId: string, objectType: MasterType): Flight.Response<VideoTypes> {\n function getRequest(): Flight.Request {\n switch (objectType) {\n case MasterType.Video:\n return VideoRequests.publicVideo(objectId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(objectId);\n case MasterType.Clip:\n return ClipRequests.publicClip(objectId);\n default:\n return null;\n }\n }\n\n return Flight.useBasicFetch(getRequest());\n}\n\ninterface LoginLandingProps {\n skipPrompt: boolean;\n showJoinCode: boolean;\n customerId: string;\n showSignUp: boolean;\n\n objectType?: MasterType;\n objectId?: string;\n}\n\nexport function LoginLandingView(props: LoginLandingProps): React.ReactElement {\n function getInitialDeepLink(): DeepLinkViewModel {\n return {\n id: props.objectId,\n app: mapMasterTypeToDeepLinkApp(props.objectType)\n };\n }\n\n const geoLocation = useGeoLocation();\n\n const {\n deepLink,\n showDeepLink,\n onClickDeepLink\n } = useDeepLinks(getInitialDeepLink(), LocationContext.Launchpad);\n\n const { trialAppLinkString } = useTrialAppLink();\n\n const obj = useFetchObject(props.objectId, props.objectType);\n\n if (props.skipPrompt || obj.isFetching)\n return <></>;\n\n return (\n <Launchpad\n title={obj.data?.name}\n imageUrl={VideoHelper.getThumbnail(obj.data)?.url}\n objectType={props.objectType}\n links={[{\n text: getPhrase('openInApp'),\n url: deepLink,\n hide: !showDeepLink,\n onClick: onClickDeepLink\n }]}\n >\n <div className={`${styles.formContainer} m-auto`}>\n <div className={`${styles.logo} mb-4 mx-auto`}>\n <ClickViewLogo />\n </div>\n {!!obj.data?.name &&\n <h1 className='h3'>\n {VideoHelper.isVideo(obj.data) &&\n <VideoSubText type='series' video={obj.data} analyticsOptions={{}} size='sm' />}\n {obj.data.name}\n </h1>\n }\n {obj.data?.description &&\n <p className='mb-0 clamp-3'>{obj.data.description}</p>\n }\n\n <SignInButtons\n geoLocation={geoLocation}\n customerId={props.customerId}\n skipPrompt={props.skipPrompt}\n showJoinCode={props.showJoinCode}\n redirectUrl={null}\n pageAppLinkString={trialAppLinkString}\n showSignUp={props.showSignUp}\n />\n </div>\n </Launchpad>\n );\n}","import { LocationUtils } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst FALLBACK_COUNTRY: GeoLocation = {\n countryCode: 'us',\n isFallback: true\n};\n\nexport function useGeoLocation(): GeoLocation {\n const geoLocation = Flight.useBasicFetch<GeoLocation>(ConfigRequests.geoLocation());\n\n const countryCode = LocationUtils.GetQuery()?.countryCode?.toLowerCase();\n if (countryCode)\n return { countryCode };\n\n if (geoLocation.hasCompleted && !geoLocation.data)\n return FALLBACK_COUNTRY;\n\n return geoLocation.data;\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { DeepLinkViewModel } from 'shared/hooks/useDeepLinks';\n\nexport function useTrialAppLink() {\n const [viewModel] = useViewModel<DeepLinkViewModel>(ViewModelKeys.OPEN_IN_APP_DATA);\n\n function getTrialAppLinkString() {\n if (!viewModel) {\n return;\n }\n const validApps = [ 'videos', 'clips', 'series', 'playlists', 'topics', 'interactives' ];\n if (!validApps.includes(viewModel.app)) {\n return;\n }\n\n const id = viewModel.id;\n switch (viewModel.app) {\n case 'videos':\n return `video:${id}`;\n case 'playlists':\n return `playlist:${id}`;\n case 'series':\n return `series:${id}`;\n case 'topics':\n return `topic:${id}`;\n case 'interactives':\n return `interactive:${id}`;\n case 'clips':\n return `clip:${id}`;\n }\n }\n\n return {\n trialAppLinkString: getTrialAppLinkString()\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nconst FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["US_ONLY_IDPS","name","logoUrl","url","GLOBAL_IDPS","GlobalIdpButton","props","idp","last","className","onClick","currentPathAndQuery","window","location","pathname","search","attributionData","JSON","stringify","params","encodedReferrer","AttributionHelper","r","utms","UtmHelper","getAttributionParams","href","encodeURIComponent","src","GlobalIdps","idps","length","LocalityHelper","geoLocation","countryCode","unshift","map","p","i","key","namespace","getPhrase","SignInButtons","skipPrompt","appLink","currentQuery","customerId","redirectUrl","serializedQuery","showSignUp","application","action","getAppLink","phrase","pageAppLinkString","showJoinCode","LanguageService","LoginLandingView","objectId","objectType","useGeoLocation","useDeepLinks","id","app","deepLink","showDeepLink","onClickDeepLink","trialAppLinkString","useTrialAppLink","obj","MasterType","VideoRequests","InteractiveRequests","ClipRequests","getRequest","isFetching","Launchpad","title","data","imageUrl","VideoHelper","links","text","hide","ClickViewLogo","VideoSubText","type","video","analyticsOptions","size","description","FALLBACK_COUNTRY","isFallback","toLowerCase","hasCompleted","viewModel","includes","getTrialAppLinkString","FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","showImage","setShowImage","image","setImage","textImage","setTextImage","ImageHelper","IMAGE_URLS","urlLists","Math","floor","random","textUrl","img","Image","onload","leftComponent","style","backgroundImage","alt","link","children"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/823-e821e91140-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/global-idps.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/GlobalIdps.tsx","file:///app/packages/projects/lite/src/apps/launchpad/components/sign-in-buttons/SignInButtons.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/login-landing/login-landing.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/login-landing/LoginLandingView.tsx","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useGeoLocation.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useTrialAppLink.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"idpButton\":\"FDoJA\",\"idpImage\":\"bjN_j\",\"divider\":\"FfyN0\"};","import React from 'react';\n\nimport { HashObject } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { IdentityProvider } from 'libs/shared/apps/sign-up/interfaces/IdentityProvider';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './global-idps.scss';\n\nconst US_ONLY_IDPS: IdentityProvider[] = [\n {\n name: 'ClassLink',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/ZA2ew5',\n url: '/login?idp=classlink'\n },\n {\n name: 'Clever',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/LqlKgd',\n url: '/login?idp=clever'\n },\n {\n name: 'Google',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/l5x0jL',\n url: '/login?idp=google'\n },\n {\n name: 'Microsoft',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/xAxGPP',\n url: '/login?idp=microsoft'\n }\n];\n\nconst GLOBAL_IDPS: IdentityProvider[] = [\n\n];\n\ninterface GlobalIdpButtonProps {\n idp: IdentityProvider;\n /**\n * Because rendering globalIdps is conditional. We have a \"Don't have an account\" link at the bottom\n * which uses margin top. So the last item in this view must not have a margin bottom. - Sha\n */\n last?: boolean;\n onClick?: (idp: IdentityProvider) => void;\n}\n\nfunction getAttributionParams() {\n const params: HashObject = {};\n \n const encodedReferrer = AttributionHelper.getEncodedAttributionData();\n if (encodedReferrer)\n params.r = encodedReferrer;\n\n const utms = UtmHelper.getUtmParameters();\n if (utms)\n params.utms = utms;\n\n return params;\n}\n\nexport function GlobalIdpButton(props: GlobalIdpButtonProps): React.ReactElement {\n const {\n idp,\n last\n } = props;\n\n function onClick(): void {\n if (props.onClick) {\n props.onClick(idp);\n return;\n }\n\n const currentPathAndQuery = window.location.pathname + window.location.search;\n const attributionData = JSON.stringify(getAttributionParams());\n\n /**\n * Intentionally not using LocationUtils as to not bring a large number of dependencies into Auth - Sha\n */\n window.location.href = idp.url\n + '&redirectUrl=' + encodeURIComponent(currentPathAndQuery)\n + '&attribution=' + encodeURIComponent(attributionData);\n }\n\n return (\n <button\n className={`btn btn-lg btn-outline-dark w-100 ${last ? '' : 'mb-3'} ${styles.idpButton}`}\n onClick={onClick}\n >\n {idp.logoUrl && <img src={idp.logoUrl} className={styles.idpImage} />}\n Continue with {idp.name}\n </button>\n );\n}\n\ninterface AuthIdpProps {\n idps: IdentityProvider[];\n onClick: (idp: IdentityProvider) => void;\n className?: string;\n}\n\ninterface LiteIdpProps {\n geoLocation: GeoLocation;\n className?: string;\n}\n\ntype GlobalIdpsProps = AuthIdpProps | LiteIdpProps\n\nexport function GlobalIdps(props: GlobalIdpsProps): JSX.Element {\n let idps = 'idps' in props ? props.idps : null;\n\n if (!idps?.length && 'geoLocation' in props) {\n idps = [...GLOBAL_IDPS];\n\n if (LocalityHelper.isCountryCodeUS(props.geoLocation?.countryCode))\n idps.unshift(...US_ONLY_IDPS);\n }\n\n if (!idps.length)\n return <></>;\n\n return (\n <div className={`${props.className ? props.className : ''}`}>\n <div className={`my-3 border-bottom position-relative ${styles.divider}`}></div>\n {idps.map((p, i) => (\n <GlobalIdpButton idp={p} key={i} onClick={'onClick' in props ? props.onClick : null} />\n ))}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { GlobalIdps } from 'libs/shared/apps/sign-up/components/general/global-idps/GlobalIdps';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'launchpad.signInButtons';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SignInButtonsProps {\n geoLocation: GeoLocation;\n customerId: string;\n skipPrompt: boolean;\n showJoinCode: boolean;\n redirectUrl: string;\n pageAppLinkString: string;\n showSignUp: boolean;\n}\n\nexport function SignInButtons(props: SignInButtonsProps): JSX.Element {\n React.useEffect(() => {\n if (!props.skipPrompt)\n return;\n\n Core.LocationUtils.PageLoad(Core.AppLinkHelper.getHref(appLink));\n }, []);\n\n function getAppLink(): Core.AppLink {\n const currentQuery = Core.LocationUtils.GetQuery();\n const params: HashObject = {};\n\n /**\n * Add customerId to the login url and remove it from the redirect url\n */\n if (props.customerId) {\n params.customerId = props.customerId;\n delete currentQuery.customerId;\n }\n\n /**\n * Remove skip prompt from the return url\n */\n if (props.skipPrompt)\n delete currentQuery.skipPrompt;\n\n if (props.redirectUrl) {\n params.redirectUrl = props.redirectUrl;\n } else {\n const serializedQuery = Core.LocationUtils.SerializeQueryParams(currentQuery);\n params.redirectUrl = Core.LocationUtils.GetCurrentPath() + (serializedQuery ? ('?' + serializedQuery) : '');\n }\n\n if (props.showSignUp)\n params.showSignUp = true;\n\n return {\n application: AppChannels.DEFAULT,\n action: Actions.Default.LOG_IN,\n params\n };\n }\n\n const appLink = getAppLink();\n\n return (\n <>\n <AppLink\n className='btn btn-lg btn-dark w-100 mt-4'\n appLink={appLink}\n >\n <Text namespace={namespace} phrase={props.pageAppLinkString ? 'signInToWatch' : 'signIn'} />\n </AppLink>\n {props.showJoinCode ?\n <AppLink\n className='btn btn-link info-link btn-lg w-100 mt-2'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.Launchpad.JOIN_CLASSROOM_PROMPT\n }}\n >\n {getPhrase('enterCode')}\n </AppLink> :\n <>\n <AppLink\n className='btn btn-lg btn-outline-dark w-100 mt-3'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.SignUp.SIGN_UP,\n params: { pageAppLinkString: props.pageAppLinkString }\n }}\n >\n {getPhrase('signUp')}\n </AppLink>\n <GlobalIdps geoLocation={props.geoLocation} />\n </>\n }\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Je2Pi\",\"formContainer\":\"MfLVl\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { DeepLinkViewModel, mapMasterTypeToDeepLinkApp, useDeepLinks } from 'shared/hooks/useDeepLinks';\n\nimport { SignInButtons } from 'apps/launchpad/components/sign-in-buttons/SignInButtons';\nimport { useGeoLocation } from 'apps/sign-up/hooks/useGeoLocation';\nimport { useTrialAppLink } from 'apps/sign-up/hooks/useTrialAppLink';\n\nimport styles from './login-landing.scss';\n\nconst namespace = 'classrooms.loginLanding';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction useFetchObject(objectId: string, objectType: MasterType): Flight.Response<VideoTypes> {\n function getRequest(): Flight.Request {\n switch (objectType) {\n case MasterType.Video:\n return VideoRequests.publicVideo(objectId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(objectId);\n case MasterType.Clip:\n return ClipRequests.publicClip(objectId);\n default:\n return null;\n }\n }\n\n return Flight.useBasicFetch(getRequest());\n}\n\ninterface LoginLandingProps {\n skipPrompt: boolean;\n showJoinCode: boolean;\n customerId: string;\n showSignUp: boolean;\n\n objectType?: MasterType;\n objectId?: string;\n}\n\nexport function LoginLandingView(props: LoginLandingProps): React.ReactElement {\n function getInitialDeepLink(): DeepLinkViewModel {\n return {\n id: props.objectId,\n app: mapMasterTypeToDeepLinkApp(props.objectType)\n };\n }\n\n const geoLocation = useGeoLocation();\n\n const {\n deepLink,\n showDeepLink,\n onClickDeepLink\n } = useDeepLinks(getInitialDeepLink(), LocationContext.Launchpad);\n\n const { trialAppLinkString } = useTrialAppLink();\n\n const obj = useFetchObject(props.objectId, props.objectType);\n\n if (props.skipPrompt || obj.isFetching)\n return <></>;\n\n return (\n <Launchpad\n title={obj.data?.name}\n imageUrl={VideoHelper.getThumbnail(obj.data)?.url}\n objectType={props.objectType}\n links={[{\n text: getPhrase('openInApp'),\n url: deepLink,\n hide: !showDeepLink,\n onClick: onClickDeepLink\n }]}\n >\n <div className={`${styles.formContainer} m-auto`}>\n <div className={`${styles.logo} mb-4 mx-auto`}>\n <ClickViewLogo />\n </div>\n {!!obj.data?.name &&\n <h1 className='h3'>\n {VideoHelper.isVideo(obj.data) &&\n <VideoSubText type='series' video={obj.data} analyticsOptions={{}} size='sm' />}\n {obj.data.name}\n </h1>\n }\n {obj.data?.description &&\n <p className='mb-0 clamp-3'>{obj.data.description}</p>\n }\n\n <SignInButtons\n geoLocation={geoLocation}\n customerId={props.customerId}\n skipPrompt={props.skipPrompt}\n showJoinCode={props.showJoinCode}\n redirectUrl={null}\n pageAppLinkString={trialAppLinkString}\n showSignUp={props.showSignUp}\n />\n </div>\n </Launchpad>\n );\n}","import { LocationUtils } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst FALLBACK_COUNTRY: GeoLocation = {\n countryCode: 'us',\n isFallback: true\n};\n\nexport function useGeoLocation(): GeoLocation {\n const geoLocation = Flight.useBasicFetch<GeoLocation>(ConfigRequests.geoLocation());\n\n const countryCode = LocationUtils.GetQuery()?.countryCode?.toLowerCase();\n if (countryCode)\n return { countryCode };\n\n if (geoLocation.hasCompleted && !geoLocation.data)\n return FALLBACK_COUNTRY;\n\n return geoLocation.data;\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { DeepLinkViewModel } from 'shared/hooks/useDeepLinks';\n\nexport function useTrialAppLink() {\n const [viewModel] = useViewModel<DeepLinkViewModel>(ViewModelKeys.OPEN_IN_APP_DATA);\n\n function getTrialAppLinkString() {\n if (!viewModel) {\n return;\n }\n const validApps = [ 'videos', 'clips', 'series', 'playlists', 'topics', 'interactives' ];\n if (!validApps.includes(viewModel.app)) {\n return;\n }\n\n const id = viewModel.id;\n switch (viewModel.app) {\n case 'videos':\n return `video:${id}`;\n case 'playlists':\n return `playlist:${id}`;\n case 'series':\n return `series:${id}`;\n case 'topics':\n return `topic:${id}`;\n case 'interactives':\n return `interactive:${id}`;\n case 'clips':\n return `clip:${id}`;\n }\n }\n\n return {\n trialAppLinkString: getTrialAppLinkString()\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nconst FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["US_ONLY_IDPS","name","logoUrl","url","GLOBAL_IDPS","GlobalIdpButton","props","idp","last","className","onClick","currentPathAndQuery","window","location","pathname","search","attributionData","JSON","stringify","params","encodedReferrer","AttributionHelper","r","utms","UtmHelper","getAttributionParams","href","encodeURIComponent","src","GlobalIdps","idps","length","LocalityHelper","geoLocation","countryCode","unshift","map","p","i","key","namespace","getPhrase","SignInButtons","skipPrompt","appLink","currentQuery","customerId","redirectUrl","serializedQuery","showSignUp","application","action","getAppLink","phrase","pageAppLinkString","showJoinCode","LanguageService","LoginLandingView","objectId","objectType","useGeoLocation","useDeepLinks","id","app","deepLink","showDeepLink","onClickDeepLink","trialAppLinkString","useTrialAppLink","obj","MasterType","VideoRequests","InteractiveRequests","ClipRequests","getRequest","isFetching","Launchpad","title","data","imageUrl","VideoHelper","links","text","hide","ClickViewLogo","VideoSubText","type","video","analyticsOptions","size","description","FALLBACK_COUNTRY","isFallback","toLowerCase","hasCompleted","viewModel","includes","getTrialAppLinkString","FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","showImage","setShowImage","image","setImage","textImage","setTextImage","ImageHelper","IMAGE_URLS","urlLists","Math","floor","random","textUrl","img","Image","onload","leftComponent","style","backgroundImage","alt","link","children"],"sourceRoot":""}