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

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clickview/lite",
3
- "version": "0.51.4-rc.0",
3
+ "version": "0.51.4-rc.2",
4
4
  "description": "ClickView Lite",
5
5
  "main": "dist/scripts/bundle.js",
6
6
  "types": "dist/projects/lite/src/index.d.ts",
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/3188-afaf7ead55-lite.chunk.js","mappings":"qTACA,SAAgB,UAAY,QAAQ,OAAS,QAAQ,KAAO,QAAQ,KAAO,QAAQ,YAAc,QAAQ,SAAW,S,sGCsBpH,IAAMA,EAAY,sBACZC,EAAYC,EAAA,mBAAiCF,GAQnD,SAASG,EAASC,GAChB,OACE,sBAAIC,UAAS,0BAAqB,aAChC,uBACEA,UAAS,UAAK,YAAgB,qCAC9BC,MAAO,CAAEC,gBAAiB,QAAF,OAAUH,EAAMI,SAAQ,SAElD,uBAAKH,UAAS,+FAA0F,gBACtG,4BACE,wBAAMA,UAAW,UAAgBD,EAAMK,SAEzC,4BACGL,EAAMM,OAKjB,CAMM,SAAUC,EAAkBP,GAChC,I,IAAqD,G,EAArB,YAAe,G,EAAM,E,o4BAA7CQ,EAAO,KAAEC,EAAU,KAErBC,EAAS,kBAA6BC,EAAA,YAEtCC,EAAiB,kBAAqBC,EAAA,WAAwBb,EAAMc,YAAYC,cAEtF,aAAgB,WACTH,EAAeI,UAGpB,aAAuB,IAAIC,EAAA,EAC7B,GAAG,CAACL,EAAeI,WAEnB,IAAQE,GAAqB,EAAAC,EAAA,KAArBD,iBAER,SAASE,EAAWC,GAClB,GAAKA,IAAQC,EAAA,UAAqBD,GAAlC,CAMA,MAKIrB,EAAMc,YAJRC,EAAW,EAAXA,YACAQ,EAAO,EAAPA,QACAC,EAAY,EAAZA,aACAC,EAAS,EAATA,UAGFhB,GAAW,GACXS,EAAiBG,EAAM,CACrBN,YAAAA,EACAQ,QAAAA,EACAC,aAAAA,EACAC,UAAAA,GAjBM,CAmBV,CAUA,OAAKf,EAAOgB,aAIV,uBAAKzB,UAAU,2EACb,uBAAKA,UAAU,eACb,uBAAKA,UAAS,UAAK,OAAW,yBAC5B,gBAAC0B,EAAA,GAAa,OAEhB,sBAAI1B,UAAS,iCAA4B,SACvC,gBAACF,EAAQ,CAACM,OAAQ,EAAGC,KAAMT,EAAU,SAAUO,SAAUwB,EAAA,wBACzD,gBAAC7B,EAAQ,CAACM,OAAQ,EAAGC,KAAMT,EAAU,SAAUO,SAAUwB,EAAA,wBACzD,gBAAC7B,EAAQ,CAACM,OAAQ,EAAGC,KAAMT,EAAU,SAAUO,SAAUwB,EAAA,yBAE3D,gBAACC,EAAA,EAAa,CAACC,QAAQ,OAAO7B,UAAU,cAAc8B,QAtB5D,WACEC,EAAA,yBAAuC,CACrCC,UAAWvB,EAAOW,KAAKY,UACvBnB,YAAad,EAAMc,YACnBM,WAAAA,GAEJ,EAgB8Ec,YAAa1B,GACnF,gBAAC2B,EAAA,EAAI,CAACvC,UAAWA,EAAWwC,OAAO,oBAdlC,gCAmBX,C","sources":["file:///app/packages/projects/lite/src/apps/embed/views/plugin-landing/plugin-landing.scss","file:///app/packages/projects/lite/src/apps/embed/views/plugin-landing/PluginLandingView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"stepImage\":\"LJUvH\",\"number\":\"gIKGd\",\"logo\":\"Jr33K\",\"list\":\"RNSvU\",\"instruction\":\"dxSMz\",\"stepItem\":\"zC4Lo\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Config } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\n\nimport { InvalidPluginConsumerError } from 'apps/embed/errors/invalid-plugin-consumer/InvalidPluginConsumerError';\nimport { EmbedAuthHelper } from 'apps/embed/utils/EmbedAuthHelper';\nimport { PluginRequests } from 'apps/embed/utils/PluginRequests';\n\nimport styles from './plugin-landing.scss';\n\nconst namespace = 'embed.pluginLanding';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface StepItemProps {\n imageUrl: string;\n number: number;\n text: string;\n}\n\nfunction StepItem(props: StepItemProps): JSX.Element {\n return (\n <li className={`col-12 col-sm-4 ${styles.stepItem}`}>\n <div\n className={`${styles.stepImage} border rounded d-none d-sm-block`}\n style={{ backgroundImage: `url('${props.imageUrl}')` }}\n />\n <div className={`my-1 my-sm-3 ps-4 ps-sm-0 d-flex align-items-center justify-content-start text-start ${styles.instruction}`}>\n <span>\n <span className={styles.number}>{props.number}</span>\n </span>\n <span>\n {props.text}\n </span>\n </div>\n </li>\n );\n}\n\ninterface PluginLandingProps {\n queryParams: HashObject;\n}\n\nexport function PluginLandingView(props: PluginLandingProps): React.ReactElement {\n const [ spinner, setSpinner ] = React.useState(false);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const pluginConsumer = Flight.useBasicFetch(PluginRequests.consumer(props.queryParams.consumerKey));\n \n React.useEffect(() => {\n if (!pluginConsumer.hasError)\n return;\n\n Core.ErrorHelper.throw(new InvalidPluginConsumerError());\n }, [pluginConsumer.hasError]);\n\n const { handlePopupEmbed } = usePluginHelper();\n\n function onComplete(data: HashObject) {\n if (!data || ObjectHelper.isEmpty(data))\n return;\n\n /**\n * De-reference and then pass in just to be explicit (for future mainenance) - Sha\n */\n const {\n consumerKey,\n lmsType,\n ltiReturnUrl,\n submitUrl\n } = props.queryParams;\n\n setSpinner(true);\n handlePopupEmbed(data, {\n consumerKey,\n lmsType,\n ltiReturnUrl,\n submitUrl\n });\n }\n\n function onClick(): void {\n EmbedAuthHelper.renderSelectVideoPopup({\n launchUrl: config.data.launchUrl,\n queryParams: props.queryParams,\n onComplete\n });\n }\n\n if (!config.hasCompleted)\n return <></>;\n\n return (\n <div className='d-flex justify-content-center align-items-center vh-100 overflow-hidden'>\n <div className='text-center'>\n <div className={`${styles.logo} mb-4 d-inline-block`}>\n <ClickViewLogo />\n </div>\n <ol className={`row list-unstyled px-3 ${styles.list}`}>\n <StepItem number={1} text={getPhrase('step1')} imageUrl={ImageUrls.Plugin.SelectVideo1} />\n <StepItem number={2} text={getPhrase('step2')} imageUrl={ImageUrls.Plugin.SelectVideo2} />\n <StepItem number={3} text={getPhrase('step3')} imageUrl={ImageUrls.Plugin.SelectVideo3} />\n </ol>\n <SpinnerButton variant='dark' className='btn-lg px-5' onClick={onClick} showSpinner={spinner}>\n <Text namespace={namespace} phrase='selectAVideo' />\n </SpinnerButton>\n </div>\n </div>\n );\n}"],"names":["namespace","getPhrase","LanguageService","StepItem","props","className","style","backgroundImage","imageUrl","number","text","PluginLandingView","spinner","setSpinner","config","ConfigRequests","pluginConsumer","PluginRequests","queryParams","consumerKey","hasError","InvalidPluginConsumerError","handlePopupEmbed","usePluginHelper","onComplete","data","ObjectHelper","lmsType","ltiReturnUrl","submitUrl","hasCompleted","ClickViewLogo","ImageUrls","SpinnerButton","variant","onClick","EmbedAuthHelper","launchUrl","showSpinner","Text","phrase"],"sourceRoot":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"scripts/671-36d34edbf3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/useCurationStudio.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRouteHelper.ts","file:///app/packages/libs/shared/src/enums/VideoActions.ts","file:///app/packages/libs/shared/src/hooks/useVideohydration.ts","file:///app/packages/projects/lite/src/shared/hooks/use-video-actions/VideoActionDefinitions.ts","file:///app/packages/projects/lite/src/shared/hooks/use-video-actions/useVideoActions.ts"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { CuratorGroup } from 'libs/shared/enums/CuratorGroup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CuratorUserGroupCollection, CurrentUser } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.hooks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getOpenInCurationStudioLink(\n baseUrl: string,\n objectType: MasterType | string,\n id: string,\n presentationId?: string\n) {\n const baseManageUrl = UrlHelper.safeUrlConcat(baseUrl, 'manage');\n const baseExchangeUrl = UrlHelper.safeUrlConcat(baseUrl, 'exchange');\n const href = (baseUrl: string, objectType: string, id: string) => UrlHelper.safeUrlConcat(baseUrl, `${objectType}/${id}`);\n\n switch (objectType) {\n case MasterType.Subject:\n return UrlHelper.safeUrlConcat(baseManageUrl, `subjects/presentations/${presentationId}/classifications/${id}/edit`);\n case MasterType.Video:\n return href(baseManageUrl, 'videos', id);\n case MasterType.Playlist:\n return href(baseManageUrl, 'playlists', id);\n case MasterType.Series:\n return href(baseManageUrl, 'series', id);\n case MasterType.Company:\n return href(baseManageUrl, 'companies', id);\n case MasterType.Interactive:\n return href(baseManageUrl, 'interactives', id);\n case MasterType.Clip:\n return href(baseManageUrl, 'clips', id);\n case MasterType.Category:\n return href(baseExchangeUrl, 'categories', id);\n }\n}\n\nexport function getOpenInCurationStudioLabel(): string {\n return getPhrase('openInCurationStudio');\n}\n\nexport function useCurationStudio() {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { data: userGroups } = Flight.useBasicFetch<CuratorUserGroupCollection>(\n (currentUser.data?.id) && UserRequests.groups(currentUser.data?.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const curatorGroups = [ CuratorGroup.Curator, CuratorGroup.Content, CuratorGroup.Developer ];\n\n function isUserCurator(): boolean {\n return curatorGroups.some(group => userGroups?.data.find(userGroup => userGroup.name === group));\n }\n\n return {\n openInCurationStudioLabel: getOpenInCurationStudioLabel(),\n isUserCurator: isUserCurator(),\n getOpenInCurationStudioLink: (objectType: MasterType | string, id: string, presentationId?: string) =>\n getOpenInCurationStudioLink(config.data?.curatorUrl, objectType, id, presentationId)\n };\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\n\nexport const AnalyticsRouteHelper = {\n getObjectUrl(config: Config, object: BaseObject): string {\n const baseUrl = config.analyticsWebUrl;\n\n if (!baseUrl)\n return;\n\n let relativeUrl = '';\n\n switch (object.typeId) {\n case MasterType.Video:\n relativeUrl = `/videos/${object.id}/overview`;\n break;\n\n case MasterType.Clip:\n relativeUrl = `/clips/${object.id}/overview`;\n break;\n\n case MasterType.Interactive:\n relativeUrl = `/interactives/${object.id}/overview`;\n break;\n }\n\n if (!relativeUrl)\n return;\n\n return UrlHelper.safeUrlConcat(baseUrl, relativeUrl);\n }\n};","export enum VideoAction {\n AddToPlaylist,\n Share,\n EditVideo,\n EditDetails,\n Download,\n Delete,\n ViewCurriculumLinks,\n CreateClip,\n CreateInteractive,\n ViewUsage,\n AddToLibrary,\n Approve,\n ManageAccess,\n OpenInCurationStudio,\n OpenInLibraryEditor,\n AddToMyVideos,\n ViewOriginalVideo,\n EditClip,\n EditInteractive,\n PreviewQuestions,\n ViewResults,\n CopyInteractive,\n PrintInteractive,\n UnpublishInteractive,\n}","import { Flight } from 'libs/common/react/index';\n\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nexport enum VideoHydrationType {\n PlayPage\n}\n\ninterface UseVideoHydrationOptions {\n type: VideoHydrationType;\n shareId?: string;\n}\n\nexport function useVideoHydration(options: UseVideoHydrationOptions) {\n const getResponse = Flight.useGetResponseFunc();\n const fetch = Flight.useGetFetch();\n \n function getRequest(video: VideoTypes): Flight.Request {\n if (options.type !== VideoHydrationType.PlayPage)\n return null;\n\n\n return VideoHelper.getVideoRequest(video.id, video.typeId, options.shareId);\n }\n \n function hydrate(video: VideoTypes): void {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n resp.shouldFetch && fetch(request);\n }\n\n function isHydrated(video: VideoTypes): boolean {\n const request = getRequest(video);\n const resp = getResponse(request.key);\n\n return resp.hasCompleted;\n }\n\n return { hydrate, isHydrated };\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsOptions, AssocDescriptor, EntityType, EventVersion, HashObject, PublishDescriptor, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { VideoAction } from 'libs/shared/enums/VideoActions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { getOpenInCurationStudioLink } from 'libs/shared/hooks/useCurationStudio';\nimport { HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser, Library, VideoTypes } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\n\nconst namespace = 'shared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype ActionGroup = 'create' | 'add' | 'edit' | 'manage-interactives' | 'manage' | 'administrative' | 'delete' | 'none';\n\ninterface VideoActionDefinition {\n order: number;\n svgName: string;\n name: string;\n tooltip?: string;\n button: boolean;\n showBorder?: boolean;\n variant?: ButtonProps['variant'];\n appLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n enabled: boolean;\n types?: (MasterType.Video | MasterType.Clip | MasterType.Interactive)[];\n openInNewTab?: boolean;\n onClick?: () => void;\n href?: string;\n analyticsData?: HashObject;\n group?: ActionGroup;\n showButtonText?: boolean;\n}\n\nexport interface GetActionsContext {\n video: VideoTypes;\n location: VideoActionsLocation;\n currentUser: CurrentUser;\n breakpoints: Breakpoints;\n hasPermissions: HasPermissionsFunc;\n hasProduct: (product: ProductId) => boolean;\n requestLibraries: Library[];\n config: Config;\n isPlugin: boolean;\n isUserCurator: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n}\n\nexport const VideoActionsDefinitions: Record<VideoAction, (options: GetActionsContext) => VideoActionDefinition> = {\n /**\n * Content Review actions\n */\n [VideoAction.Approve]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.hasPermissions(PermissionName.ManageVideoAccess),\n svgName: cvSvgLibrary.Check,\n order: 10,\n name: getPhrase('approve'),\n button: true,\n showButtonText: true,\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.APPROVE_VIDEO,\n params: { objectId: ctx.video.id, objectTypeId: ctx.video.typeId }\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.Approve\n }\n }),\n\n [VideoAction.ManageAccess]: (ctx: GetActionsContext): VideoActionDefinition => {\n const hasCustomRestriction = RestrictionHelper.hasCustomRestriction(ctx.video);\n\n return {\n enabled: ctx.hasPermissions(PermissionName.ManageVideoAccess),\n svgName: cvSvgLibrary.Lock,\n order: 90,\n name: getPhrase('manageAccess'),\n button: hasCustomRestriction,\n showButtonText: hasCustomRestriction,\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.MANAGE_ACCCESS,\n params: {\n objectId: ctx.video.id,\n objectTypeId: ctx.video.typeId\n }\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.ManageAccess\n },\n group: 'manage'\n };\n },\n\n /**\n * Archived videos\n */\n [VideoAction.ViewResults]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button = true;\n let order = 5;\n\n if (ctx.location === VideoActionsLocation.PlayPage) {\n const isMobile = ctx.breakpoints.xs || ctx.breakpoints.sm;\n button = !isMobile;\n order = isMobile ? 10 : order;\n }\n\n return {\n enabled: ctx.hasPermissions(PermissionName.ViewAnalyticsProduct)\n && ctx.video.status !== CurationStatus.Draft,\n types: [MasterType.Interactive],\n order,\n svgName: cvSvgLibrary.Chart,\n name: getPhrase('viewResults'),\n button,\n showButtonText: ctx.location === VideoActionsLocation.PlayPage && button,\n href: AnalyticsRouteHelper.getObjectUrl(ctx.config, ctx.video),\n openInNewTab: true,\n analyticsOptions: {\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.ViewResults\n },\n group: 'none'\n };\n },\n\n /**\n * All other actions\n */\n [VideoAction.AddToPlaylist]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button = !VideoHelper.isInteractive(ctx.video) || ctx.video.status !== CurationStatus.Draft;\n let order = 10;\n\n if (button && ctx.location === VideoActionsLocation.PlayPage) {\n const isMobile = ctx.breakpoints.xs || ctx.breakpoints.sm;\n const isIpad = ctx.breakpoints.md;\n if (VideoHelper.isInteractive(ctx.video)) {\n button = !isIpad && !isMobile;\n order = !isIpad && !isMobile ? order : 30;\n } else {\n button = !isMobile;\n order = isMobile ? 55 : order;\n }\n }\n\n const showButtonText = ctx.location === VideoActionsLocation.PlayPage\n && button\n && !VideoHelper.isInteractive(ctx.video);\n\n return {\n enabled: true,\n order,\n svgName: cvSvgLibrary.AddToPlaylists,\n name: getPhrase('addToPlaylist'),\n button,\n showBorder: ctx.location === VideoActionsLocation.PlayPage && button && VideoHelper.isInteractive(ctx.video),\n showButtonText,\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.ADD_TO_PLAYLIST,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Associate,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'add'\n };\n },\n\n [VideoAction.Share]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button = true;\n let order = 20;\n\n if (ctx.location === VideoActionsLocation.PlayPage) {\n const isMobile = ctx.breakpoints.xs || ctx.breakpoints.sm;\n const isIpad = ctx.breakpoints.md;\n if (VideoHelper.isInteractive(ctx.video)) {\n button = !isIpad && !isMobile;\n order = (isIpad || isMobile) ? 5 : order;\n } else {\n button = !isMobile;\n order = isMobile ? 5 : order;\n }\n }\n\n const showButtonText = ctx.location === VideoActionsLocation.PlayPage\n && button\n && !VideoHelper.isInteractive(ctx.video);\n\n return {\n enabled: !VideoHelper.isInteractive(ctx.video) || ctx.video.status !== CurationStatus.Draft,\n order,\n svgName: cvSvgLibrary.Share2,\n name: getPhrase('share'),\n button,\n showBorder: ctx.location === VideoActionsLocation.PlayPage && button && VideoHelper.isInteractive(ctx.video),\n showButtonText,\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [ctx.video.id],\n params: { entityType: ctx.video.type }\n },\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V3\n },\n group: 'none'\n };\n },\n\n [VideoAction.CreateClip]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: !ctx.isPlugin,\n types: [MasterType.Video],\n order: 30,\n svgName: cvSvgLibrary.Clip,\n name: getPhrase('createClip'),\n button: false,\n appLink: { application: AppChannels.CLIPS, action: Actions.Clips.CREATE_CLIP, args: [ctx.video.id]},\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Clip,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n video: ctx.analyticsData\n },\n group: 'create'\n }),\n\n [VideoAction.CreateInteractive]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button = false;\n let order = 40;\n\n if (ctx.location === VideoActionsLocation.PlayPage) {\n const isIpad = ctx.breakpoints.xs || ctx.breakpoints.sm || ctx.breakpoints.md;\n button = !isIpad;\n order = isIpad ? order : -10;\n }\n\n return {\n enabled: !ctx.isPlugin,\n types: [ MasterType.Video, MasterType.Clip ],\n order,\n svgName: cvSvgLibrary.CreateInteractive,\n name: getPhrase('createInteractive'),\n button,\n showButtonText: ctx.location === VideoActionsLocation.PlayPage && button,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: VideoHelper.isVideo(ctx.video) ?\n Actions.Interactives.NEW_INTERACTIVE :\n Actions.Interactives.NEW_CLIP_INTERACTIVE,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.Interactive,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n video: ctx.analyticsData\n },\n group: 'create'\n };\n },\n\n [VideoAction.AddToMyVideos]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: VideoHelper.isVideo(ctx.video) &&\n !!ctx.video.libraries?.data?.find(library => library.type === 'exchange'),\n types: [MasterType.Video],\n order: 50,\n svgName: cvSvgLibrary.AddVideo,\n name: getPhrase('addMyVideos'),\n button: false,\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.ADD_VIDEO,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.WorkspaceAdd,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'add'\n }),\n\n [VideoAction.AddToLibrary]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: !ctx.hasPermissions(PermissionName.StudentExperience) &&\n ctx.video._canAddToLibrary?.value &&\n ctx.requestLibraries?.length &&\n (!VideoHelper.isInteractive(ctx.video) || ctx.video.status !== CurationStatus.Draft),\n order: 60,\n svgName: cvSvgLibrary.Library,\n name: getPhrase('addToLibrary'),\n button: false,\n appLink: {\n application: AppChannels.LIBRARIES,\n action: Actions.Libraries.ADD_TO_LIBRARY,\n args: [ ctx.video.id, ctx.video.typeId ]\n },\n analyticsOptions: {\n actionType: UserAction.Create,\n entity: EntityType.LibraryRequest,\n workflowPhase: WorkflowPhase.Start\n },\n analyticsData: {\n video: ctx.analyticsData\n },\n group: 'add'\n }),\n\n [VideoAction.EditVideo]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.video._canUpdate?.value,\n types: [MasterType.Video],\n order: 70,\n svgName: cvSvgLibrary.EditVideo,\n name: getPhrase('editVideo'),\n button: false,\n href: UrlHelper.urlBuilder(\n UrlHelper.safeUrlConcat(ctx.config.cloudEditorUrl, `video/${ctx.video.id}`),\n { product: ProductId.Primary }\n ),\n openInNewTab: true,\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Video,\n descriptor: VideoActionDescriptor.EditVideo\n },\n group: 'edit'\n }),\n\n [VideoAction.EditClip]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.video._canUpdate?.value,\n types: [MasterType.Clip],\n order: 70,\n svgName: cvSvgLibrary.EditVideo,\n name: getPhrase('editClip'),\n button: false,\n appLink: {\n application: AppChannels.CLIPS,\n action: Actions.Clips.EDIT_CLIP,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n }),\n\n [VideoAction.EditDetails]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.video._canUpdate?.value,\n types: [ MasterType.Video, MasterType.Clip ],\n order: 80,\n svgName: cvSvgLibrary.Edit,\n name: getPhrase('editDetails'),\n button: false,\n appLink: VideoHelper.isVideo(ctx.video) ?\n { application: AppChannels.VIDEOS, action: Actions.Videos.EDIT_VIDEO, args: [ctx.video.id]} :\n { application: AppChannels.CLIPS, action: Actions.Clips.EDIT_CLIP_DETAILS, args: [ctx.video.id]},\n analyticsOptions: {\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n }),\n\n [VideoAction.ViewOriginalVideo]: (ctx: GetActionsContext): VideoActionDefinition => {\n let appLink: Core.AppLink = null;\n\n if (VideoHelper.isInteractive(ctx.video) && ctx.video._parentClip?.id) {\n appLink = {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ ctx.video._parentClip.id, TextHelper.slugify(ctx.video._parentClip.name) ]\n };\n }\n \n if (!VideoHelper.isVideo(ctx.video) && ctx.video._parentVideo?.id) {\n appLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ ctx.video._parentVideo.id, TextHelper.slugify(ctx.video._parentVideo.name) ]\n };\n }\n \n return {\n enabled: !VideoHelper.isVideo(ctx.video) &&\n VideoHelper.canViewOriginalVideo(ctx.video) &&\n !!appLink,\n types: [ MasterType.Clip, MasterType.Interactive ],\n order: 100,\n svgName: cvSvgLibrary.Video,\n name: getPhrase('viewOriginalVideo'),\n button: false,\n appLink,\n analyticsOptions: {\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.ViewOriginalVideo\n },\n group: 'manage'\n };\n },\n\n [VideoAction.ViewUsage]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.hasPermissions(PermissionName.ViewAnalyticsProduct) &&\n (ctx.hasPermissions(PermissionName.ViewCustomerAnalytics) || ctx.video._canUpdate?.value),\n types: [ MasterType.Clip, MasterType.Video ],\n order: 110,\n svgName: cvSvgLibrary.Chart,\n name: getPhrase('viewUsage'),\n button: false,\n href: AnalyticsRouteHelper.getObjectUrl(ctx.config, ctx.video),\n openInNewTab: true,\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: VideoActionDescriptor.ViewUsage\n },\n group: 'manage'\n }),\n\n [VideoAction.ViewCurriculumLinks]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: !ctx.hasPermissions(PermissionName.StudentExperience) &&\n VideoHelper.isVideo(ctx.video) &&\n ctx.video._hasCurriculumLinks,\n types: [MasterType.Video],\n order: 120,\n svgName: cvSvgLibrary.Tag,\n name: getPhrase('viewCurriculumLinks'),\n button: false,\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.VIEW_CURRICULUM_LINKS, args: [ctx.video.id]},\n analyticsOptions: {\n actionType: UserAction.Click,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: VideoActionDescriptor.ViewCurriculumLinks\n },\n group: 'manage'\n }),\n\n [VideoAction.Download]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: VideoHelper.isVideo(ctx.video) && ctx.video._canDownload?.value,\n types: [MasterType.Video],\n order: 130,\n svgName: cvSvgLibrary.Download,\n name: getPhrase('download'),\n button: false,\n appLink: { application: AppChannels.VIDEOS, action: Actions.Videos.DOWNLOAD_VIDEO, args: [ctx.video.id]},\n analyticsOptions: {\n actionType: UserAction.Download,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'manage'\n }),\n\n [VideoAction.OpenInCurationStudio]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.isUserCurator,\n order: 140,\n svgName: cvSvgLibrary.NewWindow,\n name: getPhrase('openInCurationStudio'),\n button: false,\n href: getOpenInCurationStudioLink(ctx.config.curatorUrl, ctx.video.typeId, ctx.video.id),\n openInNewTab: true,\n group: 'administrative'\n }),\n\n [VideoAction.OpenInLibraryEditor]: (ctx: GetActionsContext): VideoActionDefinition => {\n function getOpenInLibraryEditorLink(): string {\n let type = 'videos';\n \n if (VideoHelper.isClip(ctx.video))\n type = 'clips';\n else if (VideoHelper.isInteractive(ctx.video))\n type = 'interactives';\n \n return UrlHelper.safeUrlConcat(ctx.config.libraryEditorUrl, `/manage/libraries/${type}/${ctx.video.id}`);\n }\n\n const schoolLibraryIds = new Set(\n ctx.requestLibraries\n ?.filter(l => l.owner?.id?.toString() === ctx.currentUser?.customerId?.toString())\n .map(l => l.id?.toString())\n );\n\n return {\n enabled: ctx.hasProduct(ProductId.LibraryEditor) &&\n !!ctx.video.libraries?.data?.find(l => schoolLibraryIds.has(l.id?.toString())),\n order: 145,\n svgName: cvSvgLibrary.NewWindow,\n name: getPhrase('openInLibraryEditor'),\n button: false,\n href: getOpenInLibraryEditorLink(),\n openInNewTab: true,\n group: 'administrative'\n };\n },\n\n [VideoAction.Delete]: (ctx: GetActionsContext): VideoActionDefinition => {\n let appLink: Core.AppLink = {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.DELETE_VIDEO,\n params: { ids: [ctx.video.id]}\n };\n \n if (VideoHelper.isClip(ctx.video)) {\n appLink = {\n application: AppChannels.CLIPS,\n action: Actions.Clips.DELETE_CLIP,\n args: [ctx.video.id]\n };\n } else if (VideoHelper.isInteractive(ctx.video)) {\n appLink = {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.DELETE_INTERACTIVE,\n args: [ctx.video.id]\n };\n }\n\n return {\n enabled: ctx.video._canUpdate?.value,\n order: 150,\n svgName: cvSvgLibrary.Delete,\n name: getPhrase('delete'),\n variant: 'danger',\n button: false,\n appLink,\n analyticsOptions: {\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'delete'\n };\n },\n\n /**\n * Interactive only\n */\n [VideoAction.PreviewQuestions]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.location === VideoActionsLocation.VideoItem,\n types: [MasterType.Interactive],\n order: 83,\n svgName: cvSvgLibrary.Search,\n name: getPhrase('previewInteractive'),\n button: false,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PREVIEW_QUESTIONS,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.PreviewInteractiveVideo\n },\n group: 'manage-interactives'\n }),\n\n [VideoAction.PrintInteractive]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button: boolean;\n let order = 0;\n if (VideoHelper.isInteractive(ctx.video)) {\n button = true;\n }\n\n if (button && ctx.location === VideoActionsLocation.PlayPage) {\n const isMobile = ctx.breakpoints.xs || ctx.breakpoints.sm;\n button = !isMobile;\n order = !isMobile ? order : 80;\n }\n\n return {\n enabled: true,\n types: [MasterType.Interactive],\n order,\n svgName: cvSvgLibrary.Print,\n name: getPhrase('printAsWorksheet'),\n button,\n showButtonText: ctx.location === VideoActionsLocation.PlayPage,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.PRINT_QUESTIONS,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Print,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'manage-interactives'\n };\n },\n\n [VideoAction.CopyInteractive]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: !ctx.hasPermissions(PermissionName.StudentExperience),\n types: [MasterType.Interactive],\n order: 87,\n svgName: cvSvgLibrary.Copy,\n name: getPhrase('copyInteractive'),\n button: false,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.COPY_INTERACTIVE,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Copy,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'manage-interactives'\n }),\n\n [VideoAction.EditInteractive]: (ctx: GetActionsContext): VideoActionDefinition => {\n let button = ctx.video.status === CurationStatus.Draft;\n let order = 70;\n\n if (ctx.location === VideoActionsLocation.PlayPage && ctx.breakpoints.xs) {\n button = false;\n order = -10;\n }\n\n return {\n enabled: !ctx.isPlugin && ctx.video.status === CurationStatus.Draft,\n types: [MasterType.Interactive],\n order,\n svgName: cvSvgLibrary.EditVideo,\n name: getPhrase('editInteractive'),\n tooltip: ctx.location !== VideoActionsLocation.PlayPage\n ? getPhrase('editInteractiveTooltip')\n : '',\n button,\n showButtonText: ctx.location === VideoActionsLocation.PlayPage && button,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.EDIT_INTERACTIVE,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Edit,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n };\n },\n\n [VideoAction.UnpublishInteractive]: (ctx: GetActionsContext): VideoActionDefinition => ({\n enabled: ctx.video._canUpdate?.value && ctx.video.status !== CurationStatus.Draft,\n types: [MasterType.Interactive],\n order: 70,\n svgName: cvSvgLibrary.EditVideo,\n name: getPhrase('editInteractive'),\n button: false,\n appLink: {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.UNPUBLISH_INTERACTIVE,\n args: [ctx.video.id]\n },\n analyticsOptions: {\n actionType: UserAction.Publish,\n descriptor: PublishDescriptor.Unpublish,\n workflowPhase: WorkflowPhase.Start\n },\n group: 'edit'\n })\n};\n\n","import { Flight } from 'libs/common/react/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { VideoActionsOptions } from 'libs/shared/context/VideoActionsContext';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { VideoAction } from 'libs/shared/enums/VideoActions';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useVideoHydration, VideoHydrationType } from 'libs/shared/hooks/useVideohydration';\nimport { Config, CurrentUser, Library, VideoTypes } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { usePluginHelper } from '../use-plugin-helper/usePluginHelper';\n\nimport { GetActionsContext, VideoActionsDefinitions } from './VideoActionDefinitions';\n\nexport enum VideoActionsLocation {\n PlayPage,\n VideoItem\n}\n\nconst RESTRICTED_ACTIONS = [\n VideoAction.Approve,\n VideoAction.ManageAccess\n];\n\nconst ARCHIVED_ACTIONS = [\n VideoAction.ViewResults\n];\n\nconst ACTIONS = [\n VideoAction.AddToPlaylist,\n VideoAction.Share,\n VideoAction.EditInteractive,\n VideoAction.ViewResults,\n VideoAction.PrintInteractive\n];\n\nconst LAZY_ACTIONS = [\n VideoAction.ManageAccess,\n VideoAction.AddToLibrary,\n VideoAction.ViewCurriculumLinks,\n VideoAction.ViewUsage,\n VideoAction.CreateClip,\n VideoAction.CreateInteractive,\n VideoAction.EditVideo,\n VideoAction.EditClip,\n VideoAction.EditDetails,\n VideoAction.Delete,\n VideoAction.Download,\n VideoAction.OpenInCurationStudio,\n VideoAction.OpenInLibraryEditor,\n VideoAction.ViewOriginalVideo,\n VideoAction.CopyInteractive,\n VideoAction.UnpublishInteractive,\n VideoAction.PreviewQuestions\n];\n\nconst FETCH_MORE_ACTION_OPTION: ActionOptions = {\n lazyPlaceholder: true\n};\n\nfunction mapActionsLocationToAnalyticsLocation(actionsLocation: VideoActionsLocation) {\n switch (actionsLocation) {\n case VideoActionsLocation.PlayPage: return LocationContext.PlayPage;\n case VideoActionsLocation.VideoItem: return LocationContext.VideoListItem;\n }\n}\n\nfunction getActionOptions(actions: VideoAction[], ctx: GetActionsContext): ActionOptions[] {\n return actions.map(action => {\n const definition = VideoActionsDefinitions[action](ctx);\n\n // Action does not apply to this video type\n if (definition.types && !definition.types.some(type => type === ctx.video.typeId))\n return null;\n \n // Action is disabled\n if (!definition.enabled)\n return null;\n\n const variant = definition.variant || 'outline-dark';\n let className = '';\n\n if (definition.showButtonText)\n className = `btn btn-${variant} me-2`;\n else if (definition.variant)\n className = `text-${variant}`;\n\n const showLabel = (!definition.button || definition.showButtonText);\n\n return {\n order: definition.order,\n label: showLabel ? definition.name : null,\n appLink: definition.appLink,\n href: definition.href,\n onClick: definition.onClick,\n svgName: definition.svgName,\n className,\n button: definition.button,\n showBorder: definition.showBorder,\n tooltip: definition.tooltip ?? (!showLabel ? definition.name : null),\n analyticsData: definition.analyticsData || ctx.analyticsData,\n analyticsOptions: definition.analyticsOptions ? {\n ...(ctx.analyticsOptions ?? {}),\n ...(definition.analyticsOptions ?? {})\n } : null,\n openInNewTab: definition.openInNewTab,\n group: definition.group\n };\n }).filter(a => !!a);\n}\n\ninterface UseVideoActionsOptions {\n location: VideoActionsLocation;\n shareId?: string;\n}\n\nexport function useVideoActions(options: UseVideoActionsOptions) {\n const breakpoints = useBreakpoints();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { isPlugin } = usePluginHelper();\n const { isUserCurator } = useCurationStudio();\n const { hasProduct } = useProducts();\n \n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestLibraries = Flight.useBasicFetch<Library[]>(\n hasPermissions(PermissionName.ViewLibraries) &&\n LibraryRequests.libraryRequestLibraries()\n );\n\n const { hydrate, isHydrated } = useVideoHydration({\n type: VideoHydrationType.PlayPage,\n shareId: options.shareId\n });\n\n function getVideoActions(video: VideoTypes, opts: VideoActionsOptions = {}) {\n if (!hasLocalPermissions(LocalPermissionName.UseVideoActions))\n return [];\n\n const { canConsume } = VideoHelper.getCanBeConsumed(video);\n\n if (!canConsume)\n return [];\n\n const context: GetActionsContext = {\n video,\n breakpoints,\n location: options.location,\n hasPermissions,\n hasProduct,\n requestLibraries: requestLibraries.data,\n config: config.data,\n currentUser: currentUser.data,\n isPlugin,\n isUserCurator,\n analyticsData: VideoHelper.getAnalyticsData(video, opts.analyticsData),\n analyticsOptions: {\n ...opts.analyticsOptions,\n entity: VideoHelper.getAnalyticsEntity(video),\n location: mapActionsLocationToAnalyticsLocation(options.location)\n }\n };\n\n if (VideoHelper.isVideoTypeArchived(video))\n return getActionOptions(ARCHIVED_ACTIONS, context);\n\n if (RestrictionHelper.hasCustomRestriction(video))\n return getActionOptions(RESTRICTED_ACTIONS, context);\n\n if (!isHydrated(video))\n return [ ...getActionOptions(ACTIONS, context), FETCH_MORE_ACTION_OPTION ];\n\n return getActionOptions([ ...ACTIONS, ...LAZY_ACTIONS ], context);\n }\n\n return {\n getVideoActions,\n fetchMoreActions: (video: VideoTypes) => hydrate(video)\n };\n}"],"names":["getPhrase","baseUrl","objectType","id","presentationId","baseManageUrl","baseExchangeUrl","href","getOpenInCurationStudioLabel","useCurationStudio","currentUser","userGroups","data","config","curatorGroups","Curator","openInCurationStudioLabel","isUserCurator","some","group","find","userGroup","name","getOpenInCurationStudioLink","curatorUrl","AnalyticsRouteHelper","getObjectUrl","object","analyticsWebUrl","relativeUrl","typeId","VideoAction","VideoHydrationType","VideoActionsLocation","LanguageService","VideoActionsDefinitions","Approve","ctx","enabled","hasPermissions","PermissionName","svgName","order","button","showButtonText","appLink","application","action","params","objectId","video","objectTypeId","analyticsOptions","actionType","descriptor","ManageAccess","hasCustomRestriction","RestrictionHelper","ViewResults","location","PlayPage","isMobile","breakpoints","xs","sm","status","CurationStatus","types","MasterType","openInNewTab","AddToPlaylist","VideoHelper","isIpad","md","showBorder","args","workflowPhase","Share","entityType","type","eventVersion","CreateClip","isPlugin","entity","analyticsData","CreateInteractive","AddToMyVideos","libraries","library","AddToLibrary","_canAddToLibrary","value","requestLibraries","length","EditVideo","_canUpdate","UrlHelper","cloudEditorUrl","product","ProductId","EditClip","EditDetails","ViewOriginalVideo","_parentClip","TextHelper","_parentVideo","ViewUsage","ViewCurriculumLinks","_hasCurriculumLinks","Download","_canDownload","OpenInCurationStudio","OpenInLibraryEditor","schoolLibraryIds","Set","filter","l","owner","toString","customerId","map","hasProduct","has","libraryEditorUrl","Delete","ids","variant","PreviewQuestions","VideoItem","PrintInteractive","CopyInteractive","EditInteractive","tooltip","UnpublishInteractive","RESTRICTED_ACTIONS","ARCHIVED_ACTIONS","ACTIONS","LAZY_ACTIONS","FETCH_MORE_ACTION_OPTION","lazyPlaceholder","mapActionsLocationToAnalyticsLocation","actionsLocation","getActionOptions","actions","definition","className","showLabel","label","onClick","a","useVideoActions","options","useBreakpoints","usePermissions","hasLocalPermissions","usePluginHelper","UserRequests","ConfigRequests","LibraryRequests","getResponse","fetch","getRequest","shareId","hydrate","request","key","shouldFetch","isHydrated","hasCompleted","useVideoHydration","getVideoActions","opts","canConsume","context","fetchMoreActions"],"sourceRoot":""}