@clickview/lite 0.75.0-rc.3 → 0.75.0-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.
Files changed (89) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/104-0c03791b45-lite.chunk.js +2 -0
  4. package/dist/scripts/104-0c03791b45-lite.chunk.js.map +1 -0
  5. package/dist/scripts/1074-4f6b136f9a-lite.chunk.js +2 -0
  6. package/dist/scripts/1074-4f6b136f9a-lite.chunk.js.map +1 -0
  7. package/dist/scripts/1192-d409863a3c-lite.chunk.js +2 -0
  8. package/dist/scripts/1192-d409863a3c-lite.chunk.js.map +1 -0
  9. package/dist/scripts/{1199-6522b1d291-lite.chunk.js → 1199-d2fcbb547e-lite.chunk.js} +1 -1
  10. package/dist/scripts/1199-d2fcbb547e-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{1221-894d8474d5-lite.chunk.js → 1221-1109d5379d-lite.chunk.js} +2 -2
  12. package/dist/scripts/1221-1109d5379d-lite.chunk.js.map +1 -0
  13. package/dist/scripts/1491-ab92a040e5-lite.chunk.js +2 -0
  14. package/dist/scripts/1491-ab92a040e5-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{1610-bf848cce4d-lite.chunk.js → 1610-bb6eff2ff1-lite.chunk.js} +2 -2
  16. package/dist/scripts/1610-bb6eff2ff1-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{218-297de74688-lite.chunk.js → 218-f6cc4a3b6a-lite.chunk.js} +2 -2
  18. package/dist/scripts/218-f6cc4a3b6a-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{2968-c4c0114915-lite.chunk.js → 2968-13e56eeff8-lite.chunk.js} +1 -1
  20. package/dist/scripts/2968-13e56eeff8-lite.chunk.js.map +1 -0
  21. package/dist/scripts/3597-eaae787997-lite.chunk.js +3 -0
  22. package/dist/scripts/3597-eaae787997-lite.chunk.js.map +1 -0
  23. package/dist/scripts/4185-7178e5a716-lite.chunk.js +2 -0
  24. package/dist/scripts/4185-7178e5a716-lite.chunk.js.map +1 -0
  25. package/dist/scripts/{4722-d96da2a258-lite.chunk.js → 4722-9eb591621a-lite.chunk.js} +3 -3
  26. package/dist/scripts/4722-9eb591621a-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{5153-acc6c13153-lite.chunk.js → 5153-cf62a95421-lite.chunk.js} +2 -2
  28. package/dist/scripts/5153-cf62a95421-lite.chunk.js.map +1 -0
  29. package/dist/scripts/6756-cfd00009e4-lite.chunk.js +3 -0
  30. package/dist/scripts/6756-cfd00009e4-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{6790-c8a9efba50-lite.chunk.js → 6790-36ce6dda04-lite.chunk.js} +1 -1
  32. package/dist/scripts/6790-36ce6dda04-lite.chunk.js.map +1 -0
  33. package/dist/scripts/7148-d966512e45-lite.chunk.js +2 -0
  34. package/dist/scripts/7148-d966512e45-lite.chunk.js.map +1 -0
  35. package/dist/scripts/{7438-88d11bb89a-lite.chunk.js → 7438-38f60d3e8e-lite.chunk.js} +1 -1
  36. package/dist/scripts/7438-38f60d3e8e-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{8856-02dd2e486c-lite.chunk.js → 8856-4da691f96f-lite.chunk.js} +1 -1
  38. package/dist/scripts/8856-4da691f96f-lite.chunk.js.map +1 -0
  39. package/dist/scripts/9003-fc8e674468-lite.chunk.js +2 -0
  40. package/dist/scripts/9003-fc8e674468-lite.chunk.js.map +1 -0
  41. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js +2 -0
  42. package/dist/scripts/9042-add0f1c2e2-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{9134-19912ca3ee-lite.chunk.js → 9134-a6a5fc92cf-lite.chunk.js} +1 -1
  44. package/dist/scripts/9134-a6a5fc92cf-lite.chunk.js.map +1 -0
  45. package/dist/scripts/9620-3746c84350-lite.chunk.js +3 -0
  46. package/dist/scripts/9620-3746c84350-lite.chunk.js.map +1 -0
  47. package/dist/scripts/{bundle-828ca65de8.min.js → bundle-fc60888464.min.js} +3 -3
  48. package/dist/scripts/{bundle-828ca65de8.min.js.map → bundle-fc60888464.min.js.map} +1 -1
  49. package/package.json +1 -1
  50. package/dist/scripts/104-7abe2b09dd-lite.chunk.js +0 -2
  51. package/dist/scripts/104-7abe2b09dd-lite.chunk.js.map +0 -1
  52. package/dist/scripts/1074-2ab8b03e30-lite.chunk.js +0 -2
  53. package/dist/scripts/1074-2ab8b03e30-lite.chunk.js.map +0 -1
  54. package/dist/scripts/1199-6522b1d291-lite.chunk.js.map +0 -1
  55. package/dist/scripts/1221-894d8474d5-lite.chunk.js.map +0 -1
  56. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js +0 -2
  57. package/dist/scripts/1400-43b37bfa8d-lite.chunk.js.map +0 -1
  58. package/dist/scripts/1610-bf848cce4d-lite.chunk.js.map +0 -1
  59. package/dist/scripts/218-297de74688-lite.chunk.js.map +0 -1
  60. package/dist/scripts/2968-c4c0114915-lite.chunk.js.map +0 -1
  61. package/dist/scripts/4185-1f65c7adc9-lite.chunk.js +0 -2
  62. package/dist/scripts/4185-1f65c7adc9-lite.chunk.js.map +0 -1
  63. package/dist/scripts/4722-d96da2a258-lite.chunk.js.map +0 -1
  64. package/dist/scripts/5153-acc6c13153-lite.chunk.js.map +0 -1
  65. package/dist/scripts/6756-e90680dfcd-lite.chunk.js +0 -3
  66. package/dist/scripts/6756-e90680dfcd-lite.chunk.js.map +0 -1
  67. package/dist/scripts/6790-c8a9efba50-lite.chunk.js.map +0 -1
  68. package/dist/scripts/7148-432ab72091-lite.chunk.js +0 -2
  69. package/dist/scripts/7148-432ab72091-lite.chunk.js.map +0 -1
  70. package/dist/scripts/7438-88d11bb89a-lite.chunk.js.map +0 -1
  71. package/dist/scripts/8687-549a2d9278-lite.chunk.js +0 -3
  72. package/dist/scripts/8687-549a2d9278-lite.chunk.js.map +0 -1
  73. package/dist/scripts/8856-02dd2e486c-lite.chunk.js.map +0 -1
  74. package/dist/scripts/9003-1db925f5ec-lite.chunk.js +0 -2
  75. package/dist/scripts/9003-1db925f5ec-lite.chunk.js.map +0 -1
  76. package/dist/scripts/9042-1a42fcbba2-lite.chunk.js +0 -2
  77. package/dist/scripts/9042-1a42fcbba2-lite.chunk.js.map +0 -1
  78. package/dist/scripts/9134-19912ca3ee-lite.chunk.js.map +0 -1
  79. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js +0 -3
  80. package/dist/scripts/9528-2b478f4ca8-lite.chunk.js.map +0 -1
  81. /package/dist/css/{8687-lite-6787cc731a.chunk.css → 3597-lite-6787cc731a.chunk.css} +0 -0
  82. /package/dist/css/{9528-lite-6787cc731a.chunk.css → 9620-lite-6787cc731a.chunk.css} +0 -0
  83. /package/dist/scripts/{1221-894d8474d5-lite.chunk.js.LICENSE.txt → 1221-1109d5379d-lite.chunk.js.LICENSE.txt} +0 -0
  84. /package/dist/scripts/{4722-d96da2a258-lite.chunk.js.LICENSE.txt → 3597-eaae787997-lite.chunk.js.LICENSE.txt} +0 -0
  85. /package/dist/scripts/{5153-acc6c13153-lite.chunk.js.LICENSE.txt → 4722-9eb591621a-lite.chunk.js.LICENSE.txt} +0 -0
  86. /package/dist/scripts/{6756-e90680dfcd-lite.chunk.js.LICENSE.txt → 5153-cf62a95421-lite.chunk.js.LICENSE.txt} +0 -0
  87. /package/dist/scripts/{8687-549a2d9278-lite.chunk.js.LICENSE.txt → 6756-cfd00009e4-lite.chunk.js.LICENSE.txt} +0 -0
  88. /package/dist/scripts/{9528-2b478f4ca8-lite.chunk.js.LICENSE.txt → 9620-3746c84350-lite.chunk.js.LICENSE.txt} +0 -0
  89. /package/dist/scripts/{bundle-828ca65de8.min.js.LICENSE.txt → bundle-fc60888464.min.js.LICENSE.txt} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1221-894d8474d5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/launchpad/v2/launchpad-v2.scss","file:///app/packages/libs/shared/src/components/launchpad/v2/LaunchpadV2.tsx","file:///app/packages/projects/lite/src/apps/share/hooks/useFetchSharedResource.ts","file:///app/packages/projects/lite/src/apps/share/views/video-pincode/video-pincode.scss","file:///app/packages/projects/lite/src/apps/share/views/video-pincode/VideoPincodeView.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { CreateShareLinkRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n scopeId?: string;\n objectTypeId?: number;\n type?: ShareType\n}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest\n ): Flight.Request {\n return {\n url: '{gateway}/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [ 'sent:share-v2', `get:share-v2:shares:object:${data.objectId}` ]\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `update:share-v2`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ]\n };\n },\n \n deleteShare(\n shareId: string\n ): Flight.Request {\n return {\n type: HttpVerbs.DELETE,\n url: `{gateway}/v2/shares/${shareId}`,\n key: `delete:share-v2`,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', 'sent:share-v2', `share-v2:${shareId}` ]\n };\n },\n\n getShare(\n shareId: string\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {}\n ): Flight.Request {\n const key = Object.values(params).sort().join(':');\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/sent', params),\n key: `sent:share-v2:${key}`,\n type: HttpVerbs.GET,\n normalize: false\n };\n },\n\n getShareLink(\n id: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n normalizeOptions\n };\n },\n\n createShareLink(\n data: CreateShareLinkRequest\n ): Flight.Request {\n return {\n type: HttpVerbs.POST,\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { ...data }),\n key: `create:share-v2:permanent-link:object:${data.objectId}`,\n invalidationKeys: [ `share-v2:permanent-link:object:${data.objectId}`, 'sent:share-v2' ],\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n },\n \n getSharesByObjectId(\n objectId: string | number\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n createSharePincode(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `create:share-v2:${shareId}:pincode`,\n type: HttpVerbs.POST\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n },\n\n getPincodeByCode(code: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n }\n};\n","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"s6wnJ\",\"leftWithImage\":\"UFQ2T\",\"bgCover\":\"Tp9_3\",\"bgFull\":\"AlF2T\",\"right\":\"eoZzJ\",\"rightContent\":\"RVyLM\",\"narrowContent\":\"INvJ0\",\"logo\":\"YHNgA\",\"buttonContainer\":\"ZW85Q\",\"blur\":\"Mtlg9\",\"imageContainer\":\"NxEjh\",\"imagePosition\":\"NN9cV\",\"image\":\"PkJ8J\",\"thumbnail\":\"y0V3Z\",\"tallposter\":\"Wrg5x\",\"cover\":\"x3h8F\",\"contentBody\":\"aLd5V\",\"contentBodyBase\":\"uQ2rm\"};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport styles from './launchpad-v2.scss';\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadV2Props {\n}\n\nexport function LaunchpadV2(props: React.PropsWithChildren<LaunchpadV2Props>): JSX.Element {\n return (\n <div className='d-flex'>\n {props.children}\n </div>\n );\n}\n\ninterface LeftPanelProps {\n className?: string;\n}\n\n\nfunction LeftPanel(props: React.PropsWithChildren<LeftPanelProps>): JSX.Element {\n return (\n <div className={`${styles.left} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface LeftImageProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n fallbackImages: LaunchImage[];\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction LeftImage(props: LeftImageProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n React.useEffect(() => {\n if (!props.imageUrl) {\n const image = props.fallbackImages[Math.floor(Math.random() * props.fallbackImages.length)];\n setImage(image.bgUrl);\n return;\n }\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, [props.imageUrl]);\n\n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${styles.bgCover} bg-light`}\n style={{ backgroundImage: image ? `url('${image}')` : '' }}\n >\n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${props.imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}\n\ntype ImageSizeType = 'cover' | 'full';\n\ninterface LeftImageWithBackgroundProps {\n imageUrl: string;\n imageSize?: ImageSizeType;\n backgroundColor?: string;\n title?: string;\n}\n\nconst imageSizeMap: {[key in ImageSizeType]: string} = {\n cover: styles.bgCover,\n full: styles.bgFull\n};\n\nfunction LeftImageWithBackground(props: LeftImageWithBackgroundProps): JSX.Element {\n const bgStyles: React.CSSProperties = {\n backgroundImage: props.imageUrl ? `url(\"${props.imageUrl}\")` : ''\n };\n\n if (props.backgroundColor)\n bgStyles.backgroundColor = props.backgroundColor;\n \n return (\n <div\n className={`${styles.left} ${styles.leftWithImage} ${imageSizeMap[props.imageSize || 'cover']} d-flex align-items-center`}\n style={bgStyles}\n title={props.title}\n />\n );\n}\n\ninterface RightPanelProps {\n className?: string;\n}\n\nexport function RightPanel(props: React.PropsWithChildren<RightPanelProps>): JSX.Element {\n return (\n <div className={`${styles.right} ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface HeaderProps {\n bannerComponent?: JSX.Element;\n logoComponent?: () => JSX.Element;\n className?: {\n logoContainer?: string;\n }\n}\n\n\nfunction Header(props: React.PropsWithChildren<HeaderProps>): JSX.Element {\n const LogoComponent = props?.logoComponent || ClickViewLogo;\n \n return (\n <div className='position-relative'>\n {!!props.bannerComponent &&\n props.bannerComponent\n }\n <div className={classNames(styles.logo, 'position-absolute', props.className?.logoContainer)}>\n <LogoComponent />\n </div>\n {props.children}\n </div>\n );\n}\n\ninterface ContentProps {\n className?: string;\n}\n\nfunction Content(props: React.PropsWithChildren<ContentProps>): JSX.Element {\n return (\n <div className={classNames(styles.rightContent, 'd-flex flex-column justify-content-center h-100', props?.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface ContentBodyProps {\n className?: string;\n width?: 'base' | 'full';\n}\n\nconst widthClassNameMap: {[key in ContentBodyProps['width']]: string} = {\n base: styles.contentBodyBase,\n full: ''\n};\n\nfunction ContentBody(props: React.PropsWithChildren<ContentBodyProps>): JSX.Element {\n const widthClassName = widthClassNameMap[props.width || 'base'];\n return (\n <div className={classNames(styles.contentBody, widthClassName, 'm-auto p-3', props.className)}>\n {props.children}\n </div>\n );\n}\n\ninterface NarrowContentProps {\n className?: string;\n}\n\nLaunchpadV2.NarrowContent = NarrowContent;\nfunction NarrowContent(props: React.PropsWithChildren<NarrowContentProps>): JSX.Element {\n return (\n <div className={`${styles.narrowContent} mx-auto w-100 ${props.className ? props.className : ''}`}>\n {props.children}\n </div>\n );\n}\n\ninterface ButtonsProps {\n className?: string;\n}\n\nfunction Buttons(props: React.PropsWithChildren<ButtonsProps>): JSX.Element {\n return (\n <div className={classNames('position-fixed bg-white d-flex align-items-center', styles.buttonContainer, props?.className)}>\n {props.children}\n </div>\n );\n}\n\n/**\n * Intended ussage below:\n * \n * <LaunchpadV2>\n * <LaunchpadV2.Left>\n * // Your LHS content here\n * </LaunchpadV2.Left>\n * <LaunchpadV2.Right>\n * <LaunchpadV2.Header />\n * <LaunchpadV2.Content>\n * // Can omit this if it needs to be full width\n * <LaunchpadV2.ContentBody width=\"...\">\n * // Your main content here\n * </LaunchpadV2.ContentBody>\n * </LaunchpadV2.Content>\n * \n * // Omit this and put your buttons in content\n * // if you want your buttons immediately under your content rather \n * // than at the bottom of the screen\n * <LaunchpadV2.Buttons />\n * \n * </LaunchpadV2.Right>\n * </LaunchpadV2>\n * \n * - Sha\n */\n\nLaunchpadV2.Left = LeftPanel;\nLaunchpadV2.LeftImage = LeftImage;\nLaunchpadV2.LeftImageWithBackground = LeftImageWithBackground;\nLaunchpadV2.Right = RightPanel;\nLaunchpadV2.Header = Header;\nLaunchpadV2.Content = Content;\nLaunchpadV2.ContentBody = ContentBody;\nLaunchpadV2.Buttons = Buttons;\n","import { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, ShareLink } from 'libs/shared/interfaces';\n\nexport function useFetchSharedResource<T>(shareId: string): T {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareObject(shareId));\n\n function getResourceRequest(): Flight.Request {\n if (!shareLink.data || !currentUser.data)\n return null;\n\n switch (shareLink.data.objectTypeId) {\n case MasterType.Video:\n return VideoRequests.publicVideo(shareLink.data.objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.publicClip(shareLink.data.objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(shareLink.data.objectId, shareId);\n case MasterType.Playlist:\n return PlaylistRequests.getSharedPlaylist(shareLink.data.objectId, shareId);\n case MasterType.Subject:\n return ClassificationRequests.classification(shareLink.data.objectId, currentUser.data.id);\n case MasterType.Series:\n return SeriesRequests.sharedSeries(shareLink.data.objectId, shareId);\n }\n }\n\n const resourceRequest = getResourceRequest();\n const resource = Flight.useBasicFetch<T>(resourceRequest);\n\n return resource.data;\n}","// extracted by mini-css-extract-plugin\nexport default {\"formContainer\":\"ldJEo\",\"toggleEye\":\"VUsmU\",\"input\":\"DRd0y\"};","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { SharePincode } from 'libs/shared/apps/share-v2/interfaces/SharePincode';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { LaunchpadV2 } from 'libs/shared/components/launchpad/v2/LaunchpadV2';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { LAUNCHPAD_FALLBACK_IMAGES } from 'shared/components/launchpad/Launchpad';\n\nimport { ShareLinkFilterHelpers } from 'apps/share/filters/share-link-filter/ShareLinkFilterHelpers';\nimport { useFetchSharedResource } from 'apps/share/hooks/useFetchSharedResource';\n\nimport styles from './video-pincode.scss';\n\nconst namespace = 'share.videoPincode';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PincodeViewProps {\n shareId: string;\n appLink: Core.AppLink;\n pincode?: string;\n}\n\n// Metadata handled by C# share endpoint\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoPincodeView(props: PincodeViewProps): JSX.Element {\n const [ pincode, setPincode ] = React.useState(props.pincode ?? '');\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n const [ errorMessage, setErrorMessage ] = React.useState('');\n\n const fetchAsync = Flight.useGetFetchAsync();\n\n const sharedResource = useFetchSharedResource<SharableEntity>(props.shareId);\n\n async function onSubmit(e: React.FormEvent): Promise<void> {\n e.preventDefault();\n\n if (!pincode)\n return;\n\n setShowSpinner(true);\n\n try {\n const pincodeData = await fetchAsync<SharePincode>(ShareRequests.getPincodeByCode(pincode));\n\n if (pincodeData?.shareId !== props.shareId) {\n setErrorMessage(getPhrase('incorrectPincodeError'));\n setShowSpinner(false);\n return;\n }\n\n const normalizedAppLink = { ...props.appLink };\n typeof normalizedAppLink.params !== 'string' && delete normalizedAppLink.params?.joinCode;\n\n ShareLinkFilterHelpers.setPincode(props.shareId, pincode);\n const href = Core.AppLinkHelper.getHref(normalizedAppLink);\n Core.LocationUtils.PageLoad(href);\n } catch (error) {\n if (error.responseJSON?.status === HttpStatus.NotFound) {\n setErrorMessage(getPhrase('incorrectPincodeError'));\n setShowSpinner(false);\n return;\n }\n\n setErrorMessage(getPhrase('ajaxErrorMessage'));\n setShowSpinner(false);\n }\n }\n\n if (!sharedResource)\n return <></>;\n\n const leftImageUrl = ImageHelper.createUrl(ShareViewHelper.getImageUrl(sharedResource), { size: ImageSize.Large });\n\n return (\n <LaunchpadV2>\n <LaunchpadV2.LeftImage\n title={sharedResource.name}\n imageUrl={leftImageUrl}\n objectType={sharedResource.typeId}\n fallbackImages={LAUNCHPAD_FALLBACK_IMAGES}\n />\n <LaunchpadV2.Right>\n <LaunchpadV2.Header />\n <LaunchpadV2.Content>\n <LaunchpadV2.NarrowContent>\n <form onSubmit={onSubmit} className='position-relative'>\n <div className='form-group'>\n <label className='h2' htmlFor='link-password'>\n <Text namespace={namespace} phrase='info' />\n </label>\n <input\n id='link-password'\n type='text'\n className={`form-control form-control-lg ${styles.input} ${errorMessage ? 'is-invalid' : ''}`}\n placeholder={getPhrase('placeholder')}\n onChange={e => setPincode(e.target.value)}\n value={pincode}\n autoComplete='off'\n aria-errormessage='linkPasswordError'\n />\n\n {errorMessage && (\n <FormFeedback className='mb-3' name='linkPassword'>{errorMessage}</FormFeedback>\n )}\n </div>\n\n <SpinnerButton\n variant='dark'\n showSpinner={showSpinner}\n type='submit'\n className='w-100 mt-3 btn-lg'\n disabled={showSpinner || !pincode}\n >\n <Text namespace={namespace} phrase='confirm' />\n </SpinnerButton>\n </form>\n </LaunchpadV2.NarrowContent>\n </LaunchpadV2.Content>\n </LaunchpadV2.Right>\n </LaunchpadV2>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nexport const LAUNCHPAD_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.BG_5 }\n];\n\nexport const LAUNCHPAD_PRODUCT_FALLBACK_IMAGES = [\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_1 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_2 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_3 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_4 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_5 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_6 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_7 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_8 },\n { bgUrl: ImageUrls.LaunchPad.PRODUCT.BG_9 }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n { bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png' },\n { bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png' }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = LAUNCHPAD_PRODUCT_FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div\n className={`${styles.left} ${image ? 'bg-blue d-flex align-items-center' : 'bg-light'}`}\n >\n {image ?\n <img className='img-fluid' src={image} draggable={false} /> :\n (showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n )\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["normalizeOptions","namespace","ShareRequests","createShare","data","url","key","type","invalidationKeys","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","id","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","FormFeedback","props","name","className","role","children","mapObjectTypeToImageClass","objectType","MasterType","LaunchpadV2","imageSizeMap","cover","full","widthClassNameMap","base","NarrowContent","Left","LeftImage","showImage","setShowImage","image","setImage","imageUrl","img","Image","onload","src","fallbackImages","Math","floor","random","length","bgUrl","style","backgroundImage","alt","title","LeftImageWithBackground","bgStyles","backgroundColor","imageSize","Right","Header","LogoComponent","logoComponent","ClickViewLogo","bannerComponent","logoContainer","Content","ContentBody","widthClassName","width","Buttons","useFetchSharedResource","currentUser","shareLink","resourceRequest","objectTypeId","getResourceRequest","getPhrase","LanguageService","VideoPincodeView","pincode","setPincode","showSpinner","setShowSpinner","errorMessage","setErrorMessage","fetchAsync","sharedResource","leftImageUrl","ImageHelper","ShareViewHelper","size","typeId","onSubmit","e","preventDefault","pincodeData","normalizedAppLink","appLink","joinCode","ShareLinkFilterHelpers","href","responseJSON","status","HttpStatus","htmlFor","Text","phrase","placeholder","onChange","target","value","autoComplete","SpinnerButton","variant","disabled","LAUNCHPAD_FALLBACK_IMAGES","ImageUrls","LAUNCHPAD_PRODUCT_FALLBACK_IMAGES","Launchpad","IMAGE_URLS","urlLists","leftComponent","draggable","links","map","link","hide","onClick","text"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1400],{79095:(e,t,n)=>{n.d(t,{j:()=>B});var a=n(32735),r=n(92802),i=n(75896),o=n(23201),c=n(82644),s=n(83345),l=n(24833),u=n(99705),m=n(12778),d=new RegExp(/^(?!-)[A-Za-z0-9-]+([\-\.]{1}[a-z0-9]+)*\.[A-Za-z]{2,6}$/),p=function(e){var t=e.domains,n=e.selectedOption,a={domains:[]};return t.forEach((function(e,r){("allowed"===n||e.domain)&&(e.domain?t.find((function(t,n){return n!==r&&t.domain===e.domain&&e.hasChanged}))?a.domains[r]={domain:"domain-duplicated"}:d.test(e.domain)||(a.domains[r]={domain:"domain-invalid"}):a.domains[r]={domain:"domain-empty"})})),a.domains.length?a:{}},f=n(91693),v=n(35223),y=n(23481),b=n(86974),g=n(15611),h=n(66122);const E={domainFieldContainer:"F9EW7"};function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function A(e,t,n){return(t=function(e){var t=function(e){if("object"!=S(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=S(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==S(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var w="settings.domainField",O=y.T.encloseNamespace(w),C={"domain-duplicated":"domainDuplicatedErrorMessage","domain-not-certified":"domainNotCertifiedErrorMessage","domain-invalid":"domainInvalidErrorMessage","domain-empty":"domainEmptyErrorMessage","domain-already-exists":{requestingAccess:"joinRequestsDomainAlreadyExistsErrorMessage",automaticAccess:"accessBehaviourDomainAlreadyExistsErrorMessage"}};function N(e){var t=(0,r.u6)(),n=e.index,i=e.domain,o=e.view,c=e.appLinks,u=e.onChangeDomain,m=e.removeDomainField,d=A(A({},l.C.RequestingAccess,c.automaticAccess.action),l.C.AutomaticAccess,c.requestingAccess.action),p={application:c[o].application,action:d[o],args:c[o].args};function f(e){return(0,r.u9)(t.errors,"domains.".concat(e,".domain"))}return a.createElement("div",{className:E.domainFieldContainer},a.createElement(b.w,{type:"text",name:"domains.".concat(n,".domain"),className:"form-control form-control-lg ".concat(f(n)?"is-invalid":""),placeholder:O("domainPlaceholder"),value:i.domain,onChange:function(e){return function(e,t){e.preventDefault();var n=Object.assign(Object.assign({},i),{domain:e.currentTarget.value,hasChanged:!0});u(n,t)}(e,n)},onClickClear:function(){return m(n)},autoComplete:"off",showClearButton:0!==n||!!i.domain,"aria-errormessage":"domains.".concat(n,".domainError")}),f(n)&&a.createElement(h.A,{name:"domains.".concat(n,".domain")},function(e,t){var n=f(e);switch(n){case"domain-duplicated":case"domain-invalid":case"domain-not-certified":case"domain-empty":return a.createElement(s.x,{namespace:w,phrase:C[n],options:{domain:t}});case"domain-already-exists":return a.createElement(a.Fragment,null,a.createElement(s.x,{namespace:w,phrase:C[n][o],options:{domain:t}}),a.createElement(g.F,{appLink:p,className:"text-red text-underline"},a.createElement(s.x,{namespace:w,phrase:"viewLinkText"})),a.createElement("span",null,"."))}}(n,i.domain)))}var T="settings.domainFields";function k(e){var t=(0,r.u6)(),n=t.values.domains,o=e.view,c=e.errors,l=e.appLinks,u=e.addDomainField,m=e.onChangeDomain,d=e.removeDomainField;return a.useEffect((function(){(null==c?void 0:c.length)&&c.forEach((function(e){var a=i.m.findIndex(n,(function(t){return t.hasChanged&&t.domain===e.domain}));t.setFieldError("domains.".concat(a,".domain"),e.errorCode)}))}),[c]),a.createElement(a.Fragment,null,a.createElement(r.F2,{name:"domains",render:function(){return a.createElement(a.Fragment,null,n.length>0&&n.map((function(e,t){return a.createElement(N,{key:t,domain:e,index:t,appLinks:l,onChangeDomain:m,removeDomainField:d,view:o})})))}}),a.createElement("div",null,a.createElement(f.h,{svgName:v.vn.Plus,className:"ms-3 btn btn-link text-info",onClick:u},a.createElement(s.x,{namespace:T,phrase:"addButtonLabel"}))))}var I=n(58357);const j={radioDescription:"Q4JXA"};var x="settings.domainSettingsRadio",L=y.T.encloseNamespace(x),R={automaticAccess:{none:{label:"accessBehaviourNoneLabel",description:"accessBehaviorNoneDescription"},allowed:{label:"accessBehaviourAllowedLabel",description:"accessBehaviourAllowedDescription"}},requestingAccess:{none:{label:"joinRequestsNoneLabel",description:"joinRequestsNoneDescription"},allowed:{label:"joinRequestsAllowedLabel",description:"joinRequestsAllowedDescription"},any:{label:"joinRequestsAnyLabel",description:"joinRequestsAnyDescription"}}};function q(e){var t=e.option,n=e.selectedOption,r=e.view,i=e.hasDescription,o=e.url,c=e.onSelectValue,l=e.children;return a.createElement("div",{className:"mb-3"},a.createElement(I.Z,{type:"radio",id:t,label:L(R[r][t].label),className:"fw-normal",value:t,onChange:function(){return c(t)},checked:n===t}),n===t&&a.createElement(a.Fragment,null,i&&a.createElement("p",{className:"".concat(j.radioDescription," mb-0")},a.createElement(s.x,{namespace:x,phrase:R[r][t].description})," ",!!o&&a.createElement("a",{className:"text-info",target:"_blank",href:o},a.createElement(s.x,{namespace:x,phrase:"learnMore"}))),l))}function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function D(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function M(e,t,n){return(t=function(e){var t=function(e){if("object"!=F(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=F(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==F(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var P="settings.domainSettingsForm",V=M(M({},l.C.RequestingAccess,{none:"joinRequestsNoneInfoMessage",allowed:"joinRequestsAllowedInfoMessage",any:"joinRequestsAnyInfoMessage"}),l.C.AutomaticAccess,{none:"accessBehaviourNoneInfoMessage",allowed:"accessBehaviourAllowedInfoMessage"});function W(e){var t=e.view,n=e.options,c=e.errors,l=e.appLinks,d=(0,r.u6)(),p=d.values,f=p.domains,v=p.selectedOption;function y(e){d.setFieldValue("selectedOption",e),d.setErrors({}),f.length||b()}function b(){var e;d.setFieldValue("domains",[].concat(function(e){if(Array.isArray(e))return D(e)}(e=f)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return D(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?D(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}(),[{domain:""}]))}function g(e){f.length>1?d.setFieldValue("domains",i.m.removeItemFromIndex(f,e)):d.setFieldValue("domains",i.m.cloneAndReplaceAtIdx(f,e,Object.assign(Object.assign({},f[e]),{domain:""}))),E(e)}function h(e,t){d.setFieldValue("domains",i.m.cloneAndReplaceAtIdx(f,t,e)),E(t)}function E(e){if(d.errors.domains){var t=d.errors.domains,n=i.m.removeItemFromIndex(t,e);d.setErrors(n.filter((function(e){return e})).length?{domains:n}:{})}}return a.createElement(r.l0,null,a.createElement("div",{className:"col-12 col-md-7 card p-3 mb-3"},n.map((function(e){return a.createElement("div",{key:e},"none"===e&&a.createElement(q,{option:e,selectedOption:v,hasDescription:!0,view:t,onSelectValue:y}),"allowed"===e&&a.createElement(q,{option:e,selectedOption:v,view:t,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:y},a.createElement(k,{errors:c,view:t,appLinks:l,addDomainField:b,onChangeDomain:h,removeDomainField:g})),"any"===e&&a.createElement(q,{option:e,view:t,selectedOption:v,hasDescription:!0,url:m.o.getLiteArticle(u.b.AccessSettings,"articles"),onSelectValue:y}))})),a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"rounded p-2 bg-light-blue text-info fw-semibold"},a.createElement(s.x,{namespace:P,phrase:V[t][v]})))),a.createElement(o.A,{isNew:!1,variant:"dark"}))}function B(e){var t=e.initialValues,n=e.view,r=e.options,i=e.errors,o=e.appLinks,s=e.onSaveChanges;return a.createElement(c.n,{initialValues:t,validate:p,validateOnChange:!1,validateOnBlur:!1,onSubmit:s},a.createElement(W,{view:n,options:r,errors:i,appLinks:o}))}},61807:(e,t,n)=>{n.d(t,{L:()=>u});var a=n(32735),r=n(81886),i=n(23481),o=n(65858),c=n(38502),s="settings.domainSettingsTabs",l=i.T.encloseNamespace(s);function u(e){var t=e.active,n=e.appLinks;return a.createElement("div",{className:"mb-3"},a.createElement(c.r,{tabs:[{name:l("requestingAccess"),appLink:n.requestingAccess,active:"requesting-access"===t,analyticsData:{name:l("requestingAccess"),url:r.Q.C$.getHref(n.requestingAccess)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:l("teacherInvites"),appLink:n.teacherInvites,active:"teacher-invites"===t,analyticsData:{name:i.T.getPhrase(s,"teacherInvites"),url:r.Q.C$.getHref(n.teacherInvites)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:l("automaticAccess"),appLink:n.automaticAccess,active:"automatic-access"===t,analyticsData:{name:i.T.getPhrase(s,"automaticAccess"),url:r.Q.C$.getHref(n.automaticAccess)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}]}))}},86974:(e,t,n)=>{n.d(t,{w:()=>i});var a=n(32735);function r(){return a.createElement("svg",{viewBox:"0 0 24 24"},a.createElement("path",{d:"M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z"}))}var i=a.forwardRef((function(e,t){var n=e.onClickClear,i=e.showClearButton,o=e.clearClassName,c=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n}(e,["onClickClear","showClearButton","clearClassName"]);return a.createElement("div",{className:"position-relative"},a.createElement("input",Object.assign({},c,{ref:t,className:"".concat(e.className," ").concat("aYpO7")})),(!!e.value||i)&&a.createElement("span",{className:"".concat("ygMgF"," position-absolute cursor-pointer text-secondary ").concat(o||""),role:"button",onClick:n,onKeyDown:function(e){return"Enter"===e.key&&n()},tabIndex:0},a.createElement("div",{className:"d-inline-block svg-container md"},a.createElement(r,null))))}))},23201:(e,t,n)=>{n.d(t,{A:()=>l});var a=n(32735),r=n(92802),i=n(2102),o=n(83345),c=n(33936),s="shared.formButtons";function l(e){var t=(0,r.u6)(),n=(0,c.l)(t);return a.createElement(i.m,{variant:e.variant||"primary",type:"submit",disabled:!n,size:e.size,className:e.className?e.className:"",showSpinner:t.isSubmitting},e.submitText?a.createElement(a.Fragment,null,e.submitText):a.createElement(o.x,{namespace:s,phrase:e.isNew?"create":"save"}))}},66122:(e,t,n)=>{n.d(t,{A:()=>r});var a=n(32735);function r(e){return a.createElement("span",{id:"".concat(e.name,"Error"),className:"".concat(e.className," invalid-feedback d-block"),role:"status"},e.children)}},82644:(e,t,n)=>{n.d(t,{b:()=>u,n:()=>l});var a=n(32735),r=n(92802),i=n(91967),o=n(1048);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var s=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function l(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,l=e.initialValues,u=e.onSubmit,m=s(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=o.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(o.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(l)):l,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,i=a.resetForm,o=a.setFieldError,s=n&&e.validationSchema?e.validationSchema.cast(t):t;u(s,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&i(),n.errors)for(var a=0,s=Object.entries(n.errors);a<s.length;a++){var l=(e=s[a],t=2,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=l[0],m=l[1];o(u,m)}r(!1)}))},initialStatus:p}),i.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}l.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),i=n(15611),o=n(18559),c=n(11607),s=n(83914),l=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},24833:(e,t,n)=>{var a;n.d(t,{C:()=>a}),function(e){e.RequestingAccess="requestingAccess",e.TeacherInvites="teacherInvites",e.AutomaticAccess="automaticAccess"}(a||(a={}))},23371:(e,t,n)=>{var a;n.d(t,{W:()=>a}),function(e){e.Request="request",e.AutoJoin="auto-join",e.NoRequest="no-request"}(a||(a={}))},99705:(e,t,n)=>{var a,r;n.d(t,{b:()=>r}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(r||(r={}))},93802:(e,t,n)=>{n.d(t,{y:()=>l});var a=n(75896),r=n(23371);function i(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e,t){return!!a.m.findWhere(t,{accessType:e})}function s(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a<t;a++)n[a-1]=arguments[a];return e.filter((function(e){return n.some((function(t){return t===e.accessType}))}))}var l={getInitialJoinRequests:function(e){var t=s(e,r.W.Request,r.W.NoRequest);return c(r.W.Request,t)?{selectedOption:"allowed",domains:t}:c(r.W.NoRequest,t)?{selectedOption:"none",domains:[]}:{selectedOption:"any",domains:[]}},getInitialAccessBehaviour:function(e){var t=s(e,r.W.AutoJoin);return c(r.W.AutoJoin,t)?{selectedOption:"allowed",domains:t}:{selectedOption:"none",domains:[]}},formatRequestData:function(e,t,n){var a=t.domains,o=t.selectedOption,c=s(e,r.W.AutoJoin),l=s(e,r.W.Request,r.W.NoRequest);if(n===r.W.Request){var u=[];switch(o){case"none":u=[{accessType:r.W.NoRequest,domain:""}];break;case"allowed":u=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.Request})}))}return[].concat(i(c),i(u))}if(n===r.W.AutoJoin){var m=[];return"allowed"===o&&(m=a.map((function(e){return Object.assign(Object.assign({},e),{accessType:r.W.AutoJoin})}))),[].concat(i(l),i(m))}}}},81803:(e,t,n)=>{n.d(t,{d:()=>f});var a=n(32735),r=n(81886),i=n(23481),o=n(49935),c=n(22902),s=n(14070),l=n(97291),u=n(96368);function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var d="settings.settingsLayout",p=function(e){var t=(0,c.T)().hasPermissions,n=(0,u.e)();if(e)return t(e);var a=r.Q.C$.getCurrentAppLink();return a.application!==l.O.SETTINGS||n.some((function(e){return e.modules.some((function(e){return"appLink"in e&&e.appLink.action===a.action}))}))};function f(e){var t,n=p(e.requiredPermissions);if(a.useEffect((function(){n||r.Q.C$.trigger({application:l.O.SETTINGS,action:s.e.Settings.HOME},{replace:!0})}),[n]),!n)return a.createElement(a.Fragment,null);var c,u=e.breadcrumbs.map((function(t,n){return{name:t,appLink:{application:l.O.SETTINGS,action:s.e.Settings.HOME},active:n===e.breadcrumbs.length-1}}));return a.createElement("div",{className:"px-3"},a.createElement("div",{className:"d-flex align-items-center justify-content-between"},a.createElement("h1",{className:"h2"},e.heading),null===(t=e.headingButton)||void 0===t?void 0:t.call(e)),a.createElement("div",{className:"pb-3"},a.createElement(o.Oo,{breadcrumbs:[{name:i.T.getPhrase(d,"settingsBreadcrumb"),appLink:{application:l.O.SETTINGS,action:s.e.Settings.HOME}}].concat((c=u,function(e){if(Array.isArray(e))return m(e)}(c)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(c)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}(c)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()))})),e.description&&a.createElement(a.Fragment,null,a.createElement("p",null,e.description),a.createElement("hr",null)),e.children)}},68598:(e,t,n)=>{n.d(t,{W:()=>s});var a=n(24833),r=n(14070),i=n(97291);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function c(e,t,n){return(t=function(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var s=c(c(c({},a.C.RequestingAccess,{application:i.O.SETTINGS,action:r.e.Settings.REQUESTING_ACCESS}),a.C.TeacherInvites,{application:i.O.SETTINGS,action:r.e.Settings.TEACHER_INVITES}),a.C.AutomaticAccess,{application:i.O.SETTINGS,action:r.e.Settings.AUTOMATIC_ACCESS})},71966:(e,t,n)=>{n.d(t,{B:()=>r});var a=n(99940),r={domains:function(e){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"domains",normalize:!1}},updateDomains:function(e,t){return{url:"{gateway}/v1/customers/".concat(e,"/approved-domains"),key:"update:domains",type:a.k.PUT,data:t,normalize:!1,invalidationKeys:["domains"]}}}},96268:(e,t,n)=>{n.d(t,{W:()=>l});var a=n(32735),r=n(81886),i=n(65858),o=n(37802),c=n(14070),s=n(97291);function l(){var e=(0,o.r)(i.LZ.Settings),t=e.isLoadingSettings,n=e.domainSettings;a.useEffect((function(){t||n||r.Q.C$.trigger({application:s.O.SETTINGS,action:c.e.Settings.HOME},{replace:!0})}),[n,t])}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=1400-43b37bfa8d-lite.chunk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1400-43b37bfa8d-lite.chunk.js","mappings":"2OAGMA,EAAc,IAAIC,OACtB,4DAGWC,EAAmB,SAACC,GAC/B,IAAQC,EAA4BD,EAA5BC,QAASC,EAAmBF,EAAnBE,eACXC,EAAyD,CAAEF,QAAS,IA4B1E,OA1BAA,EAAQG,SAAQ,SAACC,EAAQC,IACA,YAAnBJ,GAAiCG,EAAOA,UAGvCA,EAAOA,OAKYJ,EAAQM,MAC9B,SAACC,EAA+BC,GAAoB,OAClDA,IAAiBH,GACjBE,EAAcH,SAAWA,EAAOA,QAChCA,EAAOK,UAAU,IAGnBP,EAAOF,QAAQK,GAAS,CAAED,OAAQ,qBAI/BR,EAAYc,KAAKN,EAAOA,UAC3BF,EAAOF,QAAQK,GAAS,CAAED,OAAQ,mBAhBlCF,EAAOF,QAAQK,GAAS,CAAED,OAAQ,gBAmBtC,IAEOF,EAAOF,QAAQW,OAAST,EAAS,CAAC,CAC3C,E,kECrCA,SAAgB,qBAAuB,S,mnBCevC,IAAMU,EAAY,uBACZC,EAAYC,EAAA,mBAAiCF,GAU7CG,EAA+C,CACnD,oBAAqB,+BACrB,uBAAwB,iCACxB,iBAAkB,4BAClB,eAAgB,0BAChB,wBAAyB,CACvBC,iBAAkB,8CAClBC,gBAAiB,mDAaf,SAAU,EAAYC,GAC1B,IAAMC,GAAc,UACZd,EAAqEa,EAArEb,MAAOD,EAA8Dc,EAA9Dd,OAAQgB,EAAsDF,EAAtDE,KAAMC,EAAgDH,EAAhDG,SAAUC,EAAsCJ,EAAtCI,eAAgBC,EAAsBL,EAAtBK,kBAEjDC,EAAS,OACZC,EAAA,mBAAuCJ,EAASJ,gBAAgBS,QAChED,EAAA,kBAAsCJ,EAASL,iBAAiBU,QAG7DC,EAAc,CAClBC,YAAaP,EAASD,GAAMQ,YAC5BF,OAAQF,EAAUJ,GAClBS,KAAMR,EAASD,GAAMS,MAGvB,SAASC,EAAmBzB,GAC1B,OAAO,QAAMc,EAAYjB,OAAQ,WAAF,OAAaG,EAAK,WACnD,CA0CA,OACE,uBAAK0B,UAAW,wBACd,gBAACC,EAAA,EAAc,CACbC,KAAK,OACLC,KAAI,kBAAa7B,EAAK,WACtB0B,UAAS,uCAAkCD,EAAmBzB,GAAS,aAAe,IACtF8B,YAAatB,EAAU,qBACvBuB,MAAOhC,EAAOA,OACdiC,SAAU,SAAAC,GAAC,OAdjB,SAAsBA,EAAsCjC,GAC1DiC,EAAEC,iBACF,IAAMC,EAAa,+BAAwBpC,GAAM,CAAEA,OAAQkC,EAAEG,cAAcL,MAAO3B,YAAY,IAC9Fa,EAAekB,EAAenC,EAChC,CAUqBqC,CAAaJ,EAAGjC,EAAM,EACrCsC,aAAc,WAAF,OAAQpB,EAAkBlB,EAAM,EAC5CuC,aAAa,MACbC,gBAA2B,IAAVxC,KAAiBD,EAAOA,OAAM,sCACjBC,EAAK,kBAGnCyB,EAAmBzB,IACjB,gBAACyC,EAAA,EAAY,CAACZ,KAAI,kBAAa7B,EAAK,YAxD5C,SAA+BA,EAAeD,GAC5C,IAAM2C,EAAkBjB,EAAmBzB,GAC3C,OAAQ0C,GACN,IAAK,oBACL,IAAK,iBACL,IAAK,uBACL,IAAK,eACH,OACE,gBAACC,EAAA,EAAI,CACHpC,UAAWA,EACXqC,OAAQlC,EAAsBgC,GAC9BG,QAAS,CAAE9C,OAAAA,KAGjB,IAAK,wBACH,OACE,gCACE,gBAAC4C,EAAA,EAAI,CACHpC,UAAWA,EACXqC,OAASlC,EAAsBgC,GAA6B3B,GAC5D8B,QAAS,CAAE9C,OAAAA,KAEb,gBAAC+C,EAAA,EAAO,CACNC,QAASzB,EACTI,UAAU,2BAEV,gBAACiB,EAAA,EAAI,CAACpC,UAAWA,EAAWqC,OAAQ,kBAEtC,kCAIV,CAwBwDI,CAAsBhD,EAAOD,EAAOA,SAI9F,CC/GA,IAAM,EAAY,wBAWZ,SAAUkD,EAAapC,GAC3B,IAAMC,GAAc,UACZnB,EAAYmB,EAAYpB,OAAxBC,QACAoB,EAA8EF,EAA9EE,KAAMlB,EAAwEgB,EAAxEhB,OAAQmB,EAAgEH,EAAhEG,SAAUkC,EAAsDrC,EAAtDqC,eAAgBjC,EAAsCJ,EAAtCI,eAAgBC,EAAsBL,EAAtBK,kBAchE,OAZA,aAAgB,YACVrB,aAAM,EAANA,EAAQS,SACVT,EAAOC,SAAQ,SAAAqD,GACb,IAAMC,EAAaC,EAAA,YACjB1D,GACA,SAAAI,GAAM,OAAIA,EAAOK,YAAcL,EAAOA,SAAWoD,EAAMpD,MAAM,IAE/De,EAAYwC,cAAc,WAAD,OAAYF,EAAU,WAAWD,EAAMI,UAClE,GAEJ,GAAG,CAAC1D,IAGF,gCACE,gBAAC,KAAU,CACTgC,KAAK,UACL2B,OAAQ,WACN,OACE,gCACG7D,EAAQW,OAAS,GAChBX,EAAQ8D,KAAI,SAAC1D,EAAwBC,GAAK,OACxC,gBAAC,EAAW,CACV0D,IAAK1D,EACLD,OAAQA,EACRC,MAAOA,EACPgB,SAAUA,EACVC,eAAgBA,EAChBC,kBAAmBA,EACnBH,KAAMA,GACN,IAIZ,IAEF,2BACE,gBAAC4C,EAAA,EAAU,CACTC,QAAS,UACTlC,UAAS,8BACTmC,QAASX,GAET,gBAACP,EAAA,EAAI,CAACpC,UAAW,EAAWqC,OAAO,qBAK7C,C,eC5EA,SAAgB,iBAAmB,SCUnC,IAAM,EAAY,+BACZ,EAAYnC,EAAA,mBAAiC,GAW7CqD,EAAiC,CACrClD,gBAAiB,CACfmD,KAAM,CACJC,MAAO,2BACPC,YAAa,iCAEfC,QAAS,CACPF,MAAO,8BACPC,YAAa,sCAGjBtD,iBAAkB,CAChBoD,KAAM,CACJC,MAAO,wBACPC,YAAa,+BAEfC,QAAS,CACPF,MAAO,2BACPC,YAAa,kCAEfE,IAAK,CACHH,MAAO,uBACPC,YAAa,gCAeb,SAAU,EAAoBpD,GAClC,IAAQuD,EAA+EvD,EAA/EuD,OAAQxE,EAAuEiB,EAAvEjB,eAAgBmB,EAAuDF,EAAvDE,KAAMsD,EAAiDxD,EAAjDwD,eAAgBC,EAAiCzD,EAAjCyD,IAAKC,EAA4B1D,EAA5B0D,cAAeC,EAAa3D,EAAb2D,SAE1E,OACE,uBAAK9C,UAAU,QACb,gBAAC+C,EAAA,EAAS,CACR7C,KAAK,QACL8C,GAAIN,EACJJ,MAAO,EAAUF,EAAe/C,GAAMqD,GAAQJ,OAC9CtC,UAAU,YACVK,MAAOqC,EACPpC,SAAU,WAAF,OAAQuC,EAAcH,EAAO,EACrCO,QAAS/E,IAAmBwE,IAE7BxE,IAAmBwE,GAClB,gCACGC,GACC,qBAAG3C,UAAS,UAAK,mBAAuB,UACtC,gBAACiB,EAAA,EAAI,CAACpC,UAAW,EAAWqC,OAAQkB,EAAe/C,GAAMqD,GAAQH,cAAe,MAE7EK,GACD,qBAAG5C,UAAU,YAAYkD,OAAO,SAASC,KAAMP,GAC7C,gBAAC3B,EAAA,EAAI,CAACpC,UAAW,EAAWqC,OAAO,gBAK1C4B,GAKX,C,ytBCzEA,IAAM,EAAY,8BAQZM,EAAoB,OACvB1D,EAAA,mBAAuC,CACtC2C,KAAM,8BACNG,QAAS,iCACTC,IAAK,+BAEN/C,EAAA,kBAAsC,CACrC2C,KAAM,iCACNG,QAAS,sCAWb,SAASa,EAAmBlE,GAC1B,IAAQE,EAAoCF,EAApCE,KAAM8B,EAA8BhC,EAA9BgC,QAAShD,EAAqBgB,EAArBhB,OAAQmB,EAAaH,EAAbG,SACzBF,GAAc,UACpB,EAAoCA,EAAYpB,OAAxCC,EAAO,EAAPA,QAASC,EAAc,EAAdA,eAEjB,SAAS2E,EAAcxC,GACrBjB,EAAYkE,cAAc,iBAAkBjD,GAC5CjB,EAAYmE,UAAU,CAAC,GAElBtF,EAAQW,QACX4C,GAEJ,CAEA,SAASA,I,MACPpC,EAAYkE,cAAc,UAAW,GAAF,O,+CAAOrF,I,kjBAAO,CAAE,CAAEI,OAAQ,MAC/D,CAEA,SAASmB,EAAkBlB,GACrBL,EAAQW,OAAS,EACnBQ,EAAYkE,cAAc,UAAW3B,EAAA,sBAAgC1D,EAASK,IAE9Ec,EAAYkE,cAAc,UAAW3B,EAAA,uBAAiC1D,EAASK,EAAO,OAAF,wBAC/EL,EAAQK,IAAM,CAAED,OAAQ,OAE/BmF,EAAgBlF,EAClB,CAEA,SAASiB,EAAelB,EAAwBC,GAC9Cc,EAAYkE,cAAc,UAAW3B,EAAA,uBAAiC1D,EAASK,EAAOD,IACtFmF,EAAgBlF,EAClB,CAEA,SAASkF,EAAgBlF,GACvB,GAAIc,EAAYjB,OAAOF,QAAS,CAC9B,IAAMwF,EAAerE,EAAYjB,OAAOF,QAClCyF,EACJ/B,EAAA,sBAAyD8B,EAAcnF,GAEzEc,EAAYmE,UACVG,EAAoBC,QAAO,SAAAC,GAAG,OAAIA,CAAG,IAAEhF,OAClC,CAAEX,QAASyF,GACZ,CAAC,EAER,CACH,CAEA,OACE,gBAAC,KAAI,KACH,uBAAK1D,UAAU,iCACZmB,EAAQY,KAAI,SAAAW,GAAM,OACjB,uBAAKV,IAAKU,GACI,SAAXA,GACC,gBAAC,EAAmB,CAClBA,OAAQA,EACRxE,eAAgBA,EAChByE,gBAAc,EACdtD,KAAMA,EACNwD,cAAeA,IAGP,YAAXH,GACC,gBAAC,EAAmB,CAClBA,OAAQA,EACRxE,eAAgBA,EAChBmB,KAAMA,EACNsD,gBAAc,EACdC,IAAKiB,EAAA,iBAA6B,mBAAmC,YACrEhB,cAAeA,GAEf,gBAACtB,EAAY,CACXpD,OAAQA,EACRkB,KAAMA,EACNC,SAAUA,EACVkC,eAAgBA,EAChBjC,eAAgBA,EAChBC,kBAAmBA,KAIb,QAAXkD,GACC,gBAAC,EAAmB,CAClBA,OAAQA,EACRrD,KAAMA,EACNnB,eAAgBA,EAChByE,gBAAc,EACdC,IAAKiB,EAAA,iBAA6B,mBAAmC,YACrEhB,cAAeA,IAGf,IAGR,uBAAK7C,UAAU,UACb,uBAAKA,UAAU,mDACb,gBAACiB,EAAA,EAAI,CAACpC,UAAW,EAAWqC,OAAQkC,EAAqB/D,GAAMnB,QAIrE,gBAAC4F,EAAA,EAAW,CAAsBC,OAAO,EAAOC,QAAQ,SAG9D,CAcM,SAAUC,EAA0B9E,GACxC,IAAQ+E,EAAkE/E,EAAlE+E,cAAe7E,EAAmDF,EAAnDE,KAAM8B,EAA6ChC,EAA7CgC,QAAShD,EAAoCgB,EAApChB,OAAQmB,EAA4BH,EAA5BG,SAAU6E,EAAkBhF,EAAlBgF,cAExD,OACE,gBAACC,EAAA,EAAW,CACVF,cAAeA,EACfG,SAAUtG,EACVuG,kBAAkB,EAClBC,gBAAgB,EAChBC,SAAUL,GAEV,gBAACd,EAAkB,CAAChE,KAAMA,EAAM8B,QAASA,EAAShD,OAAQA,EAAQmB,SAAUA,IAGlF,C,8FCtKMT,EAAY,8BACZC,EAAY,qBAAiCD,GAO7C,SAAU4F,EAAmBtF,GACjC,IAAQuF,EAAqBvF,EAArBuF,OAAQpF,EAAaH,EAAbG,SAEhB,OACE,uBAAKU,UAAU,QACb,gBAAC,IAAe,CACd2E,KAAM,CAAC,CACLxE,KAAMrB,EAAU,oBAChBuC,QAAS/B,EAASL,iBAClByF,OAAmB,sBAAXA,EACRE,cAAe,CACbzE,KAAMrB,EAAU,oBAChB8D,IAAK,eAA2BtD,EAASL,mBAE3C4F,iBAAkB,CAChBC,WAAY,WACZC,OAAQ,SACRC,SAAU,iBAEX,CACD7E,KAAMrB,EAAU,kBAChBuC,QAAS/B,EAAS2F,eAClBP,OAAmB,oBAAXA,EACRE,cAAe,CACbzE,KAAM,cAA0BtB,EAAW,kBAC3C+D,IAAK,eAA2BtD,EAAS2F,iBAE3CJ,iBAAkB,CAChBC,WAAY,WACZC,OAAQ,SACRC,SAAU,iBAEX,CACD7E,KAAMrB,EAAU,mBAChBuC,QAAS/B,EAASJ,gBAClBwF,OAAmB,qBAAXA,EACRE,cAAe,CACbzE,KAAM,cAA0BtB,EAAW,mBAC3C+D,IAAK,eAA2BtD,EAASJ,kBAE3C2F,iBAAkB,CAChBC,WAAY,WACZC,OAAQ,SACRC,SAAU,oBAMtB,C,kDCjEM,SAAUE,IACd,OACE,uBAAKC,QAAQ,aACX,wBAAMC,EAAE,oSAGd,C,ICIanF,EAAiB,cAAiB,SAC7Cd,EACAkG,GAEA,IAAQzE,EAAiEzB,EAAjEyB,aAAcE,EAAmD3B,EAAnD2B,gBAAiBwE,EAAkCnG,EAAlCmG,eAAmBC,E,yUAAU,CAAKpG,EAAnE,qDAEN,OACE,uBAAKa,UAAU,qBACb,yCACMuF,EAAU,CACdF,IAAKA,EACLrF,UAAS,UAAKb,EAAMa,UAAS,YCtBiB,eDwB5Cb,EAAMkB,OAASS,IACjB,wBACEd,UAAS,UC1BU,QD0BY,4DAAoDsF,GAAkB,IACrGE,KAAK,SACLrD,QAASvB,EACT6E,UAAW,SAAClF,GAAsB,MAAe,UAAVA,EAAEyB,KAAmBpB,GAAc,EAC1E8E,SAAU,GAEV,uBAAK1F,UAAU,mCACb,gBAACkF,EAAS,QAMtB,G,6FE7BMrG,EAAY,qBAUZ,SAAUiF,EAAuC3E,GACrD,IAAMC,GAAc,UAEduG,GAAY,OAAiBvG,GAEnC,OACE,gBAAC,IAAa,CACZ4E,QAAS7E,EAAM6E,SAAW,UAC1B9D,KAAK,SACL0F,UAAWD,EACXE,KAAM1G,EAAM0G,KACZ7F,UAAWb,EAAMa,UAAYb,EAAMa,UAAY,GAC/C8F,YAAa1G,EAAY2G,cAExB5G,EAAM6G,WACH,gCAAG7G,EAAM6G,YACT,gBAAC,IAAI,CAACnH,UAAWA,EAAWqC,OAAQ/B,EAAM4E,MAAQ,SAAW,SAGvE,C,kDCjCM,SAAUhD,EAAa5B,GAC3B,OACE,wBAAM6D,GAAE,UAAK7D,EAAMgB,KAAI,SAASH,UAAS,UAAKb,EAAMa,UAAS,6BAA6BwF,KAAK,UAAUrG,EAAM2D,SAEnH,C,ghBC+CM,SAAUsB,EAIdjF,GACA,IAAQ8G,EAAmF9G,EAAnF8G,kBAAmBC,EAAgE/G,EAAhE+G,mBAAoBhC,EAA4C/E,EAA5C+E,cAAeM,EAA6BrF,EAA7BqF,SAAapF,EAAW,EAAKD,EAArF,uEAMAgH,EAAqCF,GAAqB9G,EAAMiH,iBAClEjH,EAAMiH,iBAAiBC,KA3D7B,SAA4DnC,GAC1D,IAAKA,EACH,MAAO,CAAC,EAEV,IAAMlG,EAAS,cAAuBkG,GAetC,OAbA,SAASoC,EAAgBC,GACvBC,OAAOC,KAAKzI,GAAQI,SAAQ,SAAC4D,GACtBhE,EAAO0I,eAAe1E,KAGvB,aAAsBuE,EAAMvE,IAC9BsE,EAAgBC,EAAMvE,IACC,OAAhBhE,EAAOgE,WACPhE,EAAOgE,GAClB,GACF,CAEAsE,CAAgBtI,GACTA,CACT,CAuCkC2I,CAAsBzC,IAClDA,EA4BE0C,EAA+B,CACnCC,mBAAoB1H,EAAM0H,oBAG5B,OACE,gBAAC,KAAM,eACLC,oBAAkB,GACb1H,EAA6D,CAClE8E,cAAeiC,EACf3B,SAnCoB,SACtBxG,EAAkB,GAEhB,IADA+I,EAAa,EAAbA,cAAeC,EAAS,EAATA,UAAWpF,EAAa,EAAbA,cAOtBqF,EAAgBf,GAAsB/G,EAAMiH,iBAC9CjH,EAAMiH,iBAAiBC,KAAKrI,GAC5BA,EAEJwG,EAASyC,GAAe,WAAoD,I,IAAnD9F,EAAA,uDAA6C,CAAC,EAGrE,GAFAA,EAAQ+F,OAASF,IAEb7F,EAAQhD,OACV,IAAK,IAAL,MAA6BqI,OAAOW,QAAQhG,EAAQhD,QAAO,eAAE,CAAxD,O,EAAA,K,EAAA,E,o4BAAQ6D,EAAG,KAAE3B,EAAK,KACrBuB,EAAcI,EAAK3B,EACpB,CAGH0G,GAAc,EAChB,GACF,EAYIH,cAAeA,IAEd,eAA0BzH,EAAM2D,UAC7B,SAACsE,GAA0B,OAAMjI,EAAM2D,SAA6DsE,EAAE,EACtG,iBAAqBjI,EAAM2D,UAAY3D,EAAM2D,SAAW,KAIlE,CAEM,SAAUuE,IACd,OAAO,SACT,CApEAjD,EAAYkD,aAAe,CACzBrB,mBAAmB,EACnBC,oBAAoB,E,oHCnCtB,SAASqB,EAAYpI,GACnB,OACE,kCACKA,EAAMqI,IAAItF,SACX,uBAAKlC,UAAWb,EAAMqI,IAAIrH,KAAO,OAAS,IACxC,gBAAC,IAAY,CAAC+B,QAAS/C,EAAMqI,IAAItF,WAIpC/C,EAAMqI,IAAIrH,KAEmB,iBAArBhB,EAAMqI,IAAIC,OACjB,uBAAKzH,UAAU,QACb,gBAAC,IAAK,CAACE,KAAM,UAAiBwH,KAAMvI,EAAMqI,IAAIC,SAKxD,CA8BM,SAAUE,EAAgBxI,G,MAW9B,OACE,uBAAKa,UAA0B,QAAf,EAAAb,EAAMa,iBAAS,QAAI,GAAIqF,IAAKlG,EAAMyI,cAChD,sBAAI5H,UAAS,qDACwB,oBAAsB,qBACvDb,EAAM0I,aAAe,gBAAqB,GAAE,qBAC5C1I,EAAM2I,cAAa,aAEpB3I,EAAMwF,KAAK5C,KAAI,SAACyF,EAAKlJ,GACpB,OACE,sBACE0B,UAAS,gCACD,QAAU,YAAIwH,EAAI9C,OAAS,eAAiB,uBAAsB,6BACtE8C,EAAIrH,KAAO,aAAkB,GAAE,YAAIqH,EAAIxH,UAAS,oBAEpDgC,IAAK1D,GAEJkJ,EAAInG,QACH,gBAAC,IAAO,CACNA,QAASmG,EAAInG,QACbuD,cAAe4C,EAAI5C,cACnBC,iBAAkB2C,EAAI3C,iBACtB7E,UAAS,sKAE4C,YAAc,yBAGnE,gBAACuH,EAAW,CAACC,IAAKA,KAGpB,gBAAC,IAAS,CACRxH,UAAS,sKAE4C,YAAc,wBAEnEmC,QAAS,WAAF,OA5CvB,SAAqBqF,IACfA,EAAI9C,QAAW8C,EAAIO,WAGvBP,EAAIO,WAEAP,EAAI5C,eAAiB4C,EAAI3C,kBAC3B,kBAA8B2C,EAAI5C,cAAe4C,EAAI3C,kBACzD,CAoC+BmD,CAAYR,EAAI,GAE/B,gBAACD,EAAW,CAACC,IAAKA,KAK5B,KAIR,CA5DAG,EAAgBL,aAAe,CAC7BO,aAAc,K,kBCjEhB,IAAYnI,E,iBAAZ,SAAYA,GACV,sCACA,kCACA,mCACD,CAJD,CAAYA,IAAAA,EAAmB,I,kBCA/B,IAAYuI,E,iBAAZ,SAAYA,GACV,oBACA,uBACA,wBACD,CAJD,CAAYA,IAAAA,EAAU,I,kBCEtB,IAAYC,EAcAC,E,iBAdZ,SAAYD,GACV,+BACA,kCAGA,+BACA,6BACA,+BACA,uCACA,+BACA,8BACA,8BACD,CAZD,CAAYA,IAAAA,EAAoB,KAchC,SAAYC,GACV,+BACA,6BACA,kCACA,kCACA,yCACA,+BACA,uCACA,iCACA,sCACA,kCACA,qCACA,6BACA,mCACA,sCACA,2BACA,yCACD,CAjBD,CAAYA,IAAAA,EAAkB,I,2xBCX9B,SAASC,EAAIC,EAAwBpK,GACnC,QAAS,cAAsBA,EAAS,CAAEoK,WAAAA,GAC5C,CAEA,SAASC,EAAmBrK,GAAuD,2BAAzBsK,EAAyB,iCAAzBA,EAAyB,kBACjF,OAAOtK,EAAQ0F,QAAO,SAAAtF,GAAM,OAAIkK,EAAYC,MAAK,SAAAH,GAAU,OAAIA,IAAehK,EAAOgK,UAAU,GAAC,GAClG,CAEO,IAAMI,EAA2B,CACtCC,uBAAsB,SAACzK,GACrB,IAAM0K,EAAkBL,EAAmBrK,EAAS,YAAoB,eAExE,OAAImK,EAAI,YAAoBO,GACnB,CAAEzK,eAAgB,UAAWD,QAAS0K,GAE3CP,EAAI,cAAsBO,GACrB,CAAEzK,eAAgB,OAAQD,QAAS,IAErC,CAAEC,eAAgB,MAAOD,QAAS,GAC3C,EACA2K,0BAAyB,SAAC3K,GACxB,IAAM0K,EAAkBL,EAAmBrK,EAAS,cAEpD,OAAImK,EAAI,aAAqBO,GACpB,CAAEzK,eAAgB,UAAWD,QAAS0K,GAExC,CAAEzK,eAAgB,OAAQD,QAAS,GAC5C,EACA4K,kBAAiB,SACfC,EACA9K,EACAqK,GAEA,IAAQpK,EAA4BD,EAA5BC,QAASC,EAAmBF,EAAnBE,eACX6K,EAAsBT,EAAmBQ,EAAa,cACtDE,EAAqBV,EAAmBQ,EAAa,YAAoB,eAE/E,GAAIT,IAAe,YAAoB,CACrC,IAAIY,EAAmC,GACvC,OAAQ/K,GACN,IAAK,OACH+K,EAAiB,CAAC,CAAEZ,WAAY,cAAsBhK,OAAQ,KAC9D,MACF,IAAK,UACH4K,EAAiBhL,EAAQ8D,KAAI,SAAA1D,GAAM,OAAI,+BAAMA,GAAM,CAAEgK,WAAY,aAAkB,IAIvF,MAAO,GAAP,SAAYU,GAAmB,EAAKE,GACrC,CAED,GAAIZ,IAAe,aAAqB,CACtC,IAAIa,EAAoC,GAOxC,MALO,YADChL,IAEJgL,EAAkBjL,EAAQ8D,KAAI,SAAA1D,GAAM,OAAI,+BAAMA,GAAM,CAAEgK,WAAY,cAAmB,KAIlF,GAAP,SAAYW,GAAkB,EAAKE,GACpC,CACH,E,qOCpDF,IAAMrK,EAAY,0BAKLsK,EAAuB,SAACC,GACnC,IAAQC,GAAmB,SAAnBA,eACFC,GAAiB,SAOvB,GAAIF,EACF,OAAOC,EAAeD,GAExB,IAAMG,EAAe,2BAOrB,OAAIA,EAAa1J,cAAgB,cAG1ByJ,EAAed,MAAK,SAAAgB,GACzB,OAAOA,EAAMC,QAAQjB,MAAK,SAAAkB,GACxB,MAAI,YAAaA,GACRA,EAAerI,QAAQ1B,SAAW4J,EAAa5J,MAI1D,GACF,GACF,EAUM,SAAUgK,EAAexK,G,MACvByK,EAAYT,EAAqBhK,EAAMiK,qBAW7C,GATA,aAAgB,WACTQ,GACH,eAA2B,CACzB/J,YAAa,aACbF,OAAQ,mBACP,CAAEkK,SAAS,GAElB,GAAG,CAACD,KAECA,EACH,OAAO,iCAET,I,EAAME,EAAc3K,EAAM2K,YAAY/H,KAAI,SAAC5B,EAAM4J,GAAC,MAAM,CACtD5J,KAAAA,EACAkB,QAAS,CACPxB,YAAa,aACbF,OAAQ,mBAEV+E,OAAQqF,IAAM5K,EAAM2K,YAAYlL,OAAS,EAC1C,IAED,OACE,uBAAKoB,UAAU,QACb,uBAAKA,UAAU,qDACb,sBAAIA,UAAU,MAAMb,EAAM6K,SACN,QAAnB,EAAA7K,EAAM8K,qBAAa,wBAEtB,uBAAKjK,UAAU,QACb,gBAAC,KAAW,CACV8J,YAAW,CACT,CACE3J,KAAM,cAA0BtB,EAAW,sBAC3CwC,QAAS,CACPxB,YAAa,aACbF,OAAQ,qBAEX,Q,EACEmK,E,wmBAIR3K,EAAMoD,aACL,gCACE,yBAAIpD,EAAMoD,aACV,4BAIHpD,EAAM2D,SAGb,C,2rBC3GO,IAAMoH,EAAsB,SAChC,qBAAuC,CACtCrK,YAAa,aACbF,OAAQ,iCAET,mBAAqC,CACpCE,YAAa,aACbF,OAAQ,+BAET,oBAAsC,CACrCE,YAAa,aACbF,OAAQ,+B,kDCbCwK,EAAiB,CAC5BlM,QAAO,SAACmM,GACN,MAAO,CACLxH,IAAK,0BAAF,OAA4BwH,EAAU,qBACzCpI,IAAK,UACLqI,WAAW,EAEf,EACAC,cAAa,SACXF,EACA1C,GAEA,MAAO,CACL9E,IAAK,0BAAF,OAA4BwH,EAAU,qBACzCpI,IAAK,iBACL9B,KAAM,QACNwH,KAAAA,EACA2C,WAAW,EACXE,iBAAkB,CAAC,WAEvB,E,yGCdI,SAAUC,IACd,OAA8C,OAAY,eAAlDC,EAAiB,EAAjBA,kBAAmBC,EAAc,EAAdA,eAE3B,aAAgB,WACVD,GAGCC,GACH,eAA2B,CACzB7K,YAAa,aACbF,OAAQ,mBACP,CAAEkK,SAAS,GAElB,GAAG,CAAEa,EAAgBD,GACvB,C,mCCxBA,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,Q","sources":["file:///app/packages/libs/shared/src/utils/validation/DomainSettingsValidationSchema.ts","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/domain-field/DomainField.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-fields/DomainFields.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.scss","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-radio/DomainSettingsRadio.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-form/DomainSettingsForm.tsx","file:///app/packages/libs/shared/src/apps/domain-settings/domain-settings-tabs/DomainSettingsTabs.tsx","file:///app/packages/libs/shared/src/images/components/CloseIcon.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/ClearableInput.tsx","file:///app/packages/libs/shared/src/apps/sign-up/components/general/clear-input/clearable-input.scss","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/AccessSettingsGroup.ts","file:///app/packages/libs/shared/src/enums/AccessType.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/DomainSettingsFormHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/constants/AccessSettingsAppLinks.ts","file:///app/packages/projects/lite/src/apps/settings/flight-requests/DomainRequests.ts","file:///app/packages/projects/lite/src/apps/settings/hooks/useDomainSettingsSwitch.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nconst domainRegex = new RegExp(\n /^(?!-)[A-Za-z0-9-]+([\\-\\.]{1}[a-z0-9]+)*\\.[A-Za-z]{2,6}$/\n);\n\nexport const DomainValidation = (values: DomainSettingsModel) => {\n const { domains, selectedOption } = values;\n const errors: { domains: { domain: ApprovedDomainError }[] } = { domains: []};\n\n domains.forEach((domain, index: number) => {\n if (selectedOption !== 'allowed' && !domain.domain)\n return;\n\n if (!domain.domain) {\n errors.domains[index] = { domain: 'domain-empty' };\n return;\n }\n\n const duplicateDomain = domains.find(\n (currentDomain: ApprovedDomain, currentIndex: number) =>\n currentIndex !== index &&\n currentDomain.domain === domain.domain &&\n domain.hasChanged\n );\n if (duplicateDomain) {\n errors.domains[index] = { domain: 'domain-duplicated' };\n return;\n }\n\n if (!domainRegex.test(domain.domain)) {\n errors.domains[index] = { domain: 'domain-invalid' };\n return;\n }\n });\n\n return errors.domains.length ? errors : {};\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"domainFieldContainer\":\"F9EW7\"};","import React from 'react';\nimport { getIn, useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ClearableInput } from 'libs/shared/apps/sign-up/components/general/clear-input/ClearableInput';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainError } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\n\nimport styles from './DomainField.scss';\n\nconst namespace = 'settings.domainField';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ViewMap = {\n [key in AccessSettingsGroup]?: string;\n}\n\ntype ErrorMessagePhraseMap = {\n [key in ApprovedDomainError]?: string | ViewMap;\n};\n\nconst errorMessagePhraseMap: ErrorMessagePhraseMap = {\n 'domain-duplicated': 'domainDuplicatedErrorMessage',\n 'domain-not-certified': 'domainNotCertifiedErrorMessage',\n 'domain-invalid': 'domainInvalidErrorMessage',\n 'domain-empty': 'domainEmptyErrorMessage',\n 'domain-already-exists': {\n requestingAccess: 'joinRequestsDomainAlreadyExistsErrorMessage',\n automaticAccess: 'accessBehaviourDomainAlreadyExistsErrorMessage'\n }\n};\n\ninterface DomainFieldProps {\n index: number,\n domain: ApprovedDomain,\n view: AccessSettingsGroup\n appLinks: AccessSettingAppLinks\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainField(props: DomainFieldProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { index, domain, view, appLinks, onChangeDomain, removeDomainField } = props;\n \n const actionMap: { [view: string]: string } = {\n [AccessSettingsGroup.RequestingAccess]: appLinks.automaticAccess.action,\n [AccessSettingsGroup.AutomaticAccess]: appLinks.requestingAccess.action\n };\n\n const viewAppLink = {\n application: appLinks[view].application,\n action: actionMap[view],\n args: appLinks[view].args\n };\n \n function getDomainErrorCode(index: number): ApprovedDomainError {\n return getIn(formikProps.errors, `domains.${index}.domain`);\n }\n\n function getDomainErrorMessage(index: number, domain: string): JSX.Element {\n const domainErrorCode = getDomainErrorCode(index);\n switch (domainErrorCode) {\n case 'domain-duplicated':\n case 'domain-invalid':\n case 'domain-not-certified':\n case 'domain-empty':\n return (\n <Text\n namespace={namespace}\n phrase={errorMessagePhraseMap[domainErrorCode] as string}\n options={{ domain }}\n />\n );\n case 'domain-already-exists':\n return (\n <>\n <Text\n namespace={namespace}\n phrase={(errorMessagePhraseMap[domainErrorCode] as ViewMap)[view]}\n options={{ domain }}\n />\n <AppLink\n appLink={viewAppLink}\n className='text-red text-underline'\n >\n <Text namespace={namespace} phrase={'viewLinkText'}/>\n </AppLink>\n <span>.</span>\n </>\n );\n }\n }\n\n function handleChange(e: React.FormEvent<HTMLInputElement>, index: number) {\n e.preventDefault();\n const updatedDomain: ApprovedDomain = { ...domain, domain: e.currentTarget.value, hasChanged: true };\n onChangeDomain(updatedDomain, index);\n }\n\n return (\n <div className={styles.domainFieldContainer}>\n <ClearableInput\n type='text'\n name={`domains.${index}.domain`}\n className={`form-control form-control-lg ${getDomainErrorCode(index) ? 'is-invalid' : ''}`}\n placeholder={getPhrase('domainPlaceholder')}\n value={domain.domain}\n onChange={e => handleChange(e, index)}\n onClickClear={() => removeDomainField(index)}\n autoComplete='off'\n showClearButton={index !== 0 || !!domain.domain}\n aria-errormessage={`domains.${index}.domainError`}\n />\n {\n getDomainErrorCode(index) &&\n <FormFeedback name={`domains.${index}.domain`}>{getDomainErrorMessage(index, domain.domain)}</FormFeedback>\n }\n </div>\n );\n}","import React from 'react';\nimport { FieldArray, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { DomainField } from './domain-field/DomainField';\n\nconst namespace = 'settings.domainFields';\n\ninterface DomainFieldsProps {\n errors: ApprovedDomainErrorResponse[],\n view: AccessSettingsGroup,\n appLinks: AccessSettingAppLinks\n addDomainField: () => void,\n onChangeDomain: (domain: ApprovedDomain, index: number) => void,\n removeDomainField: (index: number) => void,\n}\n\nexport function DomainFields(props: DomainFieldsProps) {\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains } = formikProps.values;\n const { view, errors, appLinks, addDomainField, onChangeDomain, removeDomainField } = props;\n\n React.useEffect(() => {\n if (errors?.length) {\n errors.forEach(error => {\n const errorIndex = ArrayHelper.findIndex(\n domains,\n domain => domain.hasChanged && domain.domain === error.domain\n );\n formikProps.setFieldError(`domains.${errorIndex}.domain`, error.errorCode);\n });\n }\n }, [errors]);\n\n return (\n <>\n <FieldArray\n name='domains'\n render={() => {\n return (\n <>\n {domains.length > 0 &&\n domains.map((domain: ApprovedDomain, index) => (\n <DomainField\n key={index}\n domain={domain}\n index={index}\n appLinks={appLinks}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n view={view}\n />\n ))}\n </>\n );\n }}\n />\n <div>\n <IconButton\n svgName={cvSvgLibrary.Plus}\n className={`ms-3 btn btn-link text-info`}\n onClick={addDomainField}\n >\n <Text namespace={namespace} phrase='addButtonLabel' />\n </IconButton>\n </div>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"radioDescription\":\"Q4JXA\"};","import React from 'react';\nimport { FormCheck } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nimport styles from './DomainSettingsRadio.scss';\n\nconst namespace = 'settings.domainSettingsRadio';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype RadioPhraseMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: {\n label: string,\n description?: string\n }\n }\n}\n\nconst radioPhraseMap: RadioPhraseMap = {\n automaticAccess: {\n none: {\n label: 'accessBehaviourNoneLabel',\n description: 'accessBehaviorNoneDescription'\n },\n allowed: {\n label: 'accessBehaviourAllowedLabel',\n description: 'accessBehaviourAllowedDescription'\n }\n },\n requestingAccess: {\n none: {\n label: 'joinRequestsNoneLabel',\n description: 'joinRequestsNoneDescription'\n },\n allowed: {\n label: 'joinRequestsAllowedLabel',\n description: 'joinRequestsAllowedDescription'\n },\n any: {\n label: 'joinRequestsAnyLabel',\n description: 'joinRequestsAnyDescription'\n }\n }\n};\n\ninterface DomainSettingsRadioProps {\n option: DomainSettingsOption;\n selectedOption: DomainSettingsOption;\n view: AccessSettingsGroup,\n hasDescription?: boolean;\n url?: string;\n onSelectValue: (option: DomainSettingsOption) => void;\n children?: JSX.Element;\n}\n\nexport function DomainSettingsRadio(props: DomainSettingsRadioProps) {\n const { option, selectedOption, view, hasDescription, url, onSelectValue, children } = props;\n\n return (\n <div className='mb-3'>\n <FormCheck\n type='radio'\n id={option}\n label={getPhrase(radioPhraseMap[view][option].label)}\n className='fw-normal'\n value={option}\n onChange={() => onSelectValue(option)}\n checked={selectedOption === option}\n />\n {selectedOption === option && (\n <>\n {hasDescription && (\n <p className={`${styles.radioDescription} mb-0`}>\n <Text namespace={namespace} phrase={radioPhraseMap[view][option].description} />\n &nbsp;\n {!!url &&\n <a className='text-info' target='_blank' href={url}>\n <Text namespace={namespace} phrase='learnMore' />\n </a>\n }\n </p>\n )}\n {children}\n </>\n )}\n </div>\n );\n}\n","import React from 'react';\nimport { Form, FormikErrors, useFormikContext } from 'formik';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\nimport { ApprovedDomain, DomainSettingsModel, DomainSettingsOption } from 'libs/shared/interfaces/domains/ApprovedDomain';\nimport { ApprovedDomainErrorResponse } from 'libs/shared/interfaces/domains/ApprovedDomainErrorResponse';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\nimport { DomainValidation } from 'libs/shared/utils/validation/DomainSettingsValidationSchema';\n\nimport { DomainFields } from '../domain-fields/DomainFields';\nimport { DomainSettingsRadio } from '../domain-settings-radio/DomainSettingsRadio';\n\nconst namespace = 'settings.domainSettingsForm';\n\ntype InfoMessageMap = {\n [key in AccessSettingsGroup]?: {\n [key in DomainSettingsOption]?: string;\n }\n}\n\nconst infoMessagePhraseMap: InfoMessageMap = {\n [AccessSettingsGroup.RequestingAccess]: {\n none: 'joinRequestsNoneInfoMessage',\n allowed: 'joinRequestsAllowedInfoMessage',\n any: 'joinRequestsAnyInfoMessage'\n },\n [AccessSettingsGroup.AutomaticAccess]: {\n none: 'accessBehaviourNoneInfoMessage',\n allowed: 'accessBehaviourAllowedInfoMessage'\n }\n};\n\ninterface DomainSettingsFormProps {\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors: ApprovedDomainErrorResponse[]\n appLinks: AccessSettingAppLinks\n}\n\nfunction DomainSettingsForm(props: DomainSettingsFormProps): JSX.Element {\n const { view, options, errors, appLinks } = props;\n const formikProps = useFormikContext<DomainSettingsModel>();\n const { domains, selectedOption } = formikProps.values;\n\n function onSelectValue(value: DomainSettingsOption): void {\n formikProps.setFieldValue('selectedOption', value);\n formikProps.setErrors({});\n\n if (!domains.length) {\n addDomainField();\n }\n }\n\n function addDomainField() {\n formikProps.setFieldValue('domains', [ ...domains, { domain: '' }]);\n }\n\n function removeDomainField(index: number) {\n if (domains.length > 1) {\n formikProps.setFieldValue('domains', ArrayHelper.removeItemFromIndex(domains, index));\n } else {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, {\n ...domains[index], domain: '' }));\n }\n clearFieldError(index);\n }\n\n function onChangeDomain(domain: ApprovedDomain, index: number) {\n formikProps.setFieldValue('domains', ArrayHelper.cloneAndReplaceAtIdx(domains, index, domain));\n clearFieldError(index);\n }\n \n function clearFieldError(index: number) {\n if (formikProps.errors.domains) {\n const domainErrors = formikProps.errors.domains as Partial<ApprovedDomain>[];\n const updatedDomainErrors =\n ArrayHelper.removeItemFromIndex<Partial<ApprovedDomain>>(domainErrors, index);\n \n formikProps.setErrors(\n updatedDomainErrors.filter(err => err).length\n ? ({ domains: updatedDomainErrors } as FormikErrors<DomainSettingsModel>)\n : {}\n );\n }\n }\n\n return (\n <Form>\n <div className='col-12 col-md-7 card p-3 mb-3'>\n {options.map(option => (\n <div key={option}>\n {option === 'none' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n hasDescription\n view={view}\n onSelectValue={onSelectValue}\n />\n )}\n {option === 'allowed' && (\n <DomainSettingsRadio\n option={option}\n selectedOption={selectedOption}\n view={view}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n >\n <DomainFields\n errors={errors}\n view={view}\n appLinks={appLinks}\n addDomainField={addDomainField}\n onChangeDomain={onChangeDomain}\n removeDomainField={removeDomainField}\n />\n </DomainSettingsRadio>\n )}\n {option === 'any' && (\n <DomainSettingsRadio\n option={option}\n view={view}\n selectedOption={selectedOption}\n hasDescription\n url={ArticleHelper.getLiteArticle(LiteSupportArticle.AccessSettings, 'articles')}\n onSelectValue={onSelectValue}\n />\n )}\n </div>\n ))}\n\n <div className='d-flex'>\n <div className='rounded p-2 bg-light-blue text-info fw-semibold'>\n <Text namespace={namespace} phrase={infoMessagePhraseMap[view][selectedOption]} />\n </div>\n </div>\n </div>\n <FormButtons<DomainSettingsModel> isNew={false} variant='dark'/>\n </Form>\n );\n}\n\ninterface DomainSettingsProps {\n initialValues: DomainSettingsModel,\n view: AccessSettingsGroup,\n options: DomainSettingsOption[],\n errors?: ApprovedDomainErrorResponse[],\n appLinks: AccessSettingAppLinks\n onSaveChanges: (\n values: DomainSettingsModel,\n onDone: (options?: FormSubmissionOptions<DomainSettingsModel>) => void\n ) => void,\n}\n\nexport function DomainSettingsFormWrapper(props: DomainSettingsProps) {\n const { initialValues, view, options, errors, appLinks, onSaveChanges } = props;\n\n return (\n <FormWrapper<DomainSettingsModel>\n initialValues={initialValues}\n validate={DomainValidation}\n validateOnChange={false}\n validateOnBlur={false}\n onSubmit={onSaveChanges}\n >\n <DomainSettingsForm view={view} options={options} errors={errors} appLinks={appLinks}></DomainSettingsForm>\n </FormWrapper>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { AccessSettingAppLinks } from 'libs/shared/interfaces/domains/AccessSettingAppLinks';\n\nconst namespace = 'settings.domainSettingsTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DomainSettingsTabsProps {\n active: 'requesting-access' | 'teacher-invites' | 'automatic-access',\n appLinks: AccessSettingAppLinks\n}\n\nexport function DomainSettingsTabs(props: DomainSettingsTabsProps): JSX.Element {\n const { active, appLinks } = props;\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={[{\n name: getPhrase('requestingAccess'),\n appLink: appLinks.requestingAccess,\n active: active === 'requesting-access',\n analyticsData: {\n name: getPhrase('requestingAccess'),\n url: Core.AppLinkHelper.getHref(appLinks.requestingAccess)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('teacherInvites'),\n appLink: appLinks.teacherInvites,\n active: active === 'teacher-invites',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'teacherInvites'),\n url: Core.AppLinkHelper.getHref(appLinks.teacherInvites)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('automaticAccess'),\n appLink: appLinks.automaticAccess,\n active: active === 'automatic-access',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'automaticAccess'),\n url: Core.AppLinkHelper.getHref(appLinks.automaticAccess)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }]}\n />\n </div>\n );\n}","import React from 'react';\n\nexport function CloseIcon(): JSX.Element {\n return (\n <svg viewBox='0 0 24 24'>\n <path d='M11.959 10.641l4.402-4.296a.964.964 0 0 1 1.358 0 .951.951 0 0 1 0 1.35l-4.403 4.297 4.403 4.378a.951.951 0 0 1 0 1.35.964.964 0 0 1-1.358 0l-4.402-4.378-4.32 4.378a.964.964 0 0 1-1.358 0 .951.951 0 0 1 0-1.35l4.32-4.378-4.32-4.362a.951.951 0 0 1 0-1.35.964.964 0 0 1 1.358 0l4.32 4.361z'/>\n </svg>\n );\n}","import React from 'react';\n\nimport { CloseIcon } from 'libs/shared/images/components/CloseIcon';\n\nimport styles from './clearable-input.scss';\n\ninterface ClearInputProps extends React.HTMLProps<HTMLInputElement> {\n showClearButton?: boolean;\n onClickClear: () => void;\n clearClassName?: string;\n}\n\nexport const ClearableInput = React.forwardRef((\n props: ClearInputProps,\n ref: React.ForwardedRef<HTMLInputElement>\n) => {\n const { onClickClear, showClearButton, clearClassName, ...inputProps } = props;\n\n return (\n <div className='position-relative'>\n <input\n {...inputProps}\n ref={ref}\n className={`${props.className} ${styles.clearableInput}`}\n />\n {(!!props.value || showClearButton) &&\n <span\n className={`${styles.clearInput} position-absolute cursor-pointer text-secondary ${clearClassName || ''}`}\n role='button'\n onClick={onClickClear}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClickClear()}\n tabIndex={0}\n >\n <div className='d-inline-block svg-container md'>\n <CloseIcon />\n </div>\n </span>\n }\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"clearInput\":\"ygMgF\",\"clearableInput\":\"aYpO7\"};","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","export enum AccessSettingsGroup {\n RequestingAccess = 'requestingAccess',\n TeacherInvites = 'teacherInvites',\n AutomaticAccess = 'automaticAccess'\n}","export enum AccessType {\n Request = 'request',\n AutoJoin = 'auto-join',\n NoRequest = 'no-request'\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 = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AccessType } from 'libs/shared/enums/AccessType';\nimport { ApprovedDomain, DomainSettingsModel } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nfunction has(accessType: AccessType, domains: ApprovedDomain[]): boolean {\n return !!ArrayHelper.findWhere(domains, { accessType });\n}\n\nfunction getFilteredDomains(domains: ApprovedDomain[], ...accessTypes: AccessType[]): ApprovedDomain[] {\n return domains.filter(domain => accessTypes.some(accessType => accessType === domain.accessType));\n}\n\nexport const DomainSettingsFormHelper = {\n getInitialJoinRequests(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.Request, AccessType.NoRequest);\n \n if (has(AccessType.Request, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n if (has(AccessType.NoRequest, filteredDomains))\n return { selectedOption: 'none', domains: []};\n \n return { selectedOption: 'any', domains: []};\n },\n getInitialAccessBehaviour(domains: ApprovedDomain[]): DomainSettingsModel {\n const filteredDomains = getFilteredDomains(domains, AccessType.AutoJoin);\n\n if (has(AccessType.AutoJoin, filteredDomains))\n return { selectedOption: 'allowed', domains: filteredDomains };\n\n return { selectedOption: 'none', domains: []};\n },\n formatRequestData(\n prevDomains: ApprovedDomain[],\n values: DomainSettingsModel,\n accessType: AccessType\n ): ApprovedDomain[] {\n const { domains, selectedOption } = values;\n const prevAutoJoinDomains = getFilteredDomains(prevDomains, AccessType.AutoJoin);\n const prevRequestDomains = getFilteredDomains(prevDomains, AccessType.Request, AccessType.NoRequest);\n\n if (accessType === AccessType.Request) {\n let requestDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'none':\n requestDomains = [{ accessType: AccessType.NoRequest, domain: '' }];\n break;\n case 'allowed':\n requestDomains = domains.map(domain => ({ ...domain, accessType: AccessType.Request }));\n break;\n case 'any':\n }\n return [ ...prevAutoJoinDomains, ...requestDomains ];\n }\n\n if (accessType === AccessType.AutoJoin) {\n let autoJoinDomains: ApprovedDomain[] = [];\n switch (selectedOption) {\n case 'allowed':\n autoJoinDomains = domains.map(domain => ({ ...domain, accessType: AccessType.AutoJoin }));\n break;\n case 'none':\n }\n return [ ...prevRequestDomains, ...autoJoinDomains ];\n }\n }\n};\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { 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}","import { Core } from 'libs/common/backbone/index';\n\nimport { AccessSettingsGroup } from 'libs/shared/enums/AccessSettingsGroup';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport const AccessSettingsAppLinks: { [key in AccessSettingsGroup]: Core.AppLink } = {\n [AccessSettingsGroup.RequestingAccess]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.REQUESTING_ACCESS\n },\n [AccessSettingsGroup.TeacherInvites]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TEACHER_INVITES\n },\n [AccessSettingsGroup.AutomaticAccess]: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.AUTOMATIC_ACCESS\n }\n};\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { ApprovedDomain } from 'libs/shared/interfaces/domains/ApprovedDomain';\n\nexport const DomainRequests = {\n domains(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'domains',\n normalize: false\n };\n },\n updateDomains(\n customerId: string,\n data: ApprovedDomain[]\n ): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/approved-domains`,\n key: 'update:domains',\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: ['domains']\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function useDomainSettingsSwitch() {\n const { isLoadingSettings, domainSettings } = useSettings(LocationContext.Settings);\n\n React.useEffect(() => {\n if (isLoadingSettings)\n return;\n\n if (!domainSettings) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [ domainSettings, isLoadingSettings ]);\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["domainRegex","RegExp","DomainValidation","values","domains","selectedOption","errors","forEach","domain","index","find","currentDomain","currentIndex","hasChanged","test","length","namespace","getPhrase","LanguageService","errorMessagePhraseMap","requestingAccess","automaticAccess","props","formikProps","view","appLinks","onChangeDomain","removeDomainField","actionMap","AccessSettingsGroup","action","viewAppLink","application","args","getDomainErrorCode","className","ClearableInput","type","name","placeholder","value","onChange","e","preventDefault","updatedDomain","currentTarget","handleChange","onClickClear","autoComplete","showClearButton","FormFeedback","domainErrorCode","Text","phrase","options","AppLink","appLink","getDomainErrorMessage","DomainFields","addDomainField","error","errorIndex","ArrayHelper","setFieldError","errorCode","render","map","key","IconButton","svgName","onClick","radioPhraseMap","none","label","description","allowed","any","option","hasDescription","url","onSelectValue","children","FormCheck","id","checked","target","href","infoMessagePhraseMap","DomainSettingsForm","setFieldValue","setErrors","clearFieldError","domainErrors","updatedDomainErrors","filter","err","ArticleHelper","FormButtons","isNew","variant","DomainSettingsFormWrapper","initialValues","onSaveChanges","FormWrapper","validate","validateOnChange","validateOnBlur","onSubmit","DomainSettingsTabs","active","tabs","analyticsData","analyticsOptions","actionType","entity","location","teacherInvites","CloseIcon","viewBox","d","ref","clearClassName","inputProps","role","onKeyDown","tabIndex","canSubmit","disabled","size","showSpinner","isSubmitting","submitText","castInitialValues","castValuesOnSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","formattedData","reset","entries","f","useFormikContextWrapper","defaultProps","TabContents","tab","count","data","PillTabSelector","containerRef","borderRadius","listClassName","onSelect","onSelectTab","AccessType","OnlineSupportArticle","LiteSupportArticle","has","accessType","getFilteredDomains","accessTypes","some","DomainSettingsFormHelper","getInitialJoinRequests","filteredDomains","getInitialAccessBehaviour","formatRequestData","prevDomains","prevAutoJoinDomains","prevRequestDomains","requestDomains","autoJoinDomains","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","group","modules","settingsModule","SettingsLayout","canAccess","replace","breadcrumbs","i","heading","headingButton","AccessSettingsAppLinks","DomainRequests","customerId","normalize","updateDomains","invalidationKeys","useDomainSettingsSwitch","isLoadingSettings","domainSettings"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/1610-bf848cce4d-lite.chunk.js","mappings":"mHAAA,IAAYA,E,iBAAZ,SAAYA,GACV,kBACA,oBACA,wCACA,8DACA,oEACA,wBACA,8BACA,iBACD,CATD,CAAYA,IAAAA,EAAY,I,mCCEjB,IAAMC,EAAuB,CAClCC,YAAW,WACT,MAAO,CACLC,IAAK,mCACLC,IAAK,mBACLC,WAAW,EAEf,EAEAC,oBAAmB,WACjB,MAAO,CACLH,IAAK,4CACLC,IAAK,4BACLC,WAAW,EAEf,EAEAE,mBAAkB,WAChB,MAAO,CACLJ,IAAK,2CACLC,IAAK,2BACLC,WAAW,EAEf,EAEAG,WAAU,WACR,MAAO,CACLL,IAAK,mCACLC,IAAK,mBACLC,WAAW,EAEf,EAEAI,MAAK,WACH,MAAO,CACLN,IAAK,6BACLC,IAAK,aACLC,WAAW,EAEf,EAEAK,kBAAiB,WACf,MAAO,CACLP,IAAK,0CACLC,IAAK,0BACLC,WAAW,EAEf,EAEAM,iBAAgB,WACd,MAAO,CACLR,IAAK,yCACLC,IAAK,yBACLC,WAAW,EAEf,E,8OC3CF,IAAMO,EAAY,0BASZ,SAAUC,EAAmBC,GACjC,I,IAIC,G,GAJyB,OACxB,0BACA,EACA,CAAEC,QAAS,oB,EACZ,E,o4BAJOC,EAAI,KAAEC,EAAO,KA2BrB,OAAKH,EAAMI,cAAiBF,EAI1B,uBAAKG,KAAK,QAAQC,UAAU,oFAC1B,2BACE,gBAAC,IAAI,CAACR,UAAWA,EAAWS,OAAO,eACnC,qBAAGD,UAAU,YAAYE,KAxB/B,WACE,IAAKR,EAAMS,MAAO,OAAOT,EAAMU,aAE/B,IAAIC,EAAa,GAWjB,OATIX,EAAMS,MAAMG,SAAW,kBACzBD,EAAa,iBAAH,OAAoBX,EAAMS,MAAMI,GAAE,WAE1Cb,EAAMS,MAAMG,SAAW,YACzBD,EAAa,WAAH,OAAcX,EAAMS,MAAMI,GAAE,WAEpCb,EAAMS,MAAMG,SAAW,WACzBD,EAAa,UAAH,OAAaX,EAAMS,MAAMI,GAAE,WAEhC,kBAAwBb,EAAMU,aAAcC,EACrD,CASqCG,GAAmBC,OAAO,UACvD,gBAAC,IAAI,CAACjB,UAAWA,EAAWS,OAAO,eACjC,KAEN,gBAAC,IAAU,CAACS,QAAS,WAAoBV,UAAU,YAAYW,QAhCnE,WACEd,GAAQ,EACV,KAoBS,gCAaX,C,2CCjEO,IAAMe,EAA8B,SAC9BC,EAA2B,Q,6ICgBlCC,EAAY,qBADA,yBAKLC,EAA6B,CACxCC,KAAM,SACNC,QAAS,iBACTC,SAAU,IACVC,aAAc,gBACdC,UAAW,GACXC,YAAa,GACbC,aAAa,IAAIC,MAAOC,cACxBC,WAAY,KACZC,KAAM,CACJC,kBAAmB,GACnBC,aAAc,IAEhBC,QAAS,IACTC,gBAAiB,EACjBC,QAAS,EACTC,WAAY,GACZC,QAAS,CACPC,kBAAkB,EAClBC,mBAAmB,IAIVC,EAAoD,CAC/DC,MAAOtB,EACPuB,aAAc,KACdC,gBAAiB,KACjBC,WAAY,aAAoB,IAAIjB,KA7BR,EA6BuC,QAAQC,eAGvEiB,EAAsC,CAC1CC,YAAa,cACbC,OAAQ,wCAGGC,EAAsC,CACjDlC,QAAS,eACTmC,MAAO/B,EAAU,gBACjBgC,QAASL,EACTM,MAAO,WACP/C,UAAW,uB,oVC5Db,SAAgB,WAAa,SCa7B,IAAMR,EAAY,wBACZsB,EAAYkC,EAAA,mBAAiCxD,GAU7C,SAAUyD,EAAoBvD,GAClC,IAAMwD,EAAYxD,EAAMyD,QAAQC,SAAS,WAEnCC,EAAW3D,EAAM4D,YAAYC,IAAM7D,EAAM4D,YAAYE,GAkB3D,OACE,2BACE,gBAAC,IAAoB,CAACC,QAAS3C,EAAU,eAAgB4C,SAAS,IAElE,uBAAK1D,UAAS,UAAK,aAAiB,8CAClC,gBAAC2D,EAAA,EAAgB,CACfC,UAAS,+BAAO,MAA8B,CAAEtB,aArB/C,OAAP,wBACK5C,EAAMmE,iBAAe,CACxBtD,GAAI2C,EAAY,IAA8B,QAoB1CY,iBAhBR,WACE,MAAO,CAAC,OAAD,wBAEA,MAAoB,CACvBC,QAASV,IAGf,EAUQW,YAAatE,EAAMsE,YACnBC,WAAYvE,EAAMuE,WAClBX,YAAa5D,EAAM4D,aAEnB,uBAAKtD,UAAU,8EACb,gBAACkE,EAAA,EAAI,CAAC1E,UAAWA,EAAWS,OAAO,uBAM/C,C,qECpDM,EAAY,8BACZ,EAAY+C,EAAA,mBAAiC,GAE7C,SAAUmB,IACd,OACE,gBAACC,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,+BAAwCC,QAAS,EAAU,aAClF,gBAACH,EAAA,UAAkB,KAAC,gBAACF,EAAA,EAAI,CAAC1E,UAAW,EAAWS,OAAO,aACvD,gBAACmE,EAAA,OAAe,KAAC,gBAACF,EAAA,EAAI,CAAC1E,UAAW,EAAWS,OAAO,UACpD,gBAACmE,EAAA,MAAc,CACbI,KAAMxB,EAAA,YAA0B,EAAW,OAC3CF,QAAS,CACPJ,YAAa,YACbC,OAAQ,oBAEV8B,cAAe,CAAC,EAChBC,iBAAkB,CAChBC,WAAY,WACZC,SAAU,qBACVC,OAAQ,aACRC,cAAe,WACfC,WAAY,KAAAC,UAKtB,C,eCJM,EAAY,oBACZ,EAAYhC,EAAA,mBAAiC,GAM7C,SAAUiC,EAAavF,G,aAE3B,EAAAwF,EAAA,GAAmB,CAAEC,MAAO,EAAU,cACtC,OAAgD,EAAAC,EAAA,KAAxCC,EAAc,EAAdA,eAAgBC,EAAmB,EAAnBA,oBACxB,GAA0C,EAAAC,EAAA,GAAY,MAA9CC,EAAc,EAAdA,eAAgBC,EAAa,EAAbA,cAChBC,GAAa,EAAAC,EAAA,KAAbD,SACFpC,GAAc,EAAAsC,EAAA,KACZC,GAAiB,EAAAC,EAAA,KAAjBD,aAEFE,GAAe,QAAgBrG,EAAMY,QAGrC0F,GAAeV,EAAoB,0BACvCD,EAAeY,EAAA,iBAAgCT,EAC3CU,EAAwBV,GAAkBH,EAAeY,EAAA,gBACzDE,EAAwC,QAAtB,EAAAN,aAAY,EAAZA,EAAcO,gBAAQ,eAAEC,gBAG1CC,EAAS,kBAA6BC,EAAA,YACtCC,EAAc,kBAAkCC,EAAA,iBAChDxC,EAAa,mBACD,QAAhB,EAAAuC,EAAYE,YAAI,eAAEC,kBAAmBC,EAAA,aAA4BJ,EAAYE,KAAKG,aAE9EhD,EAAkB,kBAA0CsC,GAChEtH,EAAA,yBAEI+E,GAAY,EAAAkD,EAAA,GAAe,CAC/BC,qBAAqB,EACrBf,YAAAA,EACAgB,OAAQ,CACNhG,KAAMiG,EAAA,UASV,OALA,aAAgB,WACR5B,EAAeY,EAAA,iBAAgCT,GACnD,gBAA4B,IAChC,GAAG,CAACQ,IAECA,EAIH,uBAAKhG,UAAU,QACb,gBAACP,EAAA,EAAkB,CACjBW,aAAyB,QAAX,EAAAkG,EAAOI,YAAI,eAAEQ,gBAC3BpH,aAAcuF,EAAeY,EAAA,2BAG/B,uBAAKjG,UAAU,2BACb,sBAAIA,UAAU,QAAO,gBAACkE,EAAA,EAAI,CAAC1E,UAAW,EAAWS,OAAO,cACvDwF,GACC,qBAAGzF,UAAU,QACX,gBAACkE,EAAA,EAAI,CAAC1E,UAAW,EAAWS,OAAO,mBAAkB,IAErD,gBAACkH,EAAA,EAAO,CACNrE,QAAS,CAAEJ,YAAa,eAAwBC,OAAQ,qBACxD3C,UAAU,aAEV,gBAACkE,EAAA,EAAI,CAAC1E,UAAW,EAAWS,OAAO,qBAM1CkG,GAAmBtC,EAAgB6C,MAClC,gBAACzD,EAAmB,CAClBY,gBAAiBA,EAAgB6C,KACjCvD,QAAoB,QAAX,EAAAmD,EAAOI,YAAI,eAAEvD,QACtBG,YAAaA,EACbU,YAAaJ,EAAUI,YACvBC,WAAYA,EAAWyC,OAIzB,W,MACA,OAAI9C,EAAUwD,mBACL,gBAACC,EAAA,EAAoB,MAEzBzD,EAAU0D,WAAWC,OAMxB,gCACE,gBAACC,EAAA,EAAa,CACZF,WAAY1D,EAAU0D,WACtBG,cAAe7D,EAAU6D,cAAcC,MACvCnF,gBAAiBqB,EAAUrB,gBAAgBmF,MAC3CC,0BAA2B/D,EAAU+D,0BAA0BC,SAC/D9D,iBAAkB,SAAA+D,GAAG,OAAI,QAAsB,CAC7CxF,MAAOwF,EAAIxF,MACXC,aAAcuF,EAAIvF,aAClBwF,eAAgB/B,EAAagC,sBAC7BC,YAAa9B,EACbR,SAAAA,EACApC,YAAAA,GACA,EACF2E,mBAAiB,EACjB3E,YAAaA,EACb+C,gBAAiBF,EACjBnC,YAAwB,QAAX,EAAAsC,EAAOI,YAAI,eAAE1C,YAC1BC,WAAYA,EAAWyC,QAEvB9C,EAAUsE,SAAWtE,EAAUuE,aAC/B,gBAACC,EAAA,EAAoB,CACnBD,WAAYvE,EAAUuE,WACtBE,UAAWzE,EAAUyE,UACrBC,WAAY1E,EAAU0E,cA5B1B,gBAACC,EAAA,EAAuB,KAiC9B,CAvCE,IAnCG,gBAACpE,EAAkB,KA6E9B,C","sources":["file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/my-shares-demo-insights.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx"],"sourcesContent":["export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: Share = {\n type: ShareType.Link,\n privacy: SharePrivacy.JustMySchool,\n objectId: '0',\n objectTypeId: MasterType.Interactive,\n viewCount: 28,\n accessCount: 15,\n dateCreated: new Date().toISOString(),\n expireDate: null,\n link: {\n shortenedEmbedUrl: '',\n shortenedUrl: ''\n },\n shareId: '0',\n ownerCustomerId: 0,\n ownerId: 0,\n recipients: [],\n options: {\n preventScrubbing: false,\n immediateFeedback: false\n }\n};\n\nexport const DEMO_INSIGHTS_SHARE_TABLE_DATA: MySharesTableData = {\n share: DEMO_INSIGHTS_SHARE,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString()\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"background\":\"HAuP3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_ACTION, DEMO_INSIGHTS_SHARE_TABLE_DATA } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nimport styles from './my-shares-demo-insights.scss';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n liteUrl: string;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n breakpoints: Breakpoints;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isStaging = props.liteUrl.includes('staging');\n\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: isStaging ? DEMO_INTERACTIVE_STAGING_ID : DEMO_INTERACTIVE_PROD_ID\n };\n }\n\n function getObjectActions() {\n return [\n {\n ...DEMO_INSIGHTS_ACTION,\n button: !isMobile\n }\n ];\n }\n\n return (\n <div>\n <MySharesTableHeading heading={getPhrase('demoHeading')} isFirst={true} />\n\n <div className={`${styles.background} rounded-3 border-md bg-light-orange mb-4`}>\n <MySharesTableRow\n shareData={{ ...DEMO_INSIGHTS_SHARE_TABLE_DATA, sharedObject: getDemoInteractive() }}\n getObjectActions={getObjectActions}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n breakpoints={props.breakpoints}\n >\n <div className='d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2'>\n <Text namespace={namespace} phrase='demoInsightPill' />\n </div>\n </MySharesTableRow>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n typeId: string | string[];\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n // Shared hooks\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasShareFlowV2, hasClassrooms } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n const breakpoints = useBreakpoints();\n const { accessPolicy } = useAccessPolicy();\n\n const sharesParams = getSharesParams(props.typeId);\n\n // Local variables\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights;\n\n // Flight fetching\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch,\n params: {\n type: ShareType.Link\n }\n });\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='border-bottom pb-2 mb-4'>\n <h1 className='mb-2'><Text namespace={namespace} phrase='myShares' /></h1>\n {hasClassrooms && (\n <p className='mb-0'>\n <Text namespace={namespace} phrase='classroomsHint'/>\n &nbsp;\n <AppLink\n appLink={{ application: AppChannels.CLASSROOMS, action: Actions.Classrooms.HOME }}\n className='info-link'\n >\n <Text namespace={namespace} phrase='classroomsCta'/>\n </AppLink>\n </p>\n )}\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight\n demoInteractive={demoInteractive.data}\n liteUrl={config.data?.liteUrl}\n breakpoints={breakpoints}\n imageCdnUrl={shareData.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n }\n\n {(() => {\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!shareData.sentShares.length)\n return (\n <MySharesTableEmptyState />\n );\n\n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectActions={row => getShareObjectActions({\n share: row.share,\n sharedObject: row.sharedObject,\n audienceParams: sharesParams.audienceAppLinkParams,\n hasInsights: hasInsightsPermission,\n isPlugin,\n breakpoints\n })}\n groupByDateShared\n breakpoints={breakpoints}\n hasDemoInsights={showDemoInsight}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n })()}\n </div>\n );\n}\n"],"names":["SharePrivacy","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","namespace","InsightsAdminAlert","props","storage","show","setShow","hasAnalytics","role","className","phrase","href","video","analyticsUrl","videoRoute","typeId","id","getAnalyticsUrl","target","svgName","onClick","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","Date","toISOString","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","dateShared","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","label","appLink","group","LanguageService","MySharesDemoInsight","isStaging","liteUrl","includes","isMobile","breakpoints","xs","sm","heading","isFirst","MySharesTableRow","shareData","demoInteractive","getObjectActions","button","imageCdnUrl","yearGroups","Text","MySharesEmptyState","EmptyState","src","ImageUrls","altText","text","analyticsData","analyticsOptions","actionType","location","entity","workflowPhase","descriptor","SignUp","MySharesView","useSetPageMetadata","title","usePermissions","hasPermissions","hasLocalPermissions","useSettings","hasShareFlowV2","hasClassrooms","isPlugin","usePluginHelper","useBreakpoints","accessPolicy","useAccessPolicy","sharesParams","shouldFetch","PermissionName","hasInsightsPermission","showDemoInsight","metadata","hasDemoInsights","config","ConfigRequests","currentUser","UserRequests","data","isAuthenticated","CustomerRequests","customerId","useSharesTable","interactiveInsights","params","ShareType","analyticsWebUrl","AppLink","showPartialLoading","PartialMySharesTable","sentShares","length","MySharesTable","sharedObjects","items","interactivesPendingReview","itemsArr","row","audienceParams","audienceAppLinkParams","hasInsights","groupByDateShared","hasMore","isFetching","InfiniteScrollFooter","fetchNext","nextCursor","MySharesTableEmptyState"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/218-297de74688-lite.chunk.js","mappings":"oNAoBA,SAASA,EAAYC,GACnB,OACE,kCACKA,EAAMC,IAAIC,SACX,uBAAKC,UAAWH,EAAMC,IAAIG,KAAO,OAAS,IACxC,gBAAC,IAAY,CAACF,QAASF,EAAMC,IAAIC,WAIpCF,EAAMC,IAAIG,KAEmB,iBAArBJ,EAAMC,IAAII,OACjB,uBAAKF,UAAU,QACb,gBAAC,IAAK,CAACG,KAAM,UAAiBC,KAAMP,EAAMC,IAAII,SAKxD,CA8BM,SAAUG,EAAgBR,G,MAW9B,OACE,uBAAKG,UAA0B,QAAf,EAAAH,EAAMG,iBAAS,QAAI,GAAIM,IAAKT,EAAMU,cAChD,sBAAIP,UAAS,qDACwB,oBAAsB,qBACvDH,EAAMW,aAAe,gBAAqB,GAAE,qBAC5CX,EAAMY,cAAa,aAEpBZ,EAAMa,KAAKC,KAAI,SAACb,EAAKc,GACpB,OACE,sBACEZ,UAAS,gCACD,QAAU,YAAIF,EAAIe,OAAS,eAAiB,uBAAsB,6BACtEf,EAAIG,KAAO,aAAkB,GAAE,YAAIH,EAAIE,UAAS,oBAEpDc,IAAKF,GAEJd,EAAIiB,QACH,gBAAC,IAAO,CACNA,QAASjB,EAAIiB,QACbC,cAAelB,EAAIkB,cACnBC,iBAAkBnB,EAAImB,iBACtBjB,UAAS,sKAE4C,YAAc,yBAGnE,gBAACJ,EAAW,CAACE,IAAKA,KAGpB,gBAAC,IAAS,CACRE,UAAS,sKAE4C,YAAc,wBAEnEkB,QAAS,WAAF,OA5CvB,SAAqBpB,IACfA,EAAIe,QAAWf,EAAIqB,WAGvBrB,EAAIqB,WAEArB,EAAIkB,eAAiBlB,EAAImB,kBAC3B,kBAA8BnB,EAAIkB,cAAelB,EAAImB,kBACzD,CAoC+BG,CAAYtB,EAAI,GAE/B,gBAACF,EAAW,CAACE,IAAKA,KAK5B,KAIR,CA5DAO,EAAgBgB,aAAe,CAC7Bb,aAAc,K,kDC5DVc,E,SAAY,mBADA,mBAOZ,SAAUC,EAAe1B,GAC7B,IAAM2B,EAAsB,cAAf3B,EAAMM,KAAuBmB,EAAU,aAAeA,EAAU,gBAE7E,OACE,uBAAKtB,UAAU,kFACZwB,EAAI,IAWX,C,kBC3BA,IAAYC,E,iBAAZ,SAAYA,GACV,6BACA,uBACA,yBACA,+BACA,6BACA,+CACA,sBACD,CARD,CAAYA,IAAAA,EAAc,I,mFCWbC,EAAoB,CAC/BC,aAAY,WACV,MAAO,CACLC,IAAK,kCACLd,IAAK,YAET,EAEAe,YAAW,SAACC,GACV,IAAMC,EAAqB,CAAC,EAW5B,GAVID,EAAYE,SACdD,EAAOC,OAASF,EAAYE,QAE1BF,EAAYG,OACW,WAArBH,EAAYG,KACdF,EAAOG,MAAQ,MAEfH,EAAOG,MAAQ,QAGfJ,EAAYK,UAAW,CACzB,IAAMC,EAAW,GACbN,EAAYK,UAAUE,SAAS,cACjCD,EAASE,KAAI,MAAbF,EAAiB,CAAE,cAA0B,yBAE3CN,EAAYK,UAAUE,SAAS,WACjCD,EAASE,KAAK,YAEZR,EAAYK,UAAUE,SAAS,eACjCD,EAASE,KAAI,MAAbF,EAAiB,CACf,cACA,WACA,YACA,iBAEJL,EAAOQ,OAASH,CACjB,CAID,OAFAL,EAAO5B,KAAO,cAEP,CACLyB,IAAK,eAAqB,0BAA2BG,GACrDjB,IAAK,kBAAF,OAAoBgB,EAAYE,OAAM,YAAIF,EAAYG,KAAI,YAAIH,EAAYK,WAEjF,EAEAK,UAAS,SACPpC,EACAqC,EACAC,GAEA,MAAO,CACLd,IAAK,0BACLd,IAAK,iBACLX,KAAM,SACNwC,iBAAkB,CAAC,kBACnBvC,KAAAA,EACAqC,QAAAA,EACAC,MAAAA,EAEJ,EAEAE,cAAa,SAACC,GACZ,MAAO,CACLjB,IAAK,2BAAF,OAA6BiB,EAAE,YAClC/B,IAAK,eAAF,OAAiB+B,GAExB,EAEAC,wBAAuB,SAACC,GACtB,MAAO,CACLnB,IAAK,0BAAF,OAA4BmB,EAAa,aAC5CjC,IAAK,iBAAF,OAAmBiC,GAE1B,EAEAC,sBAAqB,SACnB5C,EACA2C,EACAN,EACAC,EACAO,GAEA,MAAO,CACL9C,KAAM,QACNyB,IAAK,0BAAF,OAA4BmB,EAAa,aAC5CjC,IAAK,wBAAF,OAA0BV,EAAK8C,WAAU,YAAIH,GAChDJ,iBAAkB,CAAC,iBAAD,OAAkBI,IACpC3C,KAAAA,EACAqC,QAAAA,EACAC,MAAAA,EACAO,OAAAA,EAEJ,E,0ICvGF,SAAgB,gBAAkB,SCclC,IAAME,EAAY,8BACZ7B,EAAY8B,EAAA,mBAAiCD,GAU7C,SAAUE,EAAiBxD,G,MACzByD,GAAc,EAAAC,EAAA,KACdC,EAAWF,EAAYG,IAAMH,EAAYI,GAEzChD,EAAkB,CAAC,CACvBT,KAAMqB,EAAU,iBAChBP,QAAS,CACP4C,YAAa,eACbC,OAAQ,qBAEV/C,OAA4B,eAApBhB,EAAMgE,YAchB,OAXIhE,EAAMiE,gBACRpD,EAAK4B,KAAK,CACRrC,KAAMqB,EAAU,qBAChBP,QAAS,CACP4C,YAAa,eACbC,OAAQ,gCAEV/C,OAA4B,oBAApBhB,EAAMgE,YAKhB,6BACKhE,EAAMkE,cACP,uBAAK/D,UAAU,QACb,gBAACuB,EAAA,EAAc,CAACpB,KAAK,aAIzB,uBAAKH,UAAU,kCACb,sBAAIA,UAAU,0BAAyB,gBAACgE,EAAA,EAAI,CAACb,UAAWA,EAAWc,OAAO,aAEzEpE,EAAMqE,WACL,uBAAKlE,UAAU,WACXwD,GACA,uBAAKxD,UAAS,UAAK,kBAAsB,8BACtCH,EAAMqE,WAIX,gBAAC,IAAY,CACXC,QAAsB,QAAb,EAAAtE,EAAMsE,eAAO,QAAI,GAC1BC,yBAAyB,2BAMhC1D,EAAK2D,OAAS,GACb,uBAAKrE,UAAU,QACb,gBAACK,EAAA,EAAe,CAACK,KAAMA,KAI1B8C,GAAY3D,EAAMqE,UACjB,uBAAKlE,UAAU,QACZH,EAAMqE,WAEP,KAGV,C,mSC9DM5C,EAAY,qBADA,6BAGZ,SAAUgD,I,QACRhB,GAAc,SACZiB,GAAmB,SAAnBA,eACAT,GAAmB,OAAY,MAA/BA,eACAU,GAAa,SAAbA,SAEFC,EAAc,kBAAkC,mBAChDC,EAAS,kBAA6B,cACtCC,EAAY,kBAAwC,oBACpDZ,GAA6B,QAAd,EAAAY,EAAUvE,YAAI,eAAEmC,SAAoC,SAA1BoC,EAAUvE,KAAKmC,OACxDqC,EAAa,mBACD,QAAhB,EAAAH,EAAYrE,YAAI,eAAEyE,kBAAmB,eAA4BJ,EAAYrE,KAAK8C,aAE9E4B,GAAY,OAAe,CAC/BC,qBAAqB,EACrBC,YAAalB,EACb/B,OAAQ,CACN5B,KAAM,YA+CV,OA3CA,OAAmB,CAAE8E,MAAO3D,EAAU,eA4CpC,uBAAKtB,UAAU,QACb,gBAAC,IAAgB,CACfmE,QAAS,GACTN,UAAU,kBACVE,aAAcA,EACdD,eAAgBA,IA/CtB,W,MACQoB,EAAwBpB,GAAkBS,EAAe,kBACzDY,GAAe,QAAgB,IAErC,OAAIL,EAAUM,mBACL,gBAAC,IAAoB,MAEzBN,EAAUO,WAAWhB,OAIxB,gCACE,gBAAC,IAAa,CACZgB,WAAYP,EAAUO,WACtBC,cAAeR,EAAUQ,cAAcC,MACvCC,gBAAiBV,EAAUU,gBAAgBD,MAC3CE,0BAA2BX,EAAUW,0BAA0BC,SAC/DC,iBAAkB,SAAAC,GAAG,OAAI,QAAsB,CAC7CC,MAAOD,EAAIC,MACXC,aAAcF,EAAIE,aAClBC,eAAgBZ,EAAaa,sBAC7BC,YAAaf,EACbV,SAAAA,EACAlB,YAAAA,GACA,EACF4C,mBAAiB,EACjB5C,YAAaA,EACb6C,YAAwB,QAAX,EAAAzB,EAAOtE,YAAI,eAAE+F,YAC1BvB,WAAYA,EAAWxE,QAEvB0E,EAAUsB,SAAWtB,EAAUuB,aAC/B,gBAAC,IAAoB,CACnBA,WAAYvB,EAAUuB,WACtBC,UAAWxB,EAAUwB,UACrBC,WAAYzB,EAAUyB,cA1BpB,gBAAC,IAAuB,KA+BpC,CAWKC,GAIP,C,mCC1GA,SAAgB,gBAAkB,QAAQ,IAAM,QAAQ,SAAW,QAAQ,YAAc,QAAQ,QAAU,Q","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/enums/BatchJobStatus.ts","file:///app/packages/libs/shared/src/flight-requests/RosteringRequests.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-header/classrooms-header.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classrooms-header/ClassroomsHeader.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/open-classrooms/OpenClassroomsView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","export enum BatchJobStatus {\n Submitted = 0,\n Queued = 1,\n Pending = 2,\n InProgress = 3,\n Completed = 4,\n CompletedWithError = 5,\n Failed = 6\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { BulkJobsQueryParams } from 'libs/shared/components/bulk-jobs-filters/BulkJobsFilters';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { BatchJob, ScheduleSettingRequest } from 'libs/shared/interfaces';\nimport { CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const RosteringRequests = {\n getRostering(): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/rostering`,\n key: `rostering`\n };\n },\n\n getSyncList(queryParams: BulkJobsQueryParams): Flight.Request {\n const params: HashObject = {};\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.jobStatus) {\n const statuses = [];\n if (queryParams.jobStatus.includes('completed')) {\n statuses.push(...[ BatchJobStatus.Completed, BatchJobStatus.CompletedWithError ]);\n }\n if (queryParams.jobStatus.includes('failed')) {\n statuses.push(BatchJobStatus.Failed);\n }\n if (queryParams.jobStatus.includes('inProgress')) {\n statuses.push(...[\n BatchJobStatus.Submitted,\n BatchJobStatus.Queued,\n BatchJobStatus.Pending,\n BatchJobStatus.InProgress ]);\n }\n params.status = statuses;\n }\n\n params.type = BatchJobType.Rostering;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `rostering:sync:${queryParams.cursor}:${queryParams.sort}:${queryParams.jobStatus}`\n };\n },\n\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'rostering:sync',\n type: HttpVerbs.POST,\n invalidationKeys: ['rostering:sync'],\n data,\n success,\n error\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n },\n\n getSyncScheduleSettings(integrationId: string): Flight.SimulatedRequest {\n return {\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `sync-settings:${integrationId}`\n };\n },\n\n updateScheduleSetting(\n data: ScheduleSettingRequest,\n integrationId: string,\n success?: () => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n type: HttpVerbs.PUT,\n url: `{gateway}/v1/rostering/${integrationId}/schedule`,\n key: `update:sync-settings:${data.customerId}:${integrationId}`,\n invalidationKeys: [`sync-settings:${integrationId}`],\n data,\n success,\n error,\n always\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"searchContainer\":\"rwTB7\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionOptions, Actions as ActionButton } from 'libs/shared/components/actions/Actions';\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './classrooms-header.scss';\n\nconst namespace = 'classrooms.classroomsHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomsHeaderProps {\n activeTab: 'classrooms' | 'open-classrooms';\n actions?: ActionOptions[];\n searchBar?: React.ReactNode;\n hasRostering: boolean;\n hasShareFlowV2: boolean;\n}\n\nexport function ClassroomsHeader(props: ClassroomsHeaderProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const isMobile = breakpoints.xs || breakpoints.sm;\n \n const tabs: PillTab[] = [{\n name: getPhrase('classroomsTab'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n },\n active: props.activeTab === 'classrooms'\n }];\n\n if (props.hasShareFlowV2) {\n tabs.push({\n name: getPhrase('openClassroomsTab'),\n appLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOMS\n },\n active: props.activeTab === 'open-classrooms'\n });\n }\n\n return (\n <div>\n {!!props.hasRostering && (\n <div className='my-3'>\n <RosteringAlert type='general' />\n </div>\n )}\n\n <div className='d-flex align-items-center mb-3'>\n <h1 className='flex-fill h2 me-3 my-1'><Text namespace={namespace} phrase='heading' /></h1>\n\n {props.searchBar && (\n <div className='d-flex'>\n {!isMobile && (\n <div className={`${styles.searchContainer} d-flex mb-2 mb-sm-0 me-2`}>\n {props.searchBar}\n </div>\n )}\n\n <ActionButton\n actions={props.actions ?? []}\n actionsDropdownClassName='btn btn-outline-dark'\n />\n </div>\n )}\n </div>\n\n {tabs.length > 1 && (\n <div className='mb-3'>\n <PillTabSelector tabs={tabs} />\n </div>\n )}\n\n {isMobile && props.searchBar ? (\n <div className='mb-3'>\n {props.searchBar}\n </div>\n ) : null}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, RosteringResponse, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\n\nimport { ClassroomsHeader } from 'apps/classrooms/components/classrooms-header/ClassroomsHeader';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'classrooms.openClassrooms';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function OpenClassroomsView(): JSX.Element {\n const breakpoints = useBreakpoints();\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const shareData = useSharesTable({\n interactiveInsights: true,\n shouldFetch: hasShareFlowV2,\n params: {\n type: ShareType.Open\n }\n });\n\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n\n function renderTable() {\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const sharesParams = getSharesParams([]);\n\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n \n if (!shareData.sentShares.length)\n return (<MySharesTableEmptyState />);\n \n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectActions={row => getShareObjectActions({\n share: row.share,\n sharedObject: row.sharedObject,\n audienceParams: sharesParams.audienceAppLinkParams,\n hasInsights: hasInsightsPermission,\n isPlugin,\n breakpoints\n })}\n groupByDateShared\n breakpoints={breakpoints}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n }\n\n return (\n <div className='px-3'>\n <ClassroomsHeader\n actions={[]}\n activeTab='open-classrooms'\n hasRostering={hasRostering}\n hasShareFlowV2={hasShareFlowV2}\n />\n\n {renderTable()}\n \n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","getPhrase","RosteringAlert","text","BatchJobStatus","RosteringRequests","getRostering","url","getSyncList","queryParams","params","cursor","sort","order","jobStatus","statuses","includes","push","status","createJob","success","error","invalidationKeys","getJobSummary","id","getSyncScheduleSettings","integrationId","updateScheduleSetting","always","customerId","namespace","LanguageService","ClassroomsHeader","breakpoints","useBreakpoints","isMobile","xs","sm","application","action","activeTab","hasShareFlowV2","hasRostering","Text","phrase","searchBar","actions","actionsDropdownClassName","length","OpenClassroomsView","hasPermissions","isPlugin","currentUser","config","rostering","yearGroups","isAuthenticated","shareData","interactiveInsights","shouldFetch","title","hasInsightsPermission","sharesParams","showPartialLoading","sentShares","sharedObjects","items","shareRecipients","interactivesPendingReview","itemsArr","getObjectActions","row","share","sharedObject","audienceParams","audienceAppLinkParams","hasInsights","groupByDateShared","imageCdnUrl","hasMore","isFetching","fetchNext","nextCursor","renderTable"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/2968-c4c0114915-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/flight-requests/ShareRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useGetRecentSharedVideos.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/hooks/usePreserveOrder.ts","file:///app/packages/projects/lite/src/shared/hooks/useCommonVideoProps.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { CreateShareLinkRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareLinkRequest';\nimport { CreateShareRequest } from 'libs/shared/apps/share-v2/interfaces/CreateShareRequest';\nimport { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\n\nconst normalizeOptions: Flight.NormalizeOptions = {\n namespace: 'share-v2'\n};\n\nexport interface GetSentSharesParams {\n cursor?: string;\n scopeId?: string;\n objectTypeId?: number;\n type?: ShareType\n}\n\nexport const ShareRequests = {\n createShare(\n data: CreateShareRequest\n ): Flight.Request {\n return {\n url: '{gateway}/v2/shares',\n key: 'create:share-v2',\n type: HttpVerbs.POST,\n data,\n normalizeOptions,\n invalidationKeys: [ 'sent:share-v2', `get:share-v2:shares:object:${data.objectId}` ]\n };\n },\n\n updateShare(\n shareId: string,\n data: UpdateShareRequest\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `update:share-v2`,\n type: HttpVerbs.PUT,\n data,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', `share-v2:${shareId}` ]\n };\n },\n \n deleteShare(\n shareId: string\n ): Flight.Request {\n return {\n type: HttpVerbs.DELETE,\n url: `{gateway}/v2/shares/${shareId}`,\n key: `delete:share-v2`,\n normalizeOptions,\n invalidationKeys: [ 'share-v2:permanent-link:object', 'sent:share-v2', `share-v2:${shareId}` ]\n };\n },\n\n getShare(\n shareId: string\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}`,\n key: `share-v2:${shareId}`,\n bootstrapName: `share-v2:${shareId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n getSentShares(\n params: GetSentSharesParams = {}\n ): Flight.Request {\n const key = Object.values(params).sort().join(':');\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/sent', params),\n key: `sent:share-v2:${key}`,\n type: HttpVerbs.GET,\n normalize: false\n };\n },\n\n getShareLink(\n id: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { objectId: id }),\n key: `share-v2:permanent-link:object:${id}`,\n normalizeOptions\n };\n },\n\n createShareLink(\n data: CreateShareLinkRequest\n ): Flight.Request {\n return {\n type: HttpVerbs.POST,\n url: UrlHelper.urlBuilder('{gateway}/v2/shares/permanent-link', { ...data }),\n key: `create:share-v2:permanent-link:object:${data.objectId}`,\n invalidationKeys: [ `share-v2:permanent-link:object:${data.objectId}`, 'sent:share-v2' ],\n normalizeOptions\n };\n },\n\n getPrivacy(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/access`,\n key: `privacy:${id}`,\n normalize: false\n };\n },\n \n getSharesByObjectId(\n objectId: string | number\n ): Flight.Request {\n return {\n url: `{gateway}/v2/shares/objects/${objectId}`,\n key: `get:share-v2:shares:object:${objectId}`,\n type: HttpVerbs.GET,\n normalizeOptions\n };\n },\n\n createSharePincode(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `create:share-v2:${shareId}:pincode`,\n type: HttpVerbs.POST\n };\n },\n\n getPincodeByShareId(shareId: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/${shareId}/pincode`,\n key: `get:share-v2:${shareId}:pincode`\n };\n },\n\n getPincodeByCode(code: string): Flight.Request {\n return {\n url: `{gateway}/v2/shares/pincode?code=${code}`,\n key: `get:share-v2:pincode:${code}`\n };\n }\n};\n","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePreserveOrder } from 'libs/shared/hooks/usePreserveOrder';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\ninterface UseGetRecentSharedVideosOptions {\n shouldFetch: boolean;\n}\n\nexport function useGetRecentSharedVideos(options: UseGetRecentSharedVideosOptions) {\n const fetch = Flight.useGetFetch();\n \n const getRequest = (cursor?: string) => options.shouldFetch && ShareRequests.getSentShares({ cursor });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const shares = useInfiniteList<Share>(getRequest, fetchNext);\n\n const videosIds = shares.items\n ?.filter(s => [ MasterType.Video, MasterType.Clip, MasterType.Interactive ].includes(s.objectTypeId))\n .map(s => s.objectId.toString());\n\n const videos = useGrowingBatchFetch<VideoTypes, string>(videosIds, VideoRequests.videos);\n\n const items = usePreserveOrder({\n source: shares.items,\n target: videos.itemsArr,\n sourceKey: 'objectId'\n });\n\n return {\n items,\n hasMore: shares.hasMore,\n isFetching: videos.isFetching,\n nextCursor: shares.nextCursor,\n hasFirstPageCompleted: videos.hasFirstRequestCompleted,\n fetchNext\n };\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\n}\n","import { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React, { DependencyList } from 'react';\n\nimport { BaseObject } from '../interfaces';\n\ninterface UsePreserveOrderOptions<TFrom extends BaseObject, TTarget extends BaseObject> {\n /**\n * We preserve order from the source\n */\n source: TFrom[];\n /**\n * We align target objects to source objects order\n */\n target: TTarget[];\n /**\n * Source comparison key if it other than default `id`\n */\n // getSourceKey?: (obj: TFrom) => string;\n sourceKey?: keyof TFrom;\n /**\n * Target comparion key if its other than default `id`\n */\n // getTargetKey?: (obj: TTarget) => string;\n targetKey?: keyof TTarget;\n\n deps?: DependencyList | undefined;\n}\n\nconst DEFAULT_KEY: keyof BaseObject = 'id';\n\n/**\n * Hook to align order of objects in `target` to `source`\n */\nexport function usePreserveOrder<\n TFrom extends BaseObject = BaseObject,\n TTarget extends BaseObject = BaseObject\n>(options: UsePreserveOrderOptions<TFrom, TTarget>) {\n const items = React.useMemo(() => {\n if (!options.target.length || !options.source.length)\n return [];\n \n const preserveMap = new Map<string, TTarget>();\n\n // Create a lookup table so finding target with certain key is O(n) rather than O(n * n)\n const targetRecord: Record<string, TTarget> = options.target.reduce<Record<string, TTarget>>((prev, curr) => {\n const key = curr[options.targetKey || DEFAULT_KEY].toString();\n\n if (prev[key])\n return prev;\n\n return { ...prev, [key]: curr };\n }, {});\n\n options.source.forEach(source => {\n const sourceKey = source[options.sourceKey || DEFAULT_KEY].toString();\n \n if (preserveMap.has(sourceKey))\n return;\n\n const targetObject = targetRecord[sourceKey];\n\n if (targetObject)\n preserveMap.set(sourceKey, targetObject);\n });\n\n return [...preserveMap.values()];\n }, [ options.source, options.target, ...(options.deps || []) ]);\n\n\n return items;\n}","import { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\n\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nimport { usePluginHelper } from './use-plugin-helper/usePluginHelper';\nimport { useLiteFavourites } from './useLiteFavourites';\n\ninterface UseCommonVideoPropsResult {\n hasCommonVideoPropsCompleted: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\ninterface UseCommonVideoPropsOptions {\n locationContext: LocationContext,\n mtv?: boolean;\n flightNamespace?: string;\n sharedPlaylist?: boolean;\n}\n\nexport function useCommonVideoProps(options: UseCommonVideoPropsOptions): UseCommonVideoPropsResult {\n const { locationContext, mtv, flightNamespace, sharedPlaylist } = options || {};\n\n const { isPlugin, params } = usePluginHelper();\n const { setFavourite, canFavourite } = useLiteFavourites(locationContext, flightNamespace);\n const { hasTopicDirectories, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded: hasLoadedPermissions } = usePermissions();\n const hasStudentExperience = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n function getSubTextAppLink(video: VideoTypes): Core.AppLink {\n if (!('series' in video))\n return null;\n\n /**\n * We do not allow navigating to series on shared playlists when the user is not signed in\n * because most series are customer created and will be empty for public users\n * \n * We do not have to do this for shared series, because all the series links are self referencing\n * - Sha\n */\n if (sharedPlaylist && !currentUser.data?.isAuthenticated)\n return null;\n \n return SeriesAppLinkHelper.getSeriesAppLink(video.series, { mtv });\n }\n\n const hasCommonVideoPropsCompleted = (\n !isLoadingSettings &&\n hasLoadedPermissions &&\n config.hasCompleted &&\n currentUser.hasCompleted &&\n (!currentUser.data?.isAuthenticated || yearGroups.hasCompleted)\n );\n\n return {\n hasCommonVideoPropsCompleted,\n commonVideoProps: {\n subTextType: 'series',\n getSubTextAppLink,\n isPlugin,\n isPluginPopup: !!params?.popup,\n canFavourite,\n setFavourite,\n imageCdnUrl: config.data?.imageCdnUrl,\n yearGroups: yearGroups.data,\n getClassroomGuideAppLink: VideoAppLinkHelper.getClassroomGuideAppLink,\n getInteractiveGuidanceAppLink: VideoAppLinkHelper.getInteractiveGuidanceAppLink,\n getResourceGuidanceAppLink: VideoAppLinkHelper.getResourceGuidanceAppLink,\n showNewVideoIndicator: hasTopicDirectories,\n companyLogoFallbackUrl: null,\n hasStudentExperience\n }\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch, useGrowingBatchFetchFunc } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}) {\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(\n videoIds,\n ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace),\n null\n );\n}\n\nexport function useVideoMixinFunc(options: VideoMixinOptions = {}) {\n function getRequest(ids: string[]): Flight.Request {\n return VideoRequests.videoMixinAssocs(ids, options.flightNamespace);\n }\n \n function fetchObjects(items: Types) {\n return fetchItems(getValidObjects(items).map(v => v.id));\n }\n\n const { fetchItems } = useGrowingBatchFetchFunc({ getRequest });\n\n return { fetchObjects };\n}"],"names":["normalizeOptions","namespace","ShareRequests","createShare","data","url","key","type","invalidationKeys","objectId","updateShare","shareId","deleteShare","getShare","bootstrapName","getSentShares","params","Object","values","sort","join","normalize","getShareLink","id","createShareLink","getPrivacy","getSharesByObjectId","createSharePincode","getPincodeByShareId","getPincodeByCode","code","useGetRecentSharedVideos","options","fetch","getRequest","cursor","shouldFetch","fetchNext","shares","videosIds","items","filter","s","includes","objectTypeId","map","toString","videos","source","target","itemsArr","sourceKey","hasMore","isFetching","nextCursor","hasFirstPageCompleted","hasFirstRequestCompleted","CHUNK_SIZE","useBatchFetch","itemIds","requests","chunk","responses","length","reduce","acc","item","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","fetchedItems","Set","setRequests","unfetchedItems","forEach","current","has","push","add","r","SCROLL_TOLERANCE","useInfiniteList","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","request","fetchNextPage","currentVal","getBoundingClientRect","height","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","FunctionHelper","addEventListener","removeEventListener","shouldInitialFetch","statusCode","httpStatusClass","substr","HttpStatus","totalItems","DEFAULT_KEY","usePreserveOrder","preserveMap","Map","targetRecord","prev","curr","targetKey","targetObject","set","deps","useCommonVideoProps","locationContext","mtv","flightNamespace","sharedPlaylist","isPlugin","u","setFavourite","canFavourite","hasTopicDirectories","isLoadingSettings","hasPermissions","hasLoadedPermissions","isLoaded","hasStudentExperience","config","currentUser","yearGroups","isAuthenticated","customerId","hasCommonVideoPropsCompleted","commonVideoProps","subTextType","getSubTextAppLink","video","series","isPluginPopup","popup","imageCdnUrl","getClassroomGuideAppLink","getInteractiveGuidanceAppLink","getResourceGuidanceAppLink","showNewVideoIndicator","companyLogoFallbackUrl","getValidObjects","objects","Array","isArray","o","useVideoMixin","videoIds","v","ids","useVideoMixinFunc","fetchObjects"],"sourceRoot":""}
