@clickview/lite 0.77.0-rc.6 → 0.77.0-rc.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/1938-0f800548c4-lite.chunk.js +3 -0
- package/dist/scripts/1938-0f800548c4-lite.chunk.js.map +1 -0
- package/dist/scripts/{2664-51c998faf4-lite.chunk.js → 2664-a14b162644-lite.chunk.js} +2 -2
- package/dist/scripts/2664-a14b162644-lite.chunk.js.map +1 -0
- package/dist/scripts/3836-6dddb5dce8-lite.chunk.js +3 -0
- package/dist/scripts/3836-6dddb5dce8-lite.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/3836-6dddb5dce8-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-db4737c0f0.min.js → bundle-da50e87051.min.js} +3 -3
- package/dist/scripts/{bundle-db4737c0f0.min.js.map → bundle-da50e87051.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1938-12cceffe61-lite.chunk.js +0 -3
- package/dist/scripts/1938-12cceffe61-lite.chunk.js.map +0 -1
- package/dist/scripts/2664-51c998faf4-lite.chunk.js.map +0 -1
- package/dist/scripts/3836-5cbc7d2af6-lite.chunk.js +0 -2
- package/dist/scripts/3836-5cbc7d2af6-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1938-12cceffe61-lite.chunk.js.LICENSE.txt → 1938-0f800548c4-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-db4737c0f0.min.js.LICENSE.txt → bundle-da50e87051.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/2664-a14b162644-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/shared-object-image.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-object-image/SharedObjectImage.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/components/thumbnails/collection/title/collection-thumbnail-title.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/title/CollectionThumbnailTitle.tsx","file:///app/packages/libs/shared/src/components/thumbnails/collection/collection-thumbnail.scss","file:///app/packages/libs/shared/src/components/thumbnails/collection/CollectionThumbnail.tsx","file:///app/packages/libs/shared/src/utils/get-event-logger/getEventLogger.ts","file:///app/packages/projects/lite/src/apps/assign/components/flow-controls/FlowControls.tsx","file:///app/packages/projects/lite/src/apps/assign/hooks/useAssignSharedData.ts","file:///app/packages/projects/lite/src/apps/assign/utils/AssignHelper.ts","file:///app/packages/projects/lite/src/apps/assign/utils/get-assign-event-logger/getAssignEventLogger.ts","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-embed/AssignEmbed.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/integration-list/get-integration-handlers.ts","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/integration-list/IntegrationList.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/integration-list/integration-list.scss","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-integrations/AssignIntegrations.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-overview/AssignOverview.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-overview/assign-overview.scss","file:///app/packages/libs/shared/src/components/full-screen/FullScreen.tsx","file:///app/packages/libs/shared/src/components/full-screen/hooks/useFullScreenActions.ts","file:///app/packages/libs/shared/src/components/qr-code/QrCode.tsx","file:///app/packages/libs/shared/src/components/qr-code/qr-code.scss","file:///app/packages/libs/shared/src/components/qr-code/images/Base64ClickViewLogo.ts","file:///app/packages/libs/shared/src/components/qr-code/hooks/useQrCodeActions.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-full-screen/AssignFullScreen.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-full-screen/assign-full-screen.scss","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-qr-code/AssignQrCode.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-share-link/AssignShareLink.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-join-code/AssignJoinCode.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/AssignDetails.tsx","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-share-link/assign-share-link.scss","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-qr-code/assign-qr-code.scss","file:///app/packages/projects/lite/src/apps/assign/components/assign-details/components/assign-join-code/assign-join-code.scss","file:///app/packages/projects/lite/src/apps/assign/views/assign-details-view/AssignDetailsView.tsx","file:///app/packages/projects/lite/src/shared/components/instructions/instructions.scss","file:///app/packages/projects/lite/src/shared/components/instructions/Instructions.tsx"],"sourcesContent":["export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n 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 getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n getSharableEntityType(share: Share): SharableEntityType {\n switch (share.objectTypeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Playlist:\n return 'playlist';\n case MasterType.Subject:\n return 'subject';\n case MasterType.Series:\n return 'series';\n case MasterType.Interactive:\n return 'interactive';\n case MasterType.Clip:\n return 'clip';\n }\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.playlistWithThumbnailAndCount(id));\n }\n\n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.seriesWithThumbnailAndCount(id));\n }\n }\n \n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailFallbackSvg\":\"D4JFs\",\"posterFallbackSvg\":\"bjUWl\",\"coverFallbackSvg\":\"kdLpt\",\"thumbnailContainer\":\"d3CKN\",\"insightsMask\":\"KM76U\",\"requireMarking\":\"peLH7\",\"badge\":\"mVu0E\",\"bar\":\"zO3MS\",\"a\":\"K1jW5\",\"expandBar\":\"YITJl\",\"b\":\"tCpLF\",\"c\":\"lC0cq\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnail } from 'libs/shared/components/thumbnails/collection/CollectionThumbnail';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageSize, ImageType } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { BaseObject, Image, Playlist, Series } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport styles from './shared-object-image.scss';\n\nconst namespace = 'shared.sharedObjectImage';\n\nconst BASE_IMAGE_CLASS_NAME = 'rounded overflow-hidden';\n\ninterface ImageProps {\n image: Image;\n imageType: ImageType;\n imageClassName?: string;\n imageFallbackComponent: JSX.Element;\n}\n\nfunction getImageProps(object: BaseObject): ImageProps {\n const image = ImageHelper.getDisplayImageFromObject(object);\n\n if (VideoHelper.isVideoType(object))\n return {\n image,\n imageType: ImageType.Thumbnails,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: <ImageFallback type={ImageFallbackType.Video} />\n };\n\n switch (object.typeId) {\n case MasterType.Series:\n return {\n image,\n imageType: ImageType.TallPosters,\n imageClassName: BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent:\n <ImageFallback type={ImageFallbackType.Series} svgContainerClassName={styles.posterFallbackSvg} />\n };\n\n case MasterType.Playlist:\n return {\n image,\n imageType: ImageType.Covers,\n imageClassName: !image?.url\n ? `${BASE_IMAGE_CLASS_NAME} ${getBgColorClass(object.name, BG_COLOUR_CLASS_NAMES)}`\n : BASE_IMAGE_CLASS_NAME,\n imageFallbackComponent: (\n <ImageFallback\n type={ImageFallbackType.Playlist}\n svgContainerClassName={image?.url ? styles.coverFallbackSvg : 'd-none'}\n extraClasses={!image?.url && 'bg-transparent'}\n />\n )\n };\n }\n}\n\nfunction InsightsMask() {\n return (\n <div className={`d-flex pointer-events-none position-absolute bottom-0 start-0 h-100 w-100 z-1 justify-content-center align-items-center`}>\n <div className='position-absolute bg-dark bg-gradient opacity-50 w-100 h-100 z-0 rounded-3'></div>\n <div className='d-flex align-items-end gap-2 h-50 z-1'>\n <div className='d-flex align-items-end h-50'>\n <div className={`${styles.bar} ${styles.a} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-75'>\n <div className={`${styles.bar} ${styles.b} rounded shadow`}></div>\n </div>\n <div className='d-flex align-items-end h-100'>\n <div className={`${styles.bar} ${styles.c} rounded shadow`}></div>\n </div>\n </div>\n </div>\n );\n}\n\nfunction getImageRatio(object: BaseObject): ImageFallbackType {\n if (VideoHelper.isVideoType(object))\n return 16 / 9;\n\n if (object.typeId === MasterType.Playlist)\n return 1;\n\n if (object.typeId === MasterType.Series)\n return 9 / 16;\n}\n\nSharedObjectImage.defaultProps = {\n imageOptions: { size: ImageSize.Small }\n};\n\ninterface SharedObjectImageProps {\n object: BaseObject;\n locationContext: LocationContext;\n appLink?: Core.AppLink;\n showVideoMetadata?: boolean;\n fixedHeight?: boolean;\n requireMarking?: number;\n imageOptions?: ImageOptions;\n showInsightsMask?: boolean;\n showCollectionMask?: boolean;\n showVideoCount?: boolean;\n thumbnailSize?: 'sm' | 'md';\n imageClassName?: string;\n hideBottomBar?: boolean;\n onlyCount?: boolean;\n}\n\nexport function SharedObjectImage(props: SharedObjectImageProps): JSX.Element {\n const ref = React.useCallback((el: HTMLDivElement) => {\n if (!el || !props.fixedHeight)\n return;\n\n el.style.width = `${el.offsetHeight * getImageRatio(props.object)}px`;\n }, []);\n\n const useVideoThumbnail = VideoHelper.isVideoType(props.object);\n\n const {\n image,\n imageType,\n imageClassName,\n imageFallbackComponent\n } = getImageProps(props.object);\n\n const thumbnailMetadata = !props.showVideoMetadata ? {\n hideDuration: true,\n hideMask: true,\n hideRating: true,\n hideVideoBadgeType: true,\n hideBottomBar: true\n } : {\n hideBottomBar: props.hideBottomBar\n };\n\n return (\n <div className='d-flex align-items-center justify-content-center w-100 h-100'>\n <div ref={ref} className={props.fixedHeight ? 'h-100' : 'w-100'}>\n {useVideoThumbnail &&\n <div className={`${styles.thumbnailContainer} position-relative`}>\n {props.showInsightsMask && <InsightsMask />}\n <AppLink appLink={props.appLink}>\n <VideoThumbnail\n video={props.object}\n size={props.thumbnailSize}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n imageClassName={props.imageClassName}\n {...thumbnailMetadata}\n />\n </AppLink>\n {!!props.requireMarking && (\n <div className={`${props.showInsightsMask && styles.requireMarking} position-absolute bottom-0 end-0 z-1 m-2`}>\n <div className={`${styles.badge} d-flex align-items-center bg-light-ultramarine text-ultramarine fw-semibold rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n </div>\n )}\n </div>\n }\n {!useVideoThumbnail &&\n <>\n {'videos' in (props.object as Playlist | Series) ? (\n <CollectionThumbnail\n collection={props.object}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n showMask={props.showCollectionMask}\n showVideoCount={props.showVideoCount}\n onlyCount={props.onlyCount}\n />\n ) : (\n <BaseImage\n data={image?.url}\n imageType={imageType}\n imageOptions={props.imageOptions}\n appLink={props.appLink}\n className={imageClassName}\n analyticsData={{\n id: props.object.id,\n name: props.object.name\n }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(props.object.type),\n actionType: UserAction.Click,\n location: props.locationContext\n }}\n >\n {imageFallbackComponent}\n </BaseImage>\n )}\n </>\n }\n </div>\n </div>\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}","// extracted by mini-css-extract-plugin\nexport default {\"thumbnailTitle\":\"OsWjL\"};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './collection-thumbnail-title.scss';\n\ninterface BaseCollectionThumbnailTitleProps {\n title: string;\n}\n\nfunction BaseCollectionThumbnailTitle(props: BaseCollectionThumbnailTitleProps): JSX.Element {\n return (\n <h3 title={props.title} className='h6'>{props.title}</h3>\n );\n}\n\ninterface CollectionThumbnailTitleProps extends BaseCollectionThumbnailTitleProps {\n appLink: Core.AppLink;\n}\n\nexport function CollectionThumbnailTitle(props: CollectionThumbnailTitleProps) {\n if (!props.appLink) {\n return (\n <BaseCollectionThumbnailTitle {...props} />\n );\n }\n \n return (\n <AppLink appLink={props.appLink} className={`${styles.thumbnailTitle}`}>\n <BaseCollectionThumbnailTitle {...props} />\n </AppLink>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"M4zat\",\"mask\":\"r0Ztg\",\"thumbnailContainer\":\"uD9dz\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsOptions, EntityType, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CollectionThumbnailTitle } from 'libs/shared/components/thumbnails/collection/title/CollectionThumbnailTitle';\nimport { VideoThumbnail } from 'libs/shared/components/thumbnails/video/VideoThumbnail';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ThumbnailTextPosition } from 'libs/shared/enums/ThumbnailTextPosition';\nimport { Playlist, Series } from 'libs/shared/interfaces';\nimport { ImageOptions } from 'libs/shared/utils/ImageHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './collection-thumbnail.scss';\n\nconst namespace = 'shared.collectionThumbnail';\n\ntype SupportedContentType = Playlist | Series;\n\ninterface CollectionThumbnailProps {\n appLink?: Core.AppLink\n collection: SupportedContentType;\n imageOptions?: ImageOptions;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showMask?: boolean;\n showVideoCount?: boolean;\n onlyCount?: boolean;\n title?: string;\n titleAppLink?: Core.AppLink;\n subText?: string;\n subTextAppLink?: Core.AppLink;\n hoverText?: string;\n}\n\nexport function CollectionThumbnail(props: CollectionThumbnailProps) {\n function getFirstVideo() {\n let collectionVideos = props.collection?.videos;\n\n if (!collectionVideos)\n return;\n\n if (!collectionVideos.count && props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.clips.count)\n collectionVideos = playlist.clips;\n\n if (playlist.interactives.count)\n collectionVideos = playlist.interactives;\n }\n\n return ArrayHelper.first(collectionVideos.data);\n }\n\n function getVideoCount() {\n let totalCount = 0;\n\n if (props.collection.videos && props.collection.videos.count) {\n totalCount += props.collection.videos.count;\n }\n\n if (props.collection.typeId === MasterType.Playlist) {\n const playlist = props.collection as Playlist;\n\n if (playlist.interactives?.count)\n totalCount += playlist.interactives.count;\n\n if (playlist.clips?.count)\n totalCount += playlist.clips.count;\n }\n\n return totalCount;\n }\n\n function getEntityType(collection: SupportedContentType) {\n if (MasterTypeHelper.isType<Playlist>(collection, MasterType.Playlist)) {\n return EntityType.Playlist;\n }\n\n if (MasterTypeHelper.isType<Series>(collection, MasterType.Series)) {\n return EntityType.Series;\n }\n }\n\n const firstVideo = getFirstVideo();\n const videoCount = getVideoCount();\n const showTexts = props.title?.length || props.subText?.length;\n\n const analyticsData = {\n id: props.collection.id.toString(),\n name: props.collection.name,\n\n ...props.analyticsData\n };\n\n const analyticsOptions = {\n actionType: UserAction.Click,\n entity: getEntityType(props.collection),\n \n ...props.analyticsOptions\n };\n\n return (\n <div>\n <div className={`position-relative ${styles.thumbnailContainer} z-1`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n preventFocus\n >\n {props.showMask &&\n <div className={`${styles.mask} position-absolute w-100 h-100 rounded-3 bg-dark bg-gradient z-1 bg-opacity-50 pointer-events-none`}>\n <div className={`${styles.badge} d-flex align-items-center w-fit flex-grow-0 bg-dark rounded-pill ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Play} className='svg-container text-white' />\n <p className='d-inline fw-medium text-white mb-0'>\n {props.hoverText?.length ?\n <span>{props.hoverText}</span> :\n <Text namespace={namespace} phrase='playAll' />\n }\n </p>\n </div>\n </div>\n }\n\n {firstVideo &&\n <VideoThumbnail\n video={firstVideo}\n imageOptions={props.imageOptions}\n textPosition={ThumbnailTextPosition.Independent}\n type='cosmetic'\n hideMask\n hideRating\n hideDuration\n hideVideoTypeBadge\n />\n }\n\n {!firstVideo &&\n <div className='ratio ratio-16x9 bg-light rounded-3'>\n <div className='d-flex justify-content-center align-items-center'>\n <SvgContainer svgName={cvSvgLibrary.Play} className='w-33 opacity-25 text-gray-400' />\n </div>\n </div>\n }\n\n {props.showVideoCount &&\n <div className={`${styles.badge} d-flex align-items-center w-fit bg-dark bg-opacity-75 rounded-pill position-absolute bottom-0 end-0 ps-1 m-2`}>\n <SvgContainer svgName={cvSvgLibrary.Series} className='svg-container text-white me-1' />\n <p className='d-inline fw-semibold text-white mb-0'>\n {props.onlyCount\n ? <span>{videoCount}</span>\n : <Text namespace={namespace} phrase='videos' options={{ count: videoCount, smartCount: videoCount }} />\n }\n </p>\n </div>\n }\n </AppLink>\n\n </div>\n \n {showTexts &&\n <div className='mt-2 d-flex flex-column'>\n {props.subText &&\n <TitleSubText title={props.subText} appLink={props.subTextAppLink}>\n {props.subText}\n </TitleSubText>\n }\n {props.title &&\n <CollectionThumbnailTitle\n title={props.collection.name}\n appLink={props.titleAppLink}\n />\n }\n </div>\n }\n </div>\n );\n}","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\n/**\n * Base type that every event needs to extend from\n */\nexport interface BaseEventLogData<T extends string = string> {\n type: T;\n}\n\n/**\n * Utility type to map event types to config types\n */\nexport type EventLogConfig<TEvents extends BaseEventLogData> = {\n [K in TEvents['type']]: BaseConfigData<Extract<TEvents, { type: K }>>;\n};\n\ninterface BaseConfigData<T extends BaseEventLogData> {\n isValid?: (data: T) => boolean;\n analyticsOptions: AnalyticsOptions;\n}\n\ninterface GetEventLoggerOptions<TData extends HashObject, TEvents extends BaseEventLogData> {\n baseData: TData;\n /**\n * Event type config map\n */\n config: EventLogConfig<TEvents>;\n /**\n * Base analytics options\n */\n analyticsOptions: AnalyticsOptions;\n\n shouldLog?: boolean;\n}\n\n/**\n * Method build and log events which are typed using map\n * passed in from config\n */\nexport function getEventLogger<\n TData extends HashObject = HashObject,\n TEvents extends BaseEventLogData = BaseEventLogData\n>(\n options: GetEventLoggerOptions<TData, TEvents>\n) {\n /**\n * Types to assist hinting in our log / getData methods\n */\n type EventType = TEvents['type']; // type of event\n type EventData = Extract<TEvents, { type: EventType }>; // restrict the data to the passed type\n \n /**\n * Get analytics data and options for a given event type\n */\n function getData(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n const logDataConfig = options.config[data.type];\n\n if (!logDataConfig?.isValid(data))\n return;\n\n const mergedData = {\n ...options.baseData,\n ...data\n };\n \n const sanitizedData = ObjectHelper.omit<typeof data>(mergedData, ['type']);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(\n logDataConfig.analyticsOptions,\n [\n options.analyticsOptions,\n logAnalyticsOptions\n ]\n );\n\n return {\n data: sanitizedData,\n analyticsOptions\n };\n }\n\n /**\n * Similar to `getData` except it logs the analytics event\n * for a given type if its valid\n */\n function log(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n if (!options.shouldLog)\n return;\n\n const analytics = getData(data, logAnalyticsOptions);\n\n if (!analytics)\n return;\n\n AnalyticsHelper.logUserAction(analytics.data, analytics.analyticsOptions);\n }\n\n return {\n getData,\n log\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\n\nconst namespace = 'assign.flowControls';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FlowControlsProps {\n showSpinner?: boolean;\n hideNextButton?: boolean;\n hideBackButton?: boolean;\n disableNextButton?: boolean;\n disableBackButton?: boolean;\n backButtonText?: string;\n hideCreateClassroomButton?: boolean;\n nextButtonText?: string;\n nextButtonTooltip?: string;\n onClickNext?: () => void;\n onClickBack?: () => void;\n onClickCreateClassroom?: () => void;\n leftComponent?: JSX.Element;\n}\n\nexport function FlowControls(props: FlowControlsProps): JSX.Element {\n const hideBackButton = props.hideBackButton || !props.onClickBack;\n const hideNextButton = props.hideNextButton || !props.onClickNext;\n const hideCreateClassroomButton = props.hideCreateClassroomButton || !props.onClickCreateClassroom;\n \n if (hideBackButton && hideNextButton && hideCreateClassroomButton)\n return <></>;\n \n return (\n <PopupButtons className='justify-content-between'>\n <div>\n {!!props.leftComponent && props.leftComponent}\n {!hideCreateClassroomButton && (\n <PopupButtons.Submit variant='link' onClick={props.onClickCreateClassroom} text={getPhrase('createClassroom')} className='text-info p-0' />\n )}\n </div>\n <div className='d-flex'>\n {!hideBackButton && (\n <PopupButtons.Cancel variant='link' onClick={props.onClickBack} text={props.backButtonText || getPhrase('back')} />\n )}\n {!hideNextButton && (\n <Tooltip title={props.nextButtonTooltip} disable={!props.nextButtonTooltip} placement='top' spanHack>\n <PopupButtons.Submit\n variant='dark'\n onClick={props.onClickNext}\n text={props.nextButtonText || getPhrase('next')}\n disabled={props.disableNextButton}\n showSpinner={props.showSpinner}\n />\n </Tooltip>\n )}\n </div>\n </PopupButtons>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nexport interface UseAssignSharedDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\nexport function useAssignSharedData(options: UseAssignSharedDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.objectId, currentUser.data?.id);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n /**\n * Fetch interactive videos options to set them as defaults\n * if the interactive share data does not have any options set.\n * We only fetch this if its an interactive share entity\n */\n const interactive = Flight.useBasicFetch<Interactive>(\n MasterTypeHelper.isType<InteractiveMetadata>(entity.data, MasterType.Interactive) && entity.data.interactiveId &&\n InteractiveRequests.interactive(entity.data.interactiveId)\n );\n\n const { hasPermissions, isLoaded } = usePermissions();\n\n const hasStudentExp = hasPermissions(PermissionName.StudentExperience);\n const canCreateClassrooms = hasPermissions(PermissionName.CreateClassrooms);\n \n const dataLoaded = (\n !!currentUser.data &&\n !!entity.data &&\n !!config.data &&\n !!isLoaded\n );\n \n return {\n loaded: dataLoaded,\n currentUser,\n entity,\n interactive,\n config,\n hasStudentExp,\n canCreateClassrooms\n };\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { BaseObject, ClassroomGroup, User } from 'libs/shared/interfaces';\n\nexport const AssignHelper = {\n getRecipients(entities: ClassroomGroup[] | User[]): string[] {\n if (!entities.length)\n return [];\n \n return entities.map(e => e.id);\n },\n \n getLearnersForGroups(groups: ClassroomGroup[]): User[] {\n const learners = groups.reduce<User[]>((prev, curr) => ([\n ...prev, ...(curr.users.data ?? [])\n ]), []);\n\n return ArrayHelper.uniq(learners, 'id');\n },\n\n getSelectedEntities<T extends BaseObject>(selectedEntities: T[], entity: T): T[] {\n const selected = selectedEntities.find(e => e.id?.toString() === entity.id?.toString());\n\n if (selected)\n return selectedEntities.filter(e => e.id?.toString() !== entity.id?.toString());\n\n return [ ...selectedEntities, entity ];\n },\n\n getContactSupportUrl(marketingUrl: string, instanceRegion: InstanceRegion): string {\n if (!marketingUrl || !instanceRegion)\n return;\n \n let path = '/contact-us/support'; // new websites\n\n if (instanceRegion === InstanceRegion.NZ) {\n path = '/contact-us/';\n }\n \n return UrlHelper.safeUrlConcat(marketingUrl, path);\n }\n};","import { AnalyticsOptions, AssignDescriptors, EntityType, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EventLogConfig, getEventLogger } from 'libs/shared/utils/get-event-logger/getEventLogger';\n\nimport { AssignLogData, BaseAssignData } from './interfaces/GetAssignEventLogger';\n\nexport type AssignLogFn = ReturnType<typeof getAssignEventLogger>['log'];\n\n// #region Validation Methods\nfunction isValidShare(data: AssignLogData): boolean {\n if (!('share' in data))\n return false;\n\n return !!data.share;\n}\n// #endregion\n\n// #region Config \nconst LogDataConfig: EventLogConfig<AssignLogData> = {\n /**\n * Share - Assign\n */\n 'create-existing-classroom': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Assign,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.ExistingClassroom\n }\n },\n 'create-open-classroom': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Assign,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.OpenClassroom\n }\n },\n 'view-assignment': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Assign,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.ViewAssignment\n }\n },\n 'select-existing-classroom-flow': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Start,\n descriptor: AssignDescriptors.ExistingClassroom,\n entity: EntityType.Assign\n }\n },\n 'select-open-classroom-flow': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Start,\n descriptor: AssignDescriptors.OpenClassroom,\n entity: EntityType.Assign\n }\n },\n 'view-previous-assignment': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Discard,\n entity: EntityType.Assign,\n descriptor: AssignDescriptors.ViewPreviousAssignment\n }\n },\n 'close-assign-popup': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Discard, // Usually discarded unless called form 'assign-details' step\n entity: EntityType.Assign,\n descriptor: AssignDescriptors.ClosePopup\n }\n },\n 'create-new-classroom': {\n isValid: data => !!data.classroom,\n analyticsOptions: {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Next,\n descriptor: AssignDescriptors.CreateClassroom,\n entity: EntityType.Assign\n }\n },\n 'select-narrow-selection': {\n isValid: data => !!data.classroom,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Assign,\n workflowPhase: WorkflowPhase.Next,\n descriptor: AssignDescriptors.NarrowSelection\n }\n },\n 'click-create-classroom': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Assign,\n workflowPhase: WorkflowPhase.Next,\n descriptor: AssignDescriptors.CreateClassroom\n }\n },\n\n /**\n * General\n */\n 'copy-embed-html': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.Assign, // default\n descriptor: ShareDescriptors.CopyEmbedHtml\n }\n },\n 'copy-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.Assign, // default\n descriptor: ShareDescriptors.CopyLink\n }\n },\n 'print-qr-code': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Print,\n entity: EntityType.Assign, // default\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.PrintQrCode\n }\n },\n 'download-qr-code': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Download,\n entity: EntityType.Assign, // default\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.DownloadQrCode\n }\n },\n 'request-full-screen': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Assign, // default\n workflowPhase: WorkflowPhase.Complete,\n descriptor: AssignDescriptors.FullScreen\n }\n }\n};\n\n// #endregion\n\n// #region Implementation\ninterface AssignEventLoggerOptions {\n data: BaseAssignData;\n analyticsOptions: AnalyticsOptions;\n shouldLog?: boolean;\n}\n\nexport function getAssignEventLogger(options: AssignEventLoggerOptions) {\n const { getData, log } = getEventLogger({\n analyticsOptions: options.analyticsOptions,\n baseData: options.data,\n config: LogDataConfig,\n shouldLog: options.shouldLog ?? true\n });\n\n return {\n log,\n getData\n };\n}\n// #endregion","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ShareIntegrationsStack } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrationsStack';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\n\nconst namespace = 'assign.assignDetailsTabs';\n\ninterface TabItemProps {\n tab: AssignDetailsTab;\n active: AssignDetailsTab;\n onClick: (tab: AssignDetailsTab) => void;\n}\n\nfunction TabItem(props: React.PropsWithChildren<TabItemProps>): JSX.Element {\n const active = props.tab === props.active;\n\n return (\n <button\n className={classNames(\n 'rounded-pill d-flex align-items-center gap-1 ps-1',\n active ? 'bg-dark text-white' : 'bg-light'\n )}\n onClick={() => props.onClick(props.tab)}\n >\n {props.children}\n </button>\n );\n}\n\nexport type AssignDetailsTab = 'overview' | 'share-link' | 'qr-code' | 'embed' | 'integrations' | 'join-code';\n\ninterface AssingDetailsTabsProps {\n active: AssignDetailsTab;\n onClick: (screen: AssignDetailsTab) => void;\n hideTabs?: AssignDetailsTab[];\n}\n\n// [icon, phrase]\nconst TabIconAndPhraseMap: {[key in AssignDetailsTab]: [string, string]} = {\n 'overview': [ '', '' ],\n 'share-link': [ cvSvgLibrary.Link, 'shareLink' ],\n 'qr-code': [ cvSvgLibrary.QrCode, 'qrCode' ],\n 'embed': [ cvSvgLibrary.Code, 'embed' ],\n 'join-code': [ cvSvgLibrary.Key, 'joinCode' ],\n 'integrations': [ '', 'integrations' ] // Integrations uses different component\n};\n\nconst AvailableTabs: AssignDetailsTab[] = [ 'share-link', 'join-code', 'qr-code', 'embed', 'integrations' ];\n\nexport function AssingDetailsTabs(props: AssingDetailsTabsProps): JSX.Element {\n const enabledTabs = AvailableTabs.filter(tab => !props.hideTabs?.includes(tab));\n\n if (!enabledTabs.length)\n return <></>;\n \n return (\n <div className='d-flex justify-content-center mb-3 gap-3 flex-wrap'>\n {enabledTabs.map(tab => {\n const [ icon, phrase ] = TabIconAndPhraseMap[tab];\n\n if (tab === 'integrations') {\n return (\n <TabItem tab={tab} {...props} key={tab}>\n <ShareIntegrationsStack size='sm' noTooltip />\n <Text namespace={namespace} phrase={phrase} />\n </TabItem>\n );\n }\n\n return (\n <TabItem tab={tab} {...props} key={tab}>\n <SvgContainer svgName={icon} />\n <Text namespace={namespace} phrase={phrase} />\n </TabItem>\n );\n })}\n </div>\n );\n}\n","import React from 'react';\n\nimport { EmbedDetails } from 'libs/shared/apps/share/components/copy-embed-html/CopyEmbedHtml';\nimport { CopyEmbedHtml } from 'libs/shared/apps/share-v2/components/copy-embed-html/CopyEmbedHtml';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport { AssignDetailsTab, AssingDetailsTabs } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { AssignLogFn } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { AssignDetailsFlow } from '../../AssignDetails';\n\nconst namespace = 'assign.assignEmbed';\n\nexport interface AssignEmbedProps {\n entity: BaseObject;\n entityId: string;\n entityType: SharableEntityType;\n embedUrl: string;\n liteUrl: string;\n shareId: string;\n joinCode?: string;\n onClickTab: (tab: AssignDetailsTab) => void;\n flow?: AssignDetailsFlow;\n log?: AssignLogFn;\n hideTabs?: AssignDetailsTab[];\n}\n\nfunction JoinCodeInstructions() {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1' />\n </Instructions.Step>\n <Instructions.Step number={2}>\n <Text phrase='endStep' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nfunction SignInInstruction() {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1' />\n </Instructions.Step>\n <Instructions.Step number={2}>\n <Text phrase='step2SignIn' />\n </Instructions.Step>\n <Instructions.Step number={3}>\n <Text phrase='endStep' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nexport function AssignEmbed(props: AssignEmbedProps): JSX.Element {\n function onCopyLogEvent(embedDetails: EmbedDetails) {\n props.log && props.log({\n type: 'copy-embed-html',\n embedDetails,\n flow: props.flow\n });\n }\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='w-100'>\n <AssingDetailsTabs active='embed' onClick={props.onClickTab} hideTabs={props.hideTabs} />\n <div className='container-fluid bg-light py-3 bg-light rounded-3 p-3'>\n <div className='row gy-4'>\n <div className='col-lg-5 col-12 d-flex flex-column justify-content-center'>\n {props.joinCode ?\n <JoinCodeInstructions /> :\n <SignInInstruction />\n }\n </div>\n <div className='col-lg-7 col-12 d-flex flex-column-reverse gap-3'>\n <CopyEmbedHtml\n analyticsOptions={{}}\n embedUrl={props.embedUrl}\n entity={props.entity}\n entityId={props.entityId}\n entityType={props.entityType}\n liteUrl={props.liteUrl}\n shareId={props.shareId}\n hideLabel\n hasInputBg\n onCopy={onCopyLogEvent}\n />\n </div>\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import { LocationUtils } from 'libs/common/backbone/core/LocationUtils';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nconst POPUP_FEATURES = 'toolbar=0,location=0,menubar=0,width=600,height=600';\n\n/**\n * ⚠️ Hacky solution warning ⚠️\n * \n * Both Google Classroom and MS Teams provide an SDK to do essentially what this file does.\n * However when using their SDK, we lose control of how the items are displayed on our page.\n * \n * Ed-puzzle seems like it does what we've done here\n * so i've taken a leaf out of their book and taken a similar approach.\n * This puts us at risk of them changing their SDK and our implementation not changing\n * \n * If MS Teams or Google Classroom stop working, this is most likely why. But we should be able\n * to simply find out what their new parameters are and open a popup to the new shape in\n * order to fix any issues \n * \n * High risk, low reward 🤙\n * \n * - Sha\n */\nexport function getIntegrationHandlers(link: string): Record<string, () => void> {\n if (!link)\n return {};\n\n return {\n googleClassroom() {\n const url = UrlHelper.urlBuilder('https://classroom.google.com/share', { link });\n LocationUtils.PageLoad(url, true, POPUP_FEATURES);\n },\n microsoftTeams() {\n const url = UrlHelper.urlBuilder('https://teams.microsoft.com/share', {\n href: link,\n preview: false,\n referrer: LocationUtils.GetCurrentHostname(),\n s: Date.now()\n });\n LocationUtils.PageLoad(url, true, POPUP_FEATURES);\n }\n };\n}","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { ExternalLink } from 'libs/shared/components/external-link/ExternalLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\nimport { getIntegrationHandlers } from 'apps/assign/components/assign-details/components/integration-list/get-integration-handlers';\n\nimport integrationsList from './integration-list.json';\n\nimport styles from './integration-list.scss';\n\nconst namespace = 'assign.integrationList';\n\ninterface IntegrationItemProps {\n integration: any;\n className: string;\n onClick: () => void;\n}\n\nfunction IntegrationItem(props: IntegrationItemProps): JSX.Element {\n const Tag = props.onClick ? 'div' : 'a';\n\n return (\n <div className={classNames('col-6 mb-2', props.className)}>\n <Tag\n href={props.onClick ? undefined : props.integration.link}\n className='d-flex align-items-center border rounded-1 p-2 text-decoration-none hover-bg-light-blue fw-medium cursor-pointer'\n target='_blank'\n rel='noopener noreferrer'\n onClick={props.onClick || undefined}\n >\n <span\n className={`d-block ${styles.integrationIcon}`}\n style={{ backgroundImage: `url(${props.integration.icon})` }}\n />\n <span className='text-center flex-grow-1'>{props.integration.name}</span>\n </Tag>\n </div>\n );\n}\n\ninterface IntegrationListProps {\n instanceRegion?: InstanceRegion;\n itemClassName?: string;\n maxHeight?: string | number;\n contactSupportLink: string;\n hideSupportLink?: boolean;\n shareLink?: string;\n}\n\nexport function IntegrationList(props: IntegrationListProps): JSX.Element {\n const handlers = getIntegrationHandlers(props.shareLink);\n \n const integrations = integrationsList.filter(item => {\n let valid = !!item.icon && (!!item.link || handlers[item.id]);\n\n if (props.instanceRegion && item.instanceRegions.length)\n valid = item.instanceRegions.includes(props.instanceRegion);\n\n return valid;\n });\n \n return (\n <div className='bg-white rounded-3'>\n <Scrollbars autoHeight autoHeightMax={props.maxHeight || 308}>\n <div className='container-fluid py-3'>\n <div className='row mx-0 px-2'>\n {integrations.map((integration, index) => {\n return (\n <IntegrationItem\n integration={integration}\n key={index}\n className={props.itemClassName}\n onClick={handlers[integration.id]}\n />\n );\n })}\n {!props.hideSupportLink &&\n <div className='col-12 text-center'>\n <ExternalLink href={props.contactSupportLink} className='btn btn-link text-info p-0' newTab>\n <Text namespace={namespace} phrase='cantFindIntegration' />\n </ExternalLink>\n </div>\n }\n </div>\n </div>\n </Scrollbars>\n </div>\n );\n}\n\n","// extracted by mini-css-extract-plugin\nexport default {\"integrationIcon\":\"_cwyZ\"};","import React from 'react';\n\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport { AssignDetailsTab, AssingDetailsTabs } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\n\nimport { IntegrationList } from '../integration-list/IntegrationList';\n\nconst namespace = 'assign.assignIntegrations';\n\nexport interface AssignIntegrationsProps {\n entity: BaseObject;\n joinCode?: string;\n instanceRegion: InstanceRegion;\n contactSupportLink: string;\n onClickTab: (tab: AssignDetailsTab) => void;\n liteUrl: string;\n shareLink: string;\n hideTabs?: AssignDetailsTab[];\n}\n\nfunction JoinCodeInstructions() {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1JoinCode' />\n </Instructions.Step>\n <Instructions.Step number={2}>\n <Text phrase='step2JoinCode' />\n </Instructions.Step>\n <Instructions.Step number={3}>\n <Text phrase='step4' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nfunction SignInInstructions() {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1SignIn' />\n </Instructions.Step>\n <Instructions.Step number={2}>\n <Text phrase='step2SignIn' />\n </Instructions.Step>\n <Instructions.Step number={3}>\n <Text phrase='step3SignIn' />\n </Instructions.Step>\n <Instructions.Step number={4}>\n <Text phrase='step4' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nexport function AssignIntegrations(props: AssignIntegrationsProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div>\n <AssingDetailsTabs active='integrations' onClick={props.onClickTab} hideTabs={props.hideTabs} />\n <div className='container-fluid py-3 bg-light rounded-3 p-3'>\n <div className='row gy-4'>\n <div className='col-12 col-lg-5 d-flex flex-column justify-content-center'>\n {!props.joinCode ?\n <JoinCodeInstructions /> :\n <SignInInstructions />\n }\n </div>\n <div className='col-12 col-lg-7'>\n <IntegrationList\n instanceRegion={props.instanceRegion}\n contactSupportLink={props.contactSupportLink}\n shareLink={ShareHelper.getLink({\n liteUrl: props.liteUrl,\n shareLink: props.shareLink,\n joinCode: props.joinCode\n })}\n />\n </div>\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { ShareIntegrationsStack } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrationsStack';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { Divider } from 'libs/shared/components/divider/Divider';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { AssignDetailsTab } from '../assign-details-tabs/AssignDetailsTabs';\n\nimport styles from './assign-overview.scss';\n\nconst namespace = 'assign.assignOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ShareLinkOptionProps {\n screen: AssignDetailsTab;\n onClick: (screen: AssignDetailsTab) => void;\n}\n\nfunction ShareLinkOption(props: React.PropsWithChildren<ShareLinkOptionProps>): JSX.Element {\n return (\n <button\n className={classNames(\n 'rounded ratio ratio-1x1 border border-light hover-bg-light-blue',\n styles.shareButton\n )}\n onClick={() => props.onClick(props.screen)}\n >\n <div className='d-flex flex-column align-items-center justify-content-center gap-1 p-2 '>\n {props.children}\n </div>\n </button>\n );\n}\n\ninterface AssignOverviewImageProps {\n entity: SharableEntity;\n}\n\nfunction AssignOverviewImage(props: AssignOverviewImageProps): JSX.Element {\n return (\n <div className={classNames('d-flex align-items-center justify-content-center', styles.overviewImage)}>\n <figure\n style={{ backgroundImage: `url(${ImageUrls.Assign.ASSIGN_DETAILS.OVERVIEW_TEXT})` }}\n className={classNames('m-0', styles.text)}\n />\n <figure\n style={{ backgroundImage: `url(${ImageUrls.Assign.ASSIGN_DETAILS.OVERVIEW_BG})` }}\n className={classNames('position-relative m-0', styles.background)}\n >\n <div className={classNames('position-absolute', styles.entity)}>\n <SharedObjectImage\n object={props.entity}\n locationContext={LocationContext.AssignFlowView}\n thumbnailSize='md'\n showVideoCount\n onlyCount\n />\n </div>\n </figure>\n </div>\n );\n}\n\nexport interface AssignOverviewProps {\n entity: SharableEntity;\n onClickTab: (screen: AssignDetailsTab) => void;\n}\n\nexport function AssignOverview(props: AssignOverviewProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className={classNames('mx-auto', styles.wrapper)}>\n <div className='d-flex flex-column align-items-center text-center mb-4 gap-3'>\n\n <AssignOverviewImage entity={props.entity} />\n\n <h3 className='m-0 d-flex flex-column flex-md-row align-items-center gap-2'>\n <SvgContainer svgName={cvSvgLibrary.Check} className={classNames('d-inline-block svg-container md bg-green rounded-circle text-white')}/>\n <Text phrase='title' />\n </h3>\n <p className='m-0'>\n <Text phrase='description' />\n </p>\n </div>\n \n <Divider text={getPhrase('dividerText')} className='mb-4' noUpperCase />\n\n <div className='d-flex justify-content-center gap-3 flex-wrap'>\n <ShareLinkOption screen='share-link' onClick={props.onClickTab}>\n <SvgContainer svgName={cvSvgLibrary.Link} />\n <Text phrase='shareLink' />\n </ShareLinkOption>\n <ShareLinkOption screen='qr-code' onClick={props.onClickTab}>\n <SvgContainer svgName={cvSvgLibrary.QrCode} />\n <Text phrase='qrCode' />\n </ShareLinkOption>\n <ShareLinkOption screen='embed' onClick={props.onClickTab}>\n <SvgContainer svgName={cvSvgLibrary.Code} />\n <Text phrase='embed' />\n </ShareLinkOption>\n <ShareLinkOption screen='integrations' onClick={props.onClickTab}>\n <span className={classNames('d-inline-flex align-items-center', styles.integrations)}>\n <ShareIntegrationsStack size='sm' noTooltip />\n </span>\n <Text phrase='integrations' />\n </ShareLinkOption>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"QB4Pm\",\"shareButton\":\"r9K_x\",\"integrations\":\"tTimT\",\"overviewImage\":\"McyhP\",\"text\":\"u6Z4r\",\"background\":\"RtZpT\",\"entity\":\"m6eZK\"};","import React from 'react';\nimport { Button, ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Text } from '../text/Text';\n\nconst namespace = 'shared.fullScreen';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\ninterface FullScreenButtonProps {\n variant?: ButtonProps['variant'];\n text?: string;\n hideIcon?: boolean;\n onClick: () => void;\n}\n\nfunction FsButton(props: FullScreenButtonProps) {\n if (!document.fullscreenEnabled)\n return <></>;\n\n const buttonText = props.text || getPhrase('buttonText');\n \n return (\n <div className='w-100 text-center'>\n <Button variant={props.variant || 'link'} className='d-inline-flex justify-content-center text-info p-0' onClick={props.onClick}>\n <span>{buttonText}</span>\n {!props.hideIcon &&\n <SvgContainer svgName={cvSvgLibrary.NewWindow} />\n }\n </Button>\n </div>\n );\n}\n\ninterface FullScreenProps {\n isFullScreen: boolean;\n controlsRef: React.MutableRefObject<HTMLDivElement>;\n}\n\nexport function FullScreen(props: React.PropsWithChildren<FullScreenProps>) {\n if (!document.fullscreenEnabled)\n return <></>;\n \n function exitFullScreen() {\n document.exitFullscreen();\n }\n \n return (\n <div className={classNames('vw-100 vh-100 bg-white', !props.isFullScreen && 'd-none')} ref={props.controlsRef}>\n <div className='position-absolute top-0 end-0 pe-4 pt-4 z-1'>\n <Button variant='outline-dark' className='d-inline-flex align-items-center gap-1' onClick={exitFullScreen}>\n <Text namespace={namespace} phrase='exitFullScreen' />\n <SvgContainer svgName={cvSvgLibrary.Close} />\n </Button>\n </div>\n {props.children}\n </div>\n );\n}\n\nFullScreen.Button = FsButton;","import React from 'react';\n\nfunction handleFullScreenChange<T extends HTMLElement>(target: T, setIsFullScreen: (fullscreen: boolean) => void) {\n if (document.fullscreenElement === target) {\n setIsFullScreen(true);\n return;\n }\n\n setIsFullScreen(false);\n}\n\nexport function useFullScreenActions<T extends HTMLElement = HTMLDivElement>() {\n const ref = React.useRef<T>(null);\n \n const [ isFullScreen, setIsFullScreen ] = React.useState(false);\n\n const isSupported = document.fullscreenEnabled;\n\n React.useEffect(() => {\n if (!ref.current)\n return;\n\n const onFullScreenChange = () => {\n handleFullScreenChange(ref.current, setIsFullScreen);\n };\n\n ref.current?.addEventListener('fullscreenchange', onFullScreenChange);\n\n return () => ref.current?.removeEventListener('fullscreenchange', onFullScreenChange);\n }, [ref.current]);\n \n function requestFullScreen() {\n if (!ref.current || !isSupported)\n return;\n\n ref.current.requestFullscreen && ref.current.requestFullscreen();\n }\n\n function exitFullScreen() {\n document.exitFullscreen().finally(() => {\n setIsFullScreen(false);\n });\n }\n \n return {\n ref,\n isFullScreen,\n isSupported,\n requestFullScreen,\n exitFullScreen\n };\n}","import React from 'react';\nimport { QRCode } from 'react-qrcode-logo';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { Base64ClickViewLogo } from './images/Base64ClickViewLogo';\n\nimport styles from './qr-code.scss';\n\nexport type QrCodeSizePreset = 'sm' | 'md' | 'lg';\ntype QrCodeSizeCustom = 'custom';\ntype QrCodeSize = QrCodeSizePreset | QrCodeSizeCustom;\n\ninterface BaseQrCodeProps {\n id?: string;\n size: QrCodeSize;\n value: string;\n containerClassName?: string;\n qrRef?: React.MutableRefObject<QRCode>;\n}\n\ninterface DefaultQrCodeProps extends BaseQrCodeProps {\n size: QrCodeSizePreset;\n}\n\ninterface CustomQrCodeProps extends BaseQrCodeProps {\n size: QrCodeSizeCustom;\n customSize: number;\n}\n\ntype QrCodeProps = DefaultQrCodeProps | CustomQrCodeProps;\n\nconst sizeClassMap: {[key in QrCodeSizePreset]: string} = {\n sm: styles.containerSm,\n md: styles.containerMd,\n lg: styles.containerLg\n};\n\nconst qrSizeMap: {[key in QrCodeSize]: number} = {\n sm: 100, // px\n md: 200,\n lg: 400,\n custom: 0\n};\n\nconst OUTER_RADIUS = 10;\nconst INNER_RADIUS = 1;\n\nexport function QrCode(props: QrCodeProps): JSX.Element {\n const qrSize = props.size === 'custom' ? props.customSize : qrSizeMap[props.size];\n const qrSizeClass = props.size === 'custom' ? props.containerClassName : sizeClassMap[props.size];\n\n return (\n <div className={classNames(\n 'position-relative d-flex justify-content-center align-items-center flex-column',\n 'border border-dark rounded-3 bg-white',\n qrSizeClass\n )}>\n <QRCode\n id={props.id || 'cv-qr-code'}\n value={props.value}\n bgColor='white'\n size={qrSize}\n logoImage={Base64ClickViewLogo}\n logoPaddingStyle='circle'\n logoPadding={1}\n eyeRadius={[\n { outer: [ OUTER_RADIUS, 0, 0, 0 ], inner: [ INNER_RADIUS, 0, 0, 0 ]}, // top left\n { outer: [ 0, OUTER_RADIUS, 0, 0 ], inner: [ 0, INNER_RADIUS, 0, 0 ]}, // top right\n { outer: [ 0, 0, 0, OUTER_RADIUS ], inner: [ 0, 0, 0, INNER_RADIUS ]} // bottom left\n ]}\n removeQrCodeBehindLogo\n ref={props.qrRef}\n />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"containerSm\":\"oAKIc\",\"containerMd\":\"Ml3L5\",\"containerLg\":\"cWnjp\"};","export const Base64ClickViewLogo = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAOEAAADhCAMAAAAJbSJIAAAAYFBMVEX////4mB34lhX5qEz4kQD4kwD4lAD+79/4lxf4jwD//vv938L5rFb96NP+9On4lQv6tWf+9/D5pUX8z6D6u3n4nzP82LP5pD/7xo/4nSr6s2X6vX77xpH5rVn5pED/+vVbzc80AAACrElEQVR4nO3di3LTMBSE4R7HDjEF3IaWlmvf/y0RlA4RjWNZHqHZo/97Au1k4m6OZPXqCgAAAAAAAAAAAAAAAAAAAAAAAP/BzW3tFZR2tDe1l1DYbhqua6+hrF1n48faiygqJLTxrvYqSvqV0IZ3b2uvo5zfCW26/1B7IcU8J7Ru/772Skr5k9AO/afaSynkJWF43jzWXksZfxNaf1N7MUWcJLT9w1Pt5RRwmtAmjxUuSmgHhxUuTmgOK9y/Cf1VuFcJ3VW41wm9VbgzCa2bPFW4cwntMDqqcGcTuqpwMwkdVbi5hLY/OpnCzSZ0U+HmE4bnjYsKdyFh+DJ6qHAXE1r/tfb6truc0Hr9CreQ0KbP6o/UpYTWDeIVbjGh/BRuOWH4MkpXuJSE1n+pvcwNkhJKT+HSElp3kK1wiQnD80a1wqUm1J3CpSdUncKtSCg6hVuTMFQ4wSncqoSSG6nrEipO4VYmFJzCrU4oN4Vbn1CtwmUkFKtwOQm1NlKzEoaWqlPh8hKG541MhctNaMNOpMJlJ5SpcPkJVTZSNyQUmcJtSahR4bYlVJjCbUwosJG6NaH1D7UjLOAzXPoEvX8PvT9L3f89dN9pVA74ZSeU2eHP/n0oc0qD3/jnA+6dz2ncz9rcz0vdz7zHb7WXvNLavSeJohZh/zCiMkCMsI9/YpQpahHO07yQ2lCLJCacpIpaJPFs4lGqqEXSzpeKFbUIZ4Qli1qEs/ru37fovysWtUjj7z0JTdTmtfz+oft3SAfhohZp9l1uuYnavDbvVBDZ+kzU4t0mDopapL07hlQnavMau+vLS1GLRHfu/XBS1CIt3ZuocEYtRzP3lypufSZq5B5hza3PRE3c5+2vqEX836vv/38j+P//FgAAAAAAAAAAAAAAAAAAAAAAALJ+AoAWHaLlWtXqAAAAAElFTkSuQmCC';\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { QRCode } from 'react-qrcode-logo';\nimport printJS from 'print-js';\n\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { QrCode, QrCodeSizePreset } from '../QrCode';\n\ninterface PrintOptions {\n id: string;\n name?: string;\n size?: QrCodeSizePreset;\n onDone?: () => void;\n}\n\ninterface DownloadOptions {\n type?: 'png' | 'jpg' | 'webp',\n name?: string;\n size?: QrCodeSizePreset;\n}\n\ninterface QrCodeDownloadProps {\n options: Required<DownloadOptions>;\n value: string;\n onDone?: () => void;\n}\n\nfunction QrCodeDownload(props: QrCodeDownloadProps): JSX.Element {\n const downloadRef = React.useRef<QRCode>();\n React.useEffect(() => {\n const timeout = setTimeout(() => {\n downloadRef.current?.download(props.options.type, props.options.name);\n typeof props.onDone === 'function' && props.onDone();\n }, 200); // Some delay is require for images to load\n\n return () => {\n clearTimeout(timeout);\n };\n }, []);\n \n return (\n <div className='d-none'>\n <QrCode size={props.options.size} value={props.value} qrRef={downloadRef} />\n </div>\n );\n}\n\nexport function useQrCodeActions() {\n const ref = React.useRef<QRCode>();\n const [ isPrinting, setIsPrinting ] = React.useState(false);\n const [ isDownloading, setIsDownloading ] = React.useState(false);\n\n /**\n * We render a different QR Code according to what we need\n */\n function download({ name, size = 'lg', type = 'png' }: DownloadOptions): void {\n if (!ref.current)\n return;\n \n const printRegion = document.getElementById('print-region');\n\n if (!printRegion)\n Core.ErrorHelper.throw(new DevError('Could not find print region in layout'));\n\n const root = createRoot(printRegion);\n\n setIsDownloading(true);\n \n root.render(\n <QrCodeDownload\n options={{ name, size, type }}\n value={ref.current.props.value}\n onDone={() => {\n root.unmount();\n setIsDownloading(false);\n }}\n />\n );\n }\n\n function print({ id, name, size = 'lg', onDone }: PrintOptions) {\n if (!ref.current)\n return;\n \n const printRegion = document.getElementById('print-region');\n\n if (!printRegion)\n Core.ErrorHelper.throw(new DevError('Could not find print region in layout'));\n\n const root = createRoot(printRegion);\n\n root.render(\n <div className='d-none vw-100 vh-100'>\n <div id={id} className='w-100 h-100 d-flex align-items-center justify-content-center'>\n <QrCode size={size} value={ref.current.props.value} />\n </div>\n </div>\n );\n\n setIsPrinting(true);\n\n window.setTimeout(() => {\n printJS({\n printable: id,\n type: 'html',\n documentTitle: name || 'ClickView - QRCode',\n targetStyles: ['*'],\n imageStyle: '*',\n style: '@page { size: A4; margin: 1.5cm 0; }',\n onLoadingEnd: () => {\n typeof onDone === 'function' && onDone();\n setIsPrinting(false);\n root.unmount();\n },\n onError: () => {\n setIsPrinting(false);\n root.unmount();\n }\n });\n }, 200); // Some delay is require for images to load\n }\n\n return { ref, isPrinting, isDownloading, download, print };\n}","import React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { QrCode } from 'libs/shared/components/qr-code/QrCode';\nimport { QrCodeSizePreset } from 'libs/shared/components/qr-code/QrCode';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport styles from './assign-full-screen.scss';\n\nconst namespace = 'assign.fullScreen';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface AssignQrDetailsProps {\n value: string;\n}\n\nfunction AssignQrDetails(props: AssignQrDetailsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const size: QrCodeSizePreset = (breakpoints.sm || breakpoints.xs) ? 'md' : 'lg';\n\n return (\n <Row>\n <Col xs={12} md={10} lg={8} xl={6} className='bg-light p-4 rounded mx-auto d-flex flex-column align-items-center'>\n <div className='mb-3 text-center'>\n <span className='fs-3 fw-bold'>\n <Text namespace={namespace} phrase='scanQr' />\n </span>\n </div>\n <QrCode size={size} value={props.value} />\n </Col>\n </Row>\n );\n}\n\ninterface AssignJoinCodeDetailsProps {\n link: string;\n joinCode: string;\n}\n\nfunction AssignJoinCodeDetails(props: AssignJoinCodeDetailsProps): JSX.Element {\n return (\n <Row>\n <Col xs={12} md={8} lg={5} className={'bg-light p-4 d-block rounded mx-auto'}>\n <Instructions>\n <Instructions.Step number={1}>\n <Text namespace={namespace} phrase='goToLink' />\n </Instructions.Step>\n <Instructions.Textbox value={props.link}/>\n <Instructions.Step number={2}>\n <Text namespace={namespace} phrase='enterJoinCode' />\n </Instructions.Step>\n <Instructions.Textbox value={props.joinCode} size='lg' />\n </Instructions>\n </Col>\n </Row>\n );\n}\n\ninterface AssignLinkDetailsProps {\n link: string;\n}\n\nfunction AssignLinkDetails(props: AssignLinkDetailsProps): JSX.Element {\n return (\n <div className='d-flex align-items-center'>\n <div className={classNames('bg-light p-4 d-block rounded mx-auto w-auto', styles.assignLinkDetails)}>\n <Instructions bottomSpacing='none'>\n <Instructions.Textbox label={getPhrase('goToLink')} value={props.link} />\n </Instructions>\n </div>\n </div>\n );\n}\n\ninterface AssignFullScreen {\n entity: SharableEntity;\n locationContext: LocationContext;\n}\n\nexport function AssignFullScreen(props: React.PropsWithChildren<AssignFullScreen>): JSX.Element {\n return (\n <div className='container p-4'>\n <Row>\n <Col>\n <h3 className='text-center'>\n <Text namespace={namespace} phrase='watchVideo' />\n </h3>\n </Col>\n </Row>\n <Row className='mb-4'>\n <Col xs={12} sm={8} md={6} lg={3} className='mx-auto'>\n <SharedObjectImage\n object={props.entity}\n thumbnailSize='md'\n locationContext={props.locationContext}\n showVideoMetadata\n hideBottomBar\n />\n </Col>\n </Row>\n {props.children}\n </div>\n );\n}\n\nAssignFullScreen.QrDetails = AssignQrDetails;\nAssignFullScreen.JoinCode = AssignJoinCodeDetails;\nAssignFullScreen.LinkDetails = AssignLinkDetails;","// extracted by mini-css-extract-plugin\nexport default {\"assignLinkDetails\":\"P4XQf\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { FullScreen } from 'libs/shared/components/full-screen/FullScreen';\nimport { useFullScreenActions } from 'libs/shared/components/full-screen/hooks/useFullScreenActions';\nimport { useQrCodeActions } from 'libs/shared/components/qr-code/hooks/useQrCodeActions';\nimport { QrCode } from 'libs/shared/components/qr-code/QrCode';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport { AssignDetailsTab, AssingDetailsTabs } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { AssignLogFn } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { AssignDetailsFlow } from '../../AssignDetails';\nimport { AssignFullScreen } from '../assign-full-screen/AssignFullScreen';\n\nimport styles from './assign-qr-code.scss';\n\nconst namespace = 'assign.assignQrCode';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AssignQrCodeProps {\n shareLink: string;\n entity: SharableEntity;\n joinCode?: string;\n onClickTab: (tab: AssignDetailsTab) => void;\n flow?: AssignDetailsFlow;\n log?: AssignLogFn;\n hideTabs?: AssignDetailsTab[];\n}\n\nexport function AssignQrCode(props: AssignQrCodeProps): JSX.Element {\n const qrCode = useQrCodeActions();\n const fullScreen = useFullScreenActions();\n const fileName = getPhrase('fileName', { name: props.entity.name });\n \n function getSteps() {\n if (props.joinCode)\n return {\n 1: 'step1',\n 2: 'stepWatchVideo'\n };\n\n return {\n 1: 'step1',\n 2: 'step2SignIn',\n 3: 'stepWatchVideo'\n };\n }\n\n function getQrCodeValue() {\n if (props.joinCode) {\n return `${props.shareLink}?joinCode=${props.joinCode}`;\n }\n\n return props.shareLink;\n }\n\n function onClickDownload() {\n props.log && props.log({\n type: 'download-qr-code',\n entity: props.entity,\n flow: props.flow\n });\n \n qrCode.download({ name: fileName });\n }\n\n function onClickPrint() {\n props.log && props.log({\n type: 'print-qr-code',\n entity: props.entity,\n flow: props.flow\n });\n\n const name = fileName;\n qrCode.print({\n id: name,\n name: name\n });\n }\n\n function onClickFullScreen() {\n props.log && props.log({\n type: 'request-full-screen',\n entity: props.entity,\n flow: props.flow,\n tab: 'qr-code'\n });\n fullScreen.requestFullScreen();\n }\n\n const steps = getSteps();\n const qrValue = getQrCodeValue();\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div>\n <AssingDetailsTabs active='qr-code' onClick={props.onClickTab} hideTabs={props.hideTabs} />\n <div className={`d-block mx-auto ${styles.container}`}>\n <div className='container-fluid py-3 bg-light rounded-3 p-3'>\n <div className='row gy-4'>\n <div className='col-lg-7 col-12 d-flex flex-column justify-content-center'>\n <Instructions>\n {Object.entries(steps).map(([ step, phrase ]) => (\n <Instructions.Step number={step} key={step}>\n <Text phrase={phrase} />\n </Instructions.Step>\n ))}\n </Instructions>\n <div className='d-flex flex-column flex-md-row gap-2 mb-2'>\n <SpinnerButton\n variant='outline-dark'\n className='w-100'\n showSpinner={qrCode.isPrinting}\n spinnerText={getPhrase('printing')}\n onClick={onClickPrint}\n >\n <Text phrase='printButton' />\n </SpinnerButton>\n <SpinnerButton\n showSpinner={qrCode.isDownloading}\n variant='outline-dark'\n className='w-100'\n onClick={onClickDownload}\n spinnerText={getPhrase('downloading')}\n >\n <Text phrase='downloadButton' />\n </SpinnerButton>\n </div>\n <FullScreen.Button onClick={onClickFullScreen} hideIcon />\n </div>\n <div className='col-lg-5 col-12'>\n <QrCode\n size='md'\n value={qrValue}\n qrRef={qrCode.ref}\n />\n </div>\n </div>\n </div>\n </div>\n </div>\n <FullScreen isFullScreen={fullScreen.isFullScreen} controlsRef={fullScreen.ref}>\n <AssignFullScreen entity={props.entity} locationContext={LocationContext.AssignFlowView}>\n <AssignFullScreen.QrDetails value={qrValue} />\n </AssignFullScreen>\n </FullScreen>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { FullScreen } from 'libs/shared/components/full-screen/FullScreen';\nimport { useFullScreenActions } from 'libs/shared/components/full-screen/hooks/useFullScreenActions';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport { AssignDetailsTab, AssingDetailsTabs } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { AssignLogFn } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { AssignDetailsFlow } from '../../AssignDetails';\nimport { AssignFullScreen } from '../assign-full-screen/AssignFullScreen';\n\nimport styles from './assign-share-link.scss';\n\nconst namespace = 'assign.assignShareLink';\n\nexport interface AssignShareLinkProps {\n entity: BaseObject;\n liteUrl: string;\n shareLink: string;\n onClickTab: (tab: AssignDetailsTab) => void;\n joinCode?: string;\n flow?: AssignDetailsFlow;\n log?: AssignLogFn;\n hideTabs?: AssignDetailsTab[];\n}\n\ninterface JoinCodeInstructionsProps {\n link: string;\n}\n\nfunction JoinCodeInstructions(props: JoinCodeInstructionsProps) {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1' />\n </Instructions.Step>\n <Instructions.Textbox\n value={props.link}\n showCopyButton\n />\n <Instructions.Step number={2}>\n <Text phrase='endStep' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\ninterface SignInInstructionsProps {\n link: string;\n}\n\nfunction SignInInstructions(props: SignInInstructionsProps): JSX.Element {\n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1' />\n </Instructions.Step>\n <Instructions.Textbox\n value={props.link}\n showCopyButton\n />\n <Instructions.Step number={2}>\n <Text phrase='step2SignIn' />\n </Instructions.Step>\n <Instructions.Step number={3}>\n <Text phrase='endStep' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nexport function AssignShareLink(props: AssignShareLinkProps): JSX.Element {\n const fullScreen = useFullScreenActions();\n\n const link = ShareHelper.getLink({\n liteUrl: props.liteUrl,\n shareLink: props.shareLink,\n joinCode: props.joinCode\n });\n\n function onClickFullScreen() {\n typeof props.log === 'function' &&\n props.log({\n type: 'request-full-screen',\n entity: props.entity,\n flow: props.flow,\n tab: 'share-link'\n });\n fullScreen.requestFullScreen();\n }\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div>\n <AssingDetailsTabs active='share-link' onClick={props.onClickTab} hideTabs={props.hideTabs} />\n <div className={`bg-light rounded-3 mx-auto py-3 px-sm-5 px-3 d-block ${styles.container}`}>\n {props.joinCode\n ? <JoinCodeInstructions link={link} />\n : <SignInInstructions link={link} />\n }\n <FullScreen.Button onClick={onClickFullScreen} hideIcon />\n </div>\n </div>\n <FullScreen isFullScreen={fullScreen.isFullScreen} controlsRef={fullScreen.ref}>\n <AssignFullScreen entity={props.entity} locationContext={LocationContext.AssignFlowView}>\n <AssignFullScreen.LinkDetails link={link} />\n </AssignFullScreen>\n </FullScreen>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\nimport { UrlHelper } from 'libs/analytics/utils/UrlHelper';\n\nimport { FullScreen } from 'libs/shared/components/full-screen/FullScreen';\nimport { useFullScreenActions } from 'libs/shared/components/full-screen/hooks/useFullScreenActions';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { Instructions } from 'shared/components/instructions/Instructions';\n\nimport { AssignDetailsTab, AssingDetailsTabs } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { AssignLogFn } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { AssignDetailsFlow } from '../../AssignDetails';\nimport { AssignFullScreen } from '../assign-full-screen/AssignFullScreen';\n\nimport styles from './assign-join-code.scss';\n\nconst namespace = 'assign.assignJoinCode';\n\nexport interface AssignJoinCodeProps {\n entity: BaseObject;\n liteUrl: string;\n shareLink: string;\n onClickTab: (tab: AssignDetailsTab) => void;\n joinCode: string;\n flow?: AssignDetailsFlow;\n log?: AssignLogFn;\n hideTabs?: AssignDetailsTab[];\n}\n\ninterface JoinCodeInstructionsProps {\n playUrl: string;\n joinCode: string;\n}\n\nfunction getDisplayUrl(href: string): string {\n let displayUrl = '';\n try {\n const urlObj = new URL(href);\n displayUrl = urlObj.host + urlObj.pathname;\n } catch (e) {\n // fallback to original if invalid URL\n displayUrl = href;\n }\n\n return displayUrl;\n}\n\nfunction JoinCodeInstructions(props: JoinCodeInstructionsProps) {\n // Use JS URL to remove protocol from props.playUrl\n const displayUrl = getDisplayUrl(props.playUrl);\n \n return (\n <Instructions>\n <Instructions.Step number={1}>\n <Text phrase='step1' options={{ href: props.playUrl, url: displayUrl }} />\n </Instructions.Step>\n <Instructions.Step number={2}>\n <Text phrase='step2' />\n </Instructions.Step>\n <Instructions.Textbox\n value={props.joinCode}\n align='center'\n showCopyButton\n />\n <Instructions.Step number={3}>\n <Text phrase='step3' />\n </Instructions.Step>\n <Instructions.Step number={4}>\n <Text phrase='step4' />\n </Instructions.Step>\n </Instructions>\n );\n}\n\nexport function AssignJoinCode(props: AssignJoinCodeProps): JSX.Element {\n const fullScreen = useFullScreenActions();\n\n const playUrl = UrlHelper.safeUrlConcat(props.liteUrl, '/play');\n\n function onClickFullScreen() {\n typeof props.log === 'function' &&\n props.log({\n type: 'request-full-screen',\n entity: props.entity,\n flow: props.flow,\n tab: 'share-link'\n });\n fullScreen.requestFullScreen();\n }\n\n if (!props.joinCode)\n return <></>;\n \n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div>\n <AssingDetailsTabs active='join-code' onClick={props.onClickTab} hideTabs={props.hideTabs} />\n <div className={`bg-light rounded-3 mx-auto py-3 px-sm-5 px-3 d-block ${styles.container}`}>\n <JoinCodeInstructions playUrl={playUrl} joinCode={props.joinCode} />\n <FullScreen.Button onClick={onClickFullScreen} hideIcon />\n </div>\n </div>\n <FullScreen isFullScreen={fullScreen.isFullScreen} controlsRef={fullScreen.ref}>\n <AssignFullScreen entity={props.entity} locationContext={LocationContext.AssignFlowView}>\n <AssignFullScreen.JoinCode joinCode={props.joinCode} link={playUrl} />\n </AssignFullScreen>\n </FullScreen>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharePincode } from 'libs/shared/apps/share-v2/interfaces/SharePincode';\nimport { SharableEntity, SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\nimport { AssignDetailsTab } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { AssignEmbed, AssignEmbedProps } from 'apps/assign/components/assign-details/components/assign-embed/AssignEmbed';\nimport { AssignIntegrations, AssignIntegrationsProps } from 'apps/assign/components/assign-details/components/assign-integrations/AssignIntegrations';\nimport { AssignOverview, AssignOverviewProps } from 'apps/assign/components/assign-details/components/assign-overview/AssignOverview';\nimport { AssignQrCode, AssignQrCodeProps } from 'apps/assign/components/assign-details/components/assign-qr-code/AssignQrCode';\nimport { AssignShareLink, AssignShareLinkProps } from 'apps/assign/components/assign-details/components/assign-share-link/AssignShareLink';\nimport { AssignLogFn } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { AssignJoinCode, AssignJoinCodeProps } from './components/assign-join-code/AssignJoinCode';\n\nconst namespace = 'assign.assignDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport type AssignDetailsFlow = 'existing-classroom' | 'open-classroom';\ninterface AssignDetailsProps {\n entityId: string;\n entity: SharableEntity;\n entityType: SharableEntityType;\n share: Share;\n liteUrl: string;\n instanceRegion: InstanceRegion;\n contactSupportLink: string;\n sharePincode?: SharePincode;\n initialScreen?: AssignDetailsTab;\n title?: string;\n hideTitle?: boolean;\n log?: AssignLogFn;\n}\n\ntype AllAssignDetailsScreenProps =\n & AssignOverviewProps\n & AssignShareLinkProps\n & AssignQrCodeProps\n & AssignEmbedProps\n & AssignIntegrationsProps\n & AssignJoinCodeProps;\n\nconst AssignDetailsConfig: {[key in AssignDetailsTab]: {\n component: (props: AllAssignDetailsScreenProps) => JSX.Element;\n}} = {\n 'overview': { component: AssignOverview },\n 'share-link': { component: AssignShareLink },\n 'qr-code': { component: AssignQrCode },\n 'embed': { component: AssignEmbed },\n 'integrations': { component: AssignIntegrations },\n 'join-code': { component: AssignJoinCode }\n};\n\nconst ShareTypeFlowMap: {[key in ShareType]?: 'existing-classroom' | 'open-classroom'} = {\n [ShareType.Open]: 'open-classroom',\n [ShareType.Classroom]: 'existing-classroom'\n};\n\nexport function AssignDetails(props: AssignDetailsProps): JSX.Element {\n const [ screen, setScreen ] = React.useState<AssignDetailsTab>(props.initialScreen ?? 'share-link');\n\n const shouldHideTitle = props.hideTitle || screen === 'overview';\n const hideTabs: AssignDetailsTab[] = [];\n if (!props.sharePincode?.code)\n hideTabs.push('join-code');\n\n const data: AllAssignDetailsScreenProps = {\n entity: props.entity,\n onClickTab: setScreen,\n entityId: props.entityId,\n entityType: props.entityType,\n liteUrl: props.liteUrl,\n instanceRegion: props.instanceRegion,\n joinCode: props.sharePincode?.code,\n shareId: props.share.shareId,\n embedUrl: props.share.link.shortenedEmbedUrl,\n shareLink: props.share.link.shortenedUrl,\n contactSupportLink: props.contactSupportLink,\n flow: ShareTypeFlowMap[props.share.type],\n log: props.log,\n hideTabs\n };\n \n const Component = AssignDetailsConfig[screen].component;\n\n const title = props.title || getPhrase('title');\n \n return (\n <div className='d-flex flex-column align-items-center justify-content-center py-3 gap-4'>\n {!shouldHideTitle &&\n <h3 className='mb-0'><span>{title}</span></h3>\n }\n \n <Component {...data} />\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"HrK3n\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"OCQzr\"};","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"MdqeM\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EntityType, LocationContext, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharePincode } from 'libs/shared/apps/share-v2/interfaces/SharePincode';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\n\nimport { getInsightsOverviewAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { AssignDetails } from 'apps/assign/components/assign-details/AssignDetails';\nimport { AssignDetailsTab } from 'apps/assign/components/assign-details/components/assign-details-tabs/AssignDetailsTabs';\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\nimport { AssignHelper } from 'apps/assign/utils/AssignHelper';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nconst namespace = 'assign.assignDetailsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AssignDetailsViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n shareId: string;\n initialDetailsScreen?: AssignDetailsTab;\n detailsTitle?: string;\n}\n\nexport function AssignDetailsView(\n props: AssignDetailsViewProps\n) {\n const { config, loaded, entity, currentUser } = useAssignSharedData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { log } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n entity: EntityType.Assign,\n location: LocationContext.Popup\n }\n });\n\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n \n const isPincodePrivacy = share.data?.privacy === SharePrivacy.PinCode;\n const pincode = Flight.useBasicFetch<SharePincode>(\n isPincodePrivacy && ShareRequests.getPincodeByShareId(props.shareId)\n );\n\n function onClickBack() {\n log({\n type: 'close-assign-popup',\n share: share.data\n }, {\n workflowPhase: WorkflowPhase.Complete\n });\n \n props.closePopup();\n }\n \n function onClickNext() {\n const appLink = getInsightsOverviewAppLink(share.data);\n\n if (!appLink)\n return;\n\n log({\n type: 'view-assignment',\n share: share.data\n });\n\n AppLinkHelper.trigger(appLink);\n props.closePopup();\n }\n\n const initialScreen: AssignDetailsTab = props.initialDetailsScreen || 'overview';\n\n const contactSupportLink = AssignHelper.getContactSupportUrl(\n config.data?.marketingSiteUrl,\n currentUser.data?.instanceRegion\n );\n \n const showLoadingSpinner = (\n !loaded ||\n props.loading ||\n !share.data ||\n (isPincodePrivacy && !pincode.data)\n );\n\n return (\n <Popup\n size='lg'\n showLoadingSpinner={showLoadingSpinner}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3'\n animation={props.animate}\n hideTitle\n >\n <AssignDetails\n title={props.detailsTitle}\n entityId={props.objectId}\n entityType={props.entityType}\n share={share.data}\n sharePincode={pincode.data}\n entity={entity.data}\n liteUrl={config.data.liteUrl}\n instanceRegion={currentUser.data.instanceRegion}\n initialScreen={props.initialDetailsScreen || initialScreen}\n contactSupportLink={contactSupportLink}\n log={log}\n />\n <FlowControls\n backButtonText={getPhrase('backButtonText')}\n nextButtonText={getPhrase('nextButtonText')}\n onClickBack={onClickBack}\n onClickNext={onClickNext}\n hideCreateClassroomButton\n />\n </Popup>\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;"],"names":["SharePrivacy","ShareViewHelper","canEmbed","type","includes","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","map","id","getShareSettingsInitialValues","share","interactive","preventScrubbing","options","immediateFeedback","getEnabledSettingsField","entityType","showImmediateFeedbackField","showPreventScrubbingField","getSharableEntityType","objectTypeId","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","namespace","BASE_IMAGE_CLASS_NAME","InsightsMask","className","SharedObjectImage","props","ref","el","object","fixedHeight","style","width","offsetHeight","VideoHelper","typeId","MasterType","useVideoThumbnail","image","ImageHelper","imageType","imageClassName","imageFallbackComponent","ImageFallback","svgContainerClassName","url","getBgColorClass","name","extraClasses","getImageProps","thumbnailMetadata","showVideoMetadata","hideBottomBar","hideDuration","hideMask","hideRating","hideVideoBadgeType","showInsightsMask","AppLink","appLink","VideoThumbnail","video","size","thumbnailSize","imageOptions","textPosition","ThumbnailTextPosition","requireMarking","Text","phrase","smartCount","CollectionThumbnail","collection","analyticsData","analyticsOptions","entity","actionType","location","locationContext","showMask","showCollectionMask","showVideoCount","onlyCount","BaseImage","data","defaultProps","getPhrase","LanguageService","buildStyle","content","text","noUpperCase","Divider","BaseCollectionThumbnailTitle","title","CollectionThumbnailTitle","firstVideo","collectionVideos","videos","count","playlist","clips","interactives","ArrayHelper","getFirstVideo","videoCount","totalCount","getVideoCount","showTexts","length","subText","toString","MasterTypeHelper","preventFocus","SvgContainer","svgName","hoverText","hideVideoTypeBadge","TitleSubText","subTextAppLink","titleAppLink","getEventLogger","getData","logAnalyticsOptions","logDataConfig","config","isValid","mergedData","baseData","log","shouldLog","analytics","FlowControls","hideBackButton","onClickBack","hideNextButton","onClickNext","hideCreateClassroomButton","onClickCreateClassroom","leftComponent","variant","onClick","backButtonText","nextButtonTooltip","disable","placement","spanHack","nextButtonText","disabled","disableNextButton","showSpinner","useAssignSharedData","currentUser","objectId","interactiveId","hasPermissions","isLoaded","hasStudentExp","canCreateClassrooms","loaded","AssignHelper","getRecipients","entities","e","getLearnersForGroups","groups","learners","reduce","prev","curr","users","getSelectedEntities","selectedEntities","find","getContactSupportUrl","marketingUrl","instanceRegion","path","isValidShare","LogDataConfig","workflowPhase","descriptor","classroom","getAssignEventLogger","TabItem","active","tab","children","TabIconAndPhraseMap","AvailableTabs","AssingDetailsTabs","enabledTabs","hideTabs","icon","key","ShareIntegrationsStack","noTooltip","JoinCodeInstructions","Instructions","number","SignInInstruction","POPUP_FEATURES","IntegrationItem","Tag","href","undefined","integration","link","target","rel","backgroundImage","IntegrationList","handlers","shareLink","googleClassroom","UrlHelper","LocationUtils","microsoftTeams","preview","referrer","s","Date","now","integrations","item","valid","instanceRegions","autoHeight","autoHeightMax","maxHeight","index","itemClassName","hideSupportLink","ExternalLink","contactSupportLink","newTab","SignInInstructions","ShareLinkOption","screen","AssignOverviewImage","ImageUrls","FullScreen","document","fullscreenEnabled","isFullScreen","controlsRef","Button","exitFullscreen","useFullScreenActions","setIsFullScreen","isSupported","current","onFullScreenChange","fullscreenElement","handleFullScreenChange","addEventListener","removeEventListener","requestFullScreen","requestFullscreen","exitFullScreen","buttonText","hideIcon","sizeClassMap","sm","md","lg","qrSizeMap","custom","QrCode","qrSize","customSize","qrSizeClass","containerClassName","QRCode","value","bgColor","logoImage","logoPaddingStyle","logoPadding","eyeRadius","outer","inner","removeQrCodeBehindLogo","qrRef","QrCodeDownload","downloadRef","timeout","setTimeout","download","onDone","clearTimeout","AssignFullScreen","Row","Col","xs","QrDetails","breakpoints","useBreakpoints","xl","JoinCode","joinCode","LinkDetails","bottomSpacing","label","showCopyButton","displayUrl","urlObj","URL","host","pathname","getDisplayUrl","playUrl","align","AssignDetailsConfig","component","onClickTab","fullScreen","ShareHelper","liteUrl","flow","isPrinting","setIsPrinting","isDownloading","setIsDownloading","qrCode","printRegion","getElementById","DevError","root","render","unmount","print","window","printable","documentTitle","targetStyles","imageStyle","onLoadingEnd","onError","fileName","steps","qrValue","Object","entries","step","SpinnerButton","spinnerText","CopyEmbedHtml","embedUrl","entityId","shareId","hideLabel","hasInputBg","onCopy","embedDetails","ShareTypeFlowMap","ShareType","AssignDetails","initialScreen","setScreen","shouldHideTitle","hideTitle","sharePincode","code","push","shortenedEmbedUrl","shortenedUrl","Component","AssignDetailsView","ShareRequests","isPincodePrivacy","privacy","pincode","initialDetailsScreen","marketingSiteUrl","showLoadingSpinner","loading","Popup","closePopup","bodyClassName","animation","animate","detailsTitle","BoxOverlay","show","bottomSpacingMap","none","itemSpacingMap","spacing","Step","Code","copied","setCopied","S","Textbox","textClassName","buttonClassName"],"sourceRoot":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! For license information please see 3836-6dddb5dce8-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3836,1938],{86877:(e,t,n)=>{n.d(t,{Z:()=>s});var r=n(23481);function o(e){return o="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o(e)}function i(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,a(r.key),r)}}function a(e){var t=function(e){if("object"!=o(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=o(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==o(t)?t:t+""}function u(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(u=function(){return!!e})()}function c(e){return c=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},c(e)}function l(e,t){return l=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},l(e,t)}var s=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=c(t),function(e,t){if(t&&("object"==o(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,u()?Reflect.construct(t,n||[],c(e).constructor):t.apply(e,n))}(this,t,[e])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&l(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"FileTypeError"}},{key:"lang",get:function(){return"upload.fileType"}},{key:"dialogOptions",get:function(){return{title:r.T.getPhrase(this.lang,"heading"),text:r.T.getPhrase(this.lang,"body"),buttons:[{text:r.T.getPhrase(this.lang,"okay"),className:"btn btn-dark",success:!0},{text:r.T.getPhrase(this.lang,"close"),className:"btn btn-link",close:!0}]}}}])&&i(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(n(47663).S)},91938:(e,t,n)=>{n.r(t),n.d(t,{BaseVideoUploadService:()=>me,LearningResourceUploadService:()=>Oe,MixedMediaUploadService:()=>Se,SubtitleUploadService:()=>we,UploadType:()=>ye});var r,o=n(43823),i=n(21161),a=n(46865),u=n(79976),c=n(37433),l=n(54149),s=n(71365),f=n(23481),p=n(70794),d=n(81886),y=n(20354),h=n(49985),b=n(65858),v=n(29555);!function(e){e[e.Permanent=0]="Permanent",e[e.Temporary=1]="Temporary"}(r||(r={}));var g=n(86877),m=n(28046),w=n(52003),O=n(60735),S=n(99940),P=n(110),k=function(e,t){var n=e.name.split("."),o=t===r.Permanent?null:P.O.add(new Date,7,"days").toISOString(),i={name:n.join("."),extension:n.length>1?n.pop():"",size:e.size,lifestyle:t,dateExpires:o,contentType:"multipart/form-data",chunkUploadEnabled:!0};return{url:"{gateway}/v1/files/upload",key:"upload:file",type:S.k.POST,data:i}},T=n(53301),j=n.n(T),E=n(47663);function U(e){return U="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},U(e)}function _(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,I(r.key),r)}}function I(e){var t=function(e){if("object"!=U(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=U(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==U(t)?t:t+""}function C(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(C=function(){return!!e})()}function L(e){return L=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},L(e)}function A(e,t){return A=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},A(e,t)}var D="upload.internetConnectivityError",x=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=L(t),function(e,t){if(t&&("object"==U(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,C()?Reflect.construct(t,n||[],L(e).constructor):t.apply(e,n))}(this,t,[f.T.getPhrase(D,"title")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&A(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"InternetConnectivityError"}},{key:"dialogOptions",get:function(){return{title:f.T.getPhrase(D,"heading"),text:f.T.getPhrase(D,"body"),buttons:[{text:f.T.getPhrase(D,"okay"),className:"btn btn-outline-dark",success:!0}]}}}])&&_(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(E.S),R=n(44331);function F(e){return F="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},F(e)}function M(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,V(r.key),r)}}function V(e){var t=function(e){if("object"!=F(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=F(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==F(t)?t:t+""}function N(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(N=function(){return!!e})()}function z(e){return z=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},z(e)}function B(e,t){return B=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},B(e,t)}var Q="upload.slowInternetError",q=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=z(t),function(e,t){if(t&&("object"==F(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,N()?Reflect.construct(t,n||[],z(e).constructor):t.apply(e,n))}(this,t,[f.T.getPhrase(Q,"title")])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&B(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"SlowInternetError"}},{key:"dialogOptions",get:function(){return{title:f.T.getPhrase(Q,"heading"),text:f.T.getPhrase(Q,"body"),buttons:[{text:f.T.getPhrase(Q,"okay"),className:"btn btn-outline-dark",success:!0}]}}}])&&M(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(E.S);function G(e){return G="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},G(e)}function Y(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,W(r.key),r)}}function W(e){var t=function(e){if("object"!=G(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=G(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==G(t)?t:t+""}function Z(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Z=function(){return!!e})()}function K(e){return K=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},K(e)}function H(e,t){return H=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},H(e,t)}var J=[],X=function(e){function t(e){var n;return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),(n=function(e,t,n){return t=K(t),function(e,t){if(t&&("object"==G(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Z()?Reflect.construct(t,n||[],K(e).constructor):t.apply(e,n))}(this,t,[e])).slowInternetTimeout={},n.showSlowInternetTimeout=!0,n}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&H(e,t)}(t,e),n=t,r=[{key:"name",get:function(){return"DropzoneWrapper"}},{key:"initialize",value:function(e){var t=this.options.loggingEnabled,n=o.Radio.channel(e.channelName),r=this;this.dropzone=new(j())(document.createElement("div"),{url:function(e){return e[0].cvUpload.ingestUrl},chunking:this.options.chunkingEnabled,chunkSize:this.options.chunkSize,forceChunking:!0,autoProcessQueue:!0,maxFilesize:this.options.maxFileSize,acceptedFiles:this.options.acceptedFiles,paramName:"content",timeout:18e4,init:function(){var e=this;t&&(i.each(J,function(t){e.on(t,function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var o=n[0]instanceof File?n[0].name:n[0];console.info(t,o,n)})}),this.on("uploadprogress",function(e,t,o){var i=o/e.size*100;n.trigger("progress",r.getId(e),i,o)}),this.on("success",function(e){var t=e.upload.chunks,r=i.last(t),o=r.xhr;o||(o=r.file.xhr);var a=JSON.parse(o.response);e.cvUpload.fileId=a.id,n.trigger(v.S.UPLOAD_SUCCESS,e,a)}),this.on("error",function(e,t,n){n&&0===n.status?d.Q.Ry.throw(new x):"canceled"!==e.status&&d.Q.Ry.throw(new R.n(f.T.getPhrase("upload.services","uploadError",{fileName:e.name,message:t.message})))}),this.on("sending",function(e){window.clearTimeout(r.slowInternetTimeout[e.path]),r.showSlowInternetTimeout&&(r.slowInternetTimeout[e.path]=window.setTimeout(function(){r.showSlowInternetTimeout&&d.Q.Ry.throw(new q),r.showSlowInternetTimeout=!1},3e4))}),this.on("complete",function(e){return window.clearTimeout(r.slowInternetTimeout[e.path])}))},params:function(e,t,n){if(n)return{chunk_index:n.index,upload_length:n.file.size}},addedfile:function(){},thumbnail:function(){},uploadprogress:function(){}})}},{key:"getId",value:function(e){return e.upload.uuid}},{key:"addFile",value:function(e){this.dropzone.addFile(e)}},{key:"removeFile",value:function(e){this.dropzone.removeFile(e)}},{key:"start",value:function(){this.dropzone.processQueue()}},{key:"destroy",value:function(){this.dropzone.destroy()}}],a=[{key:"isValidFile",value:function(e,t){return j().isValidFile(e,t)}}],r&&Y(n.prototype,r),a&&Y(n,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r,a}(d.Q.t6);function $(e){return $="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},$(e)}function ee(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",o=n.toStringTag||"@@toStringTag";function i(n,r,o,i){var c=r&&r.prototype instanceof u?r:u,l=Object.create(c.prototype);return te(l,"_invoke",function(n,r,o){var i,u,c,l=0,s=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(t,n){return i=t,u=0,c=e,p.n=n,a}};function d(n,r){for(u=n,c=r,t=0;!f&&l&&!o&&t<s.length;t++){var o,i=s[t],d=p.p,y=i[2];n>3?(o=y===r)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=e):i[0]<=d&&((o=n<2&&d<i[1])?(u=0,p.v=r,p.n=i[1]):d<y&&(o=n<3||i[0]>r||r>y)&&(i[4]=n,i[5]=r,p.n=y,u=0))}if(o||n>1)return a;throw f=!0,r}return function(o,s,y){if(l>1)throw TypeError("Generator is already running");for(f&&1===s&&d(s,y),u=s,c=y;(t=u<2?e:c)||!f;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(l=2,i){if(u||(o="next"),t=i[o]){if(!(t=t.call(i,c)))throw TypeError("iterator result is not an object");if(!t.done)return t;c=t.value,u<2&&(u=0)}else 1===u&&(t=i.return)&&t.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);i=e}else if((t=(f=p.n<0)?c:n.call(r,p))!==a)break}catch(t){i=e,u=1,c=t}finally{l=1}}return{value:t,done:f}}}(n,o,i),!0),l}var a={};function u(){}function c(){}function l(){}t=Object.getPrototypeOf;var s=[][r]?t(t([][r]())):(te(t={},r,function(){return this}),t),f=l.prototype=u.prototype=Object.create(s);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,te(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return c.prototype=l,te(f,"constructor",l),te(l,"constructor",c),c.displayName="GeneratorFunction",te(l,o,"GeneratorFunction"),te(f),te(f,o,"Generator"),te(f,r,function(){return this}),te(f,"toString",function(){return"[object Generator]"}),(ee=function(){return{w:i,m:p}})()}function te(e,t,n,r){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}te=function(e,t,n,r){if(t)o?o(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{var i=function(t,n){te(e,t,function(e){return this._invoke(t,n,e)})};i("next",0),i("throw",1),i("return",2)}},te(e,t,n,r)}function ne(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return re(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)?re(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,o=function(){};return{s:o,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return a=e.done,e},e:function(e){u=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(u)throw i}}}}function re(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function oe(e,t,n){return(t=ce(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ie(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ae(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,ce(r.key),r)}}function ue(e,t,n){return t&&ae(e.prototype,t),n&&ae(e,n),Object.defineProperty(e,"prototype",{writable:!1}),e}function ce(e){var t=function(e){if("object"!=$(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=$(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==$(t)?t:t+""}function le(e,t,n){return t=fe(t),function(e,t){if(t&&("object"==$(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,se()?Reflect.construct(t,n||[],fe(e).constructor):t.apply(e,n))}function se(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(se=function(){return!!e})()}function fe(e){return fe=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},fe(e)}function pe(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&de(e,t)}function de(e,t){return de=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},de(e,t)}var ye,he=function(e){function t(){var e;return ie(this,t),(e=le(this,t,[{dataProvider:s.u.getInstance(c.R.Ajax),cache:s.u.getInstance(a.p.Fifo),alertService:s.u.getInstance(u.P.ALERT)}])).incrementingUploadId=0,e}return pe(t,e),ue(t,[{key:"name",get:function(){return"UploadDataService"}},{key:"channelName",get:function(){return"private:upload:data:service"}},{key:"requestUploads",value:function(e,t,n,r,o){var a=this,u=this.chain();i.each(t,function(t){a.incrementingUploadId++,u.create({resource:e,eventPrefix:"request:upload:".concat(a.incrementingUploadId),data:a.getFileUploadRequest(t,n),callback:function(e){r(t,e)},errorHandler:a.alertService.error("Something went wrong while we were uploading your video. Please try again.")})}),u.func(function(){o()}).run()}},{key:"cancelUpload",value:function(e,t,n){this.create({resource:"/api/upload/cancel",eventPrefix:"cancel:upload",data:{uploadId:e,ingestUrl:t},callback:n})}},{key:"getFileUploadRequest",value:function(e,t){var n=e.name.split(".");return{name:n.join("."),extension:n.length>1?n.pop():"",fileSize:e.size,fileLifestyle:t}}},{key:"onDestroy",value:function(){s.u.releaseInstance(c.R.Ajax).releaseInstance(a.p.Fifo)}}])}(l.B);!function(e){e[e.Video=0]="Video",e[e.LearningResource=1]="LearningResource",e[e.Subtitle=2]="Subtitle",e[e.MixedMedia=3]="MixedMedia"}(ye||(ye={}));var be=oe(oe(oe(oe({},ye.Video,m.l.VIDEO),ye.LearningResource,m.l.RESOURCES),ye.Subtitle,m.l.SUBTITLES),ye.MixedMedia,m.l.MIXED_MEDIA),ve=oe(oe(oe(oe({},ye.Video,w.Q4.VIDEO_UPLOAD),ye.LearningResource,w.Q4.RESOURCE_UPLOAD),ye.Subtitle,w.Q4.SUBTITLE_UPLOAD),ye.MixedMedia,w.Q4.MIXED_MEDIA_UPLOAD),ge=function(e){function t(){return ie(this,t),le(this,t,arguments)}return pe(t,e),ue(t,[{key:"initialize",value:function(){this.uploadDataService=new he,this.progressViewModel=p.r.get("upload:progress:".concat(this.uploadType)),this.bindListeners()}},{key:"channelName",get:function(){return ve[this.uploadType]}},{key:"lang",get:function(){return"uploadShared.services"}},{key:"initUploader",value:function(e,t){if(!this.uploader){var n=4194304;e&&n<e&&(n=e),t&&n>t&&(n=t),this.uploader=new X({chunkingEnabled:!0,loggingEnabled:!0,chunkSize:n,maxFileSize:53687091200,acceptedFiles:this.getAcceptedFiles(),channelName:this.channelName})}}},{key:"bindListeners",value:function(){this.listenTo(this.channelName,"progress",this.onProgress),this.listenTo(this.channelName,v.S.UPLOAD_SUCCESS,this.onSuccess)}},{key:"onProgress",value:function(e,t,n){var r=this.collection.get(e);r&&(r.set({progress:t>100?100:t,totalUploaded:n}),this.setOverallProgress())}},{key:"isUploading",value:function(){return!!this.getCollection().length}},{key:"getCollection",value:function(){return this.collection||(this.collection=new d.Q.FE),this.collection}},{key:"setOverallProgress",value:function(){var e=this,t=0,n=0,r=this.getCollection();if(r.length){r.each(function(e){t+=e.get("totalUploaded")||0,n+=e.get("file").size||0});var o=t/n*100,i=o>=100,a=function(){e.progressViewModel.set({progress:i?100:o,done:i})};i?window.setTimeout(a,2e3):a()}else this.progressViewModel.set({progress:0})}},{key:"isValidFile",value:function(e){return X.isValidFile(e,this.getAcceptedFiles())}},{key:"addFiles",value:function(e,t){var n=this;i.any(e,function(e){return!n.isValidFile(e)})?d.Q.Ry.throw(new g.Z(f.T.getPhrase(this.lang,"invalidFileType"))):this.requestUploads(e,t)}},{key:"requestUploads",value:function(e,t){return n=this,r=void 0,i=void 0,a=ee().m(function n(){var r,i,a,u,c,l,s,f,p;return ee().w(function(n){for(;;)switch(n.n){case 0:r=this.isUploading(),i=this.getCollection(),a=ne(e),n.p=1,a.s();case 2:if((u=a.n()).done){n.n=5;break}return c=u.value,n.n=3,y.a.fetchAsync(this.options.store.dispatch,k(c,this.fileLifestyle));case 3:"minChunkSize"in(l=n.v)&&"maxChunkSize"in l&&this.initUploader(l.minChunkSize,l.maxChunkSize),c.cvUpload={uploadId:l.uploadId,ingestUrl:l.uploadUrl},this.uploader.addFile(c),s=c.name,this.uploadType===ye.Video&&(s=s.replace(/\.[^/.]+$/,"")),f=this.uploader.getId(c),i.add(Object.assign({id:f,file:c,name:s},this.getAdditionalFileInfo(c,l)),{at:i.length-1});case 4:n.n=2;break;case 5:n.n=7;break;case 6:n.p=6,p=n.v,a.e(p);case 7:return n.p=7,a.f(),n.f(7);case 8:t&&h.k.logUserAction({uploadCount:e.length},t),o.Radio.channel(this.channelName).trigger(v.S.FILES_ADDED,e,r);case 9:return n.a(2)}},n,this,[[1,6,7,8]])}),new(i||(i=Promise))(function(e,t){function o(e){try{c(a.next(e))}catch(e){t(e)}}function u(e){try{c(a.throw(e))}catch(e){t(e)}}function c(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i(function(e){e(n)})).then(o,u)}c((a=a.apply(n,r||[])).next())});var n,r,i,a}},{key:"addFile",value:function(e,t){this.addFiles([e],t)}},{key:"cancelUpload",value:function(e){var t=this,n=this.getCollection(),r=n.get(e);if(r){var i=r.get("file");this.uploader.removeFile(i),n.remove(r),this.uploadDataService.cancelUpload(i.cvUpload.uploadId,i.cvUpload.ingestUrl,function(){h.k.logUserAction(r.toJSON(),{entity:b.py.Video,actionType:b.Vw.Upload,workflowPhase:b.eu.Discard,descriptor:b.yh.Single,location:b.LZ.MyUploads}),o.Radio.channel(t.channelName).trigger(v.S.UPLOAD_CANCELLED)}),this.setOverallProgress()}}},{key:"onSuccess",value:function(e,t){var n=this.uploader.getId(e),r=this.getCollection().get(n);r.set("fileInfo",t),h.k.logUserAction({id:e.cvUpload.uploadId},{entity:b.py.Video,actionType:b.Vw.Upload,workflowPhase:b.eu.Complete,descriptor:b.yh.Single,location:b.LZ.VideoUpload}),o.Radio.channel(this.channelName).trigger(v.S.UPLOAD_COMPLETE,r)}},{key:"cancelAllUploads",value:function(){var e=this,t=this.getCollection().map(function(e){return e.get("id")});i.each(t,function(t){return e.cancelUpload(t)})}},{key:"getUpload",value:function(e){var t=this.uploader.getId(e);return this.getCollection().get(t)}},{key:"getAcceptedFiles",value:function(){return be[this.uploadType]}},{key:"getAdditionalFileInfo",value:function(e,t){return{}}}])}(d.Q.t6),me=function(e){function t(){return ie(this,t),le(this,t,arguments)}return pe(t,e),ue(t,[{key:"uploadType",get:function(){return ye.Video}},{key:"name",get:function(){return O.D.VideoUpload}},{key:"fileLifestyle",get:function(){return r.Temporary}}])}(ge),we=function(e){function t(){return ie(this,t),le(this,t,arguments)}return pe(t,e),ue(t,[{key:"uploadType",get:function(){return ye.Subtitle}},{key:"name",get:function(){return O.D.SubtitleUpload}},{key:"fileLifestyle",get:function(){return r.Permanent}}])}(ge),Oe=function(e){function t(){return ie(this,t),le(this,t,arguments)}return pe(t,e),ue(t,[{key:"uploadType",get:function(){return ye.LearningResource}},{key:"name",get:function(){return O.D.ResourceUpload}},{key:"fileLifestyle",get:function(){return r.Permanent}}])}(ge),Se=function(e){function t(){return ie(this,t),le(this,t,arguments)}return pe(t,e),ue(t,[{key:"uploadType",get:function(){return ye.MixedMedia}},{key:"name",get:function(){return O.D.MixedMediaUpload}},{key:"fileLifestyle",get:function(){return r.Temporary}}])}(ge)},3836:(e,t,n)=>{n.r(t),n.d(t,{VideoUploadService:()=>U});var r,o=n(43823),i=n(79976),a=n(60139),u=n(71365),c=n(23481),l=n(29555),s=n(91938);!function(e){e[e.Upload=1]="Upload",e[e.Tv=2]="Tv"}(r||(r={}));var f,p,d=n(65728);!function(e){e[e.ExternalOnly=0]="ExternalOnly",e[e.EmbeddedOnly=1]="EmbeddedOnly"}(f||(f={})),function(e){e[e.IosApp=1]="IosApp",e[e.AndroidApp=2]="AndroidApp",e[e.WinApp=3]="WinApp",e[e.LibraryPublisher=4]="LibraryPublisher",e[e.ExchangeClient=5]="ExchangeClient",e[e.Online=6]="Online",e[e.Tinder=7]="Tinder",e[e.Cloud247=8]="Cloud247",e[e.Livestream=9]="Livestream",e[e.Curator=10]="Curator",e[e.LibraryEditor=11]="LibraryEditor",e[e.Lite=12]="Lite"}(p||(p={}));var y=n(75795),h=n(14070),b=n(97291),v=n(57322),g=n(16800);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function w(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,O(r.key),r)}}function O(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function S(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(S=function(){return!!e})()}function P(e,t,n,r){var o=k(T(1&r?e.prototype:e),t,n);return 2&r&&"function"==typeof o?function(e){return o.apply(n,e)}:o}function k(){return k="undefined"!=typeof Reflect&&Reflect.get?Reflect.get.bind():function(e,t,n){var r=function(e,t){for(;!{}.hasOwnProperty.call(e,t)&&null!==(e=T(e)););return e}(e,t);if(r){var o=Object.getOwnPropertyDescriptor(r,t);return o.get?o.get.call(arguments.length<3?e:n):o.value}},k.apply(null,arguments)}function T(e){return T=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},T(e)}function j(e,t){return j=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},j(e,t)}var E=c.T.encloseNamespace("upload.services"),U=function(e){function t(e){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=T(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,S()?Reflect.construct(t,n||[],T(e).constructor):t.apply(e,n))}(this,t,[e])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&j(e,t)}(t,e),n=t,(c=[{key:"initialize",value:function(){P(t,"initialize",this,3)([]),this.videoUploadDataService=u.u.getInstance(v.O.VideoUpload,this),this.pendingItemsService=u.u.getInstance(v.K.PendingItems,this),this.userDataService=u.u.getInstance(v.O.FlightUser,this),this.alertService=u.u.getInstance(i.P.ALERT,this),this.listenTo(this.channelName,l.S.FILES_ADDED,this.onUploadStart),this.listenTo(this.channelName,l.S.UPLOAD_COMPLETE,this.unlockNav),this.listenTo(this.channelName,l.S.UPLOAD_CANCELLED,this.unlockNav)}},{key:"onUploadStart",value:function(e){var t={type:a.NK.Success,heading:E("startUploadAlertHeading"),message:1===e.length?E("startUploadSingleAlertBody",{videoName:e[0].name}):E("startUploadMultipleAlertBody",{uploadCount:e.length})},n=y.O.getCurrentContext().appLink;!!g.Y.getMyVideosAppLinks().find(function(e){return n.application===e.application&&n.action===e.action})||(t.appLinkText=E("startUploadAlertAppLinkText",{smartCount:e.length}),t.appLink={application:b.O.MY_VIDEOS,action:h.e.MyVideos.MY_VIDEOS},t.appLinkClassName="info-link"),this.alertService.createAlert(t)}},{key:"unlockNav",value:function(){this.getCollection().some(function(e){return e.get("progress")<100})||o.Radio.channel(this.channelName).trigger(l.S.UNLOCK_NAV)}},{key:"completeUpload",value:function(e,t){var n=this;e.set("sending",!0),this.userDataService.getCurrentUser(function(o){n.userDataService.getCustomerSettings(o,function(i){n.userDataService.getWorkspace(function(a){n.videoUploadDataService.completeVideoUpload({id:e.get("id"),userId:o.id,customerId:o.customerId,libraryId:a.id,categoryId:e.get("categoryId")||null,pendingProcessOrigin:r.Upload,origin:p.Lite,fileId:t.id,subtitleOptions:{subtitleExtractOptions:f.EmbeddedOnly},video:{name:e.get("name"),description:e.get("description")},autoCaption:!!i[d.E.AutoCaptioning].value},function(t){e.set("pendingProcessId",t.pendingProcessId),n.pendingItemsService.forceFetchPendingItems({resetTimeout:!0})})})})})}},{key:"onSuccess",value:function(e,n){var r=this;P(t,"onSuccess",this,3)([e,n]);var o=this.getUpload(e);o.get("editingMetadata")?this.listenToOnce(o,"change:editingMetadata",function(){r.completeUpload(o,n)}):this.completeUpload(o,n)}},{key:"getAdditionalFileInfo",value:function(e,t){var n=y.O.getCurrentRoute().appLink;return n.application!==b.O.MY_VIDEOS||n.action!==h.e.MyVideos.MY_VIDEOS_FOLDER?{}:{categoryId:+n.args[0]}}}])&&w(n.prototype,c),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,c}(s.BaseVideoUploadService)}}]);
|
|
3
|
+
//# sourceMappingURL=3836-6dddb5dce8-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/3836-6dddb5dce8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/upload/errors/file-type/FileTypeError.ts","file:///app/packages/libs/shared/src/apps/upload/enums/FileLifestyle.ts","file:///app/packages/libs/shared/src/apps/upload/flight-requests/UploadRequests.ts","file:///app/packages/libs/shared/src/apps/upload/errors/internet-connectivity/InternetConnectivityError.ts","file:///app/packages/libs/shared/src/apps/upload/errors/slow-internet/SlowInternetError.ts","file:///app/packages/libs/shared/src/apps/upload/services/DropzoneWrapper.ts","file:///app/packages/libs/shared/src/apps/upload/services/UploadService.ts","file:///app/packages/libs/shared/src/enums/PendingProcessOrigin.ts","file:///app/packages/libs/shared/src/enums/SubtitleExtractionOptions.ts","file:///app/packages/libs/shared/src/enums/VideoOrigin.ts","file:///app/packages/projects/lite/src/apps/upload/services/VideoUploadService.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\n/**\n * TODO: Create a more useful message here.\n * Perhaps using the mime types listen on MDN\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Complete_list_of_MIME_types\n * or in the list of all the official mime types\n * https://www.iana.org/assignments/media-types/media-types.xhtml\n */\nexport class FileTypeError extends DialogError {\n constructor(message: string) {\n super(message);\n }\n\n // @ts-ignore\n public get name(): string {\n return 'FileTypeError';\n }\n\n // @ts-ignore\n public get lang(): string {\n return 'upload.fileType';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(this.lang, 'heading'),\n text: LanguageService.getPhrase(this.lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(this.lang, 'okay'),\n className: 'btn btn-dark',\n success: true\n }, {\n text: LanguageService.getPhrase(this.lang, 'close'),\n className: 'btn btn-link',\n close: true\n }]\n };\n }\n}","export enum FileLifestyle {\n Permanent = 0,\n Temporary = 1\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { FileLifestyle } from '../enums/FileLifestyle';\n\nexport const UploadRequests = {\n requestUpload(file: File, fileLifestyle: FileLifestyle): Flight.Request {\n const splitName = file.name.split('.');\n\n const dateExpires = fileLifestyle === FileLifestyle.Permanent\n ? null\n : DateHelper.add(new Date(), 7, 'days').toISOString();\n\n const data = {\n name: splitName.join('.'),\n extension: splitName.length > 1 ? splitName.pop() : '',\n size: file.size,\n lifestyle: fileLifestyle,\n dateExpires,\n contentType: 'multipart/form-data',\n chunkUploadEnabled: true\n };\n\n return {\n url: `{gateway}/v1/files/upload`,\n key: 'upload:file',\n type: HttpVerbs.POST,\n data\n };\n }\n};","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst lang = 'upload.internetConnectivityError';\n\nexport class InternetConnectivityError extends DialogError {\n constructor() {\n super(LanguageService.getPhrase(lang, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'InternetConnectivityError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(lang, 'heading'),\n text: LanguageService.getPhrase(lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(lang, 'okay'),\n className: 'btn btn-outline-dark',\n success: true\n }]\n };\n }\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DialogError } from 'libs/shared/errors/primitives/DialogError';\nimport { DialogOptions } from 'libs/shared/interfaces';\n\nconst lang = 'upload.slowInternetError';\n\nexport class SlowInternetError extends DialogError {\n constructor() {\n super(LanguageService.getPhrase(lang, 'title'));\n }\n\n // @ts-ignore\n public get name(): string {\n return 'SlowInternetError';\n }\n\n // @ts-ignore\n public get dialogOptions(): DialogOptions {\n return {\n title: LanguageService.getPhrase(lang, 'heading'),\n text: LanguageService.getPhrase(lang, 'body'),\n buttons: [{\n text: LanguageService.getPhrase(lang, 'okay'),\n className: 'btn btn-outline-dark',\n success: true\n }]\n };\n }\n}","import { ObjectHash, Radio } from 'backbone';\nimport Dropzone from 'dropzone';\nimport * as _ from 'underscore';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { InternetConnectivityError } from 'libs/shared/apps/upload/errors/internet-connectivity/InternetConnectivityError';\nimport { AlertError } from 'libs/shared/errors/primitives/AlertError';\n\nimport { UploadEventNames } from '../constants/UploadConstants';\nimport { SlowInternetError } from '../errors/slow-internet/SlowInternetError';\n\nexport interface UploadApiWrapperOptions extends Core.ServiceOptions {\n maxFileSize: number;\n chunkSize: number;\n chunkingEnabled: boolean;\n loggingEnabled: boolean;\n acceptedFiles: string;\n channelName: string;\n}\n\nexport interface UploadApiWrapper {\n addFile(file: File): void;\n destroy(): void;\n start(): void;\n getId(file: File): string;\n removeFile(file: File): void;\n}\n\nconst dropzoneEvents: string[] = [\n // 'uploadprogress', 'totaluploadprogress',\n // 'addedfile', 'removedfile', 'thumbnail', 'error', 'processing',\n // 'sending', 'success', 'complete', 'addedfile',\n // 'maxfilesreached', 'maxfilesexceeded', 'processingmultiple',\n // 'sendingmultiple', 'completemultiple', 'canceledmultiple',\n // 'reset', 'queuecomplete'\n];\n\nexport class DropzoneWrapper extends Core.Service implements UploadApiWrapper {\n private dropzone: Dropzone;\n public options: UploadApiWrapperOptions;\n\n private slowInternetTimeout: {[uploadId: string]: number} = {};\n private showSlowInternetTimeout: boolean = true;\n\n // @ts-ignore\n public get name(): string {\n return 'DropzoneWrapper';\n }\n\n constructor(options: UploadApiWrapperOptions) {\n super(options);\n }\n\n public initialize(options: UploadApiWrapperOptions): void {\n const { loggingEnabled } = this.options;\n\n const uploadChannel = Radio.channel(options.channelName);\n\n /**\n * Thought I wouldn't see this in any of our TS\n * Guess I was wrong - sha\n */\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n\n this.dropzone = new Dropzone(document.createElement('div'), {\n url: ((files: Dropzone.DropzoneFile[]) => {\n const file = files[0] as any;\n\n const { ingestUrl } = file.cvUpload;\n\n return ingestUrl;\n }) as any,\n\n chunking: this.options.chunkingEnabled,\n chunkSize: this.options.chunkSize,\n forceChunking: true,\n autoProcessQueue: true,\n maxFilesize: this.options.maxFileSize,\n acceptedFiles: this.options.acceptedFiles,\n paramName: 'content',\n timeout: 180000, // 3 mins in milliseconds\n\n init: function (): void {\n if (!loggingEnabled)\n return;\n\n _.each(dropzoneEvents, (eventName: string) => {\n this.on(eventName, (...args: any[]) => {\n const file = args[0] instanceof File ? args[0].name : args[0];\n console.info(eventName, file, args);\n });\n });\n\n this.on('uploadprogress', (file: File, percentage: number, totalBytes: number) => {\n const progress = totalBytes / file.size * 100;\n uploadChannel.trigger('progress', self.getId(file), progress, totalBytes);\n });\n\n this.on('success', (file: File) => {\n /**\n * This is sort of a hack. It assumes the last chunk will be the last chunk that is uploaded\n * which may not necessarily be the case\n */\n const chunks = (file as any).upload.chunks;\n\n const lastChunk = _.last(chunks) as any;\n\n let xhr = lastChunk.xhr;\n\n if (!xhr)\n xhr = lastChunk.file.xhr;\n\n const response = JSON.parse(xhr.response);\n\n (file as any).cvUpload.fileId = response.id;\n\n uploadChannel.trigger(UploadEventNames.UPLOAD_SUCCESS, file, response);\n });\n\n this.on('error', (file: File, messageObj: ObjectHash, xhr: XMLHttpRequest) => {\n if (xhr && xhr.status === 0) {\n Core.ErrorHelper.throw(new InternetConnectivityError());\n return;\n }\n\n /**\n * Don't throw if the error was caused by canceling\n * the chunk upload. this will happen when the user cancels\n * an upload themselves.\n */\n if ((file as Dropzone.DropzoneFile).status !== 'canceled')\n Core.ErrorHelper.throw(\n new AlertError(LanguageService.getPhrase('upload.services', 'uploadError', {\n fileName: file.name,\n message: messageObj.message\n }))\n );\n });\n\n /**\n * We've increased the upload timeout from 30s to 3mins. This means that the upload\n * will not timeout with an upload speed as slow as 200Kbps. However if a single chunk takes\n * longer than 30s, which is an upload speed of 1Mbps. We'll show a dialog letting the user\n * know that their internet speed is very slow, and the upload may take quite some time.\n * - Sha\n */\n this.on('sending', (file: File) => {\n window.clearTimeout(self.slowInternetTimeout[(file as any).path]);\n\n if (!self.showSlowInternetTimeout)\n return;\n\n self.slowInternetTimeout[(file as any).path] = window.setTimeout(() => {\n if (self.showSlowInternetTimeout)\n Core.ErrorHelper.throw(new SlowInternetError());\n\n self.showSlowInternetTimeout = false;\n }, 30000); // 30s\n });\n\n /**\n * Complete will trigger both on successful uploads and on a cancelled upload.\n */\n this.on('complete', (file: File) => window.clearTimeout(self.slowInternetTimeout[(file as any).path]));\n },\n\n params: (files: Dropzone.DropzoneFile[], xhr: XMLHttpRequest, chunk: any) => {\n if (!chunk)\n return;\n\n return {\n chunk_index: chunk.index,\n upload_length: chunk.file.size\n };\n },\n\n /**\n * These methods are here to disable Dropzone's UI related features\n */\n addedfile: () => {},\n thumbnail: () => {},\n uploadprogress: () => {}\n });\n }\n\n public getId(file: File): string {\n return (file as any).upload.uuid;\n }\n\n public addFile(file: Dropzone.DropzoneFile): void {\n this.dropzone.addFile(file);\n }\n\n public removeFile(file: Dropzone.DropzoneFile): void {\n this.dropzone.removeFile(file);\n }\n\n public start(): void {\n this.dropzone.processQueue();\n }\n\n public destroy(): void {\n this.dropzone.destroy();\n }\n\n public static isValidFile(file: File, acceptedFiles: string): boolean {\n return Dropzone.isValidFile(file, acceptedFiles);\n }\n}","import { Radio } from 'backbone';\nimport { Store } from 'redux';\nimport * as _ from 'underscore';\n\nimport { Caches } from 'libs/common/backbone/constants/Caches';\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { DataProviders } from 'libs/common/backbone/constants/DataProviders';\nimport { BaseDataService } from 'libs/common/backbone/services/BaseDataService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ViewModelService } from 'libs/common/backbone/services/ViewModelService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, OperationDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { FileLifestyle } from 'libs/shared/apps/upload/enums/FileLifestyle';\nimport { FileTypeError } from 'libs/shared/apps/upload/errors/file-type/FileTypeError';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\n\nimport { UploadRequests } from '../flight-requests/UploadRequests';\n\nimport { DropzoneWrapper, UploadApiWrapper } from './DropzoneWrapper';\n\ntype FileUploadRequestResponse = {\n maxChunkSize: number;\n minChunkSize: number;\n uploadExpireDate: string;\n uploadId: string;\n uploadUrl: string;\n}\n\n/**\n * This data service is locally private and is only\n * used by the UploadService to request/cancel uploads from\n * FileApi\n */\nclass UploadDataService extends BaseDataService {\n constructor() {\n super({\n dataProvider: InstanceManager.getInstance(DataProviders.Ajax),\n cache: InstanceManager.getInstance(Caches.Fifo),\n alertService: InstanceManager.getInstance(CommonServices.ALERT)\n });\n }\n\n private incrementingUploadId: number = 0;\n\n // @ts-ignore\n public get name(): string {\n /**\n * This string is not in DataServices because this data service is private.\n */\n return 'UploadDataService';\n }\n\n /**\n * This is not sitting in RadioChannels\n * because it is only used in this file\n */\n // @ts-ignore\n public get channelName(): string {\n return 'private:upload:data:service';\n }\n\n public requestUploads(\n resource: string,\n files: File[],\n fileLifestyle: FileLifestyle,\n fileCallback: (file: File, response: any) => void,\n callback: () => void\n ): void {\n const chain = this.chain();\n\n _.each(files, file => {\n this.incrementingUploadId++;\n\n chain.create({\n resource,\n eventPrefix: `request:upload:${this.incrementingUploadId}`,\n data: this.getFileUploadRequest(file, fileLifestyle),\n callback: (response: any) => {\n fileCallback(file, response);\n },\n errorHandler: this.alertService.error(`Something went wrong while we were uploading your video. Please try again.`)\n });\n });\n\n chain.func(() => {\n callback();\n }).run();\n }\n\n public cancelUpload(uploadId: string, ingestUrl: string, callback?: (response: any) => void): void {\n this.create({\n resource: '/api/upload/cancel',\n eventPrefix: 'cancel:upload',\n data: {\n uploadId, ingestUrl\n },\n callback\n });\n }\n\n private getFileUploadRequest(file: File, fileLifestyle: FileLifestyle): HashObject {\n const splitName = file.name.split('.');\n\n /**\n * TODO: We may need to set the file permanence in file api to\n * permanent for resources and subtitles\n * Check what Prad/Cam say in\n * https://app.asana.com/0/720933954350984/735809491718142\n */\n return {\n name: splitName.join('.'),\n extension: splitName.length > 1 ? splitName.pop() : '',\n fileSize: file.size,\n fileLifestyle\n };\n }\n\n public onDestroy(): void {\n InstanceManager\n .releaseInstance(DataProviders.Ajax)\n .releaseInstance(Caches.Fifo);\n }\n}\n\n\nexport interface UploadItem extends Core.Model {\n file: File;\n name: string;\n progress: number;\n}\n\nexport enum UploadType {\n Video,\n LearningResource,\n Subtitle,\n MixedMedia\n}\n\nconst AcceptedFiles = {\n [UploadType.Video]: FileExtensions.VIDEO,\n [UploadType.LearningResource]: FileExtensions.RESOURCES,\n [UploadType.Subtitle]: FileExtensions.SUBTITLES,\n [UploadType.MixedMedia]: FileExtensions.MIXED_MEDIA\n};\n\nconst ChannelNames = {\n [UploadType.Video]: SharedServiceChannels.VIDEO_UPLOAD,\n [UploadType.LearningResource]: SharedServiceChannels.RESOURCE_UPLOAD,\n [UploadType.Subtitle]: SharedServiceChannels.SUBTITLE_UPLOAD,\n [UploadType.MixedMedia]: SharedServiceChannels.MIXED_MEDIA_UPLOAD\n};\n\nconst CHUNK_SIZE = 1024 * 1024 * 4; // 4mb\nconst MAX_FILE_SIZE = 1024 * 1024 * 1024 * 50; // 50gb\n\nexport interface UploadServiceOptions {\n store?: Store;\n}\n\nclass UploadService extends Core.Service {\n protected options: UploadServiceOptions;\n protected uploadType: UploadType;\n protected fileLifestyle: FileLifestyle;\n\n protected uploader: UploadApiWrapper;\n\n private progressViewModel: Core.Model;\n\n private uploadDataService: UploadDataService;\n\n private collection: Core.Collection<UploadItem>;\n\n public initialize(): void {\n this.uploadDataService = new UploadDataService();\n\n this.progressViewModel = ViewModelService.get(`upload:progress:${this.uploadType}`);\n\n this.bindListeners();\n }\n\n // @ts-ignore\n public get channelName(): string {\n return ChannelNames[this.uploadType];\n }\n\n // @ts-ignore\n public get lang(): string {\n return 'uploadShared.services';\n }\n\n /**\n * Dropzone is initialized once after the first upload is requested and it's chunk size\n * is set for the rest of the uploads. If we happen to have multiple ingest\n * servers that have different chunk max / min sizes, this may voilate those\n * sizes.\n */\n private initUploader(minChunkSize: number, maxChunkSize: number): void {\n if (this.uploader)\n return;\n\n let chunkSize = CHUNK_SIZE;\n\n if (minChunkSize && chunkSize < minChunkSize)\n chunkSize = minChunkSize;\n\n if (maxChunkSize && chunkSize > maxChunkSize)\n chunkSize = maxChunkSize;\n\n this.uploader = new DropzoneWrapper({\n chunkingEnabled: true,\n loggingEnabled: true,\n chunkSize,\n maxFileSize: MAX_FILE_SIZE,\n acceptedFiles: this.getAcceptedFiles(),\n channelName: this.channelName\n });\n }\n\n private bindListeners(): void {\n this.listenTo(this.channelName, 'progress', this.onProgress);\n\n this.listenTo(this.channelName, UploadEventNames.UPLOAD_SUCCESS, this.onSuccess);\n }\n\n private onProgress(id: string, percentage: number, totalUploaded: number): void {\n const model = this.collection.get(id);\n\n if (!model)\n return;\n\n model.set({\n progress: percentage > 100 ? 100 : percentage,\n totalUploaded\n });\n\n this.setOverallProgress();\n }\n\n public isUploading(): boolean {\n return !!this.getCollection().length;\n }\n\n public getCollection(): Core.Collection<UploadItem> {\n if (this.collection)\n return this.collection;\n\n this.collection = new Core.Collection<UploadItem>();\n return this.collection;\n }\n\n public setOverallProgress(): void {\n let totalUploaded = 0;\n let totalFileSize = 0;\n\n const collection = this.getCollection();\n\n if (!collection.length) {\n this.progressViewModel.set({ progress: 0 });\n return;\n }\n\n collection.each((model: Core.Model) => {\n totalUploaded += model.get('totalUploaded') || 0;\n totalFileSize += model.get('file').size || 0;\n });\n\n const percentage = totalUploaded / totalFileSize * 100;\n\n const done = percentage >= 100;\n\n const updateProgress = () => {\n this.progressViewModel.set({\n progress: done ? 100 : percentage,\n done\n });\n };\n\n if (!done) {\n updateProgress();\n return;\n }\n \n /**\n * The ingest backend takes a short while after an upload is done\n * before the complete endpoint will actually response successfully.\n * So this prevents the eager beavers from clicking \"finish\" immediately\n * and having their entire upload session break.\n * - Sha\n */\n window.setTimeout(updateProgress, 2000);\n }\n\n public isValidFile(file: File): boolean {\n return DropzoneWrapper.isValidFile(file, this.getAcceptedFiles());\n }\n\n /**\n * Request uploads from fileApi and starts uploading.\n * @param files Array of browser File objects\n * @returns Returns false if any of the files did not match the accepted file list.\n */\n public addFiles(files: File[], analyticsOptions?: AnalyticsOptions): void {\n if (_.any(files, file => !this.isValidFile(file))) {\n Core.ErrorHelper.throw(\n new FileTypeError(LanguageService.getPhrase(this.lang, 'invalidFileType'))\n );\n return;\n }\n\n this.requestUploads(files, analyticsOptions);\n }\n\n private async requestUploads(files: File[], analyticsOptions?: AnalyticsOptions): Promise<void> {\n const wasUploading = this.isUploading();\n\n const collection = this.getCollection();\n\n for (const file of files) {\n const response = await Flight.fetchAsync<FileUploadRequestResponse>(\n this.options.store.dispatch,\n UploadRequests.requestUpload(file, this.fileLifestyle)\n );\n\n if ('minChunkSize' in response && 'maxChunkSize' in response) {\n this.initUploader(response.minChunkSize, response.maxChunkSize);\n }\n\n (file as any).cvUpload = {\n uploadId: response.uploadId,\n ingestUrl: response.uploadUrl\n };\n\n this.uploader.addFile(file);\n\n let fileName = file.name;\n\n // Remove file extension from filename if video\n if (this.uploadType === UploadType.Video)\n fileName = fileName.replace(/\\.[^/.]+$/, '');\n\n const id = this.uploader.getId(file);\n collection.add({\n id,\n file,\n name: fileName,\n ...this.getAdditionalFileInfo(file, response)\n }, { at: collection.length - 1 });\n }\n\n if (analyticsOptions) {\n AnalyticsHelper.logUserAction({\n uploadCount: files.length\n }, analyticsOptions);\n }\n\n const channel = Radio.channel(this.channelName);\n channel.trigger(UploadEventNames.FILES_ADDED, files, wasUploading);\n }\n\n public addFile(file: File, analyticsOptions: AnalyticsOptions): void {\n this.addFiles([file], analyticsOptions);\n }\n\n public cancelUpload(id: string): void {\n const collection = this.getCollection();\n const model = collection.get(id);\n\n if (!model)\n return;\n\n const file = model.get('file') as any;\n\n this.uploader.removeFile(file);\n collection.remove(model);\n\n this.uploadDataService.cancelUpload(file.cvUpload.uploadId, file.cvUpload.ingestUrl, () => {\n AnalyticsHelper.logUserAction(model.toJSON(), {\n entity: EntityType.Video,\n actionType: UserAction.Upload,\n workflowPhase: WorkflowPhase.Discard,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.MyUploads\n });\n\n Radio.channel(this.channelName).trigger(UploadEventNames.UPLOAD_CANCELLED);\n });\n\n this.setOverallProgress();\n }\n\n protected onSuccess(file: File, response: any): void {\n const fileId = this.uploader.getId(file);\n\n const upload = this.getCollection().get(fileId);\n\n upload.set('fileInfo', response);\n\n AnalyticsHelper.logUserAction({\n id: (file as any).cvUpload.uploadId\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Upload,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: OperationDescriptor.Single,\n location: LocationContext.VideoUpload\n });\n\n const channel = Radio.channel(this.channelName);\n channel.trigger(UploadEventNames.UPLOAD_COMPLETE, upload);\n }\n\n public cancelAllUploads(): void {\n /**\n * We're using model ids and _.each\n * instead of collection.each because this.cancelUpload\n * removes items from the collection which breaks collection.each\n */\n const models = this.getCollection().map(m => m.get('id'));\n _.each(models, m => this.cancelUpload(m));\n }\n\n public getUpload(file: File): Core.Model {\n const fileId = this.uploader.getId(file);\n\n return this.getCollection().get(fileId);\n }\n\n protected getAcceptedFiles(): string {\n return AcceptedFiles[this.uploadType];\n }\n\n // eslint-disable-next-line\n protected getAdditionalFileInfo(file: File, response: any): HashObject {\n return {};\n }\n}\n\nexport class BaseVideoUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.Video;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.VideoUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Temporary;\n }\n}\n\nexport class SubtitleUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.Subtitle;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.SubtitleUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Permanent;\n }\n}\n\nexport class LearningResourceUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.LearningResource;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.ResourceUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Permanent;\n }\n}\n\nexport class MixedMediaUploadService extends UploadService {\n // @ts-ignore\n protected get uploadType(): UploadType {\n return UploadType.MixedMedia;\n }\n\n // @ts-ignore\n public get name(): string {\n return SharedServices.MixedMediaUpload;\n }\n\n // @ts-ignore\n public get fileLifestyle(): FileLifestyle {\n return FileLifestyle.Temporary;\n }\n}","export enum PendingProcessOrigin {\n Upload = 1,\n Tv = 2\n}","export enum SubtitleExtractionOptions {\n ExternalOnly = 0,\n EmbeddedOnly = 1\n}","export enum VideoOrigin {\n IosApp = 1,\n AndroidApp = 2,\n WinApp = 3,\n LibraryPublisher = 4,\n ExchangeClient = 5,\n Online = 6,\n Tinder = 7,\n Cloud247 = 8,\n Livestream = 9,\n Curator = 10,\n LibraryEditor = 11,\n Lite = 12\n}","import { Radio } from 'backbone';\n\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AlertType, BaseAlert, BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\nimport { InstanceManager } from 'libs/common/backbone/services/InstanceManager';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { BasePendingItemsService } from 'libs/shared/apps/upload/services/BasePendingItemsService';\nimport { BaseVideoUploadService, UploadServiceOptions } from 'libs/shared/apps/upload/services/UploadService';\nimport { PendingProcessOrigin } from 'libs/shared/enums/PendingProcessOrigin';\nimport { SettingName, SettingsLookup } from 'libs/shared/enums/SettingName';\nimport { SubtitleExtractionOptions } from 'libs/shared/enums/SubtitleExtractionOptions';\nimport { VideoOrigin } from 'libs/shared/enums/VideoOrigin';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { DataServices, Services } from 'shared/constants/Services';\nimport { FlightUserDataService } from 'shared/services/FlightUserDataService';\nimport { LeftNavHelper } from 'shared/utils/LeftNavHelper';\n\nimport { FlightVideoUploadDataService } from './FlightVideoUploadDataService';\n\nconst getPhrase = LanguageService.encloseNamespace('upload.services');\n\ninterface VideoUploadServiceOptions extends UploadServiceOptions {\n}\n\nexport class VideoUploadService extends BaseVideoUploadService {\n private videoUploadDataService: FlightVideoUploadDataService;\n private pendingItemsService: BasePendingItemsService;\n private userDataService: FlightUserDataService;\n private alertService: BaseAlertService;\n public options: VideoUploadServiceOptions;\n\n constructor(options: VideoUploadServiceOptions) {\n super(options);\n }\n\n public initialize(): void {\n super.initialize();\n\n this.videoUploadDataService = InstanceManager.getInstance(DataServices.VideoUpload, this);\n this.pendingItemsService = InstanceManager.getInstance(Services.PendingItems, this);\n this.userDataService = InstanceManager.getInstance(DataServices.FlightUser, this);\n this.alertService = InstanceManager.getInstance(CommonServices.ALERT, this);\n\n this.listenTo(this.channelName, UploadEventNames.FILES_ADDED, this.onUploadStart);\n this.listenTo(this.channelName, UploadEventNames.UPLOAD_COMPLETE, this.unlockNav);\n this.listenTo(this.channelName, UploadEventNames.UPLOAD_CANCELLED, this.unlockNav);\n }\n\n private onUploadStart(files: FileList): void {\n const alert: BaseAlert = {\n type: AlertType.Success,\n heading: getPhrase('startUploadAlertHeading'),\n message: files.length === 1\n ? getPhrase('startUploadSingleAlertBody', { videoName: files[0].name })\n : getPhrase('startUploadMultipleAlertBody', { uploadCount: files.length })\n };\n\n const { appLink: currentAppLink } = ContextService.getCurrentContext();\n\n const uploadAppLinks = LeftNavHelper.getMyVideosAppLinks();\n const inUploadApp = !!uploadAppLinks.find(a => (\n currentAppLink.application === a.application && currentAppLink.action === a.action\n ));\n\n // If the user is not on the \"My Videos\" page, add an applink to the alert\n if (!inUploadApp) {\n alert.appLinkText = getPhrase('startUploadAlertAppLinkText', { smartCount: files.length });\n alert.appLink = {\n application: AppChannels.MY_VIDEOS,\n action: Actions.MyVideos.MY_VIDEOS\n };\n alert.appLinkClassName = 'info-link';\n }\n\n this.alertService.createAlert(alert);\n }\n\n private unlockNav(): void {\n const collection = this.getCollection();\n\n if (collection.some(upload => upload.get('progress') < 100))\n return;\n\n Radio.channel(this.channelName).trigger(UploadEventNames.UNLOCK_NAV);\n }\n\n private completeUpload(upload: Core.Model, response: any): void {\n upload.set('sending', true);\n\n this.userDataService.getCurrentUser((user: CurrentUser) => {\n this.userDataService.getCustomerSettings(user, (settings: SettingsLookup) => {\n this.userDataService.getWorkspace((workspace: HashObject) => {\n this.videoUploadDataService.completeVideoUpload({\n id: upload.get('id'),\n userId: user.id,\n customerId: user.customerId,\n libraryId: workspace.id,\n categoryId: upload.get('categoryId') || null,\n pendingProcessOrigin: PendingProcessOrigin.Upload,\n origin: VideoOrigin.Lite,\n fileId: response.id,\n subtitleOptions: {\n subtitleExtractOptions: SubtitleExtractionOptions.EmbeddedOnly\n },\n video: { name: upload.get('name'), description: upload.get('description') },\n autoCaption: !!settings[SettingName.AutoCaptioning].value\n }, (item: any) => {\n upload.set('pendingProcessId', item.pendingProcessId);\n this.pendingItemsService.forceFetchPendingItems({\n resetTimeout: true\n });\n });\n });\n });\n });\n }\n\n protected onSuccess(file: File, response: any): void {\n super.onSuccess(file, response);\n\n const upload = this.getUpload(file);\n\n /**\n * editingMetadata is set by the EditUploadView.\n * If it's set, we wait till the user is done editing the metadata before\n * we post the data\n */\n if (upload.get('editingMetadata')) {\n this.listenToOnce(upload, 'change:editingMetadata', () => {\n this.completeUpload(upload, response);\n });\n } else {\n this.completeUpload(upload, response);\n }\n }\n\n // eslint-disable-next-line\n protected getAdditionalFileInfo(file: File, response: any): HashObject {\n const { appLink } = ContextService.getCurrentRoute();\n\n if (appLink.application !== AppChannels.MY_VIDEOS || appLink.action !== Actions.MyVideos.MY_VIDEOS_FOLDER)\n return {};\n\n return {\n categoryId: +appLink.args[0]\n };\n }\n}\n"],"names":["FileTypeError","message","title","this","lang","text","buttons","className","success","close","FileLifestyle","UploadRequests","file","fileLifestyle","splitName","name","split","dateExpires","Permanent","DateHelper","Date","toISOString","data","join","extension","length","pop","size","lifestyle","contentType","chunkUploadEnabled","url","key","type","HttpVerbs","InternetConnectivityError","LanguageService","DialogError","SlowInternetError","dropzoneEvents","DropzoneWrapper","options","slowInternetTimeout","showSlowInternetTimeout","loggingEnabled","uploadChannel","Radio","channelName","self","dropzone","document","createElement","files","cvUpload","ingestUrl","chunking","chunkingEnabled","chunkSize","forceChunking","autoProcessQueue","maxFilesize","maxFileSize","acceptedFiles","paramName","timeout","init","eventName","on","args","File","console","info","percentage","totalBytes","progress","trigger","getId","chunks","upload","lastChunk","xhr","response","JSON","parse","fileId","id","messageObj","status","AlertError","fileName","window","clearTimeout","path","setTimeout","params","chunk","chunk_index","index","upload_length","addedfile","thumbnail","uploadprogress","uuid","addFile","removeFile","processQueue","destroy","UploadType","UploadDataService","dataProvider","InstanceManager","DataProviders","cache","Caches","alertService","CommonServices","incrementingUploadId","resource","fileCallback","callback","chain","create","eventPrefix","getFileUploadRequest","errorHandler","error","func","run","uploadId","fileSize","releaseInstance","BaseDataService","B","AcceptedFiles","Video","LearningResource","Subtitle","MixedMedia","ChannelNames","UploadService","uploadDataService","progressViewModel","ViewModelService","uploadType","bindListeners","minChunkSize","maxChunkSize","uploader","getAcceptedFiles","listenTo","onProgress","onSuccess","totalUploaded","model","collection","get","set","setOverallProgress","getCollection","totalFileSize","each","done","updateProgress","isValidFile","analyticsOptions","requestUploads","wasUploading","isUploading","store","dispatch","initUploader","uploadUrl","replace","add","getAdditionalFileInfo","at","AnalyticsHelper","uploadCount","addFiles","remove","cancelUpload","toJSON","entity","actionType","workflowPhase","descriptor","location","models","map","m","BaseVideoUploadService","SharedServices","Temporary","SubtitleUploadService","LearningResourceUploadService","MixedMediaUploadService","PendingProcessOrigin","SubtitleExtractionOptions","VideoOrigin","getPhrase","VideoUploadService","videoUploadDataService","pendingItemsService","Services","userDataService","onUploadStart","unlockNav","alert","heading","videoName","currentAppLink","ContextService","appLink","LeftNavHelper","find","a","application","action","appLinkText","smartCount","appLinkClassName","createAlert","some","getCurrentUser","user","getCustomerSettings","settings","getWorkspace","workspace","completeVideoUpload","userId","customerId","libraryId","categoryId","pendingProcessOrigin","Upload","origin","Lite","subtitleOptions","subtitleExtractOptions","EmbeddedOnly","video","description","autoCaption","SettingName","value","item","pendingProcessId","forceFetchPendingItems","resetTimeout","getUpload","listenToOnce","completeUpload"],"sourceRoot":""}
|