@clickview/lite 0.51.4-rc.2 → 0.51.4-rc.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1750-4e7575b781-lite.chunk.js +2 -0
  4. package/dist/scripts/1750-4e7575b781-lite.chunk.js.map +1 -0
  5. package/dist/scripts/1820-345bf53a3c-lite.chunk.js +2 -0
  6. package/dist/scripts/1820-345bf53a3c-lite.chunk.js.map +1 -0
  7. package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js +2 -0
  8. package/dist/scripts/1905-ccaa3a43a6-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2004-d891104ed4-lite.chunk.js +3 -0
  10. package/dist/scripts/2004-d891104ed4-lite.chunk.js.map +1 -0
  11. package/dist/scripts/3020-dbc723b098-lite.chunk.js +2 -0
  12. package/dist/scripts/3020-dbc723b098-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js +2 -0
  14. package/dist/scripts/3231-b46a5ecb6a-lite.chunk.js.map +1 -0
  15. package/dist/scripts/3645-d9a5464436-lite.chunk.js +3 -0
  16. package/dist/scripts/3645-d9a5464436-lite.chunk.js.map +1 -0
  17. package/dist/scripts/389-58c7682943-lite.chunk.js +2 -0
  18. package/dist/scripts/389-58c7682943-lite.chunk.js.map +1 -0
  19. package/dist/scripts/4690-03372d68ac-lite.chunk.js +2 -0
  20. package/dist/scripts/4690-03372d68ac-lite.chunk.js.map +1 -0
  21. package/dist/scripts/5229-a1990cb48e-lite.chunk.js +2 -0
  22. package/dist/scripts/5229-a1990cb48e-lite.chunk.js.map +1 -0
  23. package/dist/scripts/5385-becf24e76b-lite.chunk.js +2 -0
  24. package/dist/scripts/5385-becf24e76b-lite.chunk.js.map +1 -0
  25. package/dist/scripts/5595-96a0649af0-lite.chunk.js +2 -0
  26. package/dist/scripts/5595-96a0649af0-lite.chunk.js.map +1 -0
  27. package/dist/scripts/5928-0d803fceb2-lite.chunk.js +2 -0
  28. package/dist/scripts/5928-0d803fceb2-lite.chunk.js.map +1 -0
  29. package/dist/scripts/5940-f335f8c290-lite.chunk.js +2 -0
  30. package/dist/scripts/5940-f335f8c290-lite.chunk.js.map +1 -0
  31. package/dist/scripts/8830-ab7e2a0927-lite.chunk.js +2 -0
  32. package/dist/scripts/8830-ab7e2a0927-lite.chunk.js.map +1 -0
  33. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js +3 -0
  34. package/dist/scripts/9230-6dee40b1fb-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{9843-fdefde55d7-lite.chunk.js → 9843-b82415b68c-lite.chunk.js} +2 -2
  36. package/dist/scripts/9843-b82415b68c-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{bundle-5481f5bf86.min.js → bundle-8ef24aafa1.min.js} +3 -3
  38. package/dist/scripts/{bundle-5481f5bf86.min.js.map → bundle-8ef24aafa1.min.js.map} +1 -1
  39. package/package.json +1 -1
  40. package/dist/scripts/1750-2620ba7c35-lite.chunk.js +0 -2
  41. package/dist/scripts/1750-2620ba7c35-lite.chunk.js.map +0 -1
  42. package/dist/scripts/1820-7e03cf1f19-lite.chunk.js +0 -2
  43. package/dist/scripts/1820-7e03cf1f19-lite.chunk.js.map +0 -1
  44. package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js +0 -2
  45. package/dist/scripts/1905-7a0a3aabe9-lite.chunk.js.map +0 -1
  46. package/dist/scripts/2004-00a63b9511-lite.chunk.js +0 -3
  47. package/dist/scripts/2004-00a63b9511-lite.chunk.js.map +0 -1
  48. package/dist/scripts/3020-152e57c92c-lite.chunk.js +0 -2
  49. package/dist/scripts/3020-152e57c92c-lite.chunk.js.map +0 -1
  50. package/dist/scripts/3231-af3a47245c-lite.chunk.js +0 -2
  51. package/dist/scripts/3231-af3a47245c-lite.chunk.js.map +0 -1
  52. package/dist/scripts/3645-bd1d174b0c-lite.chunk.js +0 -3
  53. package/dist/scripts/3645-bd1d174b0c-lite.chunk.js.map +0 -1
  54. package/dist/scripts/389-d8ef749150-lite.chunk.js +0 -2
  55. package/dist/scripts/389-d8ef749150-lite.chunk.js.map +0 -1
  56. package/dist/scripts/4690-c5bff103d9-lite.chunk.js +0 -2
  57. package/dist/scripts/4690-c5bff103d9-lite.chunk.js.map +0 -1
  58. package/dist/scripts/5229-b673828f61-lite.chunk.js +0 -2
  59. package/dist/scripts/5229-b673828f61-lite.chunk.js.map +0 -1
  60. package/dist/scripts/5385-db9999f839-lite.chunk.js +0 -2
  61. package/dist/scripts/5385-db9999f839-lite.chunk.js.map +0 -1
  62. package/dist/scripts/5595-8f3931b8c2-lite.chunk.js +0 -2
  63. package/dist/scripts/5595-8f3931b8c2-lite.chunk.js.map +0 -1
  64. package/dist/scripts/5928-325f4d9b8b-lite.chunk.js +0 -2
  65. package/dist/scripts/5928-325f4d9b8b-lite.chunk.js.map +0 -1
  66. package/dist/scripts/5940-44479341a9-lite.chunk.js +0 -2
  67. package/dist/scripts/5940-44479341a9-lite.chunk.js.map +0 -1
  68. package/dist/scripts/8830-7264149694-lite.chunk.js +0 -2
  69. package/dist/scripts/8830-7264149694-lite.chunk.js.map +0 -1
  70. package/dist/scripts/9230-420e26f36c-lite.chunk.js +0 -3
  71. package/dist/scripts/9230-420e26f36c-lite.chunk.js.map +0 -1
  72. package/dist/scripts/9843-fdefde55d7-lite.chunk.js.map +0 -1
  73. /package/dist/scripts/{2004-00a63b9511-lite.chunk.js.LICENSE.txt → 2004-d891104ed4-lite.chunk.js.LICENSE.txt} +0 -0
  74. /package/dist/scripts/{3645-bd1d174b0c-lite.chunk.js.LICENSE.txt → 3645-d9a5464436-lite.chunk.js.LICENSE.txt} +0 -0
  75. /package/dist/scripts/{9230-420e26f36c-lite.chunk.js.LICENSE.txt → 9230-6dee40b1fb-lite.chunk.js.LICENSE.txt} +0 -0
  76. /package/dist/scripts/{bundle-5481f5bf86.min.js.LICENSE.txt → bundle-8ef24aafa1.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: '&nbsp' }} />\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":""}