@clickview/lite 0.51.4-rc.2 → 0.51.4-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{lite-app-64ea1f3376.css → lite-app-e013955dce.css} +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1329-05c23e2627-lite.chunk.js → 1329-7064e95200-lite.chunk.js} +3 -3
- package/dist/scripts/{1329-05c23e2627-lite.chunk.js.map → 1329-7064e95200-lite.chunk.js.map} +1 -1
- package/dist/scripts/1750-4e7575b781-lite.chunk.js +2 -0
- package/dist/scripts/1750-4e7575b781-lite.chunk.js.map +1 -0
- package/dist/scripts/1820-345bf53a3c-lite.chunk.js +2 -0
- package/dist/scripts/1820-345bf53a3c-lite.chunk.js.map +1 -0
- package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js +2 -0
- package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js.map +1 -0
- package/dist/scripts/2004-d891104ed4-lite.chunk.js +3 -0
- package/dist/scripts/2004-d891104ed4-lite.chunk.js.map +1 -0
- package/dist/scripts/3020-dbc723b098-lite.chunk.js +2 -0
- package/dist/scripts/3020-dbc723b098-lite.chunk.js.map +1 -0
- package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js +2 -0
- package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js.map +1 -0
- package/dist/scripts/3645-d9a5464436-lite.chunk.js +3 -0
- package/dist/scripts/3645-d9a5464436-lite.chunk.js.map +1 -0
- package/dist/scripts/389-58c7682943-lite.chunk.js +2 -0
- package/dist/scripts/389-58c7682943-lite.chunk.js.map +1 -0
- package/dist/scripts/4690-03372d68ac-lite.chunk.js +2 -0
- package/dist/scripts/4690-03372d68ac-lite.chunk.js.map +1 -0
- package/dist/scripts/5229-a1990cb48e-lite.chunk.js +2 -0
- package/dist/scripts/5229-a1990cb48e-lite.chunk.js.map +1 -0
- package/dist/scripts/5385-becf24e76b-lite.chunk.js +2 -0
- package/dist/scripts/5385-becf24e76b-lite.chunk.js.map +1 -0
- package/dist/scripts/5595-96a0649af0-lite.chunk.js +2 -0
- package/dist/scripts/5595-96a0649af0-lite.chunk.js.map +1 -0
- package/dist/scripts/5928-0d803fceb2-lite.chunk.js +2 -0
- package/dist/scripts/5928-0d803fceb2-lite.chunk.js.map +1 -0
- package/dist/scripts/5940-f335f8c290-lite.chunk.js +2 -0
- package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +1 -0
- package/dist/scripts/8830-ab7e2a0927-lite.chunk.js +2 -0
- package/dist/scripts/8830-ab7e2a0927-lite.chunk.js.map +1 -0
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +3 -0
- package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +1 -0
- package/dist/scripts/{9843-fdefde55d7-lite.chunk.js → 9843-b82415b68c-lite.chunk.js} +2 -2
- package/dist/scripts/9843-b82415b68c-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-5481f5bf86.min.js → bundle-c26ba15832.min.js} +3 -3
- package/dist/scripts/bundle-c26ba15832.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1750-2620ba7c35-lite.chunk.js +0 -2
- package/dist/scripts/1750-2620ba7c35-lite.chunk.js.map +0 -1
- package/dist/scripts/1820-7e03cf1f19-lite.chunk.js +0 -2
- package/dist/scripts/1820-7e03cf1f19-lite.chunk.js.map +0 -1
- package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js +0 -2
- package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js.map +0 -1
- package/dist/scripts/2004-00a63b9511-lite.chunk.js +0 -3
- package/dist/scripts/2004-00a63b9511-lite.chunk.js.map +0 -1
- package/dist/scripts/3020-152e57c92c-lite.chunk.js +0 -2
- package/dist/scripts/3020-152e57c92c-lite.chunk.js.map +0 -1
- package/dist/scripts/3231-af3a47245c-lite.chunk.js +0 -2
- package/dist/scripts/3231-af3a47245c-lite.chunk.js.map +0 -1
- package/dist/scripts/3645-bd1d174b0c-lite.chunk.js +0 -3
- package/dist/scripts/3645-bd1d174b0c-lite.chunk.js.map +0 -1
- package/dist/scripts/389-d8ef749150-lite.chunk.js +0 -2
- package/dist/scripts/389-d8ef749150-lite.chunk.js.map +0 -1
- package/dist/scripts/4690-c5bff103d9-lite.chunk.js +0 -2
- package/dist/scripts/4690-c5bff103d9-lite.chunk.js.map +0 -1
- package/dist/scripts/5229-b673828f61-lite.chunk.js +0 -2
- package/dist/scripts/5229-b673828f61-lite.chunk.js.map +0 -1
- package/dist/scripts/5385-db9999f839-lite.chunk.js +0 -2
- package/dist/scripts/5385-db9999f839-lite.chunk.js.map +0 -1
- package/dist/scripts/5595-8f3931b8c2-lite.chunk.js +0 -2
- package/dist/scripts/5595-8f3931b8c2-lite.chunk.js.map +0 -1
- package/dist/scripts/5928-325f4d9b8b-lite.chunk.js +0 -2
- package/dist/scripts/5928-325f4d9b8b-lite.chunk.js.map +0 -1
- package/dist/scripts/5940-44479341a9-lite.chunk.js +0 -2
- package/dist/scripts/5940-44479341a9-lite.chunk.js.map +0 -1
- package/dist/scripts/8830-7264149694-lite.chunk.js +0 -2
- package/dist/scripts/8830-7264149694-lite.chunk.js.map +0 -1
- package/dist/scripts/9230-420e26f36c-lite.chunk.js +0 -3
- package/dist/scripts/9230-420e26f36c-lite.chunk.js.map +0 -1
- package/dist/scripts/9843-fdefde55d7-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-5481f5bf86.min.js.map +0 -1
- /package/dist/scripts/{1329-05c23e2627-lite.chunk.js.LICENSE.txt → 1329-7064e95200-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2004-00a63b9511-lite.chunk.js.LICENSE.txt → 2004-d891104ed4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3645-bd1d174b0c-lite.chunk.js.LICENSE.txt → 3645-d9a5464436-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9230-420e26f36c-lite.chunk.js.LICENSE.txt → 9230-6dee40b1fb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-5481f5bf86.min.js.LICENSE.txt → bundle-c26ba15832.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9230-420e26f36c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/windowed-list/WindowedList.tsx","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/components/settings-ordered-list-item/settings-ordered-list-item.scss","file:///app/packages/projects/lite/src/apps/settings/components/settings-ordered-list-item/SettingsOrderedListItem.tsx","file:///app/packages/projects/lite/src/apps/settings/components/device-list-item/device-list-item.scss","file:///app/packages/projects/lite/src/apps/settings/components/device-list-item/DeviceListItem.tsx","file:///app/packages/projects/lite/src/apps/settings/views/integration-settings/apple-tv-settings/pair-device-view/pair-device-view.scss","file:///app/packages/projects/lite/src/apps/settings/views/integration-settings/apple-tv-settings/pair-device-view/PairDeviceView.tsx","file:///app/packages/projects/lite/src/apps/settings/views/integration-settings/apple-tv-settings/rename-device-popup/RenameDevicePopup.tsx","file:///app/packages/projects/lite/src/apps/settings/views/integration-settings/apple-tv-settings/unpair-device-popup/UnpairDevicePopup.tsx","file:///app/packages/projects/lite/src/apps/settings/views/integration-settings/apple-tv-settings/AppleTvSettingsView.tsx","file:///app/packages/projects/lite/src/apps/settings/hooks/useAppleTvClient.ts","file:///app/packages/projects/player/src/utils/fn.ts"],"sourcesContent":["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 { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\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 svgName?: string;\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 = 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 svgName={a.svgName}\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 const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\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 />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\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}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\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 { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\n\nconst namespace = 'shared.actions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\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.svgName && <SvgContainer svgName={props.action.svgName} 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.svgName && <SvgContainer svgName={props.action.svgName} 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.svgName && <SvgContainer svgName={props.action.svgName} 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={getPhrase('actionsDropdownLabel')}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} 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}","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = ({ breadcrumb: { name, appLink, active }, withBackIcon }: BreadcrumbItemProps) => (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n);\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length;\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {breadcrumbs.map((b, idx) => <BreadcrumbItem key={idx} breadcrumb={b} />)}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\ninterface WindowedListProps<TObject> {\n items: TObject[];\n getComponent: (item: TObject, index: number) => JSX.Element;\n rowHeight: number;\n containerHeight?: number;\n\n staticComponentAboveRows?: JSX.Element;\n staticComponentBelowRows?: JSX.Element;\n}\n\nexport const WindowedList = React.forwardRef((\n props: WindowedListProps<any>,\n ref: React.Ref<Scrollbars>\n) => {\n const [ availableHeight, setAvailableHeight ] = React.useState<number>(props.containerHeight || 0);\n const [ scrollTop, setScrollTop ] = React.useState<number>(0);\n\n const tableRef = React.useRef<HTMLDivElement>(null);\n\n React.useEffect(() => {\n if (props.containerHeight)\n return;\n\n setAvailableHeight(tableRef.current?.clientHeight ?? 0);\n }, [tableRef.current]);\n\n const numRows = props.items.length;\n const totalRowsVisible = Math.ceil(availableHeight / props.rowHeight);\n const totalHeight = props.rowHeight * numRows;\n\n const startIndex = Math.max(\n 0,\n Math.floor(scrollTop / props.rowHeight) - totalRowsVisible\n );\n\n const endIndex = Math.min(\n numRows,\n startIndex + (totalRowsVisible * 3)\n );\n\n function onScrollTable(e: React.UIEvent<HTMLDivElement>): void {\n setScrollTop(e.currentTarget.scrollTop);\n }\n\n function getTableStyles(): React.CSSProperties {\n const tablePosFromTop = tableRef.current?.getBoundingClientRect().top ?? 0;\n\n const height = props.containerHeight || `calc(100vh - ${window.pageYOffset + tablePosFromTop + 30}px)`;\n \n return {\n height,\n minHeight: `${props.rowHeight * 5}px`,\n overflow: 'auto'\n };\n }\n\n function getRows(): JSX.Element[] {\n const items = [];\n \n let index = startIndex;\n while (index < endIndex) {\n const item = props.items[index];\n\n if (item)\n items.push(props.getComponent(item, index));\n \n index++;\n }\n\n return items;\n }\n\n return (\n <div style={getTableStyles()} ref={tableRef}>\n <Scrollbars\n onScroll={onScrollTable}\n autoHeightMin={totalHeight}\n autoHeightMax={totalHeight}\n ref={ref}\n >\n <div style={{ height: totalHeight, paddingTop: startIndex * props.rowHeight }}>\n <ul className='w-100 position-relative d-table striped-list list-unstyled no-full-width'>\n {!!props.staticComponentAboveRows && props.staticComponentAboveRows}\n {getRows()}\n {!!props.staticComponentBelowRows && props.staticComponentBelowRows}\n </ul>\n </div>\n </Scrollbars>\n </div>\n );\n});","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '22110291468057',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097'\n}\n","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"numberContainer\":\"JBRDi\"};","import React from 'react';\n\nimport styles from './settings-ordered-list-item.scss';\n\ninterface SettingsOrderedListItemProps {\n number: number;\n children: React.ReactNode;\n className?: string;\n}\n\nexport function SettingsOrderedListItem({ number, children, className = '' }: SettingsOrderedListItemProps): JSX.Element {\n return (\n <div className={`d-flex align-items-center mb-3 ${className}`}>\n <div className={`d-flex align-items-center justify-content-center bg-dark rounded-circle ${styles.numberContainer}`}>\n <span className='text-light'>{number}</span>\n </div>\n <div className='ms-2'>\n {children}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicator\":\"xidrU\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Actions as ActionsButton } from 'libs/shared/components/actions/Actions';\nimport { ActionsDropdown } from 'libs/shared/components/actions/ActionsDropdown';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DeviceStatus } from 'projects/player/plugins/devices-plugin/clients/client-interfaces';\n\nimport styles from './device-list-item.scss';\n\nconst namespace = 'settings.deviceListItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DeviceListItemProps {\n name: string;\n status: DeviceStatus;\n onUnpair: () => void;\n onRename?: () => void;\n}\n\nexport function DeviceListItem(props: DeviceListItemProps): React.ReactElement {\n const { status, name, onUnpair, onRename } = props;\n\n return (\n <li className='d-flex align-items-center p-2 justify-content-between'>\n <div className='d-flex align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.AppleTv} className='svg-container me-2'/>\n <div>{name}</div>\n </div>\n\n <div className='d-flex align-items-center'>\n <DeviceStatusIndicator status={status}/>\n { onRename && <ActionsButton\n actions={[{\n svgName: cvSvgLibrary.Edit,\n className: 'btn btn-link svg-container',\n onClick: onRename,\n button: true,\n disabled: status !== DeviceStatus.Available\n }]}/>\n }\n <ActionsDropdown\n actions={[{ label: getPhrase('unpairActionButton'), onClick: onUnpair }]}\n dropdownToggleClassName='btn ms-3'\n />\n </div>\n </li>\n );\n}\n\nconst statusIndicatorColors = {\n [DeviceStatus.Available]: 'bg-success',\n [DeviceStatus.Busy]: 'bg-warning',\n [DeviceStatus.Offline]: 'bg-gray-500'\n};\n\nconst statusIndicatorLabels = {\n [DeviceStatus.Available]: getPhrase('availableStatusLabel'),\n [DeviceStatus.Busy]: getPhrase('busyStatusLabel'),\n [DeviceStatus.Offline]: getPhrase('offlineStatusLabel')\n};\n\nfunction DeviceStatusIndicator(props: Pick<DeviceListItemProps, 'status'>) {\n const color = statusIndicatorColors[props.status] ?? '';\n const label = statusIndicatorLabels[props.status] ?? '';\n\n return (\n <div className='d-flex align-items-center me-4'>\n <div className={`${styles.indicator} ${color} me-2`} />\n <span>{label}</span>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"deviceInput\":\"hkziS\",\"pinInput\":\"_oWnE\",\"image\":\"s5WWG\",\"inputWrapper\":\"BTvzv\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { SvgContainer2 } from 'libs/shared/components/svg-container/SvgContainer2';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { SettingsOrderedListItem } from 'apps/settings/components/settings-ordered-list-item/SettingsOrderedListItem';\n\nimport styles from './pair-device-view.scss';\n\nconst namespace = 'settings.appleTv.pairDeviceView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PairDeviceViewProps {\n deviceName: string;\n pin: string;\n onDeviceNameChange: (deviceName: string) => void;\n onPinChange: (pin: string) => void;\n onActivate: () => void;\n}\n\nexport function PairDeviceView(props: PairDeviceViewProps): JSX.Element {\n const { deviceName, pin, onDeviceNameChange, onPinChange, onActivate } = props;\n \n return (\n <div className='rounded-3 px-4 py-3 mt-3 bg-light-blue d-flex flex-row justify-content-between'>\n <div>\n <p className='fw-bold'>\n <Text namespace={namespace} phrase='instructionsHeading' />\n </p>\n\n <SettingsOrderedListItem number={1}>\n <div className='d-flex align-items-center flex-wrap'>\n <Text namespace={namespace} phrase='instructionsStep1Fragment1' />\n <SvgContainer2 className='mx-1' size={SvgContainerSize.Small}>\n <ClickViewAvatar />\n </SvgContainer2>\n <Text namespace={namespace} phrase='instructionsStep1Fragment2' />\n <SvgContainer svgName={cvSvgLibrary.AppleTv} size={SvgContainerSize.Small} />\n <Text namespace={namespace} phrase='instructionsStep1Fragment3' />\n </div>\n </SettingsOrderedListItem>\n\n <SettingsOrderedListItem number={2}>\n <Text namespace={namespace} phrase='instructionsStep2' />\n </SettingsOrderedListItem>\n\n <div className={`${styles.inputWrapper} d-flex align-items-end form-group flex-wrap`}>\n <div className='d-flex flex-column me-2 mb-3'>\n <label className='fw-bold mb-1' htmlFor='create'>\n <Text namespace={namespace} phrase='deviceNameInputLabel'/>\n </label>\n <input\n id='device'\n className={`form-control form-control-md ${styles.deviceInput}`}\n value={deviceName}\n onChange={e => onDeviceNameChange(e.target.value)}\n autoComplete='off'\n placeholder={getPhrase('deviceNameInputPlaceholder')}\n />\n </div>\n\n <div className='d-flex flex-column me-2 mb-3'>\n <label className='fw-bold mb-1' htmlFor='create'>\n <Text namespace={namespace} phrase='pinInputLabel'/>\n </label>\n <input\n id='pin'\n className={`form-control form-control-md ${styles.pinInput}`}\n value={pin}\n onChange={e => onPinChange(e.target.value)}\n autoComplete='off'\n placeholder='1234'\n />\n </div>\n\n <DivButton onClick={onActivate} className='btn btn-dark mb-3'>\n <Text namespace={namespace} phrase='activateButton' />\n </DivButton>\n </div>\n\n <SettingsOrderedListItem number={3}>\n <Text namespace={namespace} phrase='instructionsStep3Fragment1' />\n <SvgContainer svgName={cvSvgLibrary.Cast} size={SvgContainerSize.Small} />\n <Text namespace={namespace} phrase='instructionsStep3Fragment2' />\n </SettingsOrderedListItem>\n\n <a\n href={ArticleHelper.getLiteArticle(LiteSupportArticle.AppleTvIntegration)}\n target='_blank'\n className='text-info mt-2'\n >\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n\n </div>\n\n <div className='ms-2 d-flex align-items-center'>\n <img className={styles.image} role='presentation' src={ImageUrls.Devices.APPLE_TV} />\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'settings.appleTvSettings.renameDevicePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface RenameDevicePopupProps extends PopupViewProps {\n name: string;\n showSpinner: boolean;\n onRename: (newName: string) => void;\n}\n\nexport function RenameDevicePopup(props: RenameDevicePopupProps): JSX.Element {\n const [ name, setName ] = React.useState(props.name);\n const trimmedName = name.trim();\n\n return (\n <Popup title={getPhrase('title')} closePopup={props.closePopup}>\n <div className='form-group'>\n <label className='fw-bold mb-2' htmlFor='edit'>\n <Text namespace={namespace} phrase='inputLabel' />\n </label>\n <input\n value={name}\n onChange={e => setName(e.target.value)}\n className='form-control form-control-md mb-4'\n autoFocus\n placeholder={getPhrase('inputPlaceholder')}\n />\n </div>\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.closePopup} />\n <PopupButtons.Submit\n disabled={!trimmedName}\n variant='dark'\n text={getPhrase('saveButton')}\n onClick={() => props.onRename(trimmedName)}\n showSpinner={props.showSpinner}\n />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'settings.appleTvSettings.unpairDevicePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UnpairDevicePopupProps extends PopupViewProps {\n showSpinner: boolean;\n deviceName: string;\n onUnpair: () => void;\n}\n\nexport function UnpairDevicePopup(props: UnpairDevicePopupProps): JSX.Element {\n const { closePopup, showSpinner, deviceName, onUnpair } = props;\n \n return (\n <Popup title={getPhrase('title')} closePopup={closePopup}>\n <p>\n <Text namespace={namespace} phrase='warning' options={{ name: deviceName }} />\n </p>\n\n <p>\n <Text namespace={namespace} phrase='subWarning' />\n </p>\n\n <PopupButtons>\n <PopupButtons.Cancel onClick={closePopup} />\n <PopupButtons.Submit\n variant='danger'\n text={getPhrase('unpairButton')}\n onClick={onUnpair}\n showSpinner={showSpinner}\n />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WindowedList } from 'libs/shared/components/windowed-list/WindowedList';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\n\nimport { Device } from 'projects/player/plugins/devices-plugin/clients/client-interfaces';\n\nimport { DeviceListItem } from 'apps/settings/components/device-list-item/DeviceListItem';\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\nimport { useAppleTvClient } from 'apps/settings/hooks/useAppleTvClient';\n\nimport { PairDeviceView } from './pair-device-view/PairDeviceView';\nimport { RenameDevicePopup } from './rename-device-popup/RenameDevicePopup';\nimport { UnpairDevicePopup } from './unpair-device-popup/UnpairDevicePopup';\n\nconst namespace = 'settings.appleTv';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function AppleTvSettingsView(): JSX.Element {\n const { devices, pair, unpair, rename } = useAppleTvClient();\n const [ deviceName, setDeviceName ] = React.useState('');\n const [ pin, setPin ] = React.useState('');\n const [ deviceToRename, setDeviceToRename ] = React.useState<Device>();\n const [ deviceToUnpair, setDeviceToUnpair ] = React.useState<Device>();\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const alerts = useAlerts();\n \n async function onPairDevice() {\n try {\n const trimmedDeviceName = deviceName.trim();\n const trimmedPin = pin.trim();\n\n if (!trimmedDeviceName) return;\n if (!trimmedPin) return;\n\n await pair({ deviceName: trimmedDeviceName, pin: trimmedPin });\n setDeviceName('');\n setPin('');\n \n alerts.success(getPhrase('devicePairingSuccessMessage'));\n } catch (e) {\n console.error(e);\n alerts.error(getPhrase('devicePairingErrorMessage'));\n }\n }\n\n async function onUnpairDevice(deviceId: string) {\n try {\n setShowSpinner(true);\n await unpair(deviceId);\n setDeviceToUnpair(undefined);\n \n alerts.success(getPhrase('deviceUnpairingSuccessMessage'));\n } catch (e) {\n console.error(e);\n alerts.error(getPhrase('deviceUnpairingErrorMessage'));\n } finally {\n setShowSpinner(false);\n }\n }\n\n async function onRenameDevice(deviceId: string, deviceName: string) {\n try {\n setShowSpinner(true);\n await rename({ deviceId, deviceName });\n setDeviceToRename(undefined);\n \n alerts.success(getPhrase('deviceRenamingSuccessMessage'));\n } catch (e) {\n console.error(e);\n alerts.error(getPhrase('deviceRenamingErrorMessage'));\n } finally {\n setShowSpinner(false);\n }\n }\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n requiredPermissions={PermissionName.ManageIntegrations}\n >\n { deviceToRename && (\n <RenameDevicePopup\n name={deviceToRename.name}\n showSpinner={showSpinner}\n onRename={newName => onRenameDevice(deviceToRename.id, newName)}\n closePopup={() => setDeviceToRename(undefined)}\n />\n )}\n\n { deviceToUnpair && (\n <UnpairDevicePopup\n showSpinner={showSpinner}\n deviceName={deviceToUnpair.name}\n onUnpair={() => onUnpairDevice(deviceToUnpair.id)}\n closePopup={() => setDeviceToUnpair(undefined)}\n />\n )}\n\n <PairDeviceView\n deviceName={deviceName}\n pin={pin}\n onDeviceNameChange={setDeviceName}\n onPinChange={setPin}\n onActivate={onPairDevice}\n />\n\n {devices.length ? <h2 className='h5 mt-4'>{getPhrase('activatedListHeading')}</h2> : null }\n\n <WindowedList\n items={devices}\n rowHeight={55}\n getComponent={(device: Device) => {\n return (\n <DeviceListItem\n key={device.id}\n name={device.name}\n status={device.status}\n onUnpair={() => setDeviceToUnpair(device)}\n // The rename function is a bit janky at the moment, so we'll disable it for now\n // Note: re-pairing the device with a different name works fine..\n // onRename={() => setDeviceToRename(device)}\n />\n );\n }}\n />\n </SettingsLayout>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlayerIntegrationsRequests } from 'libs/shared/flight-requests/PlayerIntegrationsRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\n\nimport { AppleTvClient } from 'projects/player/plugins/devices-plugin/clients/apple-tv/apple-tv-client';\nimport { AppleTvPairRequest, AppleTvRenameRequest, OnlineApiDevice } from 'projects/player/plugins/devices-plugin/clients/apple-tv/apple-tv-interfaces';\nimport { Device } from 'projects/player/plugins/devices-plugin/clients/client-interfaces';\n\ninterface AppleTvClientApi {\n devices: Device[];\n pair: (pairRequest: Omit<AppleTvPairRequest, 'crmId'>) => Promise<OnlineApiDevice>;\n unpair: (id: string) => Promise<void>;\n rename: (renameRequest: AppleTvRenameRequest) => Promise<void>;\n}\n\nexport function useAppleTvClient(): AppleTvClientApi {\n const [ devices, setDevices ] = React.useState<Device[]>([]);\n const client = React.useRef<AppleTvClient>();\n const fetchAsync = Flight.useGetFetchAsync();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const customer = Flight.useBasicFetch<Customer>(\n currentUser.data?.isAuthenticated &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n React.useEffect(() => {\n if (!currentUser.data?.isAuthenticated) return;\n if (!customer.hasCompleted) return;\n\n client.current = new AppleTvClient({\n fetchAccessToken: () => fetchAsync(PlayerIntegrationsRequests.getAppleTvAccessToken()),\n userId: parseInt(currentUser.data?.id)\n });\n\n client.current?.on('deviceschange', () => {\n setDevices([...client.current?.getDevices()]);\n });\n\n return () => client.current?.dispose();\n }, [ currentUser.data?.isAuthenticated, customer.hasCompleted ]);\n\n function pair(pairRequest: Omit<AppleTvPairRequest, 'crmId'>) {\n return client.current?.pair({ ...pairRequest, crmId: parseInt(customer.data?.crmId) });\n }\n\n function unpair(id: string) {\n return client.current?.unpair(id);\n }\n\n function rename(renameRequest: AppleTvRenameRequest) {\n return client?.current.renameDevice(renameRequest);\n }\n\n return {\n devices,\n pair,\n unpair,\n rename\n };\n}","/**\n * Wraps the given function, `fn`, with a new function that only invokes `fn`\n * at most once per every `wait` milliseconds.\n *\n * @function\n * @param {Function} fn\n * The function to be throttled.\n *\n * @param {number} wait\n * The number of milliseconds by which to throttle.\n *\n * @return {Function}\n */\nexport const throttle = function(fn: any, wait: any): any {\n let last = window.performance.now();\n\n const throttled = function(...args: any[]): any {\n const now = window.performance.now();\n\n if (now - last >= wait) {\n fn(...args);\n last = now;\n }\n };\n\n return throttled;\n};\n\n/**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked.\n *\n * Inspired by lodash and underscore implementations.\n *\n * @function\n * @param {Function} func\n * The function to wrap with debounce behavior.\n *\n * @param {number} wait\n * The number of milliseconds to wait after the last invocation.\n *\n * @param {boolean} [leading]\n * When true will also invoke the function immediately upon creation.\n *\n * @param {Object} [context=window]\n * The \"context\" in which the debounced function should debounce. For\n * example, if this function should be tied to a Video.js player,\n * the player can be passed here. Alternatively, defaults to the\n * global `window` object.\n *\n * @return {Function}\n * A debounced function that returns true if the wrapped function was executed immediately.\n */\nexport const debounce = function(\n func: any,\n wait: any,\n leading: any,\n context: any = window\n): (...args: any[]) => boolean {\n let timeout: any;\n\n const cancel = () => {\n context.clearTimeout(timeout);\n timeout = null;\n };\n\n /* eslint-disable consistent-this */\n const debounced = (...args: any[]) => {\n let executed = false;\n\n let later = function() {\n timeout = null;\n later = null;\n func.apply(this, args);\n };\n\n if (!timeout && leading) {\n func.apply(this, args);\n executed = true;\n }\n\n context.clearTimeout(timeout);\n timeout = context.setTimeout(later, wait);\n\n return executed;\n };\n /* eslint-enable consistent-this */\n\n debounced.cancel = cancel;\n\n return debounced;\n};\n\n/**\n * A function that returns undefined.\n *\n * Inspired by lodash implementations.\n */\nexport const noop = function(): undefined {\n return undefined;\n};\n"],"names":["Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","map","idx","key","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","getPhrase","LanguageService","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","id","size","showDivider","undefined","group","Tooltip","defaultProps","S","BreadcrumbItem","breadcrumb","name","active","withBackIcon","Breadcrumbs","breadcrumbs","isMobile","PartialBreadcrumbs","numItems","dangerouslySetInnerHTML","__html","WindowedList","ref","containerHeight","availableHeight","setAvailableHeight","scrollTop","setScrollTop","tableRef","current","clientHeight","tablePosFromTop","numRows","items","totalRowsVisible","Math","ceil","rowHeight","totalHeight","startIndex","max","floor","endIndex","min","getBoundingClientRect","top","window","pageYOffset","minHeight","overflow","onScroll","currentTarget","autoHeightMin","autoHeightMax","paddingTop","staticComponentAboveRows","index","item","getComponent","getRows","staticComponentBelowRows","OnlineSupportArticle","LiteSupportArticle","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","options","opts","Array","random","namespace","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","modules","settingsModule","SettingsLayout","canAccess","replace","i","heading","headingButton","description","children","SettingsOrderedListItem","number","DeviceListItem","status","onUnpair","onRename","DeviceStatusIndicator","statusIndicatorColors","statusIndicatorLabels","color","PairDeviceView","deviceName","pin","onDeviceNameChange","onPinChange","onActivate","Text","phrase","SvgContainer2","ClickViewAvatar","htmlFor","value","onChange","target","autoComplete","placeholder","DivButton","ArticleHelper","src","ImageUrls","RenameDevicePopup","setName","trimmedName","trim","Popup","closePopup","autoFocus","PopupButtons","variant","text","UnpairDevicePopup","AppleTvSettingsView","devices","setDevices","client","fetchAsync","currentUser","UserRequests","customer","data","isAuthenticated","CustomerRequests","customerId","hasCompleted","fetchAccessToken","PlayerIntegrationsRequests","userId","parseInt","on","getDevices","dispose","pair","pairRequest","crmId","unpair","rename","renameRequest","renameDevice","useAppleTvClient","setDeviceName","setPin","deviceToRename","setDeviceToRename","deviceToUnpair","setDeviceToUnpair","setShowSpinner","alerts","PermissionName","newName","deviceId","success","console","error","onRenameDevice","onUnpairDevice","trimmedDeviceName","trimmedPin","device","throttle","fn","wait","last","performance","now","debounce","func","leading","timeout","context","debounced","args","executed","apply","this","clearTimeout","setTimeout","cancel"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/9843-fdefde55d7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/errors/sso-password-reset-email-not-allowed/SsoPasswordResetEmailNotAllowedError.tsx","file:///app/packages/libs/shared/src/utils/CuratorPermissionsHelper.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/user-list-items/components/UserItemActions.tsx","file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/warning-alert.scss","file:///app/packages/libs/shared/src/apps/user-manager/components/warning-alert/WarningAlert.tsx","file:///app/packages/libs/shared/src/apps/user-manager/context/UserManagerClientContext.ts","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx"],"sourcesContent":["import React from 'react';\n\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'userManager.ssoPasswordResetEmailNotAllowedError';\n\ninterface SsoPasswordResetEmailNotAllowedErrorProps {\n helpArticle: string;\n}\n\nexport function SsoPasswordResetEmailNotAllowedError(props: SsoPasswordResetEmailNotAllowedErrorProps): JSX.Element {\n return (\n <WarningAlert>\n <p className='mb-1 fw-semibold'>\n <Text namespace={namespace} phrase='warning' />\n </p>\n {props.helpArticle && (\n <a href={props.helpArticle} target='_blank' className='info-link'>\n <Text namespace={namespace} phrase='findMore' />\n </a>\n )}\n </WarningAlert>\n );\n}","import { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { CuratorUser } from 'libs/shared/interfaces';\n\nfunction getGroupNames(user: CuratorUser): string[] {\n return (user && user.groups) ? user.groups.map(g => g.name) : [];\n}\n \nexport const CuratorPermissionsHelper = {\n isDev(user: CuratorUser): boolean {\n return getGroupNames(user).includes(CuratorGroup.Developer);\n },\n\n hasSubjectsAccess(user: CuratorUser): boolean {\n const allowedGroups = [\n CuratorGroup.Developer,\n CuratorGroup.Content,\n CuratorGroup.Curator,\n CuratorGroup.StreamableCurator\n ];\n\n return allowedGroups.some(group => getGroupNames(user).includes(group));\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, ClickDescriptor, EmailDescriptor, EntityType, LocationContext, OperationDescriptor, ToggleDescriptor, UserAction, VerifyEmailDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { SsoPasswordResetEmailNotAllowedError } from 'libs/shared/apps/user-manager/errors/sso-password-reset-email-not-allowed/SsoPasswordResetEmailNotAllowedError';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkRemoveUsersViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkRemoveUsersViewModel';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CuratorUser, CurrentUser, User } from 'libs/shared/interfaces';\nimport { CuratorPermissionsHelper } from 'libs/shared/utils/CuratorPermissionsHelper';\nimport { DialogHelper } from 'libs/shared/utils/DialogHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.userList');\n\nfunction useGetActions(props: UserItemActionsProps): ActionOptions[] {\n const client = React.useContext(UserManagerClientContext);\n\n const hasStatus = (status: ObjectStatus) => status === props.user.status;\n\n const hasVerifiedEmail = props.user.metadata?.isEmailVerified;\n\n // eslint-disable-next-line\n const isCurrentUser = props.user.id == props.currentUser?.id;\n\n const [ , setBulkRemoveUsers ] = useViewModel<BulkRemoveUsersViewModel>(SharedViewModelKeys.BULK_REMOVE_USERS);\n\n function logAnalytics(actionOptions: AnalyticsOptions): void {\n AnalyticsHelper.logUserAction({ id: props.user.id }, AnalyticsHelper.mergeOptions({\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext[props.userType === UserGroup.Learner ? 'StaffManagerListItem' : 'StudentManagerListItem']\n }, actionOptions));\n }\n\n const actions: ActionOptions[] = [];\n \n if (!props.isEditUserForm) {\n function getTooltip(): string {\n if (props.hasRostering)\n return getPhrase('editControlledByRostering');\n\n if (hasStatus(ObjectStatus.Disabled))\n return getPhrase('editUserDisabled');\n\n if (hasStatus(ObjectStatus.Inactive) && client !== UserManagerClient.Curator)\n return getPhrase('editUserPending');\n\n return getPhrase('editUser');\n }\n\n function canEdit(): boolean {\n if (props.hasRostering)\n return false;\n\n if (hasStatus(ObjectStatus.Active))\n return true;\n\n if (hasStatus(ObjectStatus.Inactive) && client === UserManagerClient.Curator)\n return true;\n\n return false;\n }\n\n actions.push({\n order: 0,\n onClick: () => {\n if (!canEdit())\n return;\n \n logAnalytics({ actionType: UserAction.Edit });\n \n const appLink = {\n ...props.appLinks.editUser,\n args: [ ...(props.appLinks.editUser.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n },\n svgName: cvSvgLibrary.Edit,\n className: `btn btn-link svg-container ${!canEdit() ? 'disabled' : ''}`,\n tooltip: getTooltip(),\n button: true\n });\n }\n\n if (props.user.email && hasStatus(ObjectStatus.Inactive) && props.onClickResendActivationEmail) {\n actions.push({\n order: 5,\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n label: getPhrase('resendActivationEmail'),\n onClick: () => {\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ActivateUser\n });\n props.onClickResendActivationEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (\n props.user.email &&\n hasStatus(ObjectStatus.Active) &&\n !hasVerifiedEmail\n ) {\n actions.push({\n order: 5,\n label: getPhrase('sendVerificationEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n onClick: () => {\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.VerifyEmail\n });\n props.onClickSendVerificationEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (!isCurrentUser) {\n if (hasVerifiedEmail && hasStatus(ObjectStatus.Active) && props.onClickSendResetEmail) {\n actions.push({\n order: 5,\n label: getPhrase('sendResetEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n onClick: () => {\n if (UserHelper.hasSso(props.user)) {\n DialogHelper.render(\n <SsoPasswordResetEmailNotAllowedError helpArticle={props.ssoHelpArticle} />,\n {\n title: getPhrase('sendResetEmail'),\n cancelButtonProps: {\n text: getPhrase('close'),\n variant: 'dark'\n }\n }\n );\n return;\n }\n\n logAnalytics({\n actionType: UserAction.SendEmail,\n descriptor: EmailDescriptor.ResetPasswordEmail\n });\n props.onClickSendResetEmail(props.user);\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link'\n });\n }\n\n if (!hasStatus(ObjectStatus.Inactive)) {\n actions.push({\n order: 10,\n label: getPhrase(hasStatus(ObjectStatus.Active) ? 'deactivate' : 'activate'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({\n actionType: UserAction.Activate,\n descriptor: hasStatus(ObjectStatus.Active) ? ToggleDescriptor.Off : ToggleDescriptor.On\n });\n \n const appLink = {\n ...props.appLinks.toggleStatus,\n args: [ ...(props.appLinks.toggleStatus.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n }\n });\n }\n\n const showDelete = client !== UserManagerClient.Primary || props.products?.includes(ProductId.Online);\n if (showDelete) {\n actions.push({\n order: 25,\n disabled: props.hasRostering,\n onClick: () => {\n if (hasStatus(ObjectStatus.Active))\n return;\n \n logAnalytics({ actionType: UserAction.Delete, descriptor: OperationDescriptor.Single });\n \n setBulkRemoveUsers({ users: [props.user], totalUsers: 1 });\n \n Core.AppLinkHelper.trigger(props.appLinks.deleteUser);\n },\n label: getPhrase('delete'),\n className: `btn btn-link text-danger ${hasStatus(ObjectStatus.Active) || props.hasRostering ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : hasStatus(ObjectStatus.Active) ? getPhrase('deleteDisabledTooltip') : null\n });\n }\n\n const showRemove = client !== UserManagerClient.Online && !props.products?.includes(ProductId.Online);\n if (showRemove) {\n actions.push({\n order: 25,\n disabled: props.hasRostering,\n onClick: () => {\n if (hasStatus(ObjectStatus.Active))\n return;\n \n logAnalytics({ actionType: UserAction.Remove, descriptor: OperationDescriptor.Single });\n \n const appLink = {\n ...props.appLinks.removeUser,\n args: [ ...(props.appLinks.editUser.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n },\n label: getPhrase('remove'),\n className: `btn btn-link text-danger ${hasStatus(ObjectStatus.Active) || props.hasRostering ? 'cursor-default disabled' : ''}`,\n button: false,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : hasStatus(ObjectStatus.Active) ? getPhrase('removeDisabledTooltip') : null\n });\n }\n }\n\n if (client === UserManagerClient.Online && props.userType === UserGroup.Learner && hasStatus(ObjectStatus.Active)) {\n actions.push({\n order: 15,\n label: getPhrase('viewWorkspace'),\n onClick: () => logAnalytics({ actionType: UserAction.Click, descriptor: ClickDescriptor.ViewStudentWorkspace }),\n appLink: {\n ...props.appLinks.viewStudentWorkspace,\n params: { username: props.user.username }\n },\n className: props.hasRostering ? 'cursor-default disabled' : 'btn btn-link',\n button: false\n });\n }\n\n if (\n client === UserManagerClient.Primary &&\n props.userType === UserGroup.Learner &&\n !hasStatus(ObjectStatus.Inactive)\n ) {\n actions.push({\n order: 15,\n label: getPhrase('viewStudentsVideos'),\n onClick: () => logAnalytics({ actionType: UserAction.Click, descriptor: ClickDescriptor.ViewStudentWorkspace }),\n appLink: {\n ...props.appLinks.viewStudentWorkspace,\n args: [props.user.id]\n },\n className: 'btn btn-link',\n button: false\n });\n }\n\n if (\n hasStatus(ObjectStatus.Active) &&\n (\n (props.userType === UserGroup.Staff && !hasVerifiedEmail) ||\n props.userType === UserGroup.Learner\n )\n ) {\n actions.push({\n order: 20,\n disabled: props.hasRostering,\n label: getPhrase('changePassword'),\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.ChangePassword });\n\n const appLink = {\n ...props.appLinks.changePassword,\n args: [ ...(props.appLinks.changePassword.args ?? []), props.user.id ]\n };\n \n Core.AppLinkHelper.trigger(appLink);\n }\n });\n }\n\n if (client === UserManagerClient.Curator\n && CuratorPermissionsHelper.isDev(props.currentUser as unknown as CuratorUser)) {\n actions.push(...[\n {\n order: 2,\n label: getPhrase('manageCuratorGroups'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.ManageGroup });\n\n Core.AppLinkHelper.trigger({\n ...props.appLinks.manageUserCuratorGroups,\n args: [props.user.id]\n });\n }\n },\n {\n order: 3,\n label: getPhrase('editUserOptions'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n appLink: {\n ...props.appLinks.editUserOptions,\n args: [ ...(props.appLinks.editUserOptions.args ?? []), props.user.id ]\n }\n }\n ]);\n }\n\n if (\n client === UserManagerClient.Curator &&\n props.user.metadata?.isEmailVerified &&\n !hasStatus(ObjectStatus.Inactive)\n ) {\n actions.push({\n order: 5,\n label: getPhrase('unverifyEmail'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n onClick: () => {\n logAnalytics({ actionType: UserAction.VerifyEmail, descriptor: VerifyEmailDescriptor.Remove });\n\n Core.AppLinkHelper.trigger({\n ...props.appLinks.deleteUserEmail,\n args: [ ...(props.appLinks.deleteUserEmail.args ?? []), props.user.id ]\n });\n }\n });\n }\n\n if (client === UserManagerClient.Curator && props.isEditUserForm) {\n actions.push({\n order: 6,\n label: getPhrase('addToAnotherCustomer'),\n disabled: props.hasRostering,\n tooltip: props.hasRostering ? getPhrase('editControlledByRostering') : '',\n className: props.hasRostering ? 'cursor-default disabled' : '',\n appLink: {\n ...props.appLinks.addToAnotherCustomer,\n args: [ ...(props.appLinks.addToAnotherCustomer.args ?? []), props.user.id ]\n }\n });\n }\n\n return actions;\n}\n\ninterface UserItemActionsProps {\n user: User;\n userType: UserGroup;\n appLinks: UserManagerAppLinks;\n currentUser: CurrentUser;\n products?: ProductId[];\n onClickResendActivationEmail?: (user: User) => void;\n onClickSendResetEmail?: (user: User) => void;\n onClickSendVerificationEmail?: (user: User) => void;\n isEditUserForm?: boolean;\n ssoHelpArticle?: string;\n hasRostering?: boolean;\n}\n\nexport function UserItemActions(props: UserItemActionsProps): JSX.Element {\n const actions = useGetActions(props);\n\n return (\n <Actions\n actions={actions}\n className={props.isEditUserForm ? 'mb-2' : 'pe-4'}\n actionsDropdownClassName={props.isEditUserForm ? 'btn btn-outline-dark' : 'btn btn-link ms-1'}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"icon\":\"eCi4v\"};","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './warning-alert.scss';\n\ntype WarningAlertProps = React.PropsWithChildren<HashObject>;\n\nexport function WarningAlert(props: WarningAlertProps): JSX.Element {\n return (\n <div className='alert alert-warning d-flex align-items-center px-2 mb-3'>\n <SvgContainer\n svgName={cvSvgLibrary.WarningOutline}\n className={`svg-container me-2 ${styles.icon}`}\n />\n <div>\n {props.children}\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);","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 { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\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 svgName?: string;\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 = 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 svgName={a.svgName}\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 const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\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 />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\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}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\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 { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\n\nconst namespace = 'shared.actions';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\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.svgName && <SvgContainer svgName={props.action.svgName} 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.svgName && <SvgContainer svgName={props.action.svgName} 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.svgName && <SvgContainer svgName={props.action.svgName} 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={getPhrase('actionsDropdownLabel')}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} 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}"],"names":["namespace","SsoPasswordResetEmailNotAllowedError","props","WarningAlert","W","className","Text","phrase","helpArticle","href","target","getGroupNames","user","groups","map","g","name","CuratorPermissionsHelper","isDev","includes","CuratorGroup","hasSubjectsAccess","Curator","some","group","getPhrase","LanguageService","UserItemActions","actions","client","UserManagerClientContext","hasStatus","status","hasVerifiedEmail","metadata","isEmailVerified","isCurrentUser","id","currentUser","setBulkRemoveUsers","SharedViewModelKeys","logAnalytics","actionOptions","AnalyticsHelper","entity","workflowPhase","location","userType","UserGroup","isEditUserForm","canEdit","hasRostering","ObjectStatus","UserManagerClient","push","order","onClick","actionType","appLink","appLinks","editUser","args","svgName","tooltip","button","email","onClickResendActivationEmail","disabled","label","descriptor","onClickSendVerificationEmail","onClickSendResetEmail","UserHelper","DialogHelper","ssoHelpArticle","title","cancelButtonProps","text","variant","toggleStatus","products","ProductId","users","totalUsers","deleteUser","removeUser","viewStudentWorkspace","params","username","changePassword","manageUserCuratorGroups","editUserOptions","deleteUserEmail","addToAnotherCustomer","useGetActions","Actions","actionsDropdownClassName","SvgContainer","children","orderedActions","sort","a","b","buttonActions","moreActions","forEach","length","idx","key","svgSize","dropdownToggleSvgSize","showSpinner","analyticsData","analyticsOptions","openInNewTab","iconButton","showBorder","customSize","spanHack","sortComponent","dropdownToggleClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","e","preventDefault","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","type","size","showDivider","undefined","Tooltip","defaultProps","S"],"sourceRoot":""}
|