@clickview/lite 0.84.1-rc.1 → 0.84.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{171-acb1ef0ae4-lite.chunk.js → 171-4b1fe5952a-lite.chunk.js} +2 -2
- package/dist/scripts/{171-acb1ef0ae4-lite.chunk.js.map → 171-4b1fe5952a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1726-b08dde1407-lite.chunk.js → 1726-b8b386dbd5-lite.chunk.js} +2 -2
- package/dist/scripts/{1726-b08dde1407-lite.chunk.js.map → 1726-b8b386dbd5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4006-5078eb2c01-lite.chunk.js → 4006-2b689bdde0-lite.chunk.js} +3 -3
- package/dist/scripts/{4006-5078eb2c01-lite.chunk.js.map → 4006-2b689bdde0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5712-37a97adc65-lite.chunk.js → 5712-fd1a7d8d6a-lite.chunk.js} +2 -2
- package/dist/scripts/{5712-37a97adc65-lite.chunk.js.map → 5712-fd1a7d8d6a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{639-0bf7cc53f9-lite.chunk.js → 639-df1607cbc8-lite.chunk.js} +2 -2
- package/dist/scripts/{639-0bf7cc53f9-lite.chunk.js.map → 639-df1607cbc8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8056-a3d8fa8728-lite.chunk.js → 8056-555482555f-lite.chunk.js} +2 -2
- package/dist/scripts/{8056-a3d8fa8728-lite.chunk.js.map → 8056-555482555f-lite.chunk.js.map} +1 -1
- package/dist/scripts/8852-f4e4da0097-lite.chunk.js +2 -0
- package/dist/scripts/8852-f4e4da0097-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-375332cf3f.min.js → bundle-47bd8cc149.min.js} +3 -3
- package/dist/scripts/{bundle-375332cf3f.min.js.map → bundle-47bd8cc149.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/8852-c39595da59-lite.chunk.js +0 -2
- package/dist/scripts/8852-c39595da59-lite.chunk.js.map +0 -1
- /package/dist/scripts/{4006-5078eb2c01-lite.chunk.js.LICENSE.txt → 4006-2b689bdde0-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-375332cf3f.min.js.LICENSE.txt → bundle-47bd8cc149.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{4006-5078eb2c01-lite.chunk.js.map → 4006-2b689bdde0-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4006-5078eb2c01-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/hard-gate-open-classroom-view/HardGateOpenClassroomView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-info-header/OpenClassroomFlowInfoHeader.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-settings/OpenClassroomFlowSettings.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData.ts","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/OpenClassroomFlowSettingsView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-view/OpenClassroomFlowView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport type { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\ninterface GetPrivateIconAndTextOptions {\n privacy: SharePrivacy;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetPrivateIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('pinDescription') };\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getShareLinkAccessType(privacy: SharePrivacyResponse): 'private' | 'owner' | 'protected' {\n /**\n * If an entity is not a ClickView content and they cannot manage access\n * settings of the entity (which they can if its their private entity)\n * it means that its a TV content\n */\n if (privacy.isTvContent || privacy.isClickViewContent)\n return 'protected';\n\n if (privacy.canManageAccess)\n return 'owner';\n\n return 'private';\n }\n};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","import React from 'react';\n\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\n\nexport interface HardGateOpenClassroomViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToFlowSelector: () => void;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title -- Title is rendered by HardGatePopup\nexport function HardGateOpenClassroomView(props: HardGateOpenClassroomViewProps): JSX.Element {\n return (\n <HardGatePopup\n feature='assign'\n animate={props.animate}\n closePopup={props.closePopup}\n extraContent={(\n <FlowControls\n onClickBack={props.goToFlowSelector}\n hideNextButton\n hideCreateClassroomButton\n />\n )}\n />\n );\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'assign.openClassroomFlowInfoHeader';\n\ninterface OpenClassroomFlowInfoHeaderProps {\n onClose: () => void;\n}\n\nexport function OpenClassroomFlowInfoHeader(props: OpenClassroomFlowInfoHeaderProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='p-3 bg-light-blue rounded rounded-2 gap-3 d-flex flex-row'>\n <div className='d-none d-md-block'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant='blue'\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n </div>\n <div className='position-relative w-100'>\n <h3 className='h6'><Text phrase='title' /></h3>\n <p className='mb-0'><Text phrase='description' /></p>\n <div className='position-absolute top-0 end-0'>\n <IconButton svgName={cvSvgLibrary.Close} onClick={props.onClose} className='btn-close p-2' />\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { FlowSettings } from 'apps/assign/components/flow-settings/FlowSettings';\n\nimport { OpenClassroomFlowSettingsError } from '../../hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\nimport { OpenClassroomFlowInfoHeader } from '../open-classroom-flow-info-header/OpenClassroomFlowInfoHeader';\n\nconst namespace = 'assign.openClassroomFlowSettings';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SettingsFieldProps {\n // Open classroom name field\n openClassroomName: string;\n onChangeOpenClassroomName: (name: string) => void;\n \n // Prevent scrubbing field\n hidePreventScrubbing?: boolean;\n disablePreventScrubbing?: boolean;\n onTogglePreventScrubbing: () => void;\n preventScrubbing: boolean;\n \n // Immediate feedback field\n hideImmediateFeedback?: boolean;\n disableImmediateFeedback?: boolean;\n onToggleImmediateFeedback: () => void;\n immediateFeedback: boolean;\n\n // Require student sign in field\n hideRequiresStudentSignIn?: boolean;\n disableRequiresStudentSignIn?: boolean;\n onToggleRequiresStudentSignIn: () => void;\n toggleRequiresStudentSignIn: boolean;\n\n // Respect ratings and restrictions field\n hideRespectRatingsAndRestrictions?: boolean;\n disableRespectRatingsAndRestrictions?: boolean;\n onToggleRespectRatingsAndRestrictions: () => void;\n toggleRespectRatingsAndRestrictions: boolean;\n \n // Message field\n hideMessage?: boolean;\n disableMessage?: boolean;\n message: string;\n onChangeMessage: (message: string) => void;\n onToggleMessage: () => void;\n toggleMessage: boolean;\n}\n\ninterface OpenClassroomFlowSettingsProps extends SettingsFieldProps {\n hasStudentExp: boolean;\n entity: SharableEntity;\n yearGroups: YearGroup[];\n closeHeader: () => void;\n showHeader: boolean;\n error: OpenClassroomFlowSettingsError;\n}\n\nexport function OpenClassroomFlowSettings(props: OpenClassroomFlowSettingsProps): JSX.Element {\n const respectRatingText = ShareLinkHelper.getRespectRatingText(\n props.entity,\n props.yearGroups,\n props.hasStudentExp\n );\n \n return (\n <div className='d-flex flex-column gap-4'>\n {props.showHeader &&\n <OpenClassroomFlowInfoHeader onClose={props.closeHeader} />\n }\n \n <FlowSettings>\n <FlowSettings.Input\n title={getPhrase('openClassroomNameTitle')}\n className='col-lg-6'\n value={props.openClassroomName}\n onChange={props.onChangeOpenClassroomName}\n placeholder={getPhrase('openClassroomNamePlaceholder')}\n error={props.error.name}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={props.hidePreventScrubbing && props.hideImmediateFeedback} />\n \n <FlowSettings\n name={getPhrase('videoSettingsTitle')}\n hide={props.hidePreventScrubbing && props.hideImmediateFeedback}\n >\n <FlowSettings.Toggle\n hide={props.hidePreventScrubbing}\n title={getPhrase('preventScrubbingTitle')}\n description={getPhrase('preventScrubbingDescription')}\n onClick={props.onTogglePreventScrubbing}\n toggled={props.preventScrubbing}\n disabled={props.disablePreventScrubbing}\n />\n <FlowSettings.Toggle\n hide={props.hideImmediateFeedback}\n title={getPhrase('immediateFeedbackTitle')}\n description={getPhrase('immediateFeedbackDescription')}\n onClick={props.onToggleImmediateFeedback}\n toggled={props.immediateFeedback}\n disabled={props.disableImmediateFeedback}\n />\n </FlowSettings>\n\n <FlowSettings.Divider hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions} />\n\n <FlowSettings\n name={getPhrase('studentAccessTitle')}\n hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions}\n >\n <FlowSettings.Toggle\n hide={props.hideRequiresStudentSignIn}\n title={getPhrase('requiresStudentSignInTitle')}\n description={getPhrase('requiresStudentSignInDescription')}\n onClick={props.onToggleRequiresStudentSignIn}\n toggled={props.toggleRequiresStudentSignIn}\n disabled={props.disableRequiresStudentSignIn}\n />\n <FlowSettings.Toggle\n hide={props.hideRespectRatingsAndRestrictions}\n title={getPhrase('respectRatingsAndRestrictionsTitle')}\n description={respectRatingText}\n onClick={props.onToggleRespectRatingsAndRestrictions}\n toggled={props.toggleRespectRatingsAndRestrictions}\n disabled={props.disableRespectRatingsAndRestrictions}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={\n (props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions)\n || props.hideMessage}\n />\n \n <FlowSettings\n name={getPhrase('moreOptionsTitle')}\n hide={props.hideMessage}\n childContainerClassName='d-flex flex-column gap-2'\n >\n <FlowSettings.Toggle\n hide={props.hideMessage}\n title={getPhrase('messageTitle')}\n description={getPhrase('messageDescription')}\n onClick={props.onToggleMessage}\n toggled={props.toggleMessage}\n disabled={props.disableMessage}\n >\n <FlowSettings.TextArea\n hide={!props.toggleMessage}\n placeholder={getPhrase('messagePlaceholder')}\n onChange={props.onChangeMessage}\n value={props.message}\n />\n </FlowSettings.Toggle>\n </FlowSettings>\n \n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useCreateShare } from 'libs/shared/apps/share-v2/hooks/useCreateShare';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\n\nconst namespace = 'assign.useOpenClassroomFlowData';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UseOpenClassroomFlowDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\ntype OpenClassroomFlowSettings = 'preventScrubbing' | 'immediateFeedback' | 'requiresStudentSignIn' | 'respectRatingsAndRestrictions' | 'message';\ntype OpenClassroomFlowSettingsMap = {[key in OpenClassroomFlowSettings]: boolean};\nexport type OpenClassroomFlowSettingsError = {\n name?: string\n};\n\nconst initialSettings: OpenClassroomFlowSettingsMap = {\n immediateFeedback: false,\n preventScrubbing: false,\n message: false,\n requiresStudentSignIn: false,\n respectRatingsAndRestrictions: false\n};\n\nconst MAX_OPEN_CLASSROOM_NAME_LENGTH = 128;\n\nconst VIEW_MODEL_KEY = 'assign:open:classroom:flow:settings:header';\n\nexport function useOpenClassroomFlowSettingsData(options: UseOpenClassroomFlowDataOptions) {\n const alert = useAlerts();\n\n /**\n * We store this in Local storage so that if they user deliberatly\n * closes this we dont show this again\n */\n const [ showHeader, setShowHeader ] = useViewModel(VIEW_MODEL_KEY, true, { storage: StorageType.LocalStorage });\n \n const sharedData = useAssignSharedData({\n entityType: options.entityType,\n objectId: options.objectId\n });\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n CustomerRequests.yearGroups(sharedData.currentUser.data?.customerId)\n );\n\n const { createOpenSession } = useCreateShare(options.objectId);\n \n const [ settings, setSettings ] = React.useState<OpenClassroomFlowSettingsMap>({\n ...initialSettings,\n preventScrubbing: sharedData.interactive.data?.preventScrubbing || false,\n immediateFeedback: sharedData.interactive.data?.immediateFeedback || false\n });\n const [ name, setName ] = React.useState('');\n const [ message, setMessage ] = React.useState('');\n const [ loading, setLoading ] = React.useState(false);\n const [ error, setError ] = React.useState<OpenClassroomFlowSettingsError>({});\n\n const isValid = Object.keys(error).length === 0;\n\n function onChangeSetting(setting: OpenClassroomFlowSettings, value: boolean) {\n const newSettings: Partial<OpenClassroomFlowSettingsMap> = {\n [setting]: value\n };\n /*\n * If respect ratings and restrictions is toggled\n * we always toggle requires student sign in option too\n * - Nish\n */\n if (setting === 'respectRatingsAndRestrictions') {\n newSettings['requiresStudentSignIn'] = value;\n }\n \n setSettings(prev => ({\n ...prev,\n ...newSettings\n }));\n }\n\n async function onShare(onSuccess?: (share: Share) => void) {\n if (!isValid) {\n return;\n }\n\n setLoading(true);\n try {\n const share = await createOpenSession({\n name,\n objectId: options.objectId,\n immediateFeedback: settings.immediateFeedback,\n preventScrubbing: settings.preventScrubbing,\n requireSignIn: settings.requiresStudentSignIn,\n respectRatingsAndRestrictions: settings.respectRatingsAndRestrictions\n });\n\n typeof onSuccess === 'function' && onSuccess(share);\n \n setLoading(false);\n } catch (ex: unknown) {\n alert.error(getPhrase('createError'));\n } finally {\n setLoading(false);\n }\n }\n\n function toggleSetting(setting: OpenClassroomFlowSettings) {\n onChangeSetting(setting, !settings[setting]);\n }\n\n function setOpenClassroomName(name: string) {\n if (name.length > MAX_OPEN_CLASSROOM_NAME_LENGTH) {\n setError(prev => ({\n ...prev,\n name: getPhrase('errorNameTooLong')\n }));\n } else {\n setError(prev => {\n delete prev.name;\n return prev;\n });\n }\n setName(name);\n }\n\n const loaded = sharedData.loaded\n && !!yearGroups.data;\n\n return {\n data: {\n loaded,\n entity: sharedData.entity,\n yearGroups: yearGroups\n },\n showHeader,\n hasStudentExp: sharedData.hasStudentExp,\n shouldShowSpinner: loading,\n nextButtonText: getPhrase('nextButton'),\n name,\n message,\n settings,\n setMessage,\n setShowHeader,\n toggleSetting,\n setOpenClassroomName,\n onShare,\n error,\n setError,\n isValid,\n openClassroomGatedPermission: sharedData.openClassroomGatedPermission\n };\n}","import React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\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';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { OpenClassroomFlowSettings } from './components/open-classroom-flow-settings/OpenClassroomFlowSettings';\nimport { useOpenClassroomFlowSettingsData } from './hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\n\nconst namespace = 'assign.openClassroomFlowSettingsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface OpenClassroomFlowSettingsViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n\n setShare: (share: Share) => void;\n goToFlowSelector: () => void;\n goToAssignDetails: () => void;\n hideBackButton?: boolean;\n}\n\nexport function OpenClassroomFlowSettingsView(props: OpenClassroomFlowSettingsViewProps): JSX.Element {\n const viewModel = useOpenClassroomFlowSettingsData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { experience, loading: isLoadingExperience } = useClassroomExperience();\n\n const {\n loaded,\n entity,\n yearGroups\n } = viewModel.data;\n\n const { log } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup\n }\n });\n\n function onClickNext() {\n viewModel.onShare(share => {\n // Create event is logged for EventAggregator to send emails - Sha\n log({\n type: 'create-open-classroom',\n share\n });\n // Share event is logged for continuity with the V1 share analytics - Sha\n log({\n type: 'share-open-classroom',\n id: share.objectId,\n shareId: share.shareId,\n shareType: share.type\n });\n \n props.setShare(share);\n props.goToAssignDetails();\n });\n }\n\n const loading = !loaded || isLoadingExperience || props.loading;\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={loading}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3'\n animation={props.animate}\n hideTitle={viewModel.openClassroomGatedPermission === 'soft-gate'}\n >\n {viewModel.openClassroomGatedPermission === 'soft-gate' &&\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3 mb-3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase('title')}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n }\n <OpenClassroomFlowSettings\n entity={entity.data}\n error={viewModel.error}\n showHeader={viewModel.showHeader}\n openClassroomName={viewModel.name}\n onChangeOpenClassroomName={viewModel.setOpenClassroomName}\n message={viewModel.message}\n yearGroups={yearGroups.data}\n hasStudentExp={viewModel.hasStudentExp}\n toggleMessage={viewModel.settings.message}\n immediateFeedback={viewModel.settings.immediateFeedback}\n preventScrubbing={viewModel.settings.preventScrubbing}\n toggleRequiresStudentSignIn={viewModel.settings.requiresStudentSignIn}\n toggleRespectRatingsAndRestrictions={viewModel.settings.respectRatingsAndRestrictions}\n hideMessage={true} // Message field does nothing atm for open classroom\n onChangeMessage={viewModel.setMessage}\n onToggleMessage={() => viewModel.toggleSetting('message')}\n hidePreventScrubbing={props.entityType !== 'interactive'}\n hideImmediateFeedback={props.entityType !== 'interactive'}\n hideRequiresStudentSignIn={experience !== 'full'}\n hideRespectRatingsAndRestrictions={experience !== 'full'}\n onTogglePreventScrubbing={() => viewModel.toggleSetting('preventScrubbing')}\n onToggleImmediateFeedback={() => viewModel.toggleSetting('immediateFeedback')}\n onToggleRequiresStudentSignIn={() => viewModel.toggleSetting('requiresStudentSignIn')}\n onToggleRespectRatingsAndRestrictions={() => viewModel.toggleSetting('respectRatingsAndRestrictions')}\n closeHeader={() => viewModel.setShowHeader(false)}\n disableRequiresStudentSignIn={viewModel.settings.respectRatingsAndRestrictions}\n />\n <FlowControls\n hideCreateClassroomButton\n hideBackButton={props.hideBackButton || viewModel.openClassroomGatedPermission === 'soft-gate'}\n onClickBack={props.goToFlowSelector}\n onClickNext={onClickNext}\n nextButtonText={viewModel.nextButtonText}\n showSpinner={viewModel.shouldShowSpinner}\n disableNextButton={!viewModel.isValid}\n />\n </Popup>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopup, MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\n\nimport { OpenClassroomFlowSteps } from 'apps/assign/interfaces/Assign';\nimport { HardGateOpenClassroomView } from 'apps/assign/views/hard-gate-open-classroom-view/HardGateOpenClassroomView';\n\nimport { AssignDetailsView, AssignDetailsViewProps } from '../assign-details-view/AssignDetailsView';\nimport { OpenClassroomFlowSettingsView, OpenClassroomFlowSettingsViewProps } from '../open-classroom-flow-settings-view/OpenClassroomFlowSettingsView';\n\ntype AllOpenClassroomFlowViewProps =\n & OpenClassroomFlowSettingsViewProps\n & AssignDetailsViewProps;\nexport interface OpenClassroomFlowViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToFlowSelector: () => void;\n openClassroomInitialStep: 'settings' | 'hard-gate';\n isEntry?: boolean;\n}\n\nexport function OpenClassroomFlowView(props: OpenClassroomFlowViewProps): JSX.Element {\n const [ flowStep, setFlowStep ] = React.useState<OpenClassroomFlowSteps>(props.openClassroomInitialStep);\n const [ share, setShare ] = React.useState<Share>();\n\n const data: AllOpenClassroomFlowViewProps = {\n objectId: props.objectId,\n entityType: props.entityType,\n closePopup: props.closePopup,\n goToFlowSelector: props.goToFlowSelector,\n \n shareId: share?.shareId,\n initialDetailsScreen: 'share-link',\n goToAssignDetails: () => setFlowStep('assign-details'),\n setShare\n };\n\n return (\n <MultiStepPopup<AllOpenClassroomFlowViewProps, OpenClassroomFlowSteps>\n data={data}\n animate={false}\n step={flowStep}\n setStep={setFlowStep}\n closePopup={props.closePopup}\n steps={{\n 'settings': { view: OpenClassroomFlowSettingsView },\n 'assign-details': { view: AssignDetailsView },\n 'hard-gate': { view: HardGateOpenClassroomView }\n }}\n />\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["getPhrase","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","length","name","getShareLinkAccessType","isTvContent","isClickViewContent","canManageAccess","namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","HardGateOpenClassroomView","HardGatePopup","feature","animate","closePopup","extraContent","FlowControls","onClickBack","goToFlowSelector","hideNextButton","hideCreateClassroomButton","OpenClassroomFlowInfoHeader","IconCircle","svgSize","SvgContainer","variant","textVariant","svgWrapperClassName","Text","IconButton","onClick","onClose","LanguageService","OpenClassroomFlowSettings","respectRatingText","showHeader","closeHeader","FlowSettings","title","openClassroomName","onChange","onChangeOpenClassroomName","placeholder","error","hide","hidePreventScrubbing","hideImmediateFeedback","description","onTogglePreventScrubbing","toggled","preventScrubbing","disabled","disablePreventScrubbing","onToggleImmediateFeedback","immediateFeedback","disableImmediateFeedback","hideRequiresStudentSignIn","hideRespectRatingsAndRestrictions","onToggleRequiresStudentSignIn","toggleRequiresStudentSignIn","disableRequiresStudentSignIn","onToggleRespectRatingsAndRestrictions","toggleRespectRatingsAndRestrictions","disableRespectRatingsAndRestrictions","hideMessage","childContainerClassName","onToggleMessage","toggleMessage","disableMessage","onChangeMessage","message","initialSettings","requiresStudentSignIn","respectRatingsAndRestrictions","MAX_OPEN_CLASSROOM_NAME_LENGTH","VIEW_MODEL_KEY","useOpenClassroomFlowSettingsData","alert","storage","setShowHeader","sharedData","useAssignSharedData","entityType","objectId","CustomerRequests","currentUser","data","customerId","createOpenSession","useCreateShare","interactive","settings","setSettings","setName","setMessage","loading","setLoading","setError","isValid","Object","keys","loaded","shouldShowSpinner","nextButtonText","toggleSetting","setting","newSettings","prev","onChangeSetting","setOpenClassroomName","onShare","onSuccess","requireSignIn","share","openClassroomGatedPermission","OpenClassroomFlowSettingsView","viewModel","useClassroomExperience","experience","isLoadingExperience","log","getAssignEventLogger","id","type","analyticsOptions","location","Popup","showLoadingSpinner","bodyClassName","animation","hideTitle","Modal","closeButton","as","hideBackButton","onClickNext","shareId","shareType","setShare","goToAssignDetails","showSpinner","disableNextButton","OpenClassroomFlowView","openClassroomInitialStep","flowStep","setFlowStep","initialDetailsScreen","MultiStepPopup","step","setStep","steps","view","AssignDetailsView","featureConfigMap","titlePhrase","headingPhrase","imageUrl","config","src","altText","appLink","application","action","analyticsData","actionType","descriptor"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/4006-2b689bdde0-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/projects/lite/src/apps/assign/views/hard-gate-open-classroom-view/HardGateOpenClassroomView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-info-header/OpenClassroomFlowInfoHeader.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/components/open-classroom-flow-settings/OpenClassroomFlowSettings.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData.ts","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-settings-view/OpenClassroomFlowSettingsView.tsx","file:///app/packages/projects/lite/src/apps/assign/views/open-classroom-flow-view/OpenClassroomFlowView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacy } from 'libs/shared/apps/share-v2/enums/SharePrivacy';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport type { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'sharev2.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacy;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\ninterface GetPrivateIconAndTextOptions {\n privacy: SharePrivacy;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetPrivateIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy) {\n case SharePrivacy.Public:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case SharePrivacy.ProtectedOverrideRestriction:\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n case SharePrivacy.Protected:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.JustMySchoolOverrideRestriction:\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n case SharePrivacy.JustMySchool:\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case SharePrivacy.PinCode:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('pinDescription') };\n case SharePrivacy.PasswordProtected:\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n },\n\n getShareLinkAccessType(privacy: SharePrivacyResponse): 'private' | 'owner' | 'protected' {\n /**\n * If an entity is not a ClickView content and they cannot manage access\n * settings of the entity (which they can if its their private entity)\n * it means that its a TV content\n */\n if (privacy.isTvContent || privacy.isClickViewContent)\n return 'protected';\n\n if (privacy.canManageAccess)\n return 'owner';\n\n return 'private';\n }\n};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","import React from 'react';\n\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\n\nexport interface HardGateOpenClassroomViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToFlowSelector: () => void;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title -- Title is rendered by HardGatePopup\nexport function HardGateOpenClassroomView(props: HardGateOpenClassroomViewProps): JSX.Element {\n return (\n <HardGatePopup\n feature='assign'\n animate={props.animate}\n closePopup={props.closePopup}\n extraContent={(\n <FlowControls\n onClickBack={props.goToFlowSelector}\n hideNextButton\n hideCreateClassroomButton\n />\n )}\n />\n );\n}","import React from 'react';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'assign.openClassroomFlowInfoHeader';\n\ninterface OpenClassroomFlowInfoHeaderProps {\n onClose: () => void;\n}\n\nexport function OpenClassroomFlowInfoHeader(props: OpenClassroomFlowInfoHeaderProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='p-3 bg-light-blue rounded rounded-2 gap-3 d-flex flex-row'>\n <div className='d-none d-md-block'>\n <div>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Standard}\n variant='blue'\n textVariant='white'\n svgWrapperClassName='p-1'\n />\n </div>\n </div>\n <div className='position-relative w-100'>\n <h3 className='h6'><Text phrase='title' /></h3>\n <p className='mb-0'><Text phrase='description' /></p>\n <div className='position-absolute top-0 end-0'>\n <IconButton svgName={cvSvgLibrary.Close} onClick={props.onClose} className='btn-close p-2' />\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareLinkHelper } from 'libs/shared/apps/share-v2/utils/ShareLinkHelper';\nimport { SharableEntity } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { FlowSettings } from 'apps/assign/components/flow-settings/FlowSettings';\n\nimport { OpenClassroomFlowSettingsError } from '../../hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\nimport { OpenClassroomFlowInfoHeader } from '../open-classroom-flow-info-header/OpenClassroomFlowInfoHeader';\n\nconst namespace = 'assign.openClassroomFlowSettings';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SettingsFieldProps {\n // Open classroom name field\n openClassroomName: string;\n onChangeOpenClassroomName: (name: string) => void;\n \n // Prevent scrubbing field\n hidePreventScrubbing?: boolean;\n disablePreventScrubbing?: boolean;\n onTogglePreventScrubbing: () => void;\n preventScrubbing: boolean;\n \n // Immediate feedback field\n hideImmediateFeedback?: boolean;\n disableImmediateFeedback?: boolean;\n onToggleImmediateFeedback: () => void;\n immediateFeedback: boolean;\n\n // Require student sign in field\n hideRequiresStudentSignIn?: boolean;\n disableRequiresStudentSignIn?: boolean;\n onToggleRequiresStudentSignIn: () => void;\n toggleRequiresStudentSignIn: boolean;\n\n // Respect ratings and restrictions field\n hideRespectRatingsAndRestrictions?: boolean;\n disableRespectRatingsAndRestrictions?: boolean;\n onToggleRespectRatingsAndRestrictions: () => void;\n toggleRespectRatingsAndRestrictions: boolean;\n \n // Message field\n hideMessage?: boolean;\n disableMessage?: boolean;\n message: string;\n onChangeMessage: (message: string) => void;\n onToggleMessage: () => void;\n toggleMessage: boolean;\n}\n\ninterface OpenClassroomFlowSettingsProps extends SettingsFieldProps {\n hasStudentExp: boolean;\n entity: SharableEntity;\n yearGroups: YearGroup[];\n closeHeader: () => void;\n showHeader: boolean;\n error: OpenClassroomFlowSettingsError;\n}\n\nexport function OpenClassroomFlowSettings(props: OpenClassroomFlowSettingsProps): JSX.Element {\n const respectRatingText = ShareLinkHelper.getRespectRatingText(\n props.entity,\n props.yearGroups,\n props.hasStudentExp\n );\n \n return (\n <div className='d-flex flex-column gap-4'>\n {props.showHeader &&\n <OpenClassroomFlowInfoHeader onClose={props.closeHeader} />\n }\n \n <FlowSettings>\n <FlowSettings.Input\n title={getPhrase('openClassroomNameTitle')}\n className='col-lg-6'\n value={props.openClassroomName}\n onChange={props.onChangeOpenClassroomName}\n placeholder={getPhrase('openClassroomNamePlaceholder')}\n error={props.error.name}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={props.hidePreventScrubbing && props.hideImmediateFeedback} />\n \n <FlowSettings\n name={getPhrase('videoSettingsTitle')}\n hide={props.hidePreventScrubbing && props.hideImmediateFeedback}\n >\n <FlowSettings.Toggle\n hide={props.hidePreventScrubbing}\n title={getPhrase('preventScrubbingTitle')}\n description={getPhrase('preventScrubbingDescription')}\n onClick={props.onTogglePreventScrubbing}\n toggled={props.preventScrubbing}\n disabled={props.disablePreventScrubbing}\n />\n <FlowSettings.Toggle\n hide={props.hideImmediateFeedback}\n title={getPhrase('immediateFeedbackTitle')}\n description={getPhrase('immediateFeedbackDescription')}\n onClick={props.onToggleImmediateFeedback}\n toggled={props.immediateFeedback}\n disabled={props.disableImmediateFeedback}\n />\n </FlowSettings>\n\n <FlowSettings.Divider hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions} />\n\n <FlowSettings\n name={getPhrase('studentAccessTitle')}\n hide={props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions}\n >\n <FlowSettings.Toggle\n hide={props.hideRequiresStudentSignIn}\n title={getPhrase('requiresStudentSignInTitle')}\n description={getPhrase('requiresStudentSignInDescription')}\n onClick={props.onToggleRequiresStudentSignIn}\n toggled={props.toggleRequiresStudentSignIn}\n disabled={props.disableRequiresStudentSignIn}\n />\n <FlowSettings.Toggle\n hide={props.hideRespectRatingsAndRestrictions}\n title={getPhrase('respectRatingsAndRestrictionsTitle')}\n description={respectRatingText}\n onClick={props.onToggleRespectRatingsAndRestrictions}\n toggled={props.toggleRespectRatingsAndRestrictions}\n disabled={props.disableRespectRatingsAndRestrictions}\n />\n </FlowSettings>\n \n <FlowSettings.Divider hide={\n (props.hideRequiresStudentSignIn && props.hideRespectRatingsAndRestrictions)\n || props.hideMessage}\n />\n \n <FlowSettings\n name={getPhrase('moreOptionsTitle')}\n hide={props.hideMessage}\n childContainerClassName='d-flex flex-column gap-2'\n >\n <FlowSettings.Toggle\n hide={props.hideMessage}\n title={getPhrase('messageTitle')}\n description={getPhrase('messageDescription')}\n onClick={props.onToggleMessage}\n toggled={props.toggleMessage}\n disabled={props.disableMessage}\n >\n <FlowSettings.TextArea\n hide={!props.toggleMessage}\n placeholder={getPhrase('messagePlaceholder')}\n onChange={props.onChangeMessage}\n value={props.message}\n />\n </FlowSettings.Toggle>\n </FlowSettings>\n \n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useCreateShare } from 'libs/shared/apps/share-v2/hooks/useCreateShare';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { YearGroup } from 'libs/shared/interfaces';\n\nimport { useAssignSharedData } from 'apps/assign/hooks/useAssignSharedData';\n\nconst namespace = 'assign.useOpenClassroomFlowData';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UseOpenClassroomFlowDataOptions {\n objectId: string;\n entityType: SharableEntityType;\n}\n\ntype OpenClassroomFlowSettings = 'preventScrubbing' | 'immediateFeedback' | 'requiresStudentSignIn' | 'respectRatingsAndRestrictions' | 'message';\ntype OpenClassroomFlowSettingsMap = {[key in OpenClassroomFlowSettings]: boolean};\nexport type OpenClassroomFlowSettingsError = {\n name?: string\n};\n\nconst initialSettings: OpenClassroomFlowSettingsMap = {\n immediateFeedback: false,\n preventScrubbing: false,\n message: false,\n requiresStudentSignIn: false,\n respectRatingsAndRestrictions: false\n};\n\nconst MAX_OPEN_CLASSROOM_NAME_LENGTH = 128;\n\nconst VIEW_MODEL_KEY = 'assign:open:classroom:flow:settings:header';\n\nexport function useOpenClassroomFlowSettingsData(options: UseOpenClassroomFlowDataOptions) {\n const alert = useAlerts();\n\n /**\n * We store this in Local storage so that if they user deliberatly\n * closes this we dont show this again\n */\n const [ showHeader, setShowHeader ] = useViewModel(VIEW_MODEL_KEY, true, { storage: StorageType.LocalStorage });\n \n const sharedData = useAssignSharedData({\n entityType: options.entityType,\n objectId: options.objectId\n });\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n CustomerRequests.yearGroups(sharedData.currentUser.data?.customerId)\n );\n\n const { createOpenSession } = useCreateShare(options.objectId);\n \n const [ settings, setSettings ] = React.useState<OpenClassroomFlowSettingsMap>({\n ...initialSettings,\n preventScrubbing: sharedData.interactive.data?.preventScrubbing || false,\n immediateFeedback: sharedData.interactive.data?.immediateFeedback || false\n });\n const [ name, setName ] = React.useState('');\n const [ message, setMessage ] = React.useState('');\n const [ loading, setLoading ] = React.useState(false);\n const [ error, setError ] = React.useState<OpenClassroomFlowSettingsError>({});\n\n const isValid = Object.keys(error).length === 0;\n\n function onChangeSetting(setting: OpenClassroomFlowSettings, value: boolean) {\n const newSettings: Partial<OpenClassroomFlowSettingsMap> = {\n [setting]: value\n };\n /*\n * If respect ratings and restrictions is toggled\n * we always toggle requires student sign in option too\n * - Nish\n */\n if (setting === 'respectRatingsAndRestrictions') {\n newSettings['requiresStudentSignIn'] = value;\n }\n \n setSettings(prev => ({\n ...prev,\n ...newSettings\n }));\n }\n\n async function onShare(onSuccess?: (share: Share) => void) {\n if (!isValid) {\n return;\n }\n\n setLoading(true);\n try {\n const share = await createOpenSession({\n name,\n objectId: options.objectId,\n immediateFeedback: settings.immediateFeedback,\n preventScrubbing: settings.preventScrubbing,\n requireSignIn: settings.requiresStudentSignIn,\n respectRatingsAndRestrictions: settings.respectRatingsAndRestrictions\n });\n\n typeof onSuccess === 'function' && onSuccess(share);\n \n setLoading(false);\n } catch (ex: unknown) {\n alert.error(getPhrase('createError'));\n } finally {\n setLoading(false);\n }\n }\n\n function toggleSetting(setting: OpenClassroomFlowSettings) {\n onChangeSetting(setting, !settings[setting]);\n }\n\n function setOpenClassroomName(name: string) {\n if (name.length > MAX_OPEN_CLASSROOM_NAME_LENGTH) {\n setError(prev => ({\n ...prev,\n name: getPhrase('errorNameTooLong')\n }));\n } else {\n setError(prev => {\n delete prev.name;\n return prev;\n });\n }\n setName(name);\n }\n\n const loaded = sharedData.loaded\n && !!yearGroups.data;\n\n return {\n data: {\n loaded,\n entity: sharedData.entity,\n yearGroups: yearGroups\n },\n showHeader,\n hasStudentExp: sharedData.hasStudentExp,\n shouldShowSpinner: loading,\n nextButtonText: getPhrase('nextButton'),\n name,\n message,\n settings,\n setMessage,\n setShowHeader,\n toggleSetting,\n setOpenClassroomName,\n onShare,\n error,\n setError,\n isValid,\n openClassroomGatedPermission: sharedData.openClassroomGatedPermission\n };\n}","import React from 'react';\nimport { Modal } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\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';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\n\nimport { useClassroomExperience } from 'shared/hooks/useClassroomExperience';\n\nimport { FlowControls } from 'apps/assign/components/flow-controls/FlowControls';\nimport { getAssignEventLogger } from 'apps/assign/utils/get-assign-event-logger/getAssignEventLogger';\n\nimport { OpenClassroomFlowSettings } from './components/open-classroom-flow-settings/OpenClassroomFlowSettings';\nimport { useOpenClassroomFlowSettingsData } from './hooks/use-open-classroom-flow-settings-data/useOpenClassroomFlowSettingsData';\n\nconst namespace = 'assign.openClassroomFlowSettingsView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface OpenClassroomFlowSettingsViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n\n setShare: (share: Share) => void;\n goToFlowSelector: () => void;\n goToAssignDetails: () => void;\n hideBackButton?: boolean;\n}\n\nexport function OpenClassroomFlowSettingsView(props: OpenClassroomFlowSettingsViewProps): JSX.Element {\n const viewModel = useOpenClassroomFlowSettingsData({\n entityType: props.entityType,\n objectId: props.objectId\n });\n\n const { experience, loading: isLoadingExperience } = useClassroomExperience();\n\n const {\n loaded,\n entity,\n yearGroups\n } = viewModel.data;\n\n const { log } = getAssignEventLogger({\n data: {\n entity: {\n id: props.objectId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup\n }\n });\n\n function onClickNext() {\n viewModel.onShare(share => {\n // Create event is logged for EventAggregator to send emails - Sha\n log({\n type: 'create-open-classroom',\n share\n });\n // Share event is logged for continuity with the V1 share analytics - Sha\n log({\n type: 'share-open-classroom',\n id: share.objectId,\n shareId: share.shareId,\n shareType: share.type\n });\n \n props.setShare(share);\n props.goToAssignDetails();\n });\n }\n\n const loading = !loaded || isLoadingExperience || props.loading;\n\n return (\n <Popup\n size='lg'\n title={getPhrase('title')}\n showLoadingSpinner={loading}\n closePopup={props.closePopup}\n bodyClassName='d-flex flex-column gap-3'\n animation={props.animate}\n hideTitle={viewModel.openClassroomGatedPermission === 'soft-gate'}\n >\n {viewModel.openClassroomGatedPermission === 'soft-gate' &&\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3 mb-3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase('title')}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n }\n <OpenClassroomFlowSettings\n entity={entity.data}\n error={viewModel.error}\n showHeader={viewModel.showHeader}\n openClassroomName={viewModel.name}\n onChangeOpenClassroomName={viewModel.setOpenClassroomName}\n message={viewModel.message}\n yearGroups={yearGroups.data}\n hasStudentExp={viewModel.hasStudentExp}\n toggleMessage={viewModel.settings.message}\n immediateFeedback={viewModel.settings.immediateFeedback}\n preventScrubbing={viewModel.settings.preventScrubbing}\n toggleRequiresStudentSignIn={viewModel.settings.requiresStudentSignIn}\n toggleRespectRatingsAndRestrictions={viewModel.settings.respectRatingsAndRestrictions}\n hideMessage={true} // Message field does nothing atm for open classroom\n onChangeMessage={viewModel.setMessage}\n onToggleMessage={() => viewModel.toggleSetting('message')}\n hidePreventScrubbing={props.entityType !== 'interactive'}\n hideImmediateFeedback={props.entityType !== 'interactive'}\n hideRequiresStudentSignIn={experience !== 'full'}\n hideRespectRatingsAndRestrictions={experience !== 'full'}\n onTogglePreventScrubbing={() => viewModel.toggleSetting('preventScrubbing')}\n onToggleImmediateFeedback={() => viewModel.toggleSetting('immediateFeedback')}\n onToggleRequiresStudentSignIn={() => viewModel.toggleSetting('requiresStudentSignIn')}\n onToggleRespectRatingsAndRestrictions={() => viewModel.toggleSetting('respectRatingsAndRestrictions')}\n closeHeader={() => viewModel.setShowHeader(false)}\n disableRequiresStudentSignIn={viewModel.settings.respectRatingsAndRestrictions}\n />\n <FlowControls\n hideCreateClassroomButton\n hideBackButton={props.hideBackButton || viewModel.openClassroomGatedPermission === 'soft-gate'}\n onClickBack={props.goToFlowSelector}\n onClickNext={onClickNext}\n nextButtonText={viewModel.nextButtonText}\n showSpinner={viewModel.shouldShowSpinner}\n disableNextButton={!viewModel.isValid}\n />\n </Popup>\n );\n}","import React from 'react';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { SharableEntityType } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MultiStepPopup, MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\n\nimport { OpenClassroomFlowSteps } from 'apps/assign/interfaces/Assign';\nimport { HardGateOpenClassroomView } from 'apps/assign/views/hard-gate-open-classroom-view/HardGateOpenClassroomView';\n\nimport { AssignDetailsView, AssignDetailsViewProps } from '../assign-details-view/AssignDetailsView';\nimport { OpenClassroomFlowSettingsView, OpenClassroomFlowSettingsViewProps } from '../open-classroom-flow-settings-view/OpenClassroomFlowSettingsView';\n\ntype AllOpenClassroomFlowViewProps =\n & OpenClassroomFlowSettingsViewProps\n & AssignDetailsViewProps;\nexport interface OpenClassroomFlowViewProps extends MultiStepPopupViewProps {\n objectId: string;\n entityType: SharableEntityType;\n goToFlowSelector: () => void;\n openClassroomInitialStep: 'settings' | 'hard-gate';\n isEntry?: boolean;\n}\n\nexport function OpenClassroomFlowView(props: OpenClassroomFlowViewProps): JSX.Element {\n const [ flowStep, setFlowStep ] = React.useState<OpenClassroomFlowSteps>(props.openClassroomInitialStep);\n const [ share, setShare ] = React.useState<Share>();\n\n const data: AllOpenClassroomFlowViewProps = {\n objectId: props.objectId,\n entityType: props.entityType,\n closePopup: props.closePopup,\n goToFlowSelector: props.goToFlowSelector,\n \n shareId: share?.shareId,\n initialDetailsScreen: 'share-link',\n goToAssignDetails: () => setFlowStep('assign-details'),\n setShare\n };\n\n return (\n <MultiStepPopup<AllOpenClassroomFlowViewProps, OpenClassroomFlowSteps>\n data={data}\n animate={false}\n step={flowStep}\n setStep={setFlowStep}\n closePopup={props.closePopup}\n steps={{\n 'settings': { view: OpenClassroomFlowSettingsView },\n 'assign-details': { view: AssignDetailsView },\n 'hard-gate': { view: HardGateOpenClassroomView }\n }}\n />\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["getPhrase","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","length","name","getShareLinkAccessType","isTvContent","isClickViewContent","canManageAccess","namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","HardGateOpenClassroomView","HardGatePopup","feature","animate","closePopup","extraContent","FlowControls","onClickBack","goToFlowSelector","hideNextButton","hideCreateClassroomButton","OpenClassroomFlowInfoHeader","IconCircle","svgSize","SvgContainer","variant","textVariant","svgWrapperClassName","Text","IconButton","onClick","onClose","LanguageService","OpenClassroomFlowSettings","respectRatingText","showHeader","closeHeader","FlowSettings","title","openClassroomName","onChange","onChangeOpenClassroomName","placeholder","error","hide","hidePreventScrubbing","hideImmediateFeedback","description","onTogglePreventScrubbing","toggled","preventScrubbing","disabled","disablePreventScrubbing","onToggleImmediateFeedback","immediateFeedback","disableImmediateFeedback","hideRequiresStudentSignIn","hideRespectRatingsAndRestrictions","onToggleRequiresStudentSignIn","toggleRequiresStudentSignIn","disableRequiresStudentSignIn","onToggleRespectRatingsAndRestrictions","toggleRespectRatingsAndRestrictions","disableRespectRatingsAndRestrictions","hideMessage","childContainerClassName","onToggleMessage","toggleMessage","disableMessage","onChangeMessage","message","initialSettings","requiresStudentSignIn","respectRatingsAndRestrictions","MAX_OPEN_CLASSROOM_NAME_LENGTH","VIEW_MODEL_KEY","useOpenClassroomFlowSettingsData","alert","storage","setShowHeader","sharedData","useAssignSharedData","entityType","objectId","CustomerRequests","currentUser","data","customerId","createOpenSession","useCreateShare","interactive","settings","setSettings","setName","setMessage","loading","setLoading","setError","isValid","Object","keys","loaded","shouldShowSpinner","nextButtonText","toggleSetting","setting","newSettings","prev","onChangeSetting","setOpenClassroomName","onShare","onSuccess","requireSignIn","share","openClassroomGatedPermission","OpenClassroomFlowSettingsView","viewModel","useClassroomExperience","experience","isLoadingExperience","log","getAssignEventLogger","id","type","analyticsOptions","location","Popup","showLoadingSpinner","bodyClassName","animation","hideTitle","Modal","closeButton","as","hideBackButton","onClickNext","shareId","shareType","setShare","goToAssignDetails","showSpinner","disableNextButton","OpenClassroomFlowView","openClassroomInitialStep","flowStep","setFlowStep","initialDetailsScreen","MultiStepPopup","step","setStep","steps","view","AssignDetailsView","featureConfigMap","titlePhrase","headingPhrase","imageUrl","config","src","altText","appLink","application","action","analyticsData","actionType","descriptor"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5712],{49927:(e,t,a)=>{a.d(t,{u:()=>l});var i=a(57900),n=a(70064),s=function(e){return"recent:playlists:added:to:".concat(e)},l={getRecentlyAddedTo:function(e){return n.V.getRecentItem(s(e),i.SG)},addRecentlyAddedTo:function(e,t){return n.V.addRecentItem(s(e),i.SG,t)},removeRecentlyAddedTo:function(e,t){n.V.removeRecentItem(s(e),t,i.SG)}}},53172:(e,t,a)=>{a.d(t,{l:()=>o});var i=a(32735),n=a(31453),s=a(83914),l=a(83345),c=a(35223),r="shared.premiumBadge";function o(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(s.x,{svgName:c.vn.StarOutline,size:s.S.Medium}),i.createElement(l.x,{phrase:"premium",namespace:r}))}},63403:(e,t,a)=>{a.r(t),a.d(t,{AddToPlaylistView:()=>
|
|
2
|
-
//# sourceMappingURL=5712-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5712],{49927:(e,t,a)=>{a.d(t,{u:()=>l});var i=a(57900),n=a(70064),s=function(e){return"recent:playlists:added:to:".concat(e)},l={getRecentlyAddedTo:function(e){return n.V.getRecentItem(s(e),i.SG)},addRecentlyAddedTo:function(e,t){return n.V.addRecentItem(s(e),i.SG,t)},removeRecentlyAddedTo:function(e,t){n.V.removeRecentItem(s(e),t,i.SG)}}},53172:(e,t,a)=>{a.d(t,{l:()=>o});var i=a(32735),n=a(31453),s=a(83914),l=a(83345),c=a(35223),r="shared.premiumBadge";function o(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(s.x,{svgName:c.vn.StarOutline,size:s.S.Medium}),i.createElement(l.x,{phrase:"premium",namespace:r}))}},63403:(e,t,a)=>{a.r(t),a.d(t,{AddToPlaylistView:()=>F});var i=a(32735),n=a(37241),s=a(70680),l=a(60139),c=a(23481),r=a(20354),o=a(28400),d=a(49985),m=a(65858),p=a(76611),u=a(70006),g=a(49927),y=a(9111),h=a(53172),P=a(83345),f=a(16714),T=a(1666),v=a(5112),E=a(31949),I=a(69883),x=a(3010),C=a(22902),N=a(45719),w=a(64695),S=a(65185),k=a(14070),L=a(97291),A=a(63172),R=a(52931),b="playlists.addToPlaylist",U=c.T.encloseNamespace(b),V=function(e){return v.C.getUserPlaylists(new u.l(p.o.AtoZ,e))},G=function(e,t){return function(a){return v.C.getVideoPlaylists(e,t,a)}};function F(e){var t,a=(0,s.I0)(),c=(0,I.Z)(),p=r.a.useBasicFetch(E.N.currentUser()),u=r.a.useBasicFetch(v.C.getVideoCandidate(e.videoId)),F=(0,N.P)(function(e){return V(e).key}),Z=(0,N.P)(function(t){return!!e.videoId&&!!p.data&&G(e.videoId,p.data.id)(t).key}),H=r.a.useBasicFetch((null===(t=p.data)||void 0===t?void 0:t.isAuthenticated)&&T.h.yearGroups(p.data.customerId)),B=(0,C.T)(),O=B.hasPermissions,z=B.getGatedPermission,Y=B.isLoaded,_=O(f.C.StudentExperience),j=!!Z.items&&Z.items.map(function(e){return e.id});(0,x.i)(V,function(e){r.a.getFetch(a)(V(e))}),(0,x.i)(!!p.data&&G(e.videoId,p.data.id),!!p.data&&function(t){r.a.getFetch(a)(G(e.videoId,p.data.id)(t))});var W=function(t,i){r.a.fetch(a,v.C.addToPlaylist(t.id,[u.data],function(){c.success({heading:S.R.Success,type:l.NK.Success,message:U(i?"successNew":"success",{video:u.data.name,playlist:t.name,escapeText:!0}),appLink:{application:L.O.PLAYLISTS,action:k.e.Playlists.PLAYLIST,args:[t.id,o.m.slugify(t.name)]},appLinkText:U("goToPlaylist",{playlist:t.name,escapeText:!0}),appLinkClassName:"info-link"}),d.k.logUserAction({id:u.data.id,name:u.data.name,playlistId:t.id,playlistName:t.name},{actionType:m.Vw.Associate,entity:m.py.Video,descriptor:m.iF.Playlist,workflowPhase:m.eu.Complete,location:m.LZ.Popup}),g.u.addRecentlyAddedTo(p.data.id,{id:t.id}),i&&e.closePopup()},function(e){"playlist-limit-exceeded"===e.responseJSON.type?c.error(U("playlistLimitExceeded")):c.error(U("addError",{video:u.data.name,playlist:t.name,escapeText:!0}))}))},M=!!u.data&&!!F.items&&!F.nextCursor&&!!p.data&&!!Z.items&&!Z.nextCursor&&H.hasCompleted&&Y;return"hard-gate"===z(f.C.CreatePlaylist)?i.createElement(w.q,{feature:"playlists",animate:!1,closePopup:e.closePopup}):i.createElement(y.G,{title:U("heading"),closePopup:e.closePopup,showLoadingSpinner:!M||null===screen,hideTitle:"soft-gate"===z(f.C.CreatePlaylist)},"soft-gate"===z(f.C.CreatePlaylist)&&i.createElement(n.Z.Header,{className:"d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3 mb-3",closeButton:!0},i.createElement(n.Z.Title,{as:"h2",className:"h4 flex-grow-1 d-flex justify-content-between align-items-center"},U("heading"),i.createElement("span",{className:"d-inline-block me-2"},i.createElement(h.l,{size:"std"})))),M?i.createElement(i.Fragment,null,F.items.length?i.createElement("div",{className:"mb-2"},i.createElement(P.x,{namespace:b,phrase:"selectPlaylist",options:{video:u.data.name}})):i.createElement(R.v,{isStudent:_,headingClassName:"h4",imageSize:"small",className:"py-2",hideButton:!0}),i.createElement(A.o,{playlists:F.items,currentUserId:p.data.id,onSelectPlaylist:function(t){j.includes(t.id)?function(t){r.a.fetch(a,v.C.removePlaylistVideo(t.id,u.data.id,u.data.typeId,function(){c.success({heading:S.R.Success,type:l.NK.Success,message:U("successRemove",{video:u.data.name,playlist:t.name,escapeText:!0}),appLink:{application:L.O.PLAYLISTS,action:k.e.Playlists.PLAYLIST,args:[t.id,o.m.slugify(t.name)]},appLinkText:U("goToPlaylist",{playlist:t.name,escapeText:!0}),appLinkClassName:"info-link"}),d.k.logUserAction({id:u.data.id,playlistId:t.id},{actionType:m.Vw.Dissociate,entity:m.py.Video,descriptor:m.iF.Playlist,workflowPhase:m.eu.Complete,location:m.LZ.Popup})},function(){c.error(U("removeError",{video:u.data.name,playlist:t.name,escapeText:!0})),e.closePopup()}))}(t):W(t)},isVideoInPlaylist:function(e){return j.includes(e.id)},createPlaylist:function(t){r.a.fetch(a,v.C.createPlaylist(p.data.id,{name:t},function(e){e&&e.id&&(d.k.logUserAction({id:e.id},{actionType:m.Vw.Create,entity:m.py.Playlist,workflowPhase:m.eu.Complete,location:m.LZ.Popup}),W(e,!0))},function(){c.error(U("createError",{video:u.data.name,playlist:t,escapeText:!0})),e.closePopup()}))}})):i.createElement(i.Fragment,null))}},64695:(e,t,a)=>{a.d(t,{q:()=>f});var i=a(32735),n=a(37241),s=a(68050),l=a(23481),c=a(65858),r=a(97958),o=a(9111),d=a(53172),m=a(83345),p=a(99742),u=a(14070),g=a(97291),y="shared.hardGatePopup",h=l.T.encloseNamespace(y),P={assign:{titlePhrase:"assignTitle",headingPhrase:"assignHeading",imageUrl:p.W.ReverseTrial.ASSIGN},playlists:{titlePhrase:"playlistsTitle",headingPhrase:"playlistsHeading",imageUrl:p.W.ReverseTrial.PLAYLIST},interactive:{titlePhrase:"interactiveTitle",headingPhrase:"interactiveHeading",imageUrl:p.W.ReverseTrial.INTERACTIVE},"copy-interactives":{titlePhrase:"copyInteractiveTitle",headingPhrase:"copyInteractiveHeading",imageUrl:p.W.ReverseTrial.INTERACTIVE},integrations:{titlePhrase:"integrationsTitle",headingPhrase:"integrationsHeading",imageUrl:p.W.ReverseTrial.INTEGRATIONS}};function f(e){var t=P[e.feature];return i.createElement(o.G,{size:"lg",animation:e.animate,closePopup:e.closePopup,hideTitle:!0},i.createElement(n.Z.Header,{className:"d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3",closeButton:!0},i.createElement(n.Z.Title,{as:"h2",className:"h4 flex-grow-1 d-flex justify-content-between align-items-center"},h(t.titlePhrase),i.createElement("span",{className:"d-inline-block me-2"},i.createElement(d.l,{size:"std"})))),i.createElement(s.Z,{className:"mb-3"},i.createElement(r.u,{className:"pt-3"},i.createElement(r.u.Image,{src:t.imageUrl,altText:h(t.titlePhrase)}),i.createElement(r.u.Heading,{className:"h6"},i.createElement(m.x,{namespace:y,phrase:t.headingPhrase})),i.createElement(r.u.Info,null,i.createElement(m.x,{namespace:y,phrase:"description"})),i.createElement(r.u.Cta,{appLink:{application:g.O.SIGN_UP,action:u.e.SignUp.PREMIUM_FEATURES},text:h("cta"),analyticsData:{},analyticsOptions:{actionType:c.Vw.Click,location:c.LZ.GatedPopup,entity:c.py.AppLink,descriptor:c.Yu.PremiumFeatures}}))),e.extraContent)}}}]);
|
|
2
|
+
//# sourceMappingURL=5712-fd1a7d8d6a-lite.chunk.js.map
|
package/dist/scripts/{5712-37a97adc65-lite.chunk.js.map → 5712-fd1a7d8d6a-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/5712-37a97adc65-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/playlists/utils/RecentPlaylistHelper.ts","file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/projects/lite/src/apps/playlists/views/add-to-playlist/AddToPlaylistView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nconst getCacheKey = (userId: string) => `recent:playlists:added:to:${userId}`;\n\ninterface AddRecentPlaylistsOptions {\n id: string;\n limit?: number;\n}\n\nexport const RecentPlaylistHelper = {\n /**\n * Get a list of ids of playlists recently added to.\n */\n getRecentlyAddedTo(userId: string): string[] {\n return RecentItemHelper.getRecentItem(getCacheKey(userId), LocalStorageHelper);\n },\n\n addRecentlyAddedTo(userId: string, options: AddRecentPlaylistsOptions): string[] {\n return RecentItemHelper.addRecentItem(getCacheKey(userId), LocalStorageHelper, options);\n },\n\n removeRecentlyAddedTo(userId: string, id: string): void {\n RecentItemHelper.removeRecentItem(getCacheKey(userId), id, LocalStorageHelper);\n }\n};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { PlaylistCollectionIdentifier } from 'libs/shared/apps/playlists/interfaces/identifiers/PlaylistCollectionIdentifier';\nimport { RecentPlaylistHelper } from 'libs/shared/apps/playlists/utils/RecentPlaylistHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { CurrentUser, Playlist, PopupViewProps, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { ObjectApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SelectPlaylist } from 'apps/playlists/components/select-playlist/SelectPlaylist';\nimport { PlaylistsEmptyState } from 'apps/playlists/views/playlists/empty-state/PlaylistsEmptyState';\n\nconst namespace = 'playlists.addToPlaylist';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getPlaylistsRequest = (cursor?: string) =>\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier(PlaylistSortType.AtoZ, cursor));\n\nconst getVideoPlaylistsRequest = (videoId: string, userId: string) => (cursor?: string) =>\n PlaylistRequests.getVideoPlaylists(videoId, userId, cursor);\n\ninterface AddToPlaylistViewProps {\n videoId?: string;\n}\n\nexport function AddToPlaylistView(props: AddToPlaylistViewProps & PopupViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<VideoTypes>(PlaylistRequests.getVideoCandidate(props.videoId));\n const playlists = useSelectAllPages<Playlist>((cursor?: string) => getPlaylistsRequest(cursor).key);\n const videoPlaylists = useSelectAllPages<Playlist>((cursor?: string) =>\n !!props.videoId && !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor).key);\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const { hasPermissions, getGatedPermission, isLoaded } = usePermissions();\n\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const videoPlaylistIds = !!videoPlaylists.items && videoPlaylists.items.map(p => p.id);\n\n const fetchNextPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getPlaylistsRequest(cursor));\n };\n\n const fetchNextVideoPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor));\n };\n\n useFetchAll(getPlaylistsRequest, fetchNextPlaylists);\n useFetchAll(\n !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id),\n !!currentUser.data && fetchNextVideoPlaylists\n );\n\n const addToPlaylist = (playlist: Playlist, isNew?: boolean) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase(isNew ? 'successNew' : 'success', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name,\n playlistId: playlist.id,\n playlistName: playlist.name\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n RecentPlaylistHelper.addRecentlyAddedTo(currentUser.data.id, { id: playlist.id });\n\n if (isNew)\n props.closePopup();\n };\n\n const onError = (xhr: ObjectApiXhr) => {\n if (xhr.responseJSON.type === 'playlist-limit-exceeded')\n alerts.error(getPhrase('playlistLimitExceeded'));\n else\n alerts.error(getPhrase('addError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n };\n\n Flight.fetch(dispatch, PlaylistRequests.addToPlaylist(playlist.id, [video.data], onSuccess, onError));\n };\n\n const removeFromPlaylist = (playlist: Playlist) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase('successRemove', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({ id: video.data.id, playlistId: playlist.id }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n };\n\n const onError = () => {\n alerts.error(getPhrase('removeError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n props.closePopup();\n };\n\n Flight.fetch(dispatch, PlaylistRequests.removePlaylistVideo(\n playlist.id,\n video.data.id,\n video.data.typeId,\n onSuccess,\n onError\n ));\n };\n\n const createPlaylist = (name: string) => {\n Flight.fetch(dispatch, PlaylistRequests.createPlaylist(currentUser.data.id, { name }, (newPlaylist: Playlist) => {\n if (!newPlaylist || !newPlaylist.id)\n return;\n\n AnalyticsHelper.logUserAction({ id: newPlaylist.id }, {\n actionType: UserAction.Create,\n entity: EntityType.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n addToPlaylist(newPlaylist, true);\n }, () => {\n alerts.error(getPhrase('createError', { video: video.data.name, playlist: name, escapeText: true }));\n props.closePopup();\n }));\n };\n\n const onSelectPlaylist = (playlist: Playlist) => {\n if (videoPlaylistIds.includes(playlist.id)) {\n removeFromPlaylist(playlist);\n return;\n }\n\n addToPlaylist(playlist);\n };\n\n const dataLoaded = !!video.data\n && !!playlists.items\n && !playlists.nextCursor\n && !!currentUser.data\n && !!videoPlaylists.items\n && !videoPlaylists.nextCursor\n && yearGroups.hasCompleted\n && isLoaded;\n\n if (getGatedPermission(PermissionName.CreatePlaylist) === 'hard-gate') {\n return (\n <HardGatePopup\n feature='playlists'\n animate={false}\n closePopup={props.closePopup}\n />\n );\n }\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded || screen === null}\n hideTitle={getGatedPermission(PermissionName.CreatePlaylist) === 'soft-gate'}\n >\n {getGatedPermission(PermissionName.CreatePlaylist) === 'soft-gate' &&\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3 mb-3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase('heading')}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n }\n {(() => {\n if (!dataLoaded)\n return <></>;\n\n return (\n <>\n {playlists.items.length\n ? (\n <div className='mb-2'>\n <Text namespace={namespace} phrase='selectPlaylist' options={{ video: video.data.name }} />\n </div>\n )\n : (\n <PlaylistsEmptyState\n isStudent={isStudent}\n headingClassName='h4'\n imageSize='small'\n className='py-2'\n hideButton\n />\n )\n }\n <SelectPlaylist\n playlists={playlists.items}\n currentUserId={currentUser.data.id}\n onSelectPlaylist={onSelectPlaylist}\n isVideoInPlaylist={(playlist: Playlist) => (videoPlaylistIds.includes(playlist.id))}\n createPlaylist={createPlaylist}\n />\n </>\n );\n })()}\n </Popup>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.INVITE_COLLEAGUE\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["getCacheKey","userId","RecentPlaylistHelper","getRecentlyAddedTo","addRecentlyAddedTo","options","removeRecentlyAddedTo","id","namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","getPhrase","getPlaylistsRequest","cursor","getVideoPlaylistsRequest","videoId","AddToPlaylistView","dispatch","alerts","currentUser","video","playlists","key","videoPlaylists","data","yearGroups","isAuthenticated","customerId","hasPermissions","getGatedPermission","isLoaded","isStudent","videoPlaylistIds","items","map","p","addToPlaylist","playlist","isNew","success","heading","type","message","name","escapeText","appLink","application","action","args","appLinkText","appLinkClassName","playlistId","playlistName","actionType","entity","descriptor","workflowPhase","location","closePopup","xhr","responseJSON","error","dataLoaded","nextCursor","hasCompleted","feature","animate","title","showLoadingSpinner","screen","hideTitle","closeButton","as","length","headingClassName","imageSize","hideButton","currentUserId","onSelectPlaylist","includes","typeId","removeFromPlaylist","isVideoInPlaylist","createPlaylist","newPlaylist","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","animation","src","altText","text","analyticsData","analyticsOptions","extraContent"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/5712-fd1a7d8d6a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/playlists/utils/RecentPlaylistHelper.ts","file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/projects/lite/src/apps/playlists/views/add-to-playlist/AddToPlaylistView.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx"],"sourcesContent":["import { LocalStorageHelper } from 'libs/common/backbone/utils/LocalStorageHelper';\n\nimport { RecentItemHelper } from 'libs/shared/utils/RecentItemHelper';\n\nconst getCacheKey = (userId: string) => `recent:playlists:added:to:${userId}`;\n\ninterface AddRecentPlaylistsOptions {\n id: string;\n limit?: number;\n}\n\nexport const RecentPlaylistHelper = {\n /**\n * Get a list of ids of playlists recently added to.\n */\n getRecentlyAddedTo(userId: string): string[] {\n return RecentItemHelper.getRecentItem(getCacheKey(userId), LocalStorageHelper);\n },\n\n addRecentlyAddedTo(userId: string, options: AddRecentPlaylistsOptions): string[] {\n return RecentItemHelper.addRecentItem(getCacheKey(userId), LocalStorageHelper, options);\n },\n\n removeRecentlyAddedTo(userId: string, id: string): void {\n RecentItemHelper.removeRecentItem(getCacheKey(userId), id, LocalStorageHelper);\n }\n};","import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { AlertType } from 'libs/common/backbone/services/BaseAlertService';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { PlaylistCollectionIdentifier } from 'libs/shared/apps/playlists/interfaces/identifiers/PlaylistCollectionIdentifier';\nimport { RecentPlaylistHelper } from 'libs/shared/apps/playlists/utils/RecentPlaylistHelper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSelectAllPages } from 'libs/shared/hooks/UseSelectAllPages';\nimport { CurrentUser, Playlist, PopupViewProps, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { ObjectApiXhr } from 'libs/shared/interfaces/responses/ErrorResponse';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\nimport { DefaultAlertHeading } from 'shared/constants/DefaultAlertHeading';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SelectPlaylist } from 'apps/playlists/components/select-playlist/SelectPlaylist';\nimport { PlaylistsEmptyState } from 'apps/playlists/views/playlists/empty-state/PlaylistsEmptyState';\n\nconst namespace = 'playlists.addToPlaylist';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getPlaylistsRequest = (cursor?: string) =>\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier(PlaylistSortType.AtoZ, cursor));\n\nconst getVideoPlaylistsRequest = (videoId: string, userId: string) => (cursor?: string) =>\n PlaylistRequests.getVideoPlaylists(videoId, userId, cursor);\n\ninterface AddToPlaylistViewProps {\n videoId?: string;\n}\n\nexport function AddToPlaylistView(props: AddToPlaylistViewProps & PopupViewProps): JSX.Element {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<VideoTypes>(PlaylistRequests.getVideoCandidate(props.videoId));\n const playlists = useSelectAllPages<Playlist>((cursor?: string) => getPlaylistsRequest(cursor).key);\n const videoPlaylists = useSelectAllPages<Playlist>((cursor?: string) =>\n !!props.videoId && !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor).key);\n\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const { hasPermissions, getGatedPermission, isLoaded } = usePermissions();\n\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const videoPlaylistIds = !!videoPlaylists.items && videoPlaylists.items.map(p => p.id);\n\n const fetchNextPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getPlaylistsRequest(cursor));\n };\n\n const fetchNextVideoPlaylists = (cursor?: string) => {\n Flight.getFetch(dispatch)(getVideoPlaylistsRequest(props.videoId, currentUser.data.id)(cursor));\n };\n\n useFetchAll(getPlaylistsRequest, fetchNextPlaylists);\n useFetchAll(\n !!currentUser.data && getVideoPlaylistsRequest(props.videoId, currentUser.data.id),\n !!currentUser.data && fetchNextVideoPlaylists\n );\n\n const addToPlaylist = (playlist: Playlist, isNew?: boolean) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase(isNew ? 'successNew' : 'success', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name,\n playlistId: playlist.id,\n playlistName: playlist.name\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n RecentPlaylistHelper.addRecentlyAddedTo(currentUser.data.id, { id: playlist.id });\n\n if (isNew)\n props.closePopup();\n };\n\n const onError = (xhr: ObjectApiXhr) => {\n if (xhr.responseJSON.type === 'playlist-limit-exceeded')\n alerts.error(getPhrase('playlistLimitExceeded'));\n else\n alerts.error(getPhrase('addError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n };\n\n Flight.fetch(dispatch, PlaylistRequests.addToPlaylist(playlist.id, [video.data], onSuccess, onError));\n };\n\n const removeFromPlaylist = (playlist: Playlist) => {\n const onSuccess = () => {\n alerts.success({\n heading: DefaultAlertHeading.Success,\n type: AlertType.Success,\n message: getPhrase('successRemove', { video: video.data.name, playlist: playlist.name, escapeText: true }),\n appLink: {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n },\n appLinkText: getPhrase('goToPlaylist', { playlist: playlist.name, escapeText: true }),\n appLinkClassName: 'info-link'\n });\n\n AnalyticsHelper.logUserAction({ id: video.data.id, playlistId: playlist.id }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Video,\n descriptor: AssocDescriptor.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n };\n\n const onError = () => {\n alerts.error(getPhrase('removeError', { video: video.data.name, playlist: playlist.name, escapeText: true }));\n props.closePopup();\n };\n\n Flight.fetch(dispatch, PlaylistRequests.removePlaylistVideo(\n playlist.id,\n video.data.id,\n video.data.typeId,\n onSuccess,\n onError\n ));\n };\n\n const createPlaylist = (name: string) => {\n Flight.fetch(dispatch, PlaylistRequests.createPlaylist(currentUser.data.id, { name }, (newPlaylist: Playlist) => {\n if (!newPlaylist || !newPlaylist.id)\n return;\n\n AnalyticsHelper.logUserAction({ id: newPlaylist.id }, {\n actionType: UserAction.Create,\n entity: EntityType.Playlist,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n\n addToPlaylist(newPlaylist, true);\n }, () => {\n alerts.error(getPhrase('createError', { video: video.data.name, playlist: name, escapeText: true }));\n props.closePopup();\n }));\n };\n\n const onSelectPlaylist = (playlist: Playlist) => {\n if (videoPlaylistIds.includes(playlist.id)) {\n removeFromPlaylist(playlist);\n return;\n }\n\n addToPlaylist(playlist);\n };\n\n const dataLoaded = !!video.data\n && !!playlists.items\n && !playlists.nextCursor\n && !!currentUser.data\n && !!videoPlaylists.items\n && !videoPlaylists.nextCursor\n && yearGroups.hasCompleted\n && isLoaded;\n\n if (getGatedPermission(PermissionName.CreatePlaylist) === 'hard-gate') {\n return (\n <HardGatePopup\n feature='playlists'\n animate={false}\n closePopup={props.closePopup}\n />\n );\n }\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n showLoadingSpinner={!dataLoaded || screen === null}\n hideTitle={getGatedPermission(PermissionName.CreatePlaylist) === 'soft-gate'}\n >\n {getGatedPermission(PermissionName.CreatePlaylist) === 'soft-gate' &&\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3 mb-3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase('heading')}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n }\n {(() => {\n if (!dataLoaded)\n return <></>;\n\n return (\n <>\n {playlists.items.length\n ? (\n <div className='mb-2'>\n <Text namespace={namespace} phrase='selectPlaylist' options={{ video: video.data.name }} />\n </div>\n )\n : (\n <PlaylistsEmptyState\n isStudent={isStudent}\n headingClassName='h4'\n imageSize='small'\n className='py-2'\n hideButton\n />\n )\n }\n <SelectPlaylist\n playlists={playlists.items}\n currentUserId={currentUser.data.id}\n onSelectPlaylist={onSelectPlaylist}\n isVideoInPlaylist={(playlist: Playlist) => (videoPlaylistIds.includes(playlist.id))}\n createPlaylist={createPlaylist}\n />\n </>\n );\n })()}\n </Popup>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n"],"names":["getCacheKey","userId","RecentPlaylistHelper","getRecentlyAddedTo","addRecentlyAddedTo","options","removeRecentlyAddedTo","id","namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","getPhrase","getPlaylistsRequest","cursor","getVideoPlaylistsRequest","videoId","AddToPlaylistView","dispatch","alerts","currentUser","video","playlists","key","videoPlaylists","data","yearGroups","isAuthenticated","customerId","hasPermissions","getGatedPermission","isLoaded","isStudent","videoPlaylistIds","items","map","p","addToPlaylist","playlist","isNew","success","heading","type","message","name","escapeText","appLink","application","action","args","appLinkText","appLinkClassName","playlistId","playlistName","actionType","entity","descriptor","workflowPhase","location","closePopup","xhr","responseJSON","error","dataLoaded","nextCursor","hasCompleted","feature","animate","title","showLoadingSpinner","screen","hideTitle","closeButton","as","length","headingClassName","imageSize","hideButton","currentUserId","onSelectPlaylist","includes","typeId","removeFromPlaylist","isVideoInPlaylist","createPlaylist","newPlaylist","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","animation","src","altText","text","analyticsData","analyticsOptions","extraContent"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[639],{53172:(e,t,a)=>{a.d(t,{l:()=>m});var i=a(32735),n=a(31453),r=a(83914),s=a(83345),l=a(35223),c="shared.premiumBadge";function m(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(r.x,{svgName:l.vn.StarOutline,size:r.S.Medium}),i.createElement(s.x,{phrase:"premium",namespace:c}))}},64695:(e,t,a)=>{a.d(t,{q:()=>T});var i=a(32735),n=a(37241),r=a(68050),s=a(23481),l=a(65858),c=a(97958),m=a(9111),p=a(53172),g=a(83345),o=a(99742),d=a(14070),u=a(97291),h="shared.hardGatePopup",E=s.T.encloseNamespace(h),P={assign:{titlePhrase:"assignTitle",headingPhrase:"assignHeading",imageUrl:o.W.ReverseTrial.ASSIGN},playlists:{titlePhrase:"playlistsTitle",headingPhrase:"playlistsHeading",imageUrl:o.W.ReverseTrial.PLAYLIST},interactive:{titlePhrase:"interactiveTitle",headingPhrase:"interactiveHeading",imageUrl:o.W.ReverseTrial.INTERACTIVE},"copy-interactives":{titlePhrase:"copyInteractiveTitle",headingPhrase:"copyInteractiveHeading",imageUrl:o.W.ReverseTrial.INTERACTIVE},integrations:{titlePhrase:"integrationsTitle",headingPhrase:"integrationsHeading",imageUrl:o.W.ReverseTrial.INTEGRATIONS}};function T(e){var t=P[e.feature];return i.createElement(m.G,{size:"lg",animation:e.animate,closePopup:e.closePopup,hideTitle:!0},i.createElement(n.Z.Header,{className:"d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3",closeButton:!0},i.createElement(n.Z.Title,{as:"h2",className:"h4 flex-grow-1 d-flex justify-content-between align-items-center"},E(t.titlePhrase),i.createElement("span",{className:"d-inline-block me-2"},i.createElement(p.l,{size:"std"})))),i.createElement(r.Z,{className:"mb-3"},i.createElement(c.u,{className:"pt-3"},i.createElement(c.u.Image,{src:t.imageUrl,altText:E(t.titlePhrase)}),i.createElement(c.u.Heading,{className:"h6"},i.createElement(g.x,{namespace:h,phrase:t.headingPhrase})),i.createElement(c.u.Info,null,i.createElement(g.x,{namespace:h,phrase:"description"})),i.createElement(c.u.Cta,{appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.
|
|
2
|
-
//# sourceMappingURL=639-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[639],{53172:(e,t,a)=>{a.d(t,{l:()=>m});var i=a(32735),n=a(31453),r=a(83914),s=a(83345),l=a(35223),c="shared.premiumBadge";function m(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(r.x,{svgName:l.vn.StarOutline,size:r.S.Medium}),i.createElement(s.x,{phrase:"premium",namespace:c}))}},64695:(e,t,a)=>{a.d(t,{q:()=>T});var i=a(32735),n=a(37241),r=a(68050),s=a(23481),l=a(65858),c=a(97958),m=a(9111),p=a(53172),g=a(83345),o=a(99742),d=a(14070),u=a(97291),h="shared.hardGatePopup",E=s.T.encloseNamespace(h),P={assign:{titlePhrase:"assignTitle",headingPhrase:"assignHeading",imageUrl:o.W.ReverseTrial.ASSIGN},playlists:{titlePhrase:"playlistsTitle",headingPhrase:"playlistsHeading",imageUrl:o.W.ReverseTrial.PLAYLIST},interactive:{titlePhrase:"interactiveTitle",headingPhrase:"interactiveHeading",imageUrl:o.W.ReverseTrial.INTERACTIVE},"copy-interactives":{titlePhrase:"copyInteractiveTitle",headingPhrase:"copyInteractiveHeading",imageUrl:o.W.ReverseTrial.INTERACTIVE},integrations:{titlePhrase:"integrationsTitle",headingPhrase:"integrationsHeading",imageUrl:o.W.ReverseTrial.INTEGRATIONS}};function T(e){var t=P[e.feature];return i.createElement(m.G,{size:"lg",animation:e.animate,closePopup:e.closePopup,hideTitle:!0},i.createElement(n.Z.Header,{className:"d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3",closeButton:!0},i.createElement(n.Z.Title,{as:"h2",className:"h4 flex-grow-1 d-flex justify-content-between align-items-center"},E(t.titlePhrase),i.createElement("span",{className:"d-inline-block me-2"},i.createElement(p.l,{size:"std"})))),i.createElement(r.Z,{className:"mb-3"},i.createElement(c.u,{className:"pt-3"},i.createElement(c.u.Image,{src:t.imageUrl,altText:E(t.titlePhrase)}),i.createElement(c.u.Heading,{className:"h6"},i.createElement(g.x,{namespace:h,phrase:t.headingPhrase})),i.createElement(c.u.Info,null,i.createElement(g.x,{namespace:h,phrase:"description"})),i.createElement(c.u.Cta,{appLink:{application:u.O.SIGN_UP,action:d.e.SignUp.PREMIUM_FEATURES},text:E("cta"),analyticsData:{},analyticsOptions:{actionType:l.Vw.Click,location:l.LZ.GatedPopup,entity:l.py.AppLink,descriptor:l.Yu.PremiumFeatures}}))),e.extraContent)}},639:(e,t,a)=>{a.r(t),a.d(t,{HardGateIntegrationsPopupView:()=>r});var i=a(32735),n=a(64695);function r(e){return i.createElement(n.q,{feature:"integrations",closePopup:e.closePopup})}}}]);
|
|
2
|
+
//# sourceMappingURL=639-df1607cbc8-lite.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/639-
|
|
1
|
+
{"version":3,"file":"scripts/639-df1607cbc8-lite.chunk.js","mappings":"8LAQMA,EAAY,sBAQZ,SAAUC,EAAaC,GAC3B,OACE,wBAAMC,WAAW,OACf,oFACA,wBACe,OAAfD,EAAME,KAAgB,WAAa,YACnCF,EAAMG,OAAS,WAAa,kBAC5BH,EAAMC,YAEN,gBAAC,IAAY,CAACG,QAAS,iBAA0BF,KAAM,EAAAG,EAAA,SACvD,gBAAC,IAAI,CAACC,OAAO,UAAUR,UAAWA,IAGxC,C,0KCZMA,EAAY,uBACZS,EAAY,qBAAiCT,GAU7CU,EAAmD,CACvD,OAAU,CACRC,YAAa,cACbC,cAAe,gBACfC,SAAU,yBAEZ,UAAa,CACXF,YAAa,iBACbC,cAAe,mBACfC,SAAU,2BAEZ,YAAe,CACbF,YAAa,mBACbC,cAAe,qBACfC,SAAU,8BAEZ,oBAAqB,CACnBF,YAAa,uBACbC,cAAe,yBACfC,SAAU,8BAEZ,aAAgB,CACdF,YAAa,oBACbC,cAAe,sBACfC,SAAU,gCASR,SAAUC,EAAcZ,GAC5B,IAAMa,EAASL,EAAiBR,EAAMc,SAEtC,OACE,gBAAC,IAAK,CACJZ,KAAK,KACLa,UAAWf,EAAMgB,QACjBC,WAAYjB,EAAMiB,WAClBC,WAAS,GAET,gBAAC,WAAY,CAACjB,UAAU,yEAAyEkB,aAAW,GAC1G,gBAAC,UAAW,CAACC,GAAG,KAAKnB,UAAU,oEAC5BM,EAAUM,EAAOJ,aAClB,wBAAMR,UAAU,uBAAsB,gBAAC,IAAY,CAACC,KAAK,WAG7D,gBAAC,IAAG,CAACD,UAAU,QACb,gBAAC,IAAU,CAACA,UAAU,QACpB,gBAAC,UAAgB,CAACoB,IAAKR,EAAOF,SAAUW,QAASf,EAAUM,EAAOJ,eAClE,gBAAC,YAAkB,CAACR,UAAU,MAC5B,gBAAC,IAAI,CAACH,UAAWA,EAAWQ,OAAQO,EAAOH,iBAE7C,gBAAC,SAAe,KACd,gBAAC,IAAI,CAACZ,UAAWA,EAAWQ,OAAO,iBAErC,gBAAC,QAAc,CACbiB,QAAS,CACPC,YAAa,YACbC,OAAQ,6BAEVC,KAAMnB,EAAU,OAChBoB,cAAe,CAAC,EAChBC,iBAAkB,CAChBC,WAAY,WACZC,SAAU,gBACVC,OAAQ,aACRC,WAAY,0BAMnBhC,EAAMiC,aAGb,C,8FChGM,SAAUC,EAA8BlC,GAC5C,OACE,gBAAC,IAAa,CACZc,QAAQ,eACRG,WAAYjB,EAAMiB,YAGxB,C","sources":["file:///app/packages/libs/shared/src/components/premium-badge/PremiumBadge.tsx","file:///app/packages/projects/lite/src/shared/components/hard-gate-popup/HardGatePopup.tsx","file:///app/packages/projects/lite/src/shared/views/hard-gate-integrations/HardGateIntegrationsPopupView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { classNames } from 'libs/common/react/utils/ClassNameHelper';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.premiumBadge';\n\ninterface PremiumBadgeProps {\n invert?: boolean;\n size: 'sm' | 'std';\n className?: string;\n}\n\nexport function PremiumBadge(props: PremiumBadgeProps): JSX.Element {\n return (\n <span className={classNames(\n 'badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center',\n 'fw-medium text-indigo',\n props.size === 'sm' ? 'badge-sm' : 'badge-std',\n props.invert ? 'bg-white' : 'bg-light-indigo',\n props.className\n )}>\n <SvgContainer svgName={cvSvgLibrary.StarOutline} size={SvgContainerSize.Medium} />\n <Text phrase='premium' namespace={namespace} />\n </span>\n );\n}","import React from 'react';\nimport { Modal, Row } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { MultiStepPopupViewProps } from 'libs/shared/components/multistep-popup/MultiStepPopup';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PremiumBadge } from 'libs/shared/components/premium-badge/PremiumBadge';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'shared.hardGatePopup';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype Feature = 'assign' | 'playlists' | 'interactive' | 'copy-interactives' | 'integrations';\n\ninterface FeatureConfig {\n titlePhrase: string;\n headingPhrase: string;\n imageUrl: string;\n}\n\nconst featureConfigMap: Record<Feature, FeatureConfig> = {\n 'assign': {\n titlePhrase: 'assignTitle',\n headingPhrase: 'assignHeading',\n imageUrl: ImageUrls.ReverseTrial.ASSIGN\n },\n 'playlists': {\n titlePhrase: 'playlistsTitle',\n headingPhrase: 'playlistsHeading',\n imageUrl: ImageUrls.ReverseTrial.PLAYLIST\n },\n 'interactive': {\n titlePhrase: 'interactiveTitle',\n headingPhrase: 'interactiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'copy-interactives': {\n titlePhrase: 'copyInteractiveTitle',\n headingPhrase: 'copyInteractiveHeading',\n imageUrl: ImageUrls.ReverseTrial.INTERACTIVE\n },\n 'integrations': {\n titlePhrase: 'integrationsTitle',\n headingPhrase: 'integrationsHeading',\n imageUrl: ImageUrls.ReverseTrial.INTEGRATIONS\n }\n};\n\nexport interface HardGatePopupProps extends MultiStepPopupViewProps {\n feature: Feature;\n extraContent?: React.ReactNode;\n}\n\nexport function HardGatePopup(props: HardGatePopupProps): JSX.Element {\n const config = featureConfigMap[props.feature];\n\n return (\n <Popup\n size='lg'\n animation={props.animate}\n closePopup={props.closePopup}\n hideTitle\n >\n <Modal.Header className='d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3' closeButton>\n <Modal.Title as='h2' className='h4 flex-grow-1 d-flex justify-content-between align-items-center'>\n {getPhrase(config.titlePhrase)}\n <span className='d-inline-block me-2'><PremiumBadge size='std' /></span>\n </Modal.Title>\n </Modal.Header>\n <Row className='mb-3'>\n <EmptyState className='pt-3'>\n <EmptyState.Image src={config.imageUrl} altText={getPhrase(config.titlePhrase)} />\n <EmptyState.Heading className='h6'>\n <Text namespace={namespace} phrase={config.headingPhrase} />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='description' />\n </EmptyState.Info>\n <EmptyState.Cta\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.PREMIUM_FEATURES\n }}\n text={getPhrase('cta')}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.GatedPopup,\n entity: EntityType.AppLink,\n descriptor: SignUpDescriptors.PremiumFeatures\n }}\n />\n </EmptyState>\n </Row>\n \n {props.extraContent}\n </Popup>\n );\n}\n\n","import React from 'react';\n\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nimport { HardGatePopup } from 'shared/components/hard-gate-popup/HardGatePopup';\n\nexport interface HardGateInsightsPopupViewProps extends PopupViewProps {\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function HardGateIntegrationsPopupView(props: HardGateInsightsPopupViewProps): JSX.Element {\n return (\n <HardGatePopup\n feature='integrations'\n closePopup={props.closePopup}\n />\n );\n}\n\n"],"names":["namespace","PremiumBadge","props","className","size","invert","svgName","S","phrase","getPhrase","featureConfigMap","titlePhrase","headingPhrase","imageUrl","HardGatePopup","config","feature","animation","animate","closePopup","hideTitle","closeButton","as","src","altText","appLink","application","action","text","analyticsData","analyticsOptions","actionType","location","entity","descriptor","extraContent","HardGateIntegrationsPopupView"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8056],{53172:(e,t,a)=>{a.d(t,{l:()=>s});var i=a(32735),n=a(31453),r=a(83914),l=a(83345),o=a(35223),c="shared.premiumBadge";function s(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(r.x,{svgName:o.vn.StarOutline,size:r.S.Medium}),i.createElement(l.x,{phrase:"premium",namespace:c}))}},36199:(e,t,a)=>{var i;a.d(t,{V:()=>i}),function(e){e[e.Original=0]="Original",e[e.Copy=1]="Copy"}(i||(i={}))},9064:(e,t,a)=>{function i(e){var t,a,i,n,r,l,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return null;var c=Object.assign(Object.assign({},o),{id:e.id,interactiveId:e.interactiveId,name:e.name,status:e.status,originType:e.originType});return(null===(t=null==e?void 0:e._parentClip)||void 0===t?void 0:t.id)&&(c.clip={id:null===(a=null==e?void 0:e._parentClip)||void 0===a?void 0:a.id,name:null===(i=null==e?void 0:e._parentClip)||void 0===i?void 0:i.name}),(null===(n=null==e?void 0:e._parentVideo)||void 0===n?void 0:n.id)&&(c.video={id:null===(r=null==e?void 0:e._parentVideo)||void 0===r?void 0:r.id,name:null===(l=null==e?void 0:e._parentVideo)||void 0===l?void 0:l.name}),c}a.d(t,{T:()=>i})},8056:(e,t,a)=>{a.r(t),a.d(t,{CopyInteractiveView:()=>
|
|
2
|
-
//# sourceMappingURL=8056-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8056],{53172:(e,t,a)=>{a.d(t,{l:()=>s});var i=a(32735),n=a(31453),r=a(83914),l=a(83345),o=a(35223),c="shared.premiumBadge";function s(e){return i.createElement("span",{className:(0,n.A)("badge badge-wrapper rounded-pill d-flex align-items-center justify-content-center","fw-medium text-indigo","sm"===e.size?"badge-sm":"badge-std",e.invert?"bg-white":"bg-light-indigo",e.className)},i.createElement(r.x,{svgName:o.vn.StarOutline,size:r.S.Medium}),i.createElement(l.x,{phrase:"premium",namespace:c}))}},36199:(e,t,a)=>{var i;a.d(t,{V:()=>i}),function(e){e[e.Original=0]="Original",e[e.Copy=1]="Copy"}(i||(i={}))},9064:(e,t,a)=>{function i(e){var t,a,i,n,r,l,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!e)return null;var c=Object.assign(Object.assign({},o),{id:e.id,interactiveId:e.interactiveId,name:e.name,status:e.status,originType:e.originType});return(null===(t=null==e?void 0:e._parentClip)||void 0===t?void 0:t.id)&&(c.clip={id:null===(a=null==e?void 0:e._parentClip)||void 0===a?void 0:a.id,name:null===(i=null==e?void 0:e._parentClip)||void 0===i?void 0:i.name}),(null===(n=null==e?void 0:e._parentVideo)||void 0===n?void 0:n.id)&&(c.video={id:null===(r=null==e?void 0:e._parentVideo)||void 0===r?void 0:r.id,name:null===(l=null==e?void 0:e._parentVideo)||void 0===l?void 0:l.name}),c}a.d(t,{T:()=>i})},8056:(e,t,a)=>{a.r(t),a.d(t,{CopyInteractiveView:()=>x});var i=a(32735),n=a(70680),r=a(23481),l=a(81886),o=a(20354),c=a(28400),s=a(49985),d=a(65858),u=a(9111),p=a(13876),m=a(83345),v=a(5960),g=a(36199),h=a(16714),y=a(20768),f=a(31949),T=a(69883),E=a(22902),I=a(64695),b=a(14070),P=a(97291),C=a(9064);function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,i=Array(t);a<t;a++)i[a]=e[a];return i}var N="interactives.copyInteractive",S=r.T.encloseNamespace(N);function x(e){var t,a,r,x=e.interactiveMetadataId,A=e.fromEdit,k=e.closePopup,V=(0,n.I0)(),U=(0,T.Z)(),_=(0,E.T)().getGatedPermission,O=o.a.useBasicFetch(f.N.currentUser()),R=o.a.useBasicFetch(y.b.interactiveMetadata(x)),j=(a=i.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var i,n,r,l,o=[],c=!0,s=!1;try{if(r=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;c=!1}else for(;!(c=(i=r.call(a)).done)&&(o.push(i.value),o.length!==t);c=!0);}catch(e){s=!0,n=e}finally{try{if(!c&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(s)throw n}}return o}}(a,r)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?w(e,t):void 0}}(a,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),G=j[0],L=j[1];function H(e){k(),U.success(S("success",{name:R.data.name,escapeText:!0})),l.Q.C$.trigger({application:P.O.INTERACTIVES,action:b.e.Interactives.VIEW_INTERACTIVE,args:[e.id,c.m.slugify(e.name)]});var t=(0,C.T)(Object.assign(Object.assign({},R.data),e));s.k.logUserAction(t,{actionType:d.Vw.Copy,entity:d.py.Interactive,location:d.LZ.CopyInteractive,workflowPhase:d.eu.Complete})}function M(){k();var e=(0,C.T)(R.data);s.k.logUserAction(e,{actionType:d.Vw.Copy,entity:d.py.Interactive,location:d.LZ.CopyInteractive,workflowPhase:d.eu.Discard})}function Z(){U.error(S("error")),k()}var W=!!R.data,B=A?"hasResults":"popupBody";return"hard-gate"===_(h.C.UploadVideo)?i.createElement(I.q,{feature:"copy-interactives",animate:!1,closePopup:e.closePopup}):i.createElement(u.G,{title:S("popupTitle"),closePopup:M,showLoadingSpinner:!W},i.createElement("p",null,i.createElement(m.x,{namespace:N,phrase:B,options:{name:null===(t=R.data)||void 0===t?void 0:t.name}})),i.createElement(p.u,null,i.createElement(p.u.Cancel,{onClick:M}),i.createElement(p.u.Submit,{onClick:function(){var e,t;L(!0);var a={name:"".concat(S("copyPrefix")," ").concat(R.data.name),interactiveId:R.data.interactiveId,owner:{id:O.data.id},originType:g.V.Copy,status:v.X.Draft},i=null!==(t=null===(e=R.data._parentClip)||void 0===e?void 0:e.id)&&void 0!==t?t:R.data._parentVideo.id;o.a.fetch(V,y.b.createInteractiveMetadata(i,a,H,Z))},variant:"dark",text:S("copy"),showSpinner:G})))}},64695:(e,t,a)=>{a.d(t,{q:()=>f});var i=a(32735),n=a(37241),r=a(68050),l=a(23481),o=a(65858),c=a(97958),s=a(9111),d=a(53172),u=a(83345),p=a(99742),m=a(14070),v=a(97291),g="shared.hardGatePopup",h=l.T.encloseNamespace(g),y={assign:{titlePhrase:"assignTitle",headingPhrase:"assignHeading",imageUrl:p.W.ReverseTrial.ASSIGN},playlists:{titlePhrase:"playlistsTitle",headingPhrase:"playlistsHeading",imageUrl:p.W.ReverseTrial.PLAYLIST},interactive:{titlePhrase:"interactiveTitle",headingPhrase:"interactiveHeading",imageUrl:p.W.ReverseTrial.INTERACTIVE},"copy-interactives":{titlePhrase:"copyInteractiveTitle",headingPhrase:"copyInteractiveHeading",imageUrl:p.W.ReverseTrial.INTERACTIVE},integrations:{titlePhrase:"integrationsTitle",headingPhrase:"integrationsHeading",imageUrl:p.W.ReverseTrial.INTEGRATIONS}};function f(e){var t=y[e.feature];return i.createElement(s.G,{size:"lg",animation:e.animate,closePopup:e.closePopup,hideTitle:!0},i.createElement(n.Z.Header,{className:"d-flex align-items-center justify-content-between bg-white mx-n3 mt-n3",closeButton:!0},i.createElement(n.Z.Title,{as:"h2",className:"h4 flex-grow-1 d-flex justify-content-between align-items-center"},h(t.titlePhrase),i.createElement("span",{className:"d-inline-block me-2"},i.createElement(d.l,{size:"std"})))),i.createElement(r.Z,{className:"mb-3"},i.createElement(c.u,{className:"pt-3"},i.createElement(c.u.Image,{src:t.imageUrl,altText:h(t.titlePhrase)}),i.createElement(c.u.Heading,{className:"h6"},i.createElement(u.x,{namespace:g,phrase:t.headingPhrase})),i.createElement(c.u.Info,null,i.createElement(u.x,{namespace:g,phrase:"description"})),i.createElement(c.u.Cta,{appLink:{application:v.O.SIGN_UP,action:m.e.SignUp.PREMIUM_FEATURES},text:h("cta"),analyticsData:{},analyticsOptions:{actionType:o.Vw.Click,location:o.LZ.GatedPopup,entity:o.py.AppLink,descriptor:o.Yu.PremiumFeatures}}))),e.extraContent)}}}]);
|
|
2
|
+
//# sourceMappingURL=8056-555482555f-lite.chunk.js.map
|