@clickview/reports 0.87.0-rc.0 → 0.87.0
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/.vite/manifest.json +292 -292
- package/dist/bundles.json +1 -1
- package/dist/en.json +1 -1
- package/dist/scripts/3AogjH3v.chunk.js +2 -0
- package/dist/scripts/3AogjH3v.chunk.js.map +1 -0
- package/dist/scripts/{BYLD2f9R2.chunk.js → B01p94Dy2.chunk.js} +2 -2
- package/dist/scripts/{BYLD2f9R2.chunk.js.map → B01p94Dy2.chunk.js.map} +1 -1
- package/dist/scripts/{C7rNnvPs.chunk.js → BKWokslH.chunk.js} +2 -2
- package/dist/scripts/{C7rNnvPs.chunk.js.map → BKWokslH.chunk.js.map} +1 -1
- package/dist/scripts/{BQcTfbZm2.chunk.js → BSethuDj2.chunk.js} +2 -2
- package/dist/scripts/{BQcTfbZm2.chunk.js.map → BSethuDj2.chunk.js.map} +1 -1
- package/dist/scripts/{CkS0imTk2.chunk.js → BbbU3LZb2.chunk.js} +2 -2
- package/dist/scripts/{CkS0imTk2.chunk.js.map → BbbU3LZb2.chunk.js.map} +1 -1
- package/dist/scripts/{DPmS69Mt2.chunk.js → BfXnhpYV2.chunk.js} +2 -2
- package/dist/scripts/{DPmS69Mt2.chunk.js.map → BfXnhpYV2.chunk.js.map} +1 -1
- package/dist/scripts/{CKTy7NJ92.chunk.js → BnSmV6552.chunk.js} +2 -2
- package/dist/scripts/{CKTy7NJ92.chunk.js.map → BnSmV6552.chunk.js.map} +1 -1
- package/dist/scripts/BryHI-Z6.chunk.js +2 -0
- package/dist/scripts/BryHI-Z6.chunk.js.map +1 -0
- package/dist/scripts/{Bs_S7mFn2.chunk.js → C587wSvL2.chunk.js} +2 -2
- package/dist/scripts/{Bs_S7mFn2.chunk.js.map → C587wSvL2.chunk.js.map} +1 -1
- package/dist/scripts/{DldsJ3cq.chunk.js → CGfKmxkF.chunk.js} +2 -2
- package/dist/scripts/{DldsJ3cq.chunk.js.map → CGfKmxkF.chunk.js.map} +1 -1
- package/dist/scripts/{DkXQWig4.chunk.js → CPfbCh7G.chunk.js} +2 -2
- package/dist/scripts/{DkXQWig4.chunk.js.map → CPfbCh7G.chunk.js.map} +1 -1
- package/dist/scripts/{B_HlStqa2.chunk.js → CYTD62SM2.chunk.js} +2 -2
- package/dist/scripts/{B_HlStqa2.chunk.js.map → CYTD62SM2.chunk.js.map} +1 -1
- package/dist/scripts/{CllvFALa2.chunk.js → ChsDPjp62.chunk.js} +2 -2
- package/dist/scripts/{CllvFALa2.chunk.js.map → ChsDPjp62.chunk.js.map} +1 -1
- package/dist/scripts/{DxBCBFh3.chunk.js → Cje7C8bz.chunk.js} +2 -2
- package/dist/scripts/{DxBCBFh3.chunk.js.map → Cje7C8bz.chunk.js.map} +1 -1
- package/dist/scripts/{BLzQ085A.chunk.js → Co8fEkVu.chunk.js} +2 -2
- package/dist/scripts/{BLzQ085A.chunk.js.map → Co8fEkVu.chunk.js.map} +1 -1
- package/dist/scripts/{DuQ74iFu.chunk.js → CqU1GfrZ.chunk.js} +2 -2
- package/dist/scripts/{DuQ74iFu.chunk.js.map → CqU1GfrZ.chunk.js.map} +1 -1
- package/dist/scripts/{rdbFZIyT.chunk.js → CrnI3v9u.chunk.js} +2 -2
- package/dist/scripts/{rdbFZIyT.chunk.js.map → CrnI3v9u.chunk.js.map} +1 -1
- package/dist/scripts/{28JMpJbt.chunk.js → Cu1MGmFY.chunk.js} +2 -2
- package/dist/scripts/{28JMpJbt.chunk.js.map → Cu1MGmFY.chunk.js.map} +1 -1
- package/dist/scripts/{BbTaGrM02.chunk.js → CzP4rwtN2.chunk.js} +2 -2
- package/dist/scripts/{BbTaGrM02.chunk.js.map → CzP4rwtN2.chunk.js.map} +1 -1
- package/dist/scripts/{BxKrer6h.chunk.js → D0Qw5weM.chunk.js} +2 -2
- package/dist/scripts/{BxKrer6h.chunk.js.map → D0Qw5weM.chunk.js.map} +1 -1
- package/dist/scripts/{DK50VHUW2.chunk.js → D3xJ2nOi2.chunk.js} +2 -2
- package/dist/scripts/{DK50VHUW2.chunk.js.map → D3xJ2nOi2.chunk.js.map} +1 -1
- package/dist/scripts/{DFxl2xgU.chunk.js → DLvXDRHp.chunk.js} +2 -2
- package/dist/scripts/{DFxl2xgU.chunk.js.map → DLvXDRHp.chunk.js.map} +1 -1
- package/dist/scripts/{Bn4Go0UF.chunk.js → DPwC1loE.chunk.js} +2 -2
- package/dist/scripts/{Bn4Go0UF.chunk.js.map → DPwC1loE.chunk.js.map} +1 -1
- package/dist/scripts/{C1m-1G6w2.chunk.js → DROEKPMt2.chunk.js} +2 -2
- package/dist/scripts/{C1m-1G6w2.chunk.js.map → DROEKPMt2.chunk.js.map} +1 -1
- package/dist/scripts/{DfhaG70Z2.chunk.js → DfsBAns02.chunk.js} +2 -2
- package/dist/scripts/{DfhaG70Z2.chunk.js.map → DfsBAns02.chunk.js.map} +1 -1
- package/dist/scripts/{BOGodQXj2.chunk.js → DoqY7Zz22.chunk.js} +2 -2
- package/dist/scripts/{BOGodQXj2.chunk.js.map → DoqY7Zz22.chunk.js.map} +1 -1
- package/dist/scripts/{BQLCt3Ad.chunk.js → Ds5BQW36.chunk.js} +45 -45
- package/dist/scripts/Ds5BQW36.chunk.js.map +1 -0
- package/dist/scripts/DtHo-s19.chunk.js +1 -0
- package/dist/scripts/{WxjzAHzM.chunk.js → F0alulpY.chunk.js} +2 -2
- package/dist/scripts/{WxjzAHzM.chunk.js.map → F0alulpY.chunk.js.map} +1 -1
- package/dist/scripts/{yklF-2M1.chunk.js → GIKXvkU2.chunk.js} +2 -2
- package/dist/scripts/{yklF-2M1.chunk.js.map → GIKXvkU2.chunk.js.map} +1 -1
- package/dist/scripts/{Du87dvla.chunk.js → JKXdJyQp.chunk.js} +2 -2
- package/dist/scripts/{Du87dvla.chunk.js.map → JKXdJyQp.chunk.js.map} +1 -1
- package/dist/scripts/{CItOH7dg2.chunk.js → QGZBrJRg2.chunk.js} +2 -2
- package/dist/scripts/{CItOH7dg2.chunk.js.map → QGZBrJRg2.chunk.js.map} +1 -1
- package/dist/scripts/{SNiCkvSP.chunk.js → UxXRVBhL.chunk.js} +2 -2
- package/dist/scripts/{SNiCkvSP.chunk.js.map → UxXRVBhL.chunk.js.map} +1 -1
- package/dist/scripts/{rtCrJwRm.chunk.js → Z3CSanPV.chunk.js} +2 -2
- package/dist/scripts/{rtCrJwRm.chunk.js.map → Z3CSanPV.chunk.js.map} +1 -1
- package/dist/scripts/{app-BeoBow2q.js → app-CirLTvga.js} +6 -6
- package/dist/scripts/app-CirLTvga.js.map +1 -0
- package/dist/scripts/ieOSVilg.chunk.js +1 -0
- package/dist/scripts/{C2ZUZoNE2.chunk.js → msX5dXMR2.chunk.js} +2 -2
- package/dist/scripts/{C2ZUZoNE2.chunk.js.map → msX5dXMR2.chunk.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/BQLCt3Ad.chunk.js.map +0 -1
- package/dist/scripts/CZQnIbqt.chunk.js +0 -1
- package/dist/scripts/CfPosTww.chunk.js +0 -2
- package/dist/scripts/CfPosTww.chunk.js.map +0 -1
- package/dist/scripts/DVHj6R3-.chunk.js +0 -2
- package/dist/scripts/DVHj6R3-.chunk.js.map +0 -1
- package/dist/scripts/ao_3LgdP.chunk.js +0 -1
- package/dist/scripts/app-BeoBow2q.js.map +0 -1
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{Gt as e,Kn as t,Nn as n,Pn as r,Rn as i,Vn as a,Vt as o,Wt as s,Yt as c,an as l,cn as u,in as d,zt as f}from"./BSV_W0cK.chunk.js";import{b as p}from"./DLiesDxa.chunk.js";import{t as m}from"./BDdd6NA7.chunk.js";import{n as h,t as g}from"./CNQKHXPY.chunk.js";import{n as _}from"./Bqlm3yF_.chunk.js";u();var v=class extends f{constructor(){super(),this.constructors={},this.destructors={},this.instances={},this.singletonInstances={},this.referenceCounts={}}get name(){return`InstanceManager`}static get Instance(){return this.instance||=new this}registerDataService(e,t){this.validateConstructor(e);let n=e.prototype.name;return this.referenceCounts[n]=0,this.constructors[n]=()=>new e({dataProvider:this.getInstance(t.dataProvider),cache:this.getInstance(t.cache),bootstrapData:t.bootstrapData,defaultErrorHandler:t.defaultErrorHandler,alertService:t.alertService}),this.destructors[n]=()=>{this.instances[n]?this.instances[n].destroy():c.throw(new s(`Trying to destroy a ${n} instance that has already been destroyed`)),this.releaseInstance(t.dataProvider),this.releaseInstance(t.cache)},this}registerInstance(e,t){this.validateConstructor(e);let n=e.prototype.name;return this.referenceCounts[n]=0,this.constructors[n]=()=>new e(t),this.destructors[n]=()=>a(this.instances[n].destroy)&&this.instances[n].destroy(),this}registerSingleton(e){let t=e.name;return this.singletonInstances[t]=e,this}getInstance(e,t){return this.singletonInstances[e]?this.singletonInstances[e]:(this.constructors[e]||c.throw(new s(`${e} was not registered with ${this.name}`)),this.referenceCounts[e]++,t&&this.listenTo(t,`destroy`,()=>this.releaseInstance(e)),this.instances[e]||(this.instances[e]=this.constructors[e]()),this.instances[e])}releaseInstance(e){if(this.instances[e])return window.setTimeout(()=>{this.referenceCounts[e]--,this.referenceCounts[e]<1&&(this.destructors[e](),delete this.instances[e])},0),this}validateConstructor(e){let t=e.prototype.name;t||c.throw(new s(`Classes registered with ${this.name} must have a unique name property.`)),this.constructors[t]&&c.throw(new s(`A class with the name: ${t} has already been registered with ${this.name}`))}}.Instance,y={LOCALE:`locale`,PHRASES:`phrases`,VERSION:`version`,TOKEN:`token`,PERMISSIONS:`permissions`,USER:`currentUser`,PRODUCTS:`products`},b={admin:async()=>(await g(async()=>{let{default:e}=await import(`./B751cs0L2.chunk.js`);return{default:e}},[])).default,teacher:async()=>(await g(async()=>{let{default:e}=await import(`./CAH8oCSg2.chunk.js`);return{default:e}},[])).default,freemium:async()=>(await g(async()=>{let{default:e}=await import(`./fVuTMtqg2.chunk.js`);return{default:e}},[])).default,streamable:async()=>(await g(async()=>{let{default:e}=await import(`./CgohO1KN2.chunk.js`);return{default:e}},[])).default,"cv-student":async()=>(await g(async()=>{let{default:e}=await import(`./BuUwj64o2.chunk.js`);return{default:e}},[])).default},x={currentUser(e,t){return{url:`/api/currentuser`,publicUrl:`/api/currentuser`,key:`currentuser`,normalizeOptions:{namespace:`currentuser`},bootstrapName:y.USER,success:e,error:t}},user(e,t,n){return{url:`{gateway}/v1/users/${e}`,key:`users:${e}`,success:t,error:n}},groups(e){return{url:`{gateway}/v1/objects/${e}/members?query=groups`,key:`users:${e}:groups`}},usersById(e,t,n){return{url:h.urlBuilder(`{gateway}/v1/users`,{id:e}),key:`users:list:${e.join(`,`)}`,success:t,error:n,formatData:t=>{let n=t.reduce((e,t)=>(e[t.id.toString()]=t,e),{});return e.map(e=>n[e.toString()])}}},getUserIdByQuery(e,t){return{url:`{gateway}/v1/users/ids?${e}`,key:`users:ids:${e}`,success:t}},workspace(e,t){return{url:`/api/domain/v2/me/workspace?query=categorytree`,key:`workspace`,success:e,error:t}},sendVerificationEmail(e,t,n,r){return{url:`/api/account/email`,key:`verify:email`,type:p.POST,data:{emailAddress:e},success:t,error:n,always:r,invalidationKeys:[`verify:email:status`]}},token(e,t){return{url:`/api/token`,key:`token`,bootstrapName:y.TOKEN,formatData:e=>typeof e.expiry!=`number`||e.expiry<=0||isNaN(e.expiry)?e:{value:e.value,localTTL:new Date().getTime()+e.expiry*1e3},success:e,error:t}},permissions(e,t){return{url:`{gateway}/v1/users/me/permissions`,publicUrl:`/api/permissions`,key:`permissions`,success:e,error:t,normalize:!1,formatData:e=>e.reduce((e,t)=>(e[t]=!0,e),{}),bootstrapName:y.PERMISSIONS}},_simulatedPermissions(e,t,n){return{url:`simulated:/v1/users/me/permissions/${e}`,key:`permissions`,success:t,error:n,normalize:!1,formatData:e=>e.reduce((e,t)=>(e[t]=!0,e),{}),successResponse:async()=>(await b[e]()).map(e=>e)}},customers(e){return{url:`{gateway}/v1/objects/${e}/customers`,key:`customers`}},accessPolicy(){return{url:`{gateway}/v1/users/me/access-policy`,key:`access:policy`}},updateJobTitle(e,t,n){return{url:`{gateway}/v1/customers/${t}/users/job-titles`,key:`update:${e}:job:title:${n}`,type:p.PUT,data:{customerId:t,users:[{userId:e,jobTitle:n}]},updateState:{keys:`users:${e}`,updateData:t=>{let r=t[`users:${e}`];return{...t,[`users:${e}`]:{...r,userProfile:{...r.userProfile,metadata:{...r.userProfile.metadata||{},jobTitle:n}}}}}}}},getById(e,t){let n=m.uniq(e);return n.sort(),{url:`{gateway}/v1/objects?query=${`avatar&${n.map(e=>`id=${e}`).join(`&`)}`}`,key:`users:by:id:${n.join(`,`)}`,error:t}},updateCurrentUser(e,t,n,r){return{url:`{gateway}/v1/users/me/info`,key:`edit:current:user`,type:p.PUT,data:e,invalidationKeys:[`search:aggregation`,`currentuser`],success:t,error:n,always:r}},updateUserJobTitle(e){return{url:`{gateway}/v1/users/me/profile`,key:`edit:current:user:role`,type:p.PUT,data:{jobTitle:e},invalidationKeys:[`search:aggregation`,`currentuser`,`users:`]}},getTeachingLevel(e,t){return{url:`{gateway}/v1/objects/${e}?query=userprofiles[teachinglevel]{customer.id:${t}}`,key:`get:teaching:level:user:${e}:${t}`,formatData:e=>e?.userProfiles?.data?.[0]?.teachingLevel??null}},setTeachingLevel(e){return{url:`{gateway}/v1/users/me/teaching-level`,key:`set:teaching:level`,type:p.PUT,data:{learningLevelId:e},invalidationKeys:[`get:teaching:level`]}}},S=t(l());u();var C=function(e){return e.Success=`success`,e.Warning=`warning`,e.Fail=`danger`,e.Info=`info`,e.Pending=`pending`,e}({}),w=function(e){return e.Success=`Success! 🙌`,e.Warning=`Whoops...`,e.Fail=`Oops...`,e.Info=`FYI`,e}({}),T=class extends f{constructor(e){super(e)}initialize(){this.alertCollection=new e,this.listenTo(d.ALERT,`remove:alert`,this.removeAlert),this.showAlerts()}get name(){return _.ALERT}get defaults(){return{maxAlerts:3}}showAlerts(){let e=S.default.channel(d.ALERT),t={collection:this.alertCollection};this.options.alertViewCtor&&(t=i({},t,{ctor:this.options.alertViewCtor})),e.trigger(`show:alert`,t)}removeAlert(e){this.alertCollection.remove(e),this.showAlerts()}createAlert(e){this.alertCollection.length===this.options.maxAlerts&&this.alertCollection.shift(),e.id||(e=i({},e,{id:this.generateUniqueAlertId()})),this.alertCollection.push(new o(e)),this.showAlerts()}clearAllAlerts(){this.alertCollection.reset(null)}success(e){return typeof e==`string`?n(()=>this.createAlert(i({},this.options.defaultSuccessAlert,{message:e})),this):e.useXHR?n((e,t)=>this.createAlert(i({},this.options.defaultSuccessAlert,{message:t})),this):n(()=>this.createAlert(i({},this.options.defaultSuccessAlert,e)),this)}error(e){return typeof e==`string`?n(()=>this.createAlert(i({},this.options.defaultErrorAlert,{message:e})),this):e.useXHR?n(e=>this.createAlert(i({},this.options.defaultErrorAlert,{message:e.message})),this):n(()=>this.createAlert(i({},this.options.defaultErrorAlertIL_DEFAULT,e)),this)}generateUniqueAlertId(){return r(`alert_`)}};export{y as a,x as i,T as n,v as o,w as r,C as t};
|
|
2
|
+
//# sourceMappingURL=3AogjH3v.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"mappings":"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","names":[],"ignoreList":[],"sources":["../../../../libs/common/src/backbone/services/InstanceManager.ts","../../../../libs/shared/src/constants/BootstrapKeys.ts","../../../../libs/shared/src/flight-requests/UserRequests.ts","../../../../libs/common/src/backbone/services/BaseAlertService.ts"],"sourcesContent":["import { ObjectHash } from 'backbone';\nimport { MnObject } from 'backbone.marionette';\nimport * as _ from 'underscore';\n\nimport { ErrorHelper } from 'libs/common/backbone/core/BaseError';\nimport { BaseService } from 'libs/common/backbone/core/BaseService';\nimport { DevError } from 'libs/common/backbone/errors/DevError';\nimport { BaseDataService, BaseDataServiceOptions } from 'libs/common/backbone/services/BaseDataService';\n\nimport { BaseAlertService } from './BaseAlertService';\n\ninterface DataServiceConstructor {\n new (options: BaseDataServiceOptions): BaseDataService;\n}\n\ninterface DataServiceInstanceOptions {\n cache: string;\n dataProvider: string;\n bootstrapData?: ObjectHash;\n defaultErrorHandler?: (...args: any[]) => any;\n alertService: BaseAlertService;\n}\n\nclass StaticInstanceManager extends BaseService {\n private static instance: StaticInstanceManager;\n\n private constructors: {[name: string]: () => MnObject };\n private destructors: {[name: string]: () => void };\n private instances: {[name: string]: any };\n private singletonInstances: {[name: string]: any };\n private referenceCounts: {[name: string]: number };\n\n private constructor() {\n super();\n\n this.constructors = {};\n this.destructors = {};\n this.instances = {};\n this.singletonInstances = {};\n this.referenceCounts = {};\n }\n\n // @ts-ignore\n public get name(): string {\n return 'InstanceManager';\n }\n\n public static get Instance(): StaticInstanceManager {\n return this.instance || (this.instance = new this());\n }\n\n public registerDataService(ctor: DataServiceConstructor, options: DataServiceInstanceOptions): this {\n this.validateConstructor(ctor);\n\n const name = ctor.prototype.name;\n\n this.referenceCounts[name] = 0;\n this.constructors[name] = () => new ctor({\n dataProvider: this.getInstance(options.dataProvider),\n cache: this.getInstance(options.cache),\n bootstrapData: options.bootstrapData,\n defaultErrorHandler: options.defaultErrorHandler,\n alertService: options.alertService\n });\n this.destructors[name] = () => {\n if (this.instances[name])\n this.instances[name].destroy();\n else\n ErrorHelper.throw(new DevError(`Trying to destroy a ${name} instance that has already been destroyed`));\n\n this.releaseInstance(options.dataProvider);\n this.releaseInstance(options.cache);\n };\n\n return this;\n }\n\n public registerInstance<TInstanceOptions>(ctor: new(...args: any[]) => any, options?: TInstanceOptions): this {\n this.validateConstructor(ctor);\n\n const name = ctor.prototype.name;\n\n this.referenceCounts[name] = 0;\n this.constructors[name] = () => new ctor(options);\n this.destructors[name] = () => _.isFunction(this.instances[name].destroy) && this.instances[name].destroy();\n\n return this;\n }\n\n public registerSingleton(instance: any): this {\n const name = instance.name;\n\n this.singletonInstances[name] = instance;\n\n return this;\n }\n\n public getInstance<T>(name: string, owner?: Backbone.Events): T {\n if (this.singletonInstances[name])\n return this.singletonInstances[name];\n\n if (!this.constructors[name])\n ErrorHelper.throw(new DevError(`${name} was not registered with ${this.name}`));\n\n this.referenceCounts[name]++;\n\n if (owner)\n this.listenTo(owner, 'destroy', () => this.releaseInstance(name));\n\n if (!this.instances[name]) {\n this.instances[name] = this.constructors[name]();\n }\n\n return this.instances[name];\n }\n\n public releaseInstance(name: string): this {\n if (!this.instances[name])\n return;\n\n /**\n * In scenarios where an application redirects to another application\n * within one execution cycle, an instance may be initialized, used to fetch\n * data and disposed of, before the instance is requested again, which will leave\n * a hanging open fetch request.\n *\n * By wrapping the below in a setTimeout we ensure any instance clean up\n * will always happen at the end of any execution cycle.\n */\n window.setTimeout(() => {\n this.referenceCounts[name]--;\n\n if (this.referenceCounts[name] < 1) {\n this.destructors[name]();\n delete this.instances[name];\n }\n }, 0);\n\n return this;\n }\n\n private validateConstructor(ctor: new(...args: any[]) => any): void {\n const name = ctor.prototype.name;\n\n if (!name)\n ErrorHelper.throw(new DevError(`Classes registered with ${this.name} must have a unique name property.`));\n\n if (this.constructors[name]) {\n ErrorHelper.throw(\n new DevError(`A class with the name: ${name} has already been registered with ${this.name}`)\n );\n }\n }\n}\n\nexport const InstanceManager = StaticInstanceManager.Instance;\n","const BootstrapKeys = {\n LOCALE: 'locale',\n PHRASES: 'phrases',\n VERSION: 'version',\n TOKEN: 'token',\n PERMISSIONS: 'permissions',\n USER: 'currentUser',\n PRODUCTS: 'products'\n};\n\nexport { BootstrapKeys };\n","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { EditCurrentUserDetails } from 'libs/shared/apps/user-manager/interfaces/EditCurrentUserDetails';\nimport { BootstrapKeys } from 'libs/shared/constants/BootstrapKeys';\nimport { PermissionName, PermissionsLookup } from 'libs/shared/enums/PermissionName';\nimport { CurrentUser, LearningLevel, User } from 'libs/shared/interfaces';\nimport { AuthToken } from 'libs/shared/interfaces/models/AuthToken';\n\nexport type SimulatedPermissionsPreset = 'admin' | 'teacher' | 'freemium' | 'streamable' | 'cv-student';\n\nexport const SIMULATED_PERMISSIONS_MAP: Record<SimulatedPermissionsPreset, () => Promise<string[]>> = {\n 'admin': async () => (await import('./simulated/permissions/admin.json')).default,\n 'teacher': async () => (await import('./simulated/permissions/teacher.json')).default,\n 'freemium': async () => (await import('./simulated/permissions/freemium.json')).default,\n 'streamable': async () => (await import('./simulated/permissions/streamable.json')).default,\n 'cv-student': async () => (await import('./simulated/permissions/cv-student.json')).default\n};\n\nexport const UserRequests = {\n currentUser(success?: (user: CurrentUser) => void, error?: (xhr?: Xhr) => void): Flight.PublicRequest {\n return {\n url: '/api/currentuser',\n publicUrl: '/api/currentuser',\n key: 'currentuser',\n normalizeOptions: {\n namespace: 'currentuser'\n },\n bootstrapName: BootstrapKeys.USER,\n success,\n error\n };\n },\n\n user(id: string, success?: (user: User) => void, error?: (xhr?: Xhr) => void): Flight.Request {\n return {\n url: `{gateway}/v1/users/${id}`,\n // If you update this key, please also update the key in the `updateJobTitle` request\n key: `users:${id}`,\n success,\n error\n };\n },\n\n groups(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}/members?query=groups`,\n key: `users:${id}:groups`\n };\n },\n\n usersById(userIds: string[], success?: (users: User[]) => void, error?: (xhr?: Xhr) => void): Flight.Request {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/users', { id: userIds }),\n key: `users:list:${userIds.join(',')}`,\n success,\n error,\n formatData: (users: User[]) => {\n /**\n * It's not guarenteed that the users will be returned in the same order they are requested,\n * so we map them back to the request order here.\n */\n const userMap = users.reduce((prev: HashObject, curr) => {\n prev[curr.id.toString()] = curr;\n return prev;\n }, {});\n\n return userIds.map(userId => {\n return userMap[userId.toString()];\n });\n }\n };\n },\n\n getUserIdByQuery(\n query: string,\n success?: (ids: string[]) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/users/ids?${query}`,\n key: `users:ids:${query}`,\n success\n };\n },\n \n workspace(success?: (workspace: HashObject) => void, error?: () => void): Flight.Request {\n return {\n url: '/api/domain/v2/me/workspace?query=categorytree',\n key: 'workspace',\n success,\n error\n };\n },\n\n sendVerificationEmail(\n emailAddress: string,\n success: () => void,\n error: () => void,\n always: () => void\n ): Flight.Request {\n return {\n url: '/api/account/email',\n key: 'verify:email',\n type: HttpVerbs.POST,\n data: { emailAddress },\n success,\n error,\n always,\n invalidationKeys: ['verify:email:status']\n };\n },\n\n /**\n * This shared request makes calls directly to each consuming project (i.e. there's a \n * dedicated endpoint in both Lite and Analytics C#). When using this request, ensure that you \n * check the token response from your respective project. In future, we'll look to shift the\n * token out of the frontend, in the interim, if you need to modify this, please ensure\n * you consider the implication on Lite (which requires the localTTL) - Mike\n */\n token(success?: (token: HashObject) => void, error?: (xhr: Xhr) => void): Flight.Request {\n return {\n url: '/api/token',\n key: 'token',\n bootstrapName: BootstrapKeys.TOKEN,\n formatData: (data: HashObject): AuthToken => {\n /**\n * Where the server doesn't return a token expiry offset we'll continue to use\n * the token's value as is.\n */\n if (typeof data.expiry !== 'number' || data.expiry <= 0 || isNaN(data.expiry))\n return data as AuthToken;\n\n /**\n * Where the server does provide a token expiry offset, we'll compute and store the TTL\n * against the client's local clock. This will be subsquently checked to determine\n * when we'll need to request a refreshed token. See AuthTokenHelper.ts for further details.\n */\n return {\n value: data.value,\n // Convert token expiry from seconds to millseconds\n localTTL: new Date().getTime() + (data.expiry * 1000)\n };\n },\n success,\n error\n };\n },\n\n permissions(success?: (permissions: PermissionsLookup) => void, error?: () => void): Flight.PublicRequest {\n return {\n url: '{gateway}/v1/users/me/permissions',\n publicUrl: '/api/permissions',\n key: 'permissions',\n success,\n error,\n normalize: false,\n formatData: (data: PermissionName[]) =>\n data.reduce((acc: PermissionsLookup, permission) => {\n acc[permission] = true;\n return acc;\n }, {} as PermissionsLookup),\n bootstrapName: BootstrapKeys.PERMISSIONS\n };\n },\n\n _simulatedPermissions(\n preset: SimulatedPermissionsPreset,\n success?: (permissions: PermissionsLookup) => void,\n error?: () => void\n ): Flight.SimulatedRequest {\n return {\n url: `simulated:/v1/users/me/permissions/${preset}`,\n key: 'permissions',\n success,\n error,\n normalize: false,\n formatData: (data: PermissionName[]) =>\n data.reduce((acc: PermissionsLookup, p) => {\n acc[p] = true;\n return acc;\n }, {} as PermissionsLookup),\n successResponse: async () => {\n const permissions = await SIMULATED_PERMISSIONS_MAP[preset]();\n return permissions.map(p => p as PermissionName);\n }\n };\n },\n\n customers(userId: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${userId}/customers`,\n key: 'customers'\n };\n },\n\n /**\n * Please don't use this unless it's to send the current user's\n * access policy to collection API - Sha\n * https://i.imgur.com/u2DjLsC.png\n */\n accessPolicy(): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/access-policy',\n key: 'access:policy'\n };\n },\n\n updateJobTitle(id: string, customerId: string, jobTitle: string): Flight.Request {\n return {\n url: `{gateway}/v1/customers/${customerId}/users/job-titles`,\n key: `update:${id}:job:title:${jobTitle}`,\n type: HttpVerbs.PUT,\n data: {\n customerId,\n users: [{\n userId: id,\n jobTitle\n }]\n },\n updateState: {\n keys: `users:${id}`,\n updateData: (state: any) => {\n const user = state[`users:${id}`];\n\n return {\n ...state,\n [`users:${id}`]: {\n ...user,\n userProfile: {\n ...user.userProfile,\n metadata: {\n ...(user.userProfile.metadata || {}),\n jobTitle\n }\n }\n }\n };\n }\n }\n };\n },\n \n getById(ids: string[], error?: (xhr: Xhr) => void): Flight.Request {\n const uniqIds = ArrayHelper.uniq(ids);\n uniqIds.sort();\n \n const query = `avatar&${uniqIds.map(id => `id=${id}`).join('&')}`;\n\n return {\n url: `{gateway}/v1/objects?query=${query}`,\n key: `users:by:id:${uniqIds.join(',')}`,\n error\n };\n },\n\n updateCurrentUser(\n details: EditCurrentUserDetails,\n success?: (updatedUser?: User) => void,\n error?: () => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/info',\n key: 'edit:current:user',\n type: HttpVerbs.PUT,\n data: details,\n invalidationKeys: [ 'search:aggregation', 'currentuser' ],\n success,\n error,\n always\n };\n },\n\n updateUserJobTitle(\n role: string\n ): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/profile',\n key: 'edit:current:user:role',\n type: HttpVerbs.PUT,\n data: { jobTitle: role },\n // 'users:' matches `users:${id}` via the regex matcher in StateHelper.getMatchingKeyMap,\n // so per-id user caches drop their stale jobTitle along with `currentuser`.\n invalidationKeys: [ 'search:aggregation', 'currentuser', 'users:' ]\n };\n },\n\n getTeachingLevel(userId: string, customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${userId}?query=userprofiles[teachinglevel]{customer.id:${customerId}}`,\n key: `get:teaching:level:user:${userId}:${customerId}`,\n formatData: (user: User): LearningLevel | null => user?.userProfiles?.data?.[0]?.teachingLevel ?? null\n };\n },\n\n setTeachingLevel(learningLevelId: string): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/teaching-level',\n key: 'set:teaching:level',\n type: HttpVerbs.PUT,\n data: { learningLevelId },\n invalidationKeys: ['get:teaching:level']\n };\n }\n};\n","import * as React from 'react';\nimport { ObjectHash } from 'backbone';\nimport Radio from 'backbone.radio';\nimport * as _ from 'underscore';\n\nimport { CommonChannels } from 'libs/common/backbone/constants/CommonChannels';\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\nimport { AppLink } from 'libs/common/backbone/core/AppLink';\nimport { BaseCollection } from 'libs/common/backbone/core/BaseCollection';\nimport { BaseCollectionView } from 'libs/common/backbone/core/BaseCollectionView';\nimport { BaseModel } from 'libs/common/backbone/core/BaseModel';\nimport { BaseService, BaseServiceOptions } from 'libs/common/backbone/core/BaseService';\nimport { BaseView } from 'libs/common/backbone/core/BaseView';\nimport { BaseComponent } from 'libs/common/backbone/core/BaseView';\nimport { ViewCtor } from 'libs/common/backbone/core/Types';\nimport { DataServiceError } from 'libs/common/backbone/interfaces/DataServiceError';\n\nexport enum AlertType {\n Success = 'success',\n Warning = 'warning',\n Fail = 'danger',\n Info = 'info',\n Pending = 'pending'\n}\n\nexport enum DefaultAlertHeading {\n Success = 'Success! 🙌',\n Warning = 'Whoops...',\n Fail = 'Oops...',\n Info = 'FYI'\n}\n\nexport interface BaseAlert {\n id?: string;\n type: AlertType;\n heading: string;\n message?: string;\n appLink?: AppLink;\n appLinkText?: string;\n appLinkClassName?: string;\n extLink?: string;\n extLinkText?: string;\n extLinkClassName?: string;\n timeout?: number;\n}\n\nexport interface DefaultAlertCallback {\n (message?: string, options?: ObjectHash): void;\n}\n\nexport interface BaseAlertOptions {\n useXHR: boolean;\n}\n\ntype View = BaseView | BaseCollectionView | BaseComponent;\n\ninterface AlertProps {\n alerts: BaseAlert[];\n removeAlert: (id: string) => void;\n}\n\nexport interface BaseAlertServiceOptions extends BaseServiceOptions {\n maxAlerts?: number;\n defaultSuccessAlert: BaseAlert;\n defaultErrorAlert: BaseAlert;\n alertViewCtor?: ViewCtor<View> | ((props: AlertProps) => React.ReactElement);\n}\n\nexport class BaseAlertService extends BaseService {\n declare protected options: BaseAlertServiceOptions;\n private alertCollection: BaseCollection;\n\n public constructor(options: BaseAlertServiceOptions) {\n super(options);\n }\n\n public initialize(): void {\n this.alertCollection = new BaseCollection();\n\n this.listenTo(CommonChannels.ALERT, 'remove:alert', this.removeAlert);\n\n this.showAlerts();\n }\n\n // @ts-ignore\n public get name(): string {\n return CommonServices.ALERT;\n }\n\n // @ts-ignore\n public get defaults(): ObjectHash {\n return {\n maxAlerts: 3\n };\n }\n\n /**\n * As it's not known which application is currently in scope,\n * we emit a render event to construct the alert collection view\n * if required. If the current application already has a alert\n * view rendered, it will simply be ignored.\n */\n private showAlerts(): void {\n const channel = Radio.channel(CommonChannels.ALERT);\n\n let options = { collection: this.alertCollection };\n\n if (this.options.alertViewCtor)\n options = _.extend({}, options, { ctor: this.options.alertViewCtor });\n\n channel.trigger('show:alert', options);\n }\n\n public removeAlert(id: string): void {\n this.alertCollection.remove(id);\n\n this.showAlerts();\n }\n\n public createAlert(alertData: BaseAlert): void {\n if (this.alertCollection.length === this.options.maxAlerts)\n this.alertCollection.shift();\n\n if (!alertData.id)\n alertData = _.extend({}, alertData, { id: this.generateUniqueAlertId() });\n\n this.alertCollection.push(new BaseModel(alertData));\n\n this.showAlerts();\n }\n\n public clearAllAlerts(): void {\n this.alertCollection.reset(null);\n }\n\n public success(successAlert: string | BaseAlert | BaseAlertOptions): DefaultAlertCallback {\n // Construct alert object from string\n if (typeof successAlert === 'string')\n return _.bind(() =>\n this.createAlert(_.extend({}, this.options.defaultSuccessAlert, { message: successAlert })), this);\n\n // Construct alert object from our XHR response\n if ((successAlert as BaseAlertOptions).useXHR) {\n return _.bind((data: any, textStatus: any) =>\n this.createAlert(_.extend({}, this.options.defaultSuccessAlert, { message: textStatus })), this);\n }\n\n // Use alert passed as an argument \n return _.bind(() => this.createAlert(_.extend({}, this.options.defaultSuccessAlert, successAlert)), this);\n }\n\n public error(errorAlert: string | BaseAlert | BaseAlertOptions): DefaultAlertCallback {\n // Construct alert object from string\n if (typeof errorAlert === 'string')\n return _.bind(() =>\n this.createAlert(_.extend({}, this.options.defaultErrorAlert, { message: errorAlert })), this);\n\n // Construct alert object from our XHR response\n if ((errorAlert as BaseAlertOptions).useXHR) {\n return _.bind((error: DataServiceError) =>\n this.createAlert(_.extend({}, this.options.defaultErrorAlert, { message: error.message })), this);\n }\n\n // Use alert passed as an argument \n return _.bind(() => this.createAlert(_.extend({}, this.options.defaultErrorAlertIL_DEFAULT, errorAlert)), this);\n }\n\n private generateUniqueAlertId(): string {\n return _.uniqueId('alert_');\n }\n}\n"],"file":"3AogjH3v.chunk.js"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Kn as e,st as t}from"./BSV_W0cK.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
import{Kn as e,st as t}from"./BSV_W0cK.chunk.js";import{n}from"./CNQKHXPY.chunk.js";import{t as r}from"./DoqY7Zz22.chunk.js";var i=e(t(),1),a=new Map,o=new WeakMap,s=0,c=void 0;function l(e){return e?o.has(e)?o.get(e):(s+=1,o.set(e,s.toString()),o.get(e)):`0`}function u(e){return Object.keys(e).sort().filter(t=>e[t]!==void 0).map(t=>`${t}_${t===`root`?l(e.root):e[t]}`).toString()}function d(e){let t=u(e),n=a.get(t);if(!n){let r=new Map,i,o=new IntersectionObserver(t=>{t.forEach(t=>{var n;let a=t.isIntersecting&&i.some(e=>t.intersectionRatio>=e);e.trackVisibility&&t.isVisible===void 0&&(t.isVisible=a),(n=r.get(t.target))==null||n.forEach(e=>{e(a,t)})})},e);i=o.thresholds||(Array.isArray(e.threshold)?e.threshold:[e.threshold||0]),n={id:t,observer:o,elements:r},a.set(t,n)}return n}function f(e,t,n={},r=c){if(window.IntersectionObserver===void 0&&r!==void 0){let i=e.getBoundingClientRect();return t(r,{isIntersecting:r,target:e,intersectionRatio:typeof n.threshold==`number`?n.threshold:0,time:0,boundingClientRect:i,intersectionRect:i,rootBounds:i}),()=>{}}let{id:i,observer:o,elements:s}=d(n),l=s.get(e)||[];return s.has(e)||s.set(e,l),l.push(t),o.observe(e),function(){l.splice(l.indexOf(t),1),l.length===0&&(s.delete(e),o.unobserve(e)),s.size===0&&(o.disconnect(),a.delete(i))}}function p({threshold:e,delay:t,trackVisibility:n,rootMargin:r,root:a,triggerOnce:o,skip:s,initialInView:c,fallbackInView:l,onChange:u}={}){let[d,p]=i.useState(null),m=i.useRef(),[h,g]=i.useState({inView:!!c,entry:void 0});m.current=u,i.useEffect(()=>{if(s||!d)return;let i;return i=f(d,(e,t)=>{g({inView:e,entry:t}),m.current&&m.current(e,t),t.isIntersecting&&o&&i&&(i(),i=void 0)},{root:a,rootMargin:r,threshold:e,trackVisibility:n,delay:t},l),()=>{i&&i()}},[Array.isArray(e)?e.toString():e,d,a,r,o,s,n,l,t]);let _=h.entry?.target,v=i.useRef();!d&&_&&!o&&!s&&v.current!==_&&(v.current=_,g({inView:!!c,entry:void 0}));let y=[p,h.inView,h.entry];return y.ref=y[0],y.inView=y[1],y.entry=y[2],y}function m(e){let{userId:t,customerId:n,...r}=e;return{...r,uid:t,cid:n}}var h={aggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}`,m(t)),key:r(`video:views:v2:aggregation`,t,e),normalize:!1}},videoAggregation(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}`,m(i)),key:r(`video:views:v2:aggregation:${e}`,i,t),normalize:!1}},aggregationChart(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${e}/chart`,m(t)),key:r(`video:views:v2:aggregation:chart`,t,e),normalize:!1}},videoAggregationChart(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/${t}/chart`,m(i)),key:r(`video:views:v2:aggregation:chart:${e}`,i,t),normalize:!1}},topStreams(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/top`,{...m(t),limit:e}),key:r(`video:views:v2:top:streams:${e}`,t),normalize:!1}},videoHeatMap(e,t,i){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/heat-map`,{...m(t),cursor:i}),key:r(`video:views:v2:heatmap:${e}`,t,i),normalize:!1}},videoHeatMapAggregation(e,t){return{url:n.urlBuilder(`{gateway}/v2/analytics/streams/videos/${e}/aggregation/heat-map`,m(t)),key:r(`video:views:v2:aggregation:heatmap:${e}`,t),normalize:!1}}};export{p as n,h as t};
|
|
2
|
+
//# sourceMappingURL=B01p94Dy2.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BYLD2f9R2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"B01p94Dy2.chunk.js","names":[],"sources":["../../../../../node_modules/react-intersection-observer/index.mjs","../../src/shared/flight-requests/VideoViewsV2Requests.ts"],"sourcesContent":["\"use client\";\nvar __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\n\n// src/InView.tsx\nimport * as React from \"react\";\n\n// src/observe.ts\nvar observerMap = /* @__PURE__ */ new Map();\nvar RootIds = /* @__PURE__ */ new WeakMap();\nvar rootId = 0;\nvar unsupportedValue = void 0;\nfunction defaultFallbackInView(inView) {\n unsupportedValue = inView;\n}\nfunction getRootId(root) {\n if (!root)\n return \"0\";\n if (RootIds.has(root))\n return RootIds.get(root);\n rootId += 1;\n RootIds.set(root, rootId.toString());\n return RootIds.get(root);\n}\nfunction optionsToId(options) {\n return Object.keys(options).sort().filter(\n (key) => options[key] !== void 0\n ).map((key) => {\n return `${key}_${key === \"root\" ? getRootId(options.root) : options[key]}`;\n }).toString();\n}\nfunction createObserver(options) {\n const id = optionsToId(options);\n let instance = observerMap.get(id);\n if (!instance) {\n const elements = /* @__PURE__ */ new Map();\n let thresholds;\n const observer = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n var _a;\n const inView = entry.isIntersecting && thresholds.some((threshold) => entry.intersectionRatio >= threshold);\n if (options.trackVisibility && typeof entry.isVisible === \"undefined\") {\n entry.isVisible = inView;\n }\n (_a = elements.get(entry.target)) == null ? void 0 : _a.forEach((callback) => {\n callback(inView, entry);\n });\n });\n }, options);\n thresholds = observer.thresholds || (Array.isArray(options.threshold) ? options.threshold : [options.threshold || 0]);\n instance = {\n id,\n observer,\n elements\n };\n observerMap.set(id, instance);\n }\n return instance;\n}\nfunction observe(element, callback, options = {}, fallbackInView = unsupportedValue) {\n if (typeof window.IntersectionObserver === \"undefined\" && fallbackInView !== void 0) {\n const bounds = element.getBoundingClientRect();\n callback(fallbackInView, {\n isIntersecting: fallbackInView,\n target: element,\n intersectionRatio: typeof options.threshold === \"number\" ? options.threshold : 0,\n time: 0,\n boundingClientRect: bounds,\n intersectionRect: bounds,\n rootBounds: bounds\n });\n return () => {\n };\n }\n const { id, observer, elements } = createObserver(options);\n const callbacks = elements.get(element) || [];\n if (!elements.has(element)) {\n elements.set(element, callbacks);\n }\n callbacks.push(callback);\n observer.observe(element);\n return function unobserve() {\n callbacks.splice(callbacks.indexOf(callback), 1);\n if (callbacks.length === 0) {\n elements.delete(element);\n observer.unobserve(element);\n }\n if (elements.size === 0) {\n observer.disconnect();\n observerMap.delete(id);\n }\n };\n}\n\n// src/InView.tsx\nfunction isPlainChildren(props) {\n return typeof props.children !== \"function\";\n}\nvar InView = class extends React.Component {\n constructor(props) {\n super(props);\n __publicField(this, \"node\", null);\n __publicField(this, \"_unobserveCb\", null);\n __publicField(this, \"handleNode\", (node) => {\n if (this.node) {\n this.unobserve();\n if (!node && !this.props.triggerOnce && !this.props.skip) {\n this.setState({ inView: !!this.props.initialInView, entry: void 0 });\n }\n }\n this.node = node ? node : null;\n this.observeNode();\n });\n __publicField(this, \"handleChange\", (inView, entry) => {\n if (inView && this.props.triggerOnce) {\n this.unobserve();\n }\n if (!isPlainChildren(this.props)) {\n this.setState({ inView, entry });\n }\n if (this.props.onChange) {\n this.props.onChange(inView, entry);\n }\n });\n this.state = {\n inView: !!props.initialInView,\n entry: void 0\n };\n }\n componentDidMount() {\n this.unobserve();\n this.observeNode();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.rootMargin !== this.props.rootMargin || prevProps.root !== this.props.root || prevProps.threshold !== this.props.threshold || prevProps.skip !== this.props.skip || prevProps.trackVisibility !== this.props.trackVisibility || prevProps.delay !== this.props.delay) {\n this.unobserve();\n this.observeNode();\n }\n }\n componentWillUnmount() {\n this.unobserve();\n }\n observeNode() {\n if (!this.node || this.props.skip)\n return;\n const {\n threshold,\n root,\n rootMargin,\n trackVisibility,\n delay,\n fallbackInView\n } = this.props;\n this._unobserveCb = observe(\n this.node,\n this.handleChange,\n {\n threshold,\n root,\n rootMargin,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n }\n unobserve() {\n if (this._unobserveCb) {\n this._unobserveCb();\n this._unobserveCb = null;\n }\n }\n render() {\n const { children } = this.props;\n if (typeof children === \"function\") {\n const { inView, entry } = this.state;\n return children({ inView, entry, ref: this.handleNode });\n }\n const {\n as,\n triggerOnce,\n threshold,\n root,\n rootMargin,\n onChange,\n skip,\n trackVisibility,\n delay,\n initialInView,\n fallbackInView,\n ...props\n } = this.props;\n return React.createElement(\n as || \"div\",\n { ref: this.handleNode, ...props },\n children\n );\n }\n};\n\n// src/useInView.tsx\nimport * as React2 from \"react\";\nfunction useInView({\n threshold,\n delay,\n trackVisibility,\n rootMargin,\n root,\n triggerOnce,\n skip,\n initialInView,\n fallbackInView,\n onChange\n} = {}) {\n var _a;\n const [ref, setRef] = React2.useState(null);\n const callback = React2.useRef();\n const [state, setState] = React2.useState({\n inView: !!initialInView,\n entry: void 0\n });\n callback.current = onChange;\n React2.useEffect(\n () => {\n if (skip || !ref)\n return;\n let unobserve;\n unobserve = observe(\n ref,\n (inView, entry) => {\n setState({\n inView,\n entry\n });\n if (callback.current)\n callback.current(inView, entry);\n if (entry.isIntersecting && triggerOnce && unobserve) {\n unobserve();\n unobserve = void 0;\n }\n },\n {\n root,\n rootMargin,\n threshold,\n // @ts-ignore\n trackVisibility,\n // @ts-ignore\n delay\n },\n fallbackInView\n );\n return () => {\n if (unobserve) {\n unobserve();\n }\n };\n },\n // We break the rule here, because we aren't including the actual `threshold` variable\n // eslint-disable-next-line react-hooks/exhaustive-deps\n [\n // If the threshold is an array, convert it to a string, so it won't change between renders.\n Array.isArray(threshold) ? threshold.toString() : threshold,\n ref,\n root,\n rootMargin,\n triggerOnce,\n skip,\n trackVisibility,\n fallbackInView,\n delay\n ]\n );\n const entryTarget = (_a = state.entry) == null ? void 0 : _a.target;\n const previousEntryTarget = React2.useRef();\n if (!ref && entryTarget && !triggerOnce && !skip && previousEntryTarget.current !== entryTarget) {\n previousEntryTarget.current = entryTarget;\n setState({\n inView: !!initialInView,\n entry: void 0\n });\n }\n const result = [setRef, state.inView, state.entry];\n result.ref = result[0];\n result.inView = result[1];\n result.entry = result[2];\n return result;\n}\nexport {\n InView,\n defaultFallbackInView,\n observe,\n useInView\n};\n//# sourceMappingURL=index.mjs.map","\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/react/index';\n\nimport { StreamAggregationType } from 'libs/shared/apps/analytics/interfaces/StreamAggregationType';\nimport { AnalyticsRequestFilter } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\n/**\n * Becasue the V2 endpoints take the user context,\n * userId and customerId cannot be used for these values so instead\n * we are using uid and cid - sha\n */\nfunction formatFilter(filter: AnalyticsRequestFilter) {\n const { userId, customerId, ...rest } = filter;\n return { ...rest, uid: userId, cid: customerId };\n}\n\nexport const VideoViewsV2Requests = {\n aggregation(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation', filter, type),\n normalize: false\n };\n },\n\n videoAggregation(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n aggregationChart(\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey('video:views:v2:aggregation:chart', filter, type),\n normalize: false\n };\n },\n\n videoAggregationChart(\n videoId: string,\n type: StreamAggregationType,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/${type}/chart`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:chart:${videoId}`, filter, type),\n normalize: false\n };\n },\n\n topStreams(limit: number, filter: AnalyticsRequestFilter): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/top`, { ...formatFilter(filter), limit }),\n key: getAnalyticsRequestKey(`video:views:v2:top:streams:${limit}`, filter),\n normalize: false\n };\n },\n\n videoHeatMap(\n videoId: string,\n filter: AnalyticsRequestFilter,\n cursor?: string\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/heat-map`, { ...formatFilter(filter), cursor }),\n key: getAnalyticsRequestKey(`video:views:v2:heatmap:${videoId}`, filter, cursor),\n normalize: false\n };\n },\n\n videoHeatMapAggregation(\n videoId: string,\n filter: AnalyticsRequestFilter\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v2/analytics/streams/videos/${videoId}/aggregation/heat-map`, formatFilter(filter)),\n key: getAnalyticsRequestKey(`video:views:v2:aggregation:heatmap:${videoId}`, filter),\n normalize: false\n };\n }\n};\n"],"x_google_ignoreList":[0],"mappings":"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"}
|