@@ -1,2 +0,0 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4185],{1619:(e,t,n)=>{n.d(t,{e:()=>g});var a=n(32735),r=n(23481),s=n(12528),l=n(83914),o=n(35223),i=n(33518),c=n(2510);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=r.T.encloseNamespace("sharev2.shareAvatar"),d=u(u(u(u({},c.y.Open,o.vn.Classrooms),c.y.Link,o.vn.Link),c.y.Classroom,o.vn.Classrooms),c.y.Live,o.vn.Play),v=u(u(u(u({},c.y.Open,"blue"),c.y.Link,"black"),c.y.Classroom,"teal"),c.y.Live,"purple"),h=u(u(u(u({},c.y.Open,"openShareType"),c.y.Link,"linkShareType"),c.y.Classroom,"classroomShareType"),c.y.Live,"liveShareType");function g(e){var t,n;return a.createElement("div",{className:"d-flex align-items-center gap-2"},a.createElement("div",null,a.createElement(s.f,{svgName:d[e.type],variant:v[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:"m-0"},function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText;if(t===c.y.Classroom&&n)return n;var r=p(h[t]);return a&&(r+=" "+a),r}(e)),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,l=void 0===s?0:s;switch(t){case c.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(l,r);case c.y.Open:return p("openShareTypeSubTitle");case c.y.Link:return function(e){return[i.e.JustMySchool,i.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===i.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===i.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===i.e.Public?p("anyoneWithLinkSubTitle"):e===i.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case c.y.Live:return p("liveShareTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>o});var a=n(23481),r=n(41661),s=n(65728),l=a.T.encloseNamespace("shared.shared-utils"),o={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:l("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:l("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},5655:(e,t,n)=>{n.d(t,{QD:()=>C,Qv:()=>T,__:()=>S});var a=n(32735),r=n(68050),s=n(69111),l=n(42648),o=n(82602),i=n(31453),c=n(1619),m=n(83914),u=n(35223),p=n(2510);function d(e){return a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(m.x,{svgName:u.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===p.y.Open)return"".concat(t);if(e.share.type===p.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"-"}()))}var v=n(21789),h=n(15611),g=n(91693),y=n(83345);const f={shareListItem:"vLROV",visibleOnHover:"o2KJH"};var b="assign.previousAssignments";function E(e){return a.createElement("div",{className:(0,i.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(y.x,{namespace:b,phrase:"heading",options:{count:e.count}})),a.createElement(g.h,{svgName:e.show?u.vn.ChevronUp:u.vn.ChevronDown,onClick:e.onToggle}))}function S(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(y.D.Provider,{value:b},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(y.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(y.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(y.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(y.x,{phrase:"dateCreated"}))))}function x(e){var t,n=v.x.getClassroomForShare(e.share,e.classrooms),l=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(h.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==l?void 0:l.data,analyticsOptions:null==l?void 0:l.options,className:(0,i.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",f.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==n?void 0:n.name,svgSize:m.S.Small,hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(y.x,{namespace:b,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(d,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,o.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,i.A)("cursor-pointer text-info hover-text-underline",f.visibleOnHover)},a.createElement(y.x,{namespace:b,phrase:"view"})))))}function T(e){var t;return a.createElement("div",{className:(0,i.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(l.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.reverse().map((function(t,n){return a.createElement(x,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,i.A)(n%2==0&&"bg-gray-100"),key:t.shareId})}))))}function C(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,i.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(E,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(S,null),a.createElement(T,Object.assign({},e))))}},63398:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>C});var a=n(32735),r=n(23481),s=n(20354),l=n(75896),o=n(2510),i=n(18488),c=n(21789),m=n(97958),u=n(9111),p=n(83345),d=n(99742),v=n(86099),h=n(83351),g=n(5655),y=n(95890),f=n(40254),b=n(88630),E="assign.showAssignmentsView",S=r.T.encloseNamespace(E),x=400;function T(e){return a.createElement(m.u,{className:"py-4"},a.createElement(m.u.Image,{src:d.W.EmptyStates.Share.MY_SHARES}),a.createElement(m.u.Heading,null,a.createElement(p.x,{phrase:"emptyTitle",namespace:E})),a.createElement(m.u.Cta,{text:S("emptyCta"),appLink:e.appLink}))}function C(e){var t,n,r=(0,y._)({objectId:e.objectId,entityType:e.entityType}),m=s.a.useBasicFetch(i.o.getSharesByObjectId(e.objectId)),p=(null===(t=m.data)||void 0===t?void 0:t.filter((function(e){return[o.y.Classroom,o.y.Open].includes(e.type)})))||[],d=l.m.uniq(p.map(c.x.getClassroomIdFromShare).filter((function(e){return!!e}))),E=s.a.useBasicFetch(m.hasCompleted&&b.F.getClassroomsByIds(d,null===(n=r.currentUser.data)||void 0===n?void 0:n.customerId)),C=r.loaded&&!!m.data&&!!E.data;return a.createElement(u.G,{size:"lg",title:S("title"),showLoadingSpinner:!C,closePopup:e.closePopup},!p.length&&a.createElement(T,{appLink:f.W.flowSelector({entityType:e.entityType,objectId:e.objectId})}),!!p.length&&a.createElement(a.Fragment,null,a.createElement(g.__,null),a.createElement(g.Qv,{assignments:p,classrooms:E.data,getItemAppLink:function(e){var t=(0,v.pY)(e);if(t)return t},scrollHeightMax:x})),a.createElement(h.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:S("close")}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},l=function(e,t){s[e]=t},o=[60,60,24,7,365/7/12,12];function i(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?i(t):new Date)-+i(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=o[r]&&r<o.length;r++)e/=o[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};l("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),l("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
2
- //# sourceMappingURL=4185-1f65c7adc9-lite.chunk.js.map