@clickview/lite 0.65.1 → 0.65.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/3549-c61e7b47a9-lite.chunk.js +2 -0
- package/dist/scripts/3549-c61e7b47a9-lite.chunk.js.map +1 -0
- package/dist/scripts/{3717-8a97ddeb28-lite.chunk.js → 3717-ce609e100b-lite.chunk.js} +2 -2
- package/dist/scripts/3717-ce609e100b-lite.chunk.js.map +1 -0
- package/dist/scripts/6802-2f25f55146-lite.chunk.js +2 -0
- package/dist/scripts/{6802-3187f3ece9-lite.chunk.js.map → 6802-2f25f55146-lite.chunk.js.map} +1 -1
- package/dist/scripts/7033-6ab57dea83-lite.chunk.js +2 -0
- package/dist/scripts/7033-6ab57dea83-lite.chunk.js.map +1 -0
- package/dist/scripts/{7177-a1731c906a-lite.chunk.js → 7177-2844888842-lite.chunk.js} +2 -2
- package/dist/scripts/7177-2844888842-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-4bdf2c81c7.min.js → bundle-ccf68491f0.min.js} +3 -3
- package/dist/scripts/{bundle-4bdf2c81c7.min.js.map → bundle-ccf68491f0.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/3549-e85af77dce-lite.chunk.js +0 -2
- package/dist/scripts/3549-e85af77dce-lite.chunk.js.map +0 -1
- package/dist/scripts/3717-8a97ddeb28-lite.chunk.js.map +0 -1
- package/dist/scripts/6802-3187f3ece9-lite.chunk.js +0 -2
- package/dist/scripts/7033-6333c374da-lite.chunk.js +0 -2
- package/dist/scripts/7033-6333c374da-lite.chunk.js.map +0 -1
- package/dist/scripts/7177-a1731c906a-lite.chunk.js.map +0 -1
- /package/dist/scripts/{bundle-4bdf2c81c7.min.js.LICENSE.txt → bundle-ccf68491f0.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3549],{74901:(e,a,t)=>{function n(e){return function(e){if(Array.isArray(e))return r(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,a){if(e){if("string"==typeof e)return r(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?r(e,a):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function r(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}t.d(a,{K:()=>i});var i=function(e){var a=[],t=[];return e.users&&a.push.apply(a,n(e.users)),e.classrooms&&t.push.apply(t,n(e.classrooms)),e.classroomGroups&&t.push.apply(t,n(e.classroomGroups)),{userId:a,groupId:t}}},94644:(e,a,t)=>{t.d(a,{r:()=>d});var n=t(50242),r=t(81886),i=t(67058),s=t(14553),l=t(49267),o=t(49075),c={notFound:i.d,forbidden:{rating:s.q,yearLevel:s.q,region:l.a,privacy:s.q},badRequest:o._,internalServerError:o._};function d(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},c),a);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.InternalServer?i!==n.o.NotFound?i!==n.o.Forbidden?t.badRequest||r.Q.Ry.throw(new s.badRequest):t.forbidden||r.Q.Ry.throw(new s.forbidden.privacy):t.notFound||r.Q.Ry.throw(new s.notFound):t.internalServerError||r.Q.Ry.throw(new o._))}}},17913:(e,a,t)=>{t.d(a,{u:()=>s});var n=t(97395),r=t(110),i=t(62875),s={individualEngagement:function(e,a,t,r){var s=Object.assign({objectId:e},a);return t&&(s.sharerId=t),r&&(s.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map",s),key:(0,i.H)("engagement:".concat(e),a,t),formatData:function(e){var a;return Object.assign(Object.assign({},e),{data:null===(a=e.data)||void 0===a?void 0:a.map((function(e){var a;return Object.assign(Object.assign({},e),{heatMap:null!==(a=e.heatMap)&&void 0!==a?a:[]})}))})},normalize:!1}},aggregateEngagement:function(e,a,t,r){var s=Object.assign({objectId:e},a);return t&&(s.sharerId=t),r&&(s.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/heat-map/aggregations",s),key:(0,i.H)("aggregate:engagement:".concat(e),a,t),formatData:function(e){var a;return Object.assign(Object.assign({},e),{heatMap:null!==(a=e.heatMap)&&void 0!==a?a:[]})},normalize:!1}},views:function(e,a,t,s){var l=Object.assign(Object.assign({},e),{timeOffset:r.O.getTimezoneOffset()});return a&&(l.objectId=a),t&&(l.sharerId=t),s&&(l.includePublicViews=!0),{url:n._.urlBuilder("{gateway}/v1/analytics/video-views",l),key:(0,i.H)("video:views:".concat(a),e,t),normalize:!1}}}},91286:(e,a,t)=>{t.d(a,{v:()=>s});var n=t(32735),r=t(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function s(e,a,t){var s=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){s.forEach((function(e){(0,r.r)(e.statusCode,a,t)}))}),[i(s),a,t])}},62875:(e,a,t)=>{function n(e,a,t){var n="".concat(e,":").concat(a.start,":").concat(a.end),r=Array.isArray(a.userId)?a.userId.sort().join(":"):a.userId,i=Array.isArray(a.groupId)?a.groupId.sort().join(":"):a.groupId;return r&&(n+=":".concat(r)),i&&(n+=":".concat(i)),t&&(n+=":".concat(t)),n}t.d(a,{H:()=>n})},27513:(e,a,t)=>{t.d(a,{m:()=>u});var n=t(32735),r=t(20354),i=t(16714),s=t(39151),l=t(22902),o=t(37802),c=t(66),d=t(11293);function u(e){var a,t=(0,o.r)(null).hasClassrooms,u=(0,l.T)().hasPermissions,m=r.a.useBasicFetch(s.L.config());return n.createElement("div",null,n.createElement(d.p,{analyticsUrl:null===(a=m.data)||void 0===a?void 0:a.analyticsWebUrl,hasAnalytics:u(i.C.ViewCustomerAnalytics),video:e.video}),n.createElement(c.j,{video:e.video,tabs:e.tabs,dateRangeAppLinkParams:e.dateRangeAppLinkParams,hasClassrooms:t}))}},11293:(e,a,t)=>{t.d(a,{p:()=>g});var n=t(32735),r=t(57900),i=t(97395),s=t(2948),l=t(10874),o=t(83345),c=t(4594),d=t(35223),u=t(86702);function m(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var v="lite.insightsAdminAlert";function g(e){var a,t,g=(a=(0,s.D)(u.y.INSIGHTS_ADMIN_ALERT,!0,{storage:r.Z1.LocalStorage}),t=2,function(e){if(Array.isArray(e))return e}(a)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,i,s,l=[],o=!0,c=!1;try{if(i=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;o=!1}else for(;!(o=(n=i.call(t)).done)&&(l.push(n.value),l.length!==a);o=!0);}catch(e){c=!0,r=e}finally{try{if(!o&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(c)throw r}}return l}}(a,t)||function(e,a){if(e){if("string"==typeof e)return m(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?m(e,a):void 0}}(a,t)||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.")}()),p=g[0],h=g[1];return e.hasAnalytics&&p?n.createElement("div",{role:"alert",className:"d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4"},n.createElement("div",null,n.createElement(o.x,{namespace:v,phrase:"adminAlert"}),n.createElement("a",{className:"text-info",href:function(){if(!e.video)return e.analyticsUrl;var a="";return e.video.typeId===c.E.Interactive&&(a="/interactives/".concat(e.video.id,"/views")),e.video.typeId===c.E.Video&&(a="/videos/".concat(e.video.id,"/views")),e.video.typeId===c.E.Clip&&(a="/clips/".concat(e.video.id,"/views")),i._.safeUrlConcat(e.analyticsUrl,a)}(),target:"_blank"},n.createElement(o.x,{namespace:v,phrase:"analytics"})),"."),n.createElement(l.h,{svgName:d.vn.Close,className:"text-blue",onClick:function(){h(!1)}})):n.createElement(n.Fragment,null)}},17934:(e,a,t)=>{t.d(a,{R:()=>I});var n=t(32735),r=t(82602),i=t(20354),s=t(74901),l=t(40003),o=t(30439),c=t(65853),d=t(64249),u=t(10874),m=t(83345),v=t(39151),g=t(1666),p=t(31949),h=t(17913),f=t(35223),y=t(86099),b=t(24758),E="insights.shareInfo";function I(e){var a,t,I,A,w,N=i.a.useBasicFetch(v.L.config()),k=Object.assign(Object.assign({},(0,l.wO)((0,l.Hb)(),e.dateRangeAppLinkParams)),(0,s.K)(e.audienceAppLinkParams)),j=i.a.useBasicFetch(p.N.currentUser()),S=i.a.useBasicFetch(e.video&&o.o.getShareLinkByObjectId(e.video.id)),O=i.a.useBasicFetch(e.video&&o.o.getSentDirectShareByObjectId(e.video.id)),C=i.a.useBasicFetch((null===(a=j.data)||void 0===a?void 0:a.customerId)&&d.I.getDirectShareRecipientsRequest(j.data.customerId,O.data)),U=i.a.useBasicFetch(j.data&&e.video&&h.u.views(k,e.video.id,j.data.id)),L=i.a.useBasicFetch(e.video&&o.o.getPrivacy(e.video.id)),B=i.a.useBasicFetch((null===(t=j.data)||void 0===t?void 0:t.isAuthenticated)&&g.h.yearGroups(j.data.customerId)),F=S.hasCompleted&&!S.data&&O.hasCompleted&&!O.data,R=S.hasCompleted&&S.data||O.hasCompleted&&O.data&&(!S.data||L.data)&&(!S.data||B.data)&&C.data&&U.data,x=S.data&&L.data&&B.data&&c.R.getIconAndText({entity:e.video,entityTypeId:e.video.typeId,hasStudentExp:!1,isPasswordProtected:S.data.isPasswordProtected,linkExpireDate:S.data.linkExpireDate,privacy:L.data,status:S.data.status,yearGroups:B.data});return n.createElement("div",{className:"mb-4"},R&&n.createElement(n.Fragment,null,n.createElement("h2",{className:"h4"},n.createElement(m.x,{namespace:E,phrase:"shareInfo"})),n.createElement("div",{className:"d-flex border border-light p-3 rounded-3 align-items-center justify-content-between"},n.createElement("div",{className:"d-flex align-items-center gap-2"},n.createElement(b.A,{shareRecipients:C.data,imageCdnUrl:null===(I=N.data)||void 0===I?void 0:I.imageCdnUrl,hasShareLink:!!S.data,maxAvatars:4,shareLinkText:null==x?void 0:x.text}),"·",n.createElement("p",{className:"mb-0"},(0,r.WU)(null===(A=O.data)||void 0===A?void 0:A.dateCreated)),"·",n.createElement("p",{className:"mb-0"},n.createElement(m.x,{namespace:E,phrase:"views",options:{count:null===(w=U.data)||void 0===w?void 0:w.data.length}}))),n.createElement(u.h,{appLink:(0,y.YK)(e.video),svgName:f.vn.Share,className:"btn btn-outline-dark"},n.createElement(m.x,{namespace:E,phrase:"share"})))),!F&&!R&&n.createElement(n.Fragment,null,n.createElement("div",{className:"h4 partial-loading-background w-25"}," "),n.createElement("div",{className:"p-3 rounded partial-loading-background"},n.createElement("p",{className:"mb-1"}," "))))}},71051:(e,a,t)=>{t.r(a),t.d(a,{VideoInsightsOverviewView:()=>z});var n=t(32735),r=t(23481),i=t(2948),s=t(20354),l=t(75896),o=t(42642),c=t(94652),d=t(25216),u=t(461),m=t(35223),v=r.T.encloseNamespace("shared.insightStudentsNotWatched");function g(e){var a,t=(null===(a=e.students)||void 0===a?void 0:a.filter((function(a){var t;return!(null===(t=e.watchedIds)||void 0===t?void 0:t.includes(a.id))})))||[];return n.createElement(d.L,{title:v("title"),svgName:m.vn.Puzzle,svgClassName:"bg-light-teal text-teal"},n.createElement(u.y,{students:t,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:v("studentsDisplay"),anonymiseUsers:e.anonymiseUsers}))}var p=r.T.encloseNamespace("shared.insightStudentsWatched");function h(e){return n.createElement(d.L,{title:p("title"),svgName:m.vn.Flag,svgClassName:"bg-light-indigo text-indigo",count:e.students.length},n.createElement(u.y,{students:e.students,imageCdnUrl:e.imageCdnUrl,imageUrl:e.imageUrl,description:p("studentsDisplay"),appLink:e.heatmapAppLink,appLinkText:p("viewAll"),anonymiseUsers:e.anonymiseUsers}))}var f=t(26025),y=t(74901),b=t(40003),E=t(30439),I=t(83345),A=t(38143),w=t(4594),N=t(39151),k=t(31949),j=t(17913),S=t(91286),O=t(93322),C=t(79612),U=t(37802),L=t(31908),B=t(99742),F=t(88630),R=t(49673),x=t(5672),P=t(27513),T=t(17934);const _={partialInsights:"ImBB3"};function D(){return n.createElement("div",null,n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-12"},n.createElement("div",{className:"".concat(_.partialInsights," rounded partial-loading-background")}))),n.createElement("h2",{className:"h4 w-25 partial-loading-background"}," "),n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(_.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(_.partialInsights," rounded partial-loading-background")}))))}var M=t(14070),V=t(97291);function H(e,a){(null==a||a>e.length)&&(a=e.length);for(var t=0,n=Array(a);t<a;t++)n[t]=e[t];return n}var q="insights.videoInsightsOverview",G=r.T.encloseNamespace(q);function z(e){var a,t,r,d,u,m,v,p=(m=(0,i.D)(A.g.ANONYMISE_USERS),v=1,function(e){if(Array.isArray(e))return e}(m)||function(e,a){var t=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=t){var n,r,i,s,l=[],o=!0,c=!1;try{if(i=(t=t.call(e)).next,0===a){if(Object(t)!==t)return;o=!1}else for(;!(o=(n=i.call(t)).done)&&(l.push(n.value),l.length!==a);o=!0);}catch(e){c=!0,r=e}finally{try{if(!o&&null!=t.return&&(s=t.return(),Object(s)!==s))return}finally{if(c)throw r}}return l}}(m,v)||function(e,a){if(e){if("string"==typeof e)return H(e,a);var t={}.toString.call(e).slice(8,-1);return"Object"===t&&e.constructor&&(t=e.constructor.name),"Map"===t||"Set"===t?Array.from(e):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?H(e,a):void 0}}(m,v)||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.")}())[0];(0,O.F)();var _=(0,U.r)(null).hasClassrooms,z=s.a.useBasicFetch(k.N.currentUser()),W=s.a.useBasicFetch(N.L.config()),Q=L.M.getVideoRequest(e.videoId,e.typeId),$=s.a.useBasicFetch(Q),K=f.B.getAudienceAppLinkParams(),Y=f.B.getDateRangeAppLinkParams(),Z=Object.assign(Object.assign({},(0,b.wO)((0,b.Hb)(),Y)),(0,y.K)(K));(0,C.M)({title:$.data?G("pageTitle",{video:null===(a=$.data)||void 0===a?void 0:a.name}):null}),(0,S.v)($);var J=s.a.useBasicFetch(j.u.aggregateEngagement(e.videoId,Z,z.data.id)),X=1===(null===(t=K.classrooms)||void 0===t?void 0:t.length)&&!(null===(r=K.classroomGroups)||void 0===r?void 0:r.length),ee=s.a.useBasicFetch(X&&F.F.getClassroomStudents(l.m.first(K.classrooms))),ae=s.a.useBasicFetch((null===(d=J.data)||void 0===d?void 0:d.userIds)&&E.o.getRecipientsById(J.data.userIds,z.data.customerId)),te=s.a.useBasicFetch(z.data&&j.u.views(Z,e.videoId,z.data.id)),ne=s.a.useBasicFetch(E.o.getShareLinkByObjectId(e.videoId)),re=s.a.useBasicFetch(E.o.getSentDirectShareByObjectId(e.videoId)),ie=!(!ne.data&&!re.data);function se(){return ae.data?Object.values(ae.data):[]}var le=z.data&&W.data&&$.data&&J.data&&(!X||ee.data),oe=Object.assign(Object.assign({},K),Y),ce=function(e,a){return{heatmapAppLink:{application:V.O.INSIGHTS,action:M.e.Insights.VIDEO_HEATMAP,args:[e],params:a}}}(e.videoId,oe);return n.createElement("div",{className:"px-3"},n.createElement(P.m,{video:$.data,dateRangeAppLinkParams:Y,tabs:function(){var e,a,t;return(null===(e=$.data)||void 0===e?void 0:e.typeId)===w.E.Clip?(0,x.$o)(null===(a=$.data)||void 0===a?void 0:a.id,"insights",oe):(0,x.$6)(null===(t=$.data)||void 0===t?void 0:t.id,"insights",oe)}()}),n.createElement(T.R,{audienceAppLinkParams:K,dateRangeAppLinkParams:Y,video:$.data}),!le&&n.createElement(D,null),le&&n.createElement(R.u,{video:$.data,hasShared:ie},n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(I.x,{namespace:q,phrase:"studentViewing"}),n.createElement("span",null,": ",se().length,ee.data?"/".concat(ee.data.data.length):"")),n.createElement("div",{className:"row g-3"},X&&n.createElement("div",{className:"col-12 col-md"},n.createElement(g,{students:ee.data.data,watchedIds:J.data.userIds,imageCdnUrl:W.data.imageCdnUrl,heatmapAppLink:ce.heatmapAppLink,imageUrl:B.W.Insights.AVATAR,anonymiseUsers:p})),n.createElement("div",{className:"col-12 col-md"},n.createElement(h,{students:se(),imageCdnUrl:W.data.imageCdnUrl,heatmapAppLink:ce.heatmapAppLink,imageUrl:B.W.Insights.AVATAR,anonymiseUsers:p})))),n.createElement("section",{className:"mb-5"},n.createElement("h2",{className:"h4"},n.createElement(I.x,{namespace:q,phrase:_?"classEngagement":"engagement"})),n.createElement("div",{className:"row g-3"},n.createElement("div",{className:"col-12 col-md-6"},n.createElement(o.i,{osCount:null===(u=te.data)||void 0===u?void 0:u.osCount})),n.createElement("div",{className:"col-12 col-md-6"},n.createElement(c.b,{engagement:J.data,heatmapAppLink:ce.heatmapAppLink}))))))}}}]);
|
|
2
|
-
//# sourceMappingURL=3549-e85af77dce-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3549-e85af77dce-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/utils/AudienceUtils.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/VideoViewRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/projects/lite/src/apps/insights/views/header/InsightsHeaderView.tsx","file:///app/packages/projects/lite/src/apps/insights/views/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/insights/views/share-info/ShareInfoView.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/insights/students-watched/InsightStudentsWatched.tsx","file:///app/packages/projects/lite/src/apps/insights/views/video/overview/partial-loading/partial-video-insights-overview.scss","file:///app/packages/projects/lite/src/apps/insights/views/video/overview/partial-loading/PartialVideoInsightsOverview.tsx","file:///app/packages/projects/lite/src/apps/insights/views/video/overview/VideoInsightsOverviewView.tsx","file:///app/packages/projects/lite/src/apps/insights/views/video/overview/VideoInsightsOverviewUtils.ts"],"sourcesContent":["import { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\n\nexport const getAudienceParams = (queryParams: AudienceQueryParams) => {\n const userId: string[] = [];\n const groupId: string[] = [];\n\n if (queryParams.users)\n userId.push(...queryParams.users);\n\n if (queryParams.classrooms)\n groupId.push(...queryParams.classrooms);\n\n if (queryParams.classroomGroups)\n groupId.push(...queryParams.classroomGroups);\n return {\n userId,\n groupId\n };\n};","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsRequestFilter, Engagement } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\nexport const VideoViewRequests = {\n individualEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n\n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map', queryParams),\n key: getAnalyticsRequestKey(`engagement:${objectId}`, filter, sharerId),\n formatData: (data: any) => {\n return {\n ...data,\n data: data.data?.map((d: any) => ({\n ...d,\n heatMap: d.heatMap ?? []\n }))\n };\n },\n normalize: false\n };\n },\n \n aggregateEngagement(\n objectId: string,\n filter: AnalyticsRequestFilter,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n objectId,\n ...filter\n };\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/heat-map/aggregations', queryParams),\n key: getAnalyticsRequestKey(`aggregate:engagement:${objectId}`, filter, sharerId),\n formatData: (data: Engagement) => {\n return {\n ...data,\n heatMap: data.heatMap ?? []\n };\n },\n normalize: false\n };\n },\n \n views(\n filter: AnalyticsRequestFilter,\n objectId?: string,\n sharerId?: string,\n includePublicViews?: boolean\n ): Flight.Request {\n const queryParams: HashObject = {\n ...filter,\n timeOffset: DateHelper.getTimezoneOffset()\n };\n\n if (objectId)\n queryParams.objectId = objectId;\n\n if (sharerId)\n queryParams.sharerId = sharerId;\n \n if (includePublicViews)\n queryParams.includePublicViews = true;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/analytics/video-views', queryParams),\n key: getAnalyticsRequestKey(`video:views:${objectId}`, filter, sharerId),\n normalize: false\n };\n }\n};","import { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { PillTab } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, VideoTypes } from 'libs/shared/interfaces';\n\nimport { InsightsHeader } from 'apps/insights/components/insights-header/InsightsHeader';\nimport { InsightsAdminAlert } from 'apps/insights/views/insights-admin-alert/InsightsAdminAlert';\n\ninterface InsightsHeaderProps {\n dateRangeAppLinkParams: DateRangeQueryParams;\n video: VideoTypes;\n tabs: PillTab[];\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsHeaderView(props: InsightsHeaderProps) {\n const { hasClassrooms } = useSettings(null);\n const { hasPermissions } = usePermissions();\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n return (\n <div>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n video={props.video}\n />\n\n <InsightsHeader\n video={props.video}\n tabs={props.tabs}\n dateRangeAppLinkParams={props.dateRangeAppLinkParams}\n hasClassrooms={hasClassrooms}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { Config, CurrentUser, DirectShare, ShareLink, VideoTypes, YearGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nconst namespace = 'insights.shareInfo';\n\ninterface ShareInfoViewProps {\n video: VideoTypes;\n audienceAppLinkParams: AudienceQueryParams;\n dateRangeAppLinkParams: DateRangeQueryParams;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function ShareInfoView(props: ShareInfoViewProps) {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), props.dateRangeAppLinkParams),\n ...getAudienceParams(props.audienceAppLinkParams)\n };\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(props.video &&\n ShareRequests.getShareLinkByObjectId(props.video.id));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(props.video &&\n ShareRequests.getSentDirectShareByObjectId(props.video.id));\n const recipients = Flight.useBasicFetch<SharableRecipient[]>(currentUser.data?.customerId &&\n ShareViewHelper.getDirectShareRecipientsRequest(currentUser.data.customerId, sentDirectShare.data));\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data && props.video &&\n VideoViewRequests.views(requestFilter, props.video.id, currentUser.data.id));\n const privacy = Flight.useBasicFetch<SharePrivacyResponse>(props.video && ShareRequests.getPrivacy(props.video.id));\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const notShared =\n (shareLink.hasCompleted && !shareLink.data) &&\n (sentDirectShare.hasCompleted && !sentDirectShare.data);\n\n const hasShareData =\n (shareLink.hasCompleted && shareLink.data) ||\n (sentDirectShare.hasCompleted && sentDirectShare.data) &&\n (!shareLink.data || privacy.data) &&\n (!shareLink.data || yearGroups.data) &&\n recipients.data &&\n videoViews.data;\n\n const shareLinkText = shareLink.data && privacy.data && yearGroups.data &&\n ShareLinkHelper.getIconAndText({\n entity: props.video,\n entityTypeId: props.video.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareLink.data.isPasswordProtected,\n linkExpireDate: shareLink.data.linkExpireDate,\n privacy: privacy.data,\n status: shareLink.data.status,\n yearGroups: yearGroups.data\n });\n\n return (\n <div className='mb-4'>\n {hasShareData &&\n <>\n <h2 className='h4'><Text namespace={namespace} phrase='shareInfo' /></h2>\n\n <div className='d-flex border border-light p-3 rounded-3 align-items-center justify-content-between'>\n <div className='d-flex align-items-center gap-2'>\n <SharedToPill\n shareRecipients={recipients.data}\n imageCdnUrl={config.data?.imageCdnUrl}\n hasShareLink={!!shareLink.data}\n maxAvatars={4}\n shareLinkText={shareLinkText?.text}\n />\n ·\n <p className='mb-0'>{formatDate(sentDirectShare.data?.dateCreated)}</p>\n ·\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ count: videoViews.data?.data.length }} /></p>\n </div>\n <IconButton\n appLink={getShareAppLink(props.video)}\n svgName={cvSvgLibrary.Share}\n className='btn btn-outline-dark'\n >\n <Text namespace={namespace} phrase='share' />\n </IconButton>\n </div>\n </>\n }\n\n {!notShared && !hasShareData &&\n <>\n <div className='h4 partial-loading-background w-25'> </div>\n <div className='p-3 rounded partial-loading-background'>\n <p className='mb-1'> </p>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsNotWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightStudentsNotWatchedProps {\n students: User[];\n imageCdnUrl: string;\n imageUrl: string;\n heatmapAppLink: Core.AppLink;\n watchedIds: string[];\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsNotWatched(props: InsightStudentsNotWatchedProps) {\n const studentsNotWatched = props.students?.filter(student => !props.watchedIds?.includes(student.id)) || [];\n\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Puzzle}\n svgClassName='bg-light-teal text-teal'\n >\n <InsightStudentList\n students={studentsNotWatched}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { InsightCard } from 'libs/shared/apps/analytics/components/insight-card/InsightCard';\nimport { InsightStudentList } from 'libs/shared/apps/analytics/components/insight-student-list/InsightStudentList';\nimport { User } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.insightStudentsWatched';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightWatchedProps {\n students: User[];\n imageCdnUrl: string;\n heatmapAppLink: Core.AppLink;\n imageUrl: string;\n anonymiseUsers: boolean;\n}\n\nexport function InsightStudentsWatched(props: InsightWatchedProps) {\n return (\n <InsightCard\n title={getPhrase('title')}\n svgName={cvSvgLibrary.Flag}\n svgClassName='bg-light-indigo text-indigo'\n count={props.students.length}\n >\n <InsightStudentList\n students={props.students}\n imageCdnUrl={props.imageCdnUrl}\n imageUrl={props.imageUrl}\n description={getPhrase('studentsDisplay')}\n appLink={props.heatmapAppLink}\n appLinkText={getPhrase('viewAll')}\n anonymiseUsers={props.anonymiseUsers}\n />\n </InsightCard>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"partialInsights\":\"ImBB3\"};","import React from 'react';\n\nimport styles from './partial-video-insights-overview.scss';\n\nexport function PartialVideoInsightsOverview() {\n return (\n <div>\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-12'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n\n <h2 className='h4 w-25 partial-loading-background'> </h2>\n <div className='row g-3 mb-5'>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n <div className='col-6'>\n <div className={`${styles.partialInsights} rounded partial-loading-background`}></div>\n </div>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InsightDevices } from 'libs/shared/apps/analytics/components/insights/devices/InsightDevices';\nimport { InsightHeatmap } from 'libs/shared/apps/analytics/components/insights/heatmap/InsightHeatmap';\nimport { InsightStudentsNotWatched } from 'libs/shared/apps/analytics/components/insights/students-not-watched/InsightStudentsNotWatched';\nimport { InsightStudentsWatched } from 'libs/shared/apps/analytics/components/insights/students-watched/InsightStudentsWatched';\nimport { BaseAnalyticsEventResponse } from 'libs/shared/apps/analytics/interfaces/BaseAnalyticsEvent';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { getAudienceParams } from 'libs/shared/apps/analytics/utils/AudienceUtils';\nimport { getInsightsDateRangePresets, getStartEndParams } from 'libs/shared/apps/analytics/utils/DateRangeUtils';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoViewRequests } from 'libs/shared/flight-requests/VideoViewRequests';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BasePaginatedCollection, Config, CurrentUser, DirectShare, Engagement, ShareLink, User, VideoTypes } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { InsightsShareMask } from 'apps/insights/components/insights-mask/InsightsShareMask';\nimport { getInsightsClipTabs, getInsightsVideoTabs } from 'apps/insights/utils/InsightsAppLinkUtils';\nimport { InsightsHeaderView } from 'apps/insights/views/header/InsightsHeaderView';\nimport { ShareInfoView } from 'apps/insights/views/share-info/ShareInfoView';\nimport { PartialVideoInsightsOverview } from 'apps/insights/views/video/overview/partial-loading/PartialVideoInsightsOverview';\nimport { getVideoInsightsAppLinks } from 'apps/insights/views/video/overview/VideoInsightsOverviewUtils';\n\nconst namespace = 'insights.videoInsightsOverview';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface VideoInsightsViewProps {\n videoId: string;\n typeId: MasterType;\n}\n\nexport function VideoInsightsOverviewView(props: VideoInsightsViewProps) {\n const [anonymiseUsers] = useViewModel<boolean>(SharedViewModelKeys.ANONYMISE_USERS);\n\n useLockContentWidth();\n\n const { hasClassrooms } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const videoRequest = VideoHelper.getVideoRequest(props.videoId, props.typeId);\n const video = Flight.useBasicFetch<VideoTypes>(videoRequest);\n\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const dateRangeAppLinkParams = AnalyticsFilterHelper.getDateRangeAppLinkParams();\n const requestFilter = {\n ...getStartEndParams(getInsightsDateRangePresets(), dateRangeAppLinkParams),\n ...getAudienceParams(audienceAppLinkParams)\n };\n\n useSetPageMetadata({ title: video.data ? getPhrase('pageTitle', { video: video.data?.name }) : null });\n useHandleObjectError(video);\n\n const aggregateEngagement = Flight.useBasicFetch<Engagement>(\n VideoViewRequests.aggregateEngagement(\n props.videoId,\n requestFilter,\n currentUser.data.id\n )\n );\n\n const classroomFilterOnly =\n audienceAppLinkParams.classrooms?.length === 1 && !audienceAppLinkParams.classroomGroups?.length;\n const classroomStudents = Flight.useBasicFetch<BasePaginatedCollection<User>>(classroomFilterOnly &&\n ClassroomRequests.getClassroomStudents(ArrayHelper.first(audienceAppLinkParams.classrooms)));\n\n const shareRecipients = Flight.useBasicFetch<User[]>(aggregateEngagement.data?.userIds &&\n ShareRequests.getRecipientsById(aggregateEngagement.data.userIds, currentUser.data.customerId));\n\n const videoViews = Flight.useBasicFetch<BaseAnalyticsEventResponse>(currentUser.data &&\n VideoViewRequests.views(requestFilter, props.videoId, currentUser.data.id));\n\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareLinkByObjectId(props.videoId));\n const sentDirectShare = Flight.useBasicFetch<DirectShare>(\n ShareRequests.getSentDirectShareByObjectId(props.videoId)\n );\n\n const hasShared = !!(shareLink.data || sentDirectShare.data);\n\n function getStudentsList() {\n if (!shareRecipients.data) return [];\n\n return Object.values(shareRecipients.data);\n }\n\n const hasDataLoaded =\n currentUser.data &&\n config.data &&\n video.data &&\n aggregateEngagement.data &&\n (!classroomFilterOnly || classroomStudents.data);\n\n const params = {\n ...audienceAppLinkParams,\n ...dateRangeAppLinkParams\n };\n\n const videoInsightsAppLinks = getVideoInsightsAppLinks(props.videoId, params);\n\n function getInsightsOverviewTabs() {\n if (video.data?.typeId === MasterType.Clip) {\n return getInsightsClipTabs(video.data?.id, 'insights', params);\n }\n\n return getInsightsVideoTabs(video.data?.id, 'insights', params);\n }\n\n return (\n <div className='px-3'>\n <InsightsHeaderView\n video={video.data}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n tabs={getInsightsOverviewTabs()}\n />\n\n <ShareInfoView\n audienceAppLinkParams={audienceAppLinkParams}\n dateRangeAppLinkParams={dateRangeAppLinkParams}\n video={video.data}\n />\n\n {!hasDataLoaded && <PartialVideoInsightsOverview />}\n\n {hasDataLoaded &&\n <InsightsShareMask video={video.data} hasShared={hasShared}>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text namespace={namespace} phrase='studentViewing' />\n <span>: {getStudentsList().length}{classroomStudents.data ? `/${classroomStudents.data.data.length}` : ''}</span>\n </h2>\n <div className='row g-3'>\n {classroomFilterOnly && (\n <div className='col-12 col-md'>\n <InsightStudentsNotWatched\n students={classroomStudents.data.data}\n watchedIds={aggregateEngagement.data.userIds}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n )}\n <div className='col-12 col-md'>\n <InsightStudentsWatched\n students={getStudentsList()}\n imageCdnUrl={config.data.imageCdnUrl}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n imageUrl={ImageUrls.Insights.AVATAR}\n anonymiseUsers={anonymiseUsers}\n />\n </div>\n </div>\n </section>\n <section className='mb-5'>\n <h2 className='h4'>\n <Text\n namespace={namespace}\n phrase={hasClassrooms ? 'classEngagement' : 'engagement'}\n />\n </h2>\n <div className='row g-3'>\n <div className='col-12 col-md-6'>\n <InsightDevices\n osCount={videoViews.data?.osCount}\n />\n </div>\n <div className='col-12 col-md-6'>\n <InsightHeatmap\n engagement={aggregateEngagement.data}\n heatmapAppLink={videoInsightsAppLinks.heatmapAppLink}\n />\n </div>\n </div>\n </section>\n </InsightsShareMask>\n }\n </div>\n );\n}","import { HashObject } from 'libs/common/react/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nexport function getVideoInsightsAppLinks(id: string, params?: HashObject) {\n return {\n heatmapAppLink: {\n application: AppChannels.INSIGHTS,\n action: Actions.Insights.VIDEO_HEATMAP,\n args: [id],\n params\n }\n };\n}"],"names":["getAudienceParams","queryParams","userId","groupId","users","push","classrooms","classroomGroups","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","VideoViewRequests","individualEngagement","objectId","filter","sharerId","includePublicViews","url","key","formatData","data","map","d","heatMap","normalize","aggregateEngagement","views","timeOffset","generateCacheKey","flightObjs","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","getAnalyticsRequestKey","baseKey","start","end","userIdKey","sort","groupIdKey","InsightsHeaderView","props","hasClassrooms","hasPermissions","config","analyticsUrl","analyticsWebUrl","hasAnalytics","video","tabs","dateRangeAppLinkParams","namespace","InsightsAdminAlert","storage","show","setShow","role","className","phrase","href","videoRoute","typeId","id","getAnalyticsUrl","target","svgName","onClick","ShareInfoView","requestFilter","audienceAppLinkParams","currentUser","shareLink","sentDirectShare","recipients","customerId","videoViews","yearGroups","isAuthenticated","notShared","hasCompleted","hasShareData","shareLinkText","entity","entityTypeId","hasStudentExp","isPasswordProtected","linkExpireDate","shareRecipients","imageCdnUrl","hasShareLink","maxAvatars","text","dateCreated","options","count","length","appLink","getPhrase","LanguageService","InsightStudentsNotWatched","studentsNotWatched","students","student","watchedIds","includes","InsightCard","title","svgClassName","InsightStudentList","imageUrl","description","anonymiseUsers","InsightStudentsWatched","heatmapAppLink","appLinkText","PartialVideoInsightsOverview","VideoInsightsOverviewView","SharedViewModelKeys","useLockContentWidth","useSettings","UserRequests","ConfigRequests","videoRequest","VideoHelper","videoId","useSetPageMetadata","name","classroomFilterOnly","classroomStudents","ClassroomRequests","ArrayHelper","userIds","ShareRequests","hasShared","getStudentsList","Object","values","hasDataLoaded","params","videoInsightsAppLinks","application","action","args","getVideoInsightsAppLinks","MasterType","getInsightsOverviewTabs","InsightsShareMask","Text","ImageUrls","InsightDevices","osCount","InsightHeatmap","engagement"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3717-8a97ddeb28-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/projects/lite/src/apps/insights/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/insights/views/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/insights/components/insights-list/type-filter/insights-type-filters.scss","file:///app/packages/projects/lite/src/apps/insights/components/insights-list/type-filter/InsightsTypeFilters.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesViewUtils.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx","file:///app/packages/libs/shared/src/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n includePublicResults: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n formatData: (data: any) => {\n return {\n ...data,\n students: data.students.map((student: any) => {\n if (!student.name || !student.profileId)\n return student;\n\n return {\n ...student,\n publicUser: {\n profileId: student.profileId,\n name: student.name\n }\n };\n })\n };\n },\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import React from 'react';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport { Flight } from 'libs/common/flight';\nimport { ApplicationState, HashObject } from 'libs/common/react/interfaces';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const [ idBatches, setIdBatches ] = React.useState<string[][]>([]);\n\n React.useEffect(() => {\n if (!itemIds?.length)\n return;\n\n const newBatches = [...idBatches];\n newBatches.push([]);\n\n itemIds.forEach(id => {\n if (newBatches.find(batch => batch.find(_id => _id === id)))\n return;\n\n newBatches[newBatches.length - 1].push(id);\n });\n\n setIdBatches(newBatches.filter(batch => batch.length));\n }, [itemIds ? itemIds.join(',') : null]);\n\n const dispatch = useDispatch();\n\n const state = useSelector((state: ApplicationState) => state);\n\n React.useEffect(() => {\n idBatches.forEach(idBatch => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n\n if (response.shouldFetch)\n Flight.fetch(dispatch, request);\n });\n }, [idBatches?.length]);\n\n if (!idBatches?.length)\n return { items: null, isFetching: false };\n \n const items: { [key: string]: T} = {};\n\n /* Used locally to only return our items if we've fetched all of them */\n const responses: HashObject<Flight.Response<T[]>> = {};\n \n idBatches.forEach((idBatch, i) => {\n const request = getRequest(idBatch);\n const response = Flight.getResponse<T[]>(state, request.key);\n responses[i] = response;\n\n if (response.data)\n response.data.forEach(v => items[v.id] = v);\n });\n\n return {\n items: Object.keys(responses).some(k => !!responses[k].data) ? items : null,\n isFetching: !!Object.keys(responses).some(k => responses[k].isFetching)\n };\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\n}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const DEMO_INSIGHTS_SHARE: MySharesTableData = {\n share: {\n objectTypeId: 34,\n type: ShareType.ShareLink\n } as UnionShareObject,\n sharedObject: null,\n shareRecipients: null,\n dateShared: new Date().toISOString(),\n viewCount: 23\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTIONS: ActionOptions[] = [\n {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n button: true,\n className: 'btn btn-outline-dark'\n }\n];","// extracted by mini-css-extract-plugin\nexport default {\"noCaret\":\"TMpTN\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\n\nimport styles from './insights-type-filters.scss';\n\nconst namespace = 'insights.insightsTypeFilters';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsTypeFilterProps {\n appLink: Core.AppLink;\n typeIdParams: MasterType[];\n}\n\nexport function InsightsTypeFilters(props: InsightsTypeFilterProps) {\n const moreFilterOptions = [{\n label: getPhrase('playlists'),\n filter: MasterType.Playlist\n }, {\n label: getPhrase('series'),\n filter: MasterType.Series\n }];\n\n const moreFiltersSelected = getMoreFiltersSelected();\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ moreFilters, setMoreFilters ] = React.useState(moreFiltersSelected);\n\n function applyFilter() {\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: [\n ...props.typeIdParams.filter(filter => !moreFilterOptions.find(option => filter === option.filter)),\n ...moreFilters\n ]\n }\n });\n }\n\n function resetFilters() {\n setMoreFilters([]);\n\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: []\n }\n });\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n applyFilter();\n }\n\n function onClickApply() {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onSelectFilter(filter: MasterType) {\n setMoreFilters(ArrayHelper.addOrRemoveImmutable(moreFilters, filter));\n }\n\n function isFilterSelected(filter: MasterType) {\n return !!moreFilters.find(selectedFilter => selectedFilter === filter);\n }\n\n function getMoreFiltersSelected() {\n return props.typeIdParams.filter(typeId =>\n moreFilterOptions.some(option => typeId === option.filter));\n }\n\n return (\n <div className='d-flex align-items-center fw-semibold'>\n <p className='h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex border-start border-light ps-3 ms-3 gap-2'>\n <InsightTypeFilterButton\n typeId={MasterType.Interactive}\n typeFilters={props.typeIdParams}\n appLink={props.appLink}\n />\n <InsightTypeFilterButton typeId={MasterType.Video} typeFilters={props.typeIdParams} appLink={props.appLink} />\n <InsightTypeFilterButton typeId={MasterType.Clip} typeFilters={props.typeIdParams} appLink={props.appLink} />\n <Dropdown onToggle={onToggleDropdown} show={showDropdown}>\n <Dropdown.Toggle\n className={styles.noCaret}\n variant={moreFiltersSelected.length ? 'dark' : 'outline-dark'}\n >\n <span className='fw-semibold mb-0'>\n <Text namespace={namespace} phrase='moreFilters' />\n {moreFiltersSelected.length ? ` - ${moreFiltersSelected.length}` : ''}\n </span>\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className='mx-1 px-2 py-1 mb-0'>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='types' /></h2>\n <ul className='list-unstyled me-5'>\n {moreFilterOptions.map(option => (\n <li key={`${option.label}-filter`} className='my-1'>\n <Checkbox\n id={`${option.label}-filter`}\n label={option.label}\n onChange={() => onSelectFilter(option.filter)}\n checked={isFilterSelected(option.filter)}\n />\n </li>\n ))}\n </ul>\n <button onClick={() => onClickApply()} className='btn btn-link text-info float-end p-0 mb-0'>\n <Text namespace={namespace} phrase='apply' />\n </button>\n </div>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n {!!props.typeIdParams.length &&\n <button onClick={resetFilters} className='btn btn-link ms-1'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n }\n </div>\n );\n}\n\ninterface InsightTypeFilterButtonProps {\n typeId: MasterType;\n typeFilters: MasterType[];\n appLink: Core.AppLink;\n}\n\nfunction InsightTypeFilterButton(props: InsightTypeFilterButtonProps) {\n const selected = props.typeFilters.includes(props.typeId);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n const newType: MasterType[] = ArrayHelper.addOrRemoveImmutable(props.typeFilters, props.typeId);\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n typeId: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.typeId === MasterType.Video) return 'videos';\n if (props.typeId === MasterType.Clip) return 'clips';\n if (props.typeId === MasterType.Interactive) return 'interactives';\n }\n\n return (\n <AppLink\n className={`btn ${selected ? 'btn-dark' : 'btn-outline-dark'} fw-semibold`}\n appLink={newAppLink}\n ariaLabel={`${getPhrase('ariaFilterBy')}: ${getPhrase(getTypePhrase())}`}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"mySharesTable\":\"hyaYe\"};","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className={`${styles.mySharesTable} gap-3 px-3`}>\n <p className='fw-semibold mb-2 ms-n3'>{props.heading}</p>\n\n {props.isFirst &&\n <>\n <div />\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='sharedToHeading' /></p>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='dateSharedHeading' /></p>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </>\n }\n </div>\n );\n}\n\ninterface ShareObjectTitleProps {\n sharedObject: SharableEntity;\n requireMarking: number;\n appLink: Core.AppLink;\n}\n\nfunction ShareObjectTitle(props: ShareObjectTitleProps) {\n const { sharedObject } = props;\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) &&\n !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? getObjectAppLink(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className='d-inline clamp-1'\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n <AppLink\n appLink={props.appLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n {sharedObject.name}\n </AppLink>\n\n {!!props.requireMarking && (\n <div className={`font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface MyShareRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n yearGroups?: YearGroup[];\n imageCdnUrl?: string;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n}\n\nexport function MySharesTableRow(props: MyShareRowProps) {\n const { shareData } = props;\n\n const sharedObject = shareData.sharedObject;\n\n const shareLinkText = shareData.share.type === ShareType.ShareLink &&\n ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareData.share.isPasswordProtected,\n linkExpireDate: shareData.share.linkExpireDate,\n privacy: {\n privacy: shareData.privacy,\n overrideRestrictions: shareData.overrideRestrictions\n },\n status: shareData.share.status,\n yearGroups: props.yearGroups\n });\n\n return (\n <div key={shareData.share.id} className={`${styles.mySharesTable} align-items-center p-3 gap-3 border-light`}>\n <SharedObjectImage\n object={sharedObject}\n appLink={props.getObjectAppLink(sharedObject)}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n showCollectionMask\n showVideoCount\n />\n <div>\n <ShareObjectTitle\n sharedObject={shareData.sharedObject}\n requireMarking={shareData.pendingReview}\n appLink={props.getObjectAppLink(sharedObject)}\n />\n {props.children}\n </div>\n\n <SharedToPill\n shareLinkText={shareLinkText?.text}\n shareRecipients={shareData.shareRecipients}\n imageCdnUrl={props.imageCdnUrl}\n />\n\n <p className='mb-0'>{formatDate(shareData.dateShared)}</p>\n\n <p className='mb-0'><Text namespace={namespace} phrase='views' options={{ count: shareData.viewCount }} /></p>\n\n <Actions className='justify-content-end gap-2' actions={props.getObjectActions(sharedObject)} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/insights/constants/DemoInsights';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INSIGHTS_ACTIONS, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n primaryUrl: string;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isStaging = props.primaryUrl.includes('staging');\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: isStaging ? DEMO_INTERACTIVE_STAGING_ID : DEMO_INTERACTIVE_PROD_ID\n };\n }\n\n return (\n <div>\n <MySharesTableHeading heading={getPhrase('demoHeading')} isFirst={true} />\n\n <div className='rounded-3 border border-light bg-light-orange mb-4'>\n <MySharesTableRow\n shareData={{ ...DEMO_INSIGHTS_SHARE, sharedObject: getDemoInteractive() }}\n getObjectActions={() => DEMO_INSIGHTS_ACTIONS}\n getObjectAppLink={() => null}\n >\n <div className='d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2'>\n <Text namespace={namespace} phrase='demoInsightPill' />\n </div>\n </MySharesTableRow>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharePrivacy } from 'libs/shared/apps/share/interfaces/SharePrivacy';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { InteractiveMetadata, UnionShareObject } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\nexport interface MySharesTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n viewCount: number;\n pendingReview?: number;\n privacy?: SharePrivacy;\n overrideRestrictions?: boolean;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: UnionShareObject[],\n sharedObjects: SharableEntity[],\n shareRecipients: SharableRecipient[],\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[],\n dependencies: (string | boolean)[]\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: MySharesTableData[] = [];\n\n const sharedObjectsMap = sharedObjects.reduce<Record<string, SharableEntity>>(\n (map, obj) => ({ [obj.id]: obj, ...map }),\n {}\n );\n const shareRecipientsMap = shareRecipients.reduce<Record<string, SharableRecipient>>(\n (map, obj) => ({ [obj.id]: obj, ...map }),\n {}\n );\n\n const interactivesPendingReviewsMap = interactivesPendingReviews?.reduce<\n Record<string, InteractivesPendingReviews>\n >(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjectsMap[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipientsMap[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject) {\n const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0,\n pendingReview: pendingReview?.pendingReviewCount,\n ...(s.type === ShareType.ShareLink ? {\n privacy: s.privacy,\n overrideRestrictions: s.overrideRestrictions\n } : {})\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [...dependencies]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: SharableEntity[];\n shareRecipients: SharableRecipient[];\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: (string | boolean)[];\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n hasDemoInsights?: boolean;\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview,\n props.dependencies\n );\n\n return (\n <>\n {Object.keys(data).map((heading, i) => (\n <div key={heading}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && i === 0} />\n\n <div className='d-flex flex-column rounded-3 border border-light mb-4'>\n {data[heading].map(shareData => (\n <MySharesTableRow\n key={shareData.share.id}\n shareData={shareData}\n yearGroups={props.yearGroups}\n getObjectActions={props.getObjectActions}\n getObjectAppLink={props.getObjectAppLink}\n imageCdnUrl={props.imageCdnUrl}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"table\":\"elIjR\",\"heading\":\"iWHol\",\"image\":\"TMQxq\",\"avatar\":\"_3GY1C\",\"date\":\"nz3va\",\"views\":\"FpDfX\",\"actions\":\"pOtyK\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`${styles.table} align-items-center striped-row rounded-3 gap-3 p-3`}>\n <div className={`partial-loading-background rounded ratio ratio-16x9 ${styles.image}`} />\n <div className={`partial-loading-background w-75 ${styles.name}`}> </div>\n <div className={`partial-loading-background w-75 rounded-pill ${styles.avatar}`} />\n <div className={`partial-loading-background ${styles.date}`}> </div>\n <div className={`partial-loading-background ${styles.views}`}> </div>\n <div className={`d-flex justify-content-end gap-2 p-3`}>\n <div className={`partial-loading-background rounded w-50 ${styles.actions}`} />\n <div className={`partial-loading-background rounded w-33 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className='striped-list no-full-width'>\n <div className={`${styles.table} gap-3 px-3`}>\n <div className={`partial-loading-background mb-2 ms-n3 ${styles.date}`}> </div>\n <div />\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EventVersion, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsAppLink, getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getShareObjectActions(\n sharedObject: BaseObject,\n audienceParams?: AudienceQueryParams,\n hasInsights?: boolean,\n isPlugin?: boolean\n): ActionOptions[] {\n const insightObjectActions: ActionOptions[] = [];\n\n const buttonProps = {\n button: true,\n className: 'btn btn-outline-dark'\n };\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n if (isPlugin) {\n return [{\n label: getPhrase('embedVideo'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.PLUGIN_SHARE,\n args: [sharedObject.id],\n params: { entityType: sharedObject.type }\n },\n ...buttonProps,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V5\n }\n }];\n }\n\n if (hasInsights)\n insightObjectActions.push({\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('viewInsights'),\n appLink: { ...getInsightsAppLink(sharedObject), params: audienceParams },\n group: 'insights',\n ...buttonProps\n });\n }\n\n insightObjectActions.push({\n label: getPhrase('share'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareAppLink(sharedObject),\n group: 'share',\n ...buttonProps\n });\n\n return insightObjectActions;\n}\n\nexport function useGetShareObjectActions(\n audienceParams?: AudienceQueryParams,\n hasInsights?: boolean,\n isPlugin?: boolean\n): ((object: BaseObject) => ActionOptions[]) | null {\n const audienceParamsKey = JSON.stringify(audienceParams);\n\n return React.useCallback(\n (object: BaseObject) => getShareObjectActions(\n object,\n audienceParams,\n hasInsights,\n isPlugin\n ),\n [audienceParamsKey]\n );\n}\n\n\nexport function getTypeIdParams(params: HashObject): MasterType[] {\n const typeIdParams = params?.typeId;\n\n if (!typeIdParams) return [];\n\n if (typeof typeIdParams === 'string')\n return [+typeIdParams];\n\n return params?.typeId.map((typeId: MasterType) => +typeId) || [];\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { AudienceFilterView } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterView';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useLockContentWidth } from 'libs/shared/hooks/useLockContentWidth';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTypeFilters } from 'apps/insights/components/insights-list/type-filter/InsightsTypeFilters';\nimport { InsightsAdminAlert } from 'apps/insights/views/insights-admin-alert/InsightsAdminAlert';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getTypeIdParams, useGetShareObjectActions } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n queryParams: HashObject;\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasInsights } = useSettings(null);\n\n const { isPlugin } = usePluginHelper();\n\n useLockContentWidth();\n\n const breakpoints = useBreakpoints();\n\n const typeIdAppLinkParams = getTypeIdParams(props.queryParams);\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const currentAppLink = getCurrentAppLink();\n const sentSharesParams = getSentSharesFilter();\n\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasInsights;\n\n const {\n sentShares,\n sharedObjects,\n shareRecipients,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl,\n dependencies\n } = useSharesTable(sentSharesParams, true, shouldFetch);\n\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasClassrooms } = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const hasInsightsPermission = hasInsights && hasPermissions(PermissionName.ViewInsights);\n\n const getSharedObjectActions = useGetShareObjectActions(audienceAppLinkParams, hasInsightsPermission, isPlugin);\n\n const { accessPolicy } = useAccessPolicy();\n\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights;\n\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasInsights))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n function getSentSharesFilter(): GetSentItemsParams {\n return {\n recipientUserId: audienceAppLinkParams?.users,\n recipientGroupId: [ ...audienceAppLinkParams?.classroomGroups || [], ...audienceAppLinkParams?.classrooms || [] ],\n objectTypeId: typeIdAppLinkParams.length ? typeIdAppLinkParams : undefined\n };\n }\n\n function getCurrentAppLink(): Core.AppLink {\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME,\n params: {\n ...audienceAppLinkParams,\n typeId: typeIdAppLinkParams\n }\n };\n }\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='d-flex justify-content-between border-bottom pb-3 mb-3'>\n <h1 className='mb-1'><Text namespace={namespace} phrase='myShares' /></h1>\n\n <AudienceFilterView hasClassroomsFeature={hasClassrooms} />\n </div>\n\n <div className='mb-3'>\n <InsightsTypeFilters appLink={currentAppLink} typeIdParams={typeIdAppLinkParams} />\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight demoInteractive={demoInteractive.data} primaryUrl={config.data?.primaryUrl} />\n }\n\n {(() => {\n if (showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!sentShares.length)\n return (\n <MySharesTableEmptyState />\n );\n\n return (\n <>\n <MySharesTable\n sentShares={sentShares}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n interactivesPendingReview={interactivesPendingReview}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={imageCdnUrl}\n groupByDateShared\n dependencies={dependencies}\n breakpoints={breakpoints}\n yearGroups={yearGroups.data}\n hasDemoInsights={showDemoInsight}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipientIds(sentShares: UnionShareObject[]): string[] {\n return ArrayHelper.uniq(ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? [])), 'id').map(r => r.id);\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch, UseBatchFetchResult } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, InteractiveMetadata, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\n/**\n * As we are displaying data in an infinite list, we only want to show partial loading\n * on the initial fetch.\n * Whenever a new page is fetched, `sharedObjects.data` and `recipients.data` will be `undefined`,\n * as their key will change. So instead of using those values to determine whether or not to\n * show partial loading, we save the first time that they load in state and then use that.\n */\nexport function usePartialLoading(\n sentShare: UnionShareObject[],\n hasFetchedSharedObjects: boolean,\n recipientIds: string[],\n hasFetchedRecipients: boolean,\n config: Flight.Response<Config>\n): boolean {\n const [ initialSharedObjectsLoaded, setInitialSharedObjectsLoaded ] = React.useState(hasFetchedSharedObjects);\n const [ initialRecipientsLoaded, setInitialRecipientsLoaded ] = React.useState(hasFetchedRecipients);\n\n React.useEffect(() => {\n if (hasFetchedSharedObjects)\n setInitialSharedObjectsLoaded(true);\n }, [hasFetchedSharedObjects]);\n\n React.useEffect(() => {\n if (hasFetchedRecipients)\n setInitialRecipientsLoaded(true);\n }, [hasFetchedRecipients]);\n\n if (sentShare && !sentShare.length)\n return false;\n\n return !sentShare\n || !initialSharedObjectsLoaded\n || (recipientIds.length && !initialRecipientsLoaded)\n || !config.data;\n}\n\nexport function useSharesTable(\n params?: GetSentItemsParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => shouldFetch && ShareRequests.sentShare({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = ArrayHelper.uniq(sentShares?.map(s => s.objectId) ?? []);\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = ShareHelper.getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n \n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n !!sharedObjectsFetchResult.items,\n recipientIds,\n !!shareRecipientsFetchResult.items,\n config\n );\n\n const filterKey = JSON.stringify(params);\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sharedObjects = getBatchFetchResultAsArray(sharedObjectsFetchResult);\n const shareRecipients = getBatchFetchResultAsArray(shareRecipientsFetchResult);\n \n const interactiveIds = getInteractiveIds();\n \n const interactivesPendingReview = Flight.useBasicFetch<InteractivesPendingReviews[]>(\n interactiveInsights && !!sharedObjectsFetchResult.items && currentUser.data &&\n InteractiveResultsRequests.pendingReviews({\n interactives: interactiveIds,\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n })\n );\n \n const dependencies = [ isFetching, filterKey, interactivesPendingReview.isFetching ];\n \n function getInteractiveIds() {\n return interactiveInsights && sharedObjects?.length && sharedObjects.reduce(\n (acc, value) => {\n const isInteractive = value.typeId === MasterType.Interactive;\n\n if (!isInteractive) return acc;\n\n const interactive = value as InteractiveMetadata;\n return [ ...acc, { metadataId: interactive.id, interactiveId: interactive.interactiveId }];\n },\n []\n );\n }\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n interactivesPendingReview: interactivesPendingReview.data,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl,\n dependencies\n };\n}"],"names":["getInteractiveResultFilters","currentUser","filter","currentUserId","id","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","key","data","type","normalize","formatData","students","map","student","name","profileId","publicUser","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","idx","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","InsightsDemoRequests","interactive","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","useBatchFetch","itemIds","getRequest","idBatches","setIdBatches","newBatches","find","batch","_id","join","dispatch","state","idBatch","request","shouldFetch","items","isFetching","responses","i","response","v","Object","keys","some","k","getAnalyticsRequestKey","baseKey","sharerId","userIdKey","Array","isArray","groupIdKey","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","namespace","InsightsAdminAlert","storage","show","setShow","hasAnalytics","role","phrase","video","analyticsUrl","videoRoute","typeId","getAnalyticsUrl","target","getPhrase","DEMO_INSIGHTS_SHARE","share","objectTypeId","sharedObject","shareRecipients","dateShared","Date","toISOString","viewCount","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTIONS","group","LanguageService","InsightsTypeFilters","moreFilterOptions","MasterType","moreFiltersSelected","typeIdParams","option","showDropdown","setShowDropdown","moreFilters","setMoreFilters","applyFilter","currentParams","params","Text","InsightTypeFilterButton","typeFilters","Dropdown","onToggle","isShowing","variant","Checkbox","onChange","ArrayHelper","checked","selectedFilter","selected","includes","currentAppLink","newType","newAppLink","getTypePhrase","AppLink","MySharesTableHeading","heading","isFirst","ShareObjectTitle","VideoHelper","canNavigate","subTextPhrase","getSubTextPhrase","VideoSubText","series","location","TitleSubText","entity","ShareViewHelper","actionType","requireMarking","options","smartCount","MySharesTableRow","shareData","shareLinkText","ShareType","ShareLinkHelper","entityTypeId","hasStudentExp","isPasswordProtected","linkExpireDate","privacy","overrideRestrictions","status","yearGroups","SharedObjectImage","object","getObjectAppLink","showVideoMetadata","locationContext","showCollectionMask","showVideoCount","pendingReview","children","SharedToPill","text","imageCdnUrl","count","getObjectActions","MySharesDemoInsight","isStaging","primaryUrl","demoInteractive","MySharesTableEmptyState","EmptyState","src","ImageUrls","size","getDateShared","recipients","dateCreated","datesShared","r","date1","date2","DateHelper","MySharesTable","sentShares","sharedObjects","groupByDate","interactivesPendingReviews","dependencies","groupByDateShared","interactivesPendingReview","tableData","sharedObjectsMap","reduce","obj","shareRecipientsMap","interactivesPendingReviewsMap","s","objectId","recipient","pendingReviewCount","ShareHelper","hasDemoInsights","PartialRow","PartialMySharesTable","MySharesEmptyState","altText","workflowPhase","descriptor","SignUp","MySharesView","usePermissions","hasPermissions","hasLocalPermissions","hasInsights","useSettings","isPlugin","usePluginHelper","useLockContentWidth","breakpoints","useBreakpoints","typeIdAppLinkParams","queryParams","audienceAppLinkParams","sentSharesParams","recipientUserId","recipientGroupId","classroomGroups","classrooms","undefined","PermissionName","useSharesTable","showPartialLoading","nextCursor","hasMore","fetchNext","useSetPageMetadata","hasClassrooms","config","ConfigRequests","UserRequests","isAuthenticated","CustomerRequests","getSharedObjectActions","audienceParams","audienceParamsKey","JSON","stringify","insightObjectActions","buttonProps","canConsume","args","entityType","eventVersion","getShareObjectActions","useGetShareObjectActions","accessPolicy","useAccessPolicy","showDemoInsight","metadata","analyticsWebUrl","AudienceFilterView","hasClassroomsFeature","InfiniteScrollFooter","getDirectShares","getRecipientIds","d","getBatchFetchResultAsArray","result","values","interactiveInsights","fetch","cursor","ShareRequests","isFetchingSentShares","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","shareRecipientsFetchResult","sentShare","hasFetchedSharedObjects","hasFetchedRecipients","initialSharedObjectsLoaded","setInitialSharedObjectsLoaded","initialRecipientsLoaded","setInitialRecipientsLoaded","usePartialLoading","filterKey","interactiveIds","acc","value","metadataId","I","interactives","filters"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6802],{92869:(e,t,r)=>{r.d(t,{t:()=>i});var n=r(48088),a=r(95846),i={preventScrollTop:function(){n.Radio.channel(a.G.SHELL).trigger("prevent:scroll:top")}}},34079:(e,t,r)=>{r.d(t,{O:()=>s});var n=r(32735),a=r(23481),i=r(40782),l=r(36532),c=a.T.encloseNamespace("interactives.pendingIndicator");function o(e){var t="d-flex align-items-center h-100";return t+=e.showLabel?" justify-content-between":" justify-content-center",e.className&&(t+=" ".concat(e.className)),t}function s(e){var t=function(){return n.createElement("div",{className:o(e)},!!e.showLabel&&n.createElement("em",null,c("pending")),n.createElement(i.O,null))};return e.title?n.createElement(l.u,{title:e.title,spanHack:!0,spanHackClassName:e.tooltipClassName||"h-100 w-100 d-flex align-items-center"},n.createElement(t,null)):n.createElement(t,null)}},97364:(e,t,r)=>{r.d(t,{C:()=>i,P:()=>a});var n=r(94892);function a(e,t){switch(e){case"score_desc":return[{id:t,desc:!0}];case"score_asc":return[{id:t,desc:!1}];default:return[]}}function i(e,t){return"marking_required"===e&&!t.awaitingMarking||"helping_hand"===e&&t.percentCorrect>=n.T.HIGH||"not_completed"===e&&!t.unanswered}},1704:(e,t,r)=>{r.d(t,{l:()=>s});var n=r(32735),a=r(23481),i=r(9111),l=r(13876);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var o=a.T.encloseNamespace("shared.confirmationPopup");function s(e){var t,r,a=(t=n.useState(!1),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,r)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=a[0],u=a[1];return n.createElement(i.G,{title:e.title,closePopup:e.closePopup},n.createElement(n.Fragment,null,e.children,n.createElement(l.u,null,n.createElement(l.u.Cancel,{onClick:e.closePopup,variant:e.cancelButtonVariant,text:e.cancelButtonText||o("cancel")}),n.createElement(l.u.Submit,{onClick:function(){u(!0),e.onClickConfirm()},text:e.confirmButtonText||o("confirm"),variant:e.confirmButtonVariant,showSpinner:s,disabled:e.disabledConfirmButton}))))}s.defaultProps={confirmButtonVariant:"primary",cancelButtonVariant:"link"}},56802:(e,t,r)=>{r.d(t,{x:()=>he});var n=r(32735),a=r(23481),i=r(92869),l=r(75896),c=r(9570),o=r(23232),s=r(83345),u="shared.interactionResponseList";function m(e){return n.createElement(n.Fragment,null,n.createElement(o.u,{className:"m-4"},n.createElement(o.u.Image,{src:function(){switch(e.filter){case"correct":return e.correctImageUrl;case"incorrect":return e.incorrectImageUrl;case"marking_required":return e.markingRequiredImageUrl;case"skipped":return e.skippedImageUrl}}(),className:"w-25 h-auto"}),n.createElement(o.u.Info,null,n.createElement(s.x,{namespace:u,phrase:function(){switch(e.filter){case"correct":return"correctEmptyState";case"incorrect":return"incorrectEmptyState";case"marking_required":return"markingRequiredEmptyState";case"skipped":return"skippedEmptyState"}}()}))))}function d(e){function t(t){return"rounded-pill bg-light ".concat(function(t){return t===e.filter}(t)?"bg-dark text-white":"")}return n.createElement("div",{className:"d-flex gap-2 m-3"},n.createElement("button",{className:t("marking_required"),onClick:function(){return e.toggleFilter("marking_required")}},n.createElement(s.x,{namespace:u,phrase:"markingRequired"})),n.createElement("button",{className:t("correct"),onClick:function(){return e.toggleFilter("correct")}},n.createElement(s.x,{namespace:u,phrase:"correct"})),n.createElement("button",{className:t("incorrect"),onClick:function(){return e.toggleFilter("incorrect")}},n.createElement(s.x,{namespace:u,phrase:"incorrect"})),n.createElement("button",{className:t("skipped"),onClick:function(){return e.toggleFilter("skipped")}},n.createElement(s.x,{namespace:u,phrase:"skipped"})))}var f=r(86572),p=a.T.encloseNamespace("interactives.interactionResponseListHeader");function g(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return n.createElement("div",{className:"rounded bg-white"},n.createElement("div",{className:"p-2 position-relative"},n.createElement("div",{className:"d-flex"},n.createElement(f.y,{interaction:e.interaction,iconClassName:"flex-shrink-0"})),!!r&&n.createElement("div",{className:"mt-2"},n.createElement("strong",null,p("suggestedResponse")),n.createElement("p",{className:"m-0"},r))))}var b=a.T.encloseNamespace("shared.submitMarkedAnswers");function v(e){return n.createElement("div",{className:"d-flex justify-content-end"},n.createElement("button",{className:"btn btn-outline-dark",onClick:e.submit,disabled:e.disabled},b("submitAnswers")))}var y=r(26136),h=r(39157),E=r(44113),w=r(36532),k=r(28972),I=r(83140),N=r(80845);const S={awaitingMarking:"PPNkp"};function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function A(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var x="shared.interactionResponseList",U=a.T.encloseNamespace(x);function j(e){var t,r,a,i,l=(a=n.useState(),i=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(a,i)||function(e,t){if(e){if("string"==typeof e)return A(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?A(e,t):void 0}}(a,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=l[0],f=l[1],p=(r=e.interaction,e.results.students.filter((function(e){return I.A.isInteractionCorrect(r,(0,N.j_)(e))===k.w.AwaitingMarking})).reduce((function(e,t){var r,n;return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=C(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=C(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==C(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(null===(r=t.user)||void 0===r?void 0:r.id)||(null===(n=t.publicUser)||void 0===n?void 0:n.profileId),!0))}),{})),b=Object.keys(e.markedAnswers).length;if(!(null===(t=e.results.students)||void 0===t?void 0:t.length))return n.createElement("div",{className:"d-flex flex-column h-100"},n.createElement(o.u,{className:"bg-white rounded mt-2 py-5 flex-grow-1 justify-content-center"},n.createElement(o.u.Image,{src:e.emptyStateImageUrl,size:"small"}),n.createElement(o.u.Heading,null,U("emptyStateHeading")),n.createElement(o.u.Info,{className:"w-100"},U("emptyStateDescription"))));var j=e.results.students.filter((function(t){var r=(0,N.j_)(t),n=I.A.isInteractionCorrect(e.interaction,r),a={correct:k.w.Correct,incorrect:k.w.Incorrect,marking_required:k.w.AwaitingMarking,skipped:k.w.UnAnswered};return!u||u in a&&n===a[u]}));return n.createElement(n.Fragment,null,e.reportsStyling&&n.createElement(g,{interaction:e.interaction}),n.createElement("div",{className:e.reportsStyling?"d-flex justify-content-end":"d-flex align-items-center justify-content-between border-bottom border-light px-3 py-2"},!e.reportsStyling&&n.createElement("p",{className:"fw-semibold mb-0"},n.createElement(s.x,{namespace:x,phrase:"studentAnswers"})),!!Object.keys(p).length&&n.createElement(w.u,{id:"submitAnswers",title:U("demoOnly"),spanHack:e.isDemo},n.createElement("div",{className:e.isDemo?"pointer-events-none":""},n.createElement(v,{submit:e.submitMarkedAnswers,disabled:!b})))),n.createElement(n.Fragment,null,!e.reportsStyling&&n.createElement(d,{filter:u,toggleFilter:function(e){f(u===e?null:e)}}),!e.reportsStyling&&!j.length&&u&&n.createElement(m,{filter:u,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl}),j&&n.createElement("ul",{className:"list-unstyled mb-0"},j.map((function(t,r){var a,i,l=(0,y.B)(t.user||t.publicUser,e.anonymiseUsers),o=p[(null===(a=t.user)||void 0===a?void 0:a.id)||(null===(i=t.publicUser)||void 0===i?void 0:i.profileId)],s=e.reportsStyling?"bg-white p-2":"bg-white px-3 pt-3 pb-2";return o&&(s+=" ".concat(S.awaitingMarking)),n.createElement("li",{key:r},e.reportsStyling?n.createElement(E.O,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:s,showFeedback:!0,reportsStyling:!0,responseComponentClass:"mx-n2"}):n.createElement(c.d,{interaction:e.interaction,studentResults:t,markedStatus:(0,h.HI)(e.interaction.id,t,e.markedAnswers),markInteraction:e.addMarkedAnswers,imageCdnUrl:e.imageCdnUrl,showStudentDetails:!0,anonymisedUserName:l,className:s,showFeedback:!0}))}))),e.reportsStyling&&!!p.length&&n.createElement("div",{className:"mt-2"},n.createElement(v,{submit:e.submitMarkedAnswers,disabled:!b}))))}var T=r(34079);function O(e){var t;return n.createElement("div",null,n.createElement("p",{className:"mb-0"},(t=e.interaction.data.sentence)?t.split(/({\d+})/).map((function(t,r){var a=t.match(/{(\d+)}/);if(a){var i=a[1],l=e.interaction.actionableItems.find((function(e){return+e.order==+i}));if(l)return n.createElement("span",{className:"bg-white border border-gray-300 rounded p-1 lh-lg",key:r},l.name)}return t})):""))}var M=r(79671);const R={row:"fXno_",answerImage:"pDAuW",answerWidth:"YHK27"};function q(e){var t,r;return(null===(r=l.m.first(null===(t=e.interaction)||void 0===t?void 0:t.actionableItems).data)||void 0===r?void 0:r.imageUrl)?n.createElement("div",{className:R.answerWidth},n.createElement(M.n,{interaction:e.interaction,size:"sm",showFeedback:!1,showCorrectnessIcons:!0,isDisplayOnly:!0})):n.createElement("ul",{className:"".concat(R.answerWidth," list-unstyled row g-2")},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"col-12"},n.createElement("div",{className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border py-1 px-2 m-0")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name)))})))}var W="shared.questionTable";function P(e){var t,r=null===(t=e.interaction.data)||void 0===t?void 0:t.suggestedResponse;return r?n.createElement("div",{className:"".concat(R.answerWidth," bg-light-blue rounded p-2 mb-2")},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("p",{className:"fw-semibold mb-2"},n.createElement(s.x,{namespace:W,phrase:"suggestedResponse"}))),n.createElement("p",{className:"mb-0"},r)):n.createElement(n.Fragment,null)}function B(e){return n.createElement("ul",{className:"list-unstyled d-flex gap-2"},e.interaction.actionableItems.map((function(t){return n.createElement("li",{key:t.id,className:"".concat(t.isCorrect?"bg-light-green border-green":"bg-light-red border-red"," rounded border px-2 py-1 mb-2 w-50")},n.createElement("span",{className:"fw-semibold"},e.indexToLetter(t.order),". "),n.createElement("span",null,t.name))})))}var _=r(40424);function D(e){var t=function(){switch(e.interaction.typeId){case _.Z9.MultipleChoice:return n.createElement(q,{interaction:e.interaction,indexToLetter:G});case _.Z9.TrueOrFalse:return n.createElement(B,{interaction:e.interaction,indexToLetter:G});case _.Z9.ShortAnswer:return n.createElement(P,{interaction:e.interaction});case _.Z9.MissingWord:return n.createElement(O,{interaction:e.interaction});default:return null}}();return t?n.createElement("div",{className:"w-100 mt-3"},t):n.createElement(n.Fragment,null)}var F=r(40782);function L(e){return L="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},L(e)}var H=a.T.encloseNamespace("shared.questionTable");function Z(e,t,r){var n=e.cells.find((function(e){return e.column.id===r})).value,a=t.cells.find((function(e){return e.column.id===r})).value;return n.awaitingMarking?-1:a.awaitingMarking||n.percentCorrect>=a.percentCorrect?1:-1}function K(e){var t;return n.createElement("div",{className:"d-flex ".concat(null!==(t=e.className)&&void 0!==t?t:"")},e.children)}function V(e){return n.createElement(K,{className:e.column.isSorted&&"fw-bold"},H(e.phraseKey))}function G(e){return String.fromCharCode(e+"A".charCodeAt(0))}var z=r(8246),Q=a.T.encloseNamespace("shared.questionTable");function $(e,t){var r=e.actionableItems.map((function(t,r){return{id:t.id,label:e.typeId===_.Z9.MultipleChoice?G(r):t.name,isCorrect:t.isCorrect,count:0}}));return t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(r,{id:e.id});t&&t.count++}))})),r}function J(e,t){var r=e.actionableItems.map((function(e){return{id:e.id,label:e.name,isCorrect:e.isCorrect,count:0}}));return r.push({label:Q("incorrect"),count:0,isCorrect:!1}),t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){var t=l.m.findWhere(r,{id:e.id});t&&e.status===z.N.Correct?t.count++:l.m.findWhere(r,{label:Q("incorrect")}).count++}))})),r}function X(e,t){var r=[{label:Q("correct"),isCorrect:!0,count:0},{label:Q("incorrect"),isCorrect:!1,count:0}];return t.students.forEach((function(t){var n=l.m.last(t.results).attempts,a=l.m.findWhere(n,{id:e.id});a&&a.answers.forEach((function(e){if(e.status===z.N.Correct&&l.m.findWhere(r,{label:Q("correct")}).count++,e.status===z.N.Incorrect&&l.m.findWhere(r,{label:Q("incorrect")}).count++,e.status===z.N.PendingReview){var t=l.m.findWhere(r,{label:Q("pending")});t||(r.push({label:Q("pending"),count:0,isCorrect:!1}),t=l.m.findWhere(r,{label:Q("pending")})),t.count++}}))})),r}var Y=r(83914),ee=r(35223),te="shared.questionTable",re=a.T.encloseNamespace(te);function ne(e){var t=function(){if(e.interaction&&e.results){var t;switch(e.interaction.typeId){case _.Z9.ShortAnswer:case _.Z9.Illustration:t=X;break;case _.Z9.MissingWord:t=J;break;case _.Z9.MultipleChoice:case _.Z9.TrueOrFalse:t=$}return t(e.interaction,e.results)}}(),r=null==t?void 0:t.reduce((function(e,t){return t.count>e?t.count:e}),0);function a(e){var t="border rounded me-2";return e.count?e.label===re("pending")?"".concat(t," border-blue bg-light-blue"):e.isCorrect?"".concat(t," border-green bg-light-green"):"".concat(t," border-red bg-light-red"):"".concat(t," border-light bg-light px-1")}return n.createElement("div",{className:"border border-light rounded p-3 mb-3"},n.createElement("div",{className:"d-flex align-items-center gap-2 mb-3"},n.createElement("div",{className:"rounded-circle bg-light-teal text-teal"},n.createElement(Y.x,{svgName:ee.vn.Lightbulb,size:Y.S.Large})),n.createElement("h2",{className:"h6 mb-0"},n.createElement("span",null,n.createElement(s.x,{namespace:te,phrase:"questionSummary"})))),n.createElement("div",{className:"d-flex gap-2"},n.createElement("div",{className:"max-w-25"},null==t?void 0:t.map((function(e){return n.createElement("p",{key:e.label,className:"text-truncate mb-2"},e.label)}))),n.createElement("div",{className:"flex-grow-1"},null==t?void 0:t.map((function(e,t){return n.createElement("div",{key:t,className:"d-flex mb-2"},n.createElement("div",{className:a(e),style:{width:"".concat(e.count/r*100,"%"),height:20}}),n.createElement("span",null,e.count))})))))}var ae=a.T.encloseNamespace("shared.selectedInteractionEmptyState");function ie(e){return n.createElement(o.u,{className:"rounded h-100 bg-white justify-content-center py-4"},n.createElement(o.u.Image,{src:e.emptyStateUrl,size:"small"}),n.createElement(o.u.Info,{className:"w-100"},ae("emptyStateText")))}var le=r(97364),ce=r(69674),oe=r(57266);function se(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function ue(e){var t,r,a,c,o=(a=n.useState((0,le.P)(e.sortBy,"correctlyAnswered")),c=2,function(e){if(Array.isArray(e))return e}(a)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(a,c)||function(e,t){if(e){if("string"==typeof e)return se(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?se(e,t):void 0}}(a,c)||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.")}()),s=o[0],u=o[1],m=function(e,t,r,a){return n.useMemo((function(){var r=(0,N.Q)(e),n=r.reduce((function(e,t,r){return Object.assign(Object.assign({},e),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=L(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=L(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==L(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},t.id,r))}),{}),i=r.map((function(e){return Object.assign(Object.assign({},e),{questionNumber:n[e.id],resultsSummary:(0,h.nq)(e,t)})}));if("correctlyAnswered"===(null==a?void 0:a.id)){var c=l.m.sortBy(i,(function(e){return e.resultsSummary.awaitingMarking?-1:e.resultsSummary.percentCorrect}));return a.desc?c.reverse():c}return i}),[r,a])}(e.interactive,e.results,e.refreshTable,l.m.first(s)),d=e.selectedInteractionId&&(0,h.Zs)(e.interactive,e.selectedInteractionId);return n.createElement("div",{className:"row"},n.createElement("div",{className:"col-6 flex-grow-1"},n.createElement(ce.i,{key:e.selectedInteractionId,columns:(r=e.showAnswersInTable,[{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"#"})},accessor:"questionNumber",id:"index",Cell:function(e){var t=e.row.original.questionNumber;return n.createElement(K,null,t+1,".")},width:15,disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"question"})},accessor:"data",Cell:function(e){var t=e.row.original,a=e.initialState.selectedRowIds,i=null==a?void 0:a[null==t?void 0:t.id];return n.createElement(K,{className:"flex-column"},n.createElement("div",{className:"".concat(i?"":"clamp-1"," pe-2")},n.createElement(f.y,{interaction:t,containerClassName:"d-flex"})),r&&i&&n.createElement(D,{interaction:t}))},disableSortBy:!0},{Header:function(e){var t=e.column;return n.createElement(V,{column:t,phraseKey:"score"})},accessor:"resultsSummary",id:"correctlyAnswered",Cell:function(e){var t=e.value,r=t.percentCorrect;return t.awaitingMarking?n.createElement(T.O,{title:H("markingRequired"),className:"flex-grow-1",tooltipClassName:"d-block",showLabel:!0}):n.createElement(F.O,{percentage:r,layout:F.I.LabelBefore})},width:60,sortDescFirst:!0,sortType:Z}]),data:m,theme:e.theme,onSelectRow:function(e){var t=e.original;i.t.preventScrollTop(),oe.e.updateParams({interactionId:t.id},{merge:!0})},initialSelectedRowIds:d?[d.id]:null,getRowId:function(e){return e.id},enableSort:!0,manualSort:!0,onSort:u,initialSortBy:s})),n.createElement("div",{className:"col-6 d-flex flex-column"},!e.reportsStyling&&e.selectedInteractionId&&!!(null===(t=e.results.students)||void 0===t?void 0:t.length)&&n.createElement(ne,{interaction:d,results:e.results}),n.createElement("div",{className:"border border-light rounded flex-grow-1"},!!d&&n.createElement(j,{interaction:d,results:e.results,markedAnswers:e.markedAnswers,addMarkedAnswers:e.addMarkedAnswers,submitMarkedAnswers:e.submitMarkedAnswers,imageCdnUrl:e.imageCdnUrl,anonymiseUsers:e.anonymiseUsers,emptyStateImageUrl:e.emptyStateImageUrl,markingRequiredImageUrl:e.markingRequiredImageUrl,correctImageUrl:e.correctImageUrl,incorrectImageUrl:e.incorrectImageUrl,skippedImageUrl:e.skippedImageUrl,reportsStyling:e.reportsStyling,isDemo:e.isDemo}),!d&&n.createElement(ie,{emptyStateUrl:e.selectQuestionImageUrl}))))}var me=r(9193),de=r(1704),fe=r(99742);const pe={partialInsights:"bk68v"};function ge(){return n.createElement("div",null,n.createElement("div",{className:"row g-3 mb-5"},n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(pe.partialInsights," rounded partial-loading-background")})),n.createElement("div",{className:"col-6"},n.createElement("div",{className:"".concat(pe.partialInsights," rounded partial-loading-background")}))))}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var ve=a.T.encloseNamespace("shared.interactiveInsightsQuestionsView"),ye={table:"bg-white rounded border border-light h-100 pb-2",header:"border-bottom px-3 py-2 mb-2",headerCell:"d-flex align-items-center",cell:"",row:"px-3 py-2 bg-light-blue-hover",selectedRow:"bg-gray-100",sortIndicator:"ms-2"};function he(e){var t,r,a,i,l,c=(i=n.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(i)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,l,c=[],o=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;o=!1}else for(;!(o=(n=i.call(r)).done)&&(c.push(n.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=r.return&&(l=r.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(i,l)||function(e,t){if(e){if("string"==typeof e)return be(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?be(e,t):void 0}}(i,l)||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.")}()),o=c[0],s=c[1],u=(0,me.D)(null===(t=e.interactive)||void 0===t?void 0:t.id,null===(r=e.interactiveMetadata)||void 0===r?void 0:r.id,(function(){return s(!1)})),m=u.markedAnswers,d=u.addMarkedAnswers,f=u.submitMarkedAnswers;return n.createElement(n.Fragment,null,!e.hasDataLoaded&&n.createElement(ge,null),e.hasDataLoaded&&n.createElement(ue,{interactive:e.interactive,results:e.results,markedAnswers:m,addMarkedAnswers:d,submitMarkedAnswers:function(){return s(!0)},imageCdnUrl:e.config.imageCdnUrl,selectedInteractionId:e.interactionId,refreshTable:e.isFetching,emptyStateImageUrl:fe.W.Insights.NO_RESPONSES,selectQuestionImageUrl:fe.W.Insights.NO_DATA,anonymiseUsers:e.anonymiseUsers,sortBy:e.sortBy,showAnswersInTable:!0,theme:ye,correctImageUrl:fe.W.Insights.JIGSAW,incorrectImageUrl:fe.W.Insights.RED_JIGSAW,skippedImageUrl:fe.W.Insights.SKIPPED,markingRequiredImageUrl:fe.W.Insights.CLIPBOARD,isDemo:e.isDemo}),o&&n.createElement(de.l,{title:ve("markPopupTitle",{smartCount:null!==(a=Object.keys(m).length)&&void 0!==a?a:0}),closePopup:function(){return s(!1)},confirmButtonText:ve("submit"),confirmButtonVariant:"dark",onClickConfirm:f},n.createElement("p",null,ve("markPopupBody"))))}}}]);
|
|
2
|
-
//# sourceMappingURL=6802-3187f3ece9-lite.chunk.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7033],{9570:(e,t,r)=>{r.d(t,{d:()=>S});var n=r(32735),a=r(40424),s=r(23481),i=r(75896),o=r(83914),c=r(8246),u=r(35223);function l(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:u.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:u.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=s.T.encloseNamespace("shared.interactionResponses");function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function f(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var v=function(){return n.createElement(n.Fragment,null)},g=f(f(f(f(f(f(f({},a.Z9.Annotation,v),a.Z9.Image,v),a.Z9.MissingWord,(function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map((function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))}))):n.createElement(n.Fragment,null)})),a.Z9.MultipleChoice,(function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map((function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e}))}))):n.createElement(n.Fragment,null)})),a.Z9.TrueOrFalse,(function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t}):n.createElement(n.Fragment,null)})),a.Z9.ShortAnswer,(function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t},e.children):n.createElement(n.Fragment,null)})),a.Z9.Illustration,(function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)})),y=r(20789),p=r(44526),w=r(56151),b=r(3894),h=r(69737),E=r(83140),I=r(80845),k=r(64818);const C={avatarContainer:"O7oaA"};function S(e){var t,r,a,s,i,o,c=g[e.interaction.typeId];if(!c)return n.createElement(n.Fragment,null);var u=(0,I.j_)(e.studentResults),l=(0,I.f6)(e.interaction.id,u),m=E.A.isInteractionCorrect(e.interaction,u);return n.createElement("div",{className:"position-relative border-bottom border-light"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:C.avatarContainer},n.createElement(y.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?k.l.getInitialsFromFullName(e.anonymisedUserName):k.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(s=e.studentResults.user)||void 0===s?void 0:s.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(o=e.studentResults)||void 0===o?void 0:o.publicUser)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(w.U,{studentResults:e.studentResults,correctness:m,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},l?n.createElement(c,{interaction:e.interaction,answers:l.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(b.Z,{studentAttempt:l,correctness:m,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(h.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:m}))))))}},71553:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940),a=r(62875);function s(e,t){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:{start:t.start,end:t.end},userIds:t.userId,classroomsAndGroups:t.groupId}}var i={interactiveResultSet:function(e,t,r,i,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:(0,a.H)("interactive:result:set:".concat(e,":").concat(t),i),data:s(r,i),type:n.k.POST,normalize:!1,formatData:function(e){return Object.assign(Object.assign({},e),{students:e.students.map((function(e){return e.name&&e.profileId?Object.assign(Object.assign({},e),{publicUser:{profileId:e.profileId,name:e.name}}):e}))})},success:c,error:u,always:l}},mark:function(e,t,r,a,s,i,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:o}},pendingReviews:function(e){return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews",type:n.k.POST,data:e}},interactiveResultsReport:function(e){return{url:"{gateway}/v2/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},9193:(e,t,r)=>{r.d(t,{D:()=>f});var n=r(32735),a=r(70680),s=r(23481),i=r(20354),o=r(71553),c=r(39157),u=r(69883);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=s.T.encloseNamespace("reportsShared.dataHooks"),f=function(e,t,r){var s,f,v=(s=(0,n.useState)({}),f=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,i,o=[],c=!0,u=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=s.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(s,f)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(s,f)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),g=v[0],y=v[1],p=(0,a.I0)(),w=(0,u.Z)();return{markedAnswers:g,addMarkedAnswers:function(e,t){e.forEach((function(e){y((function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))}))}))},submitMarkedAnswers:function(){var n=Object.keys(g).map((function(e){return g[e]}));if(n.length){var a=0,s=0;n.forEach((function(r){var n=r.id,a=r.resultId,s=r.questionId,l=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:s,status:l},c,null,u))}))}function c(){s++}function u(){var e,t;++a===n.length&&(e="",t=!1,0===s&&(e=d("error",{smartCount:n.length}),t=!0),s<a&&(e=d("success",{smartCount:s})+" ".concat(d("partialError",{smartCount:a-s}))),s===a&&(e=d("success",{smartCount:s})),t?w.error(e):w.success(e),y({}),r&&r())}}}}},39157:(e,t,r)=>{r.d(t,{HI:()=>d,R6:()=>u,Rt:()=>v,UU:()=>m,Zs:()=>l,nq:()=>f});var n=r(75896),a=r(94892),s=r(28972),i=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var s={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,c.Q)(e).length;t.students.forEach((function(t){var o=Object.assign(Object.assign({},t),{summary:v(e,t)});o.summary.awaitingMarking?s.markingRequired.push(o):n.m.last(t.results).attempts.length===i?(s.completed.push(o),o.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&s.highScore.push(o),o.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&s.lowScore.push(o)):s.notCompleted.push(o)}));var o=n.m.sortBy(s.lowScore,(function(e){return e.summary.percentCorrect})),u=n.m.sortBy(s.highScore,(function(e){return-e.summary.percentCorrect}));return Object.assign(Object.assign({},s),{lowScore:o,highScore:u})}function l(e,t){return(0,c.Wn)(e).find((function(e){return e.id.toString()===t.toString()}))}function m(e){return"".concat(e.questionId,":").concat(e.resultId)}function d(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every((function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Correct})))?i.N.Correct:(null==a?void 0:a.answers.every((function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect})))?i.N.Incorrect:void 0}function f(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach((function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var m=o.A.isInteractionCorrect(e,r);m===s.w.Correct&&n++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&u++,m!==s.w.UnAnswered&&a++}})),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function v(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,i=0,u=0;n.forEach((function(e){var t=o.A.isInteractionCorrect(e,r);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&u++}));var l=a>0?i/a:0,m=new Set(n.map((function(e){return e.id}))),d=r.attempts.filter((function(e){var t;return!!m.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)})).length;return{answered:r.attempts.length,attempts:t.results.length,unanswered:a-d,percentCorrect:l,correct:i,awaitingMarking:u}}},93322:(e,t,r)=>{r.d(t,{F:()=>s});var n=r(32735),a=r(13126);function s(){n.useEffect((function(){return a.e.lockContentWidth(),function(){return a.e.unlockContentWidth()}}),[])}},62875:(e,t,r)=>{function n(e,t,r){var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,s=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId;return a&&(n+=":".concat(a)),s&&(n+=":".concat(s)),r&&(n+=":".concat(r)),n}r.d(t,{H:()=>n})}}]);
|
|
2
|
-
//# sourceMappingURL=7033-6333c374da-lite.chunk.js.map
|