@clickview/lite 0.84.1-rc.0 → 0.84.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/bundles.json +2 -2
  2. package/dist/css/4945-lite-72ae59fcab.chunk.css +2 -0
  3. package/dist/css/8852-lite-84d6357a79.chunk.css +1 -0
  4. package/dist/css/{lite-app-b4540a3be1.css → lite-app-084c45f90e.css} +2 -0
  5. package/dist/languages/en.json +1 -1
  6. package/dist/scripts/{1202-d96ad80884-lite.chunk.js → 1202-5473d9962d-lite.chunk.js} +2 -2
  7. package/dist/scripts/{1202-d96ad80884-lite.chunk.js.map → 1202-5473d9962d-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/171-4b1fe5952a-lite.chunk.js +2 -0
  9. package/dist/scripts/171-4b1fe5952a-lite.chunk.js.map +1 -0
  10. package/dist/scripts/1726-b8b386dbd5-lite.chunk.js +2 -0
  11. package/dist/scripts/1726-b8b386dbd5-lite.chunk.js.map +1 -0
  12. package/dist/scripts/1912-52e57d9f16-lite.chunk.js +2 -0
  13. package/dist/scripts/1912-52e57d9f16-lite.chunk.js.map +1 -0
  14. package/dist/scripts/{289-669c0c8222-lite.chunk.js → 289-190caa6455-lite.chunk.js} +2 -2
  15. package/dist/scripts/{289-669c0c8222-lite.chunk.js.map → 289-190caa6455-lite.chunk.js.map} +1 -1
  16. package/dist/scripts/{3249-0b55dec380-lite.chunk.js → 3249-08a22f8aaf-lite.chunk.js} +2 -2
  17. package/dist/scripts/3249-08a22f8aaf-lite.chunk.js.map +1 -0
  18. package/dist/scripts/3840-df2873e349-lite.chunk.js +2 -0
  19. package/dist/scripts/3840-df2873e349-lite.chunk.js.map +1 -0
  20. package/dist/scripts/4006-2b689bdde0-lite.chunk.js +3 -0
  21. package/dist/scripts/4006-2b689bdde0-lite.chunk.js.map +1 -0
  22. package/dist/scripts/4525-2ade147f5d-lite.chunk.js +2 -0
  23. package/dist/scripts/4525-2ade147f5d-lite.chunk.js.map +1 -0
  24. package/dist/scripts/4945-fbbb21cf54-lite.chunk.js +2 -0
  25. package/dist/scripts/4945-fbbb21cf54-lite.chunk.js.map +1 -0
  26. package/dist/scripts/4985-6bdacf82c1-lite.chunk.js +2 -0
  27. package/dist/scripts/4985-6bdacf82c1-lite.chunk.js.map +1 -0
  28. package/dist/scripts/5002-c0f45922c6-lite.chunk.js +2 -0
  29. package/dist/scripts/5002-c0f45922c6-lite.chunk.js.map +1 -0
  30. package/dist/scripts/516-94eeca32e7-lite.chunk.js +2 -0
  31. package/dist/scripts/516-94eeca32e7-lite.chunk.js.map +1 -0
  32. package/dist/scripts/5270-55334d53e9-lite.chunk.js +2 -0
  33. package/dist/scripts/5270-55334d53e9-lite.chunk.js.map +1 -0
  34. package/dist/scripts/5579-7d9081e134-lite.chunk.js +2 -0
  35. package/dist/scripts/{5579-a9c152057f-lite.chunk.js.map → 5579-7d9081e134-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/5712-fd1a7d8d6a-lite.chunk.js +2 -0
  37. package/dist/scripts/5712-fd1a7d8d6a-lite.chunk.js.map +1 -0
  38. package/dist/scripts/639-df1607cbc8-lite.chunk.js +2 -0
  39. package/dist/scripts/639-df1607cbc8-lite.chunk.js.map +1 -0
  40. package/dist/scripts/6909-b5717e92e8-lite.chunk.js +2 -0
  41. package/dist/scripts/6909-b5717e92e8-lite.chunk.js.map +1 -0
  42. package/dist/scripts/7459-c1882c6f0d-lite.chunk.js +3 -0
  43. package/dist/scripts/7459-c1882c6f0d-lite.chunk.js.map +1 -0
  44. package/dist/scripts/7604-5d2ba346e2-lite.chunk.js +3 -0
  45. package/dist/scripts/7604-5d2ba346e2-lite.chunk.js.map +1 -0
  46. package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-899a1d0cb1-lite.chunk.js} +2 -2
  47. package/dist/scripts/7617-899a1d0cb1-lite.chunk.js.map +1 -0
  48. package/dist/scripts/7742-95097c976d-lite.chunk.js +2 -0
  49. package/dist/scripts/7742-95097c976d-lite.chunk.js.map +1 -0
  50. package/dist/scripts/{7843-f6033528ce-lite.chunk.js → 7843-fc9ddb3b52-lite.chunk.js} +2 -2
  51. package/dist/scripts/7843-fc9ddb3b52-lite.chunk.js.map +1 -0
  52. package/dist/scripts/{7867-14c692e69c-lite.chunk.js → 7867-589c7bd788-lite.chunk.js} +3 -3
  53. package/dist/scripts/7867-589c7bd788-lite.chunk.js.map +1 -0
  54. package/dist/scripts/{787-dcb3a0a26c-lite.chunk.js → 787-5c7976e8cb-lite.chunk.js} +2 -2
  55. package/dist/scripts/{787-dcb3a0a26c-lite.chunk.js.map → 787-5c7976e8cb-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/8056-555482555f-lite.chunk.js +2 -0
  57. package/dist/scripts/8056-555482555f-lite.chunk.js.map +1 -0
  58. package/dist/scripts/{8672-6967ce8a23-lite.chunk.js → 8672-5637204ae3-lite.chunk.js} +2 -2
  59. package/dist/scripts/{8672-6967ce8a23-lite.chunk.js.map → 8672-5637204ae3-lite.chunk.js.map} +1 -1
  60. package/dist/scripts/8852-f4e4da0097-lite.chunk.js +2 -0
  61. package/dist/scripts/8852-f4e4da0097-lite.chunk.js.map +1 -0
  62. package/dist/scripts/8944-022dbd6a0b-lite.chunk.js +2 -0
  63. package/dist/scripts/8944-022dbd6a0b-lite.chunk.js.map +1 -0
  64. package/dist/scripts/9742-c839ec5abb-lite.chunk.js +2 -0
  65. package/dist/scripts/9742-c839ec5abb-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 9803-9a666cfdef-lite.chunk.js} +3 -3
  67. package/dist/scripts/9803-9a666cfdef-lite.chunk.js.map +1 -0
  68. package/dist/scripts/bundle-47bd8cc149.min.js +3 -0
  69. package/dist/scripts/{bundle-2bbba2aa8b.min.js.map → bundle-47bd8cc149.min.js.map} +1 -1
  70. package/package.json +1 -1
  71. package/dist/scripts/171-36c7520c9c-lite.chunk.js +0 -2
  72. package/dist/scripts/171-36c7520c9c-lite.chunk.js.map +0 -1
  73. package/dist/scripts/1726-c79cf77a51-lite.chunk.js +0 -2
  74. package/dist/scripts/1726-c79cf77a51-lite.chunk.js.map +0 -1
  75. package/dist/scripts/1912-1f78dc635a-lite.chunk.js +0 -2
  76. package/dist/scripts/1912-1f78dc635a-lite.chunk.js.map +0 -1
  77. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
  78. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
  79. package/dist/scripts/3249-0b55dec380-lite.chunk.js.map +0 -1
  80. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
  81. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
  82. package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
  83. package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
  84. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
  85. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
  86. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
  87. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
  88. package/dist/scripts/5002-7514146621-lite.chunk.js +0 -2
  89. package/dist/scripts/5002-7514146621-lite.chunk.js.map +0 -1
  90. package/dist/scripts/5270-d407e1ae84-lite.chunk.js +0 -2
  91. package/dist/scripts/5270-d407e1ae84-lite.chunk.js.map +0 -1
  92. package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
  93. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
  94. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
  95. package/dist/scripts/6909-a9b8930e37-lite.chunk.js +0 -2
  96. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
  97. package/dist/scripts/7401-833bc4a088-lite.chunk.js +0 -2
  98. package/dist/scripts/7401-833bc4a088-lite.chunk.js.map +0 -1
  99. package/dist/scripts/7604-f664281904-lite.chunk.js +0 -3
  100. package/dist/scripts/7604-f664281904-lite.chunk.js.map +0 -1
  101. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
  102. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
  103. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
  104. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
  105. package/dist/scripts/7867-14c692e69c-lite.chunk.js.map +0 -1
  106. package/dist/scripts/8056-eec7c2fda0-lite.chunk.js +0 -2
  107. package/dist/scripts/8056-eec7c2fda0-lite.chunk.js.map +0 -1
  108. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
  109. package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
  110. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
  111. package/dist/scripts/8944-b56c3e61fc-lite.chunk.js +0 -2
  112. package/dist/scripts/8944-b56c3e61fc-lite.chunk.js.map +0 -1
  113. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js +0 -2
  114. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
  115. package/dist/scripts/bundle-2bbba2aa8b.min.js +0 -3
  116. /package/dist/css/{2074-lite-ac8da6c78b.chunk.css → 4525-lite-ac8da6c78b.chunk.css} +0 -0
  117. /package/dist/css/{8364-lite-db31e36b79.chunk.css → 7459-lite-db31e36b79.chunk.css} +0 -0
  118. /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 4006-2b689bdde0-lite.chunk.js.LICENSE.txt} +0 -0
  119. /package/dist/scripts/{7604-f664281904-lite.chunk.js.LICENSE.txt → 7459-c1882c6f0d-lite.chunk.js.LICENSE.txt} +0 -0
  120. /package/dist/scripts/{7867-14c692e69c-lite.chunk.js.LICENSE.txt → 7604-5d2ba346e2-lite.chunk.js.LICENSE.txt} +0 -0
  121. /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7867-589c7bd788-lite.chunk.js.LICENSE.txt} +0 -0
  122. /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 9803-9a666cfdef-lite.chunk.js.LICENSE.txt} +0 -0
  123. /package/dist/scripts/{bundle-2bbba2aa8b.min.js.LICENSE.txt → bundle-47bd8cc149.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8056-555482555f-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/libs/shared/src/enums/InteractiveOriginType.ts","file:///app/packages/projects/lite/src/apps/interactives/utils/getInteractiveAnalyticsData.ts","file:///app/packages/projects/lite/src/apps/interactives/views/copy-interactive/CopyInteractiveView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","export enum InteractiveOriginType {\n Original = 0,\n Copy = 1\n}\n","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsDataPayload } from 'libs/analytics/models/AnalyticsEvent';\n\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nexport function getInteractiveAnalyticsData(\n interactiveMetadata: InteractiveMetadata,\n extraAnalyticsData: HashObject = {}\n): AnalyticsDataPayload {\n if (!interactiveMetadata)\n return null;\n\n const data: AnalyticsDataPayload = {\n ...extraAnalyticsData,\n id: interactiveMetadata.id,\n interactiveId: interactiveMetadata.interactiveId,\n name: interactiveMetadata.name,\n status: interactiveMetadata.status,\n originType: interactiveMetadata.originType\n };\n\n if (interactiveMetadata?._parentClip?.id)\n data.clip = { id: interactiveMetadata?._parentClip?.id, name: interactiveMetadata?._parentClip?.name };\n\n if (interactiveMetadata?._parentVideo?.id)\n data.video = { id: interactiveMetadata?._parentVideo?.id, name: interactiveMetadata?._parentVideo?.name };\n\n return data;\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { InteractiveOriginType } from 'libs/shared/enums/InteractiveOriginType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { CreateInteractiveMetadataRequest, CurrentUser, InteractiveMetadata, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { getInteractiveAnalyticsData } from 'apps/interactives/utils/getInteractiveAnalyticsData';\n\nconst namespace = 'interactives.copyInteractive';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInteractiveProps extends PopupViewProps {\n interactiveMetadataId: string;\n fromEdit: boolean;\n}\n\nexport function CopyInteractiveView(props: CopyInteractiveProps): React.ReactElement {\n const { interactiveMetadataId, fromEdit, closePopup } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { getGatedPermission } = usePermissions();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const interactiveMetadata = Flight.useBasicFetch<InteractiveMetadata>(\n InteractiveRequests.interactiveMetadata(interactiveMetadataId)\n );\n\n const [ spinner, setSpinner ] = React.useState(false);\n\n function copyInteractive(): void {\n setSpinner(true);\n\n const data: CreateInteractiveMetadataRequest = {\n name: `${getPhrase('copyPrefix')} ${interactiveMetadata.data.name}`,\n interactiveId: interactiveMetadata.data.interactiveId,\n owner: { id: currentUser.data.id },\n originType: InteractiveOriginType.Copy,\n status: CurationStatus.Draft\n };\n\n const videoId = interactiveMetadata.data._parentClip?.id ?? interactiveMetadata.data._parentVideo.id;\n\n Flight.fetch(\n dispatch,\n InteractiveRequests.createInteractiveMetadata(\n videoId,\n data,\n onSuccess,\n onError\n )\n );\n }\n\n function onSuccess(data: InteractiveMetadata): void {\n closePopup();\n alerts.success(getPhrase('success', { name: interactiveMetadata.data.name, escapeText: true }));\n Core.AppLinkHelper.trigger({\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ data.id, TextHelper.slugify(data.name) ]\n });\n\n /**\n * Taking all the data from the interactive copied from\n * and overwritting any new props (e.g. the new id)\n */\n const analyticsData = getInteractiveAnalyticsData({\n ...interactiveMetadata.data,\n ...data\n });\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Complete\n });\n }\n\n function cancel(): void {\n closePopup();\n const analyticsData = getInteractiveAnalyticsData(interactiveMetadata.data);\n AnalyticsHelper.logUserAction(analyticsData, {\n actionType: UserAction.Copy,\n entity: EntityType.Interactive,\n location: LocationContext.CopyInteractive,\n workflowPhase: WorkflowPhase.Discard\n });\n }\n\n function onError(): void {\n alerts.error(getPhrase('error'));\n closePopup();\n }\n\n const dataLoaded = !!interactiveMetadata.data;\n\n const phraseString = fromEdit ? 'hasResults' : 'popupBody';\n\n if (getGatedPermission(PermissionName.UploadVideo) === 'hard-gate') {\n return (\n <HardGatePopup\n feature='copy-interactives'\n animate={false}\n closePopup={props.closePopup}\n />\n );\n }\n\n return (\n <Popup\n title={getPhrase('popupTitle')}\n closePopup={cancel}\n showLoadingSpinner={!dataLoaded}\n >\n <p><Text namespace={namespace} phrase={phraseString} options={{ name: interactiveMetadata.data?.name }} /></p>\n <PopupButtons>\n <PopupButtons.Cancel onClick={cancel} />\n <PopupButtons.Submit onClick={copyInteractive} variant='dark' text={getPhrase('copy')} showSpinner={spinner} />\n </PopupButtons>\n </Popup>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\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 = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","InteractiveOriginType","getInteractiveAnalyticsData","interactiveMetadata","extraAnalyticsData","data","id","interactiveId","name","status","originType","_parentClip","clip","_parentVideo","video","getPhrase","CopyInteractiveView","interactiveMetadataId","fromEdit","closePopup","dispatch","alerts","getGatedPermission","currentUser","spinner","setSpinner","onSuccess","success","escapeText","application","action","args","analyticsData","actionType","entity","location","workflowPhase","cancel","onError","error","dataLoaded","phraseString","feature","animate","title","showLoadingSpinner","options","onClick","owner","videoId","variant","text","showSpinner","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","animation","hideTitle","closeButton","as","src","altText","appLink","analyticsOptions","descriptor","extraContent"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8672],{26136:(e,t,a)=>{a.d(t,{B:()=>s});var n=a(76198),r=a(23481),i=a(64818),c=r.T.encloseNamespace("shared.analyticsUtils");function s(e,t){return e?t?(0,n._8)((a=e.id,r=e.sessionId,s=+"".concat(a||function(e){if(!e)return 0;for(var t=0,a=0;a<e.length;a++)t=(t<<5)-t+e.charCodeAt(a),t|=0;return Math.abs(t)}(r)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:s})):e.deleted?c("deleted"):i.l.getFullName(e)||c("anonUser"):c("anonUser");var a,r,s}},40782:(e,t,a)=>{a.d(t,{I:()=>n,O:()=>o});var n,r=a(32735),i=a(2606),c=a(362);function s(e){var t=r.useCallback(function(t){if(t){var a=t.r.baseVal.value,n=2*Math.PI*a,r=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=r.toString()}},[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:c.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function o(e){var t,a=(0,i.Ki)(e.percentage),o=e.size||(e.layout===n.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(a);return e.layout===n.LabelOnly?r.createElement("span",{className:(0,i.IA)(a)},l):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&r.createElement("span",{className:"me-2"},l),r.createElement("div",{className:(0,i.tw)(o,a)},r.createElement(s,{percentage:a,size:o,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&r.createElement("span",{className:c.Z.centredPercentageText},l)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),o.defaultProps={layout:n.CircleOnly}},2606:(e,t,a)=>{a.d(t,{DV:()=>y,IA:()=>g,Ki:()=>p,Mk:()=>s,V4:()=>m,pu:()=>d,tw:()=>v,zR:()=>f});var n=a(94892),r=a(362);function i(e){return i="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},i(e)}function c(e,t,a){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var s,o=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(s||(s={}));var u=c(c(c({},s.ExtraSmall,{size:2}),s.Small,{size:2}),s.Large,{size:5.8});function d(e){var t=u[e].size,a=e===s.Large?l:o;return"".concat(t/2-2*a,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?r.Z.circleSuccess:e>=t.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function v(e,t){var a="d-inline-block ".concat(r.Z.circleContainer);return e===s.Large&&(a+=" ".concat(r.Z.lgCircleContainer)),e===s.ExtraSmall&&(a+=" ".concat(r.Z.xsCircleContainer)),f(t)&&(a+=" ".concat(r.Z.pendingCircle)),a}function p(e){if(!f(e))return+e.toFixed(2)}function y(e){return f(e)?"--%":"".concat(Math.round(100*e),"%")}function f(e){return"number"!=typeof e}},94892:(e,t,a)=>{a.d(t,{T:()=>r,i:()=>n});var n={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},18006:(e,t,a)=>{a.d(t,{A:()=>n});var n="GRWx6w"},9566:(e,t,a)=>{a.d(t,{$Z:()=>p,G6:()=>m,GJ:()=>v,VE:()=>h,_w:()=>g,po:()=>f,vJ:()=>y});var n=a(23481),r=a(110),i=a(33518),c=a(2510),s=a(4594),o=a(35223),l=a(14070),u=a(97291),d=n.T.encloseNamespace("myShares.demoInsights"),m={type:c.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:s.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},g=Object.assign(Object.assign({},m),{type:c.y.Open,expireDate:r.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),v={share:m,sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString()},p=Object.assign(Object.assign({},v),{share:g}),y={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},f={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},h={svgName:o.vn.Analytics,label:d("demoInsights"),appLink:y,group:"insights",className:"btn btn-outline-dark"}},44183:(e,t,a)=>{a.r(t),a.d(t,{InsightsHeatmapDemoView:()=>I});var n=a(32735),r=a(23481),i=a(2948),c=a(20354),s=a(26025),o=a(2510),l=a(60051),u=a(39151),d=a(54405),m=a(47812),g=a(31949),v=a(93322),p=a(79612),y=a(86702),f=a(74049),h=a(17132),b=a(18006),S=a(9566),E=a(10447);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var k=r.T.encloseNamespace("shared.insightsHeatmap");function I(e){var t,a,r,I,w,C,j,D,A=(j=(0,i.D)(y.y.ANONYMISE_USERS),D=1,function(e){if(Array.isArray(e))return e}(j)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,c,s=[],o=!0,l=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){l=!0,r=e}finally{try{if(!o&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(l)throw r}}return s}}(j,D)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?O(e,t):void 0}}(j,D)||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.")}())[0];(0,v.F)();var M=c.a.useBasicFetch(g.N.currentUser()),R=c.a.useBasicFetch(d.X.interactiveMetadata()),L=c.a.useBasicFetch(u.L.config()),N=s.B.getAudienceAppLinkParams(),T=s.B.getDateRangeAppLinkParams(),_=c.a.useBasicFetch(d.X.aggregateHeatmap()),x=c.a.useBasicFetch(d.X.individualHeatmap()),z=c.a.useBasicFetch(d.X.users()),V=c.a.useBasicFetch(d.X.videoViews()),H=c.a.useBasicFetch(R.data&&m.k.createViewKey(b.A,l.f.Share));(0,p.M)({title:R.data?k("pageTitle",{video:null===(t=R.data)||void 0===t?void 0:t.name}):null});var B=!!(M.data&&V.data&&R.data&&_.data&&H.data&&z.data),P=!!x.data,G=Object.assign(Object.assign({},N),T),Z=e.type===o.y.Open?S._w:S.G6;return n.createElement("div",{className:"px-3"},n.createElement(f.j,{video:R.data,tabs:(0,E.aq)(null===(a=R.data)||void 0===a?void 0:a.id,"heatmap",G,e.type),dateRangeAppLinkParams:T,share:Object.assign(Object.assign({},Z),{objectId:null!==(I=null===(r=R.data)||void 0===r?void 0:r.id)&&void 0!==I?I:"0"}),yearGroups:[],markingRequired:e.type!==o.y.Open,isDemo:!0,hasData:!0}),n.createElement(h.w,{aggregateEngagement:_.data,individualEngagement:null===(w=x.data)||void 0===w?void 0:w.data,yearGroups:null===(C=V.data)||void 0===C?void 0:C.yearGroupCount,config:L.data,users:z.data,viewKey:H.data,hasDataLoaded:B,tableDataLoaded:P,anonymiseUsers:A,hideStaffResults:!1}))}},362:(e,t,a)=>{a.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
- //# sourceMappingURL=8672-6967ce8a23-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8672],{26136:(e,t,a)=>{a.d(t,{B:()=>s});var n=a(76198),r=a(23481),i=a(64818),c=r.T.encloseNamespace("shared.analyticsUtils");function s(e,t){return e?t?(0,n._8)((a=e.id,r=e.sessionId,s=+"".concat(a||function(e){if(!e)return 0;for(var t=0,a=0;a<e.length;a++)t=(t<<5)-t+e.charCodeAt(a),t|=0;return Math.abs(t)}(r)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:s})):e.deleted?c("deleted"):i.l.getFullName(e)||c("anonUser"):c("anonUser");var a,r,s}},40782:(e,t,a)=>{a.d(t,{I:()=>n,O:()=>o});var n,r=a(32735),i=a(2606),c=a(362);function s(e){var t=r.useCallback(function(t){if(t){var a=t.r.baseVal.value,n=2*Math.PI*a,r=n-e.percentage*n;t.style.strokeDasharray="".concat(n," ").concat(n),t.style.strokeDashoffset=r.toString()}},[e.percentage]);return r.createElement("svg",null,r.createElement("circle",{r:(0,i.pu)(e.size),className:c.Z.backgroundCircle}),!(0,i.zR)(e.percentage)&&r.createElement("circle",{ref:t,r:(0,i.pu)(e.size),className:(0,i.V4)(e.percentage,e.scoreThresholds)}))}function o(e){var t,a=(0,i.Ki)(e.percentage),o=e.size||(e.layout===n.LabelInside?i.Mk.Large:i.Mk.Small),l=e.customLabel||(0,i.DV)(a);return e.layout===n.LabelOnly?r.createElement("span",{className:(0,i.IA)(a)},l):r.createElement("div",{className:"d-flex align-items-center justify-content-between ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.layout===n.LabelBefore&&r.createElement("span",{className:"me-2"},l),r.createElement("div",{className:(0,i.tw)(o,a)},r.createElement(s,{percentage:a,size:o,scoreThresholds:e.scoreThresholds}),e.layout===n.LabelInside&&r.createElement("span",{className:c.Z.centredPercentageText},l)))}!function(e){e.CircleOnly="circle_only",e.LabelOnly="label_only",e.LabelBefore="label_before",e.LabelInside="label_inside"}(n||(n={})),o.defaultProps={layout:n.CircleOnly}},2606:(e,t,a)=>{a.d(t,{DV:()=>y,IA:()=>g,Ki:()=>p,Mk:()=>s,V4:()=>m,pu:()=>d,tw:()=>v,zR:()=>f});var n=a(94892),r=a(362);function i(e){return i="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},i(e)}function c(e,t,a){return(t=function(e){var t=function(e){if("object"!=i(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=i(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==i(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var s,o=.2,l=.36;!function(e){e.Small="small",e.Large="large",e.ExtraSmall="extraSmall"}(s||(s={}));var u=c(c(c({},s.ExtraSmall,{size:2}),s.Small,{size:2}),s.Large,{size:5.8});function d(e){var t=u[e].size,a=e===s.Large?l:o;return"".concat(t/2-2*a,"rem")}function m(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?r.Z.circleSuccess:e>=t.MODERATE?r.Z.circleWarning:r.Z.circleDanger}function g(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:n.i;return e>=t.HIGH?"text-success":e>=t.MODERATE?"text-warning":"text-danger"}function v(e,t){var a="d-inline-block ".concat(r.Z.circleContainer);return e===s.Large&&(a+=" ".concat(r.Z.lgCircleContainer)),e===s.ExtraSmall&&(a+=" ".concat(r.Z.xsCircleContainer)),f(t)&&(a+=" ".concat(r.Z.pendingCircle)),a}function p(e){if(!f(e))return+e.toFixed(2)}function y(e){return f(e)?"--%":"".concat(Math.round(100*e),"%")}function f(e){return"number"!=typeof e}},94892:(e,t,a)=>{a.d(t,{T:()=>r,i:()=>n});var n={HIGH:.75,MODERATE:.5},r={HIGH:.7,MODERATE:.7}},54405:(e,t,a)=>{a.d(t,{X:()=>n});var n={interactive:function(){return{url:"/mocks/insights/interactive.json",key:"demo:interactive",normalize:!1}},interactiveMetadata:function(){return{url:"/mocks/insights/interactive-metadata.json",key:"demo:interactive:metadata",normalize:!1}},interactiveResults:function(){return{url:"/mocks/insights/interactive-results.json",key:"demo:interactive:results",normalize:!1}},videoViews:function(){return{url:"/mocks/insights/video-views.json",key:"demo:video:views",normalize:!1}},users:function(){return{url:"/mocks/insights/users.json",key:"demo:users",normalize:!1}},individualHeatmap:function(){return{url:"/mocks/insights/individual-heatmap.json",key:"demo:individual:heatmap",normalize:!1}},aggregateHeatmap:function(){return{url:"/mocks/insights/aggregate-heatmap.json",key:"demo:aggregate:heatmap",normalize:!1}}}},18006:(e,t,a)=>{a.d(t,{A:()=>n});var n="GRWx6w"},9566:(e,t,a)=>{a.d(t,{$Z:()=>p,G6:()=>m,GJ:()=>v,VE:()=>h,_w:()=>g,po:()=>f,vJ:()=>y});var n=a(23481),r=a(110),i=a(33518),c=a(2510),s=a(4594),o=a(35223),l=a(14070),u=a(97291),d=n.T.encloseNamespace("myShares.demoInsights"),m={type:c.y.Link,privacy:i.e.JustMySchool,objectId:"0",objectTypeId:s.E.Interactive,viewCount:28,accessCount:15,dateCreated:(new Date).toISOString(),dateShared:(new Date).toISOString(),expireDate:null,link:{shortenedEmbedUrl:"",shortenedUrl:""},shareId:"0",ownerCustomerId:0,ownerId:0,recipients:[],options:{preventScrubbing:!1,immediateFeedback:!1}},g=Object.assign(Object.assign({},m),{type:c.y.Open,expireDate:r.O.add(new Date(m.dateCreated),30,"days").toISOString(),privacy:i.e.PinCode}),v={share:m,sharedObject:null,shareRecipients:null,dateShared:r.O.subtract(new Date,7,"days").toISOString()},p=Object.assign(Object.assign({},v),{share:g}),y={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_DEMO},f={application:u.O.MY_SHARES,action:l.e.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_DEMO},h={svgName:o.vn.Analytics,label:d("demoInsights"),appLink:y,group:"insights",className:"btn btn-outline-dark"}},44183:(e,t,a)=>{a.r(t),a.d(t,{InsightsHeatmapDemoView:()=>I});var n=a(32735),r=a(23481),i=a(2948),c=a(20354),s=a(26025),o=a(2510),l=a(60051),u=a(39151),d=a(54405),m=a(47812),g=a(31949),v=a(93322),p=a(79612),y=a(86702),f=a(9540),h=a(17132),b=a(18006),S=a(9566),E=a(10447);function O(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var k=r.T.encloseNamespace("shared.insightsHeatmap");function I(e){var t,a,r,I,w,C,j,D,A=(j=(0,i.D)(y.y.ANONYMISE_USERS),D=1,function(e){if(Array.isArray(e))return e}(j)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,c,s=[],o=!0,l=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){l=!0,r=e}finally{try{if(!o&&null!=a.return&&(c=a.return(),Object(c)!==c))return}finally{if(l)throw r}}return s}}(j,D)||function(e,t){if(e){if("string"==typeof e)return O(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?O(e,t):void 0}}(j,D)||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.")}())[0];(0,v.F)();var M=c.a.useBasicFetch(g.N.currentUser()),R=c.a.useBasicFetch(d.X.interactiveMetadata()),L=c.a.useBasicFetch(u.L.config()),N=s.B.getAudienceAppLinkParams(),T=s.B.getDateRangeAppLinkParams(),_=c.a.useBasicFetch(d.X.aggregateHeatmap()),x=c.a.useBasicFetch(d.X.individualHeatmap()),z=c.a.useBasicFetch(d.X.users()),V=c.a.useBasicFetch(d.X.videoViews()),H=c.a.useBasicFetch(R.data&&m.k.createViewKey(b.A,l.f.Share));(0,p.M)({title:R.data?k("pageTitle",{video:null===(t=R.data)||void 0===t?void 0:t.name}):null});var B=!!(M.data&&V.data&&R.data&&_.data&&H.data&&z.data),P=!!x.data,G=Object.assign(Object.assign({},N),T),Z=e.type===o.y.Open?S._w:S.G6;return n.createElement("div",{className:"px-3"},n.createElement(f.j,{video:R.data,tabs:(0,E.aq)(null===(a=R.data)||void 0===a?void 0:a.id,"heatmap",G,e.type),dateRangeAppLinkParams:T,share:Object.assign(Object.assign({},Z),{objectId:null!==(I=null===(r=R.data)||void 0===r?void 0:r.id)&&void 0!==I?I:"0"}),yearGroups:[],markingRequired:e.type!==o.y.Open,isDemo:!0,hasData:!0}),n.createElement(h.w,{aggregateEngagement:_.data,individualEngagement:null===(w=x.data)||void 0===w?void 0:w.data,yearGroups:null===(C=V.data)||void 0===C?void 0:C.yearGroupCount,config:L.data,users:z.data,viewKey:H.data,hasDataLoaded:B,tableDataLoaded:P,anonymiseUsers:A,hideStaffResults:!1}))}},362:(e,t,a)=>{a.d(t,{Z:()=>n});const n={circleContainer:"p8Vgz",backgroundCircle:"asGGE",circleSuccess:"PXLNj",circleWarning:"ZckRN",circleDanger:"slBRg",lgCircleContainer:"N8KCI",xsCircleContainer:"RPqZ2",pendingCircle:"DKrcq",centredPercentageText:"tpmLR"}}}]);
2
+ //# sourceMappingURL=8672-5637204ae3-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/8672-6967ce8a23-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","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/views/demo/heatmap/InsightsHeatmapDemoView.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\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};","export const DEMO_INTERACTIVE_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 dateShared: 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_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\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\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_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","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapDemoViewProps {\n type?: ShareType;\n}\n\nexport function InsightsHeatmapDemoView(props: InsightsHeatmapDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(DEMO_INTERACTIVE_ID, MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: video.data?.id ?? '0'\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n hideStaffResults={false}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","PercentageIndicatorLayout","ProgressCircle","props","ref","circle","radius","r","baseVal","value","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","className","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","ScoreThresholdDefaults","ScoreThresholdInsights","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_ID","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","svgName","appLink","group","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","title","name","hasDataLoaded","tableDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","yearGroupCount","hideStaffResults"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/8672-5637204ae3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AnonymiseUserUtils.ts","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicator.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/PercentageIndicatorUtils.ts","file:///app/packages/libs/shared/src/constants/ScoreThresholds.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","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/views/demo/heatmap/InsightsHeatmapDemoView.tsx","file:///app/packages/libs/shared/src/components/percentage-indicator/percentage-indicator.scss"],"sourcesContent":["import { animals, colors, Config as UniqueNamesConfig, uniqueNamesGenerator } from 'unique-names-generator';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nconst namespace = 'shared.analyticsUtils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction guidToSeed(guid: string): number {\n if (!guid)\n return 0;\n\n // Simple hash function (DJB2-like) for browsers\n let hash = 0;\n for (let i = 0; i < guid.length; i++) {\n const char = guid.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n return Math.abs(hash);\n}\n\nfunction getUniqueNamesConfig(userId: string, sessionId: string): UniqueNamesConfig {\n /**\n * Generate a seed that is unique to each user but changes every 5 minutes.\n * \n * We use a seed so that if the same user's name is anonymised multiple times\n * in quick succession (e.g. multiple renders), the same name will be returned each time.\n * \n * We change the seed every 5 minutes so that students don't always have the same name.\n */\n const seed = +`${userId || guidToSeed(sessionId)}${Math.floor((new Date()).getMinutes() / 5)}`;\n\n return {\n dictionaries: [ colors, animals ],\n separator: ' ',\n length: 2,\n style: 'capital',\n seed\n };\n}\n\nexport function anonymiseUserName(user: AnonUser, shouldAnonymise: boolean): string {\n if (!user) {\n return getPhrase('anonUser');\n }\n\n if (!shouldAnonymise) {\n if (user.deleted)\n return getPhrase('deleted');\n\n return UserHelper.getFullName(user) || getPhrase('anonUser');\n }\n\n return uniqueNamesGenerator(getUniqueNamesConfig(user.id, user.sessionId));\n}\n","import React from 'react';\n\nimport { ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport {\n getCircleClassName,\n getCircleContainerClassName,\n getCircleRadius,\n getColouredLabelClassName,\n getFormattedPercentage,\n getPercentageToFixed,\n isPending,\n ProgressCircleSize\n} from './PercentageIndicatorUtils';\n\nimport styles from './percentage-indicator.scss';\n\ninterface ProgressCircleProps {\n size: ProgressCircleSize;\n scoreThresholds?: ScoreThresholds;\n percentage?: number;\n}\n\nfunction ProgressCircle(props: ProgressCircleProps): JSX.Element {\n const ref = React.useCallback((circle: SVGCircleElement) => {\n if (!circle)\n return;\n\n const radius = circle.r.baseVal.value;\n const circumference = 2 * Math.PI * radius;\n const offset = circumference - props.percentage * circumference;\n\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n circle.style.strokeDashoffset = offset.toString();\n }, [props.percentage]);\n\n return (\n <svg>\n <circle r={getCircleRadius(props.size)} className={styles.backgroundCircle} />\n {!isPending(props.percentage) &&\n <circle\n ref={ref}\n r={getCircleRadius(props.size)}\n className={getCircleClassName(props.percentage, props.scoreThresholds)}\n />\n }\n </svg>\n );\n}\n\nexport enum PercentageIndicatorLayout {\n CircleOnly = 'circle_only',\n LabelOnly = 'label_only',\n LabelBefore = 'label_before',\n LabelInside = 'label_inside'\n}\n\ninterface PercentageIndicatorProps {\n layout: PercentageIndicatorLayout;\n percentage?: number; // Between 0 and 1 or undefined for pending\n className?: string;\n customLabel?: string;\n scoreThresholds?: ScoreThresholds;\n size?: ProgressCircleSize;\n}\n\nPercentageIndicator.defaultProps = {\n layout: PercentageIndicatorLayout.CircleOnly\n};\n\nexport function PercentageIndicator(props: PercentageIndicatorProps): JSX.Element {\n const percentageToFixed = getPercentageToFixed(props.percentage);\n\n const size = props.size ||\n (props.layout === PercentageIndicatorLayout.LabelInside\n ? ProgressCircleSize.Large\n : ProgressCircleSize.Small\n );\n\n const label = props.customLabel || getFormattedPercentage(percentageToFixed);\n\n if (props.layout === PercentageIndicatorLayout.LabelOnly)\n return (\n <span className={getColouredLabelClassName(percentageToFixed)}>\n {label}\n </span>\n );\n\n return (\n <div className={`d-flex align-items-center justify-content-between ${props.className ?? ''}`}>\n {props.layout === PercentageIndicatorLayout.LabelBefore &&\n <span className='me-2'>\n {label}\n </span>\n }\n <div className={getCircleContainerClassName(size, percentageToFixed)}>\n <ProgressCircle percentage={percentageToFixed} size={size} scoreThresholds={props.scoreThresholds} />\n {props.layout === PercentageIndicatorLayout.LabelInside &&\n <span className={styles.centredPercentageText}>\n {label}\n </span>\n }\n </div>\n </div>\n );\n}","import { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\n\nimport styles from './percentage-indicator.scss';\n\n/**\n * Values for width and strokeWidth are taken from progress-circle.scss.\n * If either are changed, they must be updated in both places.\n */\nconst CIRCLE_WIDTH = 2; // rem\nconst CIRCLE_WIDTH_LG = 5.8; // rem\nconst CIRCLE_STROKE_WIDTH = 0.2; // rem\nconst CIRCLE_STROKE_WIDTH_LG = 0.36; // rem\n \nexport enum ProgressCircleSize {\n Small = 'small',\n Large = 'large',\n ExtraSmall = 'extraSmall'\n}\n\nconst ProgressCircleSizeMap = {\n [ProgressCircleSize.ExtraSmall]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Small]: {\n size: CIRCLE_WIDTH\n },\n [ProgressCircleSize.Large]: {\n size: CIRCLE_WIDTH_LG\n }\n};\n\n/**\n * radius = width / 2 - strokeWidth * 2\n */\nexport function getCircleRadius(size: ProgressCircleSize): string {\n const width = ProgressCircleSizeMap[size].size;\n const strokeWidth = size === ProgressCircleSize.Large ? CIRCLE_STROKE_WIDTH_LG : CIRCLE_STROKE_WIDTH;\n return `${width / 2 - strokeWidth * 2}rem`;\n}\n \nexport function getCircleClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return styles.circleSuccess;\n \n if (percentage >= scoreThresholds.MODERATE)\n return styles.circleWarning;\n \n return styles.circleDanger;\n}\n \nexport function getColouredLabelClassName(\n percentage: number,\n scoreThresholds: ScoreThresholds = ScoreThresholdDefaults\n): string {\n if (percentage >= scoreThresholds.HIGH)\n return 'text-success';\n \n if (percentage >= scoreThresholds.MODERATE)\n return 'text-warning';\n \n return 'text-danger';\n}\n \nexport function getCircleContainerClassName(size: ProgressCircleSize, percentage?: number): string {\n let className = `d-inline-block ${styles.circleContainer}`;\n \n if (size === ProgressCircleSize.Large)\n className += ` ${styles.lgCircleContainer}`;\n\n if (size === ProgressCircleSize.ExtraSmall)\n className += ` ${styles.xsCircleContainer}`;\n\n if (isPending(percentage))\n className += ` ${styles.pendingCircle}`;\n \n return className;\n}\n\nexport function getPercentageToFixed(percentage?: number): number | undefined {\n if (isPending(percentage))\n return;\n \n return +percentage.toFixed(2);\n}\n \nexport function getFormattedPercentage(percentage?: number): string {\n if (isPending(percentage))\n return `--%`;\n\n return `${Math.round(percentage * 100)}%`;\n}\n\nexport function isPending(percentage?: number): boolean {\n return typeof percentage !== 'number';\n}","export interface ScoreThresholds {\n HIGH: number;\n MODERATE: number;\n}\n\nexport const ScoreThresholdDefaults: ScoreThresholds = {\n HIGH: 0.75,\n MODERATE: 0.5\n};\n\nexport const ScoreThresholdInsights: ScoreThresholds = {\n HIGH: 0.7,\n MODERATE: 0.7\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};","export const DEMO_INTERACTIVE_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 dateShared: 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_OPEN_CLASSROOM_SHARE: Share = {\n ...DEMO_INSIGHTS_SHARE,\n type: ShareType.Open,\n expireDate: DateHelper.add(new Date(DEMO_INSIGHTS_SHARE.dateCreated), 30, 'days').toISOString(),\n privacy: SharePrivacy.PinCode\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\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA: MySharesTableData = {\n ...DEMO_INSIGHTS_SHARE_TABLE_DATA,\n share: DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE\n};\n\nexport const DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_OPEN_CLASSROOM_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","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { VideoViewEventResponse } from 'libs/shared/apps/analytics/interfaces/VideoViewEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { MediaIdType } from 'libs/shared/enums/MediaIdType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { PlayerRequests } from 'libs/shared/flight-requests/PlayerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Engagement, IndividualEngagementResponse, InteractiveMetadata, PlayerViewKey } from 'libs/shared/interfaces';\nimport { AnonUser } from 'libs/shared/interfaces/models/interactive-results/AnonUser';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nimport { InsightsHeader } from 'apps/my-shares/components/insights-header/InsightsHeader';\nimport { InsightsHeatmap } from 'apps/my-shares/components/insights-heatmap/InsightsHeatmap';\nimport { DEMO_INTERACTIVE_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\nimport { getInsightsDemoInteractiveTabs } from 'apps/my-shares/utils/InsightsAppLinkUtils';\n\nconst namespace = 'shared.insightsHeatmap';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsHeatmapDemoViewProps {\n type?: ShareType;\n}\n\nexport function InsightsHeatmapDemoView(props: InsightsHeatmapDemoViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(ViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<InteractiveMetadata>(\n InsightsDemoRequests.interactiveMetadata()\n );\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n InsightsDemoRequests.aggregateHeatmap()\n );\n\n const individualEngagement = Flight.useBasicFetch<IndividualEngagementResponse>(\n InsightsDemoRequests.individualHeatmap()\n );\n\n const users = Flight.useBasicFetch<AnonUser[]>(InsightsDemoRequests.users());\n\n const videoViews = Flight.useBasicFetch<VideoViewEventResponse>(InsightsDemoRequests.videoViews());\n\n const viewKey = Flight.useBasicFetch<PlayerViewKey>(video.data &&\n PlayerRequests.createViewKey(DEMO_INTERACTIVE_ID, MediaIdType.Share));\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n\n const hasDataLoaded =\n !!currentUser.data &&\n !!videoViews.data &&\n !!video.data &&\n !!aggregateEngagement.data &&\n !!viewKey.data &&\n !!users.data;\n\n const tableDataLoaded = !!individualEngagement.data;\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const share = props.type === ShareType.Open ? DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE : DEMO_INSIGHTS_SHARE;\n\n return (\n <div className='px-3'>\n <InsightsHeader\n video={video.data}\n tabs={getInsightsDemoInteractiveTabs(video.data?.id, 'heatmap', params, props.type)}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n share={{\n ...share,\n objectId: video.data?.id ?? '0'\n }}\n yearGroups={[]}\n markingRequired={props.type !== ShareType.Open}\n isDemo\n hasData\n />\n\n <InsightsHeatmap\n aggregateEngagement={aggregateEngagement.data}\n individualEngagement={individualEngagement.data?.data}\n yearGroups={videoViews.data?.yearGroupCount}\n config={config.data}\n users={users.data}\n viewKey={viewKey.data}\n hasDataLoaded={hasDataLoaded}\n tableDataLoaded={tableDataLoaded}\n anonymiseUsers={anonymiseUsers}\n hideStaffResults={false}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"circleContainer\":\"p8Vgz\",\"backgroundCircle\":\"asGGE\",\"circleSuccess\":\"PXLNj\",\"circleWarning\":\"ZckRN\",\"circleDanger\":\"slBRg\",\"lgCircleContainer\":\"N8KCI\",\"xsCircleContainer\":\"RPqZ2\",\"pendingCircle\":\"DKrcq\",\"centredPercentageText\":\"tpmLR\"};"],"names":["getPhrase","anonymiseUserName","user","shouldAnonymise","userId","id","sessionId","seed","guid","hash","i","length","charCodeAt","Math","abs","guidToSeed","floor","Date","getMinutes","dictionaries","separator","style","deleted","PercentageIndicatorLayout","ProgressCircle","props","ref","circle","radius","r","baseVal","value","circumference","PI","offset","percentage","strokeDasharray","strokeDashoffset","toString","size","className","scoreThresholds","PercentageIndicator","percentageToFixed","layout","LabelInside","label","customLabel","LabelOnly","LabelBefore","defaultProps","CircleOnly","ProgressCircleSize","CIRCLE_STROKE_WIDTH","CIRCLE_STROKE_WIDTH_LG","ProgressCircleSizeMap","ExtraSmall","Small","Large","getCircleRadius","width","strokeWidth","getCircleClassName","HIGH","MODERATE","getColouredLabelClassName","getCircleContainerClassName","isPending","getPercentageToFixed","toFixed","getFormattedPercentage","round","ScoreThresholdDefaults","ScoreThresholdInsights","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","DEMO_INTERACTIVE_ID","DEMO_INSIGHTS_SHARE","type","privacy","objectId","objectTypeId","viewCount","accessCount","dateCreated","toISOString","dateShared","expireDate","link","shortenedEmbedUrl","shortenedUrl","shareId","ownerCustomerId","ownerId","recipients","options","preventScrubbing","immediateFeedback","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE","DEMO_INSIGHTS_SHARE_TABLE_DATA","share","sharedObject","shareRecipients","DEMO_INSIGHTS_OPEN_CLASSROOM_SHARE_TABLE_DATA","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_OPEN_CLASSROOM_APPLINK","DEMO_INSIGHTS_ACTION","svgName","appLink","group","InsightsHeatmapDemoView","anonymiseUsers","currentUser","video","config","audienceAppLinkParams","dateRangeAppLinkParams","aggregateEngagement","individualEngagement","viewKey","data","title","name","hasDataLoaded","tableDataLoaded","params","tabs","yearGroups","markingRequired","isDemo","hasData","yearGroupCount","hideStaffResults"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8852],{18852:(e,t,a)=>{a.r(t),a.d(t,{PremiumFeaturesView:()=>w});var n=a(32735),i=a(81886),s=a(31453),l=a(15611),r=a(25882),c=a(79967),o=a(79612),m=a(37802),d=a(14070),u=a(97291);const g={heavyBorder:"G167d",columnsResponsive:"zIvqF",columnsResponsiveTwoXl:"iXLu_"};var v=[{title:"Discover and Explore",items:["All subject hubs","Special events calendar","Movies + TV"]},{title:"Watch & learn",items:["HD playback","Clips","Citations","Transcripts","Resources","iOS and Android apps"]}],p=[{title:"Teach & assign",items:["Classrooms","Classroom analytics","Interactive quizzes"]},{title:"Create & manage",items:["Upload and manage videos","Favourite videos","Create playlists"]},{title:"Share integrations",items:["Google Classroom integration","Microsoft Teams integration"]}],b=[{title:"Integrations",items:["SSO","Rostering","Library cataloguing integrations","LMS integrations","LTI support","Export library data","RSS feed"]},{title:"Cast integrations",items:["Apple TV integration","Vivi integration"]},{title:"District management",items:["Library Editor","District library","District analytics"]},{title:"Content control & compliance",items:["Access settings","Student permissions","Content review","Content restrictions"]},{title:"Accessibility & Equity",items:["Local Cache"]}],E=[].concat(p,b);function h(e){var t=e.sections,a=e.twoColumnXl,i=void 0!==a&&a?g.columnsResponsiveTwoXl:g.columnsResponsive;return n.createElement("div",{className:i},t.map(function(e){return n.createElement("div",{className:"mb-3",style:{breakInside:"avoid"},key:e.title},n.createElement("div",{className:"fw-semibold mb-1"},e.title),n.createElement("ul",{className:"mb-0"},e.items.map(function(e){return n.createElement("li",{key:e},e)})))}))}function N(e){var t=e.className,a=e.label,i=void 0===a?"Active":a;return n.createElement("span",{className:(0,s.A)("badge badge-wrapper rounded-pill d-flex justify-content-center","fw-medium badge-sm",t)},i)}function f(e){var t=e.currentPlan,a=e.badgeClassName,i=e.hasExtensions;return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},"Teacher"),t&&n.createElement(N,{className:a})),n.createElement("div",{className:"h1 fw-bold"},"Free"),n.createElement("p",{className:"text-body mt-2 mb-0"},"For educators creating engaging, inclusive, interactive classrooms."),!i&&t&&n.createElement(l.F,{className:"btn btn-link text-info p-0",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.INVITE_COLLEAGUE}},"Invite a colleague"))}function y(e){var t=e.currentPlan,a=e.badgeClassName,i=e.hasExtensions;return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},"Teacher"),t&&n.createElement(N,{className:a})),n.createElement("div",{className:"h1 fw-bold mb-1"},"14 day trial*"),n.createElement("p",{className:"text-muted mb-3"},"*change to Teacher Free after trial finishes"),n.createElement("p",{className:"mb-3 text-body"},"For teachers boosting engagement, personalizing learning, and giving real-time feedback."),n.createElement(l.F,{className:"btn btn-dark w-100",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.INVITE_COLLEAGUE}},i?"Invite a colleague to extend":"Invite a colleague"))}function x(e){var t=e.currentPlan,a=e.badgeClassName,i=e.variant,s="custom"===(void 0===i?"premium":i);return n.createElement("div",{className:"card-body"},n.createElement("div",{className:"d-flex justify-content-between align-items-start mb-2"},n.createElement("h2",{className:"h5 mb-0"},s?"Schools & Districts":"School & District"),t&&n.createElement(N,{className:a}),s&&!t&&n.createElement(N,{className:"text-indigo bg-light-indigo",label:"Premium"})),n.createElement("div",{className:"h1 fw-bold"},s?"Custom":"Premium"),n.createElement("p",{className:"text-body mb-3"},"For ",s?"teachers boosting engagement, personalizing learning, and giving real-time feedback":"schools and districts providing teachers with a platform for differentiated instruction across all grades and subjects","."),s?n.createElement("div",{className:"d-flex flex-column flex-lg-row gap-2"},n.createElement(l.F,{className:"btn btn-outline-dark",style:{flex:"1 1 0"},appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.RECOMMEND_EMAIL}},"Recommend ClickView to your school leader"),n.createElement(l.F,{className:"btn btn-dark",style:{flex:"1 1 0"},appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.UPGRADE}},"Request pricing")):n.createElement(n.Fragment,null,n.createElement("div",{style:{height:"32px"},className:"d-none d-xl-block"}),n.createElement(l.F,{className:"btn btn-outline-dark w-100",appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.UPGRADE}},"Request pricing")))}function C(e){var t=e.TopSection,a=e.sections,i=e.sectionsHeading,l=e.currentPlan,r=e.currentPlanBgColour,o=e.badgeClassName,m=e.columnSizeClass,d=void 0===m?"col-12 col-xl-4":m,u=e.variant,g=e.twoColumnXl,v=void 0!==g&&g,p=e.reducedMinHeight,b=void 0!==p&&p,E=e.hasExtensions,N=(0,c.k)(),f=N.xl,y=N.xxl;return n.createElement("div",{className:d},n.createElement("div",{className:(0,s.A)("card h-100 shadow-sm",l&&r)},n.createElement("div",{style:{minHeight:f||y?b?190:260:0}},n.createElement(t,{currentPlan:l,badgeClassName:o,variant:u,hasExtensions:E})),n.createElement("div",{className:"card-body border-top"},n.createElement("div",{className:"fw-semibold mb-2"},i),n.createElement(h,{sections:a,twoColumnXl:v}))))}function w(){(0,o.M)({title:"Explore our premium features"});var e=(0,r.vb)(),t=e.accessPolicy,a=e.isLoaded,s=(0,m.r)(null).reverseTrialReferralCount<t.metadata.maxReferrals;n.useEffect(function(){a&&(r.uV.has(null==t?void 0:t.id)||i.Q.C$.trigger({application:u.O.DASHBOARD,action:d.e.Dashboard.HOME}))},[a,t]);var l="three-column";"system_cv_trial_reverse_ended_v1"!==(null==t?void 0:t.id)||s||(l="two-column");var c="two-column"===l;return n.createElement("div",{className:"container p-3"},n.createElement("h1",{className:"h3 mb-4"},"Explore our plans"),n.createElement("div",{className:"row g-4"},n.createElement(C,{TopSection:f,sections:v,sectionsHeading:"What you can do:",currentPlan:"system_cv_trial_reverse_ended_v1"===(null==t?void 0:t.id),currentPlanBgColour:"border-blue ".concat(g.heavyBorder),badgeClassName:"text-blue bg-light-blue",columnSizeClass:"col-12 col-xl-4",reducedMinHeight:c,hasExtensions:s}),!c&&n.createElement(C,{TopSection:y,sections:p,sectionsHeading:"Everything in previous, plus:",currentPlan:"system_cv_trial_reverse_14_v1"===(null==t?void 0:t.id),currentPlanBgColour:"border-indigo ".concat(g.heavyBorder),badgeClassName:"text-indigo bg-light-indigo",hasExtensions:s}),n.createElement(C,{TopSection:x,sections:c?E:b,sectionsHeading:"Everything in previous, plus:",currentPlan:!1,columnSizeClass:c?"col-12 col-xl-8":"col-12 col-xl-4",variant:c?"custom":"premium",twoColumnXl:c,reducedMinHeight:c})))}}}]);
2
+ //# sourceMappingURL=8852-f4e4da0097-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8852-f4e4da0097-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/sign-up/views/premium-features/premium-features.scss","file:///app/packages/projects/lite/src/apps/sign-up/views/premium-features/PremiumFeaturesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"heavyBorder\":\"G167d\",\"columnsResponsive\":\"zIvqF\",\"columnsResponsiveTwoXl\":\"iXLu_\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EXPERIMENTAL_GATED_ACCESS_POLICY_IDS, useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './premium-features.scss';\n\n/**\n * WARNING: AI SLOP BELOW - Sha\n */\n\ntype FeatureSection = {\n title: string;\n items: string[];\n};\n\nconst FREE_SECTIONS: FeatureSection[] = [\n {\n title: 'Discover and Explore',\n items: [\n 'All subject hubs',\n 'Special events calendar',\n 'Movies + TV'\n ]\n },\n {\n title: 'Watch & learn',\n items: [\n 'HD playback',\n 'Clips',\n 'Citations',\n 'Transcripts',\n 'Resources',\n 'iOS and Android apps'\n ]\n }\n];\n\nconst PREMIUM_SECTIONS: FeatureSection[] = [\n {\n title: 'Teach & assign',\n items: [\n 'Classrooms',\n 'Classroom analytics',\n 'Interactive quizzes'\n ]\n },\n {\n title: 'Create & manage',\n items: [\n 'Upload and manage videos',\n 'Favourite videos',\n 'Create playlists'\n ]\n },\n {\n title: 'Share integrations',\n items: [\n 'Google Classroom integration',\n 'Microsoft Teams integration'\n ]\n }\n];\n\nconst SCHOOLS_SECTIONS: FeatureSection[] = [\n {\n title: 'Integrations',\n items: [\n 'SSO',\n 'Rostering',\n 'Library cataloguing integrations',\n 'LMS integrations',\n 'LTI support',\n 'Export library data',\n 'RSS feed'\n ]\n },\n {\n title: 'Cast integrations',\n items: [\n 'Apple TV integration',\n 'Vivi integration'\n ]\n },\n {\n title: 'District management',\n items: [\n 'Library Editor',\n 'District library',\n 'District analytics'\n ]\n },\n {\n title: 'Content control & compliance',\n items: [\n 'Access settings',\n 'Student permissions',\n 'Content review',\n 'Content restrictions'\n ]\n },\n {\n title: 'Accessibility & Equity',\n items: [\n 'Local Cache'\n ]\n }\n];\n\nconst SCHOOLS_CUSTOM_SECTIONS: FeatureSection[] = [\n ...PREMIUM_SECTIONS,\n ...SCHOOLS_SECTIONS\n];\n\nfunction FeatureSections(props: { sections: FeatureSection[]; twoColumnXl?: boolean }): JSX.Element {\n const { sections, twoColumnXl = false } = props;\n \n const containerClass = twoColumnXl ? styles.columnsResponsiveTwoXl : styles.columnsResponsive;\n \n return (\n <div className={containerClass}>\n {sections.map(section => (\n <div className='mb-3' style={{ breakInside: 'avoid' }} key={section.title}>\n <div className='fw-semibold mb-1'>{section.title}</div>\n <ul className='mb-0'>\n {section.items.map(item => (\n <li key={item}>{item}</li>\n ))}\n </ul>\n </div>\n ))}\n </div>\n );\n}\n\nfunction CurrentPlanBadge({ className, label = 'Active' }: { className?: string; label?: string }): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex justify-content-center',\n 'fw-medium badge-sm',\n className\n )}>\n {label}\n </span>\n );\n}\n\ninterface TeacherFreeTopProps {\n currentPlan: boolean;\n badgeClassName?: string;\n hasExtensions?: boolean;\n}\n\nfunction TeacherFreeTop(props: TeacherFreeTopProps): JSX.Element {\n const { currentPlan, badgeClassName, hasExtensions } = props;\n\n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>Teacher</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n </div>\n <div className='h1 fw-bold'>Free</div>\n <p className='text-body mt-2 mb-0'>\n For educators creating engaging, inclusive, interactive classrooms.\n </p>\n {!hasExtensions && currentPlan &&\n <AppLink\n className='btn btn-link text-info p-0'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n >\n Invite a colleague\n </AppLink>\n }\n </div>\n );\n}\n\ninterface TeacherPremiumTopProps {\n currentPlan: boolean;\n badgeClassName?: string;\n hasExtensions: boolean;\n}\n\nfunction TeacherPremiumTop(\n props: TeacherPremiumTopProps\n): JSX.Element {\n const { currentPlan, badgeClassName, hasExtensions } = props;\n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>Teacher</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n </div>\n <div className='h1 fw-bold mb-1'>14 day trial*</div>\n <p className='text-muted mb-3'>*change to Teacher Free after trial finishes</p>\n <p className='mb-3 text-body'>For teachers boosting engagement, personalizing learning, and giving real-time feedback.</p>\n <AppLink\n className='btn btn-dark w-100'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n >\n {hasExtensions ? 'Invite a colleague to extend' : 'Invite a colleague'}\n </AppLink>\n </div>\n );\n}\n\nfunction SchoolsDistrictsTop(\n { currentPlan, badgeClassName, variant = 'premium' }: { currentPlan: boolean; badgeClassName?: string; variant?: 'premium' | 'custom' }\n): JSX.Element {\n const isCustomVariant = variant === 'custom';\n \n return (\n <div className='card-body'>\n <div className='d-flex justify-content-between align-items-start mb-2'>\n <h2 className='h5 mb-0'>{isCustomVariant ? 'Schools & Districts' : 'School & District'}</h2>\n {currentPlan && <CurrentPlanBadge className={badgeClassName} />}\n {isCustomVariant && !currentPlan && <CurrentPlanBadge className='text-indigo bg-light-indigo' label='Premium' />}\n </div>\n <div className='h1 fw-bold'>{isCustomVariant ? 'Custom' : 'Premium'}</div>\n <p className='text-body mb-3'>\n For {isCustomVariant ? 'teachers boosting engagement, personalizing learning, and giving real-time feedback' : 'schools and districts providing teachers with a platform for differentiated instruction across all grades and subjects'}.\n </p>\n {isCustomVariant ? (\n <div className='d-flex flex-column flex-lg-row gap-2'>\n <AppLink\n className='btn btn-outline-dark'\n style={{ flex: '1 1 0' }}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.RECOMMEND_EMAIL\n }}\n >\n Recommend ClickView to your school leader\n </AppLink>\n <AppLink\n className='btn btn-dark'\n style={{ flex: '1 1 0' }}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n }}\n >\n Request pricing\n </AppLink>\n </div>\n ) : (\n <>\n <div style={{ height: '32px' }} className='d-none d-xl-block'></div>\n <AppLink\n className='btn btn-outline-dark w-100'\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.UPGRADE\n }}\n >\n Request pricing\n </AppLink>\n </>\n )}\n </div>\n );\n}\n\ntype PlanColumnProps = {\n TopSection: React.ComponentType<{ currentPlan: boolean; badgeClassName?: string; variant?: 'premium' | 'custom'; hasExtensions?: boolean }>;\n sections: FeatureSection[];\n sectionsHeading: string;\n currentPlan?: boolean;\n currentPlanBgColour?: string;\n badgeClassName?: string;\n columnSizeClass?: string;\n variant?: 'premium' | 'custom';\n twoColumnXl?: boolean;\n reducedMinHeight?: boolean;\n hasExtensions?: boolean;\n};\n\nfunction PlanColumn(props: PlanColumnProps): JSX.Element {\n const {\n TopSection,\n sections,\n sectionsHeading,\n currentPlan,\n currentPlanBgColour,\n badgeClassName,\n columnSizeClass = 'col-12 col-xl-4',\n variant,\n twoColumnXl = false,\n reducedMinHeight = false,\n hasExtensions\n } = props;\n\n const { xl, xxl } = useBreakpoints();\n\n return (\n <div className={columnSizeClass}>\n <div className={classNames('card h-100 shadow-sm', currentPlan && currentPlanBgColour)}>\n <div style={{ minHeight: (xl || xxl) ? (reducedMinHeight ? 190 : 260) : 0 }}>\n <TopSection\n currentPlan={currentPlan}\n badgeClassName={badgeClassName}\n variant={variant}\n hasExtensions={hasExtensions}\n />\n </div>\n <div className='card-body border-top'>\n <div className='fw-semibold mb-2'>{sectionsHeading}</div>\n <FeatureSections sections={sections} twoColumnXl={twoColumnXl} />\n </div>\n </div>\n </div>\n );\n}\n\nexport function PremiumFeaturesView(): JSX.Element {\n useSetPageMetadata({ title: 'Explore our premium features' });\n\n const { accessPolicy, isLoaded } = useAccessPolicy();\n\n const { reverseTrialReferralCount } = useSettings(null);\n\n const hasExtensions = reverseTrialReferralCount < accessPolicy.metadata.maxReferrals;\n\n React.useEffect(() => {\n if (!isLoaded)\n return;\n \n if (EXPERIMENTAL_GATED_ACCESS_POLICY_IDS.has(accessPolicy?.id))\n return;\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n });\n }, [ isLoaded, accessPolicy ]);\n\n let layout = 'three-column';\n if (accessPolicy?.id === 'system_cv_trial_reverse_ended_v1' && !hasExtensions) {\n layout = 'two-column';\n }\n\n const isTwoColumn = layout === 'two-column';\n\n return (\n <div className='container p-3'>\n <h1 className='h3 mb-4'>Explore our plans</h1>\n\n <div className='row g-4'>\n {/* Teacher Free */}\n <PlanColumn\n TopSection={TeacherFreeTop}\n sections={FREE_SECTIONS}\n sectionsHeading='What you can do:'\n currentPlan={accessPolicy?.id === 'system_cv_trial_reverse_ended_v1'}\n currentPlanBgColour={`border-blue ${styles.heavyBorder}`}\n badgeClassName='text-blue bg-light-blue'\n columnSizeClass='col-12 col-xl-4'\n reducedMinHeight={isTwoColumn}\n hasExtensions={hasExtensions}\n />\n\n {/* Teacher Premium - only show in 3-column layout */}\n {!isTwoColumn && (\n <PlanColumn\n TopSection={TeacherPremiumTop}\n sections={PREMIUM_SECTIONS}\n sectionsHeading='Everything in previous, plus:'\n currentPlan={accessPolicy?.id === 'system_cv_trial_reverse_14_v1'}\n currentPlanBgColour={`border-indigo ${styles.heavyBorder}`}\n badgeClassName='text-indigo bg-light-indigo'\n hasExtensions={hasExtensions}\n />\n )}\n\n {/* Schools & Districts */}\n <PlanColumn\n TopSection={SchoolsDistrictsTop}\n sections={isTwoColumn ? SCHOOLS_CUSTOM_SECTIONS : SCHOOLS_SECTIONS}\n sectionsHeading='Everything in previous, plus:'\n currentPlan={false}\n columnSizeClass={isTwoColumn ? 'col-12 col-xl-8' : 'col-12 col-xl-4'}\n variant={isTwoColumn ? 'custom' : 'premium'}\n twoColumnXl={isTwoColumn}\n reducedMinHeight={isTwoColumn}\n />\n </div>\n </div>\n );\n}"],"names":["FREE_SECTIONS","title","items","PREMIUM_SECTIONS","SCHOOLS_SECTIONS","SCHOOLS_CUSTOM_SECTIONS","FeatureSections","props","sections","twoColumnXl","containerClass","className","map","section","style","breakInside","key","item","CurrentPlanBadge","label","TeacherFreeTop","currentPlan","badgeClassName","hasExtensions","AppLink","appLink","application","action","TeacherPremiumTop","SchoolsDistrictsTop","variant","isCustomVariant","flex","height","PlanColumn","TopSection","sectionsHeading","currentPlanBgColour","columnSizeClass","reducedMinHeight","useBreakpoints","xl","xxl","minHeight","PremiumFeaturesView","useSetPageMetadata","useAccessPolicy","accessPolicy","isLoaded","useSettings","reverseTrialReferralCount","metadata","maxReferrals","id","layout","isTwoColumn"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8944],{66257:(e,t,n)=>{n.d(t,{k:()=>p});var a=n(32735),r=n(80130),l=n(59087),o=n(23481),s=n(31453),c=n(35223),i=n(91693);const m={normal:"Q1UGv",copyBtn:"J3fBx",embedHtmlInput:"RcwAD"};function u(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=o.T.encloseNamespace("shared.copyInput");function p(e){var t,n,o=(t=a.useState(e.showCopiedText||!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,l,o,s=[],c=!0,i=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);c=!0);}catch(e){i=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw r}}return s}}(t,n)||function(e,t){if(e){if("string"==typeof e)return u(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)?u(e,t):void 0}}(t,n)||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.")}()),p=o[0],f=o[1];function v(){setTimeout(function(){return f(!1)},2e3)}function g(){e.onCopy&&e.onCopy(),p||(f(!0),v())}a.useEffect(function(){e.showCopiedText&&v()},[e.showCopiedText]);var y=a.createElement("div",{className:"normal-v2"===e.styling?"d-flex flex-row gap-2 position-relative w-100":"input-group"},e.textarea?a.createElement("textarea",{className:(0,s.A)("form-control rounded w-100 h-100",!e.hasInputBg&&m.embedHtmlInput,e.textAreaClassName),spellCheck:!1,value:e.value,rows:e.rows||7,readOnly:!0}):a.createElement("input",{type:"text",autoComplete:"off",className:(0,s.A)("form-control","normal"===e.styling&&e.styling),spellCheck:!1,value:e.value,readOnly:!0}),a.createElement(function(){return"normal-v2"===e.styling?a.createElement(l.CopyToClipboard,{text:e.value,onCopy:g},a.createElement(i.h,{role:p?"status":"",svgName:p?c.vn.Check:c.vn.Copy,className:(0,s.A)(m.copyBtn,"btn py-0 text-nowrap",p?"btn-success text-white":"btn-outline-dark border-secondary",e.extraButtonClassNames)},p?e.copiedText||d("copiedLink"):e.copyText||d("copy"))):a.createElement(l.CopyToClipboard,{text:e.value,onCopy:g},a.createElement("button",{role:p?"status":"",className:(0,s.A)("btn btn-outline-dark border border-secondary py-0 text-nowrap",e.extraButtonClassNames)},p?e.copiedText||d("copied"):e.copyText||d("copy")))},null));return e.label?a.createElement(r.Z.Group,{className:"form-group"},a.createElement(r.Z.Label,null,e.label),y):y}p.defaultProps={styling:"normal"}},64197:(e,t,n)=>{n.d(t,{i:()=>i});var a=n(32735),r=n(23481),l=n(31453);const o={divider:"rpkqv"};var s=r.T.encloseNamespace("shared.divider");function c(e){var t=e.text||s("or");return{"--divider-content":"'".concat(t,"'"),"--divider-text-transform":e.noUpperCase?"none":"uppercase"}}function i(e){return a.createElement("div",{className:(0,l.A)("my-2 w-100 border-bottom position-relative",o.divider,e.className),style:c(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,{_:()=>s});var a=n(23481),r=n(41661),l=n(65728),o=a.T.encloseNamespace("shared.shared-utils"),s={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:o("googleClassroom"),enabled:e,settingName:l.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:o("msftTeams"),enabled:t,settingName:l.E.ShareToMicrosoftTeams}]}}},9342:(e,t,n)=>{n.r(t),n.d(t,{GenerateJoinLinkView:()=>F});var a=n(32735),r=n(98269),l=n(70680),o=n(23481),s=n(97395),c=n(81886),i=n(20354),m=n(16862),u=n(66257),d=n(64197),p=n(83345),f=n(16714),v=n(39151),g=n(31949),y=n(3010),h=n(22902),E=n(79612),b=n(37802),N=n(40841),x=n(84891),C=n(99742),S=n(14070),w=n(97291),T=n(88630),A=n(97958),k="classrooms.joinLinkEmptyState";function I(){return a.createElement(p.D.Provider,{value:k},a.createElement(A.u,null,a.createElement(A.u.Image,{src:C.W.EmptyStates.Classrooms.NO_STUDENTS_IN_CLASSROOM,size:"small"}),a.createElement(A.u.Heading,null,a.createElement(p.x,{phrase:"heading"}))))}var O=n(97408),L=n(64818);const B={avatarContainer:"NSuhj"};function U(e){var t;return a.createElement("div",{className:"col-3 mb-3"},a.createElement("div",{className:"border border-secondary rounded-3 d-flex p-2 align-items-center"},a.createElement("div",{className:"".concat(B.avatarContainer," flex-shrink-0")},a.createElement(O.q,{imageUrl:null===(t=e.user.avatar)||void 0===t?void 0:t.url,imageCdnUrl:e.imageCdnUrl,initials:L.l.getInitials(e.user.name,e.user.surname)})),a.createElement("div",{className:"text-truncate ms-2"},e.user.name," ",e.user.surname)))}var _="classrooms.generateJoinLink",j=o.T.encloseNamespace(_),M=15e3;function F(e){var t,n=(0,l.I0)(),o=i.a.useGetFetchAsync(),A=(0,(0,h.T)().hasPermissions)(f.C.ManageIntegrations),k=i.a.useBasicFetch(T.F.generateJoinLink(e.classroomId)),O=i.a.useBasicFetch(g.N.currentUser()),L=i.a.useBasicFetch(O.data&&T.F.getClassroom(e.classroomId,O.data.id));function B(t){return T.F.getClassroomStudents(e.classroomId,t)}(0,E.M)({title:L.data?j("pageTitle",{classroomName:null===(t=L.data)||void 0===t?void 0:t.name}):null});var F,D,G,R=(0,y.i)(B,function(e){o(B(e))}),z=i.a.useBasicFetch(v.L.config()),P=(0,b.r)(null),J=P.shareToGoogleClassroom,W=P.shareToMicrosoftTeams,H=P.isLoadingSettings,Z="list"===e.source;return a.useEffect(function(){var e=window.setInterval(function(){i.a.fetch(n,B())},M);return function(){return window.clearInterval(e)}},[]),k.data&&R.items&&z.data&&!H?a.createElement(p.D.Provider,{value:_},a.createElement("div",{className:"d-flex px-3 "},a.createElement("h1",{className:"h3 mb-3 flex-fill"},a.createElement(p.x,{phrase:"title"})),a.createElement("div",{className:"flex-fill text-end"},a.createElement(r.Z,{variant:"dark",onClick:function(){Z?c.Q.C$.trigger({application:w.O.CLASSROOMS,action:S.e.Classrooms.HOME}):c.Q.C$.trigger({application:w.O.CLASSROOMS,action:S.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroomId]})}},j(Z?"backToList":"backToClassroom")))),a.createElement("div",{className:"px-3"},a.createElement("div",{className:"row mt-1"},a.createElement("div",{className:"col-md-6 col-12"},a.createElement(x.t,{spacing:"sm",bottomSpacing:"lg"},a.createElement(x.t.Step,{number:1},j("goToUrl"),a.createElement("span",{className:"text-primary"},(G=new URL(z.data.liteUrl).hostname,s._.safeUrlConcat(G,"/join")))),a.createElement(x.t.Step,{number:2},j("enterCode"),a.createElement(x.t.Code,{size:"lg",code:k.data.code,className:"mt-2"}))),a.createElement(d.i,{className:"mb-4 fs-6"}),a.createElement(x.t,null,a.createElement(x.t.Step,{number:1},j("copyLinkAndShare"),a.createElement("div",{className:"d-flex flex-column gap-2 mt-2"},a.createElement(u.k,{value:k.data.link}),a.createElement(m.T,{integrations:(F=J,D=W,N._.getShareIntegrations(F,D).filter(function(e){return e.enabled}).map(function(e){return e.id})),url:k.data.link,appLink:A?{application:w.O.SETTINGS,action:S.e.Settings.INTEGRATIONS}:{application:w.O.DEFAULT,action:S.e.Default.INTEGRATIONS_INFO}}))))),a.createElement("div",{className:"col-md-6 col-12 text-center"},a.createElement("img",{src:C.W.AddStudents.JOIN_LINK,className:"rounded-3 w-75 box-shadow img-fluid my-3"}))),a.createElement("hr",null),a.createElement("div",null,j("studentsWillAppear"),!R.items.length&&a.createElement(I,null),a.createElement("div",{className:"row mt-3"},R.items.map(function(e){return a.createElement(U,{user:e,key:e.id,imageCdnUrl:z.data.imageCdnUrl})}))))):a.createElement(a.Fragment,null)}},84891:(e,t,n)=>{n.d(t,{t:()=>g});var a=n(32735),r=n(59087),l=n.n(r),o=n(31453),s=n(83914),c=n(83345),i=n(35223);const m={orderedListWithBackground:"ezbBL",number:"hs0Fv",code:"h0c9p",large:"_leUV",success:"f_XNL"};function u(e,t){return 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,l,o,s=[],c=!0,i=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=l.call(n)).done)&&(s.push(a.value),s.length!==t);c=!0);}catch(e){i=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(i)throw r}}return s}}(e,t)||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,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.")}()}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 p(e){var t;return a.createElement("div",{className:(0,o.A)(m.success,"col-12 position-absolute w-100 h-100 start-0 top-0","d-inline-flex align-items-center text-white justify-content-center text-truncate bg-success fs-3",e.show?"opacity-1":"opacity-0")},null!==(t=e.text)&&void 0!==t?t:a.createElement(c.x,{namespace:"shared.instructions",phrase:"copied"}))}var f={none:"mb-0",md:"mb-3",sm:"mb-2",lg:"mb-4"},v={none:"",sm:"gap-2",md:"gap-3",lg:"gap-4"};function g(e){return a.createElement("ol",{className:(0,o.A)("d-flex flex-column",f[e.bottomSpacing||"md"],v[e.spacing||"md"],m.orderedListWithBackground,e.className)},e.children)}g.Step=function(e){return a.createElement("li",{className:"d-flex align-items-center"},a.createElement("div",{className:"align-self-start"},a.createElement("span",{className:"".concat(m.number)},e.number)),a.createElement("div",{className:"w-100"},e.children))},g.Code=function(e){var t=u(a.useState(!1),2),n=t[0],r=t[1];return a.createElement(l(),{onCopy:function(){r(!0),setTimeout(function(){return r(!1)},2e3)},text:e.code},a.createElement("div",{className:(0,o.A)("position-relative bg-white border rounded-3 text-center overflow-hidden fw-semibold cursor-pointer ".concat(m.code),"lg"===e.size&&"py-3 ".concat(m.large),"md"===e.size&&"py-2",e.className)},e.code,a.createElement(s.x,{svgName:i.vn.Copy,size:s.S.Large,className:"ms-2 svg-container d-inline-block lg align-middle"}),a.createElement(p,{show:n})))},g.Textbox=function(e){var t=e.size,n=void 0===t?"sm":t,r=u(a.useState(!1),2),c=r[0],m=r[1];function d(){e.showCopyButton&&(m(!0),"function"==typeof e.onCopy&&e.onCopy(),setTimeout(function(){return m(!1)},2e3))}var f=e.showCopyButton?"text-left cursor-pointer":"text-center",v="left"===e.align?"col-1":"";return"center"===e.align&&(f=""),a.createElement(l(),{onCopy:d,text:e.value},a.createElement("div",null,e.label&&a.createElement("h3",{className:"mb-3 text-center"},e.label),a.createElement("div",{className:(0,o.A)("bg-white border rounded-3 overflow-hidden px-4 py-3 text-truncate mb-0","position-relative align-items-center gx-2 gy-0","sm"===n?"h5":"h1","left"===e.align?"row":"d-flex justify-content-center gap-3",e.showCopyButton?"text-left cursor-pointer":"text-center",e.className)},a.createElement("div",{className:(0,o.A)(f,"text-truncate")},e.value),e.showCopyButton&&a.createElement("div",{className:(0,o.A)(v)},a.createElement(s.x,{svgName:i.vn.Copy,size:s.S.Standard,className:"svg-container d-inline-block std",onClick:d})),e.showCopyButton&&a.createElement(p,{show:c}))))}},13524:(e,t,n)=>{n.d(t,{Z:()=>a});const a={hoverable:"bLxv5",msTeamsContainer:"mPAD2",avatar:"qmP52",small:"ul1RN"}}}]);
2
+ //# sourceMappingURL=8944-022dbd6a0b-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/8944-022dbd6a0b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/copy-input/copy-input.scss","file:///app/packages/libs/shared/src/components/copy-input/CopyInput.tsx","file:///app/packages/libs/shared/src/components/divider/divider.scss","file:///app/packages/libs/shared/src/components/divider/Divider.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/views/generate-join-link/empty-state/JoinLinkEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/generate-join-link/student-pill/student-pill.scss","file:///app/packages/projects/lite/src/apps/classrooms/views/generate-join-link/student-pill/StudentPill.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/generate-join-link/GenerateJoinLinkView.tsx","file:///app/packages/projects/lite/src/shared/components/instructions/instructions.scss","file:///app/packages/projects/lite/src/shared/components/instructions/Instructions.tsx","file:///app/packages/libs/shared/src/apps/share/views/share/components/share-integrations/share-integrations.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"normal\":\"Q1UGv\",\"copyBtn\":\"J3fBx\",\"embedHtmlInput\":\"RcwAD\"};","import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { CopyToClipboard } from 'react-copy-to-clipboard';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { IconButton } from '../icon-button/IconButton';\n\nimport styles from './copy-input.scss';\n\nconst namespace = 'shared.copyInput';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CopyInputProps {\n value: string;\n label?: string;\n // Greyed means the input will be greyed out. Normal means it will appear like a normal input\n styling?: 'greyed' | 'normal' | 'normal-v2';\n onCopy?: () => void;\n copyText?: string;\n copiedText?: string;\n showCopiedText?: boolean;\n extraButtonClassNames?: string;\n textarea?: boolean;\n hasInputBg?: boolean;\n rows?: number;\n textAreaClassName?: string;\n}\n\nCopyInput.defaultProps = {\n styling: 'normal'\n};\n\nexport function CopyInput(props: CopyInputProps): JSX.Element {\n const [ localShowCopiedText, setLocalShowCopiedText ] = React.useState(props.showCopiedText || false);\n\n function revertLocalShowCopiedText() {\n setTimeout(() => setLocalShowCopiedText(false), 2000);\n }\n\n function onCopy(): void {\n if (props.onCopy)\n props.onCopy();\n\n if (localShowCopiedText)\n return;\n\n setLocalShowCopiedText(true);\n revertLocalShowCopiedText();\n }\n\n React.useEffect(() => {\n if (!props.showCopiedText)\n return;\n \n revertLocalShowCopiedText();\n }, [props.showCopiedText]);\n\n function Button() {\n if (props.styling === 'normal-v2') {\n return (\n <CopyToClipboard text={props.value} onCopy={onCopy}>\n <IconButton\n role={localShowCopiedText ? 'status' : ''}\n svgName={localShowCopiedText ? cvSvgLibrary.Check : cvSvgLibrary.Copy}\n className={classNames(\n styles.copyBtn,\n 'btn py-0 text-nowrap',\n localShowCopiedText ? 'btn-success text-white' : 'btn-outline-dark border-secondary',\n props.extraButtonClassNames\n )}\n >\n {localShowCopiedText ?\n props.copiedText || getPhrase('copiedLink') :\n props.copyText || getPhrase('copy')\n }\n </IconButton>\n </CopyToClipboard>\n );\n }\n\n return (\n <CopyToClipboard text={props.value} onCopy={onCopy}>\n <button\n role={localShowCopiedText ? 'status' : ''}\n className={classNames(\n 'btn btn-outline-dark border border-secondary py-0 text-nowrap',\n props.extraButtonClassNames\n )}\n >\n {localShowCopiedText ?\n props.copiedText || getPhrase('copied') :\n props.copyText || getPhrase('copy')\n }\n </button>\n </CopyToClipboard>\n );\n }\n\n const input = (\n <div className={props.styling === 'normal-v2' ? 'd-flex flex-row gap-2 position-relative w-100' : 'input-group'}>\n {props.textarea\n ? <textarea\n className={classNames('form-control rounded w-100 h-100', !props.hasInputBg && styles.embedHtmlInput, props.textAreaClassName)}\n spellCheck={false}\n value={props.value}\n rows={props.rows || 7}\n readOnly\n />\n : <input\n type='text'\n autoComplete='off'\n className={classNames(\n 'form-control',\n props.styling === 'normal' && props.styling\n )}\n spellCheck={false}\n value={props.value}\n readOnly\n />\n }\n \n <Button />\n </div>\n );\n\n if (props.label) {\n return (\n <Form.Group className='form-group'>\n <Form.Label>{props.label}</Form.Label>\n {input}\n </Form.Group>\n );\n }\n\n return input;\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"divider\":\"rpkqv\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport styles from './divider.scss';\n\nconst namespace = 'shared.divider';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface DividerProps {\n text?: string;\n noUpperCase?: boolean;\n className?: string;\n}\n\ninterface DividerCSSProperties extends React.CSSProperties {\n '--divider-content'?: string;\n '--divider-text-transform'?: React.CSSProperties['textTransform'];\n}\n\nfunction buildStyle(props: DividerProps) {\n const content = props.text || getPhrase('or');\n \n const style: DividerCSSProperties = {\n '--divider-content': `'${content}'`,\n '--divider-text-transform': props.noUpperCase ? 'none' : 'uppercase'\n };\n\n return style;\n}\n\nexport function Divider(props: DividerProps): JSX.Element {\n return <div className={classNames('my-2 w-100 border-bottom position-relative', styles.divider, props.className)} style={buildStyle(props)}></div>;\n}","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'classrooms.joinLinkEmptyState';\n\nexport function JoinLinkEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.NO_STUDENTS_IN_CLASSROOM} size='small'/>\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"NSuhj\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './student-pill.scss';\n\ninterface StudentPillProps {\n user: User;\n imageCdnUrl: string;\n}\n\nexport function StudentPill(props: StudentPillProps): React.ReactElement {\n return (\n <div className='col-3 mb-3'>\n <div className='border border-secondary rounded-3 d-flex p-2 align-items-center'>\n <div className={`${styles.avatarContainer} flex-shrink-0`}>\n <Avatar\n imageUrl={props.user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.user.name, props.user.surname)}\n />\n </div>\n <div className='text-truncate ms-2'>{props.user.name} {props.user.surname}</div>\n </div>\n </div>\n );\n}","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareIntegrations } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrations';\nimport { CopyInput } from 'libs/shared/components/copy-input/CopyInput';\nimport { Divider } from 'libs/shared/components/divider/Divider';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { GenerateClassroomLinkResponse } from 'apps/classrooms/interfaces/GenerateClassroomLinkResponse';\nimport { JoinLinkEmptyState } from 'apps/classrooms/views/generate-join-link/empty-state/JoinLinkEmptyState';\nimport { StudentPill } from 'apps/classrooms/views/generate-join-link/student-pill/StudentPill';\n\nconst namespace = 'classrooms.generateJoinLink';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst POLLING_INTERVAL = 15000; // 15s\n\nexport interface GenerateJoinLinkViewQueryParams {\n source?: 'list';\n}\n\ninterface GenerateJoinLinkViewProps extends GenerateJoinLinkViewQueryParams{\n classroomId: string;\n}\n\nexport function GenerateJoinLinkView(props: GenerateJoinLinkViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const { hasPermissions } = usePermissions();\n const hasManageIntegrationsPermission = hasPermissions(PermissionName.ManageIntegrations);\n\n const joinLink = Flight.useBasicFetch<GenerateClassroomLinkResponse>(\n ClassroomRequests.generateJoinLink(props.classroomId)\n );\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.classroomId, currentUser.data.id));\n\n useSetPageMetadata({\n title: classroom.data ? getPhrase('pageTitle', { classroomName: classroom.data?.name }) : null\n });\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.getClassroomStudents(props.classroomId, cursor);\n }\n\n function fetchNext(cursor?: string): void {\n fetchAsync(getRequest(cursor));\n }\n\n const students = useFetchAll<User>(getRequest, fetchNext);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const { shareToGoogleClassroom, shareToMicrosoftTeams, isLoadingSettings } = useSettings(null);\n\n const isFromList = props.source === 'list';\n\n function backToClassroom(): void {\n if (isFromList) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n // TODO: Change to classroom overview\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.classroomId]\n });\n }\n \n function getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n }\n\n React.useEffect(() => {\n const interval = window.setInterval(() => {\n Flight.fetch(dispatch, getRequest());\n }, POLLING_INTERVAL);\n \n return () => window.clearInterval(interval);\n }, []);\n\n function getJoinUrl(): string {\n const url = new URL(config.data.liteUrl).hostname;\n\n return UrlHelper.safeUrlConcat(url, '/join');\n }\n\n if (!joinLink.data || !students.items || !config.data || isLoadingSettings)\n return <></>;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='d-flex px-3 '>\n <h1 className='h3 mb-3 flex-fill'><Text phrase='title' /></h1>\n <div className='flex-fill text-end'>\n <Button variant='dark' onClick={backToClassroom}>\n {getPhrase(isFromList ? 'backToList' : 'backToClassroom')}\n </Button>\n </div>\n </div>\n <div className='px-3'>\n <div className='row mt-1'>\n <div className='col-md-6 col-12'>\n <Instructions spacing='sm' bottomSpacing='lg'>\n <Instructions.Step number={1}>\n {getPhrase('goToUrl')}\n <span className='text-primary'>{getJoinUrl()}</span>\n </Instructions.Step>\n <Instructions.Step number={2}>\n {getPhrase('enterCode')}\n <Instructions.Code size='lg' code={joinLink.data.code} className='mt-2' />\n </Instructions.Step>\n </Instructions>\n <Divider className='mb-4 fs-6' />\n <Instructions>\n <Instructions.Step number={1}>\n {getPhrase('copyLinkAndShare')}\n <div className='d-flex flex-column gap-2 mt-2'>\n <CopyInput value={joinLink.data.link} />\n <ShareIntegrations\n integrations={getEnabledIntegrations(shareToGoogleClassroom, shareToMicrosoftTeams)}\n url={joinLink.data.link}\n appLink={hasManageIntegrationsPermission ? {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.INTEGRATIONS\n } : {\n application: AppChannels.DEFAULT,\n action: Actions.Default.INTEGRATIONS_INFO\n }}\n />\n </div>\n </Instructions.Step>\n </Instructions>\n </div>\n <div className='col-md-6 col-12 text-center'>\n <img src={ImageUrls.AddStudents.JOIN_LINK} className='rounded-3 w-75 box-shadow img-fluid my-3' />\n </div>\n </div>\n <hr />\n <div>\n {getPhrase('studentsWillAppear')}\n {!students.items.length && <JoinLinkEmptyState />}\n <div className='row mt-3'>\n {students.items.map(s => <StudentPill user={s} key={s.id} imageCdnUrl={config.data.imageCdnUrl} />)}\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"orderedListWithBackground\":\"ezbBL\",\"number\":\"hs0Fv\",\"code\":\"h0c9p\",\"large\":\"_leUV\",\"success\":\"f_XNL\"};","import React from 'react';\nimport CopyToClipboard from 'react-copy-to-clipboard';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './instructions.scss';\n\nconst COPY_TIMEOUT = 2000;\n\nconst namespace = 'shared.instructions';\n\ninterface BoxOverlayProps {\n show: boolean;\n text?: string;\n}\n\nfunction BoxOverlay(props: BoxOverlayProps): JSX.Element {\n return (\n <div className={classNames(\n styles.success,\n 'col-12 position-absolute w-100 h-100 start-0 top-0',\n 'd-inline-flex align-items-center text-white justify-content-center text-truncate bg-success fs-3',\n props.show ? 'opacity-1' : 'opacity-0'\n )}>\n {props.text ?? <Text namespace={namespace} phrase='copied' />}\n </div>\n );\n}\n\ninterface StepProps {\n number: number | string;\n}\n\nfunction Step(props: React.PropsWithChildren<StepProps>): JSX.Element {\n return (\n <li className='d-flex align-items-center'>\n <div className='align-self-start'>\n <span className={`${styles.number}`}>{props.number}</span>\n </div>\n <div className='w-100'>\n {props.children}\n </div>\n </li>\n );\n}\n\ninterface CodeProps {\n code: string;\n className?: string;\n size: 'md' | 'lg';\n}\n\nfunction Code(props: CodeProps): JSX.Element {\n const [ copied, setCopied ] = React.useState(false);\n\n function onCopy(): void {\n setCopied(true);\n\n setTimeout(() => setCopied(false), COPY_TIMEOUT);\n }\n\n return (\n <CopyToClipboard onCopy={onCopy} text={props.code}>\n <div className={classNames(\n `position-relative bg-white border rounded-3 text-center overflow-hidden fw-semibold cursor-pointer ${styles.code}`,\n props.size === 'lg' && `py-3 ${styles.large}`,\n props.size === 'md' && 'py-2',\n props.className\n )}>\n {props.code}\n <SvgContainer\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Large}\n className='ms-2 svg-container d-inline-block lg align-middle'\n />\n <BoxOverlay show={copied} />\n </div>\n </CopyToClipboard>\n );\n}\n\ninterface TextboxProps {\n value: string;\n label?: string;\n className?: string;\n showCopyButton?: boolean;\n copiedText?: string;\n onCopy?: () => void;\n align?: 'left' | 'center';\n size?: 'sm' | 'lg'\n}\n\nfunction Textbox(props: TextboxProps): JSX.Element {\n const { size = 'sm' } = props;\n\n const [ copied, setCopied ] = React.useState<boolean>(false);\n \n function onCopy(): void {\n if (!props.showCopyButton)\n return;\n\n setCopied(true);\n\n typeof props.onCopy === 'function' && props.onCopy();\n\n setTimeout(() => setCopied(false), COPY_TIMEOUT);\n }\n \n let textClassName = props.showCopyButton ? 'text-left cursor-pointer' : 'text-center';\n const buttonClassName = props.align === 'left' ? 'col-1' : '';\n if (props.align === 'center') {\n textClassName = '';\n }\n\n return (\n <CopyToClipboard onCopy={onCopy} text={props.value}>\n <div>\n {props.label && <h3 className='mb-3 text-center'>{props.label}</h3>}\n <div className={classNames(\n 'bg-white border rounded-3 overflow-hidden px-4 py-3 text-truncate mb-0',\n 'position-relative align-items-center gx-2 gy-0',\n size === 'sm' ? 'h5' : 'h1',\n props.align === 'left' ? 'row' : 'd-flex justify-content-center gap-3',\n props.showCopyButton ? 'text-left cursor-pointer' : 'text-center',\n props.className\n )}>\n <div className={classNames(\n textClassName,\n 'text-truncate'\n )}>\n {props.value}\n </div>\n {props.showCopyButton &&\n <div className={classNames(buttonClassName)}>\n <SvgContainer\n svgName={cvSvgLibrary.Copy}\n size={SvgContainerSize.Standard}\n className='svg-container d-inline-block std'\n onClick={onCopy}\n />\n </div>\n }\n {props.showCopyButton &&\n <BoxOverlay show={copied} />\n }\n </div>\n </div>\n </CopyToClipboard>\n );\n}\n\ntype InstructionsSpacing = 'none' | 'sm' | 'md' | 'lg';\n\ninterface InstructionsProps {\n spacing?: InstructionsSpacing;\n bottomSpacing?: InstructionsSpacing;\n className?: string;\n}\n\nconst bottomSpacingMap: {[key in InstructionsSpacing]: string} = {\n none: 'mb-0',\n md: 'mb-3',\n sm: 'mb-2',\n lg: 'mb-4'\n};\n\nconst itemSpacingMap: {[key in InstructionsSpacing]: string} = {\n none: '',\n sm: 'gap-2',\n md: 'gap-3',\n lg: 'gap-4'\n};\n\nexport function Instructions(props: React.PropsWithChildren<InstructionsProps>): JSX.Element {\n return (\n <ol className={classNames(\n 'd-flex flex-column',\n bottomSpacingMap[props.bottomSpacing || 'md'],\n itemSpacingMap[props.spacing || 'md'],\n styles.orderedListWithBackground,\n props.className\n )}>\n {props.children}\n </ol>\n );\n}\n\nInstructions.Step = Step;\nInstructions.Code = Code;\nInstructions.Textbox = Textbox;","// extracted by mini-css-extract-plugin\nexport default {\"hoverable\":\"bLxv5\",\"msTeamsContainer\":\"mPAD2\",\"avatar\":\"qmP52\",\"small\":\"ul1RN\"};"],"names":["getPhrase","LanguageService","CopyInput","props","showCopiedText","localShowCopiedText","setLocalShowCopiedText","revertLocalShowCopiedText","setTimeout","onCopy","input","className","styling","textarea","hasInputBg","textAreaClassName","spellCheck","value","rows","readOnly","type","autoComplete","CopyToClipboard","text","IconButton","role","svgName","extraButtonClassNames","copiedText","copyText","label","Form","defaultProps","buildStyle","content","noUpperCase","Divider","style","IntegrationId","IntegrationHelper","getShareIntegrations","googleClassroomSetting","msftTeamsSetting","id","name","enabled","settingName","namespace","JoinLinkEmptyState","EmptyState","src","ImageUrls","size","Text","phrase","StudentPill","Avatar","imageUrl","user","avatar","url","imageCdnUrl","initials","UserHelper","surname","POLLING_INTERVAL","GenerateJoinLinkView","dispatch","fetchAsync","hasManageIntegrationsPermission","hasPermissions","usePermissions","PermissionName","joinLink","ClassroomRequests","classroomId","currentUser","UserRequests","classroom","data","getRequest","cursor","useSetPageMetadata","title","classroomName","students","config","ConfigRequests","useSettings","shareToGoogleClassroom","shareToMicrosoftTeams","isLoadingSettings","isFromList","source","interval","window","setInterval","clearInterval","items","Button","variant","onClick","application","action","args","Instructions","spacing","bottomSpacing","number","URL","liteUrl","hostname","UrlHelper","code","link","ShareIntegrations","integrations","filter","i","map","appLink","length","s","key","BoxOverlay","show","bottomSpacingMap","none","md","sm","lg","itemSpacingMap","children","Step","Code","copied","setCopied","SvgContainer","S","Textbox","showCopyButton","textClassName","buttonClassName","align"],"sourceRoot":""}
@@ -0,0 +1,2 @@
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9742],{91200:(e,t,a)=>{a.d(t,{Y:()=>o});var n=a(32735),r=a(68050),i=a(69111),l=a(79382);function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function o(e){var t,a=function(e){if(Array.isArray(e))return s(e)}(t=Array(e.numItems))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?s(e,t):void 0}}(t)||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.")}(),o=e.itemClassName||"";return n.createElement(n.Fragment,null,e.showHeading&&n.createElement("div",{className:"".concat(l.Z.partialHeading," mb-1 partial-loading-background")}),n.createElement(r.Z,{className:"mx-n1 mb-n2"},a.map(function(e,t){return n.createElement(i.Z,{key:t,xs:6,sm:4,lg:3,className:"".concat(o," px-1 pb-2")},n.createElement("div",{className:"".concat(l.Z.playlistItem," partial-loading-background rounded-3")}))})))}o.defaultProps={numItems:8}},23162:(e,t,a)=>{a.d(t,{t:()=>N});var n=a(32735),r=a(82602),i=a(23481),l=a(110),s=a(65858),o=a(83345),c="playlists.playlistCount";function u(e){var t=function(e){var t,a,n,r,i,l;return!!e&&(null!==(a=null===(t=e.videos)||void 0===t?void 0:t.count)&&void 0!==a?a:0)+(null!==(r=null===(n=e.interactives)||void 0===n?void 0:n.count)&&void 0!==r?r:0)+(null!==(l=null===(i=e.clips)||void 0===i?void 0:i.count)&&void 0!==l?l:0)}(e.playlist);return!1===t||Number.isNaN(t)?n.createElement(n.Fragment,null):n.createElement("span",{className:"text-shadow font-size-sm"},n.createElement(o.x,{namespace:c,phrase:"count",options:{smartCount:t}}))}var d=a(97408),m=a(97392),p=a(64818);function y(e){var t,a,r,i=e.playlist._liteOwner;if(null===(t=e.playlist._isClickViewCurated)||void 0===t?void 0:t.value)return n.createElement(m.F,null);if(!(null==i?void 0:i.id)||!(null===(a=e.currentUser)||void 0===a?void 0:a.id))return n.createElement(n.Fragment,null);if(i.id.toString()===e.currentUser.id.toString())return n.createElement(n.Fragment,null);var l="string"==typeof i.avatar?i.avatar:null===(r=i.avatar)||void 0===r?void 0:r.url;return n.createElement(d.q,{imageUrl:l,imageCdnUrl:e.imageCdnUrl,initials:p.l.getInitials(i.name,i.surname)})}var v=a(15611),f=a(69776),g=a(7432),h=a(11834),E=a(54610),C=a(80143),b=a(9085),P=a(67453),w=a(79382),S="playlists.playlistList";function N(e){var t,a,o=P.j.createUrl(e.data.cover&&e.data.cover.url,{size:E.h2.Medium,resizeType:E.Nq.Cover}),c=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,d=(0,C.n)(c,e.presentationAudiences),m=w.Z.playlistItem,p=!!o||!!e.showFallbackImage;p&&(m+=" ".concat(w.Z.playlistItemGradient)),!p&&e.bgColourClassNames&&(m+=" ".concat(w.Z.playlistItem," ").concat((0,b.x)(e.data.name,e.bgColourClassNames))),"round"===e.itemStyle&&(m+=" rounded-3 overflow-hidden"),"round-left"===e.itemStyle&&(m+=" rounded-start-lg overflow-hidden");var N=Object.assign(Object.assign({},e.analyticsData),{id:null===(t=e.data)||void 0===t?void 0:t.id,name:null===(a=e.data)||void 0===a?void 0:a.name}),I=Object.assign(Object.assign({},e.analyticsOptions),{entity:s.py.Playlist});return n.createElement(v.F,{appLink:e.appLink,analyticsData:N,analyticsOptions:I,title:function(){var t;return!e.data.contentModifiedDate||(null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value)?"":i.T.getPhrase(S,"lastUpdated",{timeago:(0,r.WU)(l.O.convertUTCToLocal(e.data.contentModifiedDate))})}()},n.createElement(g.Z,{data:o,alt:e.data.name,className:m},!!e.showFallbackImage&&n.createElement(h.oy,{type:h.mS.Playlist}),n.createElement("div",{className:"text-white ".concat(w.Z.playlistMetadata)},!!e.showCount&&n.createElement(u,{playlist:e.data}),n.createElement("h5",{className:"mb-0 ".concat(e.titleClassName||"")},n.createElement("span",{className:"text-shadow clamp-2"},e.data.name)),!!c&&!!c.length&&!!d&&n.createElement(f.P,{className:"".concat(e.audienceLabelClass?e.audienceLabelClass:""," mt-1"),audience:d,border:"white"})),!!e.showOwner&&!!e.imageCdnUrl&&n.createElement("div",{className:w.Z.ownerAvatarContainer},n.createElement(y,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl}))))}N.defaultProps={itemStyle:"square"}},31273:(e,t,a)=>{a.d(t,{P:()=>c});var n=a(32735),r=a(68050),i=a(69111),l=a(65858),s=a(23162),o={actionType:l.Vw.Click,entity:l.py.Playlist,location:l.LZ.PlaylistListItem,descriptor:l._S.Cover};function c(e){return n.createElement(r.Z,{as:"ul",className:"list-unstyled mx-n1"},e.extraPlaylistItem&&n.createElement(i.Z,{as:"li",key:"extra-playlist-item",xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},e.extraPlaylistItem),e.playlists.map(function(t){return n.createElement(i.Z,{as:"li",key:t.id,xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},n.createElement(s.t,{data:t,appLink:e.getPlaylistAppLink(t),imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,presentationAudiences:e.presentationAudiences,bgColourClassNames:e.bgColourClassNames,showCount:e.showCount,showOwner:e.showOwner,showFallbackImage:e.showFallbackImage,titleClassName:e.itemTitleClassName,itemStyle:e.itemStyle,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),o)}))}))}},94644:(e,t,a)=>{a.d(t,{r:()=>u});var n=a(50242),r=a(81886),i=a(67058),l=a(14553),s=a(49267),o=a(49075),c={notFound:i.d,forbidden:{rating:l.q,yearLevel:l.q,region:s.a,privacy:l.q},badRequest:o._,internalServerError:o._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var l=Object.assign(Object.assign({},c),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.InternalServer?i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new l.badRequest):a.forbidden||r.Q.Ry.throw(new l.forbidden.privacy):a.notFound||r.Q.Ry.throw(new l.notFound):a.internalServerError||r.Q.Ry.throw(new o._))}}},60115:(e,t,a)=>{a.d(t,{K:()=>c});var n=a(32735),r=a(50242),i=a(91967),l=400,s=a(45719);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function c(e,t,a,c,u,d){var m,p,y,v,f=(m=(0,n.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,l,s=[],o=!0,c=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;o=!1}else for(;!(o=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);o=!0);}catch(e){c=!0,r=e}finally{try{if(!o&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(c)throw r}}return s}}(m,p)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}(m,p)||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.")}()),g=f[0],h=f[1],E=t,C=(0,s.P)(function(t){if(!e)return null;var a=e(t);return a?a.key:null},c,u);return y={fetchNextPage:function(){if(t&&e&&C)return h(function(e){return e+1}),E(C.nextCursor)},hasMore:!!(null==C?void 0:C.nextCursor),isFetching:null==C?void 0:C.isFetching,scrollContainer:d},v=function(){if(!y.isFetching){if(y.scrollContainer){var e=y.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-l)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-l)return;y.fetchNextPage()}},(0,n.useEffect)(function(){var e=i.q.throttle(v,200),t=y.scrollContainer||window;return y.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}},[y.hasMore,y.fetchNextPage,y.scrollContainer]),(0,n.useEffect)(function(){C&&C.shouldInitialFetch&&t&&(E(),h(function(e){return e+1}))},[null==C?void 0:C.shouldInitialFetch,t]),(0,n.useEffect)(function(){var e,t;if((null==C?void 0:C.statusCode)&&i.q.isFunction(a)){var n=+(null===(t=null===(e=C.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));n!==r.k.ClientError&&n!==r.k.ServerError||a(g,C.statusCode)}},[null==C?void 0:C.statusCode]),{items:null==C?void 0:C.items,hasMore:!!(null==C?void 0:C.nextCursor),nextCursor:null==C?void 0:C.nextCursor,isFetching:null==C?void 0:C.isFetching,totalItems:null==C?void 0:C.totalItems,hasFirstPageCompleted:null==C?void 0:C.hasFirstPageCompleted}}},89742:(e,t,a)=>{a.r(t),a.d(t,{PlaylistsView:()=>Q});var n=a(32735),r=a(70680),i=a(23481),l=a(20354),s=a(65858),o=a(91200),c=a(31273),u=a(91967),d=a(76611),m=a(15611);function p(e){return p="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},p(e)}function y(e,t,a){return(t=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var a=t.call(e,"string");if("object"!=p(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}var v="playlists.playlistSortSelect",f=u.q.memoize(function(){return y(y(y(y(y({},d.o.RecentlyUpdated,{name:i.T.getPhrase(v,"recentlyUpdated")}),d.o.AtoZ,{name:i.T.getPhrase(v,"atoz")}),d.o.ZtoA,{name:i.T.getPhrase(v,"ztoa")}),d.o.Newest,{name:i.T.getPhrase(v,"newest")}),d.o.Oldest,{name:i.T.getPhrase(v,"oldest")})});function g(e){var t=e.type,a=e.getSortAppLink,r=e.variant,i=f();return n.createElement("div",{className:"dropdown"},n.createElement("button",{className:"btn btn-".concat(r," ms-2 dropdown-toggle"),type:"button",id:"sort-select","data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},i[t].name),n.createElement("ul",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":"sort-select"},Object.values(d.o).map(function(e){var r="dropdown-item";return e===t&&(r+=" active"),n.createElement("li",{key:e},n.createElement(m.F,{className:r,appLink:a(e),analyticsData:{sort:i[e].name},analyticsOptions:{location:s.LZ.PlaylistListHeader,entity:s.py.Playlists,actionType:s.Vw.Sort,workflowPhase:s.eu.Complete}},i[e].name))})))}g.defaultProps={variant:"light"};var h=a(23257),E=a(70006),C=a(71521),b=a(83657),P=a(87801),w=a(83345),S=a(7733),N=a(16714),I=a(94644),L=a(39151),A=a(5112),T=a(31949),x=a(69883),U=a(60115),k=a(22902),F=a(79612),O=a(35223),_=a(47430),M=a(14070),Z=a(97291),j=a(44110),D=a(26323),V=a(99742);const R={playlistMetadata:"vv8fW"};var Y="playlists.favouritesPlaylistItem",B=i.T.encloseNamespace(Y);function H(e){var t={entity:s.py.Playlist,actionType:s.Vw.Click,location:s.LZ.PlaylistListItem},a=V.W.FAVOURITES_PLAYLIST.FAV_PLAYLIST_COVER,r={application:Z.O.MY_FAVOURITES,action:M.e.MyFavourites.MY_FAVOURITES};return n.createElement(m.F,{appLink:r,analyticsData:{name:"Favourites",extraItem:"user-favourites"},analyticsOptions:t,title:B("favouritesTitle")},n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"text-white font-size-sm text-shadow ".concat(R.playlistMetadata)},!e.isLoadingCount&&n.createElement("span",null,n.createElement(w.x,{namespace:Y,phrase:"count",options:{smartCount:e.count}})),n.createElement("h5",{className:"mb-0"},n.createElement("span",{className:"clamp-2"},B("favouritesTitle")))),n.createElement("img",{src:a,alt:B("favouritesTitle"),className:"w-100 h-100 rounded-3"})))}var q=a(55796),W=a(52931),z="playlists.playlists",G=i.T.encloseNamespace(z);function $(e){return{application:Z.O.PLAYLISTS,action:M.e.Playlists.HOME,params:{sort:e}}}function Q(e){var t,a=(0,r.I0)(),i=(0,x.Z)(),u=(0,k.T)(),d=u.hasLocalPermissions,m=u.getGatedPermission,p=u.isLoaded,y=l.a.useBasicFetch(L.L.config()),v=l.a.useBasicFetch(T.N.currentUser()),f=(0,j.i)(),V=!!v.data&&C.A.getOrSetSortType(v.data.id,e.sort),R=(0,D.B)(null===(t=v.data)||void 0===t?void 0:t.id),Y=R.count,B=R.favourites,Q={count:Y,isLoadingCount:R.isLoading,data:B},J=!!V&&function(e){return A.C.getUserPlaylists(new E.l(V,e,h.e.All))},K=!!J&&function(e){l.a.getFetch(a)(J(e))};(0,F.M)({title:G("pageTitle"),description:G("pageDescription")});var X=!d(N.E.ViewPlaylistsLanding)&&V,ee=(0,U.K)(!!X&&J,K,function(e,t){if(1===e)return(0,I.r)(t);i.error(G("error"))}),te=ee.items,ae=ee.hasMore,ne=ee.isFetching,re=[{label:G("createPlaylist"),appLink:{application:Z.O.PLAYLISTS,action:M.e.Playlists.NEW_PLAYLIST},svgName:O.vn.Plus,className:"btn btn-outline-dark",button:!0,analyticsData:{},analyticsOptions:{location:s.LZ.Banner,entity:s.py.Playlist,workflowPhase:s.eu.Start,actionType:s.Vw.Create}}],ie=!!te&&!!v.data&&!!y.data&&(!!f.data||f.hasError)&&!!p;return d(N.E.ViewPlaylistsLanding)?n.createElement(W.Y,null):"hard-gate"===m(N.C.CreatePlaylist)?n.createElement("div",{className:"bg-white px-3"},n.createElement(_.f,{feature:"playlists"})):n.createElement("div",{className:"bg-white px-3"},"soft-gate"===m(N.C.CreatePlaylist)&&n.createElement(q.Z,null),n.createElement("div",{className:"d-flex justify-content-between align-items-end pb-3"},n.createElement("h1",{className:"h2 mb-0"},n.createElement(w.x,{namespace:z,phrase:"headerTitle"})),!!V&&n.createElement(b.e,{actions:re,sortComponent:n.createElement(g,{variant:"outline-dark",type:V,getSortAppLink:$})})),ie?n.createElement(c.P,{playlists:te,getPlaylistAppLink:e.getPlaylistAppLink,imageCdnUrl:y.data.imageCdnUrl,currentUser:v.data,presentationAudiences:f.data||[],bgColourClassNames:S.o,itemContainerClassName:"columns-of-five",itemStyle:"round",showCount:!0,showOwner:!0,extraPlaylistItem:n.createElement(H,Object.assign({},Q))}):n.createElement(o.Y,{itemClassName:"columns-of-five"}),ie&&(ae||ne)&&n.createElement(P._,{isFetching:ne,fetchNext:K}))}},52931:(e,t,a)=>{a.d(t,{Y:()=>v,v:()=>y});var n=a(32735),r=a(23481),i=a(65858),l=a(97958),s=a(83345),o=a(35223),c=a(99742),u=a(14070),d=a(97291),m="playlists.playlistsEmptyState",p=r.T.encloseNamespace(m);function y(e){return n.createElement(s.D.Provider,{value:m},n.createElement(l.u,{className:e.className},n.createElement(l.u.Image,{src:c.W.EmptyStates.Playlists.PLAYLISTS,altText:p("info"),size:e.imageSize}),n.createElement(l.u.Heading,{className:e.headingClassName},n.createElement(s.x,{phrase:"heading"})),n.createElement(l.u.Info,{className:"w-75"},n.createElement(s.x,{phrase:e.isStudent?"studentInfo":"info"})),!e.hideButton&&n.createElement(l.u.Cta,{text:r.T.getPhrase(m,"cta"),icon:o.vn.Plus,appLink:{application:d.O.PLAYLISTS,action:u.e.Playlists.NEW_PLAYLIST}})))}function v(){return n.createElement(s.D.Provider,{value:m},n.createElement(l.u,null,n.createElement(l.u.Image,{src:c.W.EmptyStates.Playlists.PLAYLISTS_PUBLIC,altText:p("info")}),n.createElement(l.u.Heading,null,n.createElement(s.x,{phrase:"heading"})),n.createElement(l.u.Info,null,n.createElement(s.x,{phrase:"info"})),n.createElement(l.u.Cta,{text:r.T.getPhrase(m,"publicCta"),appLink:{application:d.O.SIGN_UP,action:u.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:i.Vw.Click,location:i.LZ.PlaylistsLanding,entity:i.py.AppLink,workflowPhase:i.eu.Start,descriptor:i.Yu.SignUp}})))}},55796:(e,t,a)=>{a.d(t,{Z:()=>m});var n=a(32735),r=a(65858),i=a(15611),l=a(83914),s=a(83345),o=a(35223),c=a(14070),u=a(97291),d="signUp.gateBanner";function m(){return n.createElement("div",{role:"alert",className:"bg-light-indigo text-indigo rounded p-2 mb-4 d-flex align-items-center"},n.createElement(l.x,{svgName:o.vn.StarOutline,size:l.S.Large}),n.createElement(s.x,{namespace:d,phrase:"softGate"})," ",n.createElement(i.F,{appLink:{application:u.O.SIGN_UP,action:c.e.SignUp.PREMIUM_FEATURES},className:"indigo-link text-indigo text-underline d-inline",analyticsData:{},analyticsOptions:{actionType:r.Vw.Click,location:r.LZ.GatedBanner,entity:r.py.AppLink,descriptor:r.Yu.PremiumFeatures}},n.createElement(s.x,{namespace:d,phrase:"learnMore"})))}},47430:(e,t,a)=>{a.d(t,{f:()=>y});var n=a(32735),r=a(23481),i=a(65858),l=a(97958),s=a(83345),o=a(99742),c=a(14070),u=a(97291),d="shared.hardGateEmptyState",m=r.T.encloseNamespace(d),p={insights:{headingPhrase:"insightsHeading",descriptionPhrase:"insightsDescription",ctaPhrase:"insightsCta",imageUrl:o.W.ReverseTrial.INTERACTIVE},"my-videos":{headingPhrase:"myVideosHeading",descriptionPhrase:"myVideosDescription",ctaPhrase:"myVideosCta",imageUrl:o.W.EmptyStates.MY_VIDEOS_PUBLIC},playlists:{headingPhrase:"playlistsHeading",descriptionPhrase:"playlistsDescription",ctaPhrase:"playlistsCta",imageUrl:o.W.EmptyStates.Playlists.PLAYLISTS_PUBLIC},clip:{headingPhrase:"clipHeading",descriptionPhrase:"clipDescription",ctaPhrase:"clipCta",imageUrl:o.W.ReverseTrial.CLIP}};function y(e){var t=p[e.feature];return n.createElement(l.u,null,n.createElement(l.u.Image,{src:t.imageUrl}),n.createElement(l.u.Heading,null,n.createElement(s.x,{namespace:d,phrase:t.headingPhrase})),n.createElement(l.u.Info,{className:"w-75"},n.createElement(s.x,{namespace:d,phrase:t.descriptionPhrase})," "),n.createElement(l.u.Cta,{text:m(t.ctaPhrase),appLink:{application:u.O.SIGN_UP,action:c.e.SignUp.PREMIUM_FEATURES},analyticsData:{},analyticsOptions:{actionType:i.Vw.Click,location:i.LZ.GatedEmptyState,entity:i.py.AppLink,descriptor:i.Yu.PremiumFeatures},className:"btn btn-dark mb-3"}),e.extraCta)}},44110:(e,t,a)=>{a.d(t,{i:()=>l});var n=a(20354),r=a(89454),i=a(86698),l=function(){var e=(0,i.y)({redirectOnError:!0}),t=e.activePresentation,a=e.getFallbackPresentation,l=t||a();return n.a.useBasicFetch(!!l&&r.O.presentationAudiences(l.id))}},26323:(e,t,a)=>{a.d(t,{B:()=>s});var n=a(20354),r=a(63419);function i(e){return function(e){if(Array.isArray(e))return l(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 l(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?l(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 l(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function s(e){var t,a,l,s,o,c,u,d,m,p=n.a.useBasicFetch(e&&r.P.getFavouritesVideosCount(e)),y=n.a.useBasicFetch(e&&r.P.getFavouritesClipsCount(e)),v=n.a.useBasicFetch(e&&r.P.getFavouritesInteractivesCount(e));return{count:(null===(t=p.data)||void 0===t?void 0:t.count)+(null===(a=v.data)||void 0===a?void 0:a.count)+(null===(l=y.data)||void 0===l?void 0:l.count),favourites:[].concat(i((null===(s=p.data)||void 0===s?void 0:s.data)||[]),i((null===(o=y.data)||void 0===o?void 0:o.data)||[]),i((null===(c=v.data)||void 0===c?void 0:c.data)||[])),isLoading:!(null===(u=p.data)||void 0===u?void 0:u.data)||!(null===(d=y.data)||void 0===d?void 0:d.data)||!(null===(m=v.data)||void 0===m?void 0:m.data)}}},79382:(e,t,a)=>{a.d(t,{Z:()=>n});const n={playlistItem:"CaRJx",playlistItemGradient:"BI7p2",playlistMetadata:"eDk1l",partialHeading:"w4lWh",ownerAvatarContainer:"JImqE"}},82602:(e,t,a)=>{a.d(t,{WU:()=>c});var n=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],i={},l=function(e,t){i[e]=t},s=[60,60,24,7,365/7/12,12];function o(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,a){var n=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,a&&a.relativeDate);return function(e,t){for(var a=e<0?1:0,n=e=Math.abs(e),r=0;e>=s[r]&&r<s.length;r++)e/=s[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,n)[a].replace("%s",e.toString())}(n,function(e){return i[e]||i.en_US}(t))};l("en_US",function(e,t){if(0===t)return["just now","right now"];var a=n[Math.floor(t/2)];return e>1&&(a+="s"),[e+" "+a+" ago","in "+e+" "+a]}),l("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var a=r[~~(t/2)];return[e+" "+a+"前",e+" "+a+"后"]})}}]);
2
+ //# sourceMappingURL=9742-c839ec5abb-lite.chunk.js.map