@clickview/streamable-learning 0.48.0-rc.0 → 0.48.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.vite/manifest.json +646 -646
- package/dist/bundles.json +1 -1
- package/dist/css/DU3tPCD_.chunk.css +12 -0
- package/dist/en.json +1 -1
- package/dist/scripts/{m9QbGES0.chunk.js → ACTQklJQ.chunk.js} +2 -2
- package/dist/scripts/{m9QbGES0.chunk.js.map → ACTQklJQ.chunk.js.map} +1 -1
- package/dist/scripts/{B7if0Lk52.chunk.js → B-qOny0I2.chunk.js} +2 -2
- package/dist/scripts/{B7if0Lk52.chunk.js.map → B-qOny0I2.chunk.js.map} +1 -1
- package/dist/scripts/{BSjm_rCE.chunk.js → B5jBIPaP.chunk.js} +2 -2
- package/dist/scripts/{BSjm_rCE.chunk.js.map → B5jBIPaP.chunk.js.map} +1 -1
- package/dist/scripts/{CPkKuTSK2.chunk.js → B703cBe72.chunk.js} +2 -2
- package/dist/scripts/{CPkKuTSK2.chunk.js.map → B703cBe72.chunk.js.map} +1 -1
- package/dist/scripts/{DNNNPLMp.chunk.js → B7iwtSij.chunk.js} +2 -2
- package/dist/scripts/{DNNNPLMp.chunk.js.map → B7iwtSij.chunk.js.map} +1 -1
- package/dist/scripts/{CXNve4Wq2.chunk.js → BCBfXCYM2.chunk.js} +2 -2
- package/dist/scripts/{CXNve4Wq2.chunk.js.map → BCBfXCYM2.chunk.js.map} +1 -1
- package/dist/scripts/{CoYNU7We2.chunk.js → BKnxYKDu2.chunk.js} +2 -2
- package/dist/scripts/{CoYNU7We2.chunk.js.map → BKnxYKDu2.chunk.js.map} +1 -1
- package/dist/scripts/{BoxedFO8.chunk.js → BLrjbrp8.chunk.js} +2 -2
- package/dist/scripts/{BoxedFO8.chunk.js.map → BLrjbrp8.chunk.js.map} +1 -1
- package/dist/scripts/{CibcLNJP2.chunk.js → BTYwcYPL2.chunk.js} +2 -2
- package/dist/scripts/{CibcLNJP2.chunk.js.map → BTYwcYPL2.chunk.js.map} +1 -1
- package/dist/scripts/{CwI-7tep2.chunk.js → BXJetawx2.chunk.js} +2 -2
- package/dist/scripts/{CwI-7tep2.chunk.js.map → BXJetawx2.chunk.js.map} +1 -1
- package/dist/scripts/{BV74ZRR22.chunk.js → BZOcEcTA2.chunk.js} +2 -2
- package/dist/scripts/{BV74ZRR22.chunk.js.map → BZOcEcTA2.chunk.js.map} +1 -1
- package/dist/scripts/{DxsW8K0n2.chunk.js → BaMNOAYj2.chunk.js} +2 -2
- package/dist/scripts/{DxsW8K0n2.chunk.js.map → BaMNOAYj2.chunk.js.map} +1 -1
- package/dist/scripts/{DrDQfaFN2.chunk.js → BihZ4r0z2.chunk.js} +3 -3
- package/dist/scripts/{DrDQfaFN2.chunk.js.map → BihZ4r0z2.chunk.js.map} +1 -1
- package/dist/scripts/{CK6c6uHp2.chunk.js → BpgHKWR52.chunk.js} +2 -2
- package/dist/scripts/{CK6c6uHp2.chunk.js.map → BpgHKWR52.chunk.js.map} +1 -1
- package/dist/scripts/{JtFbyaXc.chunk.js → Br0Uc4GG.chunk.js} +2 -2
- package/dist/scripts/{JtFbyaXc.chunk.js.map → Br0Uc4GG.chunk.js.map} +1 -1
- package/dist/scripts/{Dd8r1SE32.chunk.js → BsAo7Lri2.chunk.js} +2 -2
- package/dist/scripts/{Dd8r1SE32.chunk.js.map → BsAo7Lri2.chunk.js.map} +1 -1
- package/dist/scripts/{BMjES83N2.chunk.js → BvJXPFoz2.chunk.js} +2 -2
- package/dist/scripts/{BMjES83N2.chunk.js.map → BvJXPFoz2.chunk.js.map} +1 -1
- package/dist/scripts/{CpFOQcL7.chunk.js → BxypZGPK.chunk.js} +2 -2
- package/dist/scripts/{CpFOQcL7.chunk.js.map → BxypZGPK.chunk.js.map} +1 -1
- package/dist/scripts/C4MLxDS-.chunk.js +1 -0
- package/dist/scripts/{DLp7yHzT2.chunk.js → C5i1HsPp2.chunk.js} +2 -2
- package/dist/scripts/{DLp7yHzT2.chunk.js.map → C5i1HsPp2.chunk.js.map} +1 -1
- package/dist/scripts/{Bkv1Tbyu.chunk.js → CCoZQmgX.chunk.js} +2 -2
- package/dist/scripts/{Bkv1Tbyu.chunk.js.map → CCoZQmgX.chunk.js.map} +1 -1
- package/dist/scripts/{Clh6wBrg.chunk.js → CGxa1Jzq.chunk.js} +2 -2
- package/dist/scripts/{Clh6wBrg.chunk.js.map → CGxa1Jzq.chunk.js.map} +1 -1
- package/dist/scripts/{DAvXFgC62.chunk.js → CKdklY2o2.chunk.js} +2 -2
- package/dist/scripts/{DAvXFgC62.chunk.js.map → CKdklY2o2.chunk.js.map} +1 -1
- package/dist/scripts/{CeWjJPIz.chunk.js → CN8PeBwg.chunk.js} +2 -2
- package/dist/scripts/{CeWjJPIz.chunk.js.map → CN8PeBwg.chunk.js.map} +1 -1
- package/dist/scripts/{B1jitqYS2.chunk.js → CNJrD44-2.chunk.js} +2 -2
- package/dist/scripts/{B1jitqYS2.chunk.js.map → CNJrD44-2.chunk.js.map} +1 -1
- package/dist/scripts/{DIHDe4Sg.chunk.js → CNmmq34f.chunk.js} +2 -2
- package/dist/scripts/{DIHDe4Sg.chunk.js.map → CNmmq34f.chunk.js.map} +1 -1
- package/dist/scripts/{CikSQKH-.chunk.js → CUUUI6pl.chunk.js} +2 -2
- package/dist/scripts/{CikSQKH-.chunk.js.map → CUUUI6pl.chunk.js.map} +1 -1
- package/dist/scripts/{DNO0KpY72.chunk.js → CWFInhB82.chunk.js} +2 -2
- package/dist/scripts/{DNO0KpY72.chunk.js.map → CWFInhB82.chunk.js.map} +1 -1
- package/dist/scripts/{i2-k6ULv2.chunk.js → CbLL7dIz2.chunk.js} +2 -2
- package/dist/scripts/{i2-k6ULv2.chunk.js.map → CbLL7dIz2.chunk.js.map} +1 -1
- package/dist/scripts/{KCdpQ8qv2.chunk.js → Ce1TZZdV2.chunk.js} +2 -2
- package/dist/scripts/{KCdpQ8qv2.chunk.js.map → Ce1TZZdV2.chunk.js.map} +1 -1
- package/dist/scripts/{NV4_mMU8.chunk.js → Ces-KTwe.chunk.js} +2 -2
- package/dist/scripts/{NV4_mMU8.chunk.js.map → Ces-KTwe.chunk.js.map} +1 -1
- package/dist/scripts/{0xQRFMBY.chunk.js → CkYqp83j.chunk.js} +2 -2
- package/dist/scripts/{0xQRFMBY.chunk.js.map → CkYqp83j.chunk.js.map} +1 -1
- package/dist/scripts/{DvL3J2BU.chunk.js → CrCAJmt6.chunk.js} +2 -2
- package/dist/scripts/{DvL3J2BU.chunk.js.map → CrCAJmt6.chunk.js.map} +1 -1
- package/dist/scripts/{CcDgbmw52.chunk.js → CsC3VVvE2.chunk.js} +2 -2
- package/dist/scripts/{CcDgbmw52.chunk.js.map → CsC3VVvE2.chunk.js.map} +1 -1
- package/dist/scripts/{C9UjF0q6.chunk.js → D0SYGnyF.chunk.js} +2 -2
- package/dist/scripts/{C9UjF0q6.chunk.js.map → D0SYGnyF.chunk.js.map} +1 -1
- package/dist/scripts/{BqO6i89w2.chunk.js → D7tastET2.chunk.js} +2 -2
- package/dist/scripts/{BqO6i89w2.chunk.js.map → D7tastET2.chunk.js.map} +1 -1
- package/dist/scripts/{CeI-LCE-.chunk.js → DIavEegC.chunk.js} +2 -2
- package/dist/scripts/{CeI-LCE-.chunk.js.map → DIavEegC.chunk.js.map} +1 -1
- package/dist/scripts/{BKbKu9Rp.chunk.js → DK3xia1t.chunk.js} +2 -2
- package/dist/scripts/{BKbKu9Rp.chunk.js.map → DK3xia1t.chunk.js.map} +1 -1
- package/dist/scripts/{BCdnm1Nn.chunk.js → DKnZ8BaN.chunk.js} +2 -2
- package/dist/scripts/{BCdnm1Nn.chunk.js.map → DKnZ8BaN.chunk.js.map} +1 -1
- package/dist/scripts/{awemA_vU2.chunk.js → DO8_mR5i2.chunk.js} +2 -2
- package/dist/scripts/{awemA_vU2.chunk.js.map → DO8_mR5i2.chunk.js.map} +1 -1
- package/dist/scripts/{DlQrdOls.chunk.js → DR80oZtZ.chunk.js} +2 -2
- package/dist/scripts/{DlQrdOls.chunk.js.map → DR80oZtZ.chunk.js.map} +1 -1
- package/dist/scripts/{DMq5Gp-U2.chunk.js → DU1SE31v2.chunk.js} +2 -2
- package/dist/scripts/{DMq5Gp-U2.chunk.js.map → DU1SE31v2.chunk.js.map} +1 -1
- package/dist/scripts/{XnBhLH-02.chunk.js → Dj4AeYQQ2.chunk.js} +2 -2
- package/dist/scripts/{XnBhLH-02.chunk.js.map → Dj4AeYQQ2.chunk.js.map} +1 -1
- package/dist/scripts/{CmrPRojb.chunk.js → DnSy_Myx.chunk.js} +2 -2
- package/dist/scripts/{CmrPRojb.chunk.js.map → DnSy_Myx.chunk.js.map} +1 -1
- package/dist/scripts/{D0vsmyva.chunk.js → Dr1flAez.chunk.js} +2 -2
- package/dist/scripts/{D0vsmyva.chunk.js.map → Dr1flAez.chunk.js.map} +1 -1
- package/dist/scripts/{BXT8nHry2.chunk.js → DwzBzBlI2.chunk.js} +2 -2
- package/dist/scripts/{BXT8nHry2.chunk.js.map → DwzBzBlI2.chunk.js.map} +1 -1
- package/dist/scripts/{CvqqZmNo2.chunk.js → DyT1OGvP2.chunk.js} +2 -2
- package/dist/scripts/{CvqqZmNo2.chunk.js.map → DyT1OGvP2.chunk.js.map} +1 -1
- package/dist/scripts/{E9tNds1l.chunk.js → Llxar-VU.chunk.js} +2 -2
- package/dist/scripts/{E9tNds1l.chunk.js.map → Llxar-VU.chunk.js.map} +1 -1
- package/dist/scripts/{app-B1XBsz23.js → app-BIigh9wv.js} +4 -4
- package/dist/scripts/{app-B1XBsz23.js.map → app-BIigh9wv.js.map} +1 -1
- package/dist/scripts/{BMl02f_62.chunk.js → bycmewy72.chunk.js} +2 -2
- package/dist/scripts/{BMl02f_62.chunk.js.map → bycmewy72.chunk.js.map} +1 -1
- package/dist/scripts/{DmfbtOlu.chunk.js → jWpq99N3.chunk.js} +2 -2
- package/dist/scripts/{DmfbtOlu.chunk.js.map → jWpq99N3.chunk.js.map} +1 -1
- package/dist/scripts/{BDliRFoa.chunk.js → oTYyWWB-.chunk.js} +2 -2
- package/dist/scripts/{BDliRFoa.chunk.js.map → oTYyWWB-.chunk.js.map} +1 -1
- package/dist/scripts/{lokG7Sha2.chunk.js → qcrBN1zR2.chunk.js} +2 -2
- package/dist/scripts/{lokG7Sha2.chunk.js.map → qcrBN1zR2.chunk.js.map} +1 -1
- package/dist/scripts/{UAcFqQzZ.chunk.js → smdLElLq.chunk.js} +2 -2
- package/dist/scripts/{UAcFqQzZ.chunk.js.map → smdLElLq.chunk.js.map} +1 -1
- package/dist/scripts/{D8_5yfHY2.chunk.js → tYi-sUb22.chunk.js} +2 -2
- package/dist/scripts/{D8_5yfHY2.chunk.js.map → tYi-sUb22.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/D5Jnyjf8.chunk.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CikSQKH-.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/actions/MoreSvg.tsx","../../../../libs/shared/src/components/actions/actions.module.scss","../../../../libs/shared/src/components/actions/ActionsDropdown.tsx","../../../../libs/shared/src/components/actions/Actions.tsx"],"sourcesContent":["import React from 'react';\n\nexport function MoreSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n // Hide dropdown arrow\n .dropdownToggle:after {\n content: none;\n }\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MoreSvg } from 'libs/shared/images/svg/actions/MoreSvg';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.module.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label) ?\n props.action.label() :\n <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2' />}\n {label}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label='More actions dropdown'\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svg={MoreSvg} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svg?: SvgIcon;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label: JSX.Element = FunctionHelper.isFunction(a.label) ?\n a.label() :\n <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label}\n </ActionButton>\n );\n }\n\n return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CUUUI6pl.chunk.js","names":[],"sources":["../../../../libs/shared/src/images/svg/actions/MoreSvg.tsx","../../../../libs/shared/src/components/actions/actions.module.scss","../../../../libs/shared/src/components/actions/ActionsDropdown.tsx","../../../../libs/shared/src/components/actions/Actions.tsx"],"sourcesContent":["import React from 'react';\n\nexport function MoreSvg(props: React.SVGProps<SVGSVGElement>) {\n return (\n <svg {...props}>\n <path\n d='M12 13.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0 5.5a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3m0-11a1.5 1.5 0 1 1 0-3 1.5 1.5 0 0 1 0 3'\n fill='currentColor'\n />\n </svg>\n );\n}\n",":local {\n // Hide dropdown arrow\n .dropdownToggle:after {\n content: none;\n }\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MoreSvg } from 'libs/shared/images/svg/actions/MoreSvg';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.module.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label) ?\n props.action.label() :\n <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svg && <SvgContainer svg={props.action.svg} className='d-inline-block svg-container me-2' />}\n {label}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label='More actions dropdown'\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svg={MoreSvg} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SvgIcon } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svg?: SvgIcon;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label: JSX.Element = FunctionHelper.isFunction(a.label) ?\n a.label() :\n <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label}\n </ActionButton>\n );\n }\n\n return (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svg={a.svg}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n tooltip={a.tooltip}\n />\n );\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./B-OL6Vs7.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{t as a}from"./CN1th_9f.chunk.js";import{t as o}from"./BYYiNmLB.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./iTHYgnO8.chunk.js";import{J as l}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./Dp9qJj1C.chunk.js";import{t as e}from"./ImQRQGZr.chunk.js";import{lt as t,ut as n}from"./Dun43GrB.chunk.js";import{t as r}from"./B-OL6Vs7.chunk.js";import{l as i}from"./BQ5XMoHG.chunk.js";import{t as a}from"./CN1th_9f.chunk.js";import{t as o}from"./BYYiNmLB.chunk.js";import{t as s}from"./DjIdG9LL2.chunk.js";import{t as c}from"./iTHYgnO8.chunk.js";import{J as l}from"./app-BIigh9wv.js";n();function u(e){let t=i(l.userProducts()).data?.find(e=>e.id===a.Primary);if(t)return n=>e(t,n)}var d=`live`;function f(e,t,n){let r=new URL(e.url);return r.pathname=t,n&&(r.search=`query=${n}`),r.href}function p(e){let t=e?.params;if(t)return typeof t==`string`?t:t.query}function m(e){return e?.args?.join(`/`)??``}var h={getDashboardUrl:e=>f(e,d),getCalendarUrl:e=>f(e,`${d}/calendar`),getSettingsUrl:e=>f(e,`settings`),getSubjectsUrl:(e,t)=>f(e,`${d}/topics/${m(t)}`),getVideosUrl:(e,t)=>f(e,`${d}/videos/${m(t)}`),getLivestreamUrl:(e,t)=>f(e,`${d}/livestreams/${m(t)}`),getSearchUrl:(e,t)=>f(e,`search`,p(t)||void 0)},g={[r.DEFAULT]:h.getDashboardUrl,[r.DASHBOARD]:h.getDashboardUrl,[r.CALENDAR]:h.getCalendarUrl,[r.SUBJECTS]:h.getSubjectsUrl,[r.SEARCH]:h.getSearchUrl,[r.VIDEOS]:h.getVideosUrl,[r.SETTINGS]:h.getSettingsUrl,[r.LIVESTREAMS]:h.getLivestreamUrl},_={container:`_container_1q8q1_1`,content:`_content_1q8q1_6`},v=t(),y=`default.redirectError`;function b({error:t}){s({title:t?.heading||e.getPhrase(y,`defaultPageTitle`)});let n=g[t.origin.application],r=u(n);return(0,v.jsxs)(c,{className:`${_.container}`,children:[(0,v.jsx)(c.Image,{src:o.REDIRECT}),(0,v.jsxs)(`div`,{className:_.content,children:[(0,v.jsx)(c.Heading,{children:e.getPhrase(y,`heading`)}),!!t.description&&(0,v.jsx)(c.Info,{className:`mt-3 text-wrap`,injectHtml:t.injectDescriptionHtml,children:e.getPhrase(y,`info`)})]}),t.cta!==!1&&(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`takeMeThere`),className:`btn btn-dark`,href:r(t.origin)}),(0,v.jsx)(c.Cta,{text:e.getPhrase(y,`learnMore`),className:`btn btn-link text-info mt-3 p-0`,href:r(t.origin)})]})}export{b as PageRedirectedErrorView};
|
|
2
|
+
//# sourceMappingURL=CWFInhB82.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CWFInhB82.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseGetExternalUrl.ts","../../src/shared/utils/ExternalRedirectRouteHelper.ts","../../src/shared/utils/StreamableRedirectMapping.ts","../../src/apps/default/views/redirect/page-redirected-error-view.module.scss","../../src/apps/default/views/redirect/PageRedirectedErrorView.tsx"],"sourcesContent":["import { AppLink } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { Product } from 'libs/shared/interfaces';\n\ntype ArgType = HashObject | string | number | AppLink;\n\ntype ExternalUrlBuilder = (product: Product, ...args: ArgType[]) => string;\n\n/**\n * This should be updated to link to LaunchPad once it supports object links.\n */\nexport function useGetExternalUrl(urlBuilder: ExternalUrlBuilder): (...args: ArgType[]) => string {\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const primaryProduct = products.data?.find(p => p.id === ProductId.Primary);\n\n if (!primaryProduct)\n return;\n\n return args => urlBuilder(primaryProduct, args);\n}\n","import { Core } from 'libs/common/backbone/index';\n\nimport { Product } from 'libs/shared/interfaces';\n\nconst APP_BASE = 'live';\n\nfunction buildUrl(product: Product, pathname: string, query?: string) {\n const url = new URL(product.url);\n url.pathname = pathname;\n\n if (query)\n url.search = `query=${query}`;\n\n return url.href;\n}\n\nfunction getSearchQuery(appLink?: Core.AppLink): string | undefined {\n const params = appLink?.params;\n if (!params) return undefined;\n return typeof params === 'string' ? params : (params['query'] as string | undefined);\n}\n\nfunction joinArgs(appLink?: Core.AppLink) {\n return appLink?.args?.join('/') ?? '';\n}\n\nexport const ExternalRedirectRouteHelper = {\n getDashboardUrl: (product: Product) =>\n buildUrl(product, APP_BASE),\n\n getCalendarUrl: (product: Product) =>\n buildUrl(product, `${APP_BASE}/calendar`),\n\n getSettingsUrl: (product: Product) =>\n buildUrl(product, 'settings'),\n\n getSubjectsUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/topics/${joinArgs(appLink)}`),\n\n getVideosUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/videos/${joinArgs(appLink)}`),\n\n getLivestreamUrl: (product: Product, appLink?: Core.AppLink) =>\n buildUrl(product, `${APP_BASE}/livestreams/${joinArgs(appLink)}`),\n\n getSearchUrl: (product: Product, appLink?: Core.AppLink) => {\n const query = getSearchQuery(appLink);\n return buildUrl(product, 'search', query || undefined);\n }\n};\n","import { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { ExternalRedirectRouteHelper } from 'shared/utils/ExternalRedirectRouteHelper';\n\nexport const StreamableRedirectMapping = {\n [AppChannels.DEFAULT]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.DASHBOARD]: ExternalRedirectRouteHelper.getDashboardUrl,\n [AppChannels.CALENDAR]: ExternalRedirectRouteHelper.getCalendarUrl,\n [AppChannels.SUBJECTS]: ExternalRedirectRouteHelper.getSubjectsUrl,\n [AppChannels.SEARCH]: ExternalRedirectRouteHelper.getSearchUrl,\n [AppChannels.VIDEOS]: ExternalRedirectRouteHelper.getVideosUrl,\n [AppChannels.SETTINGS]: ExternalRedirectRouteHelper.getSettingsUrl,\n [AppChannels.LIVESTREAMS]: ExternalRedirectRouteHelper.getLivestreamUrl\n};\n",":local {\n .container {\n width: auto;\n min-height: 80vh;\n justify-content: center;\n }\n\n .content {\n width: 28rem;\n }\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { PageRedirectedError } from 'libs/shared/errors/general/page-redirected/PageRedirectedError';\nimport { useGetExternalUrl } from 'libs/shared/hooks/UseGetExternalUrl';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { StreamableRedirectMapping } from 'shared/utils/StreamableRedirectMapping';\n\nimport styles from './page-redirected-error-view.module.scss';\n\nconst namespace = 'default.redirectError';\n\ninterface PageRedirectedErrorViewProps {\n error: PageRedirectedError;\n}\n\nexport function PageRedirectedErrorView({ error }: PageRedirectedErrorViewProps) {\n useSetPageMetadata({\n title: error?.heading || LanguageService.getPhrase(namespace, 'defaultPageTitle')\n });\n\n const mapping = StreamableRedirectMapping[error.origin.application];\n const urlBuilder = useGetExternalUrl(mapping);\n\n return (\n <EmptyState className={`${styles.container}`}>\n <EmptyState.Image src={ImageUrls.REDIRECT}/>\n <div className={styles.content}>\n <EmptyState.Heading>{LanguageService.getPhrase(namespace, 'heading')}</EmptyState.Heading>\n {!!error.description && (\n <EmptyState.Info\n className='mt-3 text-wrap'\n injectHtml={error.injectDescriptionHtml}\n >\n {LanguageService.getPhrase(namespace, 'info')}\n </EmptyState.Info>\n )}\n </div>\n {error.cta !== false &&\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'takeMeThere')}\n className='btn btn-dark'\n href={urlBuilder(error.origin)}\n />\n }\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'learnMore')}\n className='btn btn-link text-info mt-3 p-0'\n href={urlBuilder(error.origin)}\n />\n </EmptyState>\n );\n}\n"],"mappings":"gZAeA,SAAA,EAAA,EAAA,2DAKE,KAGA,MAAA,IAAA,EAAA,EAAA,EAAA,CCnBF,IAAM,EAAW,OAEjB,SAAS,EAAS,EAAkB,EAAkB,EAAgB,CACpE,IAAM,EAAM,IAAI,IAAI,EAAQ,IAAI,CAMhC,MALA,GAAI,SAAW,EAEX,IACF,EAAI,OAAS,SAAS,KAEjB,EAAI,KAGb,SAAS,EAAe,EAA4C,CAClE,IAAM,EAAS,GAAS,OACnB,KACL,OAAO,OAAO,GAAW,SAAW,EAAU,EAAO,MAGvD,SAAS,EAAS,EAAwB,CACxC,OAAO,GAAS,MAAM,KAAK,IAAI,EAAI,GAGrC,IAAa,EAA8B,CACzC,gBAAkB,GAChB,EAAS,EAAS,EAAS,CAE7B,eAAiB,GACf,EAAS,EAAS,GAAG,EAAS,WAAW,CAE3C,eAAiB,GACf,EAAS,EAAS,WAAW,CAE/B,gBAAiB,EAAkB,IACjC,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,cAAe,EAAkB,IAC/B,EAAS,EAAS,GAAG,EAAS,UAAU,EAAS,EAAQ,GAAG,CAE9D,kBAAmB,EAAkB,IACnC,EAAS,EAAS,GAAG,EAAS,eAAe,EAAS,EAAQ,GAAG,CAEnE,cAAe,EAAkB,IAExB,EAAS,EAAS,SADX,EAAe,EAAQ,EACO,IAAA,GAAU,CAEzD,CC9CY,EAA4B,EACtC,EAAY,SAAU,EAA4B,iBAClD,EAAY,WAAY,EAA4B,iBACpD,EAAY,UAAW,EAA4B,gBACnD,EAAY,UAAW,EAA4B,gBACnD,EAAY,QAAS,EAA4B,cACjD,EAAY,QAAS,EAA4B,cACjD,EAAY,UAAW,EAA4B,gBACnD,EAAY,aAAc,EAA4B,iBACxD,qEEEK,EAAY,wBAMlB,SAAgB,EAAwB,CAAE,SAAuC,CAC/E,EAAmB,CACjB,MAAO,GAAO,SAAW,EAAgB,UAAU,EAAW,mBAAmB,CAClF,CAAC,CAEF,IAAM,EAAU,EAA0B,EAAM,OAAO,aACjD,EAAa,EAAkB,EAAQ,CAE7C,OACE,EAAA,EAAA,MAAC,EAAD,CAAY,UAAW,GAAG,EAAO,qBAAjC,EACE,EAAA,EAAA,KAAC,EAAW,MAAZ,CAAkB,IAAK,EAAU,SAAW,CAAA,EAC5C,EAAA,EAAA,MAAC,MAAD,CAAK,UAAW,EAAO,iBAAvB,EACE,EAAA,EAAA,KAAC,EAAW,QAAZ,CAAA,SAAqB,EAAgB,UAAU,EAAW,UAAU,CAAsB,CAAA,CACzF,CAAC,CAAC,EAAM,cACP,EAAA,EAAA,KAAC,EAAW,KAAZ,CACE,UAAU,iBACV,WAAY,EAAM,+BAEjB,EAAgB,UAAU,EAAW,OAAA,CACtB,CAAA,CAAA,GAGrB,EAAM,MAAQ,KACX,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,cAAc,CACzD,UAAU,eACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA,EAEN,EAAA,EAAA,KAAC,EAAW,IAAZ,CACE,KAAM,EAAgB,UAAU,EAAW,YAAY,CACvD,UAAU,kCACV,KAAM,EAAW,EAAM,OAAA,CACvB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{t as e}from"./ImQRQGZr.chunk.js";import{t}from"./B-OL6Vs7.chunk.js";import{n}from"./C9ET3pjZ.chunk.js";import{t as r}from"./DeldjYRc.chunk.js";import{t as i}from"./BYYiNmLB.chunk.js";import{M as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{t as e}from"./ImQRQGZr.chunk.js";import{t}from"./B-OL6Vs7.chunk.js";import{n}from"./C9ET3pjZ.chunk.js";import{t as r}from"./DeldjYRc.chunk.js";import{t as i}from"./BYYiNmLB.chunk.js";import{M as a}from"./app-BIigh9wv.js";var o=e.encloseNamespace(`settings.hooks`);function s(){let{hasPermissions:e}=a();return[{id:`my-account`,imageUrl:i.Settings.MY_ACCOUNT,name:o(`myAccount`),modules:[{id:`profile-details`,name:o(`profileDetails`),appLink:{application:t.SETTINGS,action:r.Settings.PROFILE_DETAILS},permissions:[n.EditProfileDetails]},{id:`email-settings`,name:o(`emailPassword`),appLink:{application:t.SETTINGS,action:r.Settings.ACCOUNT}}]}].map(t=>({...t,modules:t.modules.filter(t=>!(t.permissions?.length&&!e(t.permissions)))})).filter(e=>!!e.modules.length)}export{s as t};
|
|
2
|
+
//# sourceMappingURL=CbLL7dIz2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CbLL7dIz2.chunk.js","names":[],"sources":["../../src/apps/settings/hooks/useGetSettingsGroups.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\nimport { SettingsGroup } from 'apps/settings/interfaces/SettingsGroup';\n\nconst namespace = 'settings.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useGetSettingsGroups(): SettingsGroup[] {\n const { hasPermissions } = usePermissions();\n\n const groups: SettingsGroup[] = [\n {\n // Account Management\n id: 'my-account',\n imageUrl: ImageUrls.Settings.MY_ACCOUNT,\n name: getPhrase('myAccount'),\n modules: [\n {\n id: 'profile-details',\n name: getPhrase('profileDetails'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.PROFILE_DETAILS\n },\n permissions: [PermissionName.EditProfileDetails]\n },\n {\n id: 'email-settings',\n name: getPhrase('emailPassword'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.ACCOUNT\n }\n }\n ]\n }\n ];\n\n return groups.map(group => {\n return {\n ...group,\n modules: group.modules.filter(m => {\n if (m.permissions?.length && !hasPermissions(m.permissions))\n return false;\n \n return true;\n })\n };\n }).filter(group => !!group.modules.length);\n}\n"],"mappings":"oOAYA,IAAM,EAAY,EAAgB,iBADhB,iBAC2C,CAE7D,SAAgB,GAAwC,CACtD,GAAM,CAAE,kBAAmB,GAAgB,CA8B3C,MA5BgC,CAC9B,CAEE,GAAI,aACJ,SAAU,EAAU,SAAS,WAC7B,KAAM,EAAU,YAAY,CAC5B,QAAS,CACP,CACE,GAAI,kBACJ,KAAM,EAAU,iBAAiB,CACjC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,gBAC1B,CACD,YAAa,CAAC,EAAe,mBAAmB,CACjD,CACD,CACE,GAAI,iBACJ,KAAM,EAAU,gBAAgB,CAChC,QAAS,CACP,YAAa,EAAY,SACzB,OAAQ,EAAQ,SAAS,QAC1B,CACF,CACF,CACF,CACF,CAEa,IAAI,IACT,CACL,GAAG,EACH,QAAS,EAAM,QAAQ,OAAO,GAC5B,EAAI,EAAE,aAAa,QAAU,CAAC,EAAe,EAAE,YAAY,EAI3D,CACH,EACD,CAAC,OAAO,GAAS,CAAC,CAAC,EAAM,QAAQ,OAAO"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{v as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,T as r,dt as i,l as a,lt as o,m as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./B-OL6Vs7.chunk.js";import{l as d}from"./BQ5XMoHG.chunk.js";import{t as f}from"./DeldjYRc.chunk.js";import{E as p,R as m,z as h}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{v as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,T as r,dt as i,l as a,lt as o,m as s,n as c,ut as l}from"./Dun43GrB.chunk.js";import{t as u}from"./B-OL6Vs7.chunk.js";import{l as d}from"./BQ5XMoHG.chunk.js";import{t as f}from"./DeldjYRc.chunk.js";import{E as p,R as m,z as h}from"./app-BIigh9wv.js";import{t as g}from"./Ct5auYPr2.chunk.js";import{n as _}from"./gbgcwRX-.chunk.js";import{t as v}from"./D7tastET2.chunk.js";import{t as y}from"./BfT-O7-i2.chunk.js";l();var b=p(),x=o(),S=`shared.videoGuidanceClassroomGuidePopup`,C=350;function w(e){function n(t){return e.curriculums.updateCurriculum(t,{shouldLog:!0,video:e.video,locationContext:s.CurriculumGuidancePopup})}return(0,x.jsx)(h,{closePopup:e.onClickClose,showLoadingSpinner:e.isLoading,title:t.getPhrase(S,`curriculumLinks`),size:`lg`,children:!e.isLoading&&(0,x.jsxs)(x.Fragment,{children:[(0,x.jsxs)(b.Scrollbars,{autoHeightMax:C,autoHeightMin:C,autoHeight:!0,className:`pb-3`,renderThumbVertical:({style:e,...t})=>(0,x.jsx)(`div`,{...t,style:{...e,borderRadius:`inherit`,backgroundColor:`rgba(0, 0, 0, 0.2)`,zIndex:5},className:`thumb-vertical`}),children:[(0,x.jsx)(y,{availableCurriculums:e.curriculums.availableCurriculums,onChangeCurriculum:n,selectedCurriculum:e.curriculums.preferredCurriculum}),(0,x.jsx)(`div`,{className:`pb-3`,children:(0,x.jsx)(_,{curriculumLinks:e.curriculums.curriculumLinks,onChangeCurriculum:n,hasCompleted:e.curriculums.hasCompleted,mappedCurriculums:e.curriculums.mappedCurriculums,isFetching:e.curriculums.isFetching,getCodeAppLink:e.getCodeAppLink,locationContext:s.CurriculumGuidancePopup})})]}),(0,x.jsxs)(m,{children:[(0,x.jsx)(m.Cancel,{onClick:e.onClickClose,text:t.getPhrase(S,`close`)}),(0,x.jsx)(m.Submit,{text:t.getPhrase(S,`viewVideo`),variant:`dark`,onClick:e.onClickViewVideo})]})]})})}function T(t){let o=d(g.video(t.id)),l=v(t.id);function p(){c.logUserAction({id:o.data.id,name:o.data.name},{entity:a.Video,location:s.CurriculumGuidancePopup,actionType:n.Click,descriptor:r.Close}),t.closePopup()}function m(){c.logUserAction({id:o.data.id,name:o.data.name},{entity:a.Video,location:s.CurriculumGuidancePopup,actionType:n.Click,descriptor:r.ViewVideo}),e.trigger({application:u.VIDEOS,action:f.Videos.PLAY_VIDEO,args:[o.data.id,i.slugify(o.data.name)]}),t.closePopup()}return(0,x.jsx)(w,{isLoading:!o.hasCompleted,video:o.data,curriculums:l,onClickClose:p,onClickViewVideo:m,closePopup:t.closePopup})}export{T as VideoGuidanceClassroomGuideView};
|
|
2
|
+
//# sourceMappingURL=Ce1TZZdV2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Ce1TZZdV2.chunk.js","names":[],"sources":["../../../../libs/shared/src/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup.tsx","../../src/apps/videos/views/video-guidance-classroom-guide/VideoGuidanceClassroomGuideView.tsx"],"sourcesContent":["import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { CurriculumDropdown } from 'libs/shared/components/curriculum-links/CurriculumDropdown';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Clip, CurriculumData, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.videoGuidanceClassroomGuidePopup';\n\nconst MIN_MAX_HEIGHT = 350;\n\ninterface VideoGuidanceClassroomGuidePopupProps extends PopupViewProps {\n isLoading: boolean;\n video: Video | Clip;\n onClickClose: () => void;\n onClickViewVideo: () => void;\n curriculums: CurriculumData;\n getCodeAppLink?: (query: string, isCode: boolean) => Core.AppLink;\n}\n\nexport function VideoGuidanceClassroomGuidePopup(props: VideoGuidanceClassroomGuidePopupProps): JSX.Element {\n function onChangeCurriculum(curriculumId: string): Promise<void> {\n return props.curriculums.updateCurriculum(curriculumId, {\n shouldLog: true,\n video: props.video,\n locationContext: LocationContext.CurriculumGuidancePopup\n });\n }\n\n return (\n <Popup\n closePopup={props.onClickClose}\n showLoadingSpinner={props.isLoading}\n title={LanguageService.getPhrase(namespace, 'curriculumLinks')}\n size='lg'\n >\n {!props.isLoading && (\n <>\n <Scrollbars\n autoHeightMax={MIN_MAX_HEIGHT}\n autoHeightMin={MIN_MAX_HEIGHT}\n autoHeight\n className='pb-3'\n // move vertical scrollbar to the top\n renderThumbVertical={({ style, ...props }) => <div {...props} style={{ ...style, borderRadius: 'inherit', backgroundColor: 'rgba(0, 0, 0, 0.2)', zIndex: 5 }} className='thumb-vertical'/>}\n >\n <CurriculumDropdown\n availableCurriculums={props.curriculums.availableCurriculums}\n onChangeCurriculum={onChangeCurriculum}\n selectedCurriculum={props.curriculums.preferredCurriculum}\n />\n\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={props.curriculums.curriculumLinks}\n onChangeCurriculum={onChangeCurriculum}\n hasCompleted={props.curriculums.hasCompleted}\n mappedCurriculums={props.curriculums.mappedCurriculums}\n isFetching={props.curriculums.isFetching}\n getCodeAppLink={props.getCodeAppLink}\n locationContext={LocationContext.CurriculumGuidancePopup}\n />\n </div>\n </Scrollbars>\n\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.onClickClose}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n <PopupButtons.Submit\n text={LanguageService.getPhrase(namespace, 'viewVideo')}\n variant='dark'\n onClick={props.onClickViewVideo}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoGuidanceDescriptor } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceClassroomGuidePopup } from 'libs/shared/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, PopupViewProps, Video } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\n\nimport { useCurriculums } from 'apps/videos/hooks/useCurriculums';\n\ninterface VideoGuidanceClassroomGuideViewProps extends PopupViewProps {\n id: string;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoGuidanceClassroomGuideView(props: VideoGuidanceClassroomGuideViewProps): JSX.Element {\n const video = Flight.useBasicFetch<Clip | Video>(VideoRequests.video(props.id));\n const curriculums = useCurriculums(props.id);\n\n function onClickClose(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n location: LocationContext.CurriculumGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.Close\n });\n\n props.closePopup();\n }\n\n function onClickViewVideo(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: EntityType.Video,\n location: LocationContext.CurriculumGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.ViewVideo\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n }\n\n return (\n <VideoGuidanceClassroomGuidePopup\n isLoading={!video.hasCompleted}\n video={video.data}\n curriculums={curriculums}\n onClickClose={onClickClose}\n onClickViewVideo={onClickViewVideo}\n closePopup={props.closePopup}\n />\n );\n}\n"],"mappings":"0gBAcM,EAAY,0CAEZ,EAAiB,IAWvB,SAAgB,EAAiC,EAA2D,CAC1G,SAAS,EAAmB,EAAqC,CAC/D,OAAO,EAAM,YAAY,iBAAiB,EAAc,CACtD,UAAW,GACX,MAAO,EAAM,MACb,gBAAiB,EAAgB,wBAClC,CAAC,CAGJ,OACE,EAAA,EAAA,KAAC,EAAD,CACE,WAAY,EAAM,aAClB,mBAAoB,EAAM,UAC1B,MAAO,EAAgB,UAAU,EAAW,kBAAkB,CAC9D,KAAK,cAEJ,CAAC,EAAM,YACN,EAAA,EAAA,MAAA,EAAA,SAAA,CAAA,SAAA,EACE,EAAA,EAAA,MAAC,EAAA,WAAD,CACE,cAAe,EACf,cAAe,EACf,WAAA,GACA,UAAU,OAEV,qBAAsB,CAAE,QAAO,GAAG,MAAY,EAAA,EAAA,KAAC,MAAD,CAAK,GAAI,EAAO,MAAO,CAAE,GAAG,EAAO,aAAc,UAAW,gBAAiB,qBAAsB,OAAQ,EAAG,CAAE,UAAU,iBAAkB,CAAA,UAN5L,EAQE,EAAA,EAAA,KAAC,EAAD,CACE,qBAAsB,EAAM,YAAY,qBACpB,qBACpB,mBAAoB,EAAM,YAAY,oBACtC,CAAA,EAEF,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iBACb,EAAA,EAAA,KAAC,EAAD,CACE,gBAAiB,EAAM,YAAY,gBACf,qBACpB,aAAc,EAAM,YAAY,aAChC,kBAAmB,EAAM,YAAY,kBACrC,WAAY,EAAM,YAAY,WAC9B,eAAgB,EAAM,eACtB,gBAAiB,EAAgB,wBACjC,CAAA,CACE,CAAA,CACK,IAEb,EAAA,EAAA,MAAC,EAAD,CAAA,SAAA,EACE,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,QAAS,EAAM,aACf,KAAM,EAAgB,UAAU,EAAW,QAAQ,CACnD,CAAA,EACF,EAAA,EAAA,KAAC,EAAa,OAAd,CACE,KAAM,EAAgB,UAAU,EAAW,YAAY,CACvD,QAAQ,OACR,QAAS,EAAM,iBACf,CAAA,CACW,CAAA,CAAA,CACd,CAAA,CAAA,CAEC,CAAA,CC9DZ,SAAgB,EAAgC,EAA0D,CACxG,IAAM,EAAQ,EAAmC,EAAc,MAAM,EAAM,GAAG,CAAC,CACzE,EAAc,EAAe,EAAM,GAAG,CAE5C,SAAS,GAAqB,CAC5B,EAAgB,cAAc,CAC5B,GAAI,EAAM,KAAK,GACf,KAAM,EAAM,KAAK,KAClB,CAAE,CACD,OAAQ,EAAW,MACnB,SAAU,EAAgB,wBAC1B,WAAY,EAAW,MACvB,WAAY,EAAwB,MACrC,CAAC,CAEF,EAAM,YAAY,CAGpB,SAAS,GAAyB,CAChC,EAAgB,cAAc,CAC5B,GAAI,EAAM,KAAK,GACf,KAAM,EAAM,KAAK,KAClB,CAAE,CACD,OAAQ,EAAW,MACnB,SAAU,EAAgB,wBAC1B,WAAY,EAAW,MACvB,WAAY,EAAwB,UACrC,CAAC,CAEF,EAAmB,QAAQ,CACzB,YAAa,EAAY,OACzB,OAAQ,EAAQ,OAAO,WACvB,KAAM,CAAE,EAAM,KAAK,GAAI,EAAW,QAAQ,EAAM,KAAK,KAAK,CAAE,CAC7D,CAAC,CAEF,EAAM,YAAY,CAGpB,OACE,EAAA,EAAA,KAAC,EAAD,CACE,UAAW,CAAC,EAAM,aAClB,MAAO,EAAM,KACA,cACC,eACI,mBAClB,WAAY,EAAM,WAClB,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{v as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,l as r,lt as i,m as a,ut as o}from"./Dun43GrB.chunk.js";import{t as s}from"./B-OL6Vs7.chunk.js";import{t as c}from"./DeldjYRc.chunk.js";import{t as l}from"./CoualKDX.chunk.js";import{t as u}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{v as e}from"./Dp9qJj1C.chunk.js";import{t}from"./ImQRQGZr.chunk.js";import{C as n,l as r,lt as i,m as a,ut as o}from"./Dun43GrB.chunk.js";import{t as s}from"./B-OL6Vs7.chunk.js";import{t as c}from"./DeldjYRc.chunk.js";import{t as l}from"./CoualKDX.chunk.js";import{t as u}from"./CCoZQmgX.chunk.js";var d={pillTab:`_pillTab_1wdcp_2`};o();var f=i(),p=`streamable.header`;function m(i){let o=[{name:t.getPhrase(p,`heading`),appLink:i.appLinks?.discover,active:i.active===`discover`,analyticsData:{name:t.getPhrase(p,`heading`),url:e.getHref(i.appLinks?.discover)},analyticsOptions:{actionType:n.Click,entity:r.Url,location:a.MagicTabs}}];return i.appLinks?.calendar&&o.push({name:t.getPhrase(p,`livestreams`),appLink:i.appLinks?.calendar,active:i.active===`calendar`,analyticsData:{name:t.getPhrase(p,`livestreams`),url:e.getHref(i.appLinks?.calendar)},analyticsOptions:{actionType:n.Click,entity:r.Url,location:a.MagicTabs}}),o.push({name:t.getPhrase(p,`partners`),appLink:i.appLinks?.partners,active:i.active===`partners`,analyticsData:{name:t.getPhrase(p,`partners`),url:e.getHref(i.appLinks?.partners)},analyticsOptions:{actionType:n.Click,entity:r.Url,location:a.MagicTabs}}),(0,f.jsx)(`div`,{className:`py-3 text-center`,children:(0,f.jsx)(u,{tabs:o,className:d.pillTab})})}function h(e){return{...l,classification:t=>l.classification(t,e),classificationDirectory:()=>l.classificationDirectory(e),series:()=>null,latestReleases:()=>null,classificationLatestReleases:()=>null,playlist:()=>null,watchHistory:()=>null,widgetWizard:()=>null,partner:()=>null,partnerHome:()=>null}}function g(){return{discover:{application:s.DASHBOARD,action:c.Dashboard.HOME},calendar:{application:s.CALENDAR,action:c.Calendar.CALENDAR},partners:{application:s.DASHBOARD,action:c.Dashboard.CONTENT_PARTNERS}}}export{g as n,m as r,h as t};
|
|
2
|
+
//# sourceMappingURL=Ces-KTwe.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"Ces-KTwe.chunk.js","names":[],"sources":["../../../../libs/shared/src/apps/streamable-learning/components/header/streamable-header.module.scss","../../../../libs/shared/src/apps/streamable-learning/components/header/StreamableHeader.tsx","../../src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts"],"sourcesContent":["@import '~styles/utils/include-media';\n:local{\n .pillTab {\n @include media('<=md') {\n li {\n min-width: 5rem;\n }\n }\n\n }\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport styles from './streamable-header.module.scss';\n\nconst namespace = 'streamable.header';\n\nexport interface StreamableHeaderAppLinks {\n discover: Core.AppLink;\n calendar?: Core.AppLink;\n partners: Core.AppLink;\n}\n\ninterface StreamableHeaderProps {\n appLinks?: StreamableHeaderAppLinks;\n active: keyof StreamableHeaderAppLinks;\n}\n\nexport function StreamableHeader(props: StreamableHeaderProps): JSX.Element {\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'heading'),\n appLink: props.appLinks?.discover,\n active: props.active === 'discover',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'heading'),\n url: AppLinkHelper.getHref(props.appLinks?.discover)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.appLinks?.calendar)\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'livestreams'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'livestreams'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'partners'),\n appLink: props.appLinks?.partners,\n active: props.active === 'partners',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'partners'),\n url: AppLinkHelper.getHref(props.appLinks?.partners)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n\n return (\n <div className='py-3 text-center'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { StreamableDiscoverDashboardProps } from 'libs/shared/apps/streamable-learning/components/dashboard/StreamableDiscoverDashboard';\nimport { StreamableHeaderAppLinks } from 'libs/shared/apps/streamable-learning/components/header/StreamableHeader';\n\nimport { Actions } from 'shared/constants/StreamableActions';\nimport { AppChannels } from 'shared/constants/StreamableRadioChannels';\nimport { StreamableAppLinks } from 'shared/utils/StreamableAppLinks';\n\nexport function getDiscoverWidgetAppLinks(params?: HashObject): StreamableDiscoverDashboardProps['widgetAppLinks'] {\n return {\n ...StreamableAppLinks,\n classification: classification => StreamableAppLinks.classification(classification, params),\n classificationDirectory: () => StreamableAppLinks.classificationDirectory(params),\n\n // TODO: Find a nice way around having to pass these in\n series: () => null,\n latestReleases: () => null,\n classificationLatestReleases: () => null,\n playlist: () => null,\n watchHistory: () => null,\n widgetWizard: () => null,\n partner: () => null,\n partnerHome: () => null\n };\n}\n\nexport function getStreamableHeaderAppLinks(): StreamableHeaderAppLinks {\n return {\n discover: { application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME },\n calendar: { application: AppChannels.CALENDAR, action: Actions.Calendar.CALENDAR },\n partners: { application: AppChannels.DASHBOARD, action: Actions.Dashboard.CONTENT_PARTNERS }\n };\n}\n"],"mappings":"kWCYM,EAAY,oBAalB,SAAgB,EAAiB,EAA2C,CAC1E,IAAM,EAAO,CAAC,CACZ,KAAM,EAAgB,UAAU,EAAW,UAAU,CACrD,QAAS,EAAM,UAAU,SACzB,OAAQ,EAAM,SAAW,WACzB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,UAAU,CACrD,IAAK,EAAc,QAAQ,EAAM,UAAU,SAAS,CACrD,CACD,iBAAkB,CAChB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CACF,CAAC,CAiCF,OA/BI,EAAM,UAAU,UAClB,EAAK,KAAK,CACR,KAAM,EAAgB,UAAU,EAAW,cAAc,CACzD,QAAS,EAAM,UAAU,SACzB,OAAQ,EAAM,SAAW,WACzB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,cAAc,CACzD,IAAK,EAAc,QAAQ,EAAM,UAAU,SAAS,CACrD,CACD,iBAAkB,CAChB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CACF,CAAC,CAEJ,EAAK,KAAK,CACR,KAAM,EAAgB,UAAU,EAAW,WAAW,CACtD,QAAS,EAAM,UAAU,SACzB,OAAQ,EAAM,SAAW,WACzB,cAAe,CACb,KAAM,EAAgB,UAAU,EAAW,WAAW,CACtD,IAAK,EAAc,QAAQ,EAAM,UAAU,SAAS,CACrD,CACD,iBAAkB,CAChB,WAAY,EAAW,MACvB,OAAQ,EAAW,IACnB,SAAU,EAAgB,UAC3B,CACF,CAAC,EAGA,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,6BACb,EAAA,EAAA,KAAC,EAAD,CACQ,OACN,UAAW,EAAO,QAClB,CAAA,CACE,CAAA,CCrEV,SAAgB,EAA0B,EAAyE,CACjH,MAAO,CACL,GAAG,EACH,eAAgB,GAAkB,EAAmB,eAAe,EAAgB,EAAO,CAC3F,4BAA+B,EAAmB,wBAAwB,EAAO,CAGjF,WAAc,KACd,mBAAsB,KACtB,iCAAoC,KACpC,aAAgB,KAChB,iBAAoB,KACpB,iBAAoB,KACpB,YAAe,KACf,gBAAmB,KACpB,CAGH,SAAgB,GAAwD,CACtE,MAAO,CACL,SAAU,CAAE,YAAa,EAAY,UAAW,OAAQ,EAAQ,UAAU,KAAM,CAChF,SAAU,CAAE,YAAa,EAAY,SAAU,OAAQ,EAAQ,SAAS,SAAU,CAClF,SAAU,CAAE,YAAa,EAAY,UAAW,OAAQ,EAAQ,UAAU,iBAAkB,CAC7F"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./Dp9qJj1C.chunk.js";import{v as e}from"./BJvPfCvt.chunk.js";import{dt as t,lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./B7tm2CBz.chunk.js";import{z as a}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./Dp9qJj1C.chunk.js";import{v as e}from"./BJvPfCvt.chunk.js";import{dt as t,lt as n,ut as r}from"./Dun43GrB.chunk.js";import{t as i}from"./B7tm2CBz.chunk.js";import{z as a}from"./app-BIigh9wv.js";r();var o=n();function s(n){let r=n.buttons.map(t=>({buttonText:t.text,className:t.className,onClick:()=>{t.success?e.isFunction(n.onDone)&&n.onDone():e.isFunction(n.onFail)&&n.onFail(),n.closePopup()},type:t.type,close:t.close}));return r=i.sortBy(r,`close`),(0,o.jsxs)(a,{title:n.title,closePopup:n.closePopup,children:[(0,o.jsx)(`p`,{dangerouslySetInnerHTML:{__html:t.sanitize(n.text)}}),(0,o.jsx)(`div`,{className:`d-flex justify-content-end border-top pt-3 px-3 mx-n3`,children:r.map((e,t)=>(0,o.jsx)(`button`,{className:e.className,onClick:e.onClick,type:e.type,children:e.buttonText},t))})]})}export{s as DialogView};
|
|
2
|
+
//# sourceMappingURL=CkYqp83j.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CkYqp83j.chunk.js","names":[],"sources":["../../../../libs/shared/src/views/dialog/DialogView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { DialogOptions, PopupViewProps } from 'libs/shared/interfaces';\n\ninterface DialogViewProps extends DialogOptions {\n onDone?: () => void;\n onFail?: () => void;\n}\n\ntype PropTypes = React.PropsWithChildren<DialogViewProps & PopupViewProps>;\n\nexport function DialogView(props: PropTypes): React.ReactElement {\n let buttons = props.buttons.map(b => {\n const onClick = () => {\n if (b.success)\n FunctionHelper.isFunction(props.onDone) && props.onDone();\n else\n FunctionHelper.isFunction(props.onFail) && props.onFail();\n\n props.closePopup();\n };\n\n return {\n buttonText: b.text,\n className: b.className,\n onClick,\n type: b.type,\n close: b.close\n };\n });\n\n /**\n * The dismiss action should always be on the left side of the popup\n */\n buttons = ArrayHelper.sortBy(buttons, 'close');\n\n return (\n <Popup title={props.title} closePopup={props.closePopup}>\n <p dangerouslySetInnerHTML={{ __html: TextHelper.sanitize(props.text) }} />\n <div className='d-flex justify-content-end border-top pt-3 px-3 mx-n3'>\n {buttons.map((b, idx) => (\n <button key={idx} className={b.className} onClick={b.onClick} type={b.type}>\n {b.buttonText}\n </button>\n ))}\n </div>\n </Popup>\n );\n}\n"],"mappings":"yNAgBA,SAAgB,EAAW,EAAsC,CAC/D,IAAI,EAAU,EAAM,QAAQ,IAAI,IAUvB,CACL,WAAY,EAAE,KACd,UAAW,EAAE,UACb,YAZoB,CAChB,EAAE,QACJ,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAEzD,EAAe,WAAW,EAAM,OAAO,EAAI,EAAM,QAAQ,CAE3D,EAAM,YAAY,EAOlB,KAAM,EAAE,KACR,MAAO,EAAE,MACV,EACD,CAOF,MAFA,GAAU,EAAY,OAAO,EAAS,QAAQ,EAG5C,EAAA,EAAA,MAAC,EAAD,CAAO,MAAO,EAAM,MAAO,WAAY,EAAM,oBAA7C,EACE,EAAA,EAAA,KAAC,IAAD,CAAG,wBAAyB,CAAE,OAAQ,EAAW,SAAS,EAAM,KAAK,CAAE,CAAI,CAAA,EAC3E,EAAA,EAAA,KAAC,MAAD,CAAK,UAAU,iEACZ,EAAQ,KAAK,EAAG,KACf,EAAA,EAAA,KAAC,SAAD,CAAkB,UAAW,EAAE,UAAW,QAAS,EAAE,QAAS,KAAM,EAAE,cACnE,EAAE,WACI,CAFI,EAEJ,CACT,CACE,CAAA,CACA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{gt as e}from"./Dp9qJj1C.chunk.js";import{v as t}from"./BJvPfCvt.chunk.js";import{M as n,lt as r,n as i,ut as a}from"./Dun43GrB.chunk.js";import{t as o}from"./B7tm2CBz.chunk.js";import{t as s}from"./B8R4YVaF2.chunk.js";import{i as c,w as l}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{gt as e}from"./Dp9qJj1C.chunk.js";import{v as t}from"./BJvPfCvt.chunk.js";import{M as n,lt as r,n as i,ut as a}from"./Dun43GrB.chunk.js";import{t as o}from"./B7tm2CBz.chunk.js";import{t as s}from"./B8R4YVaF2.chunk.js";import{i as c,w as l}from"./app-BIigh9wv.js";import{n as u,t as d}from"./B-6uVsUw2.chunk.js";import{n as f}from"./Bt57Tmef2.chunk.js";import{a as p,i as m,n as h,r as g,t as _}from"./DK3xia1t.chunk.js";import{t as v}from"./B7iwtSij.chunk.js";import{t as y}from"./CE7XVl4t.chunk.js";var b=e(a());function x(e,t,n=[]){let r,i=()=>{e(),window.clearTimeout(r),r=window.setTimeout(t,100)};b.useEffect(()=>(window.addEventListener(`resize`,t?i:e),()=>window.removeEventListener(`resize`,t?i:e)),[...n])}var S=(e,t,n)=>()=>{e.container.current&&(e.container.current.style.transition=``),t({type:_.Resize,payload:{elementRefs:e,mediaQuery:n}})},C=e=>()=>{e.current&&(e.current.style.transition=`transform .4s ease-in-out`)},w=(e,t,n,r,i)=>a=>{let o=a.clientX,s=r;s||(s={...t,initialMouseX:o},i(s),e.current.style.transition=``),n({type:_.Drag,payload:{widgetSnapshot:s,currentMouseX:o}})},T=(e,t)=>()=>{e.current.style.transition=`transform .4s ease-in-out`,t(null)};function E(e){return e===l.XS?200:e===l.SM||e===l.MD?350:500}var D={offset:0,containerLeftPosition:null,containerRightPosition:null,firstElementPosition:null,lastElementPosition:null,hideLeftButton:!0,hideRightButton:!0,maxSlideDistance:0,leftOffsetLimit:null},O=e=>{let{container:t,lastElement:n}=e.elementRefs;if(!t?.current||!n?.current)return D;let r=t.current.getBoundingClientRect(),i=r.left,a=r.right,o=i,s=n.current.getBoundingClientRect().right,c=a-s;return{...D,containerLeftPosition:i,containerRightPosition:a,firstElementPosition:o,lastElementPosition:s,hideRightButton:s<a,leftOffsetLimit:c,maxSlideDistance:E(e.mediaQuery)}},k=e=>({...O({...e,...e.elementRefs}),maxSlideDistance:E(e.mediaQuery)}),A=e=>{let{firstElementPosition:t,lastElementPosition:n,maxSlideDistance:r,offset:i,containerRightPosition:a}=e,o=n-a>=r?r:n-a;return{firstElementPosition:t-o,lastElementPosition:n-o,offset:i-o,hideRightButton:n-o===a,hideLeftButton:!1}},j=e=>{let{containerLeftPosition:t,firstElementPosition:n,lastElementPosition:r,maxSlideDistance:i,offset:a}=e,o=n+i<=t,s=o?i:Math.abs(a);return{firstElementPosition:n+s,lastElementPosition:r+s,offset:a+s,hideLeftButton:!o||n+s===t,hideRightButton:!1}},M=(e,t)=>{let{widgetSnapshot:n,currentMouseX:r}=t;if(n.hideLeftButton&&n.hideRightButton)return{};let i=n.initialMouseX-r,a=n.offset-i,o=n.firstElementPosition-i,s=n.lastElementPosition-i,c=!1,l=!1;return o>e.containerLeftPosition&&(a=0,o=e.containerLeftPosition,s=e.lastElementPosition,c=!0),s<=e.containerRightPosition&&(a=e.leftOffsetLimit,o=e.containerLeftPosition-Math.abs(e.leftOffsetLimit),s=n.containerRightPosition,l=!0),{offset:a,firstElementPosition:o,lastElementPosition:s,hideLeftButton:c,hideRightButton:l}};function N(e,t){switch(t.type){case _.Init:return{...e,...O(t.payload)};case _.Resize:return{...e,...k(t.payload)};case _.Next:return{...e,...A(e)};case _.Previous:return{...e,...j(e)};case _.Drag:return{...e,...M(e,t.payload)};default:return e}}var P={itemSpacing:`_itemSpacing_1j5ri_1`,header:`_header_1j5ri_4`,mobileScroll:`_mobileScroll_1j5ri_8`,leftGradient:`_leftGradient_1j5ri_16`,leftGradientNoPadding:`_leftGradientNoPadding_1j5ri_19`,leftButton:`_leftButton_1j5ri_22`,leftButtonNoPadding:`_leftButtonNoPadding_1j5ri_25`,rightGradient:`_rightGradient_1j5ri_28`,rightGradientNoPadding:`_rightGradientNoPadding_1j5ri_31`,rightButton:`_rightButton_1j5ri_34`,rightButtonNoPadding:`_rightButtonNoPadding_1j5ri_37`},F=r();I.defaultProps={heading:``,description:``,childComponentProps:{}};function I(e){let{childComponent:r,staticChildren:a,getWidgetItemAnalyticsData:l=()=>{}}=e,[y,E]=b.useReducer(N,D),[O,k]=b.useState(null),A={container:b.useRef(null),firstElement:b.useRef(null),lastElement:b.useRef(null)},j=v(),M=c.isTabletOrMobile(),{dynamicAttributes:I,focusNext:R,focusPrev:z,onFocusWidget:B,onBlurWidget:V}=m({type:`dynamic`,state:y,containerRef:A.container,mediaQuery:j});x(S(A,E,j),C(A.container),[j]);let{ref:H,inView:U}=f({prevent:!e.lazyLoad}),W=e.collection;!e.collection&&t.isFunction(e.fetch)&&(W=e.fetch(U).data),b.useEffect(()=>{!W||n.isEmpty(W)||E({type:_.Init,payload:{elementRefs:A,mediaQuery:j}})},[W]);function G(){if(!W)return;let t=a?.filter(e=>e.position===`start`)??[],n=a?.filter(e=>e.position===`end`)??[],i=W.map((i,a)=>{let c;i===o.first(W)&&t?.length&&(c=A.firstElement),i===o.last(W)&&!n?.length&&(c=A.lastElement);let u=a+1===W.length;return(0,F.jsx)(`li`,{id:i.id,ref:c,onFocus:()=>B(a),onBlur:()=>V(),className:`${P.itemSpacing} ${e.childClassName||``} ${u&&M?`pe-4`:``}`,...I[i.id],children:(0,F.jsx)(r,{getChildAppLink:e.getChildAppLink,data:i,getSubtitle:e.getSubtitle,analyticsData:{itemIndex:a,...e.analyticsData,...l(i)},analyticsOptions:{...e?.analyticsOptions,...s.getSliderItemAnalyticsOptions()},...e.childComponentProps})},i.id)});return t.length&&(i=[...t.map((t,n)=>{let r=t.component;return(0,F.jsx)(`li`,{ref:n===0?A.firstElement:null,className:`${P.itemSpacing} ${e.childClassName||``}`,children:(0,F.jsx)(r,{})},`first-widget-component:${n}`)}),...i]),n.length&&(i=[...i,...n.map((t,r)=>{let i=t.component;return(0,F.jsx)(`li`,{ref:r===n.length-1?A.lastElement:null,className:`${P.itemSpacing} ${e.childClassName||``}`,children:(0,F.jsx)(i,{})},`end-widget-component:${r}`)})]),(0,F.jsx)(F.Fragment,{children:i})}let K=b.useMemo(G,[W,I,y.offset,j,...e.widgetDataDeps||[]]);if(W&&!W.length&&!a?.length)return(0,F.jsx)(F.Fragment,{});if(!W||n.isEmpty(W))return(0,F.jsx)(`div`,{ref:H,children:(0,F.jsx)(L,{partialLoadingComponent:e.partialLoadingComponent,partialLoadingOptions:e.partialLoadingOptions})});let q=t=>({...e.analyticsData,id:e.id,name:e.heading,direction:t===_.Next?`right`:`left`}),J=M||e.hideButtons;return(0,F.jsxs)(`div`,{className:`${e.noNegativePadding?``:`mx-n4`}`,children:[(0,F.jsx)(`div`,{className:`px-4 ${P.header}`,children:(0,F.jsx)(p,{name:e.heading,description:e.description,appLink:e.headingAppLink,showSeeMoreLink:!!e.headingAppLink})}),(0,F.jsx)(`div`,{className:`position-relative`,children:(0,F.jsx)(`div`,{className:`${e.noNegativePadding?``:`px-4`} py-3 my-n3 position-relative ${M?P.mobileScroll:`overflow-hidden-x`}`,children:(0,F.jsxs)(`div`,{className:`position-relative ${e.hideButtons?`overflow-hidden-x`:``}`,children:[!J&&(0,F.jsx)(d,{direction:u.Left,onClick:()=>{z(),E({type:_.Previous}),i.logUserAction(q(_.Previous),s.getSliderAnalyticsOptions())},leftButtonClassName:`${P.leftButton} ${e.noNegativePadding?P.leftButtonNoPadding:``}`,leftGradientClassName:`${P.leftGradient} ${e.noNegativePadding?P.leftGradientNoPadding:``}`,hide:y.hideLeftButton,useGradientBackdrop:!0}),(0,F.jsx)(h,{position:y.offset,positionType:g.Pixels,onDrag:w(A.container,y,E,O,k),onDragEnd:T(A.container,k),ref:A.container,children:K}),!J&&(0,F.jsx)(d,{direction:u.Right,onClick:()=>{R(),E({type:_.Next}),i.logUserAction(q(_.Next),s.getSliderAnalyticsOptions())},hide:y.hideRightButton,rightButtonClassName:`${P.rightButton} ${e.noNegativePadding?P.rightButtonNoPadding:``}`,rightGradientClassName:`${P.rightGradient} ${e.noNegativePadding?P.rightGradientNoPadding:``}`,useGradientBackdrop:!0})]})})})]})}var L=e=>{let{partialLoadingComponent:t,partialLoadingOptions:n}=e;return(0,F.jsx)(`div`,{className:`d-flex flex-nowrap overflow-hidden`,children:y.getPartialLoadingItems(n).map((e,n)=>(0,F.jsx)(t,{},n))})};export{L as n,x as r,I as t};
|
|
2
|
+
//# sourceMappingURL=CrCAJmt6.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DvL3J2BU.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseResizeListener.ts","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetEventHandlers.ts","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetReducer.tsx","../../../../libs/shared/src/components/widgets/dynamic-widget/dynamic-widget.module.scss","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidget.tsx"],"sourcesContent":["import * as React from 'react';\n\n/**\n * Hook function for listening to scroll events\n * @param onResize - gets called on resize.\n * @param onResizeEnd (optional) - gets called 100ms after the last resize event. Timer restarts everytime the callback\n * runs so that endCallback only fires after a stretch of resize events.\n * @param dependencies - values from the component (e.g. state, props and functions) that are used \n * inside the effect hook.\n */\nexport function useResizeListener(onResize: () => void, onResizeEnd?: () => void, dependencies: any[] = []): void {\n let resizeTimeout: number;\n\n const onResizeModified = () => {\n onResize();\n\n window.clearTimeout(resizeTimeout);\n resizeTimeout = window.setTimeout(onResizeEnd, 100);\n };\n\n React.useEffect(() => {\n window.addEventListener('resize', onResizeEnd ? onResizeModified : onResize);\n return () => window.removeEventListener('resize', onResizeEnd ? onResizeModified : onResize);\n }, [...dependencies]);\n}\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nimport { DynamicWidgetState } from './DynamicWidgetReducer';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\n/**\n * Resize events\n */\nexport const getResizeHandler = (\n elementRefs: SlidingListRefs,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n mediaQuery: MediaQueryStrings\n) => () => {\n if (elementRefs.container.current)\n elementRefs.container.current.style.transition = '';\n\n dispatch({\n type: WidgetInteraction.Resize,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n};\n\nexport const getResizeEndHandler = (containerRef: React.MutableRefObject<HTMLUListElement>) => () => {\n if (containerRef.current)\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n};\n\nexport const getDragHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n widgetState: DynamicWidgetState,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n widgetSnapshot: WidgetSnapshot,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => (event: React.DragEvent<HTMLUListElement>): void => {\n const mouseX = event.clientX;\n\n let snapshot = widgetSnapshot;\n\n if (!snapshot) {\n snapshot = { ...widgetState, initialMouseX: mouseX };\n setWidgetSnapshot(snapshot);\n containerRef.current.style.transition = '';\n }\n\n dispatch({\n type: WidgetInteraction.Drag,\n payload: {\n widgetSnapshot: snapshot,\n currentMouseX: mouseX\n }\n });\n};\n\nexport const getDragEndHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => () => {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setWidgetSnapshot(null);\n};\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nexport interface DynamicWidgetState {\n /**\n * X-position argument for `translate3d()` to determine where the slider is positioned.\n */\n offset: number;\n\n /**\n * Left position of the slider container.\n * Set on `Init`, and updated on `Resize`.\n * Used for calculations on `Previous`, or for dragging to the right.\n */\n containerLeftPosition: number;\n\n /**\n * Right position of the slider container.\n * Set on Init, and updated on Resize.\n * Used for calculations on `Next`, or for dragging to the left.\n */\n containerRightPosition: number;\n\n /**\n * The position of the left edge of the very first element in the slider list.\n * Initially this will always be equal to `containerLeftPosition`.\n */\n firstElementPosition: number;\n\n /**\n * The position of the right edge of the very last element in the slider list.\n */\n lastElementPosition: number;\n\n /**\n * True when `firstElementPosition === containerLeftPosition`.\n */\n hideLeftButton: boolean;\n\n /**\n * True when `lastElementPositon === containerRightPosition`.\n */\n hideRightButton: boolean;\n\n /**\n * When clicking left or right, this number is the max distance in pixels that the slider.\n * will move.\n * Default 300.\n * Can only be set once on `Init` action.\n */\n maxSlideDistance: number;\n\n /**\n * This is calculated on `Init`, and is the lowest number the `offset` state can ever be.\n * This is needed for the `Drag` event, as the `Drag` event can only calculate whole numbers.\n * 99% of the time, the leftOffsetLimit is a very specific decimal number, so we calculate it\n * on `Init` and reference it on `Drag` events when necessary.\n */\n leftOffsetLimit: number;\n}\n\nfunction getMaxSlideDistance(mediaQuery: MediaQueryStrings): number {\n if (mediaQuery === MediaQueryStrings.XS)\n return 200;\n\n if (mediaQuery === MediaQueryStrings.SM || mediaQuery === MediaQueryStrings.MD)\n return 350;\n\n return 500;\n}\n\n/**\n * `null` values are initialized in the `Init` action. This is dispatched\n * later, because it uses JQuery elements that aren't immediately available\n * when `useReducer` is called.\n */\nexport const initialSliderState: DynamicWidgetState = {\n offset: 0,\n containerLeftPosition: null,\n containerRightPosition: null,\n firstElementPosition: null,\n lastElementPosition: null,\n hideLeftButton: true,\n hideRightButton: true,\n maxSlideDistance: 0,\n leftOffsetLimit: null\n};\n\ninterface InitPayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onInit = (payload: InitPayload): DynamicWidgetState => {\n const { container, lastElement } = payload.elementRefs;\n\n if (!container?.current || !lastElement?.current)\n return initialSliderState;\n\n const containerRect = container.current.getBoundingClientRect();\n const containerLeftPosition = containerRect.left;\n const containerRightPosition = containerRect.right;\n\n const firstElementPosition = containerLeftPosition;\n const lastElementPosition = lastElement.current.getBoundingClientRect().right;\n const leftOffsetLimit = containerRightPosition - lastElementPosition;\n\n return {\n ...initialSliderState,\n containerLeftPosition,\n containerRightPosition,\n firstElementPosition,\n lastElementPosition,\n hideRightButton: lastElementPosition < containerRightPosition,\n leftOffsetLimit,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\ninterface ResizePayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onResize = (payload: ResizePayload): DynamicWidgetState => {\n const initialState = onInit({\n ...payload,\n ...payload.elementRefs\n });\n\n return {\n ...initialState,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\nconst onNext = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { firstElementPosition, lastElementPosition, maxSlideDistance, offset, containerRightPosition } = prevState;\n\n /**\n * The distance in pixels that the slider will move along the x-axis.\n * This will be the `maxSlideDistance` constant value, or if that value is too large we calculate\n * the remaining overflowing space and only slide by that amount.\n */\n const slideDistance = lastElementPosition - containerRightPosition >= maxSlideDistance ?\n maxSlideDistance :\n lastElementPosition - containerRightPosition;\n\n return {\n firstElementPosition: firstElementPosition - slideDistance,\n lastElementPosition: lastElementPosition - slideDistance,\n offset: offset - slideDistance,\n hideRightButton: lastElementPosition - slideDistance === containerRightPosition,\n hideLeftButton: false\n };\n};\n\nconst onPrevious = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { containerLeftPosition, firstElementPosition, lastElementPosition, maxSlideDistance, offset } = prevState;\n\n const fullSlide = firstElementPosition + maxSlideDistance <= containerLeftPosition;\n const slideDistance = fullSlide ? maxSlideDistance : Math.abs(offset);\n\n return {\n firstElementPosition: firstElementPosition + slideDistance,\n lastElementPosition: lastElementPosition + slideDistance,\n offset: offset + slideDistance,\n hideLeftButton: !fullSlide || firstElementPosition + slideDistance === containerLeftPosition,\n hideRightButton: false\n };\n};\n\nconst onDrag = (prevState: DynamicWidgetState, payload: any): Partial<DynamicWidgetState> => {\n const { widgetSnapshot, currentMouseX } = payload;\n\n // Disable dragging if the slider isn't long enough\n if (widgetSnapshot.hideLeftButton && widgetSnapshot.hideRightButton)\n return {};\n\n // The distance from the initial `MouseDown` event x-coordinate, to the present x-coordinate\n const dragDistance = widgetSnapshot.initialMouseX - currentMouseX;\n\n let offset = widgetSnapshot.offset - dragDistance;\n let firstElementPosition = widgetSnapshot.firstElementPosition - dragDistance;\n let lastElementPosition = widgetSnapshot.lastElementPosition - dragDistance;\n let hideLeftButton = false;\n let hideRightButton = false;\n\n if (firstElementPosition > prevState.containerLeftPosition) {\n offset = 0;\n firstElementPosition = prevState.containerLeftPosition;\n lastElementPosition = prevState.lastElementPosition;\n hideLeftButton = true;\n }\n\n if (lastElementPosition <= prevState.containerRightPosition) {\n offset = prevState.leftOffsetLimit;\n firstElementPosition = prevState.containerLeftPosition - Math.abs(prevState.leftOffsetLimit);\n lastElementPosition = widgetSnapshot.containerRightPosition;\n hideRightButton = true;\n }\n\n return {\n offset,\n firstElementPosition,\n lastElementPosition,\n hideLeftButton,\n hideRightButton\n };\n};\n\nexport function DynamicWidgetReducer(\n prevState: DynamicWidgetState,\n action: ReducerActions<WidgetInteraction>\n): DynamicWidgetState {\n switch (action.type) {\n case WidgetInteraction.Init:\n return {\n ...prevState,\n ...onInit(action.payload)\n };\n\n case WidgetInteraction.Resize:\n return {\n ...prevState,\n ...onResize(action.payload)\n };\n\n case WidgetInteraction.Next:\n return {\n ...prevState,\n ...onNext(prevState)\n };\n\n case WidgetInteraction.Previous:\n return {\n ...prevState,\n ...onPrevious(prevState)\n };\n\n case WidgetInteraction.Drag:\n return {\n ...prevState,\n ...onDrag(prevState, action.payload)\n };\n\n default:\n return prevState;\n }\n}\n",":local {\n .itemSpacing {\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .header {\n z-index: 1;\n position: relative;\n }\n\n .mobileScroll {\n overflow-x: scroll;\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .leftGradient {\n left: -2rem;\n }\n\n .leftGradientNoPadding {\n left: 0;\n }\n\n .leftButton {\n left: -1.3rem;\n }\n\n .leftButtonNoPadding {\n left: 0.1rem;\n }\n\n .rightGradient {\n right: -2rem;\n }\n\n .rightGradientNoPadding {\n right: 0;\n }\n\n .rightButton {\n right: -1.3rem;\n }\n\n .rightButtonNoPadding {\n right: 0.5rem;\n }\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { useWidgetKeyboard } from 'libs/shared/components/widgets/hooks/useWidgetKeyboard';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { useGetMediaQueryString } from 'libs/shared/hooks/UseGetMediaQueryString';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\nimport { PartialLoadingHelper, PartialLoadingOptions } from 'libs/shared/utils/PartialLoadingHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { getDragEndHandler, getDragHandler, getResizeEndHandler, getResizeHandler } from './DynamicWidgetEventHandlers';\nimport { DynamicWidgetReducer, DynamicWidgetState, initialSliderState } from './DynamicWidgetReducer';\n\nimport styles from './dynamic-widget.module.scss';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\ninterface StaticChild {\n position: 'start' | 'end';\n component: React.ElementType;\n}\n\ninterface DynamicWidgetProps {\n id?: string;\n childComponent: React.ElementType;\n childComponentProps?: any;\n partialLoadingComponent: React.ElementType;\n partialLoadingOptions?: PartialLoadingOptions;\n\n widgetDataDeps?: (any)[];\n getChildAppLink?: (data: any) => Core.AppLink;\n\n staticChildren?: StaticChild[];\n collection?: BaseObject[];\n fetch?: (...args: any[]) => any;\n lazyLoad?: boolean;\n\n heading?: string;\n headingAppLink?: Core.AppLink;\n description?: string;\n getSubtitle?: (data: any) => string;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n hideButtons?: boolean;\n childClassName?: string;\n // set to true if the widget get cut off by the container\n noNegativePadding?: boolean;\n}\n\nDynamicWidget.defaultProps = {\n heading: '',\n description: '',\n childComponentProps: {}\n};\n\nexport function DynamicWidget(props: DynamicWidgetProps): JSX.Element {\n const { childComponent: WidgetItemComponent, staticChildren, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ state, dispatch ] = React.useReducer(DynamicWidgetReducer, initialSliderState);\n\n // A snapshot of the widget state is captured on the very first `Drag` event as a point of reference\n const [ widgetSnapshot, setWidgetSnapshot ] = React.useState<WidgetSnapshot>(null);\n\n const elementRefs: SlidingListRefs = {\n container: React.useRef(null),\n firstElement: React.useRef(null),\n lastElement: React.useRef(null)\n };\n\n const mediaQuery = useGetMediaQueryString();\n const isTouchScreen = UserAgentHelper.isTabletOrMobile();\n \n const { dynamicAttributes, focusNext, focusPrev, onFocusWidget, onBlurWidget } = useWidgetKeyboard({ type: 'dynamic', state, containerRef: elementRefs.container, mediaQuery });\n\n useResizeListener(\n getResizeHandler(elementRefs, dispatch, mediaQuery),\n getResizeEndHandler(elementRefs.container),\n [mediaQuery]\n );\n\n const { ref, inView } = useLazyLoad({ prevent: !props.lazyLoad });\n\n let widgetData = props.collection;\n\n if (!props.collection && FunctionHelper.isFunction(props.fetch)) {\n const request = props.fetch(inView);\n widgetData = request.data;\n }\n\n /**\n * Once the widget data has been set, we can initialize the reducer. This is because\n * the reducer depends on the refs being set, but they don't get set until the markup has been loaded.\n */\n React.useEffect(() => {\n if (!widgetData || ObjectHelper.isEmpty(widgetData))\n return;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n }, [widgetData]);\n\n function getWidgetItems(): JSX.Element {\n if (!widgetData)\n return;\n\n const firstChildren = staticChildren?.filter(child => child.position === 'start') ?? [];\n const lastChildren = staticChildren?.filter(child => child.position === 'end') ?? [];\n\n let items = widgetData.map((widgetItem, index) => {\n let itemRef: React.MutableRefObject<HTMLLIElement>;\n\n if (widgetItem === ArrayHelper.first(widgetData) && firstChildren?.length)\n itemRef = elementRefs.firstElement;\n\n if (widgetItem === ArrayHelper.last(widgetData) && !lastChildren?.length)\n itemRef = elementRefs.lastElement;\n\n const isLast = index + 1 === widgetData.length;\n\n return (\n <li\n id={widgetItem.id}\n key={widgetItem.id}\n ref={itemRef}\n onFocus={() => onFocusWidget(index)}\n onBlur={() => onBlurWidget()}\n className={`${styles.itemSpacing} ${props.childClassName || ''} ${(isLast && isTouchScreen) ? 'pe-4' : ''}`}\n {...dynamicAttributes[widgetItem.id]}\n >\n <WidgetItemComponent\n getChildAppLink={props.getChildAppLink}\n data={widgetItem}\n getSubtitle={props.getSubtitle}\n analyticsData={{\n itemIndex: index,\n ...props.analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props?.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n {...props.childComponentProps}\n />\n </li>\n );\n });\n\n if (firstChildren.length) {\n items = [\n ...firstChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`first-widget-component:${i}`}\n ref={i === 0 ? elementRefs.firstElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n }),\n ...items\n ];\n }\n\n if (lastChildren.length) {\n items = [\n ...items,\n ...lastChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`end-widget-component:${i}`}\n ref={i === lastChildren.length - 1 ? elementRefs.lastElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n })\n ];\n }\n\n return <>{items}</>;\n }\n const widgetItems = React.useMemo(getWidgetItems, [\n widgetData, dynamicAttributes, state.offset, mediaQuery, ...props.widgetDataDeps || []\n ]);\n\n if (widgetData && !widgetData.length && !staticChildren?.length)\n return <></>;\n\n if (!widgetData || ObjectHelper.isEmpty(widgetData)) {\n return (\n <div ref={ref}>\n <PartialDynamicWidget\n partialLoadingComponent={props.partialLoadingComponent}\n partialLoadingOptions={props.partialLoadingOptions}\n />\n </div>\n );\n }\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n ...props.analyticsData,\n id: props.id,\n name: props.heading,\n direction: type === WidgetInteraction.Next ? 'right' : 'left'\n });\n\n const hideButtons = isTouchScreen || props.hideButtons;\n\n return (\n <div className={`${props.noNegativePadding ? '' : 'mx-n4'}`}>\n <div className={`px-4 ${styles.header}`}>\n <WidgetHeader\n name={props.heading}\n description={props.description}\n appLink={props.headingAppLink}\n showSeeMoreLink={!!props.headingAppLink}\n />\n </div>\n\n <div className='position-relative'>\n <div className={`${props.noNegativePadding ? '' : 'px-4' } py-3 my-n3 position-relative ${isTouchScreen ? styles.mobileScroll : 'overflow-hidden-x'}`}>\n <div className={`position-relative ${props.hideButtons ? 'overflow-hidden-x' : ''}`}>\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n focusPrev();\n\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n leftButtonClassName={`${styles.leftButton} ${props.noNegativePadding ? styles.leftButtonNoPadding : ''}`}\n leftGradientClassName={`${styles.leftGradient} ${props.noNegativePadding ? styles.leftGradientNoPadding : ''}`}\n hide={state.hideLeftButton}\n useGradientBackdrop\n />\n )}\n\n <SlidingListContainer\n position={state.offset}\n positionType={CssMeasurement.Pixels}\n onDrag={getDragHandler(elementRefs.container, state, dispatch, widgetSnapshot, setWidgetSnapshot)}\n onDragEnd={getDragEndHandler(elementRefs.container, setWidgetSnapshot)}\n ref={elementRefs.container}\n >\n {widgetItems}\n </SlidingListContainer>\n\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n focusNext();\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n hide={state.hideRightButton}\n rightButtonClassName={`${styles.rightButton} ${props.noNegativePadding ? styles.rightButtonNoPadding : ''}`}\n rightGradientClassName={`${styles.rightGradient} ${props.noNegativePadding ? styles.rightGradientNoPadding : ''}`}\n useGradientBackdrop\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype PartialDynamicWidgetProps = Pick<DynamicWidgetProps, 'partialLoadingComponent'> & {\n partialLoadingOptions?: PartialLoadingOptions\n};\n\nexport const PartialDynamicWidget = (props: PartialDynamicWidgetProps) => {\n const { partialLoadingComponent: Component, partialLoadingOptions } = props;\n\n return (\n <div className='d-flex flex-nowrap overflow-hidden'>\n {PartialLoadingHelper.getPartialLoadingItems(partialLoadingOptions).map((item, idx) => <Component key={idx} />)}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CrCAJmt6.chunk.js","names":[],"sources":["../../../../libs/shared/src/hooks/UseResizeListener.ts","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetEventHandlers.ts","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidgetReducer.tsx","../../../../libs/shared/src/components/widgets/dynamic-widget/dynamic-widget.module.scss","../../../../libs/shared/src/components/widgets/dynamic-widget/DynamicWidget.tsx"],"sourcesContent":["import * as React from 'react';\n\n/**\n * Hook function for listening to scroll events\n * @param onResize - gets called on resize.\n * @param onResizeEnd (optional) - gets called 100ms after the last resize event. Timer restarts everytime the callback\n * runs so that endCallback only fires after a stretch of resize events.\n * @param dependencies - values from the component (e.g. state, props and functions) that are used \n * inside the effect hook.\n */\nexport function useResizeListener(onResize: () => void, onResizeEnd?: () => void, dependencies: any[] = []): void {\n let resizeTimeout: number;\n\n const onResizeModified = () => {\n onResize();\n\n window.clearTimeout(resizeTimeout);\n resizeTimeout = window.setTimeout(onResizeEnd, 100);\n };\n\n React.useEffect(() => {\n window.addEventListener('resize', onResizeEnd ? onResizeModified : onResize);\n return () => window.removeEventListener('resize', onResizeEnd ? onResizeModified : onResize);\n }, [...dependencies]);\n}\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nimport { DynamicWidgetState } from './DynamicWidgetReducer';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\n/**\n * Resize events\n */\nexport const getResizeHandler = (\n elementRefs: SlidingListRefs,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n mediaQuery: MediaQueryStrings\n) => () => {\n if (elementRefs.container.current)\n elementRefs.container.current.style.transition = '';\n\n dispatch({\n type: WidgetInteraction.Resize,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n};\n\nexport const getResizeEndHandler = (containerRef: React.MutableRefObject<HTMLUListElement>) => () => {\n if (containerRef.current)\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n};\n\nexport const getDragHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n widgetState: DynamicWidgetState,\n dispatch: React.Dispatch<ReducerActions<WidgetInteraction>>,\n widgetSnapshot: WidgetSnapshot,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => (event: React.DragEvent<HTMLUListElement>): void => {\n const mouseX = event.clientX;\n\n let snapshot = widgetSnapshot;\n\n if (!snapshot) {\n snapshot = { ...widgetState, initialMouseX: mouseX };\n setWidgetSnapshot(snapshot);\n containerRef.current.style.transition = '';\n }\n\n dispatch({\n type: WidgetInteraction.Drag,\n payload: {\n widgetSnapshot: snapshot,\n currentMouseX: mouseX\n }\n });\n};\n\nexport const getDragEndHandler = (\n containerRef: React.MutableRefObject<HTMLUListElement>,\n setWidgetSnapshot: React.Dispatch<WidgetSnapshot>\n) => () => {\n containerRef.current.style.transition = 'transform .4s ease-in-out';\n setWidgetSnapshot(null);\n};\n","import { ReducerActions } from 'libs/common/react/interfaces';\n\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\n\nexport interface DynamicWidgetState {\n /**\n * X-position argument for `translate3d()` to determine where the slider is positioned.\n */\n offset: number;\n\n /**\n * Left position of the slider container.\n * Set on `Init`, and updated on `Resize`.\n * Used for calculations on `Previous`, or for dragging to the right.\n */\n containerLeftPosition: number;\n\n /**\n * Right position of the slider container.\n * Set on Init, and updated on Resize.\n * Used for calculations on `Next`, or for dragging to the left.\n */\n containerRightPosition: number;\n\n /**\n * The position of the left edge of the very first element in the slider list.\n * Initially this will always be equal to `containerLeftPosition`.\n */\n firstElementPosition: number;\n\n /**\n * The position of the right edge of the very last element in the slider list.\n */\n lastElementPosition: number;\n\n /**\n * True when `firstElementPosition === containerLeftPosition`.\n */\n hideLeftButton: boolean;\n\n /**\n * True when `lastElementPositon === containerRightPosition`.\n */\n hideRightButton: boolean;\n\n /**\n * When clicking left or right, this number is the max distance in pixels that the slider.\n * will move.\n * Default 300.\n * Can only be set once on `Init` action.\n */\n maxSlideDistance: number;\n\n /**\n * This is calculated on `Init`, and is the lowest number the `offset` state can ever be.\n * This is needed for the `Drag` event, as the `Drag` event can only calculate whole numbers.\n * 99% of the time, the leftOffsetLimit is a very specific decimal number, so we calculate it\n * on `Init` and reference it on `Drag` events when necessary.\n */\n leftOffsetLimit: number;\n}\n\nfunction getMaxSlideDistance(mediaQuery: MediaQueryStrings): number {\n if (mediaQuery === MediaQueryStrings.XS)\n return 200;\n\n if (mediaQuery === MediaQueryStrings.SM || mediaQuery === MediaQueryStrings.MD)\n return 350;\n\n return 500;\n}\n\n/**\n * `null` values are initialized in the `Init` action. This is dispatched\n * later, because it uses JQuery elements that aren't immediately available\n * when `useReducer` is called.\n */\nexport const initialSliderState: DynamicWidgetState = {\n offset: 0,\n containerLeftPosition: null,\n containerRightPosition: null,\n firstElementPosition: null,\n lastElementPosition: null,\n hideLeftButton: true,\n hideRightButton: true,\n maxSlideDistance: 0,\n leftOffsetLimit: null\n};\n\ninterface InitPayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onInit = (payload: InitPayload): DynamicWidgetState => {\n const { container, lastElement } = payload.elementRefs;\n\n if (!container?.current || !lastElement?.current)\n return initialSliderState;\n\n const containerRect = container.current.getBoundingClientRect();\n const containerLeftPosition = containerRect.left;\n const containerRightPosition = containerRect.right;\n\n const firstElementPosition = containerLeftPosition;\n const lastElementPosition = lastElement.current.getBoundingClientRect().right;\n const leftOffsetLimit = containerRightPosition - lastElementPosition;\n\n return {\n ...initialSliderState,\n containerLeftPosition,\n containerRightPosition,\n firstElementPosition,\n lastElementPosition,\n hideRightButton: lastElementPosition < containerRightPosition,\n leftOffsetLimit,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\ninterface ResizePayload {\n elementRefs: SlidingListRefs;\n mediaQuery: MediaQueryStrings;\n}\n\nconst onResize = (payload: ResizePayload): DynamicWidgetState => {\n const initialState = onInit({\n ...payload,\n ...payload.elementRefs\n });\n\n return {\n ...initialState,\n maxSlideDistance: getMaxSlideDistance(payload.mediaQuery)\n };\n};\n\nconst onNext = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { firstElementPosition, lastElementPosition, maxSlideDistance, offset, containerRightPosition } = prevState;\n\n /**\n * The distance in pixels that the slider will move along the x-axis.\n * This will be the `maxSlideDistance` constant value, or if that value is too large we calculate\n * the remaining overflowing space and only slide by that amount.\n */\n const slideDistance = lastElementPosition - containerRightPosition >= maxSlideDistance ?\n maxSlideDistance :\n lastElementPosition - containerRightPosition;\n\n return {\n firstElementPosition: firstElementPosition - slideDistance,\n lastElementPosition: lastElementPosition - slideDistance,\n offset: offset - slideDistance,\n hideRightButton: lastElementPosition - slideDistance === containerRightPosition,\n hideLeftButton: false\n };\n};\n\nconst onPrevious = (prevState: DynamicWidgetState): Partial<DynamicWidgetState> => {\n const { containerLeftPosition, firstElementPosition, lastElementPosition, maxSlideDistance, offset } = prevState;\n\n const fullSlide = firstElementPosition + maxSlideDistance <= containerLeftPosition;\n const slideDistance = fullSlide ? maxSlideDistance : Math.abs(offset);\n\n return {\n firstElementPosition: firstElementPosition + slideDistance,\n lastElementPosition: lastElementPosition + slideDistance,\n offset: offset + slideDistance,\n hideLeftButton: !fullSlide || firstElementPosition + slideDistance === containerLeftPosition,\n hideRightButton: false\n };\n};\n\nconst onDrag = (prevState: DynamicWidgetState, payload: any): Partial<DynamicWidgetState> => {\n const { widgetSnapshot, currentMouseX } = payload;\n\n // Disable dragging if the slider isn't long enough\n if (widgetSnapshot.hideLeftButton && widgetSnapshot.hideRightButton)\n return {};\n\n // The distance from the initial `MouseDown` event x-coordinate, to the present x-coordinate\n const dragDistance = widgetSnapshot.initialMouseX - currentMouseX;\n\n let offset = widgetSnapshot.offset - dragDistance;\n let firstElementPosition = widgetSnapshot.firstElementPosition - dragDistance;\n let lastElementPosition = widgetSnapshot.lastElementPosition - dragDistance;\n let hideLeftButton = false;\n let hideRightButton = false;\n\n if (firstElementPosition > prevState.containerLeftPosition) {\n offset = 0;\n firstElementPosition = prevState.containerLeftPosition;\n lastElementPosition = prevState.lastElementPosition;\n hideLeftButton = true;\n }\n\n if (lastElementPosition <= prevState.containerRightPosition) {\n offset = prevState.leftOffsetLimit;\n firstElementPosition = prevState.containerLeftPosition - Math.abs(prevState.leftOffsetLimit);\n lastElementPosition = widgetSnapshot.containerRightPosition;\n hideRightButton = true;\n }\n\n return {\n offset,\n firstElementPosition,\n lastElementPosition,\n hideLeftButton,\n hideRightButton\n };\n};\n\nexport function DynamicWidgetReducer(\n prevState: DynamicWidgetState,\n action: ReducerActions<WidgetInteraction>\n): DynamicWidgetState {\n switch (action.type) {\n case WidgetInteraction.Init:\n return {\n ...prevState,\n ...onInit(action.payload)\n };\n\n case WidgetInteraction.Resize:\n return {\n ...prevState,\n ...onResize(action.payload)\n };\n\n case WidgetInteraction.Next:\n return {\n ...prevState,\n ...onNext(prevState)\n };\n\n case WidgetInteraction.Previous:\n return {\n ...prevState,\n ...onPrevious(prevState)\n };\n\n case WidgetInteraction.Drag:\n return {\n ...prevState,\n ...onDrag(prevState, action.payload)\n };\n\n default:\n return prevState;\n }\n}\n",":local {\n .itemSpacing {\n &:not(:last-child) {\n margin-right: map-get($spacers, 2);\n }\n }\n\n .header {\n z-index: 1;\n position: relative;\n }\n\n .mobileScroll {\n overflow-x: scroll;\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n &::-webkit-scrollbar {\n display: none;\n }\n }\n\n .leftGradient {\n left: -2rem;\n }\n\n .leftGradientNoPadding {\n left: 0;\n }\n\n .leftButton {\n left: -1.3rem;\n }\n\n .leftButtonNoPadding {\n left: 0.1rem;\n }\n\n .rightGradient {\n right: -2rem;\n }\n\n .rightGradientNoPadding {\n right: 0;\n }\n\n .rightButton {\n right: -1.3rem;\n }\n\n .rightButtonNoPadding {\n right: 0.5rem;\n }\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { useWidgetKeyboard } from 'libs/shared/components/widgets/hooks/useWidgetKeyboard';\nimport { SlidingListContainer } from 'libs/shared/components/widgets/sliding-list/SlidingListContainer';\nimport { WidgetButton, WidgetButtonDirection } from 'libs/shared/components/widgets/widget-button/WidgetButton';\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { WidgetInteraction } from 'libs/shared/enums/WidgetInteraction';\nimport { useGetMediaQueryString } from 'libs/shared/hooks/UseGetMediaQueryString';\nimport { useLazyLoad } from 'libs/shared/hooks/UseLazyLoad';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { SlidingListRefs } from 'libs/shared/interfaces/SlidingListRefs';\nimport { PartialLoadingHelper, PartialLoadingOptions } from 'libs/shared/utils/PartialLoadingHelper';\nimport { WidgetHelper } from 'libs/shared/utils/WidgetHelper';\n\nimport { getDragEndHandler, getDragHandler, getResizeEndHandler, getResizeHandler } from './DynamicWidgetEventHandlers';\nimport { DynamicWidgetReducer, DynamicWidgetState, initialSliderState } from './DynamicWidgetReducer';\n\nimport styles from './dynamic-widget.module.scss';\n\ninterface WidgetSnapshot extends DynamicWidgetState {\n initialMouseX: number;\n}\n\ninterface StaticChild {\n position: 'start' | 'end';\n component: React.ElementType;\n}\n\ninterface DynamicWidgetProps {\n id?: string;\n childComponent: React.ElementType;\n childComponentProps?: any;\n partialLoadingComponent: React.ElementType;\n partialLoadingOptions?: PartialLoadingOptions;\n\n widgetDataDeps?: (any)[];\n getChildAppLink?: (data: any) => Core.AppLink;\n\n staticChildren?: StaticChild[];\n collection?: BaseObject[];\n fetch?: (...args: any[]) => any;\n lazyLoad?: boolean;\n\n heading?: string;\n headingAppLink?: Core.AppLink;\n description?: string;\n getSubtitle?: (data: any) => string;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n getWidgetItemAnalyticsData?: (data: any) => HashObject;\n hideButtons?: boolean;\n childClassName?: string;\n // set to true if the widget get cut off by the container\n noNegativePadding?: boolean;\n}\n\nDynamicWidget.defaultProps = {\n heading: '',\n description: '',\n childComponentProps: {}\n};\n\nexport function DynamicWidget(props: DynamicWidgetProps): JSX.Element {\n const { childComponent: WidgetItemComponent, staticChildren, getWidgetItemAnalyticsData = () => {} } = props;\n\n const [ state, dispatch ] = React.useReducer(DynamicWidgetReducer, initialSliderState);\n\n // A snapshot of the widget state is captured on the very first `Drag` event as a point of reference\n const [ widgetSnapshot, setWidgetSnapshot ] = React.useState<WidgetSnapshot>(null);\n\n const elementRefs: SlidingListRefs = {\n container: React.useRef(null),\n firstElement: React.useRef(null),\n lastElement: React.useRef(null)\n };\n\n const mediaQuery = useGetMediaQueryString();\n const isTouchScreen = UserAgentHelper.isTabletOrMobile();\n \n const { dynamicAttributes, focusNext, focusPrev, onFocusWidget, onBlurWidget } = useWidgetKeyboard({ type: 'dynamic', state, containerRef: elementRefs.container, mediaQuery });\n\n useResizeListener(\n getResizeHandler(elementRefs, dispatch, mediaQuery),\n getResizeEndHandler(elementRefs.container),\n [mediaQuery]\n );\n\n const { ref, inView } = useLazyLoad({ prevent: !props.lazyLoad });\n\n let widgetData = props.collection;\n\n if (!props.collection && FunctionHelper.isFunction(props.fetch)) {\n const request = props.fetch(inView);\n widgetData = request.data;\n }\n\n /**\n * Once the widget data has been set, we can initialize the reducer. This is because\n * the reducer depends on the refs being set, but they don't get set until the markup has been loaded.\n */\n React.useEffect(() => {\n if (!widgetData || ObjectHelper.isEmpty(widgetData))\n return;\n\n dispatch({\n type: WidgetInteraction.Init,\n payload: {\n elementRefs,\n mediaQuery\n }\n });\n }, [widgetData]);\n\n function getWidgetItems(): JSX.Element {\n if (!widgetData)\n return;\n\n const firstChildren = staticChildren?.filter(child => child.position === 'start') ?? [];\n const lastChildren = staticChildren?.filter(child => child.position === 'end') ?? [];\n\n let items = widgetData.map((widgetItem, index) => {\n let itemRef: React.MutableRefObject<HTMLLIElement>;\n\n if (widgetItem === ArrayHelper.first(widgetData) && firstChildren?.length)\n itemRef = elementRefs.firstElement;\n\n if (widgetItem === ArrayHelper.last(widgetData) && !lastChildren?.length)\n itemRef = elementRefs.lastElement;\n\n const isLast = index + 1 === widgetData.length;\n\n return (\n <li\n id={widgetItem.id}\n key={widgetItem.id}\n ref={itemRef}\n onFocus={() => onFocusWidget(index)}\n onBlur={() => onBlurWidget()}\n className={`${styles.itemSpacing} ${props.childClassName || ''} ${(isLast && isTouchScreen) ? 'pe-4' : ''}`}\n {...dynamicAttributes[widgetItem.id]}\n >\n <WidgetItemComponent\n getChildAppLink={props.getChildAppLink}\n data={widgetItem}\n getSubtitle={props.getSubtitle}\n analyticsData={{\n itemIndex: index,\n ...props.analyticsData,\n ...getWidgetItemAnalyticsData(widgetItem)\n }}\n analyticsOptions={{ ...props?.analyticsOptions, ...WidgetHelper.getSliderItemAnalyticsOptions() }}\n {...props.childComponentProps}\n />\n </li>\n );\n });\n\n if (firstChildren.length) {\n items = [\n ...firstChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`first-widget-component:${i}`}\n ref={i === 0 ? elementRefs.firstElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n }),\n ...items\n ];\n }\n\n if (lastChildren.length) {\n items = [\n ...items,\n ...lastChildren.map((child, i) => {\n const Component = child.component;\n\n return (\n <li\n key={`end-widget-component:${i}`}\n ref={i === lastChildren.length - 1 ? elementRefs.lastElement : null}\n className={`${styles.itemSpacing} ${props.childClassName || ''}`}\n >\n <Component />\n </li>\n );\n })\n ];\n }\n\n return <>{items}</>;\n }\n const widgetItems = React.useMemo(getWidgetItems, [\n widgetData, dynamicAttributes, state.offset, mediaQuery, ...props.widgetDataDeps || []\n ]);\n\n if (widgetData && !widgetData.length && !staticChildren?.length)\n return <></>;\n\n if (!widgetData || ObjectHelper.isEmpty(widgetData)) {\n return (\n <div ref={ref}>\n <PartialDynamicWidget\n partialLoadingComponent={props.partialLoadingComponent}\n partialLoadingOptions={props.partialLoadingOptions}\n />\n </div>\n );\n }\n\n const getSliderAnalyticsData = (type: WidgetInteraction) => ({\n ...props.analyticsData,\n id: props.id,\n name: props.heading,\n direction: type === WidgetInteraction.Next ? 'right' : 'left'\n });\n\n const hideButtons = isTouchScreen || props.hideButtons;\n\n return (\n <div className={`${props.noNegativePadding ? '' : 'mx-n4'}`}>\n <div className={`px-4 ${styles.header}`}>\n <WidgetHeader\n name={props.heading}\n description={props.description}\n appLink={props.headingAppLink}\n showSeeMoreLink={!!props.headingAppLink}\n />\n </div>\n\n <div className='position-relative'>\n <div className={`${props.noNegativePadding ? '' : 'px-4' } py-3 my-n3 position-relative ${isTouchScreen ? styles.mobileScroll : 'overflow-hidden-x'}`}>\n <div className={`position-relative ${props.hideButtons ? 'overflow-hidden-x' : ''}`}>\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Left}\n onClick={() => {\n focusPrev();\n\n dispatch({ type: WidgetInteraction.Previous });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Previous),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n leftButtonClassName={`${styles.leftButton} ${props.noNegativePadding ? styles.leftButtonNoPadding : ''}`}\n leftGradientClassName={`${styles.leftGradient} ${props.noNegativePadding ? styles.leftGradientNoPadding : ''}`}\n hide={state.hideLeftButton}\n useGradientBackdrop\n />\n )}\n\n <SlidingListContainer\n position={state.offset}\n positionType={CssMeasurement.Pixels}\n onDrag={getDragHandler(elementRefs.container, state, dispatch, widgetSnapshot, setWidgetSnapshot)}\n onDragEnd={getDragEndHandler(elementRefs.container, setWidgetSnapshot)}\n ref={elementRefs.container}\n >\n {widgetItems}\n </SlidingListContainer>\n\n {!hideButtons && (\n <WidgetButton\n direction={WidgetButtonDirection.Right}\n onClick={() => {\n focusNext();\n\n dispatch({ type: WidgetInteraction.Next });\n AnalyticsHelper.logUserAction(\n getSliderAnalyticsData(WidgetInteraction.Next),\n WidgetHelper.getSliderAnalyticsOptions()\n );\n }}\n hide={state.hideRightButton}\n rightButtonClassName={`${styles.rightButton} ${props.noNegativePadding ? styles.rightButtonNoPadding : ''}`}\n rightGradientClassName={`${styles.rightGradient} ${props.noNegativePadding ? styles.rightGradientNoPadding : ''}`}\n useGradientBackdrop\n />\n )}\n </div>\n </div>\n </div>\n </div>\n );\n}\n\ntype PartialDynamicWidgetProps = Pick<DynamicWidgetProps, 'partialLoadingComponent'> & {\n partialLoadingOptions?: PartialLoadingOptions\n};\n\nexport const PartialDynamicWidget = (props: PartialDynamicWidgetProps) => {\n const { partialLoadingComponent: Component, partialLoadingOptions } = props;\n\n return (\n <div className='d-flex flex-nowrap overflow-hidden'>\n {PartialLoadingHelper.getPartialLoadingItems(partialLoadingOptions).map((item, idx) => <Component key={idx} />)}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./Dp9qJj1C.chunk.js";import{lt as e,ut as t}from"./Dun43GrB.chunk.js";import{g as n}from"./app-
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./Dp9qJj1C.chunk.js";import{lt as e,ut as t}from"./Dun43GrB.chunk.js";import{g as n}from"./app-BIigh9wv.js";t();var r=e();function i({error:e}){return(0,r.jsx)(n,{error:e})}export{i as NotFoundView};
|
|
2
|
+
//# sourceMappingURL=CsC3VVvE2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"
|
|
1
|
+
{"version":3,"file":"CsC3VVvE2.chunk.js","names":[],"sources":["../../src/apps/default/views/not-found/StreamableNotFoundView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { ErrorView } from 'apps/default/views/error/StreamableErrorView';\n\ninterface NotFoundViewProps {\n error: ErrorPageError;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function NotFoundView({ error }: NotFoundViewProps): React.ReactElement {\n return <ErrorView error={error} />;\n}\n"],"mappings":"iIAWA,SAAgB,EAAa,CAAE,SAAgD,CAC7E,OAAO,EAAA,EAAA,KAAC,EAAD,CAAkB,QAAS,CAAA"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"./Dp9qJj1C.chunk.js";import{M as e,lt as t,ut as n}from"./Dun43GrB.chunk.js";import{y as r}from"./BQ5XMoHG.chunk.js";import{t as i}from"./B7tm2CBz.chunk.js";import{n as a}from"./CAEQvGr_.chunk.js";import{t as o}from"./D86qrFLE.chunk.js";import{n as s}from"./Da5tDmIW2.chunk.js";import{a as c}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import"./Dp9qJj1C.chunk.js";import{M as e,lt as t,ut as n}from"./Dun43GrB.chunk.js";import{y as r}from"./BQ5XMoHG.chunk.js";import{t as i}from"./B7tm2CBz.chunk.js";import{n as a}from"./CAEQvGr_.chunk.js";import{t as o}from"./D86qrFLE.chunk.js";import{n as s}from"./Da5tDmIW2.chunk.js";import{a as c}from"./BpgHKWR52.chunk.js";import{a as l,t as u}from"./B8R4YVaF2.chunk.js";import{N as d}from"./app-BIigh9wv.js";import{t as f}from"./Bg4Ri2TO.chunk.js";import{t as p}from"./CnDOpuFK.chunk.js";import{n as m}from"./C9tPKnK22.chunk.js";var h={partialOptions:`_partialOptions_157xw_1`,partialName:`_partialName_157xw_4`,partialDescription:`_partialDescription_157xw_8`,partialThumbnail:`_partialThumbnail_157xw_12`,partialDragHandle:`_partialDragHandle_157xw_15`};n();var g=t();_.defaultProps={numVideos:15};function _(e){return(0,g.jsx)(g.Fragment,{children:Array(e.numVideos).fill(null).map((t,n)=>(0,g.jsxs)(`div`,{className:`d-flex`,children:[e.allowBulkActions&&(0,g.jsx)(`div`,{className:`form-check pe-3 pe-sm-2 mx-0 mx-md-2`}),(0,g.jsx)(v,{...e})]},n))})}function v(e){let t=d(),n=c.getSize(t,`md`)===`sm`,r=e.withReordering&&!t.xs;return(0,g.jsxs)(s,{className:`${n?``:`py-2`} flex-grow-1`,children:[(0,g.jsx)(o,{...c.getThumbnailColumns(),className:`flex-column align-items-flex-start ${n?`pb-2 pe-1`:`mb-1 pe-3 pe-md-2`}`,children:(0,g.jsxs)(s,{children:[!!r&&(0,g.jsx)(`div`,{className:`d-flex align-items-center justify-content-center col-2`,children:(0,g.jsx)(`div`,{className:`partial-loading-background ${h.partialDragHandle}`})}),(0,g.jsx)(o,{xs:c.getThumbnailColSize(r),children:(0,g.jsx)(`div`,{className:`partial-loading-background ${n?`rounded`:`rounded-3`} ${h.partialThumbnail}`})})]})}),(0,g.jsxs)(o,{...c.getDetailsColumns(),className:n?`pb-2`:`px-2`,children:[(0,g.jsx)(`div`,{className:`partial-loading-background mb-1 ${h.partialName}`}),(0,g.jsx)(`div`,{className:`partial-loading-background ${h.partialDescription}`})]})]})}var y=new Set([...Object.values(m.Classifications.Twig.EnglandSecondary),...Object.values(m.Classifications.Twig.InternationalSecondary),...Object.values(m.Classifications.Twig.ScotlandSecondary),...Object.values(m.Classifications.Twig.NewZealandSecondary),...Object.values(m.Classifications.Twig.CanadaMiddle),...Object.values(m.Classifications.Twig.CanadaHigh)]),b=new Set([...Object.values(m.Classifications.Tigtag.EnglandPrimary),...Object.values(m.Classifications.Tigtag.InternationalPrimary),...Object.values(m.Classifications.Tigtag.ScotlandPrimary),...Object.values(m.Classifications.Tigtag.NewZealandPrimary),...Object.values(m.Classifications.Tigtag.CanadaElementary),...Object.values(m.Classifications.Tigtag.CanadaMiddle)]);function x(e){return Object.keys(e).map(t=>e[t]).join(`:`)}function S(t,n){return n.cursor?`${x(e.pick(t,[`audienceId`,`letterPrefix`,`sort`]))}:${n.cursor}`:x(e.pick(t,[`audienceId`,`letterPrefix`,`sort`]))}function C(e){return e!==l.EditableCoverFixedPillListSmall}var w={classificationDashboard(e,t,n,r){let o={target:`classification:${e}`,status:n,userType:t};return{url:a.urlBuilder(`{gateway}/v1/discover/dashboards`,o),publicUrl:a.urlBuilder(`/api/discover/dashboards`,o),key:`classification:dashboard:${e}:${t}:${r}:${n?.join(`:`)}`,formatData:e=>r?e.data?.find(e=>e.id.toString()===r.toString()):i.first(e.data)}},dashboardWidgetContent(e,t={},n,r,i={}){let o={...t,cursor:i.cursor};return{url:a.urlBuilder(`{gateway}/v1/discover/widgets/${e}`,o),publicUrl:a.urlBuilder(`/api/discover/widgets/${e}`,o),key:`widget:${e}:${x(o)}`,formatData:e=>{let t=u.formatResponseData(e,r);return Array.isArray(t.content)&&(t.content=t.content.map(e=>p.isClassification(e)?f.applyThemeToClassification(e):e)),!i.hideTigTag&&!i.hideTwig||Array.isArray(t.content)&&(t.content=t.content.filter(e=>p.isClassification(e)?b.has(e.id)?!i.hideTigTag:y.has(e.id)?!i.hideTwig:!0:!0)),t},normalizeOptions:{namespace:S(t,i)},normalize:C(n)}},getDashboard(e,t,n,r,o,s,c){let l={target:n,status:t,userType:e};r?.length&&(l[`widgets.curriculum`]=r),s&&(l.contentRegion=s);let u=`dashboard:${n}:${e}:${o}:${t.join(`:`)}:${s??``}`;return{url:a.urlBuilder(`{gateway}/v1/discover/dashboards`,l),publicUrl:a.urlBuilder(`/api/discover/dashboards`,l),key:u,formatData:e=>o?e.data?.find(e=>e.id.toString()===o.toString()):i.first(e.data),success:c}},updateWidgetPreferences(e,t,n){return{url:`{gateway}/v1/discover/widgets/${e}/preferences`,key:`update:widget:preferences`,invalidationKeys:[`widget:${e}`],type:r.PUT,data:{userId:n.id,customerId:n.customerId,metadata:t}}}};export{_ as n,w as t};
|
|
2
|
+
//# sourceMappingURL=D0SYGnyF.chunk.js.map
|