@clickview/lite 0.103.1 → 0.103.2
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 +271 -271
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{igSDXA6g.chunk.js → 1WHinyQW.chunk.js} +2 -2
- package/dist/scripts/{igSDXA6g.chunk.js.map → 1WHinyQW.chunk.js.map} +1 -1
- package/dist/scripts/{kMWvzbRv2.chunk.js → B1ag1ah72.chunk.js} +2 -2
- package/dist/scripts/{kMWvzbRv2.chunk.js.map → B1ag1ah72.chunk.js.map} +1 -1
- package/dist/scripts/{D2_GYzlb.chunk.js → B6Pc3q-u.chunk.js} +2 -2
- package/dist/scripts/{D2_GYzlb.chunk.js.map → B6Pc3q-u.chunk.js.map} +1 -1
- package/dist/scripts/{sCuSDiER2.chunk.js → BPbjSFkC2.chunk.js} +2 -2
- package/dist/scripts/{sCuSDiER2.chunk.js.map → BPbjSFkC2.chunk.js.map} +1 -1
- package/dist/scripts/{CNm_4jj62.chunk.js → BZFomoIH2.chunk.js} +2 -2
- package/dist/scripts/BZFomoIH2.chunk.js.map +1 -0
- package/dist/scripts/{CW_rYB-i2.chunk.js → BazdM9Ah2.chunk.js} +2 -2
- package/dist/scripts/{CW_rYB-i2.chunk.js.map → BazdM9Ah2.chunk.js.map} +1 -1
- package/dist/scripts/{BcPrUEuC2.chunk.js → CNPnPJMp2.chunk.js} +2 -2
- package/dist/scripts/{BcPrUEuC2.chunk.js.map → CNPnPJMp2.chunk.js.map} +1 -1
- package/dist/scripts/{Dd23z1_x2.chunk.js → CUp7_5gE2.chunk.js} +2 -2
- package/dist/scripts/{Dd23z1_x2.chunk.js.map → CUp7_5gE2.chunk.js.map} +1 -1
- package/dist/scripts/{C-zUHAyD.chunk.js → CajcIz6S.chunk.js} +2 -2
- package/dist/scripts/{C-zUHAyD.chunk.js.map → CajcIz6S.chunk.js.map} +1 -1
- package/dist/scripts/{Drx3PvJj.chunk.js → Cc9f2ux0.chunk.js} +2 -2
- package/dist/scripts/{Drx3PvJj.chunk.js.map → Cc9f2ux0.chunk.js.map} +1 -1
- package/dist/scripts/Cj_F4Lv92.chunk.js +2 -0
- package/dist/scripts/{C8l37H7t2.chunk.js.map → Cj_F4Lv92.chunk.js.map} +1 -1
- package/dist/scripts/{DFrz_upP2.chunk.js → CtBGtgb32.chunk.js} +2 -2
- package/dist/scripts/{DFrz_upP2.chunk.js.map → CtBGtgb32.chunk.js.map} +1 -1
- package/dist/scripts/{BpiZZWnJ2.chunk.js → CtWAorP42.chunk.js} +2 -2
- package/dist/scripts/{BpiZZWnJ2.chunk.js.map → CtWAorP42.chunk.js.map} +1 -1
- package/dist/scripts/{C3Qd_bbV2.chunk.js → D8mi6CVp2.chunk.js} +2 -2
- package/dist/scripts/{C3Qd_bbV2.chunk.js.map → D8mi6CVp2.chunk.js.map} +1 -1
- package/dist/scripts/{3K2h5K5-.chunk.js → DJfIirut.chunk.js} +2 -2
- package/dist/scripts/{3K2h5K5-.chunk.js.map → DJfIirut.chunk.js.map} +1 -1
- package/dist/scripts/{Cc63s6rS2.chunk.js → DaaQ5htA2.chunk.js} +2 -2
- package/dist/scripts/{Cc63s6rS2.chunk.js.map → DaaQ5htA2.chunk.js.map} +1 -1
- package/dist/scripts/{CHwPLUZK.chunk.js → DkFP4cXM.chunk.js} +2 -2
- package/dist/scripts/{CHwPLUZK.chunk.js.map → DkFP4cXM.chunk.js.map} +1 -1
- package/dist/scripts/{izXlxhJf.chunk.js → Dzy1nQk7.chunk.js} +2 -2
- package/dist/scripts/{izXlxhJf.chunk.js.map → Dzy1nQk7.chunk.js.map} +1 -1
- package/dist/scripts/{DGy8Ldlr.chunk.js → FIUOppmy.chunk.js} +2 -2
- package/dist/scripts/{DGy8Ldlr.chunk.js.map → FIUOppmy.chunk.js.map} +1 -1
- package/dist/scripts/{CPBvCqVK.chunk.js → H511PXuG.chunk.js} +2 -2
- package/dist/scripts/{CPBvCqVK.chunk.js.map → H511PXuG.chunk.js.map} +1 -1
- package/dist/scripts/{D8Op6EUa2.chunk.js → IYIY9hIU2.chunk.js} +2 -2
- package/dist/scripts/{D8Op6EUa2.chunk.js.map → IYIY9hIU2.chunk.js.map} +1 -1
- package/dist/scripts/{app-BHlllGhO.js → app-DvYKGw_S.js} +3 -3
- package/dist/scripts/{app-BHlllGhO.js.map → app-DvYKGw_S.js.map} +1 -1
- package/dist/scripts/{2HZlmQRs2.chunk.js → lJ6ZVpyv2.chunk.js} +2 -2
- package/dist/scripts/{2HZlmQRs2.chunk.js.map → lJ6ZVpyv2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/C8l37H7t2.chunk.js +0 -2
- package/dist/scripts/CNm_4jj62.chunk.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DGy8Ldlr.chunk.js","names":[],"sources":["../../src/apps/subjects/views/twig-entry/TwigEntryView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, CuratedDashboard, CuratedWidgetQueryParams, CurrentUser, DashboardStatus, DashboardTargetType, DashboardUserType, Library, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardWidgetImageUrls } from 'shared/constants/DashboardWidgetImageUrls';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useAvailablePresentations } from 'shared/hooks/presentations/useAvailablePresentations';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nimport { getClassificationAppLinks } from 'apps/subjects/views/classification/ClassificationViewUtils';\n\nconst namespace = 'subjects.twigEntry';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TwigTigtagHubIds {\n twigHubId: string | null;\n tigtagHubId: string | null;\n tigtagJuniorHubId: string | null;\n}\n\nconst { Twig, Tigtag } = HardCoded.Classifications;\n\n/**\n * Maps ContentRegion to Twig and TigTag hub IDs.\n * Note: AU and US regions do not have Twig/TigTag content.\n */\nexport const ContentRegionHubMapping: Record<ContentRegion, TwigTigtagHubIds> = {\n [ContentRegion.UK]: {\n twigHubId: Twig.EnglandSecondary.HUB,\n tigtagHubId: Tigtag.EnglandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.EnglandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.SCOT]: {\n twigHubId: Twig.ScotlandSecondary.HUB,\n tigtagHubId: Tigtag.ScotlandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.ScotlandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.NZ]: {\n twigHubId: Twig.NewZealandSecondary.HUB,\n tigtagHubId: Tigtag.NewZealandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.NewZealandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.CA]: {\n twigHubId: Twig.CanadaMiddle.HUB,\n tigtagHubId: Tigtag.CanadaElementary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.CanadaElementary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.GLOBAL]: {\n twigHubId: Twig.InternationalSecondary.HUB,\n tigtagHubId: Tigtag.InternationalPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.InternationalPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.AU]: null,\n [ContentRegion.US]: null\n};\n\ninterface TwigHubSectionProps {\n classificationId: string;\n currentUser: CurrentUser;\n config: Config;\n}\n\nfunction TwigHubSection(props: TwigHubSectionProps): JSX.Element {\n const { classificationId, currentUser, config } = props;\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasTopicDirectories } = useSettings(null);\n const { activePresentation } = useActivePresentation();\n const { availablePresentations } = useAvailablePresentations();\n const curriculums = useCurriculums();\n const { commonVideoProps } = useCommonVideoProps({\n locationContext: LocationContext.VideoThumbnail\n });\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(classificationId, currentUser?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const dashboard = Flight.useBasicFetch<CuratedDashboard>(\n classification.data &&\n DashboardRequests.getDashboard(\n DashboardUserType.Staff,\n [DashboardStatus.Published],\n `classification:${classificationId}`\n )\n );\n\n const widgets = React.useMemo(\n () => ArrayHelper.sortBy(dashboard.data?.widgets, 'index') ?? [],\n [dashboard.data?.widgets]\n );\n\n function getWidgetContentRequest(\n id: string,\n widgetTypeId: WidgetTypeId,\n template: WidgetTemplate\n ): Flight.Request {\n const params: CuratedWidgetQueryParams = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n DashboardTargetType.Classification\n );\n\n return DashboardRequests.dashboardWidgetContent(id, params, template, presentation.data);\n }\n\n const appLinks = getClassificationAppLinks(\n classification.data,\n DashboardTargetType.Classification,\n {},\n currentUser,\n activePresentation?.vanitySlug,\n availablePresentations\n );\n\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length\n };\n\n if (!dashboard.hasCompleted || !classification.data || !presentation.data || !audiences.hasCompleted)\n return <></>;\n\n if (!widgets.length)\n return <></>;\n\n return (\n <div className='mb-3'>\n <div className='dashboard-spacing-lg'>\n {widgets.map((widget, idx) => (\n <WidgetContainerView\n key={widget.id}\n id={widget.id}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n widgetCollection={DashboardTargetType.Classification}\n dashboardTarget={DashboardTargetType.Classification}\n getContentRequest={getWidgetContentRequest}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n classification={classification.data}\n presentation={presentation.data}\n audiences={audiences.data}\n metadata={widget.metadata}\n widgetIndex={idx}\n lazyLoad={true}\n commonVideoProps={commonVideoProps}\n settings={{ hasTopicDirectories }}\n imageCdnUrl={config?.imageCdnUrl}\n imageUrls={DashboardWidgetImageUrls}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n isTertiaryCustomerWithoutExchange={false}\n curriculums={curriculums}\n analyticsData={analyticsData}\n appLinks={appLinks}\n onToggleFollowClassification={undefined}\n onSubmitFeedback={undefined}\n isPreviewing={false}\n isBot={false}\n contentType={undefined}\n hasTableOfContents={false}\n limitTotalItems={false}\n seeMoreLink={null}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n ))}\n </div>\n </div>\n );\n}\n\ninterface TwigEntryViewProps {\n showError?: boolean;\n}\n\nexport function TwigEntryView(props: TwigEntryViewProps): JSX.Element {\n const [ showErrorPopup, setShowErrorPopup ] = React.useState(props.showError);\n\n useSetPageMetadata({\n title: getPhrase('heading')\n });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const libraries = Flight.useBasicFetch<Library[]>(\n currentUser.data?.isAuthenticated &&\n LibraryRequests.libraries()\n );\n\n const ids = React.useMemo(() => currentUser.data?.contentRegion ?\n ContentRegionHubMapping[currentUser.data.contentRegion] || ContentRegionHubMapping[ContentRegion.UK] :\n null, [currentUser.data?.contentRegion]);\n\n const hasCompleted =\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || libraries.hasCompleted) &&\n config.hasCompleted;\n\n React.useEffect(() => {\n if (!hasCompleted || !!ids)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME,\n args: [null]\n });\n }, [ hasCompleted, ids ]);\n\n if (!hasCompleted || !ids)\n return <></>;\n\n return (\n <div className='bg-white p-4'>\n <h1 className='mb-4 h2'>{getPhrase('heading')}</h1>\n {props.showError && <div className='alert text-dark bg-light-blue px-3 rounded-3'>\n {getPhrase('errorPopupDescription')}\n </div>}\n <hr className='mt-2'/>\n <TwigHubSection classificationId={ids.twigHubId} currentUser={currentUser.data} config={config.data} />\n\n <TwigHubSection classificationId={ids.tigtagHubId} currentUser={currentUser.data} config={config.data} />\n\n <TwigHubSection classificationId={ids.tigtagJuniorHubId} currentUser={currentUser.data} config={config.data} />\n\n {showErrorPopup &&\n <Popup\n title={getPhrase('errorPopupHeading')}\n closePopup={() => setShowErrorPopup(false)}\n >\n <div className='d-flex flex-column align-items-center text-center'>\n <img\n src={ImageUrls.EmptyStates.TWIG}\n alt={getPhrase('errorPopupHeading')}\n className='mb-3 mx-auto w-75'\n />\n <p className='mb-4'>{getPhrase('errorPopupDescription')}</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel text={getPhrase('errorPopupCloseButton')} onClick={() => setShowErrorPopup(false)} />\n </PopupButtons>\n </Popup>\n }\n </div>\n );\n}\n"],"mappings":"g1CAwCM,EAAY,EAAgB,iBAAiB,oBAAS,EAQtD,CAAE,OAAM,UAAW,EAAU,gBAMtB,EAAmE,EAC7E,EAAc,IAAK,CAClB,UAAW,EAAK,iBAAiB,IACjC,YAAa,EAAO,eAAe,WACnC,kBAAmB,EAAO,eAAe,iBAC3C,GACC,EAAc,MAAO,CACpB,UAAW,EAAK,kBAAkB,IAClC,YAAa,EAAO,gBAAgB,WACpC,kBAAmB,EAAO,gBAAgB,iBAC5C,GACC,EAAc,IAAK,CAClB,UAAW,EAAK,oBAAoB,IACpC,YAAa,EAAO,kBAAkB,WACtC,kBAAmB,EAAO,kBAAkB,iBAC9C,GACC,EAAc,IAAK,CAClB,UAAW,EAAK,aAAa,IAC7B,YAAa,EAAO,iBAAiB,WACrC,kBAAmB,EAAO,iBAAiB,iBAC7C,GACC,EAAc,QAAS,CACtB,UAAW,EAAK,uBAAuB,IACvC,YAAa,EAAO,qBAAqB,WACzC,kBAAmB,EAAO,qBAAqB,iBACjD,GACC,EAAc,IAAK,MACnB,EAAc,IAAK,IACtB,EAQA,SAAS,EAAe,EAAyC,CAC/D,GAAM,CAAE,mBAAkB,cAAa,UAAW,EAE5C,CAAE,iBAAgB,uBAAwB,EAAe,EACzD,CAAE,uBAAwB,EAAY,IAAI,EAC1C,CAAE,sBAAuB,EAAsB,EAC/C,CAAE,0BAA2B,EAA0B,EACvD,EAAc,EAAe,EAC7B,CAAE,oBAAqB,EAAoB,CAC/C,gBAAiB,EAAgB,cACnC,CAAC,EAEK,EAAiB,EACrB,EAAuB,eAAe,EAAkB,GAAa,EAAE,CACzE,EAEM,EAAe,EACnB,EAAe,MACf,EAAuB,iBAAiB,EAAe,KAAK,cAAc,CAC5E,EAEM,EAAY,EAChB,EAAe,MACf,EAAiB,0BAA0B,EAAe,KAAK,cAAc,CAC/E,EAEM,EAAY,EAChB,EAAe,MACf,EAAkB,aAChB,EAAkB,MAClB,CAAC,EAAgB,SAAS,EAC1B,kBAAkB,GACpB,CACF,EAEM,EAAA,EAAgB,YACd,EAAY,OAAO,EAAU,MAAM,QAAS,OAAO,GAAK,CAAC,EAC/D,CAAC,EAAU,MAAM,OAAO,CAC1B,EAEA,SAAS,EACP,EACA,EACA,EACgB,CAChB,IAAM,EAAmC,EAAuB,gBAC9D,EACA,EACA,EAAoB,cACtB,EAEA,OAAO,EAAkB,uBAAuB,EAAI,EAAQ,EAAU,EAAa,IAAI,CACzF,CAEA,IAAM,EAAW,EACf,EAAe,KACf,EAAoB,eACpB,CAAC,EACD,EACA,GAAoB,WACpB,CACF,EAEM,EAAgB,CACpB,eAAgB,EAAa,MAAM,GACnC,iBAAkB,EAAa,MAAM,KACrC,wBAAyB,EAAe,MAAM,GAC9C,0BAA2B,EAAe,MAAM,KAChD,+BAAgC,CAAC,CAAC,EAAe,MAAM,WAAW,MAAM,MAC1E,EAQA,MANI,CAAC,EAAU,cAAgB,CAAC,EAAe,MAAQ,CAAC,EAAa,MAAQ,CAAC,EAAU,cAGpF,CAAC,EAAQ,QACJ,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,GAGX,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,gCACZ,EAAQ,KAAK,EAAQ,KACpB,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,GAAI,EAAO,GACX,KAAM,EAAO,KACb,YAAa,EAAO,YACpB,WAAY,EAAO,WACnB,aAAc,EAAO,SACrB,iBAAkB,EAAoB,eACtC,gBAAiB,EAAoB,eACrC,kBAAmB,EACH,iBACK,sBACrB,eAAgB,EAAe,KAC/B,aAAc,EAAa,KAC3B,UAAW,EAAU,KACrB,SAAU,EAAO,SACjB,YAAa,EACb,SAAU,GACQ,mBAClB,SAAU,CAAE,qBAAoB,EAChC,YAAa,GAAQ,YACrB,UAAW,EACX,kCAAmC,EAAU,UAAU,mBACvD,kCAAmC,GACtB,cACE,gBACL,WACV,6BAA8B,IAAA,GAC9B,iBAAkB,IAAA,GAClB,aAAc,GACd,MAAO,GACP,YAAa,IAAA,GACb,mBAAoB,GACpB,gBAAiB,GACjB,YAAa,KACb,kBAAmB,KACnB,eAAgB,IACjB,EApCM,EAAO,EAoCb,CACF,CACE,CAAA,CACF,CAAA,CAET,CAMA,SAAgB,EAAc,EAAwC,CACpE,GAAM,CAAE,EAAgB,GAAA,EAA4B,SAAS,EAAM,SAAS,EAE5E,EAAmB,CACjB,MAAO,EAAU,SAAS,CAC5B,CAAC,EAED,IAAM,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAY,EAChB,EAAY,MAAM,iBAClB,EAAgB,UAAU,CAC5B,EAEM,EAAA,EAAY,YAAc,EAAY,MAAM,cAChD,EAAwB,EAAY,KAAK,gBAAkB,EAAwB,EAAc,IACjG,KAAM,CAAC,EAAY,MAAM,aAAa,CAAC,EAEnC,EACJ,EAAY,eACX,CAAC,EAAY,MAAM,iBAAmB,EAAU,eACjD,EAAO,aAgBT,OAdA,EAAM,cAAgB,CAChB,CAAC,GAAkB,GAGvB,EAAmB,QAAQ,CACzB,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,KAC1B,KAAM,CAAC,IAAI,CACb,CAAC,CACH,EAAG,CAAE,EAAc,CAAI,CAAC,EAEpB,CAAC,GAAgB,CAAC,GACb,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,GAGX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wBAAf,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,mBAAW,EAAU,SAAS,CAAM,CAAA,EACjD,EAAM,YAAa,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,wDAChC,EAAU,uBAAuB,CAC/B,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,MAAO,CAAA,GACrB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,UAAW,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,GAEtG,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,YAAa,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,GAExG,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,kBAAmB,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,EAE7G,IACC,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,MAAO,EAAU,mBAAmB,EACpC,eAAkB,EAAkB,EAAK,WAF3C,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6DAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAK,EAAU,YAAY,KAC3B,IAAK,EAAU,mBAAmB,EAClC,UAAU,mBACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,gBAAQ,EAAU,uBAAuB,CAAK,CAAA,CACxD,KACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,KAAM,EAAU,uBAAuB,EAAG,YAAe,EAAkB,EAAK,CAAI,CAAA,CAC7F,CAAA,CACT,GAEN,GAET"}
|
|
1
|
+
{"version":3,"file":"FIUOppmy.chunk.js","names":[],"sources":["../../src/apps/subjects/views/twig-entry/TwigEntryView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Config, CuratedDashboard, CuratedWidgetQueryParams, CurrentUser, DashboardStatus, DashboardTargetType, DashboardUserType, Library, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DashboardWidgetImageUrls } from 'shared/constants/DashboardWidgetImageUrls';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useAvailablePresentations } from 'shared/hooks/presentations/useAvailablePresentations';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nimport { getClassificationAppLinks } from 'apps/subjects/views/classification/ClassificationViewUtils';\n\nconst namespace = 'subjects.twigEntry';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TwigTigtagHubIds {\n twigHubId: string | null;\n tigtagHubId: string | null;\n tigtagJuniorHubId: string | null;\n}\n\nconst { Twig, Tigtag } = HardCoded.Classifications;\n\n/**\n * Maps ContentRegion to Twig and TigTag hub IDs.\n * Note: AU and US regions do not have Twig/TigTag content.\n */\nexport const ContentRegionHubMapping: Record<ContentRegion, TwigTigtagHubIds> = {\n [ContentRegion.UK]: {\n twigHubId: Twig.EnglandSecondary.HUB,\n tigtagHubId: Tigtag.EnglandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.EnglandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.SCOT]: {\n twigHubId: Twig.ScotlandSecondary.HUB,\n tigtagHubId: Tigtag.ScotlandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.ScotlandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.NZ]: {\n twigHubId: Twig.NewZealandSecondary.HUB,\n tigtagHubId: Tigtag.NewZealandPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.NewZealandPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.CA]: {\n twigHubId: Twig.CanadaMiddle.HUB,\n tigtagHubId: Tigtag.CanadaElementary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.CanadaElementary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.GLOBAL]: {\n twigHubId: Twig.InternationalSecondary.HUB,\n tigtagHubId: Tigtag.InternationalPrimary.TIGTAG_HUB,\n tigtagJuniorHubId: Tigtag.InternationalPrimary.TIGTAG_JUNIOR_HUB\n },\n [ContentRegion.AU]: null,\n [ContentRegion.US]: null\n};\n\ninterface TwigHubSectionProps {\n classificationId: string;\n currentUser: CurrentUser;\n config: Config;\n}\n\nfunction TwigHubSection(props: TwigHubSectionProps): JSX.Element {\n const { classificationId, currentUser, config } = props;\n\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasTopicDirectories } = useSettings(null);\n const { activePresentation } = useActivePresentation();\n const { availablePresentations } = useAvailablePresentations();\n const curriculums = useCurriculums();\n const { commonVideoProps } = useCommonVideoProps({\n locationContext: LocationContext.VideoThumbnail\n });\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(classificationId, currentUser?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const dashboard = Flight.useBasicFetch<CuratedDashboard>(\n classification.data &&\n DashboardRequests.getDashboard(\n DashboardUserType.Staff,\n [DashboardStatus.Published],\n `classification:${classificationId}`\n )\n );\n\n const widgets = React.useMemo(\n () => ArrayHelper.sortBy(dashboard.data?.widgets, 'index') ?? [],\n [dashboard.data?.widgets]\n );\n\n function getWidgetContentRequest(\n id: string,\n widgetTypeId: WidgetTypeId,\n template: WidgetTemplate\n ): Flight.Request {\n const params: CuratedWidgetQueryParams = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n DashboardTargetType.Classification\n );\n\n return DashboardRequests.dashboardWidgetContent(id, params, template, presentation.data);\n }\n\n const appLinks = getClassificationAppLinks(\n classification.data,\n DashboardTargetType.Classification,\n {},\n currentUser,\n activePresentation?.vanitySlug,\n availablePresentations\n );\n\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length\n };\n\n if (!dashboard.hasCompleted || !classification.data || !presentation.data || !audiences.hasCompleted)\n return <></>;\n\n if (!widgets.length)\n return <></>;\n\n return (\n <div className='mb-3'>\n <div className='dashboard-spacing-lg'>\n {widgets.map((widget, idx) => (\n <WidgetContainerView\n key={widget.id}\n id={widget.id}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n widgetCollection={DashboardTargetType.Classification}\n dashboardTarget={DashboardTargetType.Classification}\n getContentRequest={getWidgetContentRequest}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n classification={classification.data}\n presentation={presentation.data}\n audiences={audiences.data}\n metadata={widget.metadata}\n widgetIndex={idx}\n lazyLoad={true}\n commonVideoProps={commonVideoProps}\n settings={{ hasTopicDirectories }}\n imageCdnUrl={config?.imageCdnUrl}\n imageUrls={DashboardWidgetImageUrls}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n isTertiaryCustomerWithoutExchange={false}\n curriculums={curriculums}\n analyticsData={analyticsData}\n appLinks={appLinks}\n onToggleFollowClassification={undefined}\n onSubmitFeedback={undefined}\n isPreviewing={false}\n isBot={false}\n contentType={undefined}\n hasTableOfContents={false}\n limitTotalItems={false}\n seeMoreLink={null}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n ))}\n </div>\n </div>\n );\n}\n\ninterface TwigEntryViewProps {\n showError?: boolean;\n}\n\nexport function TwigEntryView(props: TwigEntryViewProps): JSX.Element {\n const [ showErrorPopup, setShowErrorPopup ] = React.useState(props.showError);\n\n useSetPageMetadata({\n title: getPhrase('heading')\n });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const libraries = Flight.useBasicFetch<Library[]>(\n currentUser.data?.isAuthenticated &&\n LibraryRequests.libraries()\n );\n\n const ids = React.useMemo(() => currentUser.data?.contentRegion ?\n ContentRegionHubMapping[currentUser.data.contentRegion] || ContentRegionHubMapping[ContentRegion.UK] :\n null, [currentUser.data?.contentRegion]);\n\n const hasCompleted =\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || libraries.hasCompleted) &&\n config.hasCompleted;\n\n React.useEffect(() => {\n if (!hasCompleted || !!ids)\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME,\n args: [null]\n });\n }, [ hasCompleted, ids ]);\n\n if (!hasCompleted || !ids)\n return <></>;\n\n return (\n <div className='bg-white p-4'>\n <h1 className='mb-4 h2'>{getPhrase('heading')}</h1>\n {props.showError && <div className='alert text-dark bg-light-blue px-3 rounded-3'>\n {getPhrase('errorPopupDescription')}\n </div>}\n <hr className='mt-2'/>\n <TwigHubSection classificationId={ids.twigHubId} currentUser={currentUser.data} config={config.data} />\n\n <TwigHubSection classificationId={ids.tigtagHubId} currentUser={currentUser.data} config={config.data} />\n\n <TwigHubSection classificationId={ids.tigtagJuniorHubId} currentUser={currentUser.data} config={config.data} />\n\n {showErrorPopup &&\n <Popup\n title={getPhrase('errorPopupHeading')}\n closePopup={() => setShowErrorPopup(false)}\n >\n <div className='d-flex flex-column align-items-center text-center'>\n <img\n src={ImageUrls.EmptyStates.TWIG}\n alt={getPhrase('errorPopupHeading')}\n className='mb-3 mx-auto w-75'\n />\n <p className='mb-4'>{getPhrase('errorPopupDescription')}</p>\n </div>\n <PopupButtons>\n <PopupButtons.Cancel text={getPhrase('errorPopupCloseButton')} onClick={() => setShowErrorPopup(false)} />\n </PopupButtons>\n </Popup>\n }\n </div>\n );\n}\n"],"mappings":"g1CAwCM,EAAY,EAAgB,iBAAiB,oBAAS,EAQtD,CAAE,OAAM,UAAW,EAAU,gBAMtB,EAAmE,EAC7E,EAAc,IAAK,CAClB,UAAW,EAAK,iBAAiB,IACjC,YAAa,EAAO,eAAe,WACnC,kBAAmB,EAAO,eAAe,iBAC3C,GACC,EAAc,MAAO,CACpB,UAAW,EAAK,kBAAkB,IAClC,YAAa,EAAO,gBAAgB,WACpC,kBAAmB,EAAO,gBAAgB,iBAC5C,GACC,EAAc,IAAK,CAClB,UAAW,EAAK,oBAAoB,IACpC,YAAa,EAAO,kBAAkB,WACtC,kBAAmB,EAAO,kBAAkB,iBAC9C,GACC,EAAc,IAAK,CAClB,UAAW,EAAK,aAAa,IAC7B,YAAa,EAAO,iBAAiB,WACrC,kBAAmB,EAAO,iBAAiB,iBAC7C,GACC,EAAc,QAAS,CACtB,UAAW,EAAK,uBAAuB,IACvC,YAAa,EAAO,qBAAqB,WACzC,kBAAmB,EAAO,qBAAqB,iBACjD,GACC,EAAc,IAAK,MACnB,EAAc,IAAK,IACtB,EAQA,SAAS,EAAe,EAAyC,CAC/D,GAAM,CAAE,mBAAkB,cAAa,UAAW,EAE5C,CAAE,iBAAgB,uBAAwB,EAAe,EACzD,CAAE,uBAAwB,EAAY,IAAI,EAC1C,CAAE,sBAAuB,EAAsB,EAC/C,CAAE,0BAA2B,EAA0B,EACvD,EAAc,EAAe,EAC7B,CAAE,oBAAqB,EAAoB,CAC/C,gBAAiB,EAAgB,cACnC,CAAC,EAEK,EAAiB,EACrB,EAAuB,eAAe,EAAkB,GAAa,EAAE,CACzE,EAEM,EAAe,EACnB,EAAe,MACf,EAAuB,iBAAiB,EAAe,KAAK,cAAc,CAC5E,EAEM,EAAY,EAChB,EAAe,MACf,EAAiB,0BAA0B,EAAe,KAAK,cAAc,CAC/E,EAEM,EAAY,EAChB,EAAe,MACf,EAAkB,aAChB,EAAkB,MAClB,CAAC,EAAgB,SAAS,EAC1B,kBAAkB,GACpB,CACF,EAEM,EAAA,EAAgB,YACd,EAAY,OAAO,EAAU,MAAM,QAAS,OAAO,GAAK,CAAC,EAC/D,CAAC,EAAU,MAAM,OAAO,CAC1B,EAEA,SAAS,EACP,EACA,EACA,EACgB,CAChB,IAAM,EAAmC,EAAuB,gBAC9D,EACA,EACA,EAAoB,cACtB,EAEA,OAAO,EAAkB,uBAAuB,EAAI,EAAQ,EAAU,EAAa,IAAI,CACzF,CAEA,IAAM,EAAW,EACf,EAAe,KACf,EAAoB,eACpB,CAAC,EACD,EACA,GAAoB,WACpB,CACF,EAEM,EAAgB,CACpB,eAAgB,EAAa,MAAM,GACnC,iBAAkB,EAAa,MAAM,KACrC,wBAAyB,EAAe,MAAM,GAC9C,0BAA2B,EAAe,MAAM,KAChD,+BAAgC,CAAC,CAAC,EAAe,MAAM,WAAW,MAAM,MAC1E,EAQA,MANI,CAAC,EAAU,cAAgB,CAAC,EAAe,MAAQ,CAAC,EAAa,MAAQ,CAAC,EAAU,cAGpF,CAAC,EAAQ,QACJ,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,GAGX,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,gCACZ,EAAQ,KAAK,EAAQ,KACpB,EAAA,EAAA,IAAA,CAAC,EAAD,CAEE,GAAI,EAAO,GACX,KAAM,EAAO,KACb,YAAa,EAAO,YACpB,WAAY,EAAO,WACnB,aAAc,EAAO,SACrB,iBAAkB,EAAoB,eACtC,gBAAiB,EAAoB,eACrC,kBAAmB,EACH,iBACK,sBACrB,eAAgB,EAAe,KAC/B,aAAc,EAAa,KAC3B,UAAW,EAAU,KACrB,SAAU,EAAO,SACjB,YAAa,EACb,SAAU,GACQ,mBAClB,SAAU,CAAE,qBAAoB,EAChC,YAAa,GAAQ,YACrB,UAAW,EACX,kCAAmC,EAAU,UAAU,mBACvD,kCAAmC,GACtB,cACE,gBACL,WACV,6BAA8B,IAAA,GAC9B,iBAAkB,IAAA,GAClB,aAAc,GACd,MAAO,GACP,YAAa,IAAA,GACb,mBAAoB,GACpB,gBAAiB,GACjB,YAAa,KACb,kBAAmB,KACnB,eAAgB,IACjB,EApCM,EAAO,EAoCb,CACF,CACE,CAAA,CACF,CAAA,CAET,CAMA,SAAgB,EAAc,EAAwC,CACpE,GAAM,CAAE,EAAgB,GAAA,EAA4B,SAAS,EAAM,SAAS,EAE5E,EAAmB,CACjB,MAAO,EAAU,SAAS,CAC5B,CAAC,EAED,IAAM,EAAc,EAAkC,EAAa,YAAY,CAAC,EAC1E,EAAS,EAA6B,EAAe,OAAO,CAAC,EAC7D,EAAY,EAChB,EAAY,MAAM,iBAClB,EAAgB,UAAU,CAC5B,EAEM,EAAA,EAAY,YAAc,EAAY,MAAM,cAChD,EAAwB,EAAY,KAAK,gBAAkB,EAAwB,EAAc,IACjG,KAAM,CAAC,EAAY,MAAM,aAAa,CAAC,EAEnC,EACJ,EAAY,eACX,CAAC,EAAY,MAAM,iBAAmB,EAAU,eACjD,EAAO,aAgBT,OAdA,EAAM,cAAgB,CAChB,CAAC,GAAkB,GAGvB,EAAmB,QAAQ,CACzB,YAAa,EAAY,UACzB,OAAQ,EAAQ,UAAU,KAC1B,KAAM,CAAC,IAAI,CACb,CAAC,CACH,EAAG,CAAE,EAAc,CAAI,CAAC,EAEpB,CAAC,GAAgB,CAAC,GACb,EAAA,EAAA,IAAA,CAAA,EAAA,SAAA,CAAI,CAAA,GAGX,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,wBAAf,EACE,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,mBAAW,EAAU,SAAS,CAAM,CAAA,EACjD,EAAM,YAAa,EAAA,EAAA,IAAA,CAAC,MAAD,CAAK,UAAU,wDAChC,EAAU,uBAAuB,CAC/B,CAAA,GACL,EAAA,EAAA,IAAA,CAAC,KAAD,CAAI,UAAU,MAAO,CAAA,GACrB,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,UAAW,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,GAEtG,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,YAAa,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,GAExG,EAAA,EAAA,IAAA,CAAC,EAAD,CAAgB,iBAAkB,EAAI,kBAAmB,YAAa,EAAY,KAAM,OAAQ,EAAO,IAAO,CAAA,EAE7G,IACC,EAAA,EAAA,KAAA,CAAC,EAAD,CACE,MAAO,EAAU,mBAAmB,EACpC,eAAkB,EAAkB,EAAK,WAF3C,EAIE,EAAA,EAAA,KAAA,CAAC,MAAD,CAAK,UAAU,6DAAf,EACE,EAAA,EAAA,IAAA,CAAC,MAAD,CACE,IAAK,EAAU,YAAY,KAC3B,IAAK,EAAU,mBAAmB,EAClC,UAAU,mBACX,CAAA,GACD,EAAA,EAAA,IAAA,CAAC,IAAD,CAAG,UAAU,gBAAQ,EAAU,uBAAuB,CAAK,CAAA,CACxD,KACL,EAAA,EAAA,IAAA,CAAC,EAAD,CAAA,UACE,EAAA,EAAA,IAAA,CAAC,EAAa,OAAd,CAAqB,KAAM,EAAU,uBAAuB,EAAG,YAAe,EAAkB,EAAK,CAAI,CAAA,CAC7F,CAAA,CACT,GAEN,GAET"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{r as t,t as n}from"./D8uRDrkd.chunk.js";import{y as r}from"./BftnFbcr.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u as ee}from"./BX0wDJmp.chunk.js";import{t as u}from"./C1SLt-ar.chunk.js";import{l as d,y as f,z as p}from"./NlCAcBdo.chunk.js";import{r as m}from"./CAs8k4pN.chunk.js";import{a as h,i as g,r as _}from"./Cr6TXzQQ2.chunk.js";import{t as te}from"./oPIkfKWW2.chunk.js";import{n as v,t as y}from"./CmcCVXi32.chunk.js";import{t as ne}from"./CcDvlSWl2.chunk.js";import{n as b}from"./DsXWD-Sn.chunk.js";import{t as x}from"./DdsRCMkN.chunk.js";import{t as S}from"./ZwDDc8Zd.chunk.js";import{t as C}from"./CYEpX3hx.chunk.js";import{t as w}from"./PgzMrOyM.chunk.js";import{t as T}from"./QCFxJYkI2.chunk.js";import{t as re}from"./9LNlP5yJ.chunk.js";import{t as E}from"./Vp01-r6R.chunk.js";import{n as ie,t as ae}from"./A8xLZrSw.chunk.js";import{t as oe}from"./BQKcAczf.chunk.js";import{t as D}from"./D3WOV5RE.chunk.js";import{i as se,t as O}from"./DR9DEoQL.chunk.js";import{t as k}from"./CpP_XziV2.chunk.js";import{t as A}from"./DuIIaGgk2.chunk.js";import{n as j}from"./CpFtf-tI2.chunk.js";import{t as M}from"./DW51cSV_2.chunk.js";import{t as N}from"./Delmxf6C.chunk.js";import{t as P}from"./DFIgRAfX2.chunk.js";import{t as F}from"./BxYKQEUG2.chunk.js";import{t as I}from"./DOnmTMfX.chunk.js";import{t as L}from"./DDJBf9pK.chunk.js";import{t as R}from"./Q0fOIAoj.chunk.js";import{n as z}from"./B-eFTZdx2.chunk.js";import{t as B}from"./DewCxv4i.chunk.js";import{t as V}from"./NVkf8UeY.chunk.js";import{t as H}from"./JPQU1BEu2.chunk.js";import{t as U}from"./BmR4qY-v2.chunk.js";import{t as ce}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{r as t,t as n}from"./D8uRDrkd.chunk.js";import{y as r}from"./BftnFbcr.chunk.js";import{n as i}from"./B785hxeE.chunk.js";import{t as a}from"./CQyJ7YGa.chunk.js";import{t as o}from"./e57H3T-k.chunk.js";import{t as s}from"./C2w0pmFW.chunk.js";import{t as c}from"./wrLrTezN.chunk.js";import{t as l}from"./BXTI9cmX.chunk.js";import{u as ee}from"./BX0wDJmp.chunk.js";import{t as u}from"./C1SLt-ar.chunk.js";import{l as d,y as f,z as p}from"./NlCAcBdo.chunk.js";import{r as m}from"./CAs8k4pN.chunk.js";import{a as h,i as g,r as _}from"./Cr6TXzQQ2.chunk.js";import{t as te}from"./oPIkfKWW2.chunk.js";import{n as v,t as y}from"./CmcCVXi32.chunk.js";import{t as ne}from"./CcDvlSWl2.chunk.js";import{n as b}from"./DsXWD-Sn.chunk.js";import{t as x}from"./DdsRCMkN.chunk.js";import{t as S}from"./ZwDDc8Zd.chunk.js";import{t as C}from"./CYEpX3hx.chunk.js";import{t as w}from"./PgzMrOyM.chunk.js";import{t as T}from"./QCFxJYkI2.chunk.js";import{t as re}from"./9LNlP5yJ.chunk.js";import{t as E}from"./Vp01-r6R.chunk.js";import{n as ie,t as ae}from"./A8xLZrSw.chunk.js";import{t as oe}from"./BQKcAczf.chunk.js";import{t as D}from"./D3WOV5RE.chunk.js";import{i as se,t as O}from"./DR9DEoQL.chunk.js";import{t as k}from"./CpP_XziV2.chunk.js";import{t as A}from"./DuIIaGgk2.chunk.js";import{n as j}from"./CpFtf-tI2.chunk.js";import{t as M}from"./DW51cSV_2.chunk.js";import{t as N}from"./Delmxf6C.chunk.js";import{t as P}from"./DFIgRAfX2.chunk.js";import{t as F}from"./BxYKQEUG2.chunk.js";import{t as I}from"./DOnmTMfX.chunk.js";import{t as L}from"./DDJBf9pK.chunk.js";import{t as R}from"./Q0fOIAoj.chunk.js";import{n as z}from"./B-eFTZdx2.chunk.js";import{t as B}from"./DewCxv4i.chunk.js";import{t as V}from"./NVkf8UeY.chunk.js";import{t as H}from"./JPQU1BEu2.chunk.js";import{t as U}from"./BmR4qY-v2.chunk.js";import{t as ce}from"./CajcIz6S.chunk.js";var W=e(s()),G={link:`_link_1ot6q_1`},K=c(),q=`moviesAndTV.exchangeAndTvLinks`,J=a.encloseNamespace(q);function Y(e){function t(){C.logUserAction({href:e.href},{actionType:p.Click,entity:d.Link,location:f.ExchangeLinksWidget})}let n={backgroundColor:e.backgroundColor};return e.backgroundImage&&(n.backgroundImage=`url(${e.backgroundImage})`),(0,K.jsxs)(`div`,{className:`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${G.link}`,style:n,children:[(0,K.jsx)(`a`,{className:`h6 text-shadow mb-0`,href:e.href,target:`_blank`,onClick:t,children:e.title}),(0,K.jsx)(re,{href:e.href,svg:R,openInNewTab:!0,className:`btn btn-outline-dark d-lg-block d-none`,onClick:t,children:e.cta})]})}function X(e){if(!(!e.products.isLoadingProducts&&e.products.hasProduct(T.Exchange)&&e.exchangeTvProductOption===`exchange_and_tv`))return(0,K.jsx)(K.Fragment,{});let t=e.products.products.data.find(e=>e.id===T.Exchange).url;return(0,K.jsxs)(`div`,{children:[(0,K.jsx)(`div`,{className:`curated-widget-header`,children:(0,K.jsx)(`h2`,{className:`h4 curated-widget-heading`,children:(0,K.jsx)(j,{namespace:q,phrase:`title`})})}),(0,K.jsxs)(`div`,{className:`row`,children:[(0,K.jsx)(`div`,{className:`col-md-6 col-12`,children:(0,K.jsx)(Y,{title:J(`exchangeText`),cta:J(`exchangeCta`),backgroundColor:`#7A76EB`,backgroundImage:e.isPrimary?``:`https://img.clickviewapp.com/v2/thumbnails/7mqa32`,href:t+`/exchange`})}),(0,K.jsx)(`div`,{className:`col-md-6 col-12`,children:(0,K.jsx)(Y,{title:J(`tvText`),cta:J(`tvCta`),backgroundColor:`#40BCC3`,backgroundImage:e.isPrimary?``:`https://img.clickviewapp.com/v2/thumbnails/Eo3L1k`,href:t+`/tv`})})]})]})}var Z=`moviesAndTv.dashboardEmptyState`,le=a.encloseNamespace(Z);function ue(e){let n=e.dashboard?.status===y.Archived;return(0,K.jsxs)(E,{children:[(0,K.jsx)(E.Image,{src:e.imageUrl,altText:le(`info`)}),(0,K.jsx)(E.Heading,{children:(0,K.jsx)(j,{namespace:Z,phrase:`heading`})}),(0,K.jsx)(E.Info,{children:(0,K.jsx)(j,{namespace:Z,phrase:`info`})}),(0,K.jsx)(t,{title:n?a.getPhrase(Z,`archivedCtaTooltip`):``,spanHack:!0,children:(0,K.jsx)(E.Cta,{text:a.getPhrase(Z,`add`),appLink:e.addWidgetApplink?.(),className:`btn btn-dark`,icon:L,disabled:n})})]})}var Q={icon:`_icon_typxc_1`,title:`_title_typxc_6`},$=`moviesAndTv.dashboard`,de=a.encloseNamespace($);function fe(e){let r=u.sortBy(e.dashboard?.widgets,`index`),{hasProduct:a}=D(),o=e.hasPermissions(i.Exchange)&&a(T.Exchange),s=e.isReadonly?r:r.filter(e=>e.templateId!==h.HeroBannerSmall&&e.widgetId!==g.Blurb||o);function c(t,n,r){let i=_.getWidgetParams(n,r,_.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,i,r)}let l=e.isReadonly&&!s?.length;return(0,K.jsxs)(`div`,{className:`px-4`,children:[(0,K.jsxs)(`div`,{className:`d-flex align-items-center`,children:[(0,K.jsx)(`div`,{style:{backgroundImage:`url(${e.moviesAndTvIconUrl})`},className:`${Q.icon}`}),(0,K.jsx)(`h1`,{className:`h2 ${Q.title} d-inline-block me-2`,children:(0,K.jsx)(j,{namespace:$,phrase:`heading`})}),e.showPreviewingTooltip&&(0,K.jsx)(`div`,{className:`pt-1`,children:(0,K.jsx)(t,{title:de(`tooltip`),spanHack:!0,children:(0,K.jsx)(n,{svg:F})})})]}),(0,K.jsx)(`hr`,{className:`mt-2`}),(0,K.jsx)(X,{exchangeTvProductOption:e.settings?.exchangeTvProductOption,products:e.products,isPrimary:+m[e.presentation?.learningLevel]===m.Level_1}),s.map((t,n)=>(0,K.jsx)(ce,{widgetCollection:v.MoviesAndTv,settingsHash:e.settings,id:t.id,getContentRequest:c,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,appLinks:e.widgetAppLinks,isScrollToTargetWidget:e?.scrollToWidgetId===t.id,widgetTypeId:t.widgetId,lazyLoad:e.lazyLoad,dashboardTarget:v.MoviesAndTv,widgetIndex:n,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,isPreviewing:e.isReadonly,settings:{hasTopicDirectories:e.settings?.hasTopicDirectories},imageCdnUrl:e.commonVideoProps.imageCdnUrl,commonVideoProps:e.commonVideoProps,classification:null,hasTableOfContents:!1,isEditing:!1,setIsEmpty:()=>{},seeMoreLink:void 0,onClickRemoveItem:null,badgeComponent:null},t.id)),l&&(0,K.jsx)(ue,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard})]})}var pe=a.encloseNamespace(`moviesAndTV.moviesAndTV`);function me(e,t,n){return{partner:k.getPartnerDashboardAppLink,partnerHome:k.getPartnerHomeAppLink,rating:(e,t)=>({application:l.SEARCH,action:x.Search.HOME,params:{moviesAndTv:!0,rating:P.getFrontendParamValue([u.first(t),e])}}),classification:e=>N.getAppLink(e,{moviesAndTv:!0},n),videoType:(n,r)=>M.getAppLink(n,{...r,moviesAndTv:!0,context:b.Widget,includeContext:e?.isAuthenticated},t),series:e=>A.getSeriesAppLink(e,{mtv:!0},t),company:e=>({application:l.MOVIES_AND_TV,action:x.MoviesAndTv.COMPANY_DASHBOARD,args:[t,e.id,o.slugify(e.name)]}),latestReleases:()=>null,allTopics:()=>null,classificationLatestReleases:()=>null,classificationDirectory:()=>null,discover:()=>null,widgetWizard:()=>null,widgetVideoList:()=>null,watchHistory:()=>null}}function he(e){let{hasPermissions:t,hasLocalPermissions:n,isLoaded:a}=oe(),o=D(),s=ne(null),{availablePresentations:c}=I(),{activePresentation:u}=S(),d=ee(te.currentUser()),{applinks:p,requestAccessApplink:m,isUpselling:h}=H({applinks:me(d.data,e.presentationSlug,c)}),{commonVideoProps:g}=U({locationContext:f.VideoThumbnail,mtv:!0,subTextAppLink:h(u)?m:null}),_=t(i.ViewMoviesTv),{dashboard:y,presentation:b}=V({targetType:v.MoviesAndTv,queryParams:e.queryParams});return z({app:`movies-and-tv`}),ae(ie.getDefaultMetadata({title:b?.name,phraseContext:{phraseHandler:pe,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:O.getCanonicalLink(),hrefLang:O.getStaticRouteHrefLang(b?.learningLevel,()=>({application:l.MOVIES_AND_TV,action:x.MoviesAndTv.HOME,args:[e.presentationSlug]}),se),allowIndexing:O.allowIndexing()})),W.useEffect(()=>{_||!a||r.trigger({application:l.DASHBOARD,action:x.Dashboard.HOME,args:[e.presentationSlug]},{replace:!0})},[_,a]),(0,K.jsx)(K.Fragment,{children:(0,K.jsx)(fe,{dashboard:y.data,getWidgetContentRequest:B.dashboardWidgetContent,presentation:b,showPreviewingTooltip:d.data?.isAuthenticated&&!t(i.StudentExperience),moviesAndTvIconUrl:w.MoviesAndTv.DASHBOARD_ICON,widgetAppLinks:p,hasPermissions:t,hasLocalPermissions:n,settings:s,products:o,commonVideoProps:g})})}export{he as MoviesAndTvView};
|
|
2
|
+
//# sourceMappingURL=H511PXuG.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CPBvCqVK.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/movies-and-tv/components/exchange-and-tv-links/exchange-and-tv-links.module.scss","../../../../libs/shared/src/apps/movies-and-tv/components/exchange-and-tv-links/ExchangeAndTvLinks.tsx","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/empty-state/MoviesAndTvDashboardEmptyState.tsx","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/movies-and-tv-dashboard.module.scss","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/MoviesAndTvDashboard.tsx","../../src/apps/movies-and-tv/views/movies-and-tv-view/MoviesAndTvView.tsx"],"sourcesContent":[":local {\n .link {\n background-size: cover;\n background-position: 50% 50%;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UseProductsResponse } from 'libs/shared/hooks/UseProducts';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { ExchangeTvProductOption } from 'libs/shared/interfaces/ExchangeTvProductOption';\n\nimport styles from './exchange-and-tv-links.module.scss';\n\nconst namespace = 'moviesAndTV.exchangeAndTvLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LinkProps {\n backgroundImage: string;\n backgroundColor: string;\n title: string;\n cta: string;\n href: string;\n}\n\nfunction Link(props: LinkProps): JSX.Element {\n function onClick(): void {\n AnalyticsHelper.logUserAction({ href: props.href }, {\n actionType: UserAction.Click,\n entity: EntityType.Link,\n location: LocationContext.ExchangeLinksWidget\n });\n }\n\n const style: React.CSSProperties = {\n backgroundColor: props.backgroundColor\n };\n\n if (props.backgroundImage)\n style.backgroundImage = `url(${props.backgroundImage})`;\n\n return (\n <div\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link}`}\n style={style}\n >\n <a className='h6 text-shadow mb-0' href={props.href} target='_blank' onClick={onClick}>{props.title}</a>\n <IconButton\n href={props.href}\n svg={NewWindowSvg}\n openInNewTab\n className='btn btn-outline-dark d-lg-block d-none'\n onClick={onClick}\n >\n {props.cta}\n </IconButton>\n </div>\n );\n}\n\ninterface ExchangeAndTvLinksProps {\n isPrimary: boolean;\n exchangeTvProductOption: ExchangeTvProductOption;\n products: UseProductsResponse;\n}\n\nexport function ExchangeAndTvLinks(props: ExchangeAndTvLinksProps): JSX.Element {\n const shouldShow = (\n !props.products.isLoadingProducts &&\n props.products.hasProduct(ProductId.Exchange) &&\n props.exchangeTvProductOption === 'exchange_and_tv'\n );\n\n if (!shouldShow)\n return <></>;\n\n const exchangeUrl = props.products.products.data.find(p => p.id === ProductId.Exchange).url;\n\n return (\n <div>\n <div className='curated-widget-header'>\n <h2 className='h4 curated-widget-heading'>\n <Text namespace={namespace} phrase='title' />\n </h2>\n </div>\n <div className='row'>\n <div className='col-md-6 col-12'>\n <Link\n title={getPhrase('exchangeText')}\n cta={getPhrase('exchangeCta')}\n backgroundColor='#7A76EB'\n backgroundImage={props.isPrimary ? '' : 'https://img.clickviewapp.com/v2/thumbnails/7mqa32'}\n href={exchangeUrl + '/exchange'}\n />\n </div>\n <div className='col-md-6 col-12'>\n <Link\n title={getPhrase('tvText')}\n cta={getPhrase('tvCta')}\n backgroundColor='#40BCC3'\n backgroundImage={props.isPrimary ? '' : 'https://img.clickviewapp.com/v2/thumbnails/Eo3L1k'}\n href={exchangeUrl + '/tv'}\n />\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'moviesAndTv.dashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MoviesAndTvDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function MoviesAndTvDashboardEmptyState(props: MoviesAndTvDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}\n",":local {\n .icon {\n width: 2.875rem;\n height: 3.0625rem;\n background-size: cover;\n }\n .title {\n margin-top: 1rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExchangeAndTvLinks } from 'libs/shared/apps/movies-and-tv/components/exchange-and-tv-links/ExchangeAndTvLinks';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllMoviesAndTvWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useProducts, UseProductsResponse } from 'libs/shared/hooks/UseProducts';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { InfoSvg } from 'libs/shared/images/svg/status/InfoSvg';\nimport { CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MoviesAndTvDashboardEmptyState } from './empty-state/MoviesAndTvDashboardEmptyState';\n\nimport styles from './movies-and-tv-dashboard.module.scss';\n\nconst namespace = 'moviesAndTv.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface MoviesAndDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n audiences?: PresentationAudience[];\n emptyImageUrl?: string;\n moviesAndTvIconUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllMoviesAndTvWidgetTemplates['appLinks'] & {\n widgetWizard: () => Core.AppLink\n };\n scrollToWidgetId?: string;\n isReadonly?: boolean;\n lazyLoad?: boolean;\n showPreviewingTooltip?: boolean;\n settings?: SettingsHash;\n products?: UseProductsResponse;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function MoviesAndTvDashboard(props: MoviesAndDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const { hasProduct } = useProducts();\n\n // todo replace with backend filtering widgets by permissions and products\n const hasExchange = props.hasPermissions(PermissionName.Exchange) && hasProduct(ProductId.Exchange);\n const filteredWidgets = props.isReadonly ?\n // in Curator every widget is visible\n widgets :\n widgets.filter(w =>\n (w.templateId !== WidgetTemplate.HeroBannerSmall && w.widgetId !== WidgetTypeId.Blurb)\n || hasExchange);\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = props.isReadonly && !filteredWidgets?.length;\n\n return (\n <div className='px-4'>\n <div className='d-flex align-items-center'>\n <div style={{ backgroundImage: `url(${props.moviesAndTvIconUrl})` }} className={`${styles.icon}`}></div>\n <h1 className={`h2 ${styles.title} d-inline-block me-2`}>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n {props.showPreviewingTooltip &&\n <div className='pt-1'>\n <Tooltip title={getPhrase('tooltip')} spanHack>\n <SvgContainer svg={InfoSvg} />\n </Tooltip>\n </div>\n }\n </div>\n <hr className='mt-2'/>\n <ExchangeAndTvLinks\n exchangeTvProductOption={props.settings?.exchangeTvProductOption}\n products={props.products}\n isPrimary={+PresentationLearningLevel[props.presentation?.learningLevel] === PresentationLearningLevel.Level_1}\n />\n {filteredWidgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.MoviesAndTv}\n settingsHash={props.settings}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.MoviesAndTv}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n settings={{\n hasTopicDirectories: props.settings?.hasTopicDirectories\n }}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n // TODO: Ideally we don't have to do this\n classification={null}\n hasTableOfContents={false}\n isEditing={false}\n setIsEmpty={() => {}}\n seeMoreLink={undefined}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n );\n })}\n\n {showEmptyState && (\n <MoviesAndTvDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { MoviesAndDashboardProps, MoviesAndTvDashboard } from 'libs/shared/apps/movies-and-tv/components/movies-and-tv-dashboard/MoviesAndTvDashboard';\nimport { RatingFilterHelper } from 'libs/shared/apps/search/utils/RatingFilterHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Company, CurrentUser, DashboardTargetType, Presentation, Rating, Series, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useAvailablePresentations } from 'shared/hooks/presentations/useAvailablePresentations';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useRequestAccess } from 'shared/hooks/useRequestAccess';\nimport { DashboardViewQueryParams } from 'shared/interfaces/query-params/DashboardViewQueryParams';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { ContentPartnerAppLinkHelper } from 'shared/utils/ContentPartnerAppLinkHelper';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { REGIONAL_MTV_INDEXABILITY } from 'shared/utils/LiteRegionHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'moviesAndTV.moviesAndTV';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getMoviesAndTvAppLinks(\n currentUser: CurrentUser,\n presentationSlug: string | null,\n availablePresentations: Presentation[]\n): MoviesAndDashboardProps['widgetAppLinks'] {\n return {\n partner: ContentPartnerAppLinkHelper.getPartnerDashboardAppLink,\n partnerHome: ContentPartnerAppLinkHelper.getPartnerHomeAppLink,\n rating: (rating: Rating, ratings: Rating[]) => {\n return {\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n moviesAndTv: true,\n rating: RatingFilterHelper.getFrontendParamValue([ ArrayHelper.first(ratings), rating ])\n }\n };\n },\n classification: (classification?: Classification) => (\n ClassificationAppLinkHelper.getAppLink(classification, { moviesAndTv: true }, availablePresentations)\n ),\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n moviesAndTv: true,\n context: RelatedVideosContext.Widget,\n includeContext: currentUser?.isAuthenticated\n }, presentationSlug)\n ),\n\n series: (series: Series) => SeriesAppLinkHelper.getSeriesAppLink(series, { mtv: true }, presentationSlug),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ presentationSlug, company.id, TextHelper.slugify(company.name) ]\n }),\n \n // TODO: Find a nice way around having to pass these in\n latestReleases: () => null,\n allTopics: () => null,\n classificationLatestReleases: () => null,\n classificationDirectory: () => null,\n discover: () => null,\n widgetWizard: () => null,\n widgetVideoList: () => null,\n watchHistory: () => null\n };\n}\n\nexport interface MoviesAndTvProps {\n presentationSlug: string | null;\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function MoviesAndTvView(props: MoviesAndTvProps): JSX.Element {\n const { hasPermissions, hasLocalPermissions, isLoaded: isPermissionLoaded } = usePermissions();\n const products = useProducts();\n const settings = useSettings(null);\n const { availablePresentations } = useAvailablePresentations();\n const { activePresentation } = useActivePresentation();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { applinks: widgetAppLinks, requestAccessApplink, isUpselling } = useRequestAccess({\n applinks: getMoviesAndTvAppLinks(currentUser.data, props.presentationSlug, availablePresentations)\n });\n\n const { commonVideoProps } = useCommonVideoProps({\n locationContext: LocationContext.VideoThumbnail,\n mtv: true,\n subTextAppLink: isUpselling(activePresentation) ? requestAccessApplink : null\n });\n\n const hasMoviesAndTv = hasPermissions(PermissionName.ViewMoviesTv);\n\n const {\n dashboard,\n presentation\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.MoviesAndTv,\n queryParams: props.queryParams\n });\n\n useDeepLinks({ app: 'movies-and-tv' });\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: presentation?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n presentation?.learningLevel,\n () => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.HOME,\n args: [props.presentationSlug]\n }),\n REGIONAL_MTV_INDEXABILITY\n ),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n React.useEffect(() => {\n if (hasMoviesAndTv || !isPermissionLoaded)\n return;\n Core.AppLinkHelper.trigger(\n { application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME, args: [props.presentationSlug]},\n { replace: true }\n );\n }, [ hasMoviesAndTv, isPermissionLoaded ]);\n\n return (\n <>\n <MoviesAndTvDashboard\n dashboard={dashboard.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n presentation={presentation}\n showPreviewingTooltip={currentUser.data?.isAuthenticated && !hasPermissions(PermissionName.StudentExperience)}\n moviesAndTvIconUrl={ImageUrls.MoviesAndTv.DASHBOARD_ICON}\n widgetAppLinks={widgetAppLinks}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n settings={settings}\n products={products}\n commonVideoProps={commonVideoProps}\n />\n </>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"H511PXuG.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/movies-and-tv/components/exchange-and-tv-links/exchange-and-tv-links.module.scss","../../../../libs/shared/src/apps/movies-and-tv/components/exchange-and-tv-links/ExchangeAndTvLinks.tsx","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/empty-state/MoviesAndTvDashboardEmptyState.tsx","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/movies-and-tv-dashboard.module.scss","../../../../libs/shared/src/apps/movies-and-tv/components/movies-and-tv-dashboard/MoviesAndTvDashboard.tsx","../../src/apps/movies-and-tv/views/movies-and-tv-view/MoviesAndTvView.tsx"],"sourcesContent":[":local {\n .link {\n background-size: cover;\n background-position: 50% 50%;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UseProductsResponse } from 'libs/shared/hooks/UseProducts';\nimport { NewWindowSvg } from 'libs/shared/images/svg/actions/NewWindowSvg';\nimport { ExchangeTvProductOption } from 'libs/shared/interfaces/ExchangeTvProductOption';\n\nimport styles from './exchange-and-tv-links.module.scss';\n\nconst namespace = 'moviesAndTV.exchangeAndTvLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LinkProps {\n backgroundImage: string;\n backgroundColor: string;\n title: string;\n cta: string;\n href: string;\n}\n\nfunction Link(props: LinkProps): JSX.Element {\n function onClick(): void {\n AnalyticsHelper.logUserAction({ href: props.href }, {\n actionType: UserAction.Click,\n entity: EntityType.Link,\n location: LocationContext.ExchangeLinksWidget\n });\n }\n\n const style: React.CSSProperties = {\n backgroundColor: props.backgroundColor\n };\n\n if (props.backgroundImage)\n style.backgroundImage = `url(${props.backgroundImage})`;\n\n return (\n <div\n className={`d-flex justify-content-between align-items-center text-white p-3 mb-3 rounded-3 ${styles.link}`}\n style={style}\n >\n <a className='h6 text-shadow mb-0' href={props.href} target='_blank' onClick={onClick}>{props.title}</a>\n <IconButton\n href={props.href}\n svg={NewWindowSvg}\n openInNewTab\n className='btn btn-outline-dark d-lg-block d-none'\n onClick={onClick}\n >\n {props.cta}\n </IconButton>\n </div>\n );\n}\n\ninterface ExchangeAndTvLinksProps {\n isPrimary: boolean;\n exchangeTvProductOption: ExchangeTvProductOption;\n products: UseProductsResponse;\n}\n\nexport function ExchangeAndTvLinks(props: ExchangeAndTvLinksProps): JSX.Element {\n const shouldShow = (\n !props.products.isLoadingProducts &&\n props.products.hasProduct(ProductId.Exchange) &&\n props.exchangeTvProductOption === 'exchange_and_tv'\n );\n\n if (!shouldShow)\n return <></>;\n\n const exchangeUrl = props.products.products.data.find(p => p.id === ProductId.Exchange).url;\n\n return (\n <div>\n <div className='curated-widget-header'>\n <h2 className='h4 curated-widget-heading'>\n <Text namespace={namespace} phrase='title' />\n </h2>\n </div>\n <div className='row'>\n <div className='col-md-6 col-12'>\n <Link\n title={getPhrase('exchangeText')}\n cta={getPhrase('exchangeCta')}\n backgroundColor='#7A76EB'\n backgroundImage={props.isPrimary ? '' : 'https://img.clickviewapp.com/v2/thumbnails/7mqa32'}\n href={exchangeUrl + '/exchange'}\n />\n </div>\n <div className='col-md-6 col-12'>\n <Link\n title={getPhrase('tvText')}\n cta={getPhrase('tvCta')}\n backgroundColor='#40BCC3'\n backgroundImage={props.isPrimary ? '' : 'https://img.clickviewapp.com/v2/thumbnails/Eo3L1k'}\n href={exchangeUrl + '/tv'}\n />\n </div>\n </div>\n </div>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'moviesAndTv.dashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MoviesAndTvDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function MoviesAndTvDashboardEmptyState(props: MoviesAndTvDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}\n",":local {\n .icon {\n width: 2.875rem;\n height: 3.0625rem;\n background-size: cover;\n }\n .title {\n margin-top: 1rem;\n }\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ExchangeAndTvLinks } from 'libs/shared/apps/movies-and-tv/components/exchange-and-tv-links/ExchangeAndTvLinks';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllMoviesAndTvWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useProducts, UseProductsResponse } from 'libs/shared/hooks/UseProducts';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { InfoSvg } from 'libs/shared/images/svg/status/InfoSvg';\nimport { CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { MoviesAndTvDashboardEmptyState } from './empty-state/MoviesAndTvDashboardEmptyState';\n\nimport styles from './movies-and-tv-dashboard.module.scss';\n\nconst namespace = 'moviesAndTv.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface MoviesAndDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n audiences?: PresentationAudience[];\n emptyImageUrl?: string;\n moviesAndTvIconUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllMoviesAndTvWidgetTemplates['appLinks'] & {\n widgetWizard: () => Core.AppLink\n };\n scrollToWidgetId?: string;\n isReadonly?: boolean;\n lazyLoad?: boolean;\n showPreviewingTooltip?: boolean;\n settings?: SettingsHash;\n products?: UseProductsResponse;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function MoviesAndTvDashboard(props: MoviesAndDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const { hasProduct } = useProducts();\n\n // todo replace with backend filtering widgets by permissions and products\n const hasExchange = props.hasPermissions(PermissionName.Exchange) && hasProduct(ProductId.Exchange);\n const filteredWidgets = props.isReadonly ?\n // in Curator every widget is visible\n widgets :\n widgets.filter(w =>\n (w.templateId !== WidgetTemplate.HeroBannerSmall && w.widgetId !== WidgetTypeId.Blurb)\n || hasExchange);\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = props.isReadonly && !filteredWidgets?.length;\n\n return (\n <div className='px-4'>\n <div className='d-flex align-items-center'>\n <div style={{ backgroundImage: `url(${props.moviesAndTvIconUrl})` }} className={`${styles.icon}`}></div>\n <h1 className={`h2 ${styles.title} d-inline-block me-2`}>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n {props.showPreviewingTooltip &&\n <div className='pt-1'>\n <Tooltip title={getPhrase('tooltip')} spanHack>\n <SvgContainer svg={InfoSvg} />\n </Tooltip>\n </div>\n }\n </div>\n <hr className='mt-2'/>\n <ExchangeAndTvLinks\n exchangeTvProductOption={props.settings?.exchangeTvProductOption}\n products={props.products}\n isPrimary={+PresentationLearningLevel[props.presentation?.learningLevel] === PresentationLearningLevel.Level_1}\n />\n {filteredWidgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.MoviesAndTv}\n settingsHash={props.settings}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.MoviesAndTv}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n settings={{\n hasTopicDirectories: props.settings?.hasTopicDirectories\n }}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n // TODO: Ideally we don't have to do this\n classification={null}\n hasTableOfContents={false}\n isEditing={false}\n setIsEmpty={() => {}}\n seeMoreLink={undefined}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n );\n })}\n\n {showEmptyState && (\n <MoviesAndTvDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </div>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { MoviesAndDashboardProps, MoviesAndTvDashboard } from 'libs/shared/apps/movies-and-tv/components/movies-and-tv-dashboard/MoviesAndTvDashboard';\nimport { RatingFilterHelper } from 'libs/shared/apps/search/utils/RatingFilterHelper';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classification, Company, CurrentUser, DashboardTargetType, Presentation, Rating, Series, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useAvailablePresentations } from 'shared/hooks/presentations/useAvailablePresentations';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useRequestAccess } from 'shared/hooks/useRequestAccess';\nimport { DashboardViewQueryParams } from 'shared/interfaces/query-params/DashboardViewQueryParams';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { ContentPartnerAppLinkHelper } from 'shared/utils/ContentPartnerAppLinkHelper';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { REGIONAL_MTV_INDEXABILITY } from 'shared/utils/LiteRegionHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'moviesAndTV.moviesAndTV';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getMoviesAndTvAppLinks(\n currentUser: CurrentUser,\n presentationSlug: string | null,\n availablePresentations: Presentation[]\n): MoviesAndDashboardProps['widgetAppLinks'] {\n return {\n partner: ContentPartnerAppLinkHelper.getPartnerDashboardAppLink,\n partnerHome: ContentPartnerAppLinkHelper.getPartnerHomeAppLink,\n rating: (rating: Rating, ratings: Rating[]) => {\n return {\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: {\n moviesAndTv: true,\n rating: RatingFilterHelper.getFrontendParamValue([ ArrayHelper.first(ratings), rating ])\n }\n };\n },\n classification: (classification?: Classification) => (\n ClassificationAppLinkHelper.getAppLink(classification, { moviesAndTv: true }, availablePresentations)\n ),\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n moviesAndTv: true,\n context: RelatedVideosContext.Widget,\n includeContext: currentUser?.isAuthenticated\n }, presentationSlug)\n ),\n\n series: (series: Series) => SeriesAppLinkHelper.getSeriesAppLink(series, { mtv: true }, presentationSlug),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ presentationSlug, company.id, TextHelper.slugify(company.name) ]\n }),\n \n // TODO: Find a nice way around having to pass these in\n latestReleases: () => null,\n allTopics: () => null,\n classificationLatestReleases: () => null,\n classificationDirectory: () => null,\n discover: () => null,\n widgetWizard: () => null,\n widgetVideoList: () => null,\n watchHistory: () => null\n };\n}\n\nexport interface MoviesAndTvProps {\n presentationSlug: string | null;\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function MoviesAndTvView(props: MoviesAndTvProps): JSX.Element {\n const { hasPermissions, hasLocalPermissions, isLoaded: isPermissionLoaded } = usePermissions();\n const products = useProducts();\n const settings = useSettings(null);\n const { availablePresentations } = useAvailablePresentations();\n const { activePresentation } = useActivePresentation();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const { applinks: widgetAppLinks, requestAccessApplink, isUpselling } = useRequestAccess({\n applinks: getMoviesAndTvAppLinks(currentUser.data, props.presentationSlug, availablePresentations)\n });\n\n const { commonVideoProps } = useCommonVideoProps({\n locationContext: LocationContext.VideoThumbnail,\n mtv: true,\n subTextAppLink: isUpselling(activePresentation) ? requestAccessApplink : null\n });\n\n const hasMoviesAndTv = hasPermissions(PermissionName.ViewMoviesTv);\n\n const {\n dashboard,\n presentation\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.MoviesAndTv,\n queryParams: props.queryParams\n });\n\n useDeepLinks({ app: 'movies-and-tv' });\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: presentation?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n presentation?.learningLevel,\n () => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.HOME,\n args: [props.presentationSlug]\n }),\n REGIONAL_MTV_INDEXABILITY\n ),\n allowIndexing: SeoHelper.allowIndexing()\n }));\n\n React.useEffect(() => {\n if (hasMoviesAndTv || !isPermissionLoaded)\n return;\n Core.AppLinkHelper.trigger(\n { application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME, args: [props.presentationSlug]},\n { replace: true }\n );\n }, [ hasMoviesAndTv, isPermissionLoaded ]);\n\n return (\n <>\n <MoviesAndTvDashboard\n dashboard={dashboard.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n presentation={presentation}\n showPreviewingTooltip={currentUser.data?.isAuthenticated && !hasPermissions(PermissionName.StudentExperience)}\n moviesAndTvIconUrl={ImageUrls.MoviesAndTv.DASHBOARD_ICON}\n widgetAppLinks={widgetAppLinks}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n settings={settings}\n products={products}\n commonVideoProps={commonVideoProps}\n />\n </>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{o as e}from"./DAXXjFlN.chunk.js";import{r as t}from"./D8uRDrkd.chunk.js";import{_ as n}from"./BftnFbcr.chunk.js";import{t as r}from"./CQyJ7YGa.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{u as s}from"./BX0wDJmp.chunk.js";import{n as c}from"./BVnMI-dl.chunk.js";import{t as l}from"./C1SLt-ar.chunk.js";import{l as u,y as d}from"./NlCAcBdo.chunk.js";import{t as f}from"./RjGIOTdP.chunk.js";import{t as p}from"./DTGfiG8Y.chunk.js";import{r as m}from"./Cr6TXzQQ2.chunk.js";import{n as h,t as g}from"./CmcCVXi32.chunk.js";import{t as _}from"./Dat7ugzw2.chunk.js";import{t as v}from"./DdsRCMkN.chunk.js";import{t as y}from"./ZwDDc8Zd.chunk.js";import{t as b}from"./BWaKdG0l.chunk.js";import{t as ee}from"./PgzMrOyM.chunk.js";import{t as x}from"./Vp01-r6R.chunk.js";import{n as S,t as te}from"./A8xLZrSw.chunk.js";import{t as C}from"./DR9DEoQL.chunk.js";import{n as w,t as T}from"./CpFtf-tI2.chunk.js";import{t as E}from"./DDJBf9pK.chunk.js";import{r as D,t as O}from"./C5uTRLOC2.chunk.js";import{t as k}from"./DewCxv4i.chunk.js";import{t as A}from"./DMaQV7L2.chunk.js";import{t as j}from"./NVkf8UeY.chunk.js";import{t as M}from"./M21xrW6i2.chunk.js";import{t as N}from"./D7UO1XFN2.chunk.js";import{t as P}from"./tnBD84bg2.chunk.js";import{t as F}from"./C2pEjcxD.chunk.js";import{n as I,t as L}from"./BmR4qY-v2.chunk.js";import{n as R,t as z}from"./y3q_PHh_.chunk.js";import{r as B,t as V}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{o as e}from"./DAXXjFlN.chunk.js";import{r as t}from"./D8uRDrkd.chunk.js";import{_ as n}from"./BftnFbcr.chunk.js";import{t as r}from"./CQyJ7YGa.chunk.js";import{t as i}from"./C2w0pmFW.chunk.js";import{t as a}from"./wrLrTezN.chunk.js";import{t as o}from"./BXTI9cmX.chunk.js";import{u as s}from"./BX0wDJmp.chunk.js";import{n as c}from"./BVnMI-dl.chunk.js";import{t as l}from"./C1SLt-ar.chunk.js";import{l as u,y as d}from"./NlCAcBdo.chunk.js";import{t as f}from"./RjGIOTdP.chunk.js";import{t as p}from"./DTGfiG8Y.chunk.js";import{r as m}from"./Cr6TXzQQ2.chunk.js";import{n as h,t as g}from"./CmcCVXi32.chunk.js";import{t as _}from"./Dat7ugzw2.chunk.js";import{t as v}from"./DdsRCMkN.chunk.js";import{t as y}from"./ZwDDc8Zd.chunk.js";import{t as b}from"./BWaKdG0l.chunk.js";import{t as ee}from"./PgzMrOyM.chunk.js";import{t as x}from"./Vp01-r6R.chunk.js";import{n as S,t as te}from"./A8xLZrSw.chunk.js";import{t as C}from"./DR9DEoQL.chunk.js";import{n as w,t as T}from"./CpFtf-tI2.chunk.js";import{t as E}from"./DDJBf9pK.chunk.js";import{r as D,t as O}from"./C5uTRLOC2.chunk.js";import{t as k}from"./DewCxv4i.chunk.js";import{t as A}from"./DMaQV7L2.chunk.js";import{t as j}from"./NVkf8UeY.chunk.js";import{t as M}from"./M21xrW6i2.chunk.js";import{t as N}from"./D7UO1XFN2.chunk.js";import{t as P}from"./tnBD84bg2.chunk.js";import{t as F}from"./C2pEjcxD.chunk.js";import{n as I,t as L}from"./BmR4qY-v2.chunk.js";import{n as R,t as z}from"./y3q_PHh_.chunk.js";import{r as B,t as V}from"./CajcIz6S.chunk.js";import{t as H}from"./CtWAorP42.chunk.js";import{t as U}from"./CyLi05602.chunk.js";var W=e(i());function G(e){return e?c.pick(e,[`a`,`dashboardId`]):{}}var K=a(),q=`streamable.companyDashboardEmptyState`,J=r.encloseNamespace(q);function Y(e){let n=e.dashboard?.status===g.Archived;return(0,K.jsx)(T.Provider,{value:q,children:(0,K.jsxs)(x,{children:[(0,K.jsx)(x.Image,{src:e.imageUrl,altText:J(`headingForStreamable`)}),e.isReadOnly?(0,K.jsxs)(K.Fragment,{children:[(0,K.jsx)(x.Heading,{children:(0,K.jsx)(w,{namespace:q,phrase:`headingForCurator`})}),(0,K.jsx)(x.Info,{children:(0,K.jsx)(w,{namespace:q,phrase:`info`})}),(0,K.jsx)(t,{title:n?r.getPhrase(q,`archivedCtaTooltip`):``,spanHack:!0,children:(0,K.jsx)(x.Cta,{text:r.getPhrase(q,`add`),appLink:e.addWidgetApplink?.(),className:`btn btn-dark`,icon:E,disabled:n})})]}):(0,K.jsx)(x.Heading,{children:(0,K.jsx)(w,{phrase:`headingForStreamable`})})]})})}var X=r.encloseNamespace(`streamable.companyDashboard`);function Z(e){let t=l.sortBy(e.dashboard?.widgets,`index`),n=W.useMemo(()=>t.reduce((e,t)=>(e[t.id]=!1,e),{}),[t?.length]),[r,i]=W.useState(n);function a(t,n,r){let i=m.getWidgetParams(n,r,m.getDashboardTargetType(e.dashboard),e.activeAudiences?.map(e=>e.masterId));return e.getWidgetContentRequest(t,i,r)}let o=W.useCallback((e,t)=>{if(r[e]===t)return;let n={...r,[e]:t};i(n)},[r,t]);function s(){return!t?.length||Object.values(r).every(e=>!!e)}let c=s();return(0,K.jsxs)(K.Fragment,{children:[!!t.length&&(0,K.jsxs)(K.Fragment,{children:[e.company?(0,K.jsx)(z,{heading:e.company.name,logo:e.company.logo,logoBgColour:e.company.metadata?.colour,alignLogoLeft:!!e.company.logo||!!e.company.cover,banner:e.company.banner,imageCdnUrl:e.commonVideoProps.imageCdnUrl,blockColourClass:O(e.company.name,D),actions:e.getBannerActions?.(),actionsDropdownClassName:`btn btn-outline-dark`}):(0,K.jsx)(R,{}),(0,K.jsxs)(`div`,{className:`d-flex flex-column row-gap-3 py-3 mb-3 border-bottom`,children:[(0,K.jsx)(F,{breadcrumbs:e.getBreadcrumbs?.()}),(0,K.jsx)(U,{audiences:e.audiences,activeAudiences:e.activeAudiences,disabled:e.isReadOnly,appLink:e.widgetAppLinks?.audience()})]}),e.company.description&&(0,K.jsx)(`div`,{className:`mb-5`,children:(0,K.jsx)(B,{id:e.company?.id,question:X(`aboutUs`),answer:P.linkifyText(e.company.description),isBot:e.isBot,analyticsOptions:{entity:u.Company,location:d.Dashboard}})}),(0,K.jsx)(`div`,{children:t.map(t=>(0,K.jsx)(V,{widgetCollection:h.Company,dashboardTarget:h.Company,id:t.id,getContentRequest:a,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,setIsEmpty:o,appLinks:e.widgetAppLinks,isScrollToTargetWidget:e?.scrollToWidgetId===t.id,widgetTypeId:t.widgetId,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,isPreviewing:e.isReadOnly,lazyLoad:e.lazyLoad,contentType:_.Livestream,imageCdnUrl:e.commonVideoProps.imageCdnUrl,commonVideoProps:e.commonVideoProps,classification:null,seeMoreLink:void 0,hasTableOfContents:!1,onClickRemoveItem:void 0,settings:{hasTopicDirectories:!1},badgeComponent:null},t.id))})]}),c&&(0,K.jsx)(Y,{dashboard:e.dashboard,isReadOnly:e.isReadOnly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard})]})}var Q=r.encloseNamespace(`livePartnerDashboard.partnerDashboard`);function ne(e){let{commonVideoProps:t}=L({locationContext:d.VideoThumbnail}),{activePresentation:r}=y(),i=s(M.companyWithQuery(e.companyId,`banner,logo`)),a=s(r&&A.presentationAudiences(p.StreamableLearning,r.id)),c=f.getActiveAudiencesFromParams(a.data,e.queryParams),l=i.data&&I(i.data,e.queryParams||{},e.presentationSlug),{dashboard:u,isPreviewing:m}=j({targetType:h.Company,queryParams:e.queryParams,companyId:e.companyId});te(S.getDefaultMetadata({title:i.data?.name,phraseContext:{phraseHandler:Q,titlePhrase:`pageTitle`,descriptionPhrase:`pageDescription`},canonicalLink:C.getCanonicalLink({customAppLink:l?.audience()}),allowIndexing:!0}));function g(){return i.hasCompleted?[{name:Q(`discover`),appLink:{application:o.DASHBOARD,action:v.Dashboard.HOME,args:[e.presentationSlug]}},{name:i.data.name,active:!0}]:[]}return W.useEffect(()=>{!u.hasCompleted||u.data||n.throw(new b)},[u.data,u.hasCompleted]),u.hasCompleted&&r&&a.hasCompleted&&i.hasCompleted?(0,K.jsxs)(`div`,{className:`position-relative px-4`,children:[!!(m&&u.data)&&(0,K.jsx)(H,{status:u.data.status,type:`company`}),(0,K.jsx)(Z,{company:i.data,dashboard:u.data,getWidgetContentRequest:k.dashboardWidgetContent,presentation:r,widgetAppLinks:l,getBreadcrumbs:g,hasPermissions:()=>!1,hasLocalPermissions:()=>!1,audiences:a.data,activeAudiences:c,emptyImageUrl:ee.Live.EmptyStates.Topics.TOPIC,isBot:C.isBot(),lazyLoad:!C.isBot(),commonVideoProps:t})]}):(0,K.jsx)(K.Fragment,{})}var $=N({[p.StreamableLearning]:e=>(0,K.jsx)(ne,{presentationSlug:e.presentationSlug,companyId:e.companyId,queryParams:G(e.queryParams)})});$.displayName=`BasePartnerDashboardView`;export{$ as BasePartnerDashboardView};
|
|
2
|
+
//# sourceMappingURL=IYIY9hIU2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"D8Op6EUa2.chunk.js","names":[],"sources":["../../src/shared/interfaces/query-params/LivePartnerDashboardViewQueryParams.ts","../../../../libs/shared/src/apps/streamable-learning/components/company-dashboard/empty-state/StreamableCompanyDashboardEmptyState.tsx","../../../../libs/shared/src/apps/streamable-learning/components/company-dashboard/StreamableCompanyDashboard.tsx","../../src/apps/dashboard/views/partner-dashboard/live-partner-dashboard/LivePartnerDashboardView.tsx","../../src/apps/dashboard/views/partner-dashboard/BasePartnerDashboardView.tsx"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizeLivePartnerDashboardViewParams below.\n */\nexport interface LivePartnerDashboardViewQueryParams {\n a?: string[];\n dashboardId?: string;\n}\n\nexport function sanitizeLivePartnerDashboardViewParams(\n queryParams: HashObject\n): LivePartnerDashboardViewQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [ 'a', 'dashboardId' ]);\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'streamable.companyDashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamableCompanyDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadOnly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function StreamableCompanyDashboardEmptyState(props: StreamableCompanyDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForStreamable')} />\n {!props.isReadOnly ? (\n <EmptyState.Heading>\n <Text phrase='headingForStreamable' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { StreamableCompanyDashboardEmptyState } from 'libs/shared/apps/streamable-learning/components/company-dashboard/empty-state/StreamableCompanyDashboardEmptyState';\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllCompanyWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CalendarEventContentType, Company, CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nconst namespace = 'streamable.companyDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface StreamableCompanyDashboardProps {\n dashboard: CuratedDashboard;\n company: Company;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n audiences?: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n emptyImageUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllCompanyWidgetTemplates['appLinks'] & {\n audience: () => Core.AppLink,\n widgetWizard: () => Core.AppLink\n };\n scrollToWidgetId?: string;\n isReadOnly?: boolean;\n getBreadcrumbs?: () => Breadcrumb[];\n getBannerActions?: () => ActionOptions[];\n isBot?: boolean;\n lazyLoad?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function StreamableCompanyDashboard(props: StreamableCompanyDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n \n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function shouldShowEmptyState(): boolean {\n if (!widgets?.length)\n return true;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n return (\n <>\n {!!widgets.length &&\n <>\n {props.company ?\n (\n <BannerHeader\n heading={props.company.name}\n logo={props.company.logo}\n logoBgColour={props.company.metadata?.colour}\n alignLogoLeft={!!props.company.logo || !!props.company.cover}\n banner={props.company.banner}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n blockColourClass={getBgColorClass(props.company.name, BG_COLOUR_CLASS_NAMES)}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n ) : <PartialBannerHeader />\n }\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.isReadOnly}\n appLink={props.widgetAppLinks?.audience()}\n />\n </div>\n\n {props.company.description && (\n <div className='mb-5'>\n <ExpandableQuestion\n id={props.company?.id}\n question={getPhrase('aboutUs')}\n answer={LinkifyHelper.linkifyText(props.company.description)}\n isBot={props.isBot}\n analyticsOptions={{\n entity: EntityType.Company,\n location: LocationContext.Dashboard\n }}\n />\n </div>\n )}\n\n <div>\n {widgets.map(widget => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Company}\n dashboardTarget={DashboardTargetType.Company}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n setIsEmpty={onSetIsEmpty}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadOnly}\n lazyLoad={props.lazyLoad}\n contentType={CalendarEventContentType.Livestream}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n\n // TODO: Ideally we don't have to do this\n classification={null}\n seeMoreLink={undefined}\n hasTableOfContents={false}\n onClickRemoveItem={undefined}\n settings={{\n hasTopicDirectories: false\n }}\n badgeComponent={null}\n />\n );\n })}\n </div>\n </>\n }\n\n {showEmptyState && (\n <StreamableCompanyDashboardEmptyState\n dashboard={props.dashboard}\n isReadOnly={props.isReadOnly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { StreamableCompanyDashboard } from 'libs/shared/apps/streamable-learning/components/company-dashboard/StreamableCompanyDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Company, DashboardTargetType, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { CompanyRequests } from 'shared/flight-requests/CompanyRequests';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport {\n LivePartnerDashboardViewQueryParams\n} from 'shared/interfaces/query-params/LivePartnerDashboardViewQueryParams';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport {\n getLivePartnerDashboardAppLinks\n} from 'apps/dashboard/views/partner-dashboard/PartnerDashboardViewUtils';\n\nconst namespace = 'livePartnerDashboard.partnerDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LivePartnerDashboardViewProps {\n presentationSlug: string | null;\n companyId: string;\n queryParams?: LivePartnerDashboardViewQueryParams;\n}\n\nexport function LivePartnerDashboardView(\n props: LivePartnerDashboardViewProps\n): JSX.Element {\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const { activePresentation } = useActivePresentation();\n const company = Flight.useBasicFetch<Company>(CompanyRequests.companyWithQuery(props.companyId, 'banner,logo'));\n\n // ClickView Live audiences are typed differently from Subject audiences for the same presentation id;\n // Fetch with the explicit Live type so we get the correct grade set.\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, activePresentation.id)\n );\n\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n\n const widgetAppLinks = company.data && getLivePartnerDashboardAppLinks(\n company.data,\n props.queryParams || {},\n props.presentationSlug\n );\n\n const {\n dashboard,\n isPreviewing\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.Company,\n queryParams: props.queryParams,\n companyId: props.companyId\n });\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: company.data?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: widgetAppLinks?.audience()\n }),\n allowIndexing: true\n }));\n\n function getBreadcrumbs(): Breadcrumb[] {\n if (!company.hasCompleted)\n return [];\n\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME,\n args: [props.presentationSlug]\n }\n }, {\n name: company.data.name,\n active: true\n }];\n }\n\n React.useEffect(() => {\n if (!dashboard.hasCompleted || dashboard.data)\n return;\n\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ dashboard.data, dashboard.hasCompleted ]);\n\n const hasLoaded = (\n dashboard.hasCompleted &&\n !!activePresentation &&\n audiences.hasCompleted &&\n company.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <div className='position-relative px-4'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='company' />}\n <StreamableCompanyDashboard\n company={company.data}\n dashboard={dashboard.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n presentation={activePresentation}\n widgetAppLinks={widgetAppLinks}\n getBreadcrumbs={getBreadcrumbs}\n hasPermissions={() => false}\n hasLocalPermissions={() => false}\n audiences={audiences.data}\n activeAudiences={activeAudiences}\n emptyImageUrl={ImageUrls.Live.EmptyStates.Topics.TOPIC}\n isBot={SeoHelper.isBot()}\n lazyLoad={!SeoHelper.isBot()}\n commonVideoProps={commonVideoProps}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\n\nimport {\n sanitizeLivePartnerDashboardViewParams\n} from 'shared/interfaces/query-params/LivePartnerDashboardViewQueryParams';\nimport { createPresentationDispatcherView } from 'shared/utils/createPresentationDispatcherView';\n\nimport {\n LivePartnerDashboardView\n} from 'apps/dashboard/views/partner-dashboard/live-partner-dashboard/LivePartnerDashboardView';\n\ninterface PartnerDashboardRouteProps {\n presentationSlug: string | null;\n companyId: string;\n queryParams?: HashObject;\n}\n\nexport const BasePartnerDashboardView = createPresentationDispatcherView<PartnerDashboardRouteProps>({\n [PresentationType.StreamableLearning]: ctx => (\n <LivePartnerDashboardView\n presentationSlug={ctx.presentationSlug}\n companyId={ctx.companyId}\n queryParams={sanitizeLivePartnerDashboardViewParams(ctx.queryParams)}\n />\n )\n});\n\nBasePartnerDashboardView.displayName = 'BasePartnerDashboardView';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"IYIY9hIU2.chunk.js","names":[],"sources":["../../src/shared/interfaces/query-params/LivePartnerDashboardViewQueryParams.ts","../../../../libs/shared/src/apps/streamable-learning/components/company-dashboard/empty-state/StreamableCompanyDashboardEmptyState.tsx","../../../../libs/shared/src/apps/streamable-learning/components/company-dashboard/StreamableCompanyDashboard.tsx","../../src/apps/dashboard/views/partner-dashboard/live-partner-dashboard/LivePartnerDashboardView.tsx","../../src/apps/dashboard/views/partner-dashboard/BasePartnerDashboardView.tsx"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * NOTE: Ensure any keys added here are also added\n * to sanitizeLivePartnerDashboardViewParams below.\n */\nexport interface LivePartnerDashboardViewQueryParams {\n a?: string[];\n dashboardId?: string;\n}\n\nexport function sanitizeLivePartnerDashboardViewParams(\n queryParams: HashObject\n): LivePartnerDashboardViewQueryParams {\n if (!queryParams)\n return {};\n\n return ObjectHelper.pick(queryParams, [ 'a', 'dashboardId' ]);\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { PlusSvg } from 'libs/shared/images/svg/actions/PlusSvg';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\n\nconst namespace = 'streamable.companyDashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StreamableCompanyDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadOnly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function StreamableCompanyDashboardEmptyState(props: StreamableCompanyDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForStreamable')} />\n {!props.isReadOnly ? (\n <EmptyState.Heading>\n <Text phrase='headingForStreamable' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={PlusSvg}\n disabled={isArchived}\n />\n </Tooltip>\n </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\n\nimport { EntityType, LocationContext } from 'libs/analytics/interfaces';\n\nimport { StreamableCompanyDashboardEmptyState } from 'libs/shared/apps/streamable-learning/components/company-dashboard/empty-state/StreamableCompanyDashboardEmptyState';\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader, PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { ExpandableQuestion } from 'libs/shared/components/expandable-question/ExpandableQuestion';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllCompanyWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { CalendarEventContentType, Company, CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\n\nconst namespace = 'streamable.companyDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface StreamableCompanyDashboardProps {\n dashboard: CuratedDashboard;\n company: Company;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n audiences?: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n emptyImageUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllCompanyWidgetTemplates['appLinks'] & {\n audience: () => Core.AppLink,\n widgetWizard: () => Core.AppLink\n };\n scrollToWidgetId?: string;\n isReadOnly?: boolean;\n getBreadcrumbs?: () => Breadcrumb[];\n getBannerActions?: () => ActionOptions[];\n isBot?: boolean;\n lazyLoad?: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function StreamableCompanyDashboard(props: StreamableCompanyDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n \n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard),\n props.activeAudiences?.map(a => a.masterId)\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function shouldShowEmptyState(): boolean {\n if (!widgets?.length)\n return true;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n return (\n <>\n {!!widgets.length &&\n <>\n {props.company ?\n (\n <BannerHeader\n heading={props.company.name}\n logo={props.company.logo}\n logoBgColour={props.company.metadata?.colour}\n alignLogoLeft={!!props.company.logo || !!props.company.cover}\n banner={props.company.banner}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n blockColourClass={getBgColorClass(props.company.name, BG_COLOUR_CLASS_NAMES)}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n ) : <PartialBannerHeader />\n }\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.isReadOnly}\n appLink={props.widgetAppLinks?.audience()}\n />\n </div>\n\n {props.company.description && (\n <div className='mb-5'>\n <ExpandableQuestion\n id={props.company?.id}\n question={getPhrase('aboutUs')}\n answer={LinkifyHelper.linkifyText(props.company.description)}\n isBot={props.isBot}\n analyticsOptions={{\n entity: EntityType.Company,\n location: LocationContext.Dashboard\n }}\n />\n </div>\n )}\n\n <div>\n {widgets.map(widget => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Company}\n dashboardTarget={DashboardTargetType.Company}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n setIsEmpty={onSetIsEmpty}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadOnly}\n lazyLoad={props.lazyLoad}\n contentType={CalendarEventContentType.Livestream}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n\n // TODO: Ideally we don't have to do this\n classification={null}\n seeMoreLink={undefined}\n hasTableOfContents={false}\n onClickRemoveItem={undefined}\n settings={{\n hasTopicDirectories: false\n }}\n badgeComponent={null}\n />\n );\n })}\n </div>\n </>\n }\n\n {showEmptyState && (\n <StreamableCompanyDashboardEmptyState\n dashboard={props.dashboard}\n isReadOnly={props.isReadOnly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { StreamableCompanyDashboard } from 'libs/shared/apps/streamable-learning/components/company-dashboard/StreamableCompanyDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Company, DashboardTargetType, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { CompanyRequests } from 'shared/flight-requests/CompanyRequests';\nimport { useActivePresentation } from 'shared/hooks/presentations/useActivePresentation';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport {\n LivePartnerDashboardViewQueryParams\n} from 'shared/interfaces/query-params/LivePartnerDashboardViewQueryParams';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport {\n getLivePartnerDashboardAppLinks\n} from 'apps/dashboard/views/partner-dashboard/PartnerDashboardViewUtils';\n\nconst namespace = 'livePartnerDashboard.partnerDashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface LivePartnerDashboardViewProps {\n presentationSlug: string | null;\n companyId: string;\n queryParams?: LivePartnerDashboardViewQueryParams;\n}\n\nexport function LivePartnerDashboardView(\n props: LivePartnerDashboardViewProps\n): JSX.Element {\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.VideoThumbnail });\n\n const { activePresentation } = useActivePresentation();\n const company = Flight.useBasicFetch<Company>(CompanyRequests.companyWithQuery(props.companyId, 'banner,logo'));\n\n // ClickView Live audiences are typed differently from Subject audiences for the same presentation id;\n // Fetch with the explicit Live type so we get the correct grade set.\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.presentationAudiences(PresentationType.StreamableLearning, activePresentation.id)\n );\n\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n\n const widgetAppLinks = company.data && getLivePartnerDashboardAppLinks(\n company.data,\n props.queryParams || {},\n props.presentationSlug\n );\n\n const {\n dashboard,\n isPreviewing\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.Company,\n queryParams: props.queryParams,\n companyId: props.companyId\n });\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: company.data?.name,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n customAppLink: widgetAppLinks?.audience()\n }),\n allowIndexing: true\n }));\n\n function getBreadcrumbs(): Breadcrumb[] {\n if (!company.hasCompleted)\n return [];\n\n return [{\n name: getPhrase('discover'),\n appLink: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME,\n args: [props.presentationSlug]\n }\n }, {\n name: company.data.name,\n active: true\n }];\n }\n\n React.useEffect(() => {\n if (!dashboard.hasCompleted || dashboard.data)\n return;\n\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ dashboard.data, dashboard.hasCompleted ]);\n\n const hasLoaded = (\n dashboard.hasCompleted &&\n !!activePresentation &&\n audiences.hasCompleted &&\n company.hasCompleted\n );\n\n if (!hasLoaded)\n return <></>;\n\n return (\n <div className='position-relative px-4'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='company' />}\n <StreamableCompanyDashboard\n company={company.data}\n dashboard={dashboard.data}\n getWidgetContentRequest={DashboardRequests.dashboardWidgetContent}\n presentation={activePresentation}\n widgetAppLinks={widgetAppLinks}\n getBreadcrumbs={getBreadcrumbs}\n hasPermissions={() => false}\n hasLocalPermissions={() => false}\n audiences={audiences.data}\n activeAudiences={activeAudiences}\n emptyImageUrl={ImageUrls.Live.EmptyStates.Topics.TOPIC}\n isBot={SeoHelper.isBot()}\n lazyLoad={!SeoHelper.isBot()}\n commonVideoProps={commonVideoProps}\n />\n </div>\n );\n}\n","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\n\nimport {\n sanitizeLivePartnerDashboardViewParams\n} from 'shared/interfaces/query-params/LivePartnerDashboardViewQueryParams';\nimport { createPresentationDispatcherView } from 'shared/utils/createPresentationDispatcherView';\n\nimport {\n LivePartnerDashboardView\n} from 'apps/dashboard/views/partner-dashboard/live-partner-dashboard/LivePartnerDashboardView';\n\ninterface PartnerDashboardRouteProps {\n presentationSlug: string | null;\n companyId: string;\n queryParams?: HashObject;\n}\n\nexport const BasePartnerDashboardView = createPresentationDispatcherView<PartnerDashboardRouteProps>({\n [PresentationType.StreamableLearning]: ctx => (\n <LivePartnerDashboardView\n presentationSlug={ctx.presentationSlug}\n companyId={ctx.companyId}\n queryParams={sanitizeLivePartnerDashboardViewParams(ctx.queryParams)}\n />\n )\n});\n\nBasePartnerDashboardView.displayName = 'BasePartnerDashboardView';\n"],"mappings":"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"}
|