@clickview/lite 0.83.0 → 0.83.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{6741-lite-9250bba792.chunk.css → 6168-lite-57f236bf59.chunk.css} +1 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/6168-34720b9253-lite.chunk.js +3 -0
- package/dist/scripts/6168-34720b9253-lite.chunk.js.map +1 -0
- package/dist/scripts/{6912-644b69d0eb-lite.chunk.js → 6912-b0c00cbece-lite.chunk.js} +2 -2
- package/dist/scripts/6912-b0c00cbece-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-dcea87749e.min.js → bundle-8d1c2248c0.min.js} +3 -3
- package/dist/scripts/{bundle-dcea87749e.min.js.map → bundle-8d1c2248c0.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/6741-1e64f67951-lite.chunk.js +0 -3
- package/dist/scripts/6741-1e64f67951-lite.chunk.js.map +0 -1
- package/dist/scripts/6912-644b69d0eb-lite.chunk.js.map +0 -1
- /package/dist/scripts/{6741-1e64f67951-lite.chunk.js.LICENSE.txt → 6168-34720b9253-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-dcea87749e.min.js.LICENSE.txt → bundle-8d1c2248c0.min.js.LICENSE.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 6741-1e64f67951-lite.chunk.js.LICENSE.txt */
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6741],{45781:(e,t,n)=>{n.d(t,{z:()=>p});var r=n(32735),a=n(6044),i=n(23481),o=n(65858),c=n(38502),s=n(83345),l=n(56644);const u={pillTab:"bMJM0"};var d="discover.header";function p(e){var t,n,p,m,f,v;if(!e.type)return r.createElement(r.Fragment,null);if(e.type===l.Yv.Learner||e.hasStudentExperience)return r.createElement("div",{className:"py-3"},r.createElement("h1",{className:"h2 mb-0"},r.createElement(s.x,{namespace:d,phrase:"heading"})));var y=[{name:i.T.getPhrase(d,"forYou"),appLink:null===(t=e.appLinks)||void 0===t?void 0:t.forYou,active:"forYou"===e.active,analyticsData:{name:i.T.getPhrase(d,"forYou"),url:a.C$.getHref(null===(n=e.appLinks)||void 0===n?void 0:n.forYou)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}},{name:i.T.getPhrase(d,"whatsNew"),appLink:null===(p=e.appLinks)||void 0===p?void 0:p.whatsNew,active:"whatsNew"===e.active,analyticsData:{name:i.T.getPhrase(d,"whatsNew"),url:a.C$.getHref(null===(m=e.appLinks)||void 0===m?void 0:m.whatsNew)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}];return e.showCalendar&&y.push({name:i.T.getPhrase(d,"calendar"),appLink:null===(f=e.appLinks)||void 0===f?void 0:f.calendar,active:"calendar"===e.active,analyticsData:{name:i.T.getPhrase(d,"calendar"),url:a.C$.getHref(null===(v=e.appLinks)||void 0===v?void 0:v.calendar)},analyticsOptions:{actionType:o.Vw.Click,entity:o.py.Url,location:o.LZ.MagicTabs}}),r.createElement("div",{className:"py-3 text-center mx-n3"},r.createElement(c.r,{tabs:y,className:u.pillTab}))}},38502:(e,t,n)=>{n.d(t,{r:()=>d});var r=n(32735),a=n(49985),i=n(15611),o=n(18559),c=n(11607),s=n(83914),l=n(22771);function u(e){return r.createElement(r.Fragment,null,!!e.tab.svgName&&r.createElement("div",{className:e.tab.name?"pe-1":""},r.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&r.createElement("div",{className:"ps-2"},r.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function d(e){var t;return r.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},r.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map(function(e,t){return r.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?r.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},r.createElement(u,{tab:e})):r.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&a.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},r.createElement(u,{tab:e})))})))}d.defaultProps={borderRadius:"lg"}},17101:(e,t,n)=>{var r;n.d(t,{n:()=>r}),function(e){e[e.Other=0]="Other",e[e.SuggestImprovement=1]="SuggestImprovement",e[e.ReportBug=2]="ReportBug",e[e.RequestVideo=3]="RequestVideo",e[e.RaiseIssue=4]="RaiseIssue",e[e.GivePraise=5]="GivePraise",e[e.Footer=6]="Footer",e[e.RequestLivestream=7]="RequestLivestream"}(r||(r={}))},7198:(e,t,n)=>{n.d(t,{f:()=>a});var r=n(99940),a={submitFeedback:function(e,t){return{url:"{gateway}/v1/feedback",key:"submit:feedback",type:r.k.POST,data:Object.assign(Object.assign({},e),t)}}}},52167:(e,t,n)=>{n.d(t,{m:()=>p});var r=n(53301),a=n.n(r),i=n(28046),o=n(93824),c=n(86613);function s(e){return s="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},s(e)}function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function u(e,t,n){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=s(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var d=u(u(u(u(u({},o.C.AU,"au"),o.C.NZ,"nz"),o.C.UK,"uk"),o.C.US,"us"),o.C.CA,"ca"),p={getUserInfo:function(e,t){return{id:e.id,username:e.username,email:e.email,userType:e.role===c.i.Admin?"Admin":"Staff",customerId:e.customerId,cvcId:t.crmId,customerName:t.name,instanceRegion:e.instanceRegion,contentRegion:e.contentRegion,firstName:e.givenName,lastName:e.familyName}},mapCountryCodeToTag:function(e){return d[e.toLowerCase()]},getTags:function(e,t,n,r){var a,i=[t].concat(function(e){if(Array.isArray(e))return l(e)}(a=r)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?l(e,t):void 0}}(a)||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.")}());i.push(n?"student":"staff"),e.role===c.i.Admin&&i.push("administrator");var o=p.mapCountryCodeToTag(e.countryCode);return o&&i.push(o),i},categorizeFiles:function(e){return e.reduce(function(e,t){var n=t.get("fileInfo");return a().isValidFile(t.get("file"),i.l.VIDEO)?e.videoUrls.push(null==n?void 0:n.url):e.imageUrls.push(null==n?void 0:n.url),e},{imageUrls:[],videoUrls:[]})}}},16741:(e,t,n)=>{n.r(t),n.d(t,{CuratedDiscoverView:()=>oe});var r=n(32735),a=n(6044),i=n(23481),o=n(57900),c=n(20354),s=n(2948),l=n(49985),u=n(65858),d=n(75896),p=n(45781),m=n(131),f=n(16714),v=n(56644),y=n(21366),g=n(97958),h=n(83345),b=n(36532),T=n(35223),S="subjects.discoverDashboardEmptyState",C=i.T.encloseNamespace(S);function A(e){var t,n,a=(null===(t=e.dashboard)||void 0===t?void 0:t.status)===v.GL.Archived;return r.createElement(g.u,null,r.createElement(g.u.Image,{src:e.imageUrl,altText:C("info")}),r.createElement(g.u.Heading,null,r.createElement(h.x,{namespace:S,phrase:"heading"})),r.createElement(g.u.Info,null,r.createElement(h.x,{namespace:S,phrase:"info"})),r.createElement(b.u,{title:a?i.T.getPhrase(S,"archivedCtaTooltip"):"",spanHack:!0},r.createElement(g.u.Cta,{text:i.T.getPhrase(S,"add"),appLink:null===(n=e.addWidgetApplink)||void 0===n?void 0:n.call(e),className:"btn btn-dark",icon:T.vn.Plus,disabled:a})))}function w(e){var t,n,a=d.m.sortBy(null===(t=e.dashboard)||void 0===t?void 0:t.widgets,"index");function i(t,n,r){var a=y.S.getWidgetParams(n,r,y.S.getDashboardTargetType(e.dashboard));return e.getWidgetContentRequest(t,a,r,e.presentation)}var o=e.isReadonly&&!(null==a?void 0:a.length);return r.createElement(r.Fragment,null,r.createElement(p.z,{type:null===(n=e.dashboard)||void 0===n?void 0:n.userType,appLinks:e.headerAppLinks,hasStudentExperience:e.hasPermissions(f.C.StudentExperience),showCalendar:e.showCalendar,active:"forYou"}),a.map(function(t,n){var a;return r.createElement(m.L,{widgetCollection:v.ku.Discover,key:t.id,id:t.id,getContentRequest:i,audiences:e.audiences,name:t.name,description:t.description,templateId:t.templateId,metadata:t.metadata,presentation:e.presentation,preferences:t.preferences,appLinks:e.widgetAppLinks,isScrollToTargetWidget:(null==e?void 0:e.scrollToWidgetId)===t.id,widgetTypeId:t.widgetId,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,onSubmitFeedback:e.onSubmitFeedback,updatePreferences:e.updatePreferences,lazyLoad:e.lazyLoad,dashboardTarget:v.ku.Discover,widgetIndex:n,jobTitle:e.jobTitle,isPreviewing:e.isReadonly,imageUrls:e.imageUrls,settings:{hasTopicDirectories:null===(a=e.settings)||void 0===a?void 0:a.hasTopicDirectories,hasOnboardingV2:e.settings.hasOnboardingV2,hasCompletedOnboardingV2:e.settings.hasCompletedOnboardingV2},availablePresentations:e.availablePresentations,imageCdnUrl:e.commonVideoProps.imageCdnUrl,commonVideoProps:e.commonVideoProps,classification:void 0,contentType:void 0,hasTableOfContents:!1,limitTotalItems:!1,isTertiaryCustomerWithoutExchange:e.isTertiaryCustomerWithoutExchange,seeMoreLink:void 0,onClickRemoveItem:e.removeFromVideoHistory,badgeComponent:null})}),o&&r.createElement(A,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.widgetAppLinks.widgetWizard}))}var E=n(31549),O=n(38143),k=n(17101),L=n(72639),P=n(12754),N=n(42308),D=n(1666),I=n(80889),U=n(7198),j=n(98064),x=n(61699),R=n(31949),F=n(69883),_=n(22902),H=n(15311),V=n(79612),W=n(37802),M=n(69454),B=n(52167),Z=n(76753),Y=n(99742),G=n(58321),z=n(86698),q=n(85369),$=n(23737),J=n(33192),K=n(23923),X=n(87821),Q=n(27051);function ee(){var e,t,n="function"==typeof Symbol?Symbol:{},r=n.iterator||"@@iterator",a=n.toStringTag||"@@toStringTag";function i(n,r,a,i){var s=r&&r.prototype instanceof c?r:c,l=Object.create(s.prototype);return te(l,"_invoke",function(n,r,a){var i,c,s,l=0,u=a||[],d=!1,p={p:0,n:0,v:e,a:m,f:m.bind(e,4),d:function(t,n){return i=t,c=0,s=e,p.n=n,o}};function m(n,r){for(c=n,s=r,t=0;!d&&l&&!a&&t<u.length;t++){var a,i=u[t],m=p.p,f=i[2];n>3?(a=f===r)&&(s=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=e):i[0]<=m&&((a=n<2&&m<i[1])?(c=0,p.v=r,p.n=i[1]):m<f&&(a=n<3||i[0]>r||r>f)&&(i[4]=n,i[5]=r,p.n=f,c=0))}if(a||n>1)return o;throw d=!0,r}return function(a,u,f){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&m(u,f),c=u,s=f;(t=c<2?e:s)||!d;){i||(c?c<3?(c>1&&(p.n=-1),m(c,s)):p.n=s:p.v=s);try{if(l=2,i){if(c||(a="next"),t=i[a]){if(!(t=t.call(i,s)))throw TypeError("iterator result is not an object");if(!t.done)return t;s=t.value,c<2&&(c=0)}else 1===c&&(t=i.return)&&t.call(i),c<2&&(s=TypeError("The iterator does not provide a '"+a+"' method"),c=1);i=e}else if((t=(d=p.n<0)?s:n.call(r,p))!==o)break}catch(t){i=e,c=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,a,i),!0),l}var o={};function c(){}function s(){}function l(){}t=Object.getPrototypeOf;var u=[][r]?t(t([][r]())):(te(t={},r,function(){return this}),t),d=l.prototype=c.prototype=Object.create(u);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,te(e,a,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=l,te(d,"constructor",l),te(l,"constructor",s),s.displayName="GeneratorFunction",te(l,a,"GeneratorFunction"),te(d),te(d,a,"Generator"),te(d,r,function(){return this}),te(d,"toString",function(){return"[object Generator]"}),(ee=function(){return{w:i,m:p}})()}function te(e,t,n,r){var a=Object.defineProperty;try{a({},"",{})}catch(e){a=0}te=function(e,t,n,r){if(t)a?a(e,t,{value:n,enumerable:!r,configurable:!r,writable:!r}):e[t]=n;else{var i=function(t,n){te(e,t,function(e){return this._invoke(t,n,e)})};i("next",0),i("throw",1),i("return",2)}},te(e,t,n,r)}function ne(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var re=function(e,t,n,r){return new(n||(n=Promise))(function(a,i){function o(e){try{s(r.next(e))}catch(e){i(e)}}function c(e){try{s(r.throw(e))}catch(e){i(e)}}function s(e){var t;e.done?a(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,c)}s((r=r.apply(e,t||[])).next())})},ae="dashboard.dashboard",ie=i.T.encloseNamespace(ae);function oe(e){var t,n,d,p,m,y,g,h,b=c.a.useBasicFetch(R.N.currentUser()),T=c.a.useBasicFetch((null===(t=b.data)||void 0===t?void 0:t.isAuthenticated)&&R.N.user(b.data.id)),S=(0,_.T)(),C=S.hasLocalPermissions,A=S.hasPermissions,te=(0,F.Z)(),oe=c.a.useBasicFetch(C(f.E.ManageDiscoverPreferences)&&(null===(n=b.data)||void 0===n?void 0:n.isAuthenticated)&&D.h.customer(b.data.customerId)),ce=c.a.useBasicFetch((null===(d=b.data)||void 0===d?void 0:d.isAuthenticated)&&j.D.libraries()),se=(0,z.y)().availablePresentations,le=(0,K.B)(),ue=(0,H.r)(),de=(0,$.y)({targetType:v.ku.Discover,queryParams:e.queryParams,presentationSlug:e.presentationSlug}),pe=de.dashboard,me=de.presentation,fe=de.audiences,ve=c.a.useGetFetchAsync(),ye=(0,W.r)(null),ge=(0,G.U)({locationContext:u.LZ.Dashboard}).commonVideoProps,he=(g=(0,s.D)(O.g.AUDIENCE_FILTER,void 0,{storage:o.Z1.SessionStorage}),h=1,function(e){if(Array.isArray(e))return e}(g)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw a}}return c}}(g,h)||function(e,t){if(e){if("string"==typeof e)return ne(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?ne(e,t):void 0}}(g,h)||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],be=(0,Q.E)(M.T.getAudienceParams(he),b.data),Te=function(e){return+L.p[null==e?void 0:e.learningLevel]===L.p.Level_1?"VariantOne":"VariantTwo"}(me);(0,V.M)(Z.CG.getDiscoverMetadata({content:me,phraseContext:{phraseHandler:ie,titlePhrase:"pageTitle".concat(Te),descriptionPhrase:"pageDescription".concat(Te)},canonicalLink:J.f.getCanonicalLink(),allowIndexing:J.f.allowIndexing(),hrefLang:J.f.getStaticRouteHrefLang(null==me?void 0:me.learningLevel,be.discover)}));var Se=(0,q.N)().showCalendar;return r.createElement("div",{className:"bg-white px-4"},r.createElement(w,{dashboard:pe.data,widgetAppLinks:be,headerAppLinks:(0,Q.u)(),presentation:me,getWidgetContentRequest:function(e,t,n,r){var a=E.g.hasTwigOrTigtag(ce.data,b.data),i=a.hasTwig,o=a.hasTigtag;return I._.dashboardWidgetContent(e,t,n,r,{hideTigTag:!o,hideTwig:!i})},audiences:fe.data,updatePreferences:function(e,t,n,r){return re(this,void 0,void 0,ee().m(function t(){var a,i;return ee().w(function(t){for(;;)switch(t.n){case 0:if(a=r.filter(function(e){return!e.hidden&&n.find(function(t){return t.id===e.id}).hidden}),i=r.filter(function(e){return!!e.hidden&&!n.find(function(t){return t.id===e.id}).hidden}),!(null==a?void 0:a.length)){t.n=1;break}return t.n=1,ve(x.o.followSubjects(a.map(function(e){return e.id})));case 1:if(!(null==i?void 0:i.length)){t.n=2;break}return t.n=2,ve(x.o.unfollowSubjects(i.map(function(e){return e.id})));case 2:return t.a(2,ve(I._.updateWidgetPreferences(e,r.map(function(e){return{id:e.id,index:e.index}}),b.data)))}},t)}))},hasPermissions:A,hasLocalPermissions:C,onSubmitFeedback:A(f.C.CanSubmitFeedback)&&function(e){return re(this,void 0,void 0,ee().m(function t(){var n;return ee().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,ve(U.f.submitFeedback({type:k.n.Footer,user:B.m.getUserInfo(b.data,oe.data),tags:B.m.getTags(b.data,P.x.Primary,A(f.C.StudentExperience),["discover","in product feedback"])},{reaction:e.type,feedback:e.content,location:"Discover Footer",presentationName:me.description,presentationId:me.id,dashboardName:pe.data.name,dashboardId:pe.data.id,currentPageUrl:a.Ab.GetCurrentUrl()}));case 1:return n=t.v,l.k.logUserAction({feedbackType:e.type,content:e.content,presentationId:me.id,dashboardId:pe.data.id},{actionType:u.Vw.Submit,location:u.LZ.DiscoverFooter,entity:u.py.Feedback,workflowPhase:u.eu.Complete}),t.a(2,n)}},t)}))},removeFromVideoHistory:function(e,t,n,r){return re(this,void 0,void 0,ee().m(function a(){return ee().w(function(a){for(;;)switch(a.n){case 0:if(r===N.z.ContinueWatching){a.n=1;break}return a.a(2);case 1:return a.p=1,a.n=2,ve(X.p.removeFromHistory(e,["widget:".concat(n)]));case 2:te.success(i.T.getPhrase(ae,"removeFromHistorySuccess")),l.k.logUserAction({id:e,name:t,widgetId:n},{entity:u.py.Video,actionType:u.Vw.Click,descriptor:u.XX.RemoveFromWatchHistory,location:u.LZ.SlidingListItem}),a.n=4;break;case 3:a.p=3,a.v,te.error(i.T.getPhrase(ae,"removeFromHistoryError",{name:t}));case 4:return a.a(2)}},a,null,[[1,3]])}))},lazyLoad:!J.f.isBot(),showCalendar:Se,jobTitle:null===(y=null===(m=null===(p=T.data)||void 0===p?void 0:p.userProfile)||void 0===m?void 0:m.metadata)||void 0===y?void 0:y.jobTitle,imageUrls:{onboardingTeacherBackground:Y.W.OnboardingV2.Widget.TEACHER_BACKGROUND},settings:ye,availablePresentations:se,isTertiaryCustomerWithoutExchange:le&&!(null==ue?void 0:ue.hasProduct(P.x.Exchange)),commonVideoProps:ge}))}},27051:(e,t,n)=>{n.d(t,{E:()=>f,u:()=>v});var r=n(1048),a=n(28400),i=n(183),o=n(14070),c=n(97291),s=n(34181),l=n(22490),u=n(67963),d=n(82431),p="classification-latest-releases",m=["preview","dashboardId","skipPrompt"];function f(e,t){return{classification:function(t){return s.L.getAppLink(t,e||{})},videoType:function(e,n){return l.W.getAppLink(e,Object.assign(Object.assign({},n),{context:i.Q.Widget,includeContext:null==t?void 0:t.isAuthenticated}))},series:d.j.getSeriesAppLink,playlist:function(e){return{application:c.O.PLAYLISTS,action:o.e.Playlists.PLAYLIST,args:[e.id,a.m.slugify(e.name)]}},latestReleases:function(){return{application:c.O.CONTENT_UPDATES,action:o.e.ContentUpdates.CONTENT_UPDATES}},allTopics:function(){return{application:c.O.SUBJECT,action:o.e.Subjects.PRESENTATION_TOPICS}},classificationLatestReleases:function(e){return e.id===p?{application:c.O.CONTENT_UPDATES,action:o.e.ContentUpdates.CONTENT_UPDATES}:{application:c.O.CONTENT_UPDATES,action:o.e.ContentUpdates.CLASSIFICATION_UPDATE,args:[e.id,a.m.slugify(e.name)]}},classificationDirectory:function(t){var n=t;return{application:c.O.SUBJECT,action:o.e.Subjects.CLASSIFICATION_TOPICS,args:[n.id,a.m.slugify(n.name)],params:r.t.omit(e,m)}},widgetVideoList:function(e,t){return{application:c.O.DASHBOARD,action:o.e.Dashboard.DASHBOARD,args:[e,a.m.slugify(t)]}},watchHistory:function(){return{application:c.O.WATCH_HISTORY,action:o.e.WatchHistory.HOME}},company:function(e){return{application:c.O.MOVIES_AND_TV,action:o.e.MoviesAndTv.COMPANY_DASHBOARD,args:[e.id,a.m.slugify(e.name)]}},discover:function(){return{application:c.O.DASHBOARD,action:o.e.Dashboard.HOME}},calendar:function(){return{application:c.O.CALENDAR,action:o.e.Calendar.CALENDAR}},calendarMonth:function(e,t){var n={application:c.O.CALENDAR,action:o.e.Calendar.CALENDAR_MONTH,args:[e.toLowerCase()]};return t&&(n.params={year:t}),n},onboardingStep:function(e){return(0,u.u)()[e]},onboardingAppLinks:function(){return(0,u.u)()},livestream:function(){return null},widgetWizard:function(){return null}}}function v(){return{forYou:{application:c.O.DASHBOARD,action:o.e.Dashboard.HOME},whatsNew:{application:c.O.CONTENT_UPDATES,action:o.e.ContentUpdates.CONTENT_UPDATES},calendar:{application:c.O.CALENDAR,action:o.e.Calendar.CALENDAR}}}},87821:(e,t,n)=>{n.d(t,{p:()=>o});var r=n(99940),a=n(110);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var o={userVideoHistory:function(e,t,n,r){var i="video:history",o="{gateway}/v1/users/me/watch-history";return e&&(i+=":".concat(e),o+="?cursor=".concat(e)),{key:i,url:o,formatData:function(e){return{data:e.data.map(function(e){var t=a.O.format(e.lastTimeWatched),n=a.O.format(t,"YYYY-MM-DD");return Object.assign(Object.assign({},e),{lastTimeWatched:t,lastDateWatched:n})}),pagination:e.pagination}},success:t,error:n,always:r}},videoHistory:function(e,t,n,r,a){var i=e.sort().map(function(e){return"videoId=".concat(e)});return{key:"video:history:videos:".concat(i.join("&")),url:"{gateway}/v1/videos/history?".concat(i.join("&")),normalizeOptions:{namespace:t},formatData:function(e){return(null==e?void 0:e.length)?e.map(function(e){return{id:e.videoId,lastProgressPoint:e.lastProgressPoint}}):e},success:n,error:r,always:a}},removeFromHistory:function(e){var t,n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];return{url:"{gateway}/v1/users/me/videos/".concat(e,"/watch-history"),key:"remove:video:history:".concat(e),type:r.k.DELETE,invalidationKeys:["video:history"].concat((t=n,function(e){if(Array.isArray(e))return i(e)}(t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(t)||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.")}()))}}}},85369:(e,t,n)=>{n.d(t,{N:()=>g});var r=n(32735),a=n(35242),i=n(20354),o=n(27022),c=n(72639),s=n(31949),l=n(37802),u=n(87114),d=n(86698);function p(e){return p="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},p(e)}function m(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,o,c=[],s=!0,l=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);s=!0);}catch(e){l=!0,a=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return f(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?f(e,t):void 0}}(e,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.")}()}function f(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function v(e,t,n){return(t=function(e){var t=function(e){if("object"!=p(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=p(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==p(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var y=v(v(v(v(v(v(v({},o.t.AU,[c.p.Level_1]),o.t.US,[c.p.Level_1]),o.t.UK,[c.p.Level_1]),o.t.SCOT,[c.p.Level_1]),o.t.NZ,[]),o.t.GLOBAL,[]),o.t.CA,[]);function g(){var e,t=(0,l.r)(null),n=t.hasSpecialEventCalendar,o=t.isLoadingSettings,c=(0,d.y)({redirectOnError:!0}).activePresentation,p=i.a.useBasicFetch(s.N.currentUser()),f=y[null===(e=p.data)||void 0===e?void 0:e.contentRegion],v=u.i.getMappedPresentationLevel(null==c?void 0:c.learningLevel),g=!(null==f?void 0:f.find(function(e){return e.toString()===(null==v?void 0:v.toString())})),h=!o&&!n,b=m(r.useState(!h&&!g),2),T=b[0],S=b[1],C=m(r.useState(o||!(null==c?void 0:c.id)),2),A=C[0],w=C[1];return r.useEffect(function(){h||g?S(!1):A||S(!0),w(o||!(null==c?void 0:c.id))},[n,null==c?void 0:c.id,A]),a.h.isDevelopment?{showCalendar:!0,isLoading:!1}:{showCalendar:T,isLoading:A}}},22771:(e,t,n)=>{n.d(t,{Z:()=>r});const r={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
3
|
-
//# sourceMappingURL=6741-1e64f67951-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6741-1e64f67951-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///app/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/enums/FeedbackType.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/libs/shared/src/apps/discover/components/discover-dashboard/empty-state/DiscoverDashboardEmptyState.tsx","file:///app/packages/libs/shared/src/apps/discover/components/discover-dashboard/DiscoverDashboard.tsx","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard/CuratedDiscoverView.tsx","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts","file:///app/packages/projects/lite/src/apps/watch-history/flight-requests/VideoHistoryRequests.ts","file:///app/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center mx-n3'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","export enum FeedbackType {\n Other,\n SuggestImprovement,\n ReportBug,\n RequestVideo,\n RaiseIssue,\n GivePraise,\n Footer,\n RequestLivestream\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackRequests = {\n submitFeedback(requestData: FeedbackFormRequest, formValues: Record<string, string>): Flight.Request {\n return {\n url: '{gateway}/v1/feedback',\n key: 'submit:feedback',\n type: HttpVerbs.POST,\n data: {\n ...requestData,\n ...formValues\n }\n };\n }\n};","import Dropzone from 'dropzone';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { FeedbackUserDetails } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nconst COUNTRY_CODE_TAGS: { [key in CountryCode]: string } = {\n [CountryCode.AU]: 'au',\n [CountryCode.NZ]: 'nz',\n [CountryCode.UK]: 'uk',\n [CountryCode.US]: 'us',\n [CountryCode.CA]: 'ca'\n};\n\nexport const FeedbackFormHelper = {\n getUserInfo: (\n currentUser: CurrentUser,\n customer: Customer\n ): FeedbackUserDetails => {\n return {\n id: currentUser.id,\n username: currentUser.username,\n email: currentUser.email,\n userType: currentUser.role === UserRole.Admin ? 'Admin' : 'Staff',\n customerId: currentUser.customerId,\n cvcId: customer.crmId,\n customerName: customer.name,\n instanceRegion: currentUser.instanceRegion,\n contentRegion: currentUser.contentRegion,\n firstName: currentUser.givenName,\n lastName: currentUser.familyName\n };\n },\n\n mapCountryCodeToTag: (countryCode: CountryCode): string => {\n return COUNTRY_CODE_TAGS[countryCode.toLowerCase() as CountryCode];\n },\n\n getTags: (currentUser: CurrentUser, product: ProductId, hasStudentExperience: boolean, extraTags: string[]) => {\n const tags = [\n product,\n ...extraTags\n ];\n\n tags.push(hasStudentExperience ? 'student' : 'staff');\n \n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n \n const countryCodeTag = FeedbackFormHelper.mapCountryCodeToTag(currentUser.countryCode);\n \n if (countryCodeTag)\n tags.push(countryCodeTag);\n\n return tags;\n },\n\n categorizeFiles(files: UploadItem[]) {\n return files.reduce((result, file) => {\n const fileInfo = file.get('fileInfo');\n if (Dropzone.isValidFile(file.get('file'), FileExtensions.VIDEO)) {\n result.videoUrls.push(fileInfo?.url);\n } else {\n result.imageUrls.push(fileInfo?.url);\n }\n return result;\n }, {\n imageUrls: [],\n videoUrls: []\n });\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { CuratedDashboard, DashboardStatus } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.discoverDashboardEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\n\ninterface DiscoverDashboardEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function DiscoverDashboardEmptyState(props: DiscoverDashboardEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n </EmptyState.Info>\n <Tooltip title={isArchived ? LanguageService.getPhrase(namespace, 'archivedCtaTooltip') : ''} spanHack>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'add')}\n appLink={props.addWidgetApplink?.()}\n className='btn btn-dark'\n icon={cvSvgLibrary.Plus}\n disabled={isArchived}\n />\n </Tooltip>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { DiscoverHeader, DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { JobTitles } from 'libs/shared/apps/sign-up/interfaces/JobTitles';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllDiscoverWidgetTemplates, WidgetImageUrls } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { SettingsHash } from 'libs/shared/hooks/useSettings';\nimport { CuratedDashboard, CuratedWidgetQueryParams, DashboardTargetType, Presentation, PresentationAudience, WidgetPreference } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nimport { DiscoverDashboardEmptyState } from './empty-state/DiscoverDashboardEmptyState';\n\nexport interface DiscoverDashboardProps {\n dashboard: CuratedDashboard;\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate,\n presentation: Presentation\n ) => Flight.Request;\n audiences: PresentationAudience[];\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n emptyImageUrl?: string;\n presentation: Presentation;\n widgetAppLinks?: AllDiscoverWidgetTemplates['appLinks'] & {\n widgetWizard: () => Core.AppLink;\n };\n headerAppLinks?: DiscoverHeaderAppLinks;\n scrollToWidgetId?: string;\n updatePreferences?: (\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ) => Promise<void>;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n removeFromVideoHistory: (videoId: string, videoName: string, widgetId: string, widgetTypeId: WidgetTypeId) => void;\n isReadonly?: boolean;\n lazyLoad?: boolean;\n showCalendar: boolean;\n jobTitle: JobTitles;\n imageUrls: WidgetImageUrls\n settings: SettingsHash;\n availablePresentations: Presentation[];\n isTertiaryCustomerWithoutExchange: boolean;\n commonVideoProps: CommonVideoProps;\n}\n\nexport function DiscoverDashboard(props: DiscoverDashboardProps): JSX.Element {\n const widgets = ArrayHelper.sortBy(props.dashboard?.widgets, 'index');\n\n function getWidgetContentRequest(id: string, widgetTypeId: WidgetTypeId, template: WidgetTemplate): Flight.Request {\n const params = CuratedDashboardHelper.getWidgetParams(\n widgetTypeId,\n template,\n CuratedDashboardHelper.getDashboardTargetType(props.dashboard)\n );\n\n return props.getWidgetContentRequest(id, params, template, props.presentation);\n }\n\n const showEmptyState = props.isReadonly && !widgets?.length;\n\n return (\n <>\n <DiscoverHeader\n type={props.dashboard?.userType}\n appLinks={props.headerAppLinks}\n hasStudentExperience={props.hasPermissions(PermissionName.StudentExperience)}\n showCalendar={props.showCalendar}\n active='forYou'\n />\n {widgets.map((widget, idx) => {\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Discover}\n key={widget.id}\n id={widget.id}\n getContentRequest={getWidgetContentRequest}\n audiences={props.audiences}\n name={widget.name}\n description={widget.description}\n templateId={widget.templateId}\n metadata={widget.metadata}\n presentation={props.presentation}\n preferences={widget.preferences}\n appLinks={props.widgetAppLinks}\n isScrollToTargetWidget={props?.scrollToWidgetId === widget.id}\n widgetTypeId={widget.widgetId}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n onSubmitFeedback={props.onSubmitFeedback}\n updatePreferences={props.updatePreferences}\n lazyLoad={props.lazyLoad}\n dashboardTarget={DashboardTargetType.Discover}\n widgetIndex={idx}\n jobTitle={props.jobTitle}\n isPreviewing={props.isReadonly}\n imageUrls={props.imageUrls}\n settings={{\n hasTopicDirectories: props.settings?.hasTopicDirectories,\n hasOnboardingV2: props.settings.hasOnboardingV2,\n hasCompletedOnboardingV2: props.settings.hasCompletedOnboardingV2\n }}\n availablePresentations={props.availablePresentations}\n imageCdnUrl={props.commonVideoProps.imageCdnUrl}\n commonVideoProps={props.commonVideoProps}\n\n // TODO: Ideally we don't have to do this\n classification={undefined}\n contentType={undefined}\n hasTableOfContents={false}\n limitTotalItems={false}\n isTertiaryCustomerWithoutExchange={props.isTertiaryCustomerWithoutExchange}\n seeMoreLink={undefined}\n onClickRemoveItem={props.removeFromVideoHistory}\n badgeComponent={null}\n />\n );\n })}\n\n {showEmptyState && (\n <DiscoverDashboardEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.widgetAppLinks.widgetWizard}\n />\n )}\n </>\n );\n}","import React from 'react';\n\nimport { LocationUtils } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Flight } from 'libs/common/flight';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoActionDescriptor, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DiscoverDashboard } from 'libs/shared/apps/discover/components/discover-dashboard/DiscoverDashboard';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { FeedbackRequests } from 'libs/shared/flight-requests/FeedbackRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CuratedWidgetQueryParams, CurrentUser, Customer, DashboardTargetType, Library, Presentation, PresentationAudience, User, WidgetPreference } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { DashboardViewQueryParams } from 'shared/interfaces/query-params/DashboardViewQueryParams';\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { VideoHistoryRequests } from 'apps/watch-history/flight-requests/VideoHistoryRequests';\n\nimport { getDiscoverHeaderAppLinks, getDiscoverWidgetAppLinks } from './DiscoverViewUtils';\n\nconst namespace = 'dashboard.dashboard';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getPhraseVariant(presentation: Presentation): string {\n const learningLevel = PresentationLearningLevel[presentation?.learningLevel];\n\n return +learningLevel === PresentationLearningLevel.Level_1\n ? 'VariantOne'\n : 'VariantTwo';\n}\n\ninterface CuratedDiscoverViewProps {\n presentationSlug?: string;\n queryParams?: DashboardViewQueryParams;\n}\n\nexport function CuratedDiscoverView(props: CuratedDiscoverViewProps): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const user = Flight.useBasicFetch<User>(currentUser.data?.isAuthenticated && UserRequests.user(currentUser.data.id));\n const { hasLocalPermissions, hasPermissions } = usePermissions();\n const alerts = useAlerts();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasLocalPermissions(LocalPermissionName.ManageDiscoverPreferences) &&\n currentUser.data?.isAuthenticated &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const libraries = Flight.useBasicFetch<Library[]>(\n currentUser.data?.isAuthenticated &&\n LibraryRequests.libraries()\n );\n\n const { availablePresentations } = usePresentation();\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n const {\n dashboard,\n presentation,\n audiences\n } = useFetchCuratedDashboard({\n targetType: DashboardTargetType.Discover,\n queryParams: props.queryParams,\n presentationSlug: props.presentationSlug\n });\n\n const fetchAsync = Flight.useGetFetchAsync();\n const settings = useSettings(null);\n\n const { commonVideoProps } = useCommonVideoProps({ locationContext: LocationContext.Dashboard });\n\n const [activeAudiences] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n const widgetAppLinks = getDiscoverWidgetAppLinks(AudienceHelper.getAudienceParams(activeAudiences), currentUser.data);\n\n const phraseVariant = getPhraseVariant(presentation);\n\n useSetPageMetadata(PageMetadataHelper.getDiscoverMetadata({\n content: presentation,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: `pageTitle${phraseVariant}`,\n descriptionPhrase: `pageDescription${phraseVariant}`\n },\n canonicalLink: SeoHelper.getCanonicalLink(),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n presentation?.learningLevel,\n widgetAppLinks.discover\n )\n }));\n\n async function onSubmitFeedback(feedback: DashboardFeedbackData): Promise<void> {\n const promise = await fetchAsync<void>(FeedbackRequests.submitFeedback({\n type: FeedbackType.Footer,\n user: FeedbackFormHelper.getUserInfo(currentUser.data, customer.data),\n tags: FeedbackFormHelper.getTags(\n currentUser.data,\n ProductId.Primary,\n hasPermissions(PermissionName.StudentExperience),\n [ 'discover', 'in product feedback' ]\n )\n }, {\n reaction: feedback.type,\n feedback: feedback.content,\n location: 'Discover Footer',\n presentationName: presentation.description,\n presentationId: presentation.id,\n dashboardName: dashboard.data.name,\n dashboardId: dashboard.data.id,\n currentPageUrl: LocationUtils.GetCurrentUrl()\n }));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.DiscoverFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n async function removeFromVideoHistory(\n videoId: string,\n videoName: string,\n widgetId: string,\n widgetTypeId: WidgetTypeId\n ): Promise<void> {\n if (widgetTypeId !== WidgetTypeId.ContinueWatching)\n return;\n\n try {\n await fetchAsync<void>(VideoHistoryRequests.removeFromHistory(videoId, [`widget:${widgetId}`]));\n\n alerts.success(LanguageService.getPhrase(namespace, 'removeFromHistorySuccess'));\n\n AnalyticsHelper.logUserAction({\n id: videoId,\n name: videoName,\n widgetId\n }, {\n entity: EntityType.Video,\n actionType: UserAction.Click,\n descriptor: VideoActionDescriptor.RemoveFromWatchHistory,\n location: LocationContext.SlidingListItem\n });\n } catch {\n alerts.error(LanguageService.getPhrase(namespace, 'removeFromHistoryError', { name: videoName }));\n }\n }\n\n async function updateWidgetPreferences(\n widgetId: string,\n widgetTypeId: WidgetTypeId,\n oldPreferences: WidgetPreference[],\n newPreferences: WidgetPreference[]\n ): Promise<void> {\n const addedSubjects = newPreferences.filter(p => {\n if (p.hidden)\n return false;\n\n const oldPreference = oldPreferences.find(o => o.id === p.id);\n\n return oldPreference.hidden;\n });\n const removedSubjects = newPreferences.filter(p => {\n if (!p.hidden)\n return false;\n \n const oldPreference = oldPreferences.find(o => o.id === p.id);\n\n return !oldPreference.hidden;\n });\n\n if (addedSubjects?.length)\n await fetchAsync<void>(PreferenceRequests.followSubjects(addedSubjects.map(s => s.id)));\n\n if (removedSubjects?.length)\n await fetchAsync<void>(PreferenceRequests.unfollowSubjects(removedSubjects.map(s => s.id)));\n\n return fetchAsync<void>(DashboardRequests.updateWidgetPreferences(\n widgetId,\n newPreferences.map(p => ({\n id: p.id,\n index: p.index\n })),\n currentUser.data\n ));\n }\n const { showCalendar } = useShowCalendar();\n\n return (\n <div className='bg-white px-4'>\n <DiscoverDashboard\n dashboard={dashboard.data}\n widgetAppLinks={widgetAppLinks}\n headerAppLinks={getDiscoverHeaderAppLinks()}\n presentation={presentation}\n getWidgetContentRequest={(\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate,\n presentation: Presentation\n ) => {\n const { hasTwig, hasTigtag } = LibraryHelper.hasTwigOrTigtag(libraries.data, currentUser.data);\n\n return DashboardRequests.dashboardWidgetContent(\n id,\n params,\n widgetTemplate,\n presentation,\n { hideTigTag: !hasTigtag, hideTwig: !hasTwig }\n );\n }}\n audiences={audiences.data}\n updatePreferences={updateWidgetPreferences}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n removeFromVideoHistory={removeFromVideoHistory}\n lazyLoad={!SeoHelper.isBot()}\n showCalendar={showCalendar}\n jobTitle={user.data?.userProfile?.metadata?.jobTitle}\n imageUrls={{\n onboardingTeacherBackground: ImageUrls.OnboardingV2.Widget.TEACHER_BACKGROUND\n }}\n settings={settings}\n availablePresentations={availablePresentations}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n commonVideoProps={commonVideoProps}\n />\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { DiscoverDashboardProps } from 'libs/shared/apps/discover/components/discover-dashboard/DiscoverDashboard';\nimport { DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, Company, CurrentUser, Playlist, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst OMITTED_PARAMS = [ 'preview', 'dashboardId', 'skipPrompt' ];\n\nexport function getDiscoverWidgetAppLinks(\n params: HashObject,\n currentUser: CurrentUser\n): DiscoverDashboardProps['widgetAppLinks'] {\n return {\n classification: (classification?: Classification) =>\n ClassificationAppLinkHelper.getAppLink(classification, params || {}),\n\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n includeContext: currentUser?.isAuthenticated\n })\n ),\n\n series: SeriesAppLinkHelper.getSeriesAppLink,\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n }),\n \n latestReleases: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n }),\n\n allTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS\n }),\n\n classificationLatestReleases: (classification: Classification) => {\n if (classification.id === CLASSIFICATION_LATEST_RELEASES)\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n };\n\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CLASSIFICATION_UPDATE,\n args: [ classification.id, TextHelper.slugify(classification.name) ]\n };\n },\n\n classificationDirectory: (_classification: Classification) => {\n const appLinkClassification = _classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n widgetVideoList: (widgetId: string, widgetName: string) => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.DASHBOARD,\n args: [ widgetId, TextHelper.slugify(widgetName) ]\n }),\n\n watchHistory: () => ({\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ company.id, TextHelper.slugify(company.name) ]\n }),\n\n discover: () => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }),\n\n calendar: () => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }),\n\n calendarMonth: (month: string, year?: string) => {\n const appLink: Core.AppLink = {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month.toLowerCase()]\n };\n\n if (year)\n appLink.params = { year };\n\n return appLink;\n },\n\n onboardingStep: (step: OnboardingScreenId) => {\n const appLinks = getOnboardingAppLinks();\n return appLinks[step];\n },\n\n onboardingAppLinks: () => {\n return getOnboardingAppLinks();\n },\n\n livestream: () => null,\n widgetWizard: () => null\n };\n}\n\nexport function getDiscoverHeaderAppLinks(): DiscoverHeaderAppLinks {\n return {\n forYou: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n },\n whatsNew: {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n },\n calendar: {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }\n };\n}","\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { VideoHistoryCollection } from 'libs/shared/interfaces';\n\nexport const VideoHistoryRequests = {\n userVideoHistory(\n cursor?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n let key = 'video:history';\n let url = `{gateway}/v1/users/me/watch-history`;\n\n if (cursor) {\n key += `:${cursor}`;\n url += `?cursor=${cursor}`;\n }\n\n return {\n key,\n url,\n formatData: (historyCollection: VideoHistoryCollection) => {\n return {\n data: historyCollection.data.map(historyData => {\n // Convert last watched times from UTC to local time\n const lastTimeWatchedLocal = DateHelper.format(historyData.lastTimeWatched);\n const lastDateWatchedLocal = DateHelper.format(lastTimeWatchedLocal, 'YYYY-MM-DD');\n\n return {\n ...historyData,\n lastTimeWatched: lastTimeWatchedLocal,\n lastDateWatched: lastDateWatchedLocal\n };\n }),\n pagination: historyCollection.pagination\n };\n },\n success,\n error,\n always\n };\n },\n\n videoHistory(\n ids: string[],\n namespace?: string,\n success?: (data: HashObject) => void,\n error?: (Xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n const params = ids.sort().map(i => `videoId=${i}`);\n\n return {\n key: `video:history:videos:${params.join('&')}`,\n url: `{gateway}/v1/videos/history?${params.join('&')}`,\n normalizeOptions: {\n namespace\n },\n formatData: (historyCollection: HashObject[]) => {\n if (!historyCollection?.length)\n return historyCollection;\n\n /**\n * Data is formatted to enable it to be merged with the existing video object in the store\n * Where we need to merge more history properties with the video object, map them below.\n */\n return historyCollection.map((watchHistory: HashObject) => ({\n id: watchHistory.videoId,\n lastProgressPoint: watchHistory.lastProgressPoint\n }));\n },\n success,\n error,\n always\n };\n },\n\n removeFromHistory(videoId: string, invalidationKeys: string[] = []): Flight.Request {\n return {\n url: `{gateway}/v1/users/me/videos/${videoId}/watch-history`,\n key: `remove:video:history:${videoId}`,\n type: HttpVerbs.DELETE,\n invalidationKeys: [\n 'video:history',\n ...invalidationKeys\n ]\n };\n }\n};","import React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: [],\n [ContentRegion.CA]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["namespace","DiscoverHeader","props","type","hasStudentExperience","className","Text","phrase","tabs","name","LanguageService","appLink","appLinks","forYou","active","analyticsData","url","analyticsOptions","actionType","entity","location","whatsNew","showCalendar","push","calendar","PillTabSelector","TabContents","tab","svgName","count","data","ref","containerRef","borderRadius","listClassName","map","index","key","onClick","onSelect","onSelectTab","defaultProps","FeedbackType","FeedbackRequests","submitFeedback","requestData","formValues","COUNTRY_CODE_TAGS","C","FeedbackFormHelper","getUserInfo","currentUser","customer","id","username","email","userType","role","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapCountryCodeToTag","countryCode","toLowerCase","getTags","product","extraTags","tags","countryCodeTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","getPhrase","DiscoverDashboardEmptyState","isArchived","dashboard","status","EmptyState","src","imageUrl","altText","Tooltip","title","spanHack","text","addWidgetApplink","icon","disabled","DiscoverDashboard","widgets","ArrayHelper","getWidgetContentRequest","widgetTypeId","template","params","presentation","showEmptyState","isReadonly","length","headerAppLinks","hasPermissions","PermissionName","widget","idx","WidgetContainerView","widgetCollection","getContentRequest","audiences","description","templateId","metadata","preferences","widgetAppLinks","isScrollToTargetWidget","scrollToWidgetId","widgetId","hasLocalPermissions","onSubmitFeedback","updatePreferences","lazyLoad","dashboardTarget","widgetIndex","jobTitle","isPreviewing","settings","hasTopicDirectories","hasOnboardingV2","hasCompletedOnboardingV2","availablePresentations","imageCdnUrl","commonVideoProps","classification","undefined","contentType","hasTableOfContents","limitTotalItems","isTertiaryCustomerWithoutExchange","seeMoreLink","onClickRemoveItem","removeFromVideoHistory","badgeComponent","emptyImageUrl","widgetWizard","CuratedDiscoverView","UserRequests","user","isAuthenticated","usePermissions","alerts","CustomerRequests","libraries","LibraryRequests","usePresentation","isTertiary","useIsTertiary","products","targetType","queryParams","presentationSlug","fetchAsync","useSettings","useCommonVideoProps","locationContext","activeAudiences","SharedViewModelKeys","storage","AudienceHelper","phraseVariant","PresentationLearningLevel","learningLevel","getPhraseVariant","useSetPageMetadata","PageMetadataHelper","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowIndexing","hrefLang","discover","useShowCalendar","widgetTemplate","LibraryHelper","hasTwig","hasTigtag","DashboardRequests","hideTigTag","hideTwig","oldPreferences","newPreferences","addedSubjects","filter","p","hidden","find","o","removedSubjects","PreferenceRequests","s","feedback","ProductId","reaction","presentationName","presentationId","dashboardName","dashboardId","currentPageUrl","promise","AnalyticsHelper","feedbackType","workflowPhase","videoId","videoName","WidgetTypeId","VideoHistoryRequests","success","descriptor","error","userProfile","onboardingTeacherBackground","ImageUrls","hasProduct","CLASSIFICATION_LATEST_RELEASES","OMITTED_PARAMS","getDiscoverWidgetAppLinks","videoType","video","opts","context","includeContext","series","playlist","application","action","args","latestReleases","allTopics","classificationLatestReleases","classificationDirectory","_classification","appLinkClassification","widgetVideoList","widgetName","watchHistory","company","calendarMonth","month","year","onboardingStep","step","onboardingAppLinks","livestream","getDiscoverHeaderAppLinks","userVideoHistory","cursor","always","formatData","historyCollection","historyData","lastTimeWatchedLocal","lastTimeWatched","lastDateWatchedLocal","lastDateWatched","pagination","videoHistory","ids","sort","i","join","normalizeOptions","lastProgressPoint","removeFromHistory","invalidationKeys","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","activePresentation","redirectOnError","allowedLearningLevels","learningLevelCantAccess","l","toString","noSetting","setShowCalendar","isLoading","setIsLoading"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6912-644b69d0eb-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/coming-soon-tag.scss","file:///app/packages/libs/shared/src/apps/calendar/components/coming-soon-tag/ComingSoonTag.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/special-event-list-item.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list-item/SpecialEventListItem.tsx","file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/discover/components/header/discover-header.scss","file:///app/packages/libs/shared/src/apps/discover/components/header/DiscoverHeader.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/calendar-cell.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-cell/CalendarCell.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/empty-state/SpecialEventEmptyState.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/special-event-list.scss","file:///app/packages/libs/shared/src/apps/calendar/components/special-event-list/SpecialEventList.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/calendar-body.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-body/CalendarBody.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/calendar-nav.scss","file:///app/packages/libs/shared/src/apps/calendar/components/calendar-nav/CalendarNav.tsx","file:///app/packages/libs/shared/src/apps/calendar/components/error-state/SpecialEventErrorState.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarWeeksTable.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarViewUtils.ts","file:///app/packages/projects/lite/src/apps/calendar/views/calendar-view/CalendarView.tsx","file:///app/packages/libs/shared/src/apps/calendar/hooks/useCalendarEventsData.ts","file:///app/packages/projects/lite/src/apps/dashboard/views/dashboard/DiscoverViewUtils.ts","file:///app/packages/projects/lite/src/shared/hooks/useShowCalendar.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"tag\":\"XRj8d\",\"tooltip\":\"X6mLk\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './coming-soon-tag.scss';\n\nconst namespace = 'specialEventCalendar.comingSoonTag';\n\ninterface ComingSoonProps {\n className?: string;\n onlyIcon?: boolean;\n}\n\nexport function ComingSoonTag(props: ComingSoonProps): JSX.Element {\n return (\n <Tooltip title={LanguageService.getPhrase(namespace, 'tooltip')} spanHackClassName={`d-block ${styles.tooltip}`} spanHack>\n <div className={`d-flex text-dark align-items-center ${styles.tag} ${props.className}`}>\n <SvgContainer svgName={cvSvgLibrary.Timer} />\n {!props.onlyIcon && LanguageService.getPhrase(namespace, 'comingSoon')}\n </div>\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"modalWidth\":\"SgHYb\",\"banner\":\"PLw1p\",\"pill\":\"UNBr0\",\"logo\":\"xv_tc\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { LinkifyHelper } from 'libs/common/react/utils/LinkifyHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { CalendarEvent, CalendarEventContent, Livestream, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './special-event-list-item.scss';\n\nconst namespace = 'shared.specialEventListItem';\n\nfunction isLiveStream(obj: CalendarEventContent): obj is Livestream {\n return 'audiences' in obj &&\n 'endDateTime' in obj &&\n 'startDateTime' in obj;\n}\n\ninterface SpecialEventListItemProps {\n getAppLink: (content: CalendarEventContent, name: string) => Core.AppLink;\n event: CalendarEvent<CalendarEventContent>;\n onClick?: () => void;\n inPopup?: boolean;\n presentationId: string;\n headingClassName?: string;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: () => string;\n getStartTime?: (content: CalendarEventContent) => string;\n isPastEvent?: (content: CalendarEventContent) => boolean;\n}\n\nexport function SpecialEventListItem(props: SpecialEventListItemProps): JSX.Element {\n const appLink = props.getAppLink(props.event.content, TextHelper.slugify(props.event.name));\n\n const backgroundColor = props.getBackgroundColor?.(props.event.content);\n const iconUrl = props.getIconUrl?.(props.event.content);\n const bannerUrl = props.getBannerUrl?.(props.event.content);\n const multiDayEvent = !!props.event.endDate;\n const isComingSoon = props.event.content.status === ClassificationStatus.ComingSoon;\n const startTime = props.getStartTime?.(props.event.content);\n const actionLabel = props.getActionLabel?.();\n const isPastEvent = props.isPastEvent?.(props.event.content);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: props.inPopup ? LocationContext.CalendarPopup : LocationContext.CalendarDay\n };\n const analyticsData = {\n topicId: props.event.content.id,\n eventId: props.event.specialEventId,\n presentationId: props.presentationId,\n date: DateHelper.format(new Date(props.event.startDate), 'YYYY-MM-DD'),\n status: props.event.content.status\n };\n\n return (\n <div>\n {startTime && (\n <h6>{startTime}</h6>\n )}\n\n <div onClick={() => {\n if (isComingSoon)\n AnalyticsHelper.logUserAction(analyticsData, analyticsOptions);\n }}>\n <AppLink\n appLink={!isComingSoon && appLink}\n className={`${!isComingSoon ? 'cursor-pointer' : ''} text-decoration-none mb-2`}\n onClick={props.onClick}\n analyticsOptions={analyticsOptions}\n analyticsData={analyticsData}\n >\n <div\n className={`banner rounded-3 position-relative position-relative ${styles.banner}`}\n style={{ backgroundColor, backgroundImage: `url('${bannerUrl}')` }}\n >\n {isPastEvent && (\n <div className='bg-white w-100 h-100 opacity-50 position-absolute top-0 left-0 z-0' />\n )}\n <div className={`d-flex justify-content-between align-items-center w-100 h-100 px-3`}>\n <div className='d-flex align-items-center z-1'>\n {iconUrl && (\n <div className={`${styles.logo} rounded-circle flex-shrink-0 overflow-hidden me-2`}>\n <BaseImage data={iconUrl} />\n </div>\n )}\n <div>\n {isComingSoon && <ComingSoonTag className={`pe-2 fw-semibold mb-1 rounded-pill justify-content-start ${styles.pill}`}/>}\n\n {isPastEvent &&\n <div className='d-inline-block rounded-pill bg-light-green mb-1'>\n <SvgContainer svgName={cvSvgLibrary.CalendarCheck} />\n <p className='d-inline ms-1 mb-0'><Text namespace={namespace} phrase='pastEvent' /></p>\n </div>}\n \n {multiDayEvent && (\n <p className='text-white text-shadow mb-1'>{SpecialEventHelper.getDisplayDate(props.event.startDate, props.event.endDate)}</p>\n )}\n <h2 className={`h4 text-white text-shadow ${props.event.description ? 'clamp-2' : 'clamp-1'}`} title={props.event.name}>{props.event.name}</h2>\n \n </div>\n </div>\n\n <div className='d-none d-sm-block flex-shrink-0 z-1'>\n {!isComingSoon && (\n <ActionButton className={`btn ${isPastEvent ? 'btn-outline-dark' : 'btn-dark'} fw-semibold`}>\n {actionLabel}\n </ActionButton>\n )}\n </div>\n </div>\n </div>\n </AppLink>\n <div className='pre-wrap text-break mb-3' dangerouslySetInnerHTML={{ __html: LinkifyHelper.linkifyText(props.event.description || props.event.content.description) }}/>\n {(isLiveStream(props.event.content) &&\n <div className='d-flex mb-3'>\n <div className='rounded-pill border border-dark px-2 bg-white d-inline-block me-2'>\n {AudienceHelper.getMergedPresentationAudienceString(\n props.event.content.audiences as PresentationAudience[]\n )?.name}\n </div>\n <div className='rounded-pill fw-semibold bg-dark text-white d-inline-block px-2'>\n {`${DateHelper.diffBetween(props.event.content.endDateTime, props.event.content.startDateTime, 'minutes')}m`}\n </div>\n </div>\n )}\n </div>\n </div>\n );\n}\n","import { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent, CalendarEventContentType } from 'libs/shared/interfaces';\n\nexport const CalendarRequests = {\n calendarEvents(\n from: string,\n to: string,\n presentationId: string\n ): Flight.PublicRequest {\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/discover/special-events/content', { from, to, presentationId }),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/content`, { from, to, presentationId }),\n key: `presentation:${presentationId}:events:from:${from}:to${to}`\n };\n },\n\n nextTopicSpecialEvent(\n classificationId: string,\n presentationId: string\n ): Flight.PublicRequest {\n const params = {\n presentationId,\n limit: 1,\n from: DateHelper.format(new Date(), 'YYYY-MM-DD'),\n objectType: CalendarEventContentType.Classification\n };\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/discover/special-events/object/${classificationId}/next-events`, params),\n publicUrl: UrlHelper.urlBuilder(`/api/discover/special-events/object/${classificationId}/next-events`, params),\n key: `presentation:${presentationId}:events:classification:${classificationId}`,\n formatData: (events: CalendarEvent[]) => ArrayHelper.first(events)\n };\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTab\":\"bMJM0\"};","import React from 'react';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { DashboardUserType } from 'libs/shared/interfaces';\n\nimport styles from './discover-header.scss';\n\nconst namespace = 'discover.header';\n\nexport interface DiscoverHeaderAppLinks {\n forYou: Core.AppLink;\n whatsNew: Core.AppLink;\n calendar: Core.AppLink;\n}\n\ninterface DiscoverHeaderProps {\n type: DashboardUserType;\n hasStudentExperience?: boolean;\n appLinks?: DiscoverHeaderAppLinks;\n showCalendar: boolean;\n active: keyof DiscoverHeaderAppLinks;\n}\n\nexport function DiscoverHeader(props: DiscoverHeaderProps): JSX.Element {\n if (!props.type)\n return <></>;\n\n if (props.type === DashboardUserType.Learner || props.hasStudentExperience) {\n return (\n <div className='py-3'>\n <h1 className='h2 mb-0'>\n <Text namespace={namespace} phrase='heading' />\n </h1>\n </div>\n );\n }\n\n const tabs = [{\n name: LanguageService.getPhrase(namespace, 'forYou'),\n appLink: props.appLinks?.forYou,\n active: props.active === 'forYou',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'forYou'),\n url: AppLinkHelper.getHref(props.appLinks?.forYou)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n appLink: props.appLinks?.whatsNew,\n active: props.active === 'whatsNew',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'whatsNew'),\n url: AppLinkHelper.getHref(props.appLinks?.whatsNew)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }];\n\n if (props.showCalendar) {\n tabs.push({\n name: LanguageService.getPhrase(namespace, 'calendar'),\n appLink: props.appLinks?.calendar,\n active: props.active === 'calendar',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'calendar'),\n url: AppLinkHelper.getHref(props.appLinks?.calendar)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n });\n }\n\n return (\n <div className='py-3 text-center mx-n3'>\n <PillTabSelector\n tabs={tabs}\n className={styles.pillTab}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"wrapper\":\"WRLhh\",\"weekend\":\"mF0ka\"};","import React from 'react';\n\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarDay } from 'libs/shared/apps/calendar/components/calendar-day/CalendarDay';\nimport { CalendarCellProps } from 'libs/shared/apps/calendar/interfaces/CalendarCellProps';\nimport { HoverToPortalContainer } from 'libs/shared/components/hover-to-portal-container/HoverToPortalContainer';\n\nimport styles from './calendar-cell.scss';\n\nfunction getIsWeekend(date: Date): boolean {\n return DateHelper.getWeekday(date) === 0 || DateHelper.getWeekday(date) === 6;\n}\n\nexport function CalendarCell(props: CalendarCellProps): JSX.Element {\n const { date, notCurrentMonth } = props;\n const [ sliderStep, setSliderStep ] = React.useState<number>(0);\n\n let wrapperClassname = `position-relative border ${props.theme.border} ${styles.wrapper}`;\n if (getIsWeekend(date)) wrapperClassname += ` ${styles.weekend}`;\n if (notCurrentMonth) wrapperClassname += `opacity-50`;\n\n const eventsOnDay = props.events?.filter(e => DateHelper.isSame(props.date, e.startDate)) || [];\n const updatedProps = { ...props, eventsOnDay, sliderStep, setSliderStep };\n\n return (\n <td className={wrapperClassname}>\n {eventsOnDay?.length > 0 ? (\n <HoverToPortalContainer<CalendarCellProps>\n hoverableComponent={CalendarDay}\n componentProps={updatedProps}\n hoverScale={1.35}\n />\n ) : <CalendarDay {...updatedProps} isHovering={false} />}\n </td>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventEmptyStateProps {\n appLink: Core.AppLink;\n imageUrl: string;\n heading?: string;\n}\n\nexport function SpecialEventEmptyState(props: SpecialEventEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('info')} />\n <EmptyState.Heading>{props.heading || <Text phrase='heading' />}</EmptyState.Heading>\n {props.appLink &&\n <EmptyState.Info>\n <>\n <Text namespace={namespace} phrase='info' />\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </>\n </EmptyState.Info>\n }\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"date\":\"k2lLG\",\"first\":\"E18Bv\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SpecialEventListItem } from 'libs/shared/apps/calendar/components/special-event-list-item/SpecialEventListItem';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport styles from './special-event-list.scss';\n\ninterface SpecialEventListProps {\n events: CalendarEvent[];\n presentationId: string;\n appLink: (content: CalendarEventContent, slug?: string) => Core.AppLink;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n isPastEvent?: (content: CalendarEventContent) => boolean;\n}\n\nexport function SpecialEventList(props: SpecialEventListProps): JSX.Element {\n const eventsInMonth: Record<string, CalendarEvent<CalendarEventContent>[]> = {};\n\n props.events.forEach(e => {\n const startDate = e.startDate;\n if (eventsInMonth[startDate]) {\n eventsInMonth[startDate].push(e);\n } else {\n eventsInMonth[startDate] = [e];\n }\n });\n\n const keys = Object.keys(eventsInMonth);\n keys.sort((a, b) => DateHelper.isBefore(a, b) ? -1 : 0);\n\n return (\n <div className='py-1'>\n {keys.map((k, idx) => {\n let prevTime = '';\n let currentTime = '';\n return (\n <div key={k}>\n <div className={`h4 mt-4 ${styles.date} ${idx === 0 ? styles.first : ''}`}>{SpecialEventHelper.getOrdinalDate(k)}</div>\n {eventsInMonth[k].map(e => {\n prevTime = currentTime;\n currentTime = props.getStartTime?.(e.content);\n\n return (\n <SpecialEventListItem\n key={e.content.id}\n getAppLink={(id, name) => {\n return props.appLink(id, TextHelper.slugify(name));\n }}\n event={e}\n presentationId={props.presentationId}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={() => props.getActionLabel(e.content)}\n getStartTime={props.getStartTime && prevTime !== currentTime\n ? props.getStartTime\n : null\n }\n isPastEvent={props.isPastEvent}\n />\n );\n })}\n </div>\n );\n })}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"header\":\"sTIcQ\",\"thead\":\"ekxZd\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { CalendarCell } from 'libs/shared/apps/calendar/components/calendar-cell/CalendarCell';\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { SpecialEventHelper } from 'libs/shared/apps/calendar/utils/SpecialEventHelper';\nimport { Timezone } from 'libs/shared/apps/streamable-learning/constants/Timezones';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { CalendarEvent, CalendarEventContent } from 'libs/shared/interfaces';\n\nimport { SpecialEventEmptyState } from '../empty-state/SpecialEventEmptyState';\nimport { SpecialEventList } from '../special-event-list/SpecialEventList';\n\nimport styles from './calendar-body.scss';\n\nCalendarBody.defaultProps = {\n theme: {\n border: 'border-light-blue',\n background: 'bg-light-blue'\n }\n};\n\ninterface CalendarBodyProps {\n weekDays: PatchedDate[][];\n weekDaysHeader: string[];\n events?: CalendarEvent[];\n monthQuery: MonthQuery;\n viewingMonth: Date;\n eventsLoaded: boolean;\n presentationId: string;\n appLinks: CalendarAppLinks;\n imageUrls: CalendarImageUrls;\n viewMode?: string;\n theme?: CalendarTheme;\n emptyStateHeading?: string;\n fadePastEvents?: boolean;\n timezone?: Timezone;\n getIconUrl?: (content: CalendarEventContent) => string;\n getBackgroundColor?: (content: CalendarEventContent) => string;\n getBannerUrl?: (content: CalendarEventContent) => string;\n getCoverUrl?: (content: CalendarEventContent) => string;\n getActionLabel?: (content?: CalendarEventContent) => string;\n getStartTime?: (content: CalendarEventContent) => string;\n getHardCodedEvent?: (content: CalendarEventContent) => HashObject;\n isPastEvent?: (content: CalendarEventContent) => boolean;\n}\n\nexport function CalendarBody(props: CalendarBodyProps): JSX.Element {\n const { appLinks, imageUrls } = props;\n\n const breakpoints = useBreakpoints();\n\n const eventsInMonth = SpecialEventHelper.getEventsInMonth(props.events || [], props.viewingMonth);\n\n const [ hasInitialized, setHasInitialized ] = React.useState(false);\n const [ hoveredEvent, setHoveredEvent ] = React.useState<CalendarEvent<CalendarEventContent>>(null);\n\n if (props.eventsLoaded && !eventsInMonth?.length) {\n return (\n <SpecialEventEmptyState\n imageUrl={imageUrls.emptyState}\n appLink={appLinks.emptyStateRedirect?.()}\n heading={props.emptyStateHeading}\n />\n );\n }\n\n if (props.viewMode === 'list' || breakpoints.xs || breakpoints.sm || breakpoints.md) {\n if (!props.eventsLoaded) {\n return (\n <div className='d-flex justify-content-center align-items-center mb-4'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n );\n }\n\n return (\n <SpecialEventList\n events={eventsInMonth}\n presentationId={props.presentationId}\n appLink={props.appLinks.event}\n getIconUrl={props.getIconUrl}\n getBannerUrl={props.getBannerUrl}\n getBackgroundColor={props.getBackgroundColor}\n getActionLabel={props.getActionLabel}\n getStartTime={props.getStartTime}\n isPastEvent={props.isPastEvent}\n />\n );\n }\n\n return (\n <table className='user-select-none w-100 mt-3 overflow-hidden rounded-top-lg'>\n <thead className={`border ${props.theme.border} ${styles.thead}`}>\n <tr className={`fw-semibold ${props.theme.background} ${styles.header}`}>\n {props.weekDaysHeader.map(w => <th key={w} className='px-2 h4' scope='col'>{w}</th>)}\n </tr>\n </thead>\n\n <tbody>\n {props.weekDays.map(w => (\n <tr key={w[0].toString()}>\n {w.map(d => {\n return (\n <CalendarCell\n key={d.toString()}\n date={d}\n notCurrentMonth={!!d.notCurrentMonth}\n events={props.events}\n monthQuery={props.monthQuery}\n hasInitialized={hasInitialized}\n setHasInitialized={setHasInitialized}\n presentationId={props.presentationId}\n hoveredEvent={hoveredEvent}\n theme={props.theme}\n setHoveredEvent={setHoveredEvent}\n getEventsListAppLink={() => props.appLinks.eventList(props.monthQuery, d, props.presentationId)}\n getTopicAppLink={(calendarEventContent, slug) =>\n props.appLinks.event(calendarEventContent, slug)}\n getIconUrl={props.getIconUrl}\n getBackgroundColor={props.getBackgroundColor}\n getCoverUrl={props.getCoverUrl}\n getHardCodedEvent={props.getHardCodedEvent}\n fadePastEvents={props.fadePastEvents}\n timezone={props.timezone}\n />\n );\n })}\n </tr>\n ))}\n </tbody>\n </table>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"chevron\":\"U_GAM\",\"left\":\"t_wDz\",\"right\":\"KgpGw\",\"viewModeContainer\":\"csNfk\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, CalendarDisplayModeDescriptor, EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarViewMode } from 'libs/shared/apps/calendar/interfaces/CalendarViewMode';\nimport { canNavToOtherMonths } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './calendar-nav.scss';\n\nconst namespace = 'specialEventCalendar.calendarNav';\n\ninterface CalendarNavProps extends React.PropsWithChildren {\n monthDate: Date;\n appLinks: CalendarAppLinks;\n viewMode?: CalendarViewMode;\n queryParams?: HashObject;\n setViewingMonthDate: (date?: Date) => void;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\ninterface ViewModeSwitcherProps {\n viewMode: CalendarViewMode;\n setViewMode?: (viewMode: CalendarViewMode) => void;\n}\n\nfunction ViewModeSwitcher(props: ViewModeSwitcherProps): JSX.Element {\n return (\n <div className={`${styles.viewModeContainer} d-none d-lg-block`}>\n <IconButton\n svgName={cvSvgLibrary.Calendar}\n className={`${props.viewMode === 'calendar' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-start rounded-end-0 border-end-0 px-3 h-100`}\n onClick={() => props.setViewMode('calendar')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.Calendar,\n location: LocationContext.CalendarNav\n }}\n />\n <IconButton\n svgName={cvSvgLibrary.TableOfContents}\n className={`${props.viewMode === 'list' ? 'bg-dark text-white' : ''} btn btn-outline-dark rounded-end rounded-start-0 border-start-0 px-3 h-100`}\n onClick={() => props.setViewMode('list')}\n analyticsData={{}}\n analyticsOptions={{\n entity: EntityType.AppLink,\n actionType: UserAction.Click,\n descriptor: CalendarDisplayModeDescriptor.List,\n location: LocationContext.CalendarNav\n }}\n />\n </div>\n );\n}\n\ninterface NavigateButtonProps {\n action: 'next' | 'previous';\n appLink?: Core.AppLink;\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n onClick: () => void;\n}\n\nfunction NavigateButton(props: NavigateButtonProps): JSX.Element {\n const arrowSvg = props.action === 'previous' ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n const className = props.action === 'previous' ? styles.left : styles.right;\n\n function onClick() {\n Core.AppLinkHelper.trigger(props.appLink);\n\n props.onClick();\n }\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n analyticsOptions={props.analyticsOptions}\n className={`${styles.chevron} ${className} border border-dark rounded-circle bg-white d-flex align-items-center justify-content-center`}\n onClick={onClick}\n >\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.svg}`}\n />\n </AppLink>\n );\n}\n\nconst CUR_DATE = new Date();\n\nexport function CalendarNav(props: CalendarNavProps): JSX.Element {\n const { appLinks } = props;\n\n const breakpoints = useBreakpoints();\n \n function getAppLink(monthDate?: Date): Core.AppLink {\n const month = DateHelper.format(monthDate, 'MMMM').toLocaleLowerCase();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n const params: HashObject = {};\n\n if (monthDate) {\n const currentYear = new Date().getFullYear();\n const year = monthDate.getFullYear();\n \n if (currentYear !== year)\n params.year = year;\n }\n\n if (props.queryParams?.classification)\n params.classification = props.queryParams.classification;\n\n if (props.queryParams?.yearGroup)\n params.yearGroup = props.queryParams.yearGroup;\n\n appLink.params = params;\n\n return appLink;\n }\n\n function onClickNext () {\n const nextMonth = DateHelper.add(props.monthDate, 1, 'month');\n props.setViewingMonthDate(nextMonth);\n }\n\n function onClickPrevious() {\n const prevMonth = DateHelper.subtract(props.monthDate, 1, 'month');\n props.setViewingMonthDate(prevMonth);\n }\n\n function onClickToday() {\n if (DateHelper.format(CUR_DATE, 'M YY') === DateHelper.format(props.monthDate, 'M YY')) return;\n \n props.setViewingMonthDate();\n }\n \n const { showPrev, showNext } = canNavToOtherMonths(props.monthDate);\n\n const analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.SpecialEvent,\n location: LocationContext.CalendarNav\n };\n\n function formatAnalyticDataDate(date: Date) {\n return DateHelper.format(date, 'YYYY-MM-DD');\n }\n return (\n <div className='d-flex flex-wrap gap-3 justify-content-end align-items-center'>\n <h1 className='mb-0 h2 me-auto'>{DateHelper.format(props.monthDate, breakpoints.xs ? 'MMM YYYY' : 'MMMM YYYY')}</h1>\n\n {props.children}\n\n {props.setViewMode && (\n <ViewModeSwitcher viewMode={props.viewMode} setViewMode={props.setViewMode} />\n )}\n <div className='d-flex gap-3'>\n {showPrev && (\n <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.subtract(props.monthDate, 1, 'month'), 'month'))}\n action='previous'\n onClick={onClickPrevious}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'previous', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n />\n )}\n <AppLink\n appLink={getAppLink()}className={`${styles.todayWrapper} btn btn-outline-dark fw-semibold`}\n onClick={onClickToday}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'today', date: formatAnalyticDataDate(DateHelper.startOf(CUR_DATE, 'month')) }}\n >\n {LanguageService.getPhrase(namespace, 'today')}\n </AppLink>\n {showNext && (\n <NavigateButton\n appLink={getAppLink(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month'))}\n analyticsOptions={analyticsOptions}\n analyticsData={{ action: 'next', date: formatAnalyticDataDate(DateHelper.startOf(DateHelper.add(props.monthDate, 1, 'month'), 'month')) }}\n action='next'\n onClick={onClickNext}\n />\n )}\n </div>\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 { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'specialEvent.eventsErrorState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SpecialEventErrorStateProps {\n imageUrl: string;\n appLink: Core.AppLink;\n}\n\nexport function SpecialEventErrorState(props: SpecialEventErrorStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='info' />\n <br/>\n <AppLink appLink={props.appLink}>\n <span className='text-info'>{getPhrase('link')}</span>\n </AppLink>\n </EmptyState.Info>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\n\nimport { buildWeeksTable, DatePositionMap, initWeekDays, PatchedDate, WeeksTable } from '../utils/CalendarHelper';\n\ntype Cache = Record<string, {\n datePositionMap: DatePositionMap,\n weeksTable: WeeksTable\n }>\n\nconst TODAY_DATE = new Date();\n\nexport function useCalendarWeeksTable(date: Date = TODAY_DATE, appLinks: CalendarAppLinks, startAtMon: boolean = true) {\n const weekDaysHeader = initWeekDays(startAtMon);\n\n const cacheRef = React.useRef<Cache>({});\n\n const [ weekDays, setWeekDays ] = React.useState<PatchedDate[][]>([]);\n const monthDateString = DateHelper.format(date, 'YYYY-MM');\n React.useEffect(() => {\n const cached = cacheRef.current[monthDateString];\n if (!cached) {\n const { weeksTable, datePositionMap } = buildWeeksTable(date, startAtMon);\n \n cacheRef.current[monthDateString] = { weeksTable, datePositionMap };\n\n setWeekDays(weeksTable);\n } else {\n setWeekDays(cached.weeksTable);\n }\n }, [DateHelper.format(date, 'YYYY-MM')]);\n\n function setViewingMonthDate(nextMonthDate?: Date) {\n if (!nextMonthDate) {\n Core.AppLinkHelper.trigger(appLinks.calendar());\n\n return;\n }\n\n if (monthDateString !== DateHelper.format(nextMonthDate, 'YYYY-MM')) {\n const month = DateHelper.format(nextMonthDate, 'MMMM').toLocaleLowerCase();\n\n const currentYear = new Date().getFullYear();\n const year = date.getFullYear();\n\n const appLink: Core.AppLink = appLinks.month(month);\n\n if (currentYear !== year)\n appLink.params = { year };\n\n Core.AppLinkHelper.trigger(appLink);\n }\n }\n\n const startDate = ArrayHelper.first(ArrayHelper.first(weekDays));\n const endDate = ArrayHelper.last(ArrayHelper.last(weekDays));\n\n return { weekDaysHeader, weekDays, monthDate: date, setMonthDate: setViewingMonthDate, startDate, endDate };\n}","import { CalendarAppLinks } from 'libs/shared/apps/calendar/interfaces/CalendarAppLinks';\nimport { CalendarImageUrls } from 'libs/shared/apps/calendar/interfaces/CalendarImageUrls';\nimport { MonthQuery } from 'libs/shared/apps/calendar/interfaces/MonthQuery';\nimport { PatchedDate } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { CountryCode } from 'libs/shared/enums/CountryCode';\nimport { Classification } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\n\nexport function getCalendarImageUrls(countryCode?: CountryCode): CalendarImageUrls {\n switch (countryCode?.toLocaleLowerCase()) {\n case CountryCode.AU:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_AU,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.US:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_US,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n case CountryCode.UK:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS_UK,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n\n default:\n return {\n emptyState: ImageUrls.EmptyStates.CALENDAR.NO_EVENTS,\n errorState: ImageUrls.EmptyStates.CALENDAR.INVALID_DATE\n };\n }\n}\n\nexport function getCalendarAppLinks(): CalendarAppLinks {\n return {\n calendar: () => ({ application: AppChannels.CALENDAR, action: Actions.Calendar.CALENDAR }),\n month: (month: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month]\n }),\n event: (classification: Classification, slug: string) => {\n return ClassificationAppLinkHelper.getAppLink({ ...classification, name: slug || classification.name });\n },\n eventList: (monthQuery: MonthQuery, date: PatchedDate, presentationId: string) => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.SPECIAL_EVENT_LIST,\n params: {\n ...monthQuery,\n date: date.toString(),\n presentationId: presentationId\n }\n }),\n emptyStateRedirect: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n })\n };\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarBody } from 'libs/shared/apps/calendar/components/calendar-body/CalendarBody';\nimport { CalendarNav } from 'libs/shared/apps/calendar/components/calendar-nav/CalendarNav';\nimport { SpecialEventErrorState } from 'libs/shared/apps/calendar/components/error-state/SpecialEventErrorState';\nimport { useCalendarEventsData } from 'libs/shared/apps/calendar/hooks/useCalendarEventsData';\nimport { useCalendarWeeksTable } from 'libs/shared/apps/calendar/hooks/useCalendarWeeksTable';\nimport { CalendarQueryParams } from 'libs/shared/apps/calendar/interfaces/CalendarQueryParams';\nimport { getIsValidMonth, parseMonthString } from 'libs/shared/apps/calendar/utils/CalendarHelper';\nimport { DiscoverHeader } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classification, CurrentUser, DashboardUserType } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useShowCalendar } from 'shared/hooks/useShowCalendar';\nimport { REGIONAL_CALENDAR_INDEXABILITY } from 'shared/utils/LiteRegionHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { getCalendarAppLinks, getCalendarImageUrls } from 'apps/calendar/views/calendar-view/CalendarViewUtils';\nimport { getDiscoverHeaderAppLinks } from 'apps/dashboard/views/dashboard/DiscoverViewUtils';\n\nconst namespace = 'specialEventCalendar.calendarView';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface CalendarViewProps {\n month?: string\n presentationSlug?: string;\n}\n\nexport function CalendarView(props: CalendarViewProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { activePresentation } = usePresentation({ redirectOnError: true });\n const { showCalendar, isLoading } = useShowCalendar();\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const isValidMonth = getIsValidMonth(props.month);\n\n React.useEffect(() => {\n if (!isLoading && !showCalendar)\n Core.AppLinkHelper.trigger(getDiscoverHeaderAppLinks().forYou, { replace: true });\n }, [ showCalendar, isLoading ]);\n\n const viewingMonth = parseMonthString(props.month);\n \n const {\n monthDate,\n setMonthDate,\n weekDays,\n weekDaysHeader,\n startDate, endDate\n } = useCalendarWeeksTable(viewingMonth, getCalendarAppLinks());\n\n const { events, loaded } = useCalendarEventsData(viewingMonth, activePresentation.id);\n\n const currentMonthYear = DateHelper.format(monthDate, 'MMMM YYYY');\n\n useSetPageMetadata(PageMetadataHelper.getDefaultMetadata({\n title: currentMonthYear,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink<keyof CalendarQueryParams>({ allowedParams: ['year']}),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getStaticRouteHrefLang(\n activePresentation?.learningLevel,\n getCalendarAppLinks().calendar,\n REGIONAL_CALENDAR_INDEXABILITY\n )\n }));\n\n if (props.month !== null && !isValidMonth) {\n return (\n <SpecialEventErrorState\n imageUrl={getCalendarImageUrls().errorState}\n appLink={getCalendarAppLinks().calendar()}\n />\n );\n }\n\n function getIconUrl(classification: Classification, hardCodedEvent?: HashObject): string {\n return hardCodedEvent\n // in calendar we use hardcoded icon for hardcoded event\n ? ImageHelper.createUrl((hardCodedEvent.iconUrl), { size: ImageSize.Medium })\n : ImageHelper.createUrl(classification.icon?.url, { size: ImageSize.Small });\n }\n\n function getCoverUrl(classification: Classification): string {\n return ImageHelper.createUrl(classification.cover?.url, { size: ImageSize.Small });\n }\n\n function getActionLabel(): string {\n return !breakpoints.xs ? getPhrase('buttonLabel') : getPhrase('mobileButtonLabel');\n }\n\n function getHardCodedEvent(classification: Classification): HashObject {\n return HardCoded.SpecialEvents[classification.id as keyof typeof HardCoded.SpecialEvents];\n }\n\n if (isLoading || !activePresentation?.id || !currentUser.data.countryCode)\n return <></>;\n\n return (\n <div className='bg-white px-3'>\n <DiscoverHeader\n type={DashboardUserType.Staff}\n appLinks={getDiscoverHeaderAppLinks()}\n showCalendar={showCalendar}\n active='calendar'\n />\n <CalendarNav monthDate={monthDate} setViewingMonthDate={setMonthDate} appLinks={getCalendarAppLinks()} />\n <CalendarBody\n weekDays={weekDays}\n weekDaysHeader={weekDaysHeader}\n events={events}\n monthQuery={{ from: startDate?.toString(), to: endDate?.toString() }}\n viewingMonth={viewingMonth}\n eventsLoaded={loaded}\n presentationId={activePresentation.id}\n appLinks={getCalendarAppLinks()}\n imageUrls={getCalendarImageUrls(currentUser.data.countryCode)}\n getIconUrl={(classification: Classification) => getIconUrl(classification, getHardCodedEvent(classification))}\n getCoverUrl={getCoverUrl}\n getBackgroundColor={(classification: Classification) => classification.metadata?.backgroundColor}\n getBannerUrl={(classification: Classification) => classification.banner?.url}\n getActionLabel={getActionLabel}\n getHardCodedEvent={getHardCodedEvent}\n />\n </div>\n );\n}","import { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { CalendarEvent } from 'libs/shared/interfaces';\n\nimport { CalendarRequests } from '../flight-request/CalendarRequests';\nimport { getCalendarRange } from '../utils/CalendarHelper';\n\nexport function useCalendarEventsData(viewMonth: Date, presentationId: string) {\n const pid = presentationId;\n const [ startDate, endDate ] = getCalendarRange(viewMonth);\n\n const nextMonth = DateHelper.add(viewMonth, 1, 'month');\n const [ nextStartDate, nextEndDate ] = getCalendarRange(nextMonth);\n\n const prevMonth = DateHelper.subtract(viewMonth, 1, 'month');\n const [ prevStartDate, prevEndDate ] = getCalendarRange(prevMonth);\n\n const events = Flight.useBasicFetch<CalendarEvent[]>((startDate && endDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(startDate, 'YYYY-MM-DD'), DateHelper.format(endDate, 'YYYY-MM-DD'), pid));\n const nextEvents = Flight.useBasicFetch<CalendarEvent[]>((nextStartDate && nextEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(nextStartDate, 'YYYY-MM-DD'), DateHelper.format(nextEndDate, 'YYYY-MM-DD'), pid));\n const prevEvents = Flight.useBasicFetch<CalendarEvent[]>((prevStartDate && prevEndDate && pid)\n && CalendarRequests.calendarEvents(DateHelper.format(prevStartDate, 'YYYY-MM-DD'), DateHelper.format(prevEndDate, 'YYYY-MM-DD'), pid));\n\n const uniqueEventList = ArrayHelper.uniq(\n [ ...prevEvents.data || [], ...events.data || [], ...nextEvents.data || [] ],\n e => e.specialEventPolicyId\n );\n\n return { events: uniqueEventList, loaded: events.hasCompleted };\n}","import { Core } from 'libs/common/backbone/index';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { DiscoverDashboardProps } from 'libs/shared/apps/discover/components/discover-dashboard/DiscoverDashboard';\nimport { DiscoverHeaderAppLinks } from 'libs/shared/apps/discover/components/header/DiscoverHeader';\nimport { OnboardingScreenId } from 'libs/shared/apps/onboarding/interfaces/OnboardingScreenId';\nimport { RelatedVideosContext } from 'libs/shared/enums/RelatedVideosContext';\nimport { Classification, Company, CurrentUser, Playlist, VideoTypes } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\nimport { getOnboardingAppLinks } from 'apps/onboarding/utils/OnboardingAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst CLASSIFICATION_LATEST_RELEASES = 'classification-latest-releases';\nconst OMITTED_PARAMS = [ 'preview', 'dashboardId', 'skipPrompt' ];\n\nexport function getDiscoverWidgetAppLinks(\n params: HashObject,\n currentUser: CurrentUser\n): DiscoverDashboardProps['widgetAppLinks'] {\n return {\n classification: (classification?: Classification) =>\n ClassificationAppLinkHelper.getAppLink(classification, params || {}),\n\n videoType: (video: VideoTypes, opts: GetVideoAppLinkOptions) => (\n VideoAppLinkHelper.getAppLink(video, {\n ...opts,\n context: RelatedVideosContext.Widget,\n includeContext: currentUser?.isAuthenticated\n })\n ),\n\n series: SeriesAppLinkHelper.getSeriesAppLink,\n\n playlist: (playlist: Playlist) => ({\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ playlist.id, TextHelper.slugify(playlist.name) ]\n }),\n \n latestReleases: () => ({\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n }),\n\n allTopics: () => ({\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS\n }),\n\n classificationLatestReleases: (classification: Classification) => {\n if (classification.id === CLASSIFICATION_LATEST_RELEASES)\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n };\n\n return {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CLASSIFICATION_UPDATE,\n args: [ classification.id, TextHelper.slugify(classification.name) ]\n };\n },\n\n classificationDirectory: (_classification: Classification) => {\n const appLinkClassification = _classification;\n\n return {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.CLASSIFICATION_TOPICS,\n args: [ appLinkClassification.id, TextHelper.slugify(appLinkClassification.name) ],\n params: ObjectHelper.omit(params, OMITTED_PARAMS)\n };\n },\n\n widgetVideoList: (widgetId: string, widgetName: string) => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.DASHBOARD,\n args: [ widgetId, TextHelper.slugify(widgetName) ]\n }),\n\n watchHistory: () => ({\n application: AppChannels.WATCH_HISTORY,\n action: Actions.WatchHistory.HOME\n }),\n\n company: (company: Company) => ({\n application: AppChannels.MOVIES_AND_TV,\n action: Actions.MoviesAndTv.COMPANY_DASHBOARD,\n args: [ company.id, TextHelper.slugify(company.name) ]\n }),\n\n discover: () => ({\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n }),\n\n calendar: () => ({\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }),\n\n calendarMonth: (month: string, year?: string) => {\n const appLink: Core.AppLink = {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR_MONTH,\n args: [month.toLowerCase()]\n };\n\n if (year)\n appLink.params = { year };\n\n return appLink;\n },\n\n onboardingStep: (step: OnboardingScreenId) => {\n const appLinks = getOnboardingAppLinks();\n return appLinks[step];\n },\n\n onboardingAppLinks: () => {\n return getOnboardingAppLinks();\n },\n\n livestream: () => null,\n widgetWizard: () => null\n };\n}\n\nexport function getDiscoverHeaderAppLinks(): DiscoverHeaderAppLinks {\n return {\n forYou: {\n application: AppChannels.DASHBOARD,\n action: Actions.Dashboard.HOME\n },\n whatsNew: {\n application: AppChannels.CONTENT_UPDATES,\n action: Actions.ContentUpdates.CONTENT_UPDATES\n },\n calendar: {\n application: AppChannels.CALENDAR,\n action: Actions.Calendar.CALENDAR\n }\n };\n}","import React from 'react';\n\nimport { EnvironmentVariables } from 'libs/common/backbone/services/EnvironmentVariables';\nimport { Flight } from 'libs/common/react/index';\n\nimport { ContentRegion } from 'libs/shared/enums/ContentRegion';\nimport { PresentationLearningLevel } from 'libs/shared/enums/PresentationLearningLevel';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nconst ALLOWED_LEARNING_LEVELS_BY_REGION: Record<ContentRegion, PresentationLearningLevel[]> = {\n [ContentRegion.AU]: [\n // AU Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.US]: [\n // US Elementary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.UK]: [\n // UK Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.SCOT]: [\n // Scotland Primary Calendar\n PresentationLearningLevel.Level_1\n ],\n [ContentRegion.NZ]: [],\n [ContentRegion.GLOBAL]: [],\n [ContentRegion.CA]: []\n};\n\nexport function useShowCalendar() {\n const { hasSpecialEventCalendar, isLoadingSettings } = useSettings(null);\n\n const {\n activePresentation\n } = usePresentation({ redirectOnError: true });\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const allowedLearningLevels = ALLOWED_LEARNING_LEVELS_BY_REGION[currentUser.data?.contentRegion];\n const learningLevel = TopicsHelper.getMappedPresentationLevel(activePresentation?.learningLevel);\n const learningLevelCantAccess = !allowedLearningLevels?.find(l => {\n return l.toString() === (learningLevel as PresentationLearningLevel)?.toString();\n });\n\n const noSetting = !isLoadingSettings && !hasSpecialEventCalendar;\n\n const [ showCalendar, setShowCalendar ] = React.useState<boolean>(!noSetting && !learningLevelCantAccess);\n\n const [ isLoading, setIsLoading ] = React.useState(isLoadingSettings || !activePresentation?.id);\n\n React.useEffect(() => {\n if (noSetting || learningLevelCantAccess) {\n setShowCalendar(false);\n } else if (!isLoading) {\n setShowCalendar(true);\n }\n setIsLoading(isLoadingSettings || !activePresentation?.id);\n }, [ hasSpecialEventCalendar, activePresentation?.id, isLoading ]);\n\n if (EnvironmentVariables.isDevelopment)\n return { showCalendar: true, isLoading: false };\n\n return { showCalendar, isLoading };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["namespace","ComingSoonTag","props","Tooltip","title","LanguageService","spanHackClassName","spanHack","className","SvgContainer","svgName","onlyIcon","SpecialEventListItem","obj","appLink","getAppLink","event","content","TextHelper","name","backgroundColor","getBackgroundColor","iconUrl","getIconUrl","bannerUrl","getBannerUrl","multiDayEvent","endDate","isComingSoon","status","ClassificationStatus","startTime","getStartTime","actionLabel","getActionLabel","isPastEvent","analyticsOptions","actionType","entity","location","inPopup","analyticsData","topicId","id","eventId","specialEventId","presentationId","date","DateHelper","Date","startDate","onClick","AnalyticsHelper","AppLink","style","backgroundImage","BaseImage","data","Text","phrase","SpecialEventHelper","description","ActionButton","dangerouslySetInnerHTML","__html","LinkifyHelper","AudienceHelper","audiences","endDateTime","startDateTime","CalendarRequests","calendarEvents","from","to","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","objectType","formatData","events","DiscoverHeader","type","hasStudentExperience","tabs","appLinks","forYou","active","whatsNew","showCalendar","push","calendar","PillTabSelector","TabContents","tab","count","ref","containerRef","borderRadius","listClassName","map","index","onSelect","onSelectTab","defaultProps","CalendarCell","notCurrentMonth","sliderStep","setSliderStep","wrapperClassname","theme","border","getIsWeekend","eventsOnDay","filter","e","updatedProps","length","HoverToPortalContainer","hoverableComponent","CalendarDay","componentProps","hoverScale","isHovering","getPhrase","SpecialEventEmptyState","value","EmptyState","src","imageUrl","altText","heading","SpecialEventList","eventsInMonth","forEach","keys","Object","sort","a","b","k","idx","prevTime","currentTime","CalendarBody","imageUrls","breakpoints","useBreakpoints","viewingMonth","hasInitialized","setHasInitialized","hoveredEvent","setHoveredEvent","eventsLoaded","emptyState","emptyStateRedirect","emptyStateHeading","viewMode","xs","sm","md","Spinner","as","animation","role","background","weekDaysHeader","w","scope","weekDays","toString","d","monthQuery","getEventsListAppLink","eventList","getTopicAppLink","calendarEventContent","slug","getCoverUrl","getHardCodedEvent","fadePastEvents","timezone","ViewModeSwitcher","IconButton","setViewMode","descriptor","Calendar","NavigateButton","arrowSvg","action","size","S","CUR_DATE","CalendarNav","monthDate","month","toLocaleLowerCase","currentYear","getFullYear","year","queryParams","classification","yearGroup","showPrev","showNext","formatAnalyticDataDate","children","prevMonth","setViewingMonthDate","nextMonth","SpecialEventErrorState","TODAY_DATE","getCalendarImageUrls","countryCode","CountryCode","C","ImageUrls","errorState","getCalendarAppLinks","application","args","ClassificationAppLinkHelper","CalendarView","activePresentation","usePresentation","redirectOnError","useShowCalendar","isLoading","currentUser","UserRequests","isValidMonth","replace","startAtMon","cacheRef","setWeekDays","monthDateString","cached","current","weeksTable","datePositionMap","ArrayHelper","setMonthDate","nextMonthDate","useCalendarWeeksTable","viewMonth","pid","nextStartDate","nextEndDate","prevStartDate","prevEndDate","nextEvents","prevEvents","specialEventPolicyId","loaded","hasCompleted","useCalendarEventsData","currentMonthYear","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","SeoHelper","allowedParams","allowIndexing","hrefLang","learningLevel","HardCoded","hardCodedEvent","ImageHelper","icon","cover","metadata","banner","CLASSIFICATION_LATEST_RELEASES","OMITTED_PARAMS","getDiscoverWidgetAppLinks","videoType","video","opts","context","includeContext","isAuthenticated","series","playlist","latestReleases","allTopics","classificationLatestReleases","classificationDirectory","_classification","appLinkClassification","widgetVideoList","widgetId","widgetName","watchHistory","company","discover","calendarMonth","toLowerCase","onboardingStep","step","onboardingAppLinks","livestream","widgetWizard","getDiscoverHeaderAppLinks","ALLOWED_LEARNING_LEVELS_BY_REGION","hasSpecialEventCalendar","isLoadingSettings","allowedLearningLevels","contentRegion","learningLevelCantAccess","find","l","noSetting","setShowCalendar","setIsLoading"],"sourceRoot":""}
|
|
File without changes
|
/package/dist/scripts/{bundle-dcea87749e.min.js.LICENSE.txt → bundle-8d1c2248c0.min.js.LICENSE.txt}
RENAMED
|
File without changes
|