@clickview/exchange 0.60.0 → 0.61.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/{DQWSGmPO.chunk.js → 2GC-PPDy.chunk.js} +2 -2
- package/dist/scripts/{DQWSGmPO.chunk.js.map → 2GC-PPDy.chunk.js.map} +1 -1
- package/dist/scripts/{C_vLRfti.chunk.js → 5yUbuX8U.chunk.js} +2 -2
- package/dist/scripts/{C_vLRfti.chunk.js.map → 5yUbuX8U.chunk.js.map} +1 -1
- package/dist/scripts/{DfR8N6KN.chunk.js → B1cVJr0t.chunk.js} +2 -2
- package/dist/scripts/{DfR8N6KN.chunk.js.map → B1cVJr0t.chunk.js.map} +1 -1
- package/dist/scripts/B4AGq_K6.chunk.js +2 -0
- package/dist/scripts/{u96pPes-.chunk.js.map → B4AGq_K6.chunk.js.map} +1 -1
- package/dist/scripts/{Ej7a07_u.chunk.js → B57luw20.chunk.js} +2 -2
- package/dist/scripts/{Ej7a07_u.chunk.js.map → B57luw20.chunk.js.map} +1 -1
- package/dist/scripts/{Csq5lSfL.chunk.js → B5VX0-05.chunk.js} +2 -2
- package/dist/scripts/{Csq5lSfL.chunk.js.map → B5VX0-05.chunk.js.map} +1 -1
- package/dist/scripts/{B1FXQpYQ.chunk.js → B5yQ-o2c.chunk.js} +2 -2
- package/dist/scripts/{B1FXQpYQ.chunk.js.map → B5yQ-o2c.chunk.js.map} +1 -1
- package/dist/scripts/{CfHe4kqG.chunk.js → BAaMmtA5.chunk.js} +2 -2
- package/dist/scripts/{CfHe4kqG.chunk.js.map → BAaMmtA5.chunk.js.map} +1 -1
- package/dist/scripts/{Ien9POMb.chunk.js → BJB2pvo-.chunk.js} +2 -2
- package/dist/scripts/{Ien9POMb.chunk.js.map → BJB2pvo-.chunk.js.map} +1 -1
- package/dist/scripts/{CXQ4Otim.chunk.js → BJmQsLgH.chunk.js} +2 -2
- package/dist/scripts/{CXQ4Otim.chunk.js.map → BJmQsLgH.chunk.js.map} +1 -1
- package/dist/scripts/{zD1LoHGd.chunk.js → BKtt7r9I.chunk.js} +2 -2
- package/dist/scripts/{zD1LoHGd.chunk.js.map → BKtt7r9I.chunk.js.map} +1 -1
- package/dist/scripts/{CLS2QNAc.chunk.js → BQ7D2X0o.chunk.js} +2 -2
- package/dist/scripts/{CLS2QNAc.chunk.js.map → BQ7D2X0o.chunk.js.map} +1 -1
- package/dist/scripts/{Bv-rZ1ws.chunk.js → BQTdalXA.chunk.js} +2 -2
- package/dist/scripts/{Bv-rZ1ws.chunk.js.map → BQTdalXA.chunk.js.map} +1 -1
- package/dist/scripts/{C52tRwVm.chunk.js → BR_C7b5M.chunk.js} +2 -2
- package/dist/scripts/{C52tRwVm.chunk.js.map → BR_C7b5M.chunk.js.map} +1 -1
- package/dist/scripts/{DxRcVeDA.chunk.js → BVViiWF8.chunk.js} +2 -2
- package/dist/scripts/{DxRcVeDA.chunk.js.map → BVViiWF8.chunk.js.map} +1 -1
- package/dist/scripts/{BwA4-wPQ.chunk.js → BWoESSLv.chunk.js} +2 -2
- package/dist/scripts/{BwA4-wPQ.chunk.js.map → BWoESSLv.chunk.js.map} +1 -1
- package/dist/scripts/{DhSjZ3FD.chunk.js → BZXmaOzt.chunk.js} +2 -2
- package/dist/scripts/{DhSjZ3FD.chunk.js.map → BZXmaOzt.chunk.js.map} +1 -1
- package/dist/scripts/{CkxEvxLE.chunk.js → Bcaq2QKq.chunk.js} +2 -2
- package/dist/scripts/{CkxEvxLE.chunk.js.map → Bcaq2QKq.chunk.js.map} +1 -1
- package/dist/scripts/{BuwaCenI.chunk.js → BdMXRcT3.chunk.js} +2 -2
- package/dist/scripts/{BuwaCenI.chunk.js.map → BdMXRcT3.chunk.js.map} +1 -1
- package/dist/scripts/{C0I1ovgn.chunk.js → BlabCH8N.chunk.js} +2 -2
- package/dist/scripts/{C0I1ovgn.chunk.js.map → BlabCH8N.chunk.js.map} +1 -1
- package/dist/scripts/{2NsO29qP.chunk.js → Bo-iDjSh.chunk.js} +2 -2
- package/dist/scripts/{2NsO29qP.chunk.js.map → Bo-iDjSh.chunk.js.map} +1 -1
- package/dist/scripts/{Cjy2K1zH.chunk.js → BqRzwJ-J.chunk.js} +2 -2
- package/dist/scripts/{Cjy2K1zH.chunk.js.map → BqRzwJ-J.chunk.js.map} +1 -1
- package/dist/scripts/BrdU6Hc2.chunk.js +2 -0
- package/dist/scripts/{WarFtyTw.chunk.js.map → BrdU6Hc2.chunk.js.map} +1 -1
- package/dist/scripts/{Cca7nDsG.chunk.js → Bt07VepM.chunk.js} +2 -2
- package/dist/scripts/{Cca7nDsG.chunk.js.map → Bt07VepM.chunk.js.map} +1 -1
- package/dist/scripts/{3hd9Wq4c.chunk.js → BtbirQej.chunk.js} +2 -2
- package/dist/scripts/{3hd9Wq4c.chunk.js.map → BtbirQej.chunk.js.map} +1 -1
- package/dist/scripts/{DCLePavE.chunk.js → Byh4RoGO.chunk.js} +2 -2
- package/dist/scripts/{DCLePavE.chunk.js.map → Byh4RoGO.chunk.js.map} +1 -1
- package/dist/scripts/{DTHb9InD.chunk.js → Bz3eAWKb.chunk.js} +2 -2
- package/dist/scripts/{DTHb9InD.chunk.js.map → Bz3eAWKb.chunk.js.map} +1 -1
- package/dist/scripts/{Cu0qnVi5.chunk.js → BzzIpmJj.chunk.js} +2 -2
- package/dist/scripts/{Cu0qnVi5.chunk.js.map → BzzIpmJj.chunk.js.map} +1 -1
- package/dist/scripts/{C7un82WP.chunk.js → C3LmB7vs.chunk.js} +2 -2
- package/dist/scripts/{C7un82WP.chunk.js.map → C3LmB7vs.chunk.js.map} +1 -1
- package/dist/scripts/C42aTLRq.chunk.js +2 -0
- package/dist/scripts/{C2TRBWPd.chunk.js.map → C42aTLRq.chunk.js.map} +1 -1
- package/dist/scripts/C4BzCmwg.chunk.js +2 -0
- package/dist/scripts/{BwdSbre5.chunk.js.map → C4BzCmwg.chunk.js.map} +1 -1
- package/dist/scripts/{B5mlcFJg.chunk.js → CFRAo5Sd.chunk.js} +2 -2
- package/dist/scripts/{B5mlcFJg.chunk.js.map → CFRAo5Sd.chunk.js.map} +1 -1
- package/dist/scripts/{C-Dd1wEr.chunk.js → CKGW3m2X.chunk.js} +3 -3
- package/dist/scripts/{C-Dd1wEr.chunk.js.map → CKGW3m2X.chunk.js.map} +1 -1
- package/dist/scripts/{D0Tp9Z65.chunk.js → CL6ZWANl.chunk.js} +2 -2
- package/dist/scripts/{D0Tp9Z65.chunk.js.map → CL6ZWANl.chunk.js.map} +1 -1
- package/dist/scripts/CLgSNdF3.chunk.js +2 -0
- package/dist/scripts/{BxcHYWuR.chunk.js.map → CLgSNdF3.chunk.js.map} +1 -1
- package/dist/scripts/{XOHWRN-E.chunk.js → CMfzHyZ-.chunk.js} +2 -2
- package/dist/scripts/{XOHWRN-E.chunk.js.map → CMfzHyZ-.chunk.js.map} +1 -1
- package/dist/scripts/{Vk3DDGeP.chunk.js → CPvN_Soe.chunk.js} +2 -2
- package/dist/scripts/{Vk3DDGeP.chunk.js.map → CPvN_Soe.chunk.js.map} +1 -1
- package/dist/scripts/{LLCJ2-mR.chunk.js → CYISpSfn.chunk.js} +2 -2
- package/dist/scripts/{LLCJ2-mR.chunk.js.map → CYISpSfn.chunk.js.map} +1 -1
- package/dist/scripts/{DfcdtoXp.chunk.js → CZQS_NPT.chunk.js} +2 -2
- package/dist/scripts/{DfcdtoXp.chunk.js.map → CZQS_NPT.chunk.js.map} +1 -1
- package/dist/scripts/{DeW1mjFb.chunk.js → CcHhPXQX.chunk.js} +2 -2
- package/dist/scripts/{DeW1mjFb.chunk.js.map → CcHhPXQX.chunk.js.map} +1 -1
- package/dist/scripts/{DLsA7vPe.chunk.js → CjgcuP3Q.chunk.js} +2 -2
- package/dist/scripts/{DLsA7vPe.chunk.js.map → CjgcuP3Q.chunk.js.map} +1 -1
- package/dist/scripts/{itWDNVl_.chunk.js → CmVJO7VI.chunk.js} +2 -2
- package/dist/scripts/{itWDNVl_.chunk.js.map → CmVJO7VI.chunk.js.map} +1 -1
- package/dist/scripts/{DBtiEa66.chunk.js → CpMkRd2a.chunk.js} +2 -2
- package/dist/scripts/{DBtiEa66.chunk.js.map → CpMkRd2a.chunk.js.map} +1 -1
- package/dist/scripts/{Y2rXSgTV.chunk.js → CqWvHKP5.chunk.js} +2 -2
- package/dist/scripts/{Y2rXSgTV.chunk.js.map → CqWvHKP5.chunk.js.map} +1 -1
- package/dist/scripts/{zO2QdKtt.chunk.js → CvgQRmjv.chunk.js} +2 -2
- package/dist/scripts/{zO2QdKtt.chunk.js.map → CvgQRmjv.chunk.js.map} +1 -1
- package/dist/scripts/{B9W1QLWn.chunk.js → CwexEXsi.chunk.js} +2 -2
- package/dist/scripts/{B9W1QLWn.chunk.js.map → CwexEXsi.chunk.js.map} +1 -1
- package/dist/scripts/{BpwHr0J0.chunk.js → CyQDGNI3.chunk.js} +2 -2
- package/dist/scripts/{BpwHr0J0.chunk.js.map → CyQDGNI3.chunk.js.map} +1 -1
- package/dist/scripts/{CHAwVVRw.chunk.js → D21QHirZ.chunk.js} +2 -2
- package/dist/scripts/{CHAwVVRw.chunk.js.map → D21QHirZ.chunk.js.map} +1 -1
- package/dist/scripts/{DxJfmOeq.chunk.js → D30qaGvM.chunk.js} +2 -2
- package/dist/scripts/{DxJfmOeq.chunk.js.map → D30qaGvM.chunk.js.map} +1 -1
- package/dist/scripts/{CJIYSOTb.chunk.js → D3juPk5Y.chunk.js} +2 -2
- package/dist/scripts/{CJIYSOTb.chunk.js.map → D3juPk5Y.chunk.js.map} +1 -1
- package/dist/scripts/{B-IgnxzS.chunk.js → D5FAzio3.chunk.js} +2 -2
- package/dist/scripts/{B-IgnxzS.chunk.js.map → D5FAzio3.chunk.js.map} +1 -1
- package/dist/scripts/{DIBfWWih.chunk.js → D7NOMVC8.chunk.js} +2 -2
- package/dist/scripts/{DIBfWWih.chunk.js.map → D7NOMVC8.chunk.js.map} +1 -1
- package/dist/scripts/{bogFjz2G.chunk.js → D7QRJrh2.chunk.js} +2 -2
- package/dist/scripts/{bogFjz2G.chunk.js.map → D7QRJrh2.chunk.js.map} +1 -1
- package/dist/scripts/{BZb44_Lh.chunk.js → D9df4Id7.chunk.js} +2 -2
- package/dist/scripts/{BZb44_Lh.chunk.js.map → D9df4Id7.chunk.js.map} +1 -1
- package/dist/scripts/{BYLKD39d.chunk.js → DFEBv1_O.chunk.js} +2 -2
- package/dist/scripts/{BYLKD39d.chunk.js.map → DFEBv1_O.chunk.js.map} +1 -1
- package/dist/scripts/{ChXJhYla.chunk.js → DGvEmnsP.chunk.js} +2 -2
- package/dist/scripts/{ChXJhYla.chunk.js.map → DGvEmnsP.chunk.js.map} +1 -1
- package/dist/scripts/DIkrkJAo.chunk.js +2 -0
- package/dist/scripts/{CD1TqwcB.chunk.js.map → DIkrkJAo.chunk.js.map} +1 -1
- package/dist/scripts/{BrjepIq5.chunk.js → DMAci3S_.chunk.js} +2 -2
- package/dist/scripts/{BrjepIq5.chunk.js.map → DMAci3S_.chunk.js.map} +1 -1
- package/dist/scripts/{COBKg5HM.chunk.js → DOsWx99L.chunk.js} +2 -2
- package/dist/scripts/{COBKg5HM.chunk.js.map → DOsWx99L.chunk.js.map} +1 -1
- package/dist/scripts/{Bh_0dfl8.chunk.js → DYRoLttd.chunk.js} +2 -2
- package/dist/scripts/{Bh_0dfl8.chunk.js.map → DYRoLttd.chunk.js.map} +1 -1
- package/dist/scripts/{DiR8Ds2K.chunk.js → DbNPwlCF.chunk.js} +2 -2
- package/dist/scripts/{DiR8Ds2K.chunk.js.map → DbNPwlCF.chunk.js.map} +1 -1
- package/dist/scripts/{BCd9ozXx.chunk.js → DeSk2YFH.chunk.js} +2 -2
- package/dist/scripts/{BCd9ozXx.chunk.js.map → DeSk2YFH.chunk.js.map} +1 -1
- package/dist/scripts/{CgplGqf6.chunk.js → DgYE66Vs.chunk.js} +2 -2
- package/dist/scripts/{CgplGqf6.chunk.js.map → DgYE66Vs.chunk.js.map} +1 -1
- package/dist/scripts/{DsPW-ne8.chunk.js → DigjAeMR.chunk.js} +2 -2
- package/dist/scripts/{DsPW-ne8.chunk.js.map → DigjAeMR.chunk.js.map} +1 -1
- package/dist/scripts/{Bu06fyx_.chunk.js → Dj7sCTJQ.chunk.js} +2 -2
- package/dist/scripts/{Bu06fyx_.chunk.js.map → Dj7sCTJQ.chunk.js.map} +1 -1
- package/dist/scripts/{B2OzXphM.chunk.js → Dk7tKls8.chunk.js} +2 -2
- package/dist/scripts/{B2OzXphM.chunk.js.map → Dk7tKls8.chunk.js.map} +1 -1
- package/dist/scripts/{CJ1ig2Kx.chunk.js → DmTetbor.chunk.js} +2 -2
- package/dist/scripts/{CJ1ig2Kx.chunk.js.map → DmTetbor.chunk.js.map} +1 -1
- package/dist/scripts/{USTuMLcb.chunk.js → Ds3SQeo1.chunk.js} +2 -2
- package/dist/scripts/{USTuMLcb.chunk.js.map → Ds3SQeo1.chunk.js.map} +1 -1
- package/dist/scripts/{B696AbD2.chunk.js → Dw-3sJ6z.chunk.js} +2 -2
- package/dist/scripts/{B696AbD2.chunk.js.map → Dw-3sJ6z.chunk.js.map} +1 -1
- package/dist/scripts/{DjT7A1F0.chunk.js → DzUywVIn.chunk.js} +2 -2
- package/dist/scripts/{DjT7A1F0.chunk.js.map → DzUywVIn.chunk.js.map} +1 -1
- package/dist/scripts/{BX_8MApq.chunk.js → FqMxoz-g.chunk.js} +2 -2
- package/dist/scripts/{BX_8MApq.chunk.js.map → FqMxoz-g.chunk.js.map} +1 -1
- package/dist/scripts/{CtovEsFz.chunk.js → M8-7wL03.chunk.js} +2 -2
- package/dist/scripts/{CtovEsFz.chunk.js.map → M8-7wL03.chunk.js.map} +1 -1
- package/dist/scripts/{BF2PCV8G.chunk.js → O3KYJlt8.chunk.js} +2 -2
- package/dist/scripts/{BF2PCV8G.chunk.js.map → O3KYJlt8.chunk.js.map} +1 -1
- package/dist/scripts/{-wh0Q1Mk.chunk.js → P1w98jqc.chunk.js} +2 -2
- package/dist/scripts/{-wh0Q1Mk.chunk.js.map → P1w98jqc.chunk.js.map} +1 -1
- package/dist/scripts/{Q3oue8AK.chunk.js → PLxejfSI.chunk.js} +2 -2
- package/dist/scripts/{Q3oue8AK.chunk.js.map → PLxejfSI.chunk.js.map} +1 -1
- package/dist/scripts/{D_O3OU5_.chunk.js → Q9FeiQkl.chunk.js} +2 -2
- package/dist/scripts/{D_O3OU5_.chunk.js.map → Q9FeiQkl.chunk.js.map} +1 -1
- package/dist/scripts/{dn7SonjL.chunk.js → TYfK47yR.chunk.js} +2 -2
- package/dist/scripts/{dn7SonjL.chunk.js.map → TYfK47yR.chunk.js.map} +1 -1
- package/dist/scripts/{CuGgxXq6.chunk.js → X5emuMm3.chunk.js} +2 -2
- package/dist/scripts/{CuGgxXq6.chunk.js.map → X5emuMm3.chunk.js.map} +1 -1
- package/dist/scripts/{CQoqpuSN.chunk.js → YuqHkk0a.chunk.js} +2 -2
- package/dist/scripts/{CQoqpuSN.chunk.js.map → YuqHkk0a.chunk.js.map} +1 -1
- package/dist/scripts/{BM3jzDzF.chunk.js → ZFLNGNny.chunk.js} +2 -2
- package/dist/scripts/{BM3jzDzF.chunk.js.map → ZFLNGNny.chunk.js.map} +1 -1
- package/dist/scripts/{DcWRg8v3.chunk.js → aou-5sJI.chunk.js} +2 -2
- package/dist/scripts/{DcWRg8v3.chunk.js.map → aou-5sJI.chunk.js.map} +1 -1
- package/dist/scripts/{app-7svuou3-.js → app-CShb1Dgt.js} +3 -3
- package/dist/scripts/{app-7svuou3-.js.map → app-CShb1Dgt.js.map} +1 -1
- package/dist/scripts/baur_fn0.chunk.js +2 -0
- package/dist/scripts/{zDrAtVBw.chunk.js.map → baur_fn0.chunk.js.map} +1 -1
- package/dist/scripts/{BrdxuhDZ.chunk.js → cDgsKsmM.chunk.js} +2 -2
- package/dist/scripts/{BrdxuhDZ.chunk.js.map → cDgsKsmM.chunk.js.map} +1 -1
- package/dist/scripts/{Di0ieRgB.chunk.js → d6bZeQ7u.chunk.js} +2 -2
- package/dist/scripts/{Di0ieRgB.chunk.js.map → d6bZeQ7u.chunk.js.map} +1 -1
- package/dist/scripts/{BqAavbCw.chunk.js → dP41rDFl.chunk.js} +2 -2
- package/dist/scripts/{BqAavbCw.chunk.js.map → dP41rDFl.chunk.js.map} +1 -1
- package/dist/scripts/{BcDguH17.chunk.js → jH3hqwI2.chunk.js} +2 -2
- package/dist/scripts/{BcDguH17.chunk.js.map → jH3hqwI2.chunk.js.map} +1 -1
- package/dist/scripts/{DL-oEZtF.chunk.js → kUTnu8Iq.chunk.js} +2 -2
- package/dist/scripts/{DL-oEZtF.chunk.js.map → kUTnu8Iq.chunk.js.map} +1 -1
- package/dist/scripts/{cyDp1kQU.chunk.js → nbVa2u9N.chunk.js} +2 -2
- package/dist/scripts/{cyDp1kQU.chunk.js.map → nbVa2u9N.chunk.js.map} +1 -1
- package/dist/scripts/{CtTd6EE8.chunk.js → vbpGTzKU.chunk.js} +2 -2
- package/dist/scripts/{CtTd6EE8.chunk.js.map → vbpGTzKU.chunk.js.map} +1 -1
- package/dist/scripts/{Co_YIZXn.chunk.js → zr54fY9l.chunk.js} +2 -2
- package/dist/scripts/{Co_YIZXn.chunk.js.map → zr54fY9l.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/BwdSbre5.chunk.js +0 -2
- package/dist/scripts/BxcHYWuR.chunk.js +0 -2
- package/dist/scripts/C2TRBWPd.chunk.js +0 -2
- package/dist/scripts/CD1TqwcB.chunk.js +0 -2
- package/dist/scripts/WarFtyTw.chunk.js +0 -2
- package/dist/scripts/u96pPes-.chunk.js +0 -2
- package/dist/scripts/zDrAtVBw.chunk.js +0 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"C0I1ovgn.chunk.js","sources":["../../../../libs/shared/src/interfaces/models/curated-widget/CuratedWidget.ts","../../../../libs/shared/src/apps/search/interfaces/SearchFilter.ts","../../../../libs/shared/src/enums/WidgetTemplate.ts","../../../../libs/shared/src/enums/WidgetTypeId.ts","../../../../libs/shared/src/utils/DashboardHelper.ts","../../../../libs/shared/src/constants/WidgetTypeIdConfig.ts","../../../../libs/shared/src/images/svg/status/WarningOutlineSvg.tsx","../../../../libs/shared/src/enums/WidgetStatus.ts","../../../../libs/shared/src/utils/WidgetHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","../../../../libs/shared/src/enums/TagType.ts","../../../../libs/shared/src/components/tags/TagItem.tsx"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ButtonIcon } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetStatus } from 'libs/shared/enums/WidgetStatus';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedObjectsWidgetData, CuratedWidgetContent, CuratedWidgetData } from 'libs/shared/interfaces';\n\nexport enum CuratedDashboardAppLink {\n LatestReleases = 'latest-releases',\n ExploreAllTopics = 'explore-all-topics',\n ClassificationLatestReleases = 'classification-latest-releases',\n ClassificationDirectory = 'classification-directory',\n}\n\nexport enum CuratedWidgetCtaAppLink {\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport interface BaseWidget<TContent extends HashObject = HashObject> {\n index: number;\n templateId: WidgetTemplate;\n widgetId: WidgetTypeId;\n name: string;\n description?: string;\n content?: TContent\n}\n\nexport interface WidgetCta {\n text?: string;\n href?: string;\n icon?: ButtonIcon;\n appLink?: CuratedWidgetCtaAppLink;\n}\n\nexport type WidgetMetadata = AllWidgetTemplateProps['metadata'] & {\n showInTableOfContents: boolean;\n tocIndentation: number;\n headingOptional: boolean;\n aiAddedVideo: boolean;\n};\n\nexport interface WidgetPreference {\n id: string;\n index?: number;\n hidden?: boolean;\n}\n\nexport interface CuratedWidget<\n TData extends CuratedWidgetData = CuratedWidgetData,\n TContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BaseWidget<TContent> {\n id: string;\n dashboardId: string;\n data: TData;\n status: WidgetStatus;\n metadata?: Partial<WidgetMetadata>;\n preferences?: WidgetPreference[];\n cursor?: string;\n\n // If a widget has curriculum IDs set, then it won't be accessible to anyone who doesn't have one of those curriculums\n curriculumIds?: string[];\n}\n\nexport type CuratedMediaWidget<\n TContent extends CuratedWidgetContent = CuratedWidgetContent\n> = CuratedWidget<CuratedObjectsWidgetData, TContent>;","import { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { FilterStateHash } from '../reducers';\n\nimport { FilterProps } from './FilterProps';\nimport { SearchIndices } from './SearchResults';\n\nconst FilterIdNames =\n[\n 'sort', // \"sort\" isn't even a filter but it tends to go with our filters in our designs\n 'classification',\n 'presentation',\n 'audience',\n 'yearGroup',\n 'moviesAndTv',\n 'type',\n 'rating',\n 'interactives',\n 'clips',\n 'classroom',\n 'hasResources',\n 'hasSubtitles',\n 'productionYear',\n 'isHd',\n 'producedByClickView',\n 'duration',\n 'tagOrClassification',\n 'status',\n 'isAdmin',\n 'bulkActionType',\n 'userType',\n 'filter',\n 'channel',\n 'dateBroadcast',\n 'categoryId',\n 'hasInteractives',\n 'jobStatus',\n 'source',\n 'customerStatus',\n 'specialEventType',\n 'customerType',\n 'seriesId',\n 'scopeId'\n] as const;\n\n/**\n * Any filters that shouldn't be sent to the backend as a filter\n * and are instead handled differently by the frontend\n */\nconst FilterBlacklist: Partial<Record<FilterIds, boolean>> = {\n type: true\n};\n\nexport type FilterIds = typeof FilterIdNames[number];\n\nexport const FilterWhitelist = FilterIdNames.reduce((acc, prev) => {\n return {\n ...acc,\n [prev]: !FilterBlacklist[prev]\n };\n}, {} as Record<FilterIds, boolean>);\n\nexport type FilterType = 'radio' | 'checkbox' | 'nested-checkbox' | 'grouped-checkbox' | 'switch' | 'more-filters' | 'rating' | 'dropdown' | 'tag' | 'button';\n\nexport interface SearchFilter<TFilterOptionId = string> {\n id: FilterIds;\n type: FilterType;\n compatibleIndices: SearchIndices[];\n\n name?: string;\n icon?: SvgIcon;\n description?: string;\n options?: FilterOption<TFilterOptionId>[];\n labelPrefix?: string;\n\n // For second layer options, for example 'presentation' checkbox filter has 'audience' as second layer option\n secondaryId?: FilterIds;\n\n customComponent?: (props: FilterProps) => JSX.Element;\n disabled?: boolean;\n disableOptions?: (options: FilterOption[], filters: SearchFilter[], state: FilterStateHash) => FilterOption[];\n}\n\nexport interface MoreFilters extends Omit<SearchFilter, 'id' | 'compatibleIndices'> {\n filters: SearchFilter[];\n id: string;\n}\n\nexport interface FilterOption<TId = string> {\n id: TId;\n name: string;\n default?: boolean;\n disabled?: boolean;\n secondLayerSelection?: FilterOption[];\n secondLayerOptions?: FilterOption[];\n group?: string;\n}\n\nexport type ProductionYearFilterOptions =\n 'any-year'\n | 'this-year'\n | 'last-3-years'\n | 'last-5-years';\n\nexport type DurationFilterOptions =\n 'bite-sized'\n | 'short'\n | 'medium'\n | 'long';\n\n\nexport enum SourceFilterOptions {\n MyVideos = 'my-videos',\n School = 'school',\n ExchangeArchive = 'exchange-archive',\n ClickView = 'clickview',\n LiveStreams = 'livestreams'\n}\n\nexport enum TypeFilterOptions {\n Video = 'video',\n Series = 'series',\n Playlist = 'playlist',\n Classification = 'classification',\n Clip = 'clip',\n Interactive = 'interactive',\n Company = 'company',\n Category = 'category',\n PartnerProfile = 'partner_profile'\n}","export enum WidgetTemplate {\n // Videos\n ThumbnailHeroMedia = 'thumbnail_hero_media',\n ThumbnailFeaturedMedia = 'thumbnail_featured_media',\n ThumbnailSlidingListSmall = 'thumbnail_sliding_list_small',\n ThumbnailSlidingListSmallV2 = 'thumbnail_sliding_list_small_v2',\n ThumbnailSlidingListLarge = 'thumbnail_sliding_list_large',\n ThumbnailFixedListMediaSmall = 'thumbnail_fixed_list_media_small',\n ThumbnailFixedListMediaLarge = 'thumbnail_fixed_list_media_large',\n ThumbnailFixedListFolderSmall = 'thumbnail_fixed_list_folder_small',\n ThumbnailVerticalList = 'thumbnail_vertical_list',\n PopoutThumbnailSlidingListLarge = 'popout_thumbnail_sliding_list_large',\n PopoutThumbnailSlidingListSmall = 'popout_thumbnail_sliding_list_small',\n FeaturedThumbnailSlidingList = 'featured_thumbnail_sliding_list',\n ThumbnailFixedListXLarge = 'thumbnail_fixed_list_xlarge',\n\n // Topics\n CoverSlidingPillListSmall = 'cover_sliding_pill_list_small',\n CoverFixedPillListLarge = 'cover_fixed_pill_list_large',\n StatsCoverFixedPillListLarge = 'stats_cover_fixed_pill_list_large',\n CoverFixedPillListXSmall = 'cover_fixed_pill_list_xsmall',\n ThumbnailFixedListLarge = 'thumbnail_fixed_list_large',\n ThumbnailFixedListSmall = 'thumbnail_fixed_list_small',\n EditableCoverFixedPillListSmall = 'editable_cover_fixed_pill_list_small',\n HeroBanner = 'hero_banner',\n HeroThumbnailSmall = 'hero_thumbnail_small',\n HeroBlockColourSmall = 'hero_block_colour_small',\n\n // Curriculum\n CurriculumResourcesAccordion = 'curriculum_resources_accordion',\n CurriculumCodeSearchResults = 'curriculum_code_search_results',\n\n // Playlists\n CoverFixedTileList = 'cover_fixed_tile_list',\n\n // Topics & Series\n PosterSlidingListLarge = 'poster_sliding_list_large',\n PosterSlidingListMedium = 'poster_sliding_list_medium',\n PosterSlidingListSmall = 'poster_sliding_list_small',\n PosterFixedListLarge = 'poster_fixed_list_large',\n\n // Blurbs & Topics\n HeroBannerSmall = 'hero_banner_small',\n\n // Text-based blurbs\n Heading = 'heading',\n AuthorReviewer = 'author_reviewer',\n Question = 'question',\n QuestionAccordion = 'question_accordion',\n\n // Companies / Studios / Content Partners\n CircleLogoSlidingList = 'circle_logo_sliding_list',\n RectangularLogoSlidingList = 'rectangular_logo_sliding_list',\n RectangularLogoFixedList = 'rectangular_logo_fixed_list',\n ThumbnailFixedListSearchCta = 'thumbnail_fixed_list_search_cta',\n InfiniteThumbnailVerticalList = 'infinite_thumbnail_vertical_list',\n\n // Rating filters\n FilterSlidingPillListSmall = 'filter_sliding_pill_list_small',\n\n // Special events\n EventIconSlidingList = 'event_icon_sliding_list',\n\n // Tags filter\n TagSlidingList = 'tag_sliding_list',\n\n SearchSuggestionsBlurb = 'search_suggestions_blurb'\n}\n","export enum WidgetTypeId {\n // Video group\n CuratedMedia = 'curated_media',\n PlaylistMedia = 'playlist_media',\n SeriesMedia = 'series_media',\n ClassificationMedia = 'classification_media',\n LatestReleasedVideos = 'latest_released_videos',\n ContinueWatching = 'continue_watching_videos',\n CompanyLatestReleasedVideo = 'company_latest_released_video',\n CompanyVideos = 'company_videos',\n ClassificationLatestReleasedVideo = 'classification_latest_released_video',\n ClassificationLatestReleasedVideosV2 = 'classification_latest_released_videos_v2',\n CompanyClassificationVideos = 'company_classification_videos',\n ClassificationDashboardMedia = 'classification_dashboard_media',\n ClassificationDashboardExternalMedia = 'classification_dashboard_external_media',\n SeasonalClassificationMedia = 'seasonal_classification_media',\n TrendingClassificationsMedia = 'trending_classifications_media',\n ClassificationCurriculumMedia = 'classification_curriculum_media',\n\n // Topics group\n CuratedClassifications = 'curated_classifications',\n Classifications = 'classifications',\n ClassificationLatestReleasedVideos = 'classification_latest_released_videos',\n SpecialEventClassifications = 'special_event_classifications',\n LatestReleasedClassifications = 'latest_released_classifications',\n TrendingClassifications = 'trending_classifications',\n\n // Series group\n CuratedSeries = 'curated_series',\n\n // Playlists group\n CuratedPlaylists = 'curated_playlists',\n\n // Blurb group\n Blurb = 'blurb',\n DynamicBlurb = 'dynamic_blurb',\n AuthorReviewer = 'author_reviewer',\n Faq = 'faq',\n\n // Network group\n CuratedCompanies = 'curated_companies',\n\n // Partner Profile group\n CuratedContentPartners = 'curated_content_partners',\n ContentPartnerLatestReleasedVideos = 'content_partner_latest_released_videos',\n ContentPartnerSeries = 'content_partner_series',\n ContentPartnerVideos = 'content_partner_videos',\n SpotlightContentPartners = 'spotlight_curated_content_partners',\n ContentPartners = 'content_partners',\n ContentPartnersHub = 'content_partners_hub',\n TrendingContentPartnersVideo = 'content_partner_trending_videos',\n ContentPartnerAllVideos = 'content_partner_all_videos',\n\n // Search filter group\n Ratings = 'ratings',\n\n // Presentations group\n Presentations = 'presentations',\n\n // Livestreams group\n UpcomingLivestreams = 'upcoming_livestreams',\n\n // Multimedia group\n CuratedMultimedia = 'curated_multimedia',\n\n // Legacy widget types\n ClassificationPlaylists = 'classification_playlists',\n ClassificationSeries = 'classification_series',\n ClassificationFeaturedVideo = 'classification_featured_video',\n ClassificationPinnedVideos = 'classification_pinned_videos',\n\n // Search widget types\n SearchRelevantTopics = 'search_relevant_topics',\n SearchCompanies = 'search_companies',\n SearchTopResults = 'search_top_results',\n SearchSeries = 'search_series',\n SearchPlaylists = 'search_playlists',\n SearchMyVideosFolder = 'search_my_videos_folders',\n SearchMySchoolLibraryFolder = 'search_my_school_library_folders',\n SearchMyVideos = 'search_my_videos',\n SearchMySchoolLibraryVideos = 'search_my_school_library_videos',\n SearchExchangeArchive = 'search_exchange_archive',\n SearchRelatedResults = 'search_related_results',\n SearchTags = 'search_tags',\n SearchCurriculumCode = 'search_curriculum_code',\n SearchSuggestions = 'search_suggestions',\n SearchContentPartners = 'search_content_partners'\n}\n","import { FormikContextType } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { GetCustomParamOptions, WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { OnlineUserRole } from 'libs/shared/enums/UserRole';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { BaseObject, ClassificationCurriculumInfo, ClassificationDashboardInfo, ClassificationDirectoryInfo, CuratedDashboard, CuratedMediaWidget, CuratedWidget, CuratedWidgetQueryParams, DashboardTargetInfo, DashboardTargetType, PartnerProfileDashboardInfo, UnknownDashboardTargetInfo } from 'libs/shared/interfaces';\n\ninterface LatestReleasesTimeRange {\n from: string;\n to: string;\n}\n\nexport const DashboardHelper = {\n\n /**\n * Same implementation as GetUserGroup() in Online.\n * @param userRole \n */\n getUserGroup(userRole: OnlineUserRole): UserGroup {\n if (userRole === OnlineUserRole.Student)\n return UserGroup.Learner;\n\n return UserGroup.Staff;\n }\n};\n\nexport const CuratedDashboardHelper = {\n onSelectCuratedObject(\n selectedObj: SearchResultObjectTypes | BaseObject,\n formikProps: FormikContextType<CuratedMediaWidget<BaseObject[]>>\n ) {\n const data = {\n ...formikProps.values.data,\n objectIds: ArrayHelper.addOrRemoveImmutable(formikProps.values.data.objectIds || [], selectedObj.id)\n };\n \n formikProps.setFieldValue('data', data);\n \n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n },\n\n onRemoveCuratedObject(\n objectId: string,\n formikProps: FormikContextType<CuratedMediaWidget<BaseObject[]>>\n ) {\n const newData = {\n ...formikProps.values.data,\n objectIds: formikProps.values.data.objectIds.filter(id => id !== objectId)\n };\n\n formikProps.setFieldValue('data', newData);\n },\n\n getDashboardTarget(info: DashboardTargetInfo): string {\n if (info.targetType === DashboardTargetType.Discover)\n return `discover:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.Classification)\n return `classification:${info.classificationId}`;\n\n if (info.targetType === DashboardTargetType.ClassificationDirectory)\n return `classification:${info.classificationId}:directory`;\n\n if (info.targetType === DashboardTargetType.ClassificationCurriculum)\n return `classification:${info.classificationId}:curriculum`;\n\n if (info.targetType === DashboardTargetType.MoviesAndTv)\n return `moviesAndTv:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.Company)\n return `company:${info.companyId}:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.PartnerProfile)\n return `partnerprofile:${info.slug}`;\n\n if (info.targetType === DashboardTargetType.DiscoverPartnerProfiles)\n return `discover:partners`;\n\n if (info.targetType === DashboardTargetType.PartnerProfileHub)\n return `discover:partners:hub`;\n\n return null;\n },\n\n getUnknownDashboardTarget(options: UnknownDashboardTargetInfo): string {\n const {\n presentationId,\n companyId,\n targetType,\n classificationId,\n slug\n } = options;\n\n if (targetType === DashboardTargetType.Discover) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Discover,\n presentationId\n });\n }\n \n if (targetType === DashboardTargetType.MoviesAndTv) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.MoviesAndTv,\n presentationId\n });\n }\n \n if (targetType === DashboardTargetType.Company) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Company,\n presentationId,\n companyId\n });\n }\n \n if (targetType === DashboardTargetType.Classification) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Classification,\n classificationId\n });\n }\n \n if (targetType === DashboardTargetType.ClassificationDirectory) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.ClassificationDirectory,\n classificationId\n });\n }\n \n if (targetType === DashboardTargetType.ClassificationCurriculum) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.ClassificationCurriculum,\n classificationId\n });\n }\n\n if (targetType === DashboardTargetType.PartnerProfile) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.PartnerProfile,\n slug\n });\n }\n\n if (targetType === DashboardTargetType.DiscoverPartnerProfiles) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.DiscoverPartnerProfiles\n });\n }\n\n if (targetType === DashboardTargetType.PartnerProfileHub) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.PartnerProfileHub\n });\n }\n },\n\n getDashboardTargetInfo(dashboard: CuratedDashboard): DashboardTargetInfo {\n const type = CuratedDashboardHelper.getDashboardTargetType(dashboard);\n const split = dashboard?.target?.split(':');\n\n if (type === DashboardTargetType.Discover) {\n return {\n targetType: DashboardTargetType.Discover,\n presentationId: split[2]\n };\n }\n\n if (type === DashboardTargetType.Classification) {\n return {\n targetType: DashboardTargetType.Classification,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.ClassificationDirectory) {\n return {\n targetType: DashboardTargetType.ClassificationDirectory,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.ClassificationCurriculum) {\n return {\n targetType: DashboardTargetType.ClassificationCurriculum,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.MoviesAndTv) {\n return {\n targetType: DashboardTargetType.MoviesAndTv,\n presentationId: split[2]\n };\n }\n\n if (type === DashboardTargetType.Company) {\n return {\n targetType: DashboardTargetType.Company,\n companyId: split[1],\n presentationId: split[3]\n };\n }\n\n if (type === DashboardTargetType.PartnerProfile) {\n return {\n targetType: DashboardTargetType.PartnerProfile,\n slug: split[1]\n };\n }\n\n return null;\n },\n\n getDashboardTargetType(dashboard: CuratedDashboard): DashboardTargetType {\n if (!dashboard?.target)\n return null;\n\n if (dashboard.target.startsWith('discover')) {\n if (dashboard.target.endsWith('partners'))\n return DashboardTargetType.DiscoverPartnerProfiles;\n\n if (dashboard.target.endsWith('hub'))\n return DashboardTargetType.PartnerProfileHub;\n\n return DashboardTargetType.Discover;\n }\n\n if (dashboard.target.startsWith('classification')) {\n if (dashboard.target.endsWith('directory'))\n return DashboardTargetType.ClassificationDirectory;\n\n if (dashboard.target.endsWith('curriculum'))\n return DashboardTargetType.ClassificationCurriculum;\n\n return DashboardTargetType.Classification;\n }\n\n if (dashboard.target.startsWith('moviesAndTv'))\n return DashboardTargetType.MoviesAndTv;\n\n if (dashboard.target.startsWith('company')) {\n return DashboardTargetType.Company;\n }\n\n if (dashboard.target.startsWith('partnerprofile'))\n return DashboardTargetType.PartnerProfile;\n\n return null;\n },\n\n isType(dashboard: CuratedDashboard, target: DashboardTargetType): boolean {\n return CuratedDashboardHelper.getDashboardTargetType(dashboard) === target;\n },\n\n isCuratedDashboard(obj: BaseObject): obj is CuratedDashboard {\n const dashboard = obj as CuratedDashboard;\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard);\n\n if (targetType === DashboardTargetType.Discover)\n return true;\n\n if (targetType === DashboardTargetType.Classification)\n return true;\n\n if (targetType === DashboardTargetType.ClassificationDirectory)\n return true;\n\n if (targetType === DashboardTargetType.ClassificationCurriculum)\n return true;\n\n if (targetType === DashboardTargetType.MoviesAndTv)\n return true;\n\n if (targetType === DashboardTargetType.Company)\n return true;\n\n return false;\n },\n\n getLatestReleasedTimeRange(): LatestReleasesTimeRange {\n const now = new Date();\n const from = DateHelper.format(DateHelper.endOf(DateHelper.subtract(now, 2, 'month'), 'day'), 'YYYY-MM-DD');\n const to = DateHelper.format(DateHelper.endOf(now, 'day'), 'YYYY-MM-DD');\n return { from, to };\n },\n\n getWidgetParams(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target: DashboardTargetType,\n audienceIds?: string | string[],\n preferredCurriculumId?: string,\n options?: GetCustomParamOptions\n ): CuratedWidgetQueryParams {\n const params: CuratedWidgetQueryParams = { };\n\n if (audienceIds)\n params.audienceId = audienceIds;\n\n if (widgetTypeId === WidgetTypeId.ClassificationCurriculumMedia)\n params.curriculumPresentationId = preferredCurriculumId;\n\n return {\n ...params,\n ...WidgetTypeIdConfig[widgetTypeId]?.getCustomParams?.(templateId, target, options)\n };\n },\n\n isSystemGeneratedDashboard(widgets: CuratedWidget[]): boolean {\n const systemGeneratedClassificationWidgetTypes = new Set<WidgetTypeId>([\n WidgetTypeId.ClassificationFeaturedVideo,\n WidgetTypeId.ClassificationPinnedVideos,\n WidgetTypeId.ClassificationPlaylists,\n WidgetTypeId.ClassificationSeries\n ]);\n\n return widgets?.some(widget => systemGeneratedClassificationWidgetTypes.has(widget.widgetId));\n },\n\n isClassificationDashboard(\n targetInfo: DashboardTargetInfo\n ): targetInfo is ClassificationDashboardInfo | ClassificationDirectoryInfo | ClassificationCurriculumInfo {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetInfo?.targetType);\n },\n\n isContentPartnerDashboard(targetInfo: DashboardTargetInfo): targetInfo is PartnerProfileDashboardInfo {\n return targetInfo?.targetType === DashboardTargetType.PartnerProfile;\n },\n\n isDirectoryDashboard(\n targetInfo: DashboardTargetInfo\n ): targetInfo is ClassificationDirectoryInfo {\n return targetInfo?.targetType === DashboardTargetType.ClassificationDirectory;\n },\n\n isWidgetTypeEnabled(\n widgetTypeId: WidgetTypeId,\n settingsHash: SettingsHash,\n targetType: DashboardTargetType\n ): boolean {\n const config = WidgetTypeIdConfig[widgetTypeId];\n \n return config?.predicate?.({ settingsHash, targetType }) ?? true;\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SourceFilterOptions, TypeFilterOptions } from '../apps/search/interfaces';\nimport { WidgetAppLinks } from '../components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplate } from '../enums/WidgetTemplate';\nimport { WidgetTypeId } from '../enums/WidgetTypeId';\nimport { SettingsHash } from '../hooks/useSettings';\nimport { CuratedWidgetContent, CuratedWidgetQueryParams, DashboardTargetType, Series } from '../interfaces';\nimport { CuratedDashboardHelper } from '../utils/DashboardHelper';\n\ninterface WidgetTypeIdPredicateOptions {\n settingsHash: SettingsHash;\n targetType: DashboardTargetType;\n}\n\nexport interface GetCustomParamOptions {\n params?: CuratedWidgetQueryParams;\n}\n\ninterface WidgetTypeIdConfigType {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => CuratedWidgetQueryParams;\n minContent?: number;\n getCollectionAppLink?: (\n appLinks: Partial<WidgetAppLinks>,\n content?: CuratedWidgetContent,\n ) => Core.AppLink;\n /**\n * Predicate used to determine if the widget\n * should be displayed based on the target\n * type and settings. Useful for feature flagging widgets.\n */\n predicate?: (options: WidgetTypeIdPredicateOptions) => boolean;\n}\n\nfunction partnerProfileWidgetTypeIdPredicate(options: WidgetTypeIdPredicateOptions): boolean {\n return options.settingsHash?.hasPartnerProfiles ?? false;\n}\n\nexport const WidgetTypeIdConfig: Record<WidgetTypeId, WidgetTypeIdConfigType> = {\n [WidgetTypeId.CuratedMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.PlaylistMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SeriesMedia]: {\n getCustomParams: (widgetTemplate: WidgetTemplate) => {\n switch (widgetTemplate) {\n case WidgetTemplate.ThumbnailFixedListMediaLarge:\n return { limit: 2 };\n case WidgetTemplate.ThumbnailHeroMedia:\n case WidgetTemplate.ThumbnailFeaturedMedia:\n return { limit: 1 };\n default:\n return { limit: 12 };\n }\n },\n getCollectionAppLink: (appLinks, content) => appLinks?.series?.(ArrayHelper.first(content) as Series)\n },\n [WidgetTypeId.ClassificationMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.LatestReleasedVideos]: {\n getCustomParams: () => {\n return CuratedDashboardHelper.getLatestReleasedTimeRange();\n }\n },\n [WidgetTypeId.ContinueWatching]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks?.watchHistory?.()\n },\n [WidgetTypeId.CompanyLatestReleasedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.CompanyVideos]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationLatestReleasedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationLatestReleasedVideosV2]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n [WidgetTypeId.SeasonalClassificationMedia]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n [WidgetTypeId.CompanyClassificationVideos]: {\n getCustomParams: () => ({}),\n minContent: 4\n },\n [WidgetTypeId.TrendingClassificationsMedia]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n\n [WidgetTypeId.CuratedClassifications]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.TrendingClassifications]: {\n getCustomParams: () => {\n return {\n limit: 6\n };\n },\n minContent: 3\n },\n [WidgetTypeId.Classifications]: {\n getCustomParams: (template: WidgetTemplate, targetType: DashboardTargetType) => {\n if (targetType === DashboardTargetType.Discover) {\n if (template === WidgetTemplate.EditableCoverFixedPillListSmall) {\n return {\n canBePreferred: true,\n isFollowing: true\n };\n }\n\n if ([ WidgetTemplate.PosterSlidingListSmall, WidgetTemplate.CoverFixedPillListXSmall ].includes(template)) {\n return {\n canBePreferred: true\n };\n }\n }\n\n return {};\n }\n },\n [WidgetTypeId.ClassificationLatestReleasedVideos]: {\n getCustomParams: () => {\n return CuratedDashboardHelper.getLatestReleasedTimeRange();\n }\n },\n [WidgetTypeId.SpecialEventClassifications]: {\n getCustomParams: () => ({\n from: DateHelper.format(new Date(), 'YYYY-MM-DD')\n })\n },\n [WidgetTypeId.LatestReleasedClassifications]: {\n getCustomParams: () => {\n return {\n limit: 6\n };\n },\n minContent: 3\n },\n\n [WidgetTypeId.CuratedSeries]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.CuratedPlaylists]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.Blurb]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.DynamicBlurb]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.AuthorReviewer]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.Faq]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.CuratedCompanies]: {\n getCustomParams: () => ({}),\n predicate: options => {\n if (options.settingsHash?.hasPartnerProfiles)\n return false;\n return true;\n }\n },\n\n [WidgetTypeId.Ratings]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.Presentations]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.UpcomingLivestreams]: {\n getCustomParams: () => ({\n from: DateHelper.format(new Date(), 'YYYY-MM-DD')\n })\n },\n\n [WidgetTypeId.CuratedMultimedia]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.ClassificationPlaylists]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationSeries]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationFeaturedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationPinnedVideos]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationDashboardExternalMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationDashboardMedia]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.SearchRelevantTopics]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchRelevantTopics],\n type: [TypeFilterOptions.Classification]\n })\n },\n [WidgetTypeId.SearchCompanies]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchCompanies],\n type: [TypeFilterOptions.Company]\n }),\n predicate: options => {\n if (options.settingsHash?.hasPartnerProfiles)\n return false;\n return true;\n }\n },\n [WidgetTypeId.SearchSeries]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchSeries],\n type: [TypeFilterOptions.Series]\n })\n },\n [WidgetTypeId.SearchPlaylists]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchPlaylists],\n type: [TypeFilterOptions.Playlist]\n })\n },\n [WidgetTypeId.SearchMyVideosFolder]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMyVideosFolder],\n source: [SourceFilterOptions.MyVideos]\n })\n },\n [WidgetTypeId.SearchMySchoolLibraryFolder]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMySchoolLibraryFolder],\n source: [SourceFilterOptions.School]\n })\n },\n [WidgetTypeId.SearchMyVideos]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMyVideos],\n source: [SourceFilterOptions.MyVideos]\n })\n },\n [WidgetTypeId.SearchMySchoolLibraryVideos]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMySchoolLibraryVideos],\n source: [SourceFilterOptions.School]\n })\n },\n [WidgetTypeId.SearchExchangeArchive]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchExchangeArchive],\n source: [SourceFilterOptions.ExchangeArchive]\n })\n },\n [WidgetTypeId.SearchRelatedResults]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchTopResults]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationCurriculumMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchTags]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchCurriculumCode]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchSuggestions]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchContentPartners]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchContentPartners],\n type: [TypeFilterOptions.PartnerProfile]\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.CuratedContentPartners]: {\n getCustomParams: () => ({\n limit: 12\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerSeries]: {\n getCollectionAppLink: appLinks => {\n return appLinks?.scopedSearchHome?.({\n type: [TypeFilterOptions.Series]\n });\n },\n getCustomParams: () => ({\n limit: 12\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerVideos]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.SpotlightContentPartners]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartners]: {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => ({\n letterPrefix: options?.params?.letterPrefix,\n sort: options?.params?.sort\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnersHub]: {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => {\n if (targetType !== DashboardTargetType.PartnerProfileHub)\n return {};\n\n return {\n objectId: options?.params?.objectId\n };\n },\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.TrendingContentPartnersVideo]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerAllVideos]: {\n getCustomParams: (widgetTemplate: WidgetTemplate) => {\n if (widgetTemplate === WidgetTemplate.ThumbnailFixedListSearchCta)\n return { limit: 3 };\n\n return {};\n },\n predicate: partnerProfileWidgetTypeIdPredicate\n }\n};","import React from 'react';\n\nexport function WarningOutlineSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m13.026 4.377 8.5 14A1.2 1.2 0 0 1 20.5 20.2h-17a1.2 1.2 0 0 1-1.026-1.823l8.5-14a1.2 1.2 0 0 1 2.052 0M12 5 3.5 19h17zm0 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2m.75-3.677a.69.69 0 0 1-.7.677.69.69 0 0 1-.7-.677V8.677c0-.374.313-.677.7-.677s.7.303.7.677z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","export enum WidgetStatus {\n Draft = 0,\n Published = 1,\n Archived = 2\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetStatus } from 'libs/shared/enums/WidgetStatus';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseWidget, CuratedDashboardAppLink, CuratedWidget, CuratedWidgetContent, Playlist, Presentation, Series, Video, VideoTypes, VideoWidgetTemplateContent, WidgetMetadata, WidgetPreference } from 'libs/shared/interfaces';\n\nimport { AnyWidgetTemplateProps } from '../components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTypeIdConfig } from '../constants/WidgetTypeIdConfig';\nimport { MasterType } from '../enums/MasterType';\n\nimport { MasterTypeHelper } from './MasterTypeHelper';\n\nenum WidgetStatusString {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived'\n}\n\nexport const WidgetHelper = {\n /**\n * Used by both the FixedWidget and DynamicWidget\n */\n getSliderAnalyticsOptions: (): AnalyticsOptions => ({\n actionType: UserAction.Click,\n location: LocationContext.SlidingList,\n entity: EntityType.Widget,\n descriptor: ClickDescriptor.Slide\n }),\n\n /**\n * Used by both the FixedWidget and DynamicWidget\n */\n getSliderItemAnalyticsOptions: (): AnalyticsOptions => ({\n location: LocationContext.SlidingListItem\n }),\n\n getSliderHeadingAnalyticsOptions: (): AnalyticsOptions => ({\n actionType: UserAction.Click,\n location: LocationContext.SlidingList,\n entity: EntityType.Widget,\n descriptor: ClickDescriptor.Title\n }),\n\n useGetContent(\n content: CuratedWidgetContent,\n widgetTypeId: WidgetTypeId,\n isPreviewing: boolean,\n preferences: WidgetPreference[],\n removedItemIds: string[]\n ): { content: CuratedWidgetContent; unfilteredContent: CuratedWidgetContent; } {\n return React.useMemo(() => {\n if (!content)\n return { content: null, unfilteredContent: null };\n\n if (!Array.isArray(content))\n return { content, unfilteredContent: content };\n\n const preferencesHash = preferences?.reduce((acc: HashObject, current) => {\n acc[current.id] = current;\n return acc;\n }, {}) ?? {};\n\n const removedItemIdsHash = removedItemIds.reduce((acc: HashObject, current) => {\n acc[current] = true;\n return acc;\n }, {});\n\n const contentCopy = [...content];\n \n const sortedContent = contentCopy.sort((a, b) => {\n if (!('id' in a) || !('id' in b))\n return 0;\n\n const aIndex = preferencesHash[a.id]?.index ?? contentCopy.findIndex(c => 'id' in c && c.id === a.id);\n const bIndex = preferencesHash[b.id]?.index ?? contentCopy.findIndex(c => 'id' in c && c.id === b.id);\n\n if (aIndex < bIndex)\n return -1;\n\n if (aIndex > bIndex)\n return 1;\n\n return 0;\n });\n\n if (WidgetHelper.isBelowContentMinimum(sortedContent, widgetTypeId) && !isPreviewing) {\n return {\n content: [],\n unfilteredContent: sortedContent\n };\n }\n\n const filteredContent = sortedContent.filter(item => {\n if (preferencesHash['id' in item && item.id]?.hidden)\n return false;\n\n if (removedItemIdsHash['id' in item && item.id])\n return false;\n\n return true;\n });\n\n return {\n content: filteredContent,\n unfilteredContent: sortedContent\n };\n }, [ content, preferences ]);\n },\n\n isBelowContentMinimum(content: CuratedWidgetContent, widgetTypeId: WidgetTypeId): boolean {\n const minContent = WidgetTypeIdConfig[widgetTypeId]?.minContent || 0;\n return content?.length < minContent;\n },\n\n getCustomAppLink(props: AnyWidgetTemplateProps): Core.AppLink | null {\n if (\n !('metadata' in props) ||\n !('appLinks' in props) ||\n !('appLink' in props.metadata)\n ) {\n return null;\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.LatestReleases && 'latestReleases' in props.appLinks)\n return props.appLinks?.latestReleases?.();\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics && 'allTopics' in props.appLinks && 'presentation' in props)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return null;\n },\n\n getWidgetStatus(widget: CuratedWidget): WidgetStatus {\n let status = widget.status;\n\n if (typeof (status) === 'string') {\n switch (status) {\n case WidgetStatusString.Archived:\n status = WidgetStatus.Archived;\n break;\n case WidgetStatusString.Published:\n status = WidgetStatus.Published;\n break;\n case WidgetStatusString.Draft:\n status = WidgetStatus.Draft;\n break;\n }\n }\n\n return status;\n },\n\n formatResponseData(widget: CuratedWidget, presentation?: Presentation): CuratedWidget {\n const content = widget.content;\n\n if (!content)\n return widget;\n\n if ('author' in content) {\n widget.content = [content] as CuratedWidgetContent;\n return widget;\n }\n\n if ('data' in content)\n widget.content = content.data as CuratedWidgetContent;\n else if (!Array.isArray(content))\n widget.content = [content]; // Handle `classification_featured_video` widgets, which don't return content as an array\n\n switch (widget.widgetId) {\n case WidgetTypeId.ClassificationSeries:\n widget.content = widget.content.filter((c): c is Series => 'tallPoster' in c && !!c.tallPoster?.id);\n break;\n case WidgetTypeId.ClassificationPlaylists:\n widget.content = widget.content.filter((c): c is Playlist => 'cover' in c && !!c.cover?.id);\n break;\n case WidgetTypeId.ContinueWatching:\n widget.content = widget.content.map(c => 'object' in c && c.object);\n default:\n break;\n case WidgetTypeId.Presentations:\n widget.content = widget.content.filter((c): c is Presentation => 'id' in c && c.id.toString() !== presentation?.id?.toString());\n break;\n }\n\n return widget;\n },\n \n isWidgetInTableOfContents(metadata: Partial<WidgetMetadata>): boolean {\n return !!metadata?.showInTableOfContents;\n },\n\n /**\n * Widget container view won't render a widget with no content typically,\n * but some widgets (such as blurbs) have no content, but should render anyway.\n */\n hasNoContent(widgetTypeId: WidgetTypeId): boolean {\n if (widgetTypeId === WidgetTypeId.Blurb)\n return true;\n\n return false;\n },\n\n /**\n * If any widgets should be hidden on smaller screen sizes, add them here.\n * If this needs to be more flexible at some point, it should be added to\n * the widget settings and metadata object.\n */\n canDisplayOnScreenSize(\n breakpoints: Breakpoints,\n widgetTypeId: WidgetTypeId,\n widgetTemplate: WidgetTemplate\n ): boolean {\n if (widgetTypeId === WidgetTypeId.Blurb && widgetTemplate === WidgetTemplate.HeroBannerSmall)\n return !breakpoints.xs && !breakpoints.sm;\n\n return true;\n },\n\n isCompanyWidget(widgetTypeId: WidgetTypeId): boolean {\n switch (widgetTypeId) {\n case WidgetTypeId.CompanyLatestReleasedVideo:\n case WidgetTypeId.CompanyVideos:\n case WidgetTypeId.UpcomingLivestreams:\n return true;\n default:\n return false;\n }\n },\n\n getVideoContent(content: VideoWidgetTemplateContent): VideoTypes[] {\n const firstItem = ArrayHelper.first<Video | Series>(content);\n\n if (MasterTypeHelper.isType<Series>(firstItem, MasterType.Series))\n return firstItem.videos.data;\n\n return content as VideoTypes[];\n },\n\n showRemoveButton(widgetTypeId: WidgetTypeId): boolean {\n return widgetTypeId === WidgetTypeId.ContinueWatching;\n },\n\n /**\n * Paginated data returns more widgets so if we dont merge the widget content by widget type id,\n * it would add another widget to the page rather than appending content to the relevant\n * search result index\n * \n * For example:\n * Say we receive these widgets for a query:\n * - topics widget\n * - related results widget\n * \n * If a user scrolls down to the end of page we fetch more items from the last widget\n * which in this case is 'related results widget'. \n * Now our overall response looks like this\n * - topics widget\n * - related results widget\n * - related results widget\n * \n * Since this is a new widget item entry it will be rendered as a new widget with seprate headings etc.\n * In this case we want to combine these two widgets data into one so its looks like this again:\n * - topics widget\n * - related results widget (data is combined)\n * \n * But what if widget we get recieve has a different widget template id. This currently happens for\n * the 'series widget' - series widget can have the tall poster template or the thumbnail like template.\n * \n * so to visualize this it can be like:\n * - topics widget\n * - top results widget\n * - series widget (template: tall poster)\n * - series widget (template: thumbnail)\n * \n * Since they technically will look different based on the template id we will not merge the data in this case.\n * It will merge the data to the same widget as long as the combination of widget Id + template Id is the same.\n * \n * Since they are separate widgets they will render duplicate headings - we handle this in css instead which\n * checks for adjacent siblings and if its the same widget - it hides the widget heading so it will look\n * like its a single widget rather than separate widgets.\n * \n * - Nish\n */\n mergeWidgets<T extends BaseWidget>(\n items: T[],\n mergeContent: (target: T, source: T) => void\n ): T[] {\n const widgets = ObjectHelper.deepClone(items);\n const groupedWidgets = ArrayHelper.groupBy(widgets, 'widgetId');\n const mergedWidgets: T[] = [];\n\n for (const widgetGroup of Object.values(groupedWidgets)) {\n let currentMergedWidget: T | null = null;\n const groupMergedWidgets: T[] = [];\n\n for (const widget of widgetGroup) {\n if (!currentMergedWidget) {\n currentMergedWidget = widget;\n continue;\n }\n\n if (widget.templateId !== currentMergedWidget.templateId) {\n groupMergedWidgets.push(currentMergedWidget);\n currentMergedWidget = widget;\n continue;\n }\n\n mergeContent(currentMergedWidget, widget);\n }\n\n if (currentMergedWidget) {\n groupMergedWidgets.push(currentMergedWidget);\n }\n mergedWidgets.push(...groupMergedWidgets);\n }\n\n return mergedWidgets;\n }\n};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WarningOutlineSvg } from 'libs/shared/images/svg/status/WarningOutlineSvg';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-header.module.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description?: string | JSX.Element;\n isPreviewing?: boolean;\n content?: any[];\n widgetTypeId?: WidgetTypeId;\n badgeComponent?: JSX.Element;\n\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n \n showSeeMoreLink?: boolean;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{\n location: LocationContext.SlidingList,\n ...props.analyticsOptions,\n descriptor: ClickDescriptor.SeeMore\n }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nfunction CloseWidgetButton(props: { onClose: () => void }) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none cursor-pointer`} onClick={props.onClose}>\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('hide')}</p>\n </div>\n );\n}\n\nfunction FollowWidgetButton(props: {\n isFollowing: boolean,\n onFollow: (shouldFollow: boolean) => void,\n showFollowSpinner: boolean\n}) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none`}>\n {\n props.showFollowSpinner ?\n <Spinner as='span' animation='border' role='status' size='sm' /> :\n <p className='hover-text-underline text-dark curated-widget-heading cursor-pointer' onClick={() => props.onFollow(!props.isFollowing)}>\n {getPhrase(props.isFollowing ? 'unfollow' : 'follow')}\n </p>\n }\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n const isBelowMinimum = WidgetHelper.isBelowContentMinimum(props.content, props.widgetTypeId);\n const minContent = WidgetTypeIdConfig[props.widgetTypeId]?.minContent ?? 0;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className='d-flex align-items-center'>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link text-reset' : ''}`}\n onClick={props.onAppLinkClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.isPreviewing && isBelowMinimum && (\n <SvgContainer\n svg={WarningOutlineSvg}\n title={`Widget is below the minimum content threshold of ${minContent} and won't be displayed.`}\n tooltipSpanHack\n tooltipSpanHackClassName='d-inline text-danger me-1'\n />\n )}\n {props.name}\n </h2>\n </AppLink>\n {!!React.isValidElement(props.badgeComponent) && props.badgeComponent}\n </div>\n )}\n <div className='d-flex justify-content-between align-items-center gap-2'>\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n {FunctionHelper.isFunction(props.onFollow) &&\n <FollowWidgetButton\n isFollowing={props.isFollowing}\n onFollow={props.onFollow}\n showFollowSpinner={props.showFollowSpinner}\n />\n }\n {FunctionHelper.isFunction(props.onClose) && <CloseWidgetButton onClose={props.onClose}/>}\n </div>\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","export enum TagType {\n Normal = 'normal',\n Pedagogy = 'pedagogy',\n Hidden = 'hidden',\n Skill = 'skill',\n Curation = 'curation'\n}\n\n/**\n * This should **only** be used to create new tags in master (as it only accepts enum values).\n * Use the string enum above for all other cases.\n */\nexport enum TagTypeNumber {\n Normal = 0,\n Pedagogy = 1,\n Hidden = 2,\n Skill = 3,\n Curation = 4\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { Tag, ThemeColours } from 'libs/shared/interfaces';\n\nimport { DivButton } from '../div-button/DivButton';\n\nimport styles from './tags.module.scss';\n\nconst namespace = 'shared.tags';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TagItemProps {\n tag: Tag;\n themeColours?: ThemeColours;\n appLink?: Core.AppLink;\n onClick?: () => void;\n onRemove?: () => void;\n disabled?: boolean;\n tagClass?: string;\n}\n\nfunction getTagTypeClass(tagType: TagType, hasThemeColour: boolean): string {\n switch (tagType) {\n case TagType.Pedagogy:\n case TagType.Skill:\n return 'pedagogy-tag text-white';\n\n case TagType.Hidden:\n return 'hidden-tag fw-normal';\n\n case TagType.Normal:\n if (!hasThemeColour)\n return 'bg-gray-100 fw-normal';\n return '';\n\n default:\n return '';\n }\n}\n\nexport function TagItem(props: TagItemProps): JSX.Element {\n const { tag, appLink, onClick, disabled, tagClass = 'tag' } = props;\n\n const name = tag.name.toLowerCase();\n const tagType = tag.tagType?.toLowerCase() as TagType;\n\n const hasThemeColour = (tagType === TagType.Normal && props.themeColours) && !!props.themeColours?.secondary;\n let classNames = `${styles.badgeBase} rounded-pill py-1 px-2 my-1 me-1 ${tagClass} ${getTagTypeClass(tagType, hasThemeColour)}`;\n let textContainerClass = `text-truncate text-nowrap`;\n\n if (hasThemeColour)\n classNames += ' text-white';\n\n if ((appLink || onClick) && !disabled)\n classNames += ' cursor-pointer';\n\n if (disabled)\n classNames += ' ' + styles.disabled;\n\n if (props.onRemove) {\n classNames += ' ' + styles.removeBadge;\n textContainerClass += ' ' + `${styles.removeBadgeText} d-inline-flex align-items-center lh-1`;\n }\n if (!appLink)\n classNames += ' d-inline-block';\n\n const style: React.CSSProperties = hasThemeColour\n ? { backgroundColor: props.themeColours.secondary }\n : {};\n\n if (appLink) {\n return (\n <AppLink\n onClick={onClick}\n appLink={appLink}\n className={classNames}\n title={name}\n style={style}\n >\n <span className={textContainerClass}>{name}</span>\n </AppLink>\n );\n }\n\n return (\n <button\n onClick={onClick}\n className={classNames}\n title={name}\n style={style}\n aria-label={`${getPhrase('ariaFilter')} ${name}`}\n >\n <span className={textContainerClass}>\n {name}\n {props.onRemove &&\n <DivButton\n onClick={props.onRemove}\n className={`${styles.close} btn-close font-size-normal`}\n role='button'\n aria-label='Close'\n />\n }\n </span>\n </button>\n );\n}"],"names":["CuratedDashboardAppLink","FilterIdNames","FilterBlacklist","FilterWhitelist","acc","prev","SourceFilterOptions","TypeFilterOptions","WidgetTemplate","WidgetTypeId","CuratedDashboardHelper","selectedObj","formikProps","data","ArrayHelper","objectId","newData","id","info","DashboardTargetType","options","presentationId","companyId","targetType","classificationId","slug","dashboard","type","split","_a","target","obj","now","from","DateHelper","to","widgetTypeId","templateId","audienceIds","preferredCurriculumId","params","_b","WidgetTypeIdConfig","widgets","systemGeneratedClassificationWidgetTypes","widget","targetInfo","settingsHash","config","partnerProfileWidgetTypeIdPredicate","widgetTemplate","appLinks","content","template","WarningOutlineSvg","props","jsx","WidgetStatus","WidgetHelper","UserAction","LocationContext","EntityType","ClickDescriptor","isPreviewing","preferences","removedItemIds","React","preferencesHash","current","removedItemIdsHash","contentCopy","sortedContent","a","b","aIndex","c","bIndex","item","minContent","_c","_d","_f","_e","status","presentation","metadata","breakpoints","firstItem","MasterTypeHelper","MasterType","items","mergeContent","ObjectHelper","groupedWidgets","mergedWidgets","widgetGroup","currentMergedWidget","groupMergedWidgets","namespace","getPhrase","LanguageService","SeeMore","styles","AppLink","CloseWidgetButton","FollowWidgetButton","Spinner","WidgetHeader","hasDescription","Fragment","isBelowMinimum","jsxs","SvgContainer","FunctionHelper","TagType","getTagTypeClass","tagType","hasThemeColour","TagItem","tag","appLink","onClick","disabled","tagClass","name","classNames","textContainerClass","style","DivButton"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"BlabCH8N.chunk.js","sources":["../../../../libs/shared/src/interfaces/models/curated-widget/CuratedWidget.ts","../../../../libs/shared/src/apps/search/interfaces/SearchFilter.ts","../../../../libs/shared/src/enums/WidgetTemplate.ts","../../../../libs/shared/src/enums/WidgetTypeId.ts","../../../../libs/shared/src/utils/DashboardHelper.ts","../../../../libs/shared/src/constants/WidgetTypeIdConfig.ts","../../../../libs/shared/src/images/svg/status/WarningOutlineSvg.tsx","../../../../libs/shared/src/enums/WidgetStatus.ts","../../../../libs/shared/src/utils/WidgetHelper.ts","../../../../libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","../../../../libs/shared/src/enums/TagType.ts","../../../../libs/shared/src/components/tags/TagItem.tsx"],"sourcesContent":["import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AllWidgetTemplateProps } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { ButtonIcon } from 'libs/shared/constants/WidgetThemingConstants';\nimport { WidgetStatus } from 'libs/shared/enums/WidgetStatus';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CuratedObjectsWidgetData, CuratedWidgetContent, CuratedWidgetData } from 'libs/shared/interfaces';\n\nexport enum CuratedDashboardAppLink {\n LatestReleases = 'latest-releases',\n ExploreAllTopics = 'explore-all-topics',\n ClassificationLatestReleases = 'classification-latest-releases',\n ClassificationDirectory = 'classification-directory',\n}\n\nexport enum CuratedWidgetCtaAppLink {\n TopicDirectory = 'topic-directory',\n TopicNewReleases = 'topic-new-releases',\n CuratedTopic = 'curated-topic'\n}\n\nexport interface BaseWidget<TContent extends HashObject = HashObject> {\n index: number;\n templateId: WidgetTemplate;\n widgetId: WidgetTypeId;\n name: string;\n description?: string;\n content?: TContent\n}\n\nexport interface WidgetCta {\n text?: string;\n href?: string;\n icon?: ButtonIcon;\n appLink?: CuratedWidgetCtaAppLink;\n}\n\nexport type WidgetMetadata = AllWidgetTemplateProps['metadata'] & {\n showInTableOfContents: boolean;\n tocIndentation: number;\n headingOptional: boolean;\n aiAddedVideo: boolean;\n};\n\nexport interface WidgetPreference {\n id: string;\n index?: number;\n hidden?: boolean;\n}\n\nexport interface CuratedWidget<\n TData extends CuratedWidgetData = CuratedWidgetData,\n TContent extends CuratedWidgetContent = CuratedWidgetContent\n> extends BaseWidget<TContent> {\n id: string;\n dashboardId: string;\n data: TData;\n status: WidgetStatus;\n metadata?: Partial<WidgetMetadata>;\n preferences?: WidgetPreference[];\n cursor?: string;\n\n // If a widget has curriculum IDs set, then it won't be accessible to anyone who doesn't have one of those curriculums\n curriculumIds?: string[];\n}\n\nexport type CuratedMediaWidget<\n TContent extends CuratedWidgetContent = CuratedWidgetContent\n> = CuratedWidget<CuratedObjectsWidgetData, TContent>;","import { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { FilterStateHash } from '../reducers';\n\nimport { FilterProps } from './FilterProps';\nimport { SearchIndices } from './SearchResults';\n\nconst FilterIdNames =\n[\n 'sort', // \"sort\" isn't even a filter but it tends to go with our filters in our designs\n 'classification',\n 'presentation',\n 'audience',\n 'yearGroup',\n 'moviesAndTv',\n 'type',\n 'rating',\n 'interactives',\n 'clips',\n 'classroom',\n 'hasResources',\n 'hasSubtitles',\n 'productionYear',\n 'isHd',\n 'producedByClickView',\n 'duration',\n 'tagOrClassification',\n 'status',\n 'isAdmin',\n 'bulkActionType',\n 'userType',\n 'filter',\n 'channel',\n 'dateBroadcast',\n 'categoryId',\n 'hasInteractives',\n 'jobStatus',\n 'source',\n 'customerStatus',\n 'specialEventType',\n 'customerType',\n 'seriesId',\n 'scopeId'\n] as const;\n\n/**\n * Any filters that shouldn't be sent to the backend as a filter\n * and are instead handled differently by the frontend\n */\nconst FilterBlacklist: Partial<Record<FilterIds, boolean>> = {\n type: true\n};\n\nexport type FilterIds = typeof FilterIdNames[number];\n\nexport const FilterWhitelist = FilterIdNames.reduce((acc, prev) => {\n return {\n ...acc,\n [prev]: !FilterBlacklist[prev]\n };\n}, {} as Record<FilterIds, boolean>);\n\nexport type FilterType = 'radio' | 'checkbox' | 'nested-checkbox' | 'grouped-checkbox' | 'switch' | 'more-filters' | 'rating' | 'dropdown' | 'tag' | 'button';\n\nexport interface SearchFilter<TFilterOptionId = string> {\n id: FilterIds;\n type: FilterType;\n compatibleIndices: SearchIndices[];\n\n name?: string;\n icon?: SvgIcon;\n description?: string;\n options?: FilterOption<TFilterOptionId>[];\n labelPrefix?: string;\n\n // For second layer options, for example 'presentation' checkbox filter has 'audience' as second layer option\n secondaryId?: FilterIds;\n\n customComponent?: (props: FilterProps) => JSX.Element;\n disabled?: boolean;\n disableOptions?: (options: FilterOption[], filters: SearchFilter[], state: FilterStateHash) => FilterOption[];\n}\n\nexport interface MoreFilters extends Omit<SearchFilter, 'id' | 'compatibleIndices'> {\n filters: SearchFilter[];\n id: string;\n}\n\nexport interface FilterOption<TId = string> {\n id: TId;\n name: string;\n default?: boolean;\n disabled?: boolean;\n secondLayerSelection?: FilterOption[];\n secondLayerOptions?: FilterOption[];\n group?: string;\n}\n\nexport type ProductionYearFilterOptions =\n 'any-year'\n | 'this-year'\n | 'last-3-years'\n | 'last-5-years';\n\nexport type DurationFilterOptions =\n 'bite-sized'\n | 'short'\n | 'medium'\n | 'long';\n\n\nexport enum SourceFilterOptions {\n MyVideos = 'my-videos',\n School = 'school',\n ExchangeArchive = 'exchange-archive',\n ClickView = 'clickview',\n LiveStreams = 'livestreams'\n}\n\nexport enum TypeFilterOptions {\n Video = 'video',\n Series = 'series',\n Playlist = 'playlist',\n Classification = 'classification',\n Clip = 'clip',\n Interactive = 'interactive',\n Company = 'company',\n Category = 'category',\n PartnerProfile = 'partner_profile'\n}","export enum WidgetTemplate {\n // Videos\n ThumbnailHeroMedia = 'thumbnail_hero_media',\n ThumbnailFeaturedMedia = 'thumbnail_featured_media',\n ThumbnailSlidingListSmall = 'thumbnail_sliding_list_small',\n ThumbnailSlidingListSmallV2 = 'thumbnail_sliding_list_small_v2',\n ThumbnailSlidingListLarge = 'thumbnail_sliding_list_large',\n ThumbnailFixedListMediaSmall = 'thumbnail_fixed_list_media_small',\n ThumbnailFixedListMediaLarge = 'thumbnail_fixed_list_media_large',\n ThumbnailFixedListFolderSmall = 'thumbnail_fixed_list_folder_small',\n ThumbnailVerticalList = 'thumbnail_vertical_list',\n PopoutThumbnailSlidingListLarge = 'popout_thumbnail_sliding_list_large',\n PopoutThumbnailSlidingListSmall = 'popout_thumbnail_sliding_list_small',\n FeaturedThumbnailSlidingList = 'featured_thumbnail_sliding_list',\n ThumbnailFixedListXLarge = 'thumbnail_fixed_list_xlarge',\n\n // Topics\n CoverSlidingPillListSmall = 'cover_sliding_pill_list_small',\n CoverFixedPillListLarge = 'cover_fixed_pill_list_large',\n StatsCoverFixedPillListLarge = 'stats_cover_fixed_pill_list_large',\n CoverFixedPillListXSmall = 'cover_fixed_pill_list_xsmall',\n ThumbnailFixedListLarge = 'thumbnail_fixed_list_large',\n ThumbnailFixedListSmall = 'thumbnail_fixed_list_small',\n EditableCoverFixedPillListSmall = 'editable_cover_fixed_pill_list_small',\n HeroBanner = 'hero_banner',\n HeroThumbnailSmall = 'hero_thumbnail_small',\n HeroBlockColourSmall = 'hero_block_colour_small',\n\n // Curriculum\n CurriculumResourcesAccordion = 'curriculum_resources_accordion',\n CurriculumCodeSearchResults = 'curriculum_code_search_results',\n\n // Playlists\n CoverFixedTileList = 'cover_fixed_tile_list',\n\n // Topics & Series\n PosterSlidingListLarge = 'poster_sliding_list_large',\n PosterSlidingListMedium = 'poster_sliding_list_medium',\n PosterSlidingListSmall = 'poster_sliding_list_small',\n PosterFixedListLarge = 'poster_fixed_list_large',\n\n // Blurbs & Topics\n HeroBannerSmall = 'hero_banner_small',\n\n // Text-based blurbs\n Heading = 'heading',\n AuthorReviewer = 'author_reviewer',\n Question = 'question',\n QuestionAccordion = 'question_accordion',\n\n // Companies / Studios / Content Partners\n CircleLogoSlidingList = 'circle_logo_sliding_list',\n RectangularLogoSlidingList = 'rectangular_logo_sliding_list',\n RectangularLogoFixedList = 'rectangular_logo_fixed_list',\n ThumbnailFixedListSearchCta = 'thumbnail_fixed_list_search_cta',\n InfiniteThumbnailVerticalList = 'infinite_thumbnail_vertical_list',\n\n // Rating filters\n FilterSlidingPillListSmall = 'filter_sliding_pill_list_small',\n\n // Special events\n EventIconSlidingList = 'event_icon_sliding_list',\n\n // Tags filter\n TagSlidingList = 'tag_sliding_list',\n\n SearchSuggestionsBlurb = 'search_suggestions_blurb'\n}\n","export enum WidgetTypeId {\n // Video group\n CuratedMedia = 'curated_media',\n PlaylistMedia = 'playlist_media',\n SeriesMedia = 'series_media',\n ClassificationMedia = 'classification_media',\n LatestReleasedVideos = 'latest_released_videos',\n ContinueWatching = 'continue_watching_videos',\n CompanyLatestReleasedVideo = 'company_latest_released_video',\n CompanyVideos = 'company_videos',\n ClassificationLatestReleasedVideo = 'classification_latest_released_video',\n ClassificationLatestReleasedVideosV2 = 'classification_latest_released_videos_v2',\n CompanyClassificationVideos = 'company_classification_videos',\n ClassificationDashboardMedia = 'classification_dashboard_media',\n ClassificationDashboardExternalMedia = 'classification_dashboard_external_media',\n SeasonalClassificationMedia = 'seasonal_classification_media',\n TrendingClassificationsMedia = 'trending_classifications_media',\n ClassificationCurriculumMedia = 'classification_curriculum_media',\n\n // Topics group\n CuratedClassifications = 'curated_classifications',\n Classifications = 'classifications',\n ClassificationLatestReleasedVideos = 'classification_latest_released_videos',\n SpecialEventClassifications = 'special_event_classifications',\n LatestReleasedClassifications = 'latest_released_classifications',\n TrendingClassifications = 'trending_classifications',\n\n // Series group\n CuratedSeries = 'curated_series',\n\n // Playlists group\n CuratedPlaylists = 'curated_playlists',\n\n // Blurb group\n Blurb = 'blurb',\n DynamicBlurb = 'dynamic_blurb',\n AuthorReviewer = 'author_reviewer',\n Faq = 'faq',\n\n // Network group\n CuratedCompanies = 'curated_companies',\n\n // Partner Profile group\n CuratedContentPartners = 'curated_content_partners',\n ContentPartnerLatestReleasedVideos = 'content_partner_latest_released_videos',\n ContentPartnerSeries = 'content_partner_series',\n ContentPartnerVideos = 'content_partner_videos',\n SpotlightContentPartners = 'spotlight_curated_content_partners',\n ContentPartners = 'content_partners',\n ContentPartnersHub = 'content_partners_hub',\n TrendingContentPartnersVideo = 'content_partner_trending_videos',\n ContentPartnerAllVideos = 'content_partner_all_videos',\n\n // Search filter group\n Ratings = 'ratings',\n\n // Presentations group\n Presentations = 'presentations',\n\n // Livestreams group\n UpcomingLivestreams = 'upcoming_livestreams',\n\n // Multimedia group\n CuratedMultimedia = 'curated_multimedia',\n\n // Legacy widget types\n ClassificationPlaylists = 'classification_playlists',\n ClassificationSeries = 'classification_series',\n ClassificationFeaturedVideo = 'classification_featured_video',\n ClassificationPinnedVideos = 'classification_pinned_videos',\n\n // Search widget types\n SearchRelevantTopics = 'search_relevant_topics',\n SearchCompanies = 'search_companies',\n SearchTopResults = 'search_top_results',\n SearchSeries = 'search_series',\n SearchPlaylists = 'search_playlists',\n SearchMyVideosFolder = 'search_my_videos_folders',\n SearchMySchoolLibraryFolder = 'search_my_school_library_folders',\n SearchMyVideos = 'search_my_videos',\n SearchMySchoolLibraryVideos = 'search_my_school_library_videos',\n SearchExchangeArchive = 'search_exchange_archive',\n SearchRelatedResults = 'search_related_results',\n SearchTags = 'search_tags',\n SearchCurriculumCode = 'search_curriculum_code',\n SearchSuggestions = 'search_suggestions',\n SearchContentPartners = 'search_content_partners'\n}\n","import { FormikContextType } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SearchResultObjectTypes } from 'libs/shared/apps/search/interfaces';\nimport { GetCustomParamOptions, WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { OnlineUserRole } from 'libs/shared/enums/UserRole';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { BaseObject, ClassificationCurriculumInfo, ClassificationDashboardInfo, ClassificationDirectoryInfo, CuratedDashboard, CuratedMediaWidget, CuratedWidget, CuratedWidgetQueryParams, DashboardTargetInfo, DashboardTargetType, PartnerProfileDashboardInfo, UnknownDashboardTargetInfo } from 'libs/shared/interfaces';\n\ninterface LatestReleasesTimeRange {\n from: string;\n to: string;\n}\n\nexport const DashboardHelper = {\n\n /**\n * Same implementation as GetUserGroup() in Online.\n * @param userRole \n */\n getUserGroup(userRole: OnlineUserRole): UserGroup {\n if (userRole === OnlineUserRole.Student)\n return UserGroup.Learner;\n\n return UserGroup.Staff;\n }\n};\n\nexport const CuratedDashboardHelper = {\n onSelectCuratedObject(\n selectedObj: SearchResultObjectTypes | BaseObject,\n formikProps: FormikContextType<CuratedMediaWidget<BaseObject[]>>\n ) {\n const data = {\n ...formikProps.values.data,\n objectIds: ArrayHelper.addOrRemoveImmutable(formikProps.values.data.objectIds || [], selectedObj.id)\n };\n \n formikProps.setFieldValue('data', data);\n \n formikProps.setTouched({\n ...formikProps.touched,\n data: {\n objectIds: true\n }\n });\n },\n\n onRemoveCuratedObject(\n objectId: string,\n formikProps: FormikContextType<CuratedMediaWidget<BaseObject[]>>\n ) {\n const newData = {\n ...formikProps.values.data,\n objectIds: formikProps.values.data.objectIds.filter(id => id !== objectId)\n };\n\n formikProps.setFieldValue('data', newData);\n },\n\n getDashboardTarget(info: DashboardTargetInfo): string {\n if (info.targetType === DashboardTargetType.Discover)\n return `discover:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.Classification)\n return `classification:${info.classificationId}`;\n\n if (info.targetType === DashboardTargetType.ClassificationDirectory)\n return `classification:${info.classificationId}:directory`;\n\n if (info.targetType === DashboardTargetType.ClassificationCurriculum)\n return `classification:${info.classificationId}:curriculum`;\n\n if (info.targetType === DashboardTargetType.MoviesAndTv)\n return `moviesAndTv:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.Company)\n return `company:${info.companyId}:presentation:${info.presentationId}`;\n\n if (info.targetType === DashboardTargetType.PartnerProfile)\n return `partnerprofile:${info.slug}`;\n\n if (info.targetType === DashboardTargetType.DiscoverPartnerProfiles)\n return `discover:partners`;\n\n if (info.targetType === DashboardTargetType.PartnerProfileHub)\n return `discover:partners:hub`;\n\n return null;\n },\n\n getUnknownDashboardTarget(options: UnknownDashboardTargetInfo): string {\n const {\n presentationId,\n companyId,\n targetType,\n classificationId,\n slug\n } = options;\n\n if (targetType === DashboardTargetType.Discover) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Discover,\n presentationId\n });\n }\n \n if (targetType === DashboardTargetType.MoviesAndTv) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.MoviesAndTv,\n presentationId\n });\n }\n \n if (targetType === DashboardTargetType.Company) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Company,\n presentationId,\n companyId\n });\n }\n \n if (targetType === DashboardTargetType.Classification) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.Classification,\n classificationId\n });\n }\n \n if (targetType === DashboardTargetType.ClassificationDirectory) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.ClassificationDirectory,\n classificationId\n });\n }\n \n if (targetType === DashboardTargetType.ClassificationCurriculum) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.ClassificationCurriculum,\n classificationId\n });\n }\n\n if (targetType === DashboardTargetType.PartnerProfile) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.PartnerProfile,\n slug\n });\n }\n\n if (targetType === DashboardTargetType.DiscoverPartnerProfiles) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.DiscoverPartnerProfiles\n });\n }\n\n if (targetType === DashboardTargetType.PartnerProfileHub) {\n return CuratedDashboardHelper.getDashboardTarget({\n targetType: DashboardTargetType.PartnerProfileHub\n });\n }\n },\n\n getDashboardTargetInfo(dashboard: CuratedDashboard): DashboardTargetInfo {\n const type = CuratedDashboardHelper.getDashboardTargetType(dashboard);\n const split = dashboard?.target?.split(':');\n\n if (type === DashboardTargetType.Discover) {\n return {\n targetType: DashboardTargetType.Discover,\n presentationId: split[2]\n };\n }\n\n if (type === DashboardTargetType.Classification) {\n return {\n targetType: DashboardTargetType.Classification,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.ClassificationDirectory) {\n return {\n targetType: DashboardTargetType.ClassificationDirectory,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.ClassificationCurriculum) {\n return {\n targetType: DashboardTargetType.ClassificationCurriculum,\n classificationId: split[1]\n };\n }\n\n if (type === DashboardTargetType.MoviesAndTv) {\n return {\n targetType: DashboardTargetType.MoviesAndTv,\n presentationId: split[2]\n };\n }\n\n if (type === DashboardTargetType.Company) {\n return {\n targetType: DashboardTargetType.Company,\n companyId: split[1],\n presentationId: split[3]\n };\n }\n\n if (type === DashboardTargetType.PartnerProfile) {\n return {\n targetType: DashboardTargetType.PartnerProfile,\n slug: split[1]\n };\n }\n\n return null;\n },\n\n getDashboardTargetType(dashboard: CuratedDashboard): DashboardTargetType {\n if (!dashboard?.target)\n return null;\n\n if (dashboard.target.startsWith('discover')) {\n if (dashboard.target.endsWith('partners'))\n return DashboardTargetType.DiscoverPartnerProfiles;\n\n if (dashboard.target.endsWith('hub'))\n return DashboardTargetType.PartnerProfileHub;\n\n return DashboardTargetType.Discover;\n }\n\n if (dashboard.target.startsWith('classification')) {\n if (dashboard.target.endsWith('directory'))\n return DashboardTargetType.ClassificationDirectory;\n\n if (dashboard.target.endsWith('curriculum'))\n return DashboardTargetType.ClassificationCurriculum;\n\n return DashboardTargetType.Classification;\n }\n\n if (dashboard.target.startsWith('moviesAndTv'))\n return DashboardTargetType.MoviesAndTv;\n\n if (dashboard.target.startsWith('company')) {\n return DashboardTargetType.Company;\n }\n\n if (dashboard.target.startsWith('partnerprofile'))\n return DashboardTargetType.PartnerProfile;\n\n return null;\n },\n\n isType(dashboard: CuratedDashboard, target: DashboardTargetType): boolean {\n return CuratedDashboardHelper.getDashboardTargetType(dashboard) === target;\n },\n\n isCuratedDashboard(obj: BaseObject): obj is CuratedDashboard {\n const dashboard = obj as CuratedDashboard;\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard);\n\n if (targetType === DashboardTargetType.Discover)\n return true;\n\n if (targetType === DashboardTargetType.Classification)\n return true;\n\n if (targetType === DashboardTargetType.ClassificationDirectory)\n return true;\n\n if (targetType === DashboardTargetType.ClassificationCurriculum)\n return true;\n\n if (targetType === DashboardTargetType.MoviesAndTv)\n return true;\n\n if (targetType === DashboardTargetType.Company)\n return true;\n\n return false;\n },\n\n getLatestReleasedTimeRange(): LatestReleasesTimeRange {\n const now = new Date();\n const from = DateHelper.format(DateHelper.endOf(DateHelper.subtract(now, 2, 'month'), 'day'), 'YYYY-MM-DD');\n const to = DateHelper.format(DateHelper.endOf(now, 'day'), 'YYYY-MM-DD');\n return { from, to };\n },\n\n getWidgetParams(\n widgetTypeId: WidgetTypeId,\n templateId: WidgetTemplate,\n target: DashboardTargetType,\n audienceIds?: string | string[],\n preferredCurriculumId?: string,\n options?: GetCustomParamOptions\n ): CuratedWidgetQueryParams {\n const params: CuratedWidgetQueryParams = { };\n\n if (audienceIds)\n params.audienceId = audienceIds;\n\n if (widgetTypeId === WidgetTypeId.ClassificationCurriculumMedia)\n params.curriculumPresentationId = preferredCurriculumId;\n\n return {\n ...params,\n ...WidgetTypeIdConfig[widgetTypeId]?.getCustomParams?.(templateId, target, options)\n };\n },\n\n isSystemGeneratedDashboard(widgets: CuratedWidget[]): boolean {\n const systemGeneratedClassificationWidgetTypes = new Set<WidgetTypeId>([\n WidgetTypeId.ClassificationFeaturedVideo,\n WidgetTypeId.ClassificationPinnedVideos,\n WidgetTypeId.ClassificationPlaylists,\n WidgetTypeId.ClassificationSeries\n ]);\n\n return widgets?.some(widget => systemGeneratedClassificationWidgetTypes.has(widget.widgetId));\n },\n\n isClassificationDashboard(\n targetInfo: DashboardTargetInfo\n ): targetInfo is ClassificationDashboardInfo | ClassificationDirectoryInfo | ClassificationCurriculumInfo {\n return [\n DashboardTargetType.Classification,\n DashboardTargetType.ClassificationDirectory,\n DashboardTargetType.ClassificationCurriculum\n ].includes(targetInfo?.targetType);\n },\n\n isContentPartnerDashboard(targetInfo: DashboardTargetInfo): targetInfo is PartnerProfileDashboardInfo {\n return targetInfo?.targetType === DashboardTargetType.PartnerProfile;\n },\n\n isDirectoryDashboard(\n targetInfo: DashboardTargetInfo\n ): targetInfo is ClassificationDirectoryInfo {\n return targetInfo?.targetType === DashboardTargetType.ClassificationDirectory;\n },\n\n isWidgetTypeEnabled(\n widgetTypeId: WidgetTypeId,\n settingsHash: SettingsHash,\n targetType: DashboardTargetType\n ): boolean {\n const config = WidgetTypeIdConfig[widgetTypeId];\n \n return config?.predicate?.({ settingsHash, targetType }) ?? true;\n }\n};","import { Core } from 'libs/common/backbone/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SourceFilterOptions, TypeFilterOptions } from '../apps/search/interfaces';\nimport { WidgetAppLinks } from '../components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTemplate } from '../enums/WidgetTemplate';\nimport { WidgetTypeId } from '../enums/WidgetTypeId';\nimport { SettingsHash } from '../hooks/useSettings';\nimport { CuratedWidgetContent, CuratedWidgetQueryParams, DashboardTargetType, Series } from '../interfaces';\nimport { CuratedDashboardHelper } from '../utils/DashboardHelper';\n\ninterface WidgetTypeIdPredicateOptions {\n settingsHash: SettingsHash;\n targetType: DashboardTargetType;\n}\n\nexport interface GetCustomParamOptions {\n params?: CuratedWidgetQueryParams;\n}\n\ninterface WidgetTypeIdConfigType {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => CuratedWidgetQueryParams;\n minContent?: number;\n getCollectionAppLink?: (\n appLinks: Partial<WidgetAppLinks>,\n content?: CuratedWidgetContent,\n ) => Core.AppLink;\n /**\n * Predicate used to determine if the widget\n * should be displayed based on the target\n * type and settings. Useful for feature flagging widgets.\n */\n predicate?: (options: WidgetTypeIdPredicateOptions) => boolean;\n}\n\nfunction partnerProfileWidgetTypeIdPredicate(options: WidgetTypeIdPredicateOptions): boolean {\n return options.settingsHash?.hasPartnerProfiles ?? false;\n}\n\nexport const WidgetTypeIdConfig: Record<WidgetTypeId, WidgetTypeIdConfigType> = {\n [WidgetTypeId.CuratedMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.PlaylistMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SeriesMedia]: {\n getCustomParams: (widgetTemplate: WidgetTemplate) => {\n switch (widgetTemplate) {\n case WidgetTemplate.ThumbnailFixedListMediaLarge:\n return { limit: 2 };\n case WidgetTemplate.ThumbnailHeroMedia:\n case WidgetTemplate.ThumbnailFeaturedMedia:\n return { limit: 1 };\n default:\n return { limit: 12 };\n }\n },\n getCollectionAppLink: (appLinks, content) => appLinks?.series?.(ArrayHelper.first(content) as Series)\n },\n [WidgetTypeId.ClassificationMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.LatestReleasedVideos]: {\n getCustomParams: () => {\n return CuratedDashboardHelper.getLatestReleasedTimeRange();\n }\n },\n [WidgetTypeId.ContinueWatching]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks?.watchHistory?.()\n },\n [WidgetTypeId.CompanyLatestReleasedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.CompanyVideos]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationLatestReleasedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationLatestReleasedVideosV2]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n [WidgetTypeId.SeasonalClassificationMedia]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n [WidgetTypeId.CompanyClassificationVideos]: {\n getCustomParams: () => ({}),\n minContent: 4\n },\n [WidgetTypeId.TrendingClassificationsMedia]: {\n getCustomParams: () => {\n return {\n limit: 12\n };\n },\n minContent: 4\n },\n\n [WidgetTypeId.CuratedClassifications]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.TrendingClassifications]: {\n getCustomParams: () => {\n return {\n limit: 6\n };\n },\n minContent: 3\n },\n [WidgetTypeId.Classifications]: {\n getCustomParams: (template: WidgetTemplate, targetType: DashboardTargetType) => {\n if (targetType === DashboardTargetType.Discover) {\n if (template === WidgetTemplate.EditableCoverFixedPillListSmall) {\n return {\n canBePreferred: true,\n isFollowing: true\n };\n }\n\n if ([ WidgetTemplate.PosterSlidingListSmall, WidgetTemplate.CoverFixedPillListXSmall ].includes(template)) {\n return {\n canBePreferred: true\n };\n }\n }\n\n return {};\n }\n },\n [WidgetTypeId.ClassificationLatestReleasedVideos]: {\n getCustomParams: () => {\n return CuratedDashboardHelper.getLatestReleasedTimeRange();\n }\n },\n [WidgetTypeId.SpecialEventClassifications]: {\n getCustomParams: () => ({\n from: DateHelper.format(new Date(), 'YYYY-MM-DD')\n })\n },\n [WidgetTypeId.LatestReleasedClassifications]: {\n getCustomParams: () => {\n return {\n limit: 6\n };\n },\n minContent: 3\n },\n\n [WidgetTypeId.CuratedSeries]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.CuratedPlaylists]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.Blurb]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.DynamicBlurb]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.AuthorReviewer]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.Faq]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.CuratedCompanies]: {\n getCustomParams: () => ({}),\n predicate: options => {\n if (options.settingsHash?.hasPartnerProfiles)\n return false;\n return true;\n }\n },\n\n [WidgetTypeId.Ratings]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.Presentations]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.UpcomingLivestreams]: {\n getCustomParams: () => ({\n from: DateHelper.format(new Date(), 'YYYY-MM-DD')\n })\n },\n\n [WidgetTypeId.CuratedMultimedia]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.ClassificationPlaylists]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationSeries]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationFeaturedVideo]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationPinnedVideos]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationDashboardExternalMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationDashboardMedia]: {\n getCustomParams: () => ({})\n },\n\n [WidgetTypeId.SearchRelevantTopics]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchRelevantTopics],\n type: [TypeFilterOptions.Classification]\n })\n },\n [WidgetTypeId.SearchCompanies]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchCompanies],\n type: [TypeFilterOptions.Company]\n }),\n predicate: options => {\n if (options.settingsHash?.hasPartnerProfiles)\n return false;\n return true;\n }\n },\n [WidgetTypeId.SearchSeries]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchSeries],\n type: [TypeFilterOptions.Series]\n })\n },\n [WidgetTypeId.SearchPlaylists]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchPlaylists],\n type: [TypeFilterOptions.Playlist]\n })\n },\n [WidgetTypeId.SearchMyVideosFolder]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMyVideosFolder],\n source: [SourceFilterOptions.MyVideos]\n })\n },\n [WidgetTypeId.SearchMySchoolLibraryFolder]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMySchoolLibraryFolder],\n source: [SourceFilterOptions.School]\n })\n },\n [WidgetTypeId.SearchMyVideos]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMyVideos],\n source: [SourceFilterOptions.MyVideos]\n })\n },\n [WidgetTypeId.SearchMySchoolLibraryVideos]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchMySchoolLibraryVideos],\n source: [SourceFilterOptions.School]\n })\n },\n [WidgetTypeId.SearchExchangeArchive]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchExchangeArchive],\n source: [SourceFilterOptions.ExchangeArchive]\n })\n },\n [WidgetTypeId.SearchRelatedResults]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchTopResults]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.ClassificationCurriculumMedia]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchTags]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchCurriculumCode]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchSuggestions]: {\n getCustomParams: () => ({})\n },\n [WidgetTypeId.SearchContentPartners]: {\n getCustomParams: () => ({}),\n getCollectionAppLink: appLinks => appLinks.searchHome({\n focus: [WidgetTypeId.SearchContentPartners],\n type: [TypeFilterOptions.PartnerProfile]\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.CuratedContentPartners]: {\n getCustomParams: () => ({\n limit: 12\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerLatestReleasedVideos]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerSeries]: {\n getCollectionAppLink: appLinks => {\n return appLinks?.scopedSearchHome?.({\n type: [TypeFilterOptions.Series]\n });\n },\n getCustomParams: () => ({\n limit: 12\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerVideos]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.SpotlightContentPartners]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartners]: {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => ({\n letterPrefix: options?.params?.letterPrefix,\n sort: options?.params?.sort\n }),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnersHub]: {\n getCustomParams: (\n widgetTemplate: WidgetTemplate,\n targetType: DashboardTargetType,\n options?: GetCustomParamOptions\n ) => {\n if (targetType !== DashboardTargetType.PartnerProfileHub)\n return {};\n\n return {\n objectId: options?.params?.objectId\n };\n },\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.TrendingContentPartnersVideo]: {\n getCustomParams: () => ({}),\n predicate: partnerProfileWidgetTypeIdPredicate\n },\n [WidgetTypeId.ContentPartnerAllVideos]: {\n getCustomParams: (widgetTemplate: WidgetTemplate) => {\n if (widgetTemplate === WidgetTemplate.ThumbnailFixedListSearchCta)\n return { limit: 3 };\n\n return {};\n },\n predicate: partnerProfileWidgetTypeIdPredicate\n }\n};","import React from 'react';\n\nexport function WarningOutlineSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m13.026 4.377 8.5 14A1.2 1.2 0 0 1 20.5 20.2h-17a1.2 1.2 0 0 1-1.026-1.823l8.5-14a1.2 1.2 0 0 1 2.052 0M12 5 3.5 19h17zm0 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2m.75-3.677a.69.69 0 0 1-.7.677.69.69 0 0 1-.7-.677V8.677c0-.374.313-.677.7-.677s.7.303.7.677z'\n fill='currentColor'\n />\n </svg>\n );\n}\n","export enum WidgetStatus {\n Draft = 0,\n Published = 1,\n Archived = 2\n}\n\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { WidgetStatus } from 'libs/shared/enums/WidgetStatus';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseWidget, CuratedDashboardAppLink, CuratedWidget, CuratedWidgetContent, Playlist, Presentation, Series, Video, VideoTypes, VideoWidgetTemplateContent, WidgetMetadata, WidgetPreference } from 'libs/shared/interfaces';\n\nimport { AnyWidgetTemplateProps } from '../components/widgets/curated-widgets/WidgetProps';\nimport { WidgetTypeIdConfig } from '../constants/WidgetTypeIdConfig';\nimport { MasterType } from '../enums/MasterType';\n\nimport { MasterTypeHelper } from './MasterTypeHelper';\n\nenum WidgetStatusString {\n Draft = 'Draft',\n Published = 'Published',\n Archived = 'Archived'\n}\n\nexport const WidgetHelper = {\n /**\n * Used by both the FixedWidget and DynamicWidget\n */\n getSliderAnalyticsOptions: (): AnalyticsOptions => ({\n actionType: UserAction.Click,\n location: LocationContext.SlidingList,\n entity: EntityType.Widget,\n descriptor: ClickDescriptor.Slide\n }),\n\n /**\n * Used by both the FixedWidget and DynamicWidget\n */\n getSliderItemAnalyticsOptions: (): AnalyticsOptions => ({\n location: LocationContext.SlidingListItem\n }),\n\n getSliderHeadingAnalyticsOptions: (): AnalyticsOptions => ({\n actionType: UserAction.Click,\n location: LocationContext.SlidingList,\n entity: EntityType.Widget,\n descriptor: ClickDescriptor.Title\n }),\n\n useGetContent(\n content: CuratedWidgetContent,\n widgetTypeId: WidgetTypeId,\n isPreviewing: boolean,\n preferences: WidgetPreference[],\n removedItemIds: string[]\n ): { content: CuratedWidgetContent; unfilteredContent: CuratedWidgetContent; } {\n return React.useMemo(() => {\n if (!content)\n return { content: null, unfilteredContent: null };\n\n if (!Array.isArray(content))\n return { content, unfilteredContent: content };\n\n const preferencesHash = preferences?.reduce((acc: HashObject, current) => {\n acc[current.id] = current;\n return acc;\n }, {}) ?? {};\n\n const removedItemIdsHash = removedItemIds.reduce((acc: HashObject, current) => {\n acc[current] = true;\n return acc;\n }, {});\n\n const contentCopy = [...content];\n \n const sortedContent = contentCopy.sort((a, b) => {\n if (!('id' in a) || !('id' in b))\n return 0;\n\n const aIndex = preferencesHash[a.id]?.index ?? contentCopy.findIndex(c => 'id' in c && c.id === a.id);\n const bIndex = preferencesHash[b.id]?.index ?? contentCopy.findIndex(c => 'id' in c && c.id === b.id);\n\n if (aIndex < bIndex)\n return -1;\n\n if (aIndex > bIndex)\n return 1;\n\n return 0;\n });\n\n if (WidgetHelper.isBelowContentMinimum(sortedContent, widgetTypeId) && !isPreviewing) {\n return {\n content: [],\n unfilteredContent: sortedContent\n };\n }\n\n const filteredContent = sortedContent.filter(item => {\n if (preferencesHash['id' in item && item.id]?.hidden)\n return false;\n\n if (removedItemIdsHash['id' in item && item.id])\n return false;\n\n return true;\n });\n\n return {\n content: filteredContent,\n unfilteredContent: sortedContent\n };\n }, [ content, preferences ]);\n },\n\n isBelowContentMinimum(content: CuratedWidgetContent, widgetTypeId: WidgetTypeId): boolean {\n const minContent = WidgetTypeIdConfig[widgetTypeId]?.minContent || 0;\n return content?.length < minContent;\n },\n\n getCustomAppLink(props: AnyWidgetTemplateProps): Core.AppLink | null {\n if (\n !('metadata' in props) ||\n !('appLinks' in props) ||\n !('appLink' in props.metadata)\n ) {\n return null;\n }\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.LatestReleases && 'latestReleases' in props.appLinks)\n return props.appLinks?.latestReleases?.();\n\n if (props.metadata?.appLink === CuratedDashboardAppLink.ExploreAllTopics && 'allTopics' in props.appLinks && 'presentation' in props)\n return props.appLinks?.allTopics?.(props.presentation.id);\n\n return null;\n },\n\n getWidgetStatus(widget: CuratedWidget): WidgetStatus {\n let status = widget.status;\n\n if (typeof (status) === 'string') {\n switch (status) {\n case WidgetStatusString.Archived:\n status = WidgetStatus.Archived;\n break;\n case WidgetStatusString.Published:\n status = WidgetStatus.Published;\n break;\n case WidgetStatusString.Draft:\n status = WidgetStatus.Draft;\n break;\n }\n }\n\n return status;\n },\n\n formatResponseData(widget: CuratedWidget, presentation?: Presentation): CuratedWidget {\n const content = widget.content;\n\n if (!content)\n return widget;\n\n if ('author' in content) {\n widget.content = [content] as CuratedWidgetContent;\n return widget;\n }\n\n if ('data' in content)\n widget.content = content.data as CuratedWidgetContent;\n else if (!Array.isArray(content))\n widget.content = [content]; // Handle `classification_featured_video` widgets, which don't return content as an array\n\n switch (widget.widgetId) {\n case WidgetTypeId.ClassificationSeries:\n widget.content = widget.content.filter((c): c is Series => 'tallPoster' in c && !!c.tallPoster?.id);\n break;\n case WidgetTypeId.ClassificationPlaylists:\n widget.content = widget.content.filter((c): c is Playlist => 'cover' in c && !!c.cover?.id);\n break;\n case WidgetTypeId.ContinueWatching:\n widget.content = widget.content.map(c => 'object' in c && c.object);\n default:\n break;\n case WidgetTypeId.Presentations:\n widget.content = widget.content.filter((c): c is Presentation => 'id' in c && c.id.toString() !== presentation?.id?.toString());\n break;\n }\n\n return widget;\n },\n \n isWidgetInTableOfContents(metadata: Partial<WidgetMetadata>): boolean {\n return !!metadata?.showInTableOfContents;\n },\n\n /**\n * Widget container view won't render a widget with no content typically,\n * but some widgets (such as blurbs) have no content, but should render anyway.\n */\n hasNoContent(widgetTypeId: WidgetTypeId): boolean {\n if (widgetTypeId === WidgetTypeId.Blurb)\n return true;\n\n return false;\n },\n\n /**\n * If any widgets should be hidden on smaller screen sizes, add them here.\n * If this needs to be more flexible at some point, it should be added to\n * the widget settings and metadata object.\n */\n canDisplayOnScreenSize(\n breakpoints: Breakpoints,\n widgetTypeId: WidgetTypeId,\n widgetTemplate: WidgetTemplate\n ): boolean {\n if (widgetTypeId === WidgetTypeId.Blurb && widgetTemplate === WidgetTemplate.HeroBannerSmall)\n return !breakpoints.xs && !breakpoints.sm;\n\n return true;\n },\n\n isCompanyWidget(widgetTypeId: WidgetTypeId): boolean {\n switch (widgetTypeId) {\n case WidgetTypeId.CompanyLatestReleasedVideo:\n case WidgetTypeId.CompanyVideos:\n case WidgetTypeId.UpcomingLivestreams:\n return true;\n default:\n return false;\n }\n },\n\n getVideoContent(content: VideoWidgetTemplateContent): VideoTypes[] {\n const firstItem = ArrayHelper.first<Video | Series>(content);\n\n if (MasterTypeHelper.isType<Series>(firstItem, MasterType.Series))\n return firstItem.videos.data;\n\n return content as VideoTypes[];\n },\n\n showRemoveButton(widgetTypeId: WidgetTypeId): boolean {\n return widgetTypeId === WidgetTypeId.ContinueWatching;\n },\n\n /**\n * Paginated data returns more widgets so if we dont merge the widget content by widget type id,\n * it would add another widget to the page rather than appending content to the relevant\n * search result index\n * \n * For example:\n * Say we receive these widgets for a query:\n * - topics widget\n * - related results widget\n * \n * If a user scrolls down to the end of page we fetch more items from the last widget\n * which in this case is 'related results widget'. \n * Now our overall response looks like this\n * - topics widget\n * - related results widget\n * - related results widget\n * \n * Since this is a new widget item entry it will be rendered as a new widget with seprate headings etc.\n * In this case we want to combine these two widgets data into one so its looks like this again:\n * - topics widget\n * - related results widget (data is combined)\n * \n * But what if widget we get recieve has a different widget template id. This currently happens for\n * the 'series widget' - series widget can have the tall poster template or the thumbnail like template.\n * \n * so to visualize this it can be like:\n * - topics widget\n * - top results widget\n * - series widget (template: tall poster)\n * - series widget (template: thumbnail)\n * \n * Since they technically will look different based on the template id we will not merge the data in this case.\n * It will merge the data to the same widget as long as the combination of widget Id + template Id is the same.\n * \n * Since they are separate widgets they will render duplicate headings - we handle this in css instead which\n * checks for adjacent siblings and if its the same widget - it hides the widget heading so it will look\n * like its a single widget rather than separate widgets.\n * \n * - Nish\n */\n mergeWidgets<T extends BaseWidget>(\n items: T[],\n mergeContent: (target: T, source: T) => void\n ): T[] {\n const widgets = ObjectHelper.deepClone(items);\n const groupedWidgets = ArrayHelper.groupBy(widgets, 'widgetId');\n const mergedWidgets: T[] = [];\n\n for (const widgetGroup of Object.values(groupedWidgets)) {\n let currentMergedWidget: T | null = null;\n const groupMergedWidgets: T[] = [];\n\n for (const widget of widgetGroup) {\n if (!currentMergedWidget) {\n currentMergedWidget = widget;\n continue;\n }\n\n if (widget.templateId !== currentMergedWidget.templateId) {\n groupMergedWidgets.push(currentMergedWidget);\n currentMergedWidget = widget;\n continue;\n }\n\n mergeContent(currentMergedWidget, widget);\n }\n\n if (currentMergedWidget) {\n groupMergedWidgets.push(currentMergedWidget);\n }\n mergedWidgets.push(...groupMergedWidgets);\n }\n\n return mergedWidgets;\n }\n};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor, LocationContext } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { WidgetTypeIdConfig } from 'libs/shared/constants/WidgetTypeIdConfig';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { WarningOutlineSvg } from 'libs/shared/images/svg/status/WarningOutlineSvg';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport styles from './widget-header.module.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description?: string | JSX.Element;\n isPreviewing?: boolean;\n content?: any[];\n widgetTypeId?: WidgetTypeId;\n badgeComponent?: JSX.Element;\n\n appLink?: Core.AppLink;\n onAppLinkClick?: () => void;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n \n showSeeMoreLink?: boolean;\n onClose?: () => void;\n onFollow?: (shouldFollow: boolean) => void;\n isFollowing?: boolean;\n showFollowSpinner?: boolean;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{\n location: LocationContext.SlidingList,\n ...props.analyticsOptions,\n descriptor: ClickDescriptor.SeeMore\n }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeAll')}</p>\n </AppLink>\n </div>\n );\n}\n\nfunction CloseWidgetButton(props: { onClose: () => void }) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none cursor-pointer`} onClick={props.onClose}>\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('hide')}</p>\n </div>\n );\n}\n\nfunction FollowWidgetButton(props: {\n isFollowing: boolean,\n onFollow: (shouldFollow: boolean) => void,\n showFollowSpinner: boolean\n}) {\n return (\n <div className={`ms-3 ${styles.widgetTextButton} text-decoration-none`}>\n {\n props.showFollowSpinner ?\n <Spinner as='span' animation='border' role='status' size='sm' /> :\n <p className='hover-text-underline text-dark curated-widget-heading cursor-pointer' onClick={() => props.onFollow(!props.isFollowing)}>\n {getPhrase(props.isFollowing ? 'unfollow' : 'follow')}\n </p>\n }\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n const isBelowMinimum = WidgetHelper.isBelowContentMinimum(props.content, props.widgetTypeId);\n const minContent = WidgetTypeIdConfig[props.widgetTypeId]?.minContent ?? 0;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className='d-flex align-items-center'>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link text-reset' : ''}`}\n onClick={props.onAppLinkClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.isPreviewing && isBelowMinimum && (\n <SvgContainer\n svg={WarningOutlineSvg}\n title={`Widget is below the minimum content threshold of ${minContent} and won't be displayed.`}\n tooltipSpanHack\n tooltipSpanHackClassName='d-inline text-danger me-1'\n />\n )}\n {props.name}\n </h2>\n </AppLink>\n {!!React.isValidElement(props.badgeComponent) && props.badgeComponent}\n </div>\n )}\n <div className='d-flex justify-content-between align-items-center gap-2'>\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n {FunctionHelper.isFunction(props.onFollow) &&\n <FollowWidgetButton\n isFollowing={props.isFollowing}\n onFollow={props.onFollow}\n showFollowSpinner={props.showFollowSpinner}\n />\n }\n {FunctionHelper.isFunction(props.onClose) && <CloseWidgetButton onClose={props.onClose}/>}\n </div>\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","export enum TagType {\n Normal = 'normal',\n Pedagogy = 'pedagogy',\n Hidden = 'hidden',\n Skill = 'skill',\n Curation = 'curation'\n}\n\n/**\n * This should **only** be used to create new tags in master (as it only accepts enum values).\n * Use the string enum above for all other cases.\n */\nexport enum TagTypeNumber {\n Normal = 0,\n Pedagogy = 1,\n Hidden = 2,\n Skill = 3,\n Curation = 4\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { TagType } from 'libs/shared/enums/TagType';\nimport { Tag, ThemeColours } from 'libs/shared/interfaces';\n\nimport { DivButton } from '../div-button/DivButton';\n\nimport styles from './tags.module.scss';\n\nconst namespace = 'shared.tags';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TagItemProps {\n tag: Tag;\n themeColours?: ThemeColours;\n appLink?: Core.AppLink;\n onClick?: () => void;\n onRemove?: () => void;\n disabled?: boolean;\n tagClass?: string;\n}\n\nfunction getTagTypeClass(tagType: TagType, hasThemeColour: boolean): string {\n switch (tagType) {\n case TagType.Pedagogy:\n case TagType.Skill:\n return 'pedagogy-tag text-white';\n\n case TagType.Hidden:\n return 'hidden-tag fw-normal';\n\n case TagType.Normal:\n if (!hasThemeColour)\n return 'bg-gray-100 fw-normal';\n return '';\n\n default:\n return '';\n }\n}\n\nexport function TagItem(props: TagItemProps): JSX.Element {\n const { tag, appLink, onClick, disabled, tagClass = 'tag' } = props;\n\n const name = tag.name.toLowerCase();\n const tagType = tag.tagType?.toLowerCase() as TagType;\n\n const hasThemeColour = (tagType === TagType.Normal && props.themeColours) && !!props.themeColours?.secondary;\n let classNames = `${styles.badgeBase} rounded-pill py-1 px-2 my-1 me-1 ${tagClass} ${getTagTypeClass(tagType, hasThemeColour)}`;\n let textContainerClass = `text-truncate text-nowrap`;\n\n if (hasThemeColour)\n classNames += ' text-white';\n\n if ((appLink || onClick) && !disabled)\n classNames += ' cursor-pointer';\n\n if (disabled)\n classNames += ' ' + styles.disabled;\n\n if (props.onRemove) {\n classNames += ' ' + styles.removeBadge;\n textContainerClass += ' ' + `${styles.removeBadgeText} d-inline-flex align-items-center lh-1`;\n }\n if (!appLink)\n classNames += ' d-inline-block';\n\n const style: React.CSSProperties = hasThemeColour\n ? { backgroundColor: props.themeColours.secondary }\n : {};\n\n if (appLink) {\n return (\n <AppLink\n onClick={onClick}\n appLink={appLink}\n className={classNames}\n title={name}\n style={style}\n >\n <span className={textContainerClass}>{name}</span>\n </AppLink>\n );\n }\n\n return (\n <button\n onClick={onClick}\n className={classNames}\n title={name}\n style={style}\n aria-label={`${getPhrase('ariaFilter')} ${name}`}\n >\n <span className={textContainerClass}>\n {name}\n {props.onRemove &&\n <DivButton\n onClick={props.onRemove}\n className={`${styles.close} btn-close font-size-normal`}\n role='button'\n aria-label='Close'\n />\n }\n </span>\n </button>\n );\n}"],"names":["CuratedDashboardAppLink","FilterIdNames","FilterBlacklist","FilterWhitelist","acc","prev","SourceFilterOptions","TypeFilterOptions","WidgetTemplate","WidgetTypeId","CuratedDashboardHelper","selectedObj","formikProps","data","ArrayHelper","objectId","newData","id","info","DashboardTargetType","options","presentationId","companyId","targetType","classificationId","slug","dashboard","type","split","_a","target","obj","now","from","DateHelper","to","widgetTypeId","templateId","audienceIds","preferredCurriculumId","params","_b","WidgetTypeIdConfig","widgets","systemGeneratedClassificationWidgetTypes","widget","targetInfo","settingsHash","config","partnerProfileWidgetTypeIdPredicate","widgetTemplate","appLinks","content","template","WarningOutlineSvg","props","jsx","WidgetStatus","WidgetHelper","UserAction","LocationContext","EntityType","ClickDescriptor","isPreviewing","preferences","removedItemIds","React","preferencesHash","current","removedItemIdsHash","contentCopy","sortedContent","a","b","aIndex","c","bIndex","item","minContent","_c","_d","_f","_e","status","presentation","metadata","breakpoints","firstItem","MasterTypeHelper","MasterType","items","mergeContent","ObjectHelper","groupedWidgets","mergedWidgets","widgetGroup","currentMergedWidget","groupMergedWidgets","namespace","getPhrase","LanguageService","SeeMore","styles","AppLink","CloseWidgetButton","FollowWidgetButton","Spinner","WidgetHeader","hasDescription","Fragment","isBelowMinimum","jsxs","SvgContainer","FunctionHelper","TagType","getTagTypeClass","tagType","hasThemeColour","TagItem","tag","appLink","onClick","disabled","tagClass","name","classNames","textContainerClass","style","DivButton"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a2 as S,a3 as n,R as i,ab as w,ae as k,ad as E,aI as L,af as T,L as C,j as e,P as R,am as I,B as p,x as m,A as F,aD as U}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{a2 as S,a3 as n,R as i,ab as w,ae as k,ad as E,aI as L,af as T,L as C,j as e,P as R,am as I,B as p,x as m,A as F,aD as U}from"./app-CShb1Dgt.js";import{S as q}from"./BrdU6Hc2.chunk.js";import{V as B}from"./B1cVJr0t.chunk.js";import{u as H}from"./YuqHkk0a.chunk.js";import{E as u}from"./BAaMmtA5.chunk.js";import{u as D}from"./DOsWx99L.chunk.js";import"./BlDVEZsX.chunk.js";import"./pkzD5BEm.chunk.js";import"./d6bZeQ7u.chunk.js";const c="exchange.add",o=C.encloseNamespace(c);function X(s){var l;const x=H(),f=S(),g=n(U.config()),h=n(u.exchange()),a=n(B.video(s.id)),[r,j]=i.useState(!1),[A,P]=i.useState(!1),[V,b]=i.useState(null),{previewContext:t,clearPreviewContext:v}=D(s.id,!1);i.useEffect(()=>{!a.data||A||y()},[(l=a.data)==null?void 0:l.id]);async function y(){P(!0);try{const N=await f(u.addVideo(h.data.id,a.data.id));j(!0),b(N.id),w.logUserAction({id:a.data.id,name:a.data.name},{actionType:T.Submit,descriptor:L.AddToWorkspace,location:E.Popup,entity:k.Video})}catch{x.error(o("error")),s.closePopup()}}function d(){s.closePopup(),t!=null&&t.appLink&&(q.preventScrollTop(),F.trigger(t.appLink),v())}return e.jsx(R,{title:o("title"),closePopup:d,showLoadingSpinner:!r,children:r&&e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"mx-auto w-75 mt-1 mb-2",children:e.jsx("img",{src:I.General.CONFETTI,className:"img-fluid",draggable:!1})}),e.jsx("div",{className:"text-center pb-3",children:e.jsx("h4",{className:"mb-2",children:e.jsx(p,{namespace:c,phrase:"added"})})}),e.jsxs(m,{children:[e.jsx(m.Cancel,{text:o("close"),onClick:d,variant:"link"}),e.jsx("a",{href:`${g.data.liteUrl}/videos/${V}`,className:"btn btn-dark",children:e.jsx("span",{className:"align-text-bottom me-1",children:e.jsx(p,{namespace:c,phrase:"open"})})})]})]})})}export{X as ExchangeAddView};
|
|
2
|
+
//# sourceMappingURL=Bo-iDjSh.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Bo-iDjSh.chunk.js","sources":["../../src/apps/exchange/views/exchange-add/ExchangeAddView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ScrollHelper } from 'libs/common/backbone/utils/ScrollHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Config, Library, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ExchangeRequests } from 'apps/exchange/flight-requests/ExchangeRequests';\nimport { usePreviewContext } from 'apps/exchange/hooks/usePreviewContext';\n\nconst namespace = 'exchange.add';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ExchangeAddViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ExchangeAddView(props: ExchangeAddViewProps): JSX.Element {\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const exchange = Flight.useBasicFetch<Library>(ExchangeRequests.exchange());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const [ added, setAdded ] = React.useState<boolean>(false);\n const [ adding, setAdding ] = React.useState<boolean>(false);\n const [ newVideoId, setNewVideoId ] = React.useState<string>(null);\n\n const { previewContext, clearPreviewContext } = usePreviewContext(props.id, false);\n\n React.useEffect(() => {\n if (!video.data || adding)\n return;\n\n addVideo();\n }, [video.data?.id]);\n\n async function addVideo() {\n setAdding(true);\n\n try {\n const newVideo = await fetchAsync<Video>(ExchangeRequests.addVideo(\n exchange.data.id,\n video.data.id\n ));\n\n setAdded(true);\n setNewVideoId(newVideo.id);\n\n AnalyticsHelper.logUserAction(\n { id: video.data.id, name: video.data.name },\n {\n actionType: UserAction.Submit,\n descriptor: VideoActionDescriptor.AddToWorkspace,\n location: LocationContext.Popup,\n entity: EntityType.Video\n }\n );\n } catch {\n alerts.error(getPhrase('error'));\n props.closePopup();\n }\n }\n\n /**\n * Because the add view can be navigated to from the ExchangePreviewView\n * which is an addressable popup, we need to navigate back to the \n * original route when this popup is closed - Sha\n */\n function closePopup(): void {\n props.closePopup();\n\n if (!previewContext?.appLink)\n return;\n\n ScrollHelper.preventScrollTop();\n Core.AppLinkHelper.trigger(previewContext.appLink);\n clearPreviewContext();\n }\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={closePopup}\n showLoadingSpinner={!added}\n >\n {added &&\n <>\n <div className='mx-auto w-75 mt-1 mb-2'>\n <img src={ImageUrls.General.CONFETTI} className='img-fluid' draggable={false} />\n </div>\n\n <div className='text-center pb-3'>\n <h4 className='mb-2'>\n <Text namespace={namespace} phrase={'added'} />\n </h4>\n </div>\n\n <PopupButtons>\n <PopupButtons.Cancel\n text={getPhrase('close')}\n onClick={closePopup}\n variant='link'\n />\n <a href={`${config.data.liteUrl}/videos/${newVideoId}`} className={'btn btn-dark'}>\n <span className='align-text-bottom me-1'>\n <Text namespace={namespace} phrase={'open'} />\n </span>\n </a>\n </PopupButtons>\n </>\n }\n </Popup>\n );\n}"],"names":["namespace","getPhrase","LanguageService","ExchangeAddView","props","alerts","useAlerts","fetchAsync","Flight.useGetFetchAsync","config","Flight.useBasicFetch","ConfigRequests","exchange","ExchangeRequests","video","VideoRequests","added","setAdded","React","adding","setAdding","newVideoId","setNewVideoId","previewContext","clearPreviewContext","usePreviewContext","addVideo","_a","newVideo","AnalyticsHelper","UserAction","VideoActionDescriptor","LocationContext","EntityType","closePopup","ScrollHelper","Core.AppLinkHelper","jsx","Popup","jsxs","Fragment","ImageUrls","Text","PopupButtons"],"mappings":"obAuBA,MAAMA,EAAY,eACZC,EAAYC,EAAgB,iBAAiBF,CAAS,EAMrD,SAASG,EAAgBC,EAA0C,OACxE,MAAMC,EAASC,EAAA,EACTC,EAAaC,EAAO,EAEpBC,EAASC,EAA6BC,EAAe,QAAQ,EAC7DC,EAAWF,EAA8BG,EAAiB,UAAU,EACpEC,EAAQJ,EAA4BK,EAAc,MAAMX,EAAM,EAAE,CAAC,EAEjE,CAAEY,EAAOC,CAAS,EAAIC,EAAM,SAAkB,EAAK,EACnD,CAAEC,EAAQC,CAAU,EAAIF,EAAM,SAAkB,EAAK,EACrD,CAAEG,EAAYC,CAAc,EAAIJ,EAAM,SAAiB,IAAI,EAE3D,CAAE,eAAAK,EAAgB,oBAAAC,CAAA,EAAwBC,EAAkBrB,EAAM,GAAI,EAAK,EAEjFc,EAAM,UAAU,IAAM,CAChB,CAACJ,EAAM,MAAQK,GAGnBO,EAAA,CACF,EAAG,EAACC,EAAAb,EAAM,OAAN,YAAAa,EAAY,EAAE,CAAC,EAEnB,eAAeD,GAAW,CACxBN,EAAU,EAAI,EAEd,GAAI,CACF,MAAMQ,EAAW,MAAMrB,EAAkBM,EAAiB,SACxDD,EAAS,KAAK,GACdE,EAAM,KAAK,EAAA,CACZ,EAEDG,EAAS,EAAI,EACbK,EAAcM,EAAS,EAAE,EAEzBC,EAAgB,cACd,CAAE,GAAIf,EAAM,KAAK,GAAI,KAAMA,EAAM,KAAK,IAAA,EACtC,CACE,WAAYgB,EAAW,OACvB,WAAYC,EAAsB,eAClC,SAAUC,EAAgB,MAC1B,OAAQC,EAAW,KAAA,CACrB,CAEJ,MAAQ,CACN5B,EAAO,MAAMJ,EAAU,OAAO,CAAC,EAC/BG,EAAM,WAAA,CACR,CACF,CAOA,SAAS8B,GAAmB,CAC1B9B,EAAM,WAAA,EAEDmB,GAAA,MAAAA,EAAgB,UAGrBY,EAAa,iBAAA,EACbC,EAAmB,QAAQb,EAAe,OAAO,EACjDC,EAAA,EACF,CAEA,OACEa,EAAAA,IAACC,EAAA,CACC,MAAOrC,EAAU,OAAO,EACxB,WAAAiC,EACA,mBAAoB,CAAClB,EAEpB,YACCuB,EAAAA,KAAAC,EAAAA,SAAA,CACE,SAAA,CAAAH,EAAAA,IAAC,MAAA,CAAI,UAAU,yBACb,SAAAA,EAAAA,IAAC,MAAA,CAAI,IAAKI,EAAU,QAAQ,SAAU,UAAU,YAAY,UAAW,GAAO,EAChF,EAEAJ,MAAC,MAAA,CAAI,UAAU,mBACb,eAAC,KAAA,CAAG,UAAU,OACZ,SAAAA,EAAAA,IAACK,EAAA,CAAK,UAAA1C,EAAsB,OAAQ,OAAA,CAAS,EAC/C,EACF,SAEC2C,EAAA,CACC,SAAA,CAAAN,EAAAA,IAACM,EAAa,OAAb,CACC,KAAM1C,EAAU,OAAO,EACvB,QAASiC,EACT,QAAQ,MAAA,CAAA,EAEVG,EAAAA,IAAC,KAAE,KAAM,GAAG5B,EAAO,KAAK,OAAO,WAAWY,CAAU,GAAI,UAAW,eACjE,SAAAgB,EAAAA,IAAC,OAAA,CAAK,UAAU,yBACd,SAAAA,EAAAA,IAACK,GAAK,UAAA1C,EAAsB,OAAQ,MAAA,CAAQ,CAAA,CAC9C,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CAAA,CAIR"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{j as r}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{j as r}from"./app-CShb1Dgt.js";function s(l){return r.jsx("svg",{...l,children:r.jsx("path",{d:"m11.959 10.641 4.402-4.296a.964.964 0 0 1 1.358 0 .95.95 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.95.95 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .95.95 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.95.95 0 0 1 0-1.35.964.964 0 0 1 1.358 0z",fill:"currentColor"})})}export{s as C};
|
|
2
|
+
//# sourceMappingURL=BqRzwJ-J.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BqRzwJ-J.chunk.js","sources":["../../../../libs/shared/src/images/svg/actions/CloseSvg.tsx"],"sourcesContent":["import React from 'react';\n\nexport function CloseSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='m11.959 10.641 4.402-4.296a.964.964 0 0 1 1.358 0 .95.95 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.95.95 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .95.95 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.95.95 0 0 1 0-1.35.964.964 0 0 1 1.358 0z'\n fill='currentColor'\n />\n </svg>\n );\n}\n"],"names":["CloseSvg","props","jsx"],"mappings":"sCAEO,SAASA,EAASC,EAAsC,CAC7D,OACEC,EAAAA,IAAC,MAAA,CAAK,GAAGD,EACP,SAAAC,EAAAA,IAAC,OAAA,CACC,EAAE,+QACF,KAAK,cAAA,CAAA,EAET,CAEJ"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"BrdU6Hc2.chunk.js","sources":["../../../../libs/common/src/backbone/utils/ScrollHelper.ts"],"sourcesContent":["import { Radio } from 'backbone';\n\nimport { CommonChannels } from '../constants/CommonChannels';\n\nexport const ScrollHelper = {\n // Will prevent scrolling to the top of the page when applinks are triggered\n preventScrollTop(): void {\n Radio.channel(CommonChannels.SHELL).trigger('prevent:scroll:top');\n }\n};"],"names":["ScrollHelper","Radio","CommonChannels"],"mappings":"+CAIO,MAAMA,EAAe,CAE1B,kBAAyB,CACvBC,EAAAA,MAAM,QAAQC,EAAe,KAAK,EAAE,QAAQ,oBAAoB,CAClE,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{aB as n,as as g,Z as f,H as u,U as l}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{aB as n,as as g,Z as f,H as u,U as l}from"./app-CShb1Dgt.js";var v=(e=>(e[e.AllResults=0]="AllResults",e[e.Subtitles=1]="Subtitles",e[e.TitleAndDescription=2]="TitleAndDescription",e))(v||{});function k(){const e=g.get("cv:holiday:dates");return f.isObject(e)?e:{startMonth:12,startDay:15,endMonth:1,endDay:6}}const D={getFormattedDateRange(e,r){return`${n.format(e,"Do MMMM YYYY")} - ${n.format(r,"Do MMMM YYYY")}`},getDateBroadcastParams(e){const r=a=>n.format(a,"YYYY-MM-DD"),t=r(new Date);switch(e){case"yesterday":return{from:r(n.subtract(t,1,"day")),to:t};case"last-week":return{from:r(n.subtract(t,7,"days")),to:t};case"last-2-weeks":return{from:r(n.subtract(t,14,"days")),to:t}}},isHolidayPeriod(){const{startMonth:e,startDay:r,endMonth:t,endDay:a}=k(),s=new Date,o=s.getMonth()+1,i=s.getDate();return o===e&&i>=r||o===t&&i<=a}},z={regions(){return{url:"/api/tv/api/v2/regions",key:"tv:regions",normalize:!1}},region(e){return{url:`/api/tv/api/v2/regions/${e}`,key:`tv:region:${e}`,normalize:!1}},dateRange(e){return{url:`/api/tv/api/v2/regions/${e}/daterange`,key:`tv:region:${e}:daterange`,normalize:!1}},channels(e){return{url:l.urlBuilder("/api/tv/api/v2/channels",{region:e}),key:`tv:channels:${e}`,normalize:!1,formatData:r=>r.sort((t,a)=>t.sortOrder-a.sortOrder)}},payTvChannels(){return{url:"/api/tv/v1/pay-tv/channels/all",key:"pay:tv:channels",normalize:!1}},programsByChannel(e,r,t,a){const s=l.urlBuilder(`/api/tv/api/v3/regions/${e}/channels/programs`,{channel:r,startDate:t,endDate:a}),o=["tv:programs:by:channel",e,r,t,a].join(":");return{url:s,key:o,normalize:!1}},programsByLetter(e,r,t,a){const s=l.urlBuilder("/api/tv/api/v2/Programs",{regionCode:e,startsWith:r,startDate:t,endDate:a}),o=["tv:programs:by:letter",e,r,t,a].join(":");return{url:s,key:o,normalize:!1}},program(e){return{url:`/api/tv/api/v3/programs/${e}`,key:`tv:programs:${e}`,normalize:!1}},search(e,r,t){const{query:a,dateBroadcast:s,...o}=r,i=t||1,d=o.filter||v.AllResults,c=l.urlBuilder("/api/tv/api/v4/search",{region:e,query:a,filter:d,...D.getDateBroadcastParams(s),...o,page:i,size:25}),m=Object.values({filter:d,dateBroadcast:s,...o}).join(":"),y=["tv:search",a,e,m,i].join(":");return{url:c,key:y,normalize:!1,formatData:p=>(p.page=i,p)}},addFullVideo(e,r){return{url:"/api/tv/api/v2/workspace/video",key:"tv:add:full:video",normalize:!1,type:u.POST,data:e,invalidationKeys:`tv:workspace:video:${r}`}},addAdFreeVideo(e,r){return{url:l.urlBuilder(`/api/tv/v4/programs/${e.id}/ad-free`,{customerId:e.customerId,userId:e.userId}),key:"tv:add:ad:free:video",normalize:!1,type:u.POST,invalidationKeys:`tv:workspace:video:${r}`}},adFreeCredits(e,r,t){const a=new Date;a.setHours(0,0,0,0),a.setMinutes(a.getMinutes()+a.getTimezoneOffset());const s=n.add(a,1,"day");return{url:l.urlBuilder("/api/tv/v4/user-requests",{userId:e,customerId:r,regionCode:t,from:n.convertUTCToLocal(a).toISOString(),to:n.convertUTCToLocal(s).toISOString()}),key:"tv:add:free:credits",normalize:!1}},createAdFreeRequest(e){return{url:l.urlBuilder("/api/tv/v4/user-requests/ad-free",{userId:e.userId,customerId:e.customerId}),key:"tv:create:add:free:request",normalize:!1,type:u.POST,data:{programId:e.programId,regionCode:e.regionCode},invalidationKeys:["tv:add:free:credits"]}},workspaceVideo(e,r,t){return{url:l.urlBuilder(`/api/tv/v4/workspace/programs/${e}`,{userId:r,customerId:t}),key:`tv:workspace:video:${e}`}},requestProgram(e){return{url:"/api/tv/v1/pay-tv/user-requests",key:"tv:request:program",type:u.POST,data:e}},requestProgramUk(e){return{url:"/api/tv/api/v1/user-requests/program",key:"tv:request:program:uk",type:u.POST,data:e}}};export{z as T,D as a};
|
|
2
|
+
//# sourceMappingURL=Bt07VepM.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Cca7nDsG.chunk.js","sources":["../../src/apps/tv/interfaces/enums/TvSearchFilter.ts","../../src/apps/tv/utils/TvUtils.ts","../../src/apps/tv/flight-requests/TvRequests.ts"],"sourcesContent":["export enum TvSearchFilter {\n AllResults = 0,\n Subtitles = 1,\n TitleAndDescription = 2\n}","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n\nfunction getHolidayDates() {\n const cvHolidayOverride = LocalStorageHelper.get('cv:holiday:dates');\n\n if (ObjectHelper.isObject(cvHolidayOverride))\n return cvHolidayOverride;\n\n return {\n // Dec 15th\n startMonth: 12,\n startDay: 15,\n // Jan 6th\n endMonth: 1,\n endDay: 6\n };\n}\n\nexport const TvUtils = {\n getFormattedDateRange(startDate: string, endDate: string) {\n return `${DateHelper.format(startDate, 'Do MMMM YYYY')} - ${DateHelper.format(endDate, 'Do MMMM YYYY')}`;\n },\n getDateBroadcastParams(dateBroadcast: string) {\n const format = (date: Date) => DateHelper.format(date, 'YYYY-MM-DD');\n const todayDate = format(new Date());\n\n switch (dateBroadcast) {\n case 'yesterday':\n return {\n from: format(DateHelper.subtract(todayDate, 1, 'day')),\n to: todayDate\n };\n case 'last-week':\n return {\n from: format(DateHelper.subtract(todayDate, 7, 'days')),\n to: todayDate\n };\n case 'last-2-weeks':\n return {\n from: format(DateHelper.subtract(todayDate, 14, 'days')),\n to: todayDate\n };\n }\n },\n isHolidayPeriod(): boolean {\n const { startMonth, startDay, endMonth, endDay } = getHolidayDates();\n\n const today = new Date();\n const month = today.getMonth() + 1;\n const day = today.getDate();\n\n return ((month === startMonth && day >= startDay) || (month === endMonth && day <= endDay));\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { TvSearchFilter } from 'apps/tv/interfaces/enums/TvSearchFilter';\nimport { AddAdFreeVideoRequest } from 'apps/tv/interfaces/requests/AddAdFreeVideoRequest';\nimport { AddFullVideoRequest } from 'apps/tv/interfaces/requests/AddFullVideoRequest';\nimport { AdFreeRequest } from 'apps/tv/interfaces/requests/AdFreeRequest';\nimport { RequestProgramRequest, RequestProgramUkRequest } from 'apps/tv/interfaces/requests/RequestProgramRequest';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nexport const TvRequests = {\n regions(): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions`,\n key: `tv:regions`,\n normalize: false\n };\n },\n\n region(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}`,\n key: `tv:region:${region}`,\n normalize: false\n };\n },\n\n dateRange(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}/daterange`,\n key: `tv:region:${region}:daterange`,\n normalize: false\n };\n },\n\n channels(region: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/api/v2/channels`, { region }),\n key: `tv:channels:${region}`,\n normalize: false,\n formatData: (data: any[]) => {\n return data.sort((a: any, b: any) => (a.sortOrder - b.sortOrder));\n }\n };\n },\n\n payTvChannels(): Flight.Request {\n return {\n url: '/api/tv/v1/pay-tv/channels/all',\n key: 'pay:tv:channels',\n normalize: false\n };\n },\n\n programsByChannel(\n region: string,\n channel: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v3/regions/${region}/channels/programs`, {\n channel,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:channel', region, channel, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n programsByLetter(\n regionCode: string,\n startsWith: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v2/Programs`, {\n regionCode,\n startsWith,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:letter', regionCode, startsWith, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n program(\n id: string\n ): Flight.Request {\n return {\n url: `/api/tv/api/v3/programs/${id}`,\n key: `tv:programs:${id}`,\n normalize: false\n };\n },\n\n search(\n region: string,\n queryParams: HashObject,\n pageParam: number\n ): Flight.Request {\n const { query, dateBroadcast, ...filters } = queryParams;\n const page = pageParam || 1;\n const filter = filters.filter || TvSearchFilter.AllResults;\n\n const url = UrlHelper.urlBuilder(`/api/tv/api/v4/search`, {\n region,\n query,\n filter,\n ...TvUtils.getDateBroadcastParams(dateBroadcast),\n ...filters,\n page,\n size: 25\n });\n\n const filterKeys = Object.values({ filter, dateBroadcast, ...filters }).join(':');\n const key = [ 'tv:search', query, region, filterKeys, page ].join(':');\n\n return {\n url,\n key,\n normalize: false,\n formatData: (data: any) => {\n data.page = page;\n return data;\n }\n };\n },\n\n addFullVideo(data: AddFullVideoRequest, id: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/workspace/video`,\n key: 'tv:add:full:video',\n normalize: false,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n addAdFreeVideo(data: AddAdFreeVideoRequest, id: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/programs/${data.id}/ad-free`, { customerId: data.customerId, userId: data.userId }),\n key: 'tv:add:ad:free:video',\n normalize: false,\n type: HttpVerbs.POST,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n adFreeCredits(\n userId: string,\n customerId: string,\n regionCode: string\n ): Flight.Request {\n // Start of today's date, offset by the local timezone.\n const from = new Date();\n from.setHours(0, 0, 0, 0);\n from.setMinutes(from.getMinutes() + from.getTimezoneOffset());\n\n const to = DateHelper.add(from, 1, 'day');\n\n const url = UrlHelper.urlBuilder(`/api/tv/v4/user-requests`, {\n userId,\n customerId,\n regionCode,\n from: DateHelper.convertUTCToLocal(from).toISOString(),\n to: DateHelper.convertUTCToLocal(to).toISOString()\n });\n\n return {\n url,\n key: 'tv:add:free:credits',\n normalize: false\n };\n },\n\n createAdFreeRequest(data: AdFreeRequest): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/user-requests/ad-free`, { userId: data.userId, customerId: data.customerId }),\n key: 'tv:create:add:free:request',\n normalize: false,\n type: HttpVerbs.POST,\n data: {\n programId: data.programId,\n regionCode: data.regionCode\n },\n invalidationKeys: ['tv:add:free:credits']\n };\n },\n\n workspaceVideo(videoId: string, userId: string, customerId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/workspace/programs/${videoId}`, { userId, customerId }),\n key: `tv:workspace:video:${videoId}`\n };\n },\n\n requestProgram(data: RequestProgramRequest) {\n return {\n url: `/api/tv/v1/pay-tv/user-requests`,\n key: 'tv:request:program',\n type: HttpVerbs.POST,\n data\n };\n },\n\n requestProgramUk(data: RequestProgramUkRequest) {\n return {\n url: `/api/tv/api/v1/user-requests/program`,\n key: 'tv:request:program:uk',\n type: HttpVerbs.POST,\n data\n };\n }\n};"],"names":["TvSearchFilter","getHolidayDates","cvHolidayOverride","LocalStorageHelper","ObjectHelper","TvUtils","startDate","endDate","DateHelper","dateBroadcast","format","date","todayDate","startMonth","startDay","endMonth","endDay","today","month","day","TvRequests","region","UrlHelper","data","a","b","channel","url","key","regionCode","startsWith","id","queryParams","pageParam","query","filters","page","filter","filterKeys","HttpVerbs","userId","customerId","from","to","videoId"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Bt07VepM.chunk.js","sources":["../../src/apps/tv/interfaces/enums/TvSearchFilter.ts","../../src/apps/tv/utils/TvUtils.ts","../../src/apps/tv/flight-requests/TvRequests.ts"],"sourcesContent":["export enum TvSearchFilter {\n AllResults = 0,\n Subtitles = 1,\n TitleAndDescription = 2\n}","import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n\nfunction getHolidayDates() {\n const cvHolidayOverride = LocalStorageHelper.get('cv:holiday:dates');\n\n if (ObjectHelper.isObject(cvHolidayOverride))\n return cvHolidayOverride;\n\n return {\n // Dec 15th\n startMonth: 12,\n startDay: 15,\n // Jan 6th\n endMonth: 1,\n endDay: 6\n };\n}\n\nexport const TvUtils = {\n getFormattedDateRange(startDate: string, endDate: string) {\n return `${DateHelper.format(startDate, 'Do MMMM YYYY')} - ${DateHelper.format(endDate, 'Do MMMM YYYY')}`;\n },\n getDateBroadcastParams(dateBroadcast: string) {\n const format = (date: Date) => DateHelper.format(date, 'YYYY-MM-DD');\n const todayDate = format(new Date());\n\n switch (dateBroadcast) {\n case 'yesterday':\n return {\n from: format(DateHelper.subtract(todayDate, 1, 'day')),\n to: todayDate\n };\n case 'last-week':\n return {\n from: format(DateHelper.subtract(todayDate, 7, 'days')),\n to: todayDate\n };\n case 'last-2-weeks':\n return {\n from: format(DateHelper.subtract(todayDate, 14, 'days')),\n to: todayDate\n };\n }\n },\n isHolidayPeriod(): boolean {\n const { startMonth, startDay, endMonth, endDay } = getHolidayDates();\n\n const today = new Date();\n const month = today.getMonth() + 1;\n const day = today.getDate();\n\n return ((month === startMonth && day >= startDay) || (month === endMonth && day <= endDay));\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { TvSearchFilter } from 'apps/tv/interfaces/enums/TvSearchFilter';\nimport { AddAdFreeVideoRequest } from 'apps/tv/interfaces/requests/AddAdFreeVideoRequest';\nimport { AddFullVideoRequest } from 'apps/tv/interfaces/requests/AddFullVideoRequest';\nimport { AdFreeRequest } from 'apps/tv/interfaces/requests/AdFreeRequest';\nimport { RequestProgramRequest, RequestProgramUkRequest } from 'apps/tv/interfaces/requests/RequestProgramRequest';\nimport { TvUtils } from 'apps/tv/utils/TvUtils';\n\nexport const TvRequests = {\n regions(): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions`,\n key: `tv:regions`,\n normalize: false\n };\n },\n\n region(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}`,\n key: `tv:region:${region}`,\n normalize: false\n };\n },\n\n dateRange(region: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/regions/${region}/daterange`,\n key: `tv:region:${region}:daterange`,\n normalize: false\n };\n },\n\n channels(region: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/api/v2/channels`, { region }),\n key: `tv:channels:${region}`,\n normalize: false,\n formatData: (data: any[]) => {\n return data.sort((a: any, b: any) => (a.sortOrder - b.sortOrder));\n }\n };\n },\n\n payTvChannels(): Flight.Request {\n return {\n url: '/api/tv/v1/pay-tv/channels/all',\n key: 'pay:tv:channels',\n normalize: false\n };\n },\n\n programsByChannel(\n region: string,\n channel: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v3/regions/${region}/channels/programs`, {\n channel,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:channel', region, channel, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n programsByLetter(\n regionCode: string,\n startsWith: string,\n startDate: string,\n endDate: string\n ): Flight.Request {\n const url = UrlHelper.urlBuilder(`/api/tv/api/v2/Programs`, {\n regionCode,\n startsWith,\n startDate,\n endDate\n });\n\n const key = [ 'tv:programs:by:letter', regionCode, startsWith, startDate, endDate ].join(':');\n\n return {\n url,\n key,\n normalize: false\n };\n },\n\n program(\n id: string\n ): Flight.Request {\n return {\n url: `/api/tv/api/v3/programs/${id}`,\n key: `tv:programs:${id}`,\n normalize: false\n };\n },\n\n search(\n region: string,\n queryParams: HashObject,\n pageParam: number\n ): Flight.Request {\n const { query, dateBroadcast, ...filters } = queryParams;\n const page = pageParam || 1;\n const filter = filters.filter || TvSearchFilter.AllResults;\n\n const url = UrlHelper.urlBuilder(`/api/tv/api/v4/search`, {\n region,\n query,\n filter,\n ...TvUtils.getDateBroadcastParams(dateBroadcast),\n ...filters,\n page,\n size: 25\n });\n\n const filterKeys = Object.values({ filter, dateBroadcast, ...filters }).join(':');\n const key = [ 'tv:search', query, region, filterKeys, page ].join(':');\n\n return {\n url,\n key,\n normalize: false,\n formatData: (data: any) => {\n data.page = page;\n return data;\n }\n };\n },\n\n addFullVideo(data: AddFullVideoRequest, id: string): Flight.Request {\n return {\n url: `/api/tv/api/v2/workspace/video`,\n key: 'tv:add:full:video',\n normalize: false,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n addAdFreeVideo(data: AddAdFreeVideoRequest, id: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/programs/${data.id}/ad-free`, { customerId: data.customerId, userId: data.userId }),\n key: 'tv:add:ad:free:video',\n normalize: false,\n type: HttpVerbs.POST,\n invalidationKeys: `tv:workspace:video:${id}`\n };\n },\n\n adFreeCredits(\n userId: string,\n customerId: string,\n regionCode: string\n ): Flight.Request {\n // Start of today's date, offset by the local timezone.\n const from = new Date();\n from.setHours(0, 0, 0, 0);\n from.setMinutes(from.getMinutes() + from.getTimezoneOffset());\n\n const to = DateHelper.add(from, 1, 'day');\n\n const url = UrlHelper.urlBuilder(`/api/tv/v4/user-requests`, {\n userId,\n customerId,\n regionCode,\n from: DateHelper.convertUTCToLocal(from).toISOString(),\n to: DateHelper.convertUTCToLocal(to).toISOString()\n });\n\n return {\n url,\n key: 'tv:add:free:credits',\n normalize: false\n };\n },\n\n createAdFreeRequest(data: AdFreeRequest): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/user-requests/ad-free`, { userId: data.userId, customerId: data.customerId }),\n key: 'tv:create:add:free:request',\n normalize: false,\n type: HttpVerbs.POST,\n data: {\n programId: data.programId,\n regionCode: data.regionCode\n },\n invalidationKeys: ['tv:add:free:credits']\n };\n },\n\n workspaceVideo(videoId: string, userId: string, customerId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`/api/tv/v4/workspace/programs/${videoId}`, { userId, customerId }),\n key: `tv:workspace:video:${videoId}`\n };\n },\n\n requestProgram(data: RequestProgramRequest) {\n return {\n url: `/api/tv/v1/pay-tv/user-requests`,\n key: 'tv:request:program',\n type: HttpVerbs.POST,\n data\n };\n },\n\n requestProgramUk(data: RequestProgramUkRequest) {\n return {\n url: `/api/tv/api/v1/user-requests/program`,\n key: 'tv:request:program:uk',\n type: HttpVerbs.POST,\n data\n };\n }\n};"],"names":["TvSearchFilter","getHolidayDates","cvHolidayOverride","LocalStorageHelper","ObjectHelper","TvUtils","startDate","endDate","DateHelper","dateBroadcast","format","date","todayDate","startMonth","startDay","endMonth","endDay","today","month","day","TvRequests","region","UrlHelper","data","a","b","channel","url","key","regionCode","startsWith","id","queryParams","pageParam","query","filters","page","filter","filterKeys","HttpVerbs","userId","customerId","from","to","videoId"],"mappings":"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"}
|