@clickview/lite 0.77.0-rc.1 → 0.77.0-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{3700-a7e52bb9be-lite.chunk.js → 3700-8530427309-lite.chunk.js} +3 -3
- package/dist/scripts/{3700-a7e52bb9be-lite.chunk.js.map → 3700-8530427309-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3811-133acc9140-lite.chunk.js → 3811-b39bb39668-lite.chunk.js} +3 -3
- package/dist/scripts/{3811-133acc9140-lite.chunk.js.map → 3811-b39bb39668-lite.chunk.js.map} +1 -1
- package/dist/scripts/4300-7147c77234-lite.chunk.js +2 -0
- package/dist/scripts/4300-7147c77234-lite.chunk.js.map +1 -0
- package/dist/scripts/8139-5a213506ea-lite.chunk.js +2 -0
- package/dist/scripts/8139-5a213506ea-lite.chunk.js.map +1 -0
- package/dist/scripts/9701-d86dfbee0c-lite.chunk.js +2 -0
- package/dist/scripts/9701-d86dfbee0c-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-27d86c87d5.min.js → bundle-7d9d34118d.min.js} +3 -3
- package/dist/scripts/{bundle-27d86c87d5.min.js.map → bundle-7d9d34118d.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/4300-e884613b63-lite.chunk.js +0 -2
- package/dist/scripts/4300-e884613b63-lite.chunk.js.map +0 -1
- package/dist/scripts/8139-f8ce3266c8-lite.chunk.js +0 -2
- package/dist/scripts/8139-f8ce3266c8-lite.chunk.js.map +0 -1
- package/dist/scripts/9701-dfa0ccbf3a-lite.chunk.js +0 -2
- package/dist/scripts/9701-dfa0ccbf3a-lite.chunk.js.map +0 -1
- /package/dist/scripts/{3700-a7e52bb9be-lite.chunk.js.LICENSE.txt → 3700-8530427309-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3811-133acc9140-lite.chunk.js.LICENSE.txt → 3811-b39bb39668-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-27d86c87d5.min.js.LICENSE.txt → bundle-7d9d34118d.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4300-7147c77234-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/views/edit-share-settings-view/EditShareSettingsView.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts"],"sourcesContent":["import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ShareSettingsForm } from 'libs/shared/apps/share-v2/components/share-settings-form/ShareSettingsForm';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { ShareSettingsFormFields, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { useShareSettingsData } from 'libs/shared/apps/share-v2/views/share-settings-view/hooks/use-share-settings-data/useShareSettingsData';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupViewProps } from 'libs/shared/interfaces';\n\nconst namespace = 'sharev2.editShareSettings';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EditShareSettingsViewProps extends PopupViewProps {\n shareId: string;\n getDeleteShareAppLink: (share: Share) => Core.AppLink;\n productArea?: string;\n}\n\nexport function EditShareSettingsView(props: EditShareSettingsViewProps) {\n const share = Flight.useBasicFetch<Share>(ShareRequests.getShare(props.shareId));\n\n const entityType = ShareViewHelper.getSharableEntityType(share.data);\n\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: share.data?.objectId,\n type: entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V3,\n productArea: props.productArea\n }\n });\n \n const { data, initialValues, onClickSaveLink } = useShareSettingsData({\n entityId: share.data?.objectId,\n shareId: props.shareId,\n entityType,\n log\n });\n \n function onSubmit(\n data: ShareSettingsFormFields,\n onDone: (options?: FormSubmissionOptions<ShareSettingsFormFields>) => void\n ) {\n onClickSaveLink({\n options: {\n immediateFeedback: data.immediateFeedback,\n preventScrubbing: data.preventScrubbing\n }\n }, onDone);\n }\n\n function onClickDelete() {\n if (!share.data) return;\n const appLink = props.getDeleteShareAppLink(share.data);\n\n if (!appLink) return;\n \n AppLinkHelper.trigger(appLink);\n }\n\n const {\n showImmediateFeedbackField,\n showPreventScrubbingField\n } = ShareViewHelper.getEnabledSettingsField(entityType);\n\n const loaded = data.loaded && !!share.data;\n \n return (\n <Popup\n title={getPhrase('title')}\n showLoadingSpinner={!loaded}\n closePopup={props.closePopup}\n >\n <ShareSettingsForm\n initialValues={initialValues}\n onSubmit={onSubmit}\n onClickDelete={onClickDelete}\n showImmediateFeedbackField={showImmediateFeedbackField}\n showPreventScrubbingField={showPreventScrubbingField}\n deleteText={share.data.type !== ShareType.Link && getPhrase('delete')}\n />\n </Popup>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n"],"names":["getPhrase","EditShareSettingsView","props","share","shareId","entityType","data","log","entity","id","objectId","type","analyticsOptions","location","eventVersion","productArea","entityId","initialValues","onClickSaveLink","showImmediateFeedbackField","showPreventScrubbingField","loaded","title","showLoadingSpinner","closePopup","onSubmit","onDone","options","immediateFeedback","preventScrubbing","onClickDelete","appLink","getDeleteShareAppLink","deleteText","FormWrapper","castInitialValues","castValuesOnSubmit","formikProps","formattedInitialValues","validationSchema","cast","values","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","reset","errors","entries","value","children","f","useFormikContextWrapper","defaultProps","IntegrationId","IntegrationHelper","getShareIntegrations","googleClassroomSetting","msftTeamsSetting","name","enabled","settingName"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8139],{81192:(e,t,n)=>{n.d(t,{Z:()=>m});var i=n(32735),a=n(80130),r=n(92802),c=n(23481),o=n(5173),s=(0,o.Ry)().shape({preventScrubbing:(0,o.O7)(),immediateFeedback:(0,o.O7)()}),l=n(82644),u=n(83345),d=n(83523);function p(e){return i.createElement("div",null,i.createElement("div",{className:"d-flex flex-row gap-1 justify-content-between align-items-center w-100 mb-1"},i.createElement("label",{className:"m-0 cursor-pointer",htmlFor:e.id,onClick:e.onClick},e.label),i.createElement(d.Z,{id:e.id,name:e.id,onClick:e.onClick,on:e.checked})),i.createElement("p",{className:"m-0 text-secondary"},e.description))}var y="sharev2.shareSettingsForm",v=c.T.encloseNamespace(y);function h(e){var t=(0,r.u6)();function n(e,n){t.setFieldValue(e,n),t.submitForm()}return i.createElement(a.Z,{className:"d-flex flex-column gap-2"},!e.hideFormHeading&&i.createElement("div",{className:"d-flex flex-row gap-2 justify-content-between align-items-center"},i.createElement("h3",{className:"h6 m-0"},i.createElement(u.x,{namespace:y,phrase:"heading"})),"function"==typeof e.onClickDelete&&i.createElement("a",{onClick:e.onClickDelete,className:"text-danger cursor-pointer"},e.deleteText||i.createElement(u.x,{namespace:y,phrase:"delete"}))),i.createElement("div",{className:"d-flex flex-column gap-2"},e.showPreventScrubbingField&&i.createElement(p,{id:"prevent-scrubbing",label:v("preventScrubbingLabel"),description:v("preventScrubbingDescription"),checked:!!t.values.preventScrubbing,onClick:function(){return n("preventScrubbing",!t.values.preventScrubbing)}}),e.showImmediateFeedbackField&&i.createElement(p,{id:"immediate-feedback",label:v("immediateFeedbackLabel"),description:v("immediateFeedbackDescription"),checked:!!t.values.immediateFeedback,onClick:function(){return n("immediateFeedback",!t.values.immediateFeedback)}})))}function m(e){return!e.hideFormHeading||e.showImmediateFeedbackField||e.showPreventScrubbingField?i.createElement(l.n,{initialValues:e.initialValues,onSubmit:e.onSubmit,castInitialValues:!1,validationSchema:s},i.createElement(h,Object.assign({},e))):i.createElement(i.Fragment,null)}},33518:(e,t,n)=>{var i;n.d(t,{e:()=>i}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(i||(i={}))},93563:(e,t,n)=>{n.d(t,{_:()=>s});var i=n(20354),a=n(57881),r=n(33518),c=n(18488),o=n(8233);function s(e){var t=i.a.useGetFetchAsync(),n=i.a.useBasicFetch(c.o.getPrivacy(e.entityId));return{loaded:!!n.data,updateShareLink:function(e,n){if(n.privacy===r.e.PasswordProtected)throw a.Y.logError("Cannot update to legacy share privacy(".concat(n.privacy,") for share with id ").concat(e)),new Error("invalid-share-privacy");return t(c.o.updateShare(e,n))},createShareLink:function(i){var a=null!=i?i:"protected"===o.R.getShareLinkAccessType(n.data)?r.e.Protected:r.e.JustMySchool;return t(c.o.createShareLink({objectId:e.entityId,privacy:a}))},deleteShareLink:function(e){return t(c.o.deleteShare(e))}}}},87265:(e,t,n)=>{n.d(t,{s:()=>s});var i=n(20354),a=n(18488),r=n(2267),c=n(39151),o=n(31949);function s(e){var t,n=i.a.useBasicFetch(o.N.currentUser()),s=r.I.getFetchFunctionByType(e.entityType)(e.entityId,null===(t=n.data)||void 0===t?void 0:t.id),l=i.a.useBasicFetch(a.o.getPrivacy(e.entityId)),u=i.a.useBasicFetch(e.shareId?a.o.getShare(e.shareId):a.o.getShareLink(e.entityId)),d=i.a.useBasicFetch(c.L.config());return{dataLoaded:!!(s.data&&n.data&&l.data&&u.data&&d.data),currentUser:n,entity:s,privacy:l,share:u,config:d}}},8233:(e,t,n)=>{n.d(t,{R:()=>y});var i=n(23481),a=n(110),r=n(33518),c=n(4594),o=n(49080),s=n(26361),l=n(35223),u=n(31908);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,i=Array(t);n<t;n++)i[n]=e[n];return i}var p=i.T.encloseNamespace("sharev2.utils"),y={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,i=e.hasStudentExp,a=e.entity,o=e.yearGroups;if(t===c.E.Topic||t===c.E.Series)return{icon:l.vn.VisibleOn,text:p(i?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case r.e.Public:return{icon:l.vn.VisibleOn,text:p("publicDescription")};case r.e.ProtectedOverrideRestriction:return{icon:l.vn.VisibleOn,text:p("clickViewOnly")};case r.e.Protected:return{icon:l.vn.Lock,text:y.getRespectRatingText(a,o,i)};case r.e.JustMySchoolOverrideRestriction:return{icon:l.vn.Lock,text:p(i?"justMySchoolTeachers":"justMySchoolDescription")};case r.e.JustMySchool:return{icon:l.vn.Lock,text:y.getRespectRatingText(a,o,i)};case r.e.PinCode:return{icon:l.vn.Lock,text:p("pinDescription")};case r.e.PasswordProtected:return{icon:l.vn.Lock,text:p("password")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,i=e.status;if(!t&&!n)return y.getPrivateIconAndText(e);if(!t)return{icon:l.vn.Lock,text:p("password")};var r=a.O.isToday(t),c=a.O.diffBetween(t,new Date,"day");if(!n){var s=r?p("expiryToday"):p("expiry",{days:c});return i===o.F.Expired&&(s=p("expired")),{icon:l.vn.Timer,text:s}}var u=r?p("passwordExpiryToday"):p("passwordExpiry",{days:c});return i===o.F.Expired&&(u=p("passwordExpired")),{icon:l.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var i;if(!e||!t)return null;if(n)return p("justMySchoolTeachers");if(!u.M.isVideoType(e))return p("collectionRating");var a=s.l.getWeightedRestriction(null===(i=e._restrictions)||void 0===i?void 0:i.value);if(a&&!a.yearGroup)return p("onlyAdmins");var r,c,o,l=u.M.getRating(e),y=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var i=0,a=function(){};return{s:a,n:function(){return i>=e.length?{done:!0}:{done:!1,value:e[i++]}},e:function(e){throw e},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var r,c=!0,o=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return c=e.done,e},e:function(e){o=!0,r=e},f:function(){try{c||null==n.return||n.return()}finally{if(o)throw r}}}}(t);try{for(y.s();!(o=y.n()).done;){var v=o.value;(!r||v.value>r.value)&&(r=v),a&&v.value<=a.yearGroup||l&&v.rating.value<l.value||(!c||v.value<c.value)&&(c=v)}}catch(e){y.e(e)}finally{y.f()}return c?1===t.length?p("clickViewOnly"):c.value===r.value?p("maxYearGroup",{yearGroup:r.name}):p("yearGroupRange",{yearGroup:c.name}):p("onlyStaff")},getShareLinkAccessType:function(e){return e.isTvContent||e.isClickViewContent?"protected":e.canManageAccess?"owner":"private"}}},2267:(e,t,n)=>{n.d(t,{I:()=>l});var i=n(20354),a=n(64249),r=n(4594),c=n(5112),o=n(60011),s=n(40841),l={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return s._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,i,a,r,c,o;return{preventScrubbing:null!==(a=null!==(i=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==i?i:null==t?void 0:t.preventScrubbing)&&void 0!==a&&a,immediateFeedback:null!==(o=null!==(c=null===(r=null==e?void 0:e.options)||void 0===r?void 0:r.immediateFeedback)&&void 0!==c?c:null==t?void 0:t.immediateFeedback)&&void 0!==o&&o}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case r.E.Video:return"video";case r.E.Playlist:return"playlist";case r.E.Subject:return"subject";case r.E.Series:return"series";case r.E.Interactive:return"interactive";case r.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return i.a.useBasicFetch(c.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return i.a.useBasicFetch(o.J.seriesWithThumbnailAndCount(e))}}return a.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return a.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return a.I.getAnalyticsOptions(e)}}},31121:(e,t,n)=>{n.d(t,{j:()=>o});var i=n(65858),a=n(84850);function r(e){return"share"in e&&!!e.share}var c={"create-share-link":{isValid:r,analyticsOptions:{actionType:i.Vw.Create,workflowPhase:i.eu.Complete,entity:i.py.ShareLink}},"update-share-link":{isValid:r,analyticsOptions:{actionType:i.Vw.Edit,entity:i.py.ShareLink,workflowPhase:i.eu.Complete}},"delete-share-link":{isValid:r,analyticsOptions:{actionType:i.Vw.Delete,entity:i.py.ShareLink,workflowPhase:i.eu.Complete}},"plugin-share-embed":{isValid:r,analyticsOptions:{actionType:i.Vw.Share,descriptor:i.YM.PluginEmbed,workflowPhase:i.eu.Complete,entity:i.py.ShareLink}},"copy-embed-html":{isValid:function(){return!0},analyticsOptions:{actionType:i.Vw.Share,workflowPhase:i.eu.Complete,entity:i.py.ShareLink,descriptor:i.YM.CopyEmbedHtml}},"copy-share-link":{isValid:r,analyticsOptions:{actionType:i.Vw.Share,workflowPhase:i.eu.Complete,entity:i.py.ShareLink,descriptor:i.YM.CopyLink}}};function o(e){var t,n=(0,a.X)({analyticsOptions:e.analyticsOptions,baseData:e.data,config:c,shouldLog:null===(t=e.shouldLog)||void 0===t||t});return{log:n.log,getData:n.getData}}},2867:(e,t,n)=>{n.d(t,{W:()=>y});var i=n(23481),a=n(20354),r=n(93563),c=n(87265),o=n(2267),s=n(4594),l=n(20768),u=n(69883),d=n(45778),p=i.T.encloseNamespace("sharev2.useShareSettingsData");function y(e){var t=(0,u.Z)(),n=(0,c.s)({entityId:e.entityId,entityType:e.entityType,shareId:e.shareId}),i=n.config,y=n.entity,v=n.share,h=(0,r._)({entityId:e.entityId}),m=h.loaded,f=h.updateShareLink,g=a.a.useBasicFetch(d.G.isType(y.data,s.E.Interactive)&&y.data.interactiveId&&l.b.interactive(y.data.interactiveId));function b(n){e.log({type:"update-share-link",share:n}),t.success(p("editSuccess",{name:y.data.name,escapeText:!0}))}var k=o.I.getShareSettingsInitialValues(v.data,g.data);return{data:{loaded:m&&!!v.data&&!!i.data&&!!y.data},initialValues:k,onClickSaveLink:function(e,n){f(v.data.shareId,e).then(b).catch(function(){t.error(p("editError",{name:y.data.name,escapeText:!0})),n()})}}}},84850:(e,t,n)=>{n.d(t,{X:()=>r});var i=n(1048),a=n(49985);function r(e){function t(t,n){var r=e.config[t.type];if(null==r?void 0:r.isValid(t)){var c=Object.assign(Object.assign({},e.baseData),t);return{data:i.t.omit(c,["type"]),analyticsOptions:a.k.mergeOptions(r.analyticsOptions,[e.analyticsOptions,n])}}}return{getData:t,log:function(n,i){if(e.shouldLog){var r=t(n,i);r&&a.k.logUserAction(r.data,r.analyticsOptions)}}}}}}]);
|
|
2
|
+
//# sourceMappingURL=8139-5a213506ea-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/8139-5a213506ea-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/validation/ShareSettingsFormValidationSchema.ts","file:///app/packages/libs/shared/src/apps/share-v2/components/share-settings-field/ShareSettingsField.tsx","file:///app/packages/libs/shared/src/apps/share-v2/components/share-settings-form/ShareSettingsForm.tsx","file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkActions.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkData.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/apps/share-v2/utils/get-share-event-logger/getShareEventLogger.ts","file:///app/packages/libs/shared/src/apps/share-v2/views/share-settings-view/hooks/use-share-settings-data/useShareSettingsData.ts","file:///app/packages/libs/shared/src/utils/get-event-logger/getEventLogger.ts"],"sourcesContent":["import { boolean, object } from 'yup';\n\nexport const ShareSettingsFormValidationSchema = object().shape({\n preventScrubbing: boolean(),\n immediateFeedback: boolean()\n});","import React from 'react';\n\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\n\ninterface ShareSettingsFieldProps {\n id: string;\n label: string;\n description: string;\n onClick: () => void;\n checked: boolean;\n}\n\nexport function ShareSettingsField(props: ShareSettingsFieldProps): JSX.Element {\n return (\n <div>\n <div className='d-flex flex-row gap-1 justify-content-between align-items-center w-100 mb-1'>\n <label className='m-0 cursor-pointer' htmlFor={props.id} onClick={props.onClick}>{props.label}</label>\n <ToggleSwitch\n id={props.id}\n name={props.id}\n onClick={props.onClick}\n on={props.checked}\n />\n </div>\n <p className='m-0 text-secondary'>{props.description}</p>\n </div>\n );\n}","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ShareSettingsFormFields } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ShareSettingsFormValidationSchema } from 'libs/shared/apps/share-v2/validation/ShareSettingsFormValidationSchema';\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ShareSettingsField } from '../share-settings-field/ShareSettingsField';\n\nconst namespace = 'sharev2.shareSettingsForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ShareSettingsFormProps {\n initialValues: ShareSettingsFormFields;\n onSubmit: (\n data: ShareSettingsFormFields,\n onDone: (options?: FormSubmissionOptions<ShareSettingsFormFields>) => void\n ) => void;\n showPreventScrubbingField?: boolean;\n showImmediateFeedbackField?: boolean;\n hideFormHeading?: boolean;\n deleteText?: string;\n onClickDelete?: () => void;\n}\n\nfunction ShareSettingsFromComponent(props: ShareSettingsFormProps): JSX.Element {\n const formikProps = useFormikContext<ShareSettingsFormFields>();\n\n function setFormikFieldAndSave\n <T extends keyof ShareSettingsFormFields>(field: T, value: ShareSettingsFormFields[T]) {\n formikProps.setFieldValue(field, value);\n formikProps.submitForm();\n }\n\n return (\n <Form className='d-flex flex-column gap-2'>\n {!props.hideFormHeading &&\n <div className='d-flex flex-row gap-2 justify-content-between align-items-center'>\n <h3 className='h6 m-0'>\n <Text namespace={namespace} phrase='heading' />\n </h3>\n {typeof props.onClickDelete === 'function' &&\n <a onClick={props.onClickDelete} className='text-danger cursor-pointer'>\n {props.deleteText || <Text namespace={namespace} phrase='delete' />}\n </a>\n }\n </div>\n }\n <div className='d-flex flex-column gap-2'>\n {props.showPreventScrubbingField &&\n <ShareSettingsField\n id='prevent-scrubbing'\n label={getPhrase('preventScrubbingLabel')}\n description={getPhrase('preventScrubbingDescription')}\n checked={!!formikProps.values.preventScrubbing}\n onClick={() => setFormikFieldAndSave('preventScrubbing', !formikProps.values.preventScrubbing)}\n />\n }\n {props.showImmediateFeedbackField &&\n <ShareSettingsField\n id='immediate-feedback'\n label={getPhrase('immediateFeedbackLabel')}\n description={getPhrase('immediateFeedbackDescription')}\n checked={!!formikProps.values.immediateFeedback}\n onClick={() => setFormikFieldAndSave('immediateFeedback', !formikProps.values.immediateFeedback)}\n />\n }\n </div>\n </Form>\n );\n}\n\nexport function ShareSettingsForm(props: ShareSettingsFormProps): JSX.Element {\n const isEverythingHidden = props.hideFormHeading\n && !props.showImmediateFeedbackField\n && !props.showPreventScrubbingField;\n\n if (isEverythingHidden)\n return <></>;\n\n return (\n <FormWrapper<ShareSettingsFormFields>\n initialValues={props.initialValues}\n onSubmit={props.onSubmit}\n castInitialValues={false}\n validationSchema={ShareSettingsFormValidationSchema}\n >\n <ShareSettingsFromComponent {...props} />\n </FormWrapper>\n );\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nimport { Logger } from 'libs/shared/utils/Logger';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareRequests } from '../flight-requests/ShareRequests';\nimport { Share } from '../interfaces/Share';\nimport { SharePrivacyResponse } from '../interfaces/SharePrivacyResponse';\nimport { UpdateShareRequest } from '../interfaces/UpdateShareRequest';\nimport { ShareLinkHelper } from '../utils/ShareLinkHelper';\n\ninterface UseShareLinkActionsOptions {\n entityId: string;\n}\n\nexport function useShareLinkActions(options: UseShareLinkActionsOptions) {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const entityPrivacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n\n function getCreateSharePrivacy() {\n const accessType = ShareLinkHelper.getShareLinkAccessType(entityPrivacy.data);\n\n return accessType === 'protected'\n ? SharePrivacy.Protected\n : SharePrivacy.JustMySchool;\n }\n\n function updateShareLink(shareId: string, data: UpdateShareRequest): Promise<Share> {\n // Legacy share privacy - if we try to update to this we should log & throw an error\n if (data.privacy === SharePrivacy.PasswordProtected) {\n Logger.logError(`Cannot update to legacy share privacy(${data.privacy}) for share with id ${shareId}`);\n\n throw new Error('invalid-share-privacy');\n }\n \n return fetchAsync<Share>(ShareRequests.updateShare(shareId, data));\n }\n\n function createShareLink(privacy?: SharePrivacy): Promise<Share> {\n const requestPrivacy = privacy ?? getCreateSharePrivacy();\n return fetchAsync<Share>(ShareRequests.createShareLink({ objectId: options.entityId, privacy: requestPrivacy }));\n }\n\n function deleteShareLink(shareId: string): Promise<void> {\n return fetchAsync(ShareRequests.deleteShare(shareId));\n }\n\n return {\n loaded: !!entityPrivacy.data,\n updateShareLink,\n createShareLink,\n deleteShareLink\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport type { Config, CurrentUser } from 'libs/shared/interfaces';\n\nimport { Share } from '../interfaces/Share';\n\ninterface UseShareLinkDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n shareId?: string;\n}\n\n\nexport function useShareLinkData(options: UseShareLinkDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.entityId, currentUser.data?.id);\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n const share = Flight.useBasicFetch<Share>(options.shareId\n ? ShareRequests.getShare(options.shareId)\n : ShareRequests.getShareLink(options.entityId));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const dataLoaded = !!entity.data\n && !!currentUser.data\n && !!privacy.data\n && !!share.data\n && !!config.data;\n\n return {\n dataLoaded,\n currentUser: currentUser,\n entity: entity,\n privacy: privacy,\n share: share,\n config: config\n };\n}","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 { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n getSharableEntityType(share: Share): SharableEntityType {\n switch (share.objectTypeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Playlist:\n return 'playlist';\n case MasterType.Subject:\n return 'subject';\n case MasterType.Series:\n return 'series';\n case MasterType.Interactive:\n return 'interactive';\n case MasterType.Clip:\n return 'clip';\n }\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.playlistWithThumbnailAndCount(id));\n }\n\n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.seriesWithThumbnailAndCount(id));\n }\n }\n \n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","import { AnalyticsOptions, EntityType, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EventLogConfig, getEventLogger } from 'libs/shared/utils/get-event-logger/getEventLogger';\n\nimport { BaseShareData, ShareLogData } from './interfaces/GetShareEventLogger';\n\ninterface ShareEventLoggerOptions {\n data: BaseShareData;\n analyticsOptions: AnalyticsOptions;\n shouldLog?: boolean;\n}\n\nexport type ShareLogFn = ReturnType<typeof getShareEventLogger>['log'];\n\nfunction isValidShare(data: ShareLogData): boolean {\n if (!('share' in data))\n return false;\n\n return !!data.share;\n}\n\nconst LogDataConfig: EventLogConfig<ShareLogData> = {\n /**\n * Share - Link\n */\n 'create-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n 'update-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Edit,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n 'delete-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Delete,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n\n 'plugin-share-embed': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n\n /**\n * General\n */\n 'copy-embed-html': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyEmbedHtml\n }\n },\n 'copy-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyLink\n }\n }\n};\n\nexport function getShareEventLogger(options: ShareEventLoggerOptions) {\n const { log, getData } = getEventLogger({\n analyticsOptions: options.analyticsOptions,\n baseData: options.data,\n config: LogDataConfig,\n shouldLog: options.shouldLog ?? true\n });\n\n return {\n log,\n getData\n };\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { useShareLinkActions } from 'libs/shared/apps/share-v2/hooks/useShareLinkActions';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport type { UpdateShareRequest } from 'libs/shared/apps/share-v2/interfaces/UpdateShareRequest';\nimport { ShareLogFn } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport type { Interactive, InteractiveMetadata } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nconst namespace = 'sharev2.useShareSettingsData';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface UseShareSettingsDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n shareId?: string;\n log: ShareLogFn;\n}\n\nexport function useShareSettingsData(options: UseShareSettingsDataOptions) {\n const alerts = useAlerts();\n\n const { config, entity, share } = useShareLinkData({\n entityId: options.entityId,\n entityType: options.entityType,\n shareId: options.shareId\n });\n\n const { loaded: shareLinkActionsLoaded, updateShareLink } = useShareLinkActions({ entityId: options.entityId });\n \n /**\n * Fetch interactive videos options to set them as defaults\n * if the interactive share data does not have any options set\n */\n const interactive = Flight.useBasicFetch<Interactive>(\n MasterTypeHelper.isType<InteractiveMetadata>(entity.data, MasterType.Interactive) && entity.data.interactiveId &&\n InteractiveRequests.interactive(entity.data.interactiveId)\n );\n\n function onSuccess(updatedShare: Share) {\n options.log({\n type: 'update-share-link',\n share: updatedShare\n });\n \n alerts.success(getPhrase('editSuccess', { name: entity.data.name, escapeText: true }));\n }\n \n function onClickSaveLink(data: UpdateShareRequest, onError: () => void): void {\n updateShareLink(share.data.shareId, data)\n .then(onSuccess)\n .catch(() => {\n alerts.error(getPhrase('editError', { name: entity.data.name, escapeText: true }));\n onError();\n });\n }\n \n const initialValues = ShareViewHelper.getShareSettingsInitialValues(share.data, interactive.data);\n \n const loaded = shareLinkActionsLoaded\n && !!share.data\n && !!config.data\n && !!entity.data;\n\n return {\n data: {\n loaded\n },\n initialValues,\n onClickSaveLink\n };\n}","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\n/**\n * Base type that every event needs to extend from\n */\nexport interface BaseEventLogData<T extends string = string> {\n type: T;\n}\n\n/**\n * Utility type to map event types to config types\n */\nexport type EventLogConfig<TEvents extends BaseEventLogData> = {\n [K in TEvents['type']]: BaseConfigData<Extract<TEvents, { type: K }>>;\n};\n\ninterface BaseConfigData<T extends BaseEventLogData> {\n isValid?: (data: T) => boolean;\n analyticsOptions: AnalyticsOptions;\n}\n\ninterface GetEventLoggerOptions<TData extends HashObject, TEvents extends BaseEventLogData> {\n baseData: TData;\n /**\n * Event type config map\n */\n config: EventLogConfig<TEvents>;\n /**\n * Base analytics options\n */\n analyticsOptions: AnalyticsOptions;\n\n shouldLog?: boolean;\n}\n\n/**\n * Method build and log events which are typed using map\n * passed in from config\n */\nexport function getEventLogger<\n TData extends HashObject = HashObject,\n TEvents extends BaseEventLogData = BaseEventLogData\n>(\n options: GetEventLoggerOptions<TData, TEvents>\n) {\n /**\n * Types to assist hinting in our log / getData methods\n */\n type EventType = TEvents['type']; // type of event\n type EventData = Extract<TEvents, { type: EventType }>; // restrict the data to the passed type\n \n /**\n * Get analytics data and options for a given event type\n */\n function getData(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n const logDataConfig = options.config[data.type];\n\n if (!logDataConfig?.isValid(data))\n return;\n\n const mergedData = {\n ...options.baseData,\n ...data\n };\n \n const sanitizedData = ObjectHelper.omit<typeof data>(mergedData, ['type']);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(\n logDataConfig.analyticsOptions,\n [\n options.analyticsOptions,\n logAnalyticsOptions\n ]\n );\n\n return {\n data: sanitizedData,\n analyticsOptions\n };\n }\n\n /**\n * Similar to `getData` except it logs the analytics event\n * for a given type if its valid\n */\n function log(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n if (!options.shouldLog)\n return;\n\n const analytics = getData(data, logAnalyticsOptions);\n\n if (!analytics)\n return;\n\n AnalyticsHelper.logUserAction(analytics.data, analytics.analyticsOptions);\n }\n\n return {\n getData,\n log\n };\n}"],"names":["ShareSettingsFormValidationSchema","shape","preventScrubbing","immediateFeedback","ShareSettingsField","props","className","htmlFor","id","onClick","label","ToggleSwitch","name","on","checked","description","namespace","getPhrase","LanguageService","ShareSettingsFromComponent","formikProps","setFormikFieldAndSave","field","value","setFieldValue","submitForm","Form","hideFormHeading","Text","phrase","onClickDelete","deleteText","showPreventScrubbingField","values","showImmediateFeedbackField","ShareSettingsForm","FormWrapper","initialValues","onSubmit","castInitialValues","validationSchema","SharePrivacy","useShareLinkActions","options","fetchAsync","entityPrivacy","entityId","loaded","data","updateShareLink","shareId","privacy","Error","createShareLink","requestPrivacy","objectId","deleteShareLink","useShareLinkData","currentUser","entity","entityType","share","config","dataLoaded","ShareLinkHelper","getPrivateIconAndText","entityTypeId","hasStudentExp","yearGroups","icon","text","Array","isArray","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","Date","days","video","restriction","_restrictions","yearGroup","maxYearGroup","minAllowedYearGroup","rating","length","getShareLinkAccessType","isTvContent","isClickViewContent","canManageAccess","ShareViewHelper","canEmbed","type","includes","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","map","getShareSettingsInitialValues","interactive","getEnabledSettingsField","getSharableEntityType","objectTypeId","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","isValidShare","LogDataConfig","isValid","analyticsOptions","actionType","workflowPhase","descriptor","getShareEventLogger","baseData","shouldLog","log","getData","useShareSettingsData","alerts","shareLinkActionsLoaded","interactiveId","onSuccess","updatedShare","success","escapeText","onClickSaveLink","onError","then","error","getEventLogger","logAnalyticsOptions","logDataConfig","mergedData","analytics"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9701],{29923:(e,t,n)=>{n.d(t,{F:()=>s});var r=n(32735),i=n(23481),a=n(89965),o=n(13876);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var l=i.T.encloseNamespace("sharev2.deleteShareContent");function s(e){var t,n,i,s=(n=r.useState(!1),i=2,function(e){if(Array.isArray(e))return e}(n)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],l=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,i=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return c}}(n,i)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(n,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],d=s[1];return r.createElement("div",{className:"d-flex flex-column gap-3"},r.createElement("p",{className:"m-0"},e.phrases.leadingSentence),r.createElement("ul",{className:"m-0"},e.phrases.bulletPoints.map(function(e,t){return r.createElement("li",{key:t},e)})),r.createElement(a.X,{id:"ack",checked:u,onChange:function(e){return d(e.target.checked)},label:e.phrases.acknowledgement}),r.createElement(o.u,null,e.onBack&&r.createElement(o.u.Cancel,{onClick:e.onBack,text:null!==(t=e.phrases.backButton)&&void 0!==t?t:l("backButton"),variant:"link"}),r.createElement(o.u.Submit,{onClick:function(){u&&!e.loading&&e.onDelete()},text:e.phrases.deleteButton,variant:"danger",disabled:!u||e.loading,showSpinner:e.loading})))}},33518:(e,t,n)=>{var r;n.d(t,{e:()=>r}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(r||(r={}))},93563:(e,t,n)=>{n.d(t,{_:()=>l});var r=n(20354),i=n(57881),a=n(33518),o=n(18488),c=n(8233);function l(e){var t=r.a.useGetFetchAsync(),n=r.a.useBasicFetch(o.o.getPrivacy(e.entityId));return{loaded:!!n.data,updateShareLink:function(e,n){if(n.privacy===a.e.PasswordProtected)throw i.Y.logError("Cannot update to legacy share privacy(".concat(n.privacy,") for share with id ").concat(e)),new Error("invalid-share-privacy");return t(o.o.updateShare(e,n))},createShareLink:function(r){var i=null!=r?r:"protected"===c.R.getShareLinkAccessType(n.data)?a.e.Protected:a.e.JustMySchool;return t(o.o.createShareLink({objectId:e.entityId,privacy:i}))},deleteShareLink:function(e){return t(o.o.deleteShare(e))}}}},87265:(e,t,n)=>{n.d(t,{s:()=>l});var r=n(20354),i=n(18488),a=n(2267),o=n(39151),c=n(31949);function l(e){var t,n=r.a.useBasicFetch(c.N.currentUser()),l=a.I.getFetchFunctionByType(e.entityType)(e.entityId,null===(t=n.data)||void 0===t?void 0:t.id),s=r.a.useBasicFetch(i.o.getPrivacy(e.entityId)),u=r.a.useBasicFetch(e.shareId?i.o.getShare(e.shareId):i.o.getShareLink(e.entityId)),d=r.a.useBasicFetch(o.L.config());return{dataLoaded:!!(l.data&&n.data&&s.data&&u.data&&d.data),currentUser:n,entity:l,privacy:s,share:u,config:d}}},8233:(e,t,n)=>{n.d(t,{R:()=>p});var r=n(23481),i=n(110),a=n(33518),o=n(4594),c=n(49080),l=n(26361),s=n(35223),u=n(31908);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var y=r.T.encloseNamespace("sharev2.utils"),p={getPrivateIconAndText:function(e){var t=e.entityTypeId,n=e.privacy,r=e.hasStudentExp,i=e.entity,c=e.yearGroups;if(t===o.E.Topic||t===o.E.Series)return{icon:s.vn.VisibleOn,text:y(r?"justMySchoolTeachers":"justMySchoolDescription")};if(!Array.isArray(n))switch(n){case a.e.Public:return{icon:s.vn.VisibleOn,text:y("publicDescription")};case a.e.ProtectedOverrideRestriction:return{icon:s.vn.VisibleOn,text:y("clickViewOnly")};case a.e.Protected:return{icon:s.vn.Lock,text:p.getRespectRatingText(i,c,r)};case a.e.JustMySchoolOverrideRestriction:return{icon:s.vn.Lock,text:y(r?"justMySchoolTeachers":"justMySchoolDescription")};case a.e.JustMySchool:return{icon:s.vn.Lock,text:p.getRespectRatingText(i,c,r)};case a.e.PinCode:return{icon:s.vn.Lock,text:y("pinDescription")};case a.e.PasswordProtected:return{icon:s.vn.Lock,text:y("password")};default:return{}}},getIconAndText:function(e){var t=e.linkExpireDate,n=e.isPasswordProtected,r=e.status;if(!t&&!n)return p.getPrivateIconAndText(e);if(!t)return{icon:s.vn.Lock,text:y("password")};var a=i.O.isToday(t),o=i.O.diffBetween(t,new Date,"day");if(!n){var l=a?y("expiryToday"):y("expiry",{days:o});return r===c.F.Expired&&(l=y("expired")),{icon:s.vn.Timer,text:l}}var u=a?y("passwordExpiryToday"):y("passwordExpiry",{days:o});return r===c.F.Expired&&(u=y("passwordExpired")),{icon:s.vn.Lock,text:u}},getRespectRatingText:function(e,t,n){var r;if(!e||!t)return null;if(n)return y("justMySchoolTeachers");if(!u.M.isVideoType(e))return y("collectionRating");var i=l.l.getWeightedRestriction(null===(r=e._restrictions)||void 0===r?void 0:r.value);if(i&&!i.yearGroup)return y("onlyAdmins");var a,o,c,s=u.M.getRating(e),p=function(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var a,o=!0,c=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return o=e.done,e},e:function(e){c=!0,a=e},f:function(){try{o||null==n.return||n.return()}finally{if(c)throw a}}}}(t);try{for(p.s();!(c=p.n()).done;){var v=c.value;(!a||v.value>a.value)&&(a=v),i&&v.value<=i.yearGroup||s&&v.rating.value<s.value||(!o||v.value<o.value)&&(o=v)}}catch(e){p.e(e)}finally{p.f()}return o?1===t.length?y("clickViewOnly"):o.value===a.value?y("maxYearGroup",{yearGroup:a.name}):y("yearGroupRange",{yearGroup:o.name}):y("onlyStaff")},getShareLinkAccessType:function(e){return e.isTvContent||e.isClickViewContent?"protected":e.canManageAccess?"owner":"private"}}},2267:(e,t,n)=>{n.d(t,{I:()=>s});var r=n(20354),i=n(64249),a=n(4594),o=n(5112),c=n(60011),l=n(40841),s={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return l._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,r,i,a,o,c;return{preventScrubbing:null!==(i=null!==(r=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==r?r:null==t?void 0:t.preventScrubbing)&&void 0!==i&&i,immediateFeedback:null!==(c=null!==(o=null===(a=null==e?void 0:e.options)||void 0===a?void 0:a.immediateFeedback)&&void 0!==o?o:null==t?void 0:t.immediateFeedback)&&void 0!==c&&c}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case a.E.Video:return"video";case a.E.Playlist:return"playlist";case a.E.Subject:return"subject";case a.E.Series:return"series";case a.E.Interactive:return"interactive";case a.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return r.a.useBasicFetch(o.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return r.a.useBasicFetch(c.J.seriesWithThumbnailAndCount(e))}}return i.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return i.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return i.I.getAnalyticsOptions(e)}}},31121:(e,t,n)=>{n.d(t,{j:()=>c});var r=n(65858),i=n(84850);function a(e){return"share"in e&&!!e.share}var o={"create-share-link":{isValid:a,analyticsOptions:{actionType:r.Vw.Create,workflowPhase:r.eu.Complete,entity:r.py.ShareLink}},"update-share-link":{isValid:a,analyticsOptions:{actionType:r.Vw.Edit,entity:r.py.ShareLink,workflowPhase:r.eu.Complete}},"delete-share-link":{isValid:a,analyticsOptions:{actionType:r.Vw.Delete,entity:r.py.ShareLink,workflowPhase:r.eu.Complete}},"plugin-share-embed":{isValid:a,analyticsOptions:{actionType:r.Vw.Share,descriptor:r.YM.PluginEmbed,workflowPhase:r.eu.Complete,entity:r.py.ShareLink}},"copy-embed-html":{isValid:function(){return!0},analyticsOptions:{actionType:r.Vw.Share,workflowPhase:r.eu.Complete,entity:r.py.ShareLink,descriptor:r.YM.CopyEmbedHtml}},"copy-share-link":{isValid:a,analyticsOptions:{actionType:r.Vw.Share,workflowPhase:r.eu.Complete,entity:r.py.ShareLink,descriptor:r.YM.CopyLink}}};function c(e){var t,n=(0,i.X)({analyticsOptions:e.analyticsOptions,baseData:e.data,config:o,shouldLog:null===(t=e.shouldLog)||void 0===t||t});return{log:n.log,getData:n.getData}}},89701:(e,t,n)=>{n.r(t),n.d(t,{DeleteShareLinkConfirmationView:()=>f});var r=n(32735),i=n(6044),a=n(23481),o=n(65858),c=n(29923),l=n(93563),s=n(87265),u=n(31121),d=n(9111),y=n(69883);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var v=a.T.encloseNamespace("sharev2.deleteShareLinkConfirmation");function f(e){var t,n,a=(0,y.Z)(),f=(t=r.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,a,o,c=[],l=!0,s=!1;try{if(a=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=a.call(n)).done)&&(c.push(r.value),c.length!==t);l=!0);}catch(e){s=!0,i=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw i}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?p(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),h=f[0],g=f[1],m=(0,s.s)({entityId:e.entityId,entityType:e.entityType}),b=m.share,S=m.entity,k=(0,l._)({entityId:e.entityId}).deleteShareLink,w=(0,u.j)({data:{entity:{id:e.entityId,type:e.entityType}},analyticsOptions:{location:o.LZ.Popup,eventVersion:o.eq.V3}}).log,T=!!b.data&&!!S.data;return r.createElement(d.G,{title:v("title"),closePopup:e.closePopup,showLoadingSpinner:!T||e.loading,animation:e.animate},r.createElement(c.F,{loading:h,phrases:{leadingSentence:v("intro"),bulletPoints:[v("loseAccessInfo"),v("loseAccessUsage")],acknowledgement:v("acknowledgement"),backButton:v("back"),deleteButton:v("delete")},onDelete:function(){var t;g(!0),k(null===(t=b.data)||void 0===t?void 0:t.shareId).then(function(){w({type:"delete-share-link",share:b.data}),g(!1),a.success(v("deleteSuccess")),e.closePopup(),e.previousAppLink&&i.C$.trigger(e.previousAppLink)}).catch(function(){a.error(v("deleteFailed",{name:S.data.name,escapeText:!0}))}).finally(function(){g(!1)})},onBack:e.goToSettingsStep?e.goToSettingsStep:void 0}))}},41661:(e,t,n)=>{var r;n.d(t,{D:()=>r}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(r||(r={}))},40841:(e,t,n)=>{n.d(t,{_:()=>c});var r=n(23481),i=n(41661),a=n(65728),o=r.T.encloseNamespace("shared.shared-utils"),c={getShareIntegrations:function(e,t){return[{id:i.D.GoogleClassroom,name:o("googleClassroom"),enabled:e,settingName:a.E.ShareToGoogleClassroom},{id:i.D.MicrosoftTeams,name:o("msftTeams"),enabled:t,settingName:a.E.ShareToMicrosoftTeams}]}}},84850:(e,t,n)=>{n.d(t,{X:()=>a});var r=n(1048),i=n(49985);function a(e){function t(t,n){var a=e.config[t.type];if(null==a?void 0:a.isValid(t)){var o=Object.assign(Object.assign({},e.baseData),t);return{data:r.t.omit(o,["type"]),analyticsOptions:i.k.mergeOptions(a.analyticsOptions,[e.analyticsOptions,n])}}}return{getData:t,log:function(n,r){if(e.shouldLog){var a=t(n,r);a&&i.k.logUserAction(a.data,a.analyticsOptions)}}}}}}]);
|
|
2
|
+
//# sourceMappingURL=9701-d86dfbee0c-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/9701-d86dfbee0c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share-v2/components/delete-share-content/DeleteShareContent.tsx","file:///app/packages/libs/shared/src/apps/share-v2/enums/SharePrivacy.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkActions.ts","file:///app/packages/libs/shared/src/apps/share-v2/hooks/useShareLinkData.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareViewHelper.tsx","file:///app/packages/libs/shared/src/apps/share-v2/utils/get-share-event-logger/getShareEventLogger.ts","file:///app/packages/libs/shared/src/apps/share-v2/views/delete-share-link-confirmation-view/DeleteShareLinkConfirmationView.tsx","file:///app/packages/libs/shared/src/enums/IntegrationId.ts","file:///app/packages/libs/shared/src/utils/IntegrationHelper.ts","file:///app/packages/libs/shared/src/utils/get-event-logger/getEventLogger.ts"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nconst namespace = 'sharev2.deleteShareContent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DeleteShareContentProps {\n loading: boolean;\n phrases: {\n leadingSentence: string;\n bulletPoints: string[];\n acknowledgement: string;\n deleteButton: string;\n backButton?: string;\n };\n onDelete: () => void;\n onBack?: () => void;\n}\n\nexport function DeleteShareContent(props: DeleteShareContentProps) {\n const [ ack, setAck ] = React.useState(false);\n\n function onDelete() {\n if (!ack || props.loading)\n return;\n\n props.onDelete();\n }\n\n return (\n <div className='d-flex flex-column gap-3'>\n <p className='m-0'>{props.phrases.leadingSentence}</p>\n <ul className='m-0'>\n {props.phrases.bulletPoints.map((phrase, index) => (\n <li key={index}>\n {phrase}\n </li>\n ))}\n </ul>\n <Checkbox\n id='ack'\n checked={ack}\n onChange={e => setAck(e.target.checked)}\n label={props.phrases.acknowledgement}\n />\n <PopupButtons>\n {props.onBack && (\n <PopupButtons.Cancel\n onClick={props.onBack}\n text={props.phrases.backButton ?? getPhrase('backButton')}\n variant='link'\n />\n )}\n <PopupButtons.Submit\n onClick={onDelete}\n text={props.phrases.deleteButton}\n variant='danger'\n disabled={!ack || props.loading}\n showSpinner={props.loading}\n />\n </PopupButtons>\n </div>\n );\n}","export enum SharePrivacy {\n Public = 'Public',\n PinCode = 'PinCode',\n PasswordProtected = 'PasswordProtected',\n ProtectedOverrideRestriction = 'ProtectedOverrideRestriction',\n JustMySchoolOverrideRestriction = 'JustMySchoolOverrideRestriction',\n Protected = 'Protected',\n JustMySchool = 'JustMySchool',\n Direct = 'Direct'\n}","import { Flight } from 'libs/common/react/index';\n\nimport { Logger } from 'libs/shared/utils/Logger';\n\nimport { SharePrivacy } from '../enums/SharePrivacy';\nimport { ShareRequests } from '../flight-requests/ShareRequests';\nimport { Share } from '../interfaces/Share';\nimport { SharePrivacyResponse } from '../interfaces/SharePrivacyResponse';\nimport { UpdateShareRequest } from '../interfaces/UpdateShareRequest';\nimport { ShareLinkHelper } from '../utils/ShareLinkHelper';\n\ninterface UseShareLinkActionsOptions {\n entityId: string;\n}\n\nexport function useShareLinkActions(options: UseShareLinkActionsOptions) {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const entityPrivacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n\n function getCreateSharePrivacy() {\n const accessType = ShareLinkHelper.getShareLinkAccessType(entityPrivacy.data);\n\n return accessType === 'protected'\n ? SharePrivacy.Protected\n : SharePrivacy.JustMySchool;\n }\n\n function updateShareLink(shareId: string, data: UpdateShareRequest): Promise<Share> {\n // Legacy share privacy - if we try to update to this we should log & throw an error\n if (data.privacy === SharePrivacy.PasswordProtected) {\n Logger.logError(`Cannot update to legacy share privacy(${data.privacy}) for share with id ${shareId}`);\n\n throw new Error('invalid-share-privacy');\n }\n \n return fetchAsync<Share>(ShareRequests.updateShare(shareId, data));\n }\n\n function createShareLink(privacy?: SharePrivacy): Promise<Share> {\n const requestPrivacy = privacy ?? getCreateSharePrivacy();\n return fetchAsync<Share>(ShareRequests.createShareLink({ objectId: options.entityId, privacy: requestPrivacy }));\n }\n\n function deleteShareLink(shareId: string): Promise<void> {\n return fetchAsync(ShareRequests.deleteShare(shareId));\n }\n\n return {\n loaded: !!entityPrivacy.data,\n updateShareLink,\n createShareLink,\n deleteShareLink\n };\n}","import { Flight } from 'libs/common/react/index';\n\nimport { ShareRequests } from 'libs/shared/apps/share-v2/flight-requests/ShareRequests';\nimport type { SharePrivacyResponse } from 'libs/shared/apps/share-v2/interfaces/SharePrivacyResponse';\nimport { SharableEntityType, ShareViewHelper } from 'libs/shared/apps/share-v2/utils/ShareViewHelper';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport type { Config, CurrentUser } from 'libs/shared/interfaces';\n\nimport { Share } from '../interfaces/Share';\n\ninterface UseShareLinkDataOptions {\n entityId: string;\n entityType: SharableEntityType;\n shareId?: string;\n}\n\n\nexport function useShareLinkData(options: UseShareLinkDataOptions) {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const entity = ShareViewHelper.getFetchFunctionByType(options.entityType)(options.entityId, currentUser.data?.id);\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(ShareRequests.getPrivacy(options.entityId));\n const share = Flight.useBasicFetch<Share>(options.shareId\n ? ShareRequests.getShare(options.shareId)\n : ShareRequests.getShareLink(options.entityId));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const dataLoaded = !!entity.data\n && !!currentUser.data\n && !!privacy.data\n && !!share.data\n && !!config.data;\n\n return {\n dataLoaded,\n currentUser: currentUser,\n entity: entity,\n privacy: privacy,\n share: share,\n config: config\n };\n}","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 { Flight } from 'libs/common/react/index';\n\nimport { AnalyticsOptions, EntityType } from 'libs/analytics/interfaces';\n\nimport { ShareViewHelper as OldShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport type { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport type { Clip, Interactive, InteractiveMetadata, Playlist, Series, Subject, Video } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nexport type SharableEntityType = 'video' | 'playlist' | 'subject' | 'series' | 'interactive' | 'clip';\nexport type SharableEntity = Video | Playlist | Subject | Series | InteractiveMetadata | Clip;\nexport interface ShareSettingsFormFields {\n preventScrubbing: boolean;\n immediateFeedback: boolean;\n}\n\nexport const ShareViewHelper = {\n canEmbed(type: SharableEntityType): boolean {\n return [ 'video', 'interactive', 'clip' ].includes(type);\n },\n\n /**\n * Only interactive entities can update share settings currently\n */\n canAddPolicies(type: SharableEntityType): boolean {\n return ['interactive'].includes(type);\n },\n\n getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n },\n\n getShareSettingsInitialValues(share: Share, interactive: Interactive | null) {\n return {\n preventScrubbing: share?.options?.preventScrubbing ?? interactive?.preventScrubbing ?? false,\n immediateFeedback: share?.options?.immediateFeedback ?? interactive?.immediateFeedback ?? false\n };\n },\n \n getEnabledSettingsField(entityType: SharableEntityType): {[key in `show${Capitalize<keyof ShareSettingsFormFields>}Field`]: boolean} {\n return {\n showImmediateFeedbackField: entityType === 'interactive',\n showPreventScrubbingField: entityType === 'interactive'\n };\n },\n\n getSharableEntityType(share: Share): SharableEntityType {\n switch (share.objectTypeId) {\n case MasterType.Video:\n return 'video';\n case MasterType.Playlist:\n return 'playlist';\n case MasterType.Subject:\n return 'subject';\n case MasterType.Series:\n return 'series';\n case MasterType.Interactive:\n return 'interactive';\n case MasterType.Clip:\n return 'clip';\n }\n },\n\n /**\n * Methods from old ShareViewHelper imported here for namespacing\n */\n getFetchFunctionByType: (type: SharableEntityType) => {\n switch (type) {\n case 'playlist': {\n return (id: string) => Flight.useBasicFetch<Playlist>(PlaylistRequests.playlistWithThumbnailAndCount(id));\n }\n\n case 'series': {\n return (id: string) => Flight.useBasicFetch<Series>(SeriesRequests.seriesWithThumbnailAndCount(id));\n }\n }\n \n return OldShareViewHelper.getFetchFunctionByType(type);\n },\n\n getAnalyticsEntity(entityType: string): EntityType {\n return OldShareViewHelper.getAnalyticsEntity(entityType);\n },\n\n getAnalyticsOptions(entityType: SharableEntityType): AnalyticsOptions {\n return OldShareViewHelper.getAnalyticsOptions(entityType);\n }\n};","import { AnalyticsOptions, EntityType, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EventLogConfig, getEventLogger } from 'libs/shared/utils/get-event-logger/getEventLogger';\n\nimport { BaseShareData, ShareLogData } from './interfaces/GetShareEventLogger';\n\ninterface ShareEventLoggerOptions {\n data: BaseShareData;\n analyticsOptions: AnalyticsOptions;\n shouldLog?: boolean;\n}\n\nexport type ShareLogFn = ReturnType<typeof getShareEventLogger>['log'];\n\nfunction isValidShare(data: ShareLogData): boolean {\n if (!('share' in data))\n return false;\n\n return !!data.share;\n}\n\nconst LogDataConfig: EventLogConfig<ShareLogData> = {\n /**\n * Share - Link\n */\n 'create-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n 'update-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Edit,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n 'delete-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Delete,\n entity: EntityType.ShareLink,\n workflowPhase: WorkflowPhase.Complete\n }\n },\n\n 'plugin-share-embed': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink\n }\n },\n\n /**\n * General\n */\n 'copy-embed-html': {\n isValid: () => true,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyEmbedHtml\n }\n },\n 'copy-share-link': {\n isValid: isValidShare,\n analyticsOptions: {\n actionType: UserAction.Share,\n workflowPhase: WorkflowPhase.Complete,\n entity: EntityType.ShareLink, // default\n descriptor: ShareDescriptors.CopyLink\n }\n }\n};\n\nexport function getShareEventLogger(options: ShareEventLoggerOptions) {\n const { log, getData } = getEventLogger({\n analyticsOptions: options.analyticsOptions,\n baseData: options.data,\n config: LogDataConfig,\n shouldLog: options.shouldLog ?? true\n });\n\n return {\n log,\n getData\n };\n}","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EventVersion, LocationContext } from 'libs/analytics/interfaces';\n\nimport { DeleteShareContent } from 'libs/shared/apps/share-v2/components/delete-share-content/DeleteShareContent';\nimport { useShareLinkActions } from 'libs/shared/apps/share-v2/hooks/useShareLinkActions';\nimport { useShareLinkData } from 'libs/shared/apps/share-v2/hooks/useShareLinkData';\nimport { getShareEventLogger } from 'libs/shared/apps/share-v2/utils/get-share-event-logger/getShareEventLogger';\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 { useAlerts } from 'libs/shared/hooks/UseAlerts';\n\nconst namespace = 'sharev2.deleteShareLinkConfirmation';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface DeleteShareLinkConfirmationViewProps extends MultiStepPopupViewProps {\n entityId: string;\n entityType: SharableEntityType;\n previousAppLink?: Core.AppLink;\n goToSettingsStep?: () => void;\n}\n\nexport function DeleteShareLinkConfirmationView(props: DeleteShareLinkConfirmationViewProps) {\n const alerts = useAlerts();\n\n const [ loading, setLoading ] = React.useState(false);\n\n const { share, entity } = useShareLinkData({\n entityId: props.entityId,\n entityType: props.entityType\n });\n\n const { deleteShareLink } = useShareLinkActions({\n entityId: props.entityId\n });\n\n const { log } = getShareEventLogger({\n data: {\n entity: {\n id: props.entityId,\n type: props.entityType\n }\n },\n analyticsOptions: {\n location: LocationContext.Popup,\n eventVersion: EventVersion.V3\n }\n });\n \n function onClickDelete() {\n setLoading(true);\n\n deleteShareLink(share.data?.shareId).then(() => {\n log({\n type: 'delete-share-link',\n share: share.data\n });\n\n setLoading(false);\n alerts.success(getPhrase('deleteSuccess'));\n props.closePopup();\n\n if (props.previousAppLink) {\n AppLinkHelper.trigger(props.previousAppLink);\n }\n }).catch(() => {\n alerts.error(getPhrase('deleteFailed', { name: entity.data.name, escapeText: true }));\n }).finally(() => {\n setLoading(false);\n });\n }\n\n const loaded = !!share.data && !!entity.data;\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!loaded || props.loading}\n animation={props.animate}\n >\n <DeleteShareContent\n loading={loading}\n phrases={{\n leadingSentence: getPhrase('intro'),\n bulletPoints: [\n getPhrase('loseAccessInfo'),\n getPhrase('loseAccessUsage')\n ],\n acknowledgement: getPhrase('acknowledgement'),\n backButton: getPhrase('back'),\n deleteButton: getPhrase('delete')\n }}\n onDelete={onClickDelete}\n onBack={props.goToSettingsStep ? props.goToSettingsStep : undefined}\n />\n </Popup>\n );\n}\n","export enum IntegrationId {\n GoogleClassroom = 'google-classroom',\n MicrosoftTeams = 'microsoft-teams',\n Vivi = 'vivi',\n AppleTv = 'apply-tv'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { Integration } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.shared-utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const IntegrationHelper = {\n getShareIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): Integration[] {\n return [\n {\n id: IntegrationId.GoogleClassroom,\n name: getPhrase('googleClassroom'),\n enabled: googleClassroomSetting,\n settingName: SettingName.ShareToGoogleClassroom\n },\n {\n id: IntegrationId.MicrosoftTeams,\n name: getPhrase('msftTeams'),\n enabled: msftTeamsSetting,\n settingName: SettingName.ShareToMicrosoftTeams\n }\n ];\n }\n};\n","import { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, HashObject } from 'libs/analytics/interfaces';\n\n/**\n * Base type that every event needs to extend from\n */\nexport interface BaseEventLogData<T extends string = string> {\n type: T;\n}\n\n/**\n * Utility type to map event types to config types\n */\nexport type EventLogConfig<TEvents extends BaseEventLogData> = {\n [K in TEvents['type']]: BaseConfigData<Extract<TEvents, { type: K }>>;\n};\n\ninterface BaseConfigData<T extends BaseEventLogData> {\n isValid?: (data: T) => boolean;\n analyticsOptions: AnalyticsOptions;\n}\n\ninterface GetEventLoggerOptions<TData extends HashObject, TEvents extends BaseEventLogData> {\n baseData: TData;\n /**\n * Event type config map\n */\n config: EventLogConfig<TEvents>;\n /**\n * Base analytics options\n */\n analyticsOptions: AnalyticsOptions;\n\n shouldLog?: boolean;\n}\n\n/**\n * Method build and log events which are typed using map\n * passed in from config\n */\nexport function getEventLogger<\n TData extends HashObject = HashObject,\n TEvents extends BaseEventLogData = BaseEventLogData\n>(\n options: GetEventLoggerOptions<TData, TEvents>\n) {\n /**\n * Types to assist hinting in our log / getData methods\n */\n type EventType = TEvents['type']; // type of event\n type EventData = Extract<TEvents, { type: EventType }>; // restrict the data to the passed type\n \n /**\n * Get analytics data and options for a given event type\n */\n function getData(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n const logDataConfig = options.config[data.type];\n\n if (!logDataConfig?.isValid(data))\n return;\n\n const mergedData = {\n ...options.baseData,\n ...data\n };\n \n const sanitizedData = ObjectHelper.omit<typeof data>(mergedData, ['type']);\n\n const analyticsOptions = AnalyticsHelper.mergeOptions(\n logDataConfig.analyticsOptions,\n [\n options.analyticsOptions,\n logAnalyticsOptions\n ]\n );\n\n return {\n data: sanitizedData,\n analyticsOptions\n };\n }\n\n /**\n * Similar to `getData` except it logs the analytics event\n * for a given type if its valid\n */\n function log(\n data: EventData,\n logAnalyticsOptions?: AnalyticsOptions\n ) {\n if (!options.shouldLog)\n return;\n\n const analytics = getData(data, logAnalyticsOptions);\n\n if (!analytics)\n return;\n\n AnalyticsHelper.logUserAction(analytics.data, analytics.analyticsOptions);\n }\n\n return {\n getData,\n log\n };\n}"],"names":["getPhrase","DeleteShareContent","props","ack","setAck","className","phrases","leadingSentence","bulletPoints","map","phrase","index","key","id","checked","onChange","e","target","label","acknowledgement","onBack","onClick","text","backButton","variant","loading","onDelete","deleteButton","disabled","showSpinner","SharePrivacy","useShareLinkActions","options","fetchAsync","entityPrivacy","entityId","loaded","data","updateShareLink","shareId","privacy","Error","createShareLink","requestPrivacy","objectId","deleteShareLink","useShareLinkData","currentUser","entity","entityType","share","config","dataLoaded","ShareLinkHelper","getPrivateIconAndText","entityTypeId","hasStudentExp","yearGroups","icon","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","ShareViewHelper","canEmbed","type","includes","canAddPolicies","getEnabledIntegrations","googleClassroomSetting","msftTeamsSetting","filter","i","enabled","getShareSettingsInitialValues","interactive","preventScrubbing","immediateFeedback","getEnabledSettingsField","showImmediateFeedbackField","showPreventScrubbingField","getSharableEntityType","objectTypeId","getFetchFunctionByType","getAnalyticsEntity","getAnalyticsOptions","isValidShare","LogDataConfig","isValid","analyticsOptions","actionType","workflowPhase","descriptor","getShareEventLogger","baseData","shouldLog","log","getData","DeleteShareLinkConfirmationView","alerts","setLoading","location","eventVersion","title","closePopup","showLoadingSpinner","animation","animate","then","success","previousAppLink","error","escapeText","goToSettingsStep","undefined","IntegrationId","IntegrationHelper","getShareIntegrations","settingName","getEventLogger","logAnalyticsOptions","logDataConfig","mergedData","analytics"],"sourceRoot":""}
|