@clickview/lite 0.80.0-rc.1 → 0.80.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/234-9dadd5c069-lite.chunk.js +3 -0
- package/dist/scripts/234-9dadd5c069-lite.chunk.js.map +1 -0
- package/dist/scripts/3811-54d881ffbc-lite.chunk.js +3 -0
- package/dist/scripts/3811-54d881ffbc-lite.chunk.js.map +1 -0
- package/dist/scripts/3840-47765fe979-lite.chunk.js +2 -0
- package/dist/scripts/3840-47765fe979-lite.chunk.js.map +1 -0
- package/dist/scripts/{4578-58e37a9ae8-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
- package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
- package/dist/scripts/5434-a2bee0a420-lite.chunk.js +2 -0
- package/dist/scripts/5434-a2bee0a420-lite.chunk.js.map +1 -0
- package/dist/scripts/6741-ae590891ba-lite.chunk.js +3 -0
- package/dist/scripts/6741-ae590891ba-lite.chunk.js.map +1 -0
- package/dist/scripts/6948-74a27f0b91-lite.chunk.js +3 -0
- package/dist/scripts/6948-74a27f0b91-lite.chunk.js.map +1 -0
- package/dist/scripts/9649-d090a78b2d-lite.chunk.js +2 -0
- package/dist/scripts/9649-d090a78b2d-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-116a634469.min.js → bundle-18e2186208.min.js} +3 -3
- package/dist/scripts/{bundle-116a634469.min.js.map → bundle-18e2186208.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/234-b6b8f1faef-lite.chunk.js +0 -3
- package/dist/scripts/234-b6b8f1faef-lite.chunk.js.map +0 -1
- package/dist/scripts/3811-282392e8bf-lite.chunk.js +0 -3
- package/dist/scripts/3811-282392e8bf-lite.chunk.js.map +0 -1
- package/dist/scripts/3840-60e66f7f7c-lite.chunk.js +0 -2
- package/dist/scripts/3840-60e66f7f7c-lite.chunk.js.map +0 -1
- package/dist/scripts/4578-58e37a9ae8-lite.chunk.js.map +0 -1
- package/dist/scripts/5434-4183e29781-lite.chunk.js +0 -2
- package/dist/scripts/5434-4183e29781-lite.chunk.js.map +0 -1
- package/dist/scripts/6741-02172ae5b8-lite.chunk.js +0 -3
- package/dist/scripts/6741-02172ae5b8-lite.chunk.js.map +0 -1
- package/dist/scripts/6948-91184efeb6-lite.chunk.js +0 -3
- package/dist/scripts/6948-91184efeb6-lite.chunk.js.map +0 -1
- package/dist/scripts/9649-0225d5a4c7-lite.chunk.js +0 -2
- package/dist/scripts/9649-0225d5a4c7-lite.chunk.js.map +0 -1
- /package/dist/scripts/{234-b6b8f1faef-lite.chunk.js.LICENSE.txt → 234-9dadd5c069-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{3811-282392e8bf-lite.chunk.js.LICENSE.txt → 3811-54d881ffbc-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6741-02172ae5b8-lite.chunk.js.LICENSE.txt → 6741-ae590891ba-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{6948-91184efeb6-lite.chunk.js.LICENSE.txt → 6948-74a27f0b91-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-116a634469.min.js.LICENSE.txt → bundle-18e2186208.min.js.LICENSE.txt} +0 -0
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
/*! For license information please see 6948-91184efeb6-lite.chunk.js.LICENSE.txt */
|
|
2
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6948],{7870:(e,t,n)=>{n.d(t,{N:()=>c});var a=n(97395),i=n(75896),r=n(110),o=n(56644),c={calendarEvents:function(e,t,n){return{url:a._.urlBuilder("{gateway}/v1/discover/special-events/content",{from:e,to:t,presentationId:n}),publicUrl:a._.urlBuilder("/api/discover/special-events/content",{from:e,to:t,presentationId:n}),key:"presentation:".concat(n,":events:from:").concat(e,":to").concat(t)}},nextTopicSpecialEvent:function(e,t){var n={presentationId:t,limit:1,from:r.O.format(new Date,"YYYY-MM-DD"),objectType:o.VH.Classification};return{url:a._.urlBuilder("{gateway}/v1/discover/special-events/object/".concat(e,"/next-events"),n),publicUrl:a._.urlBuilder("/api/discover/special-events/object/".concat(e,"/next-events"),n),key:"presentation:".concat(t,":events:classification:").concat(e),formatData:function(e){return i.m.first(e)}}}}},54135:(e,t,n)=>{n.d(t,{e:()=>s});var a=n(32735),i=n(23481),r=n(91967);const o={disabled:"pERi4",disabledHighlighted:"AxyWm",badge:"KmfP8"};var c=i.T.encloseNamespace("shared.audienceItem");function s(e){var t=e.audience,n=e.highlight,i=e.setAudience,s=e.isDisabled,l=e.extraClasses,u=function(e,t){return e?t?"".concat(o.disabledHighlighted," text-light"):"bg-gray-900 text-light":t?"".concat(o.disabled," text-secondary"):"bg-light"}(n,s),d=s?"cursor-default":"cursor-pointer",m="".concat(o.badge," lh-1 rounded-pill d-inline-block me-1 user-select-none ").concat(d," ").concat(u," ").concat(l);return a.createElement("button",{type:"button",className:m,onClick:function(){!s&&r.q.isFunction(i)&&i(t,!n)},role:"checkbox","aria-checked":n,"aria-label":"".concat(c("ariaFilter")," ").concat(t.name),disabled:s},t.name.split(" ").map(function(e){return e.charAt(0).toUpperCase()+e.substring(1)}).join(" "))}s.defaultProps={extraClasses:""}},65042:(e,t,n)=>{n.d(t,{a:()=>y});var a=n(32735),i=n(23481),r=n(75902),o=n(35223);function c(e){return c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},c(e)}function s(e,t,n){return(t=function(e){var t=function(e){if("object"!=c(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=c(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==c(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var l=s(s(s({},r.GL.Archived,{svgName:o.vn.Archive,svgColorClassName:"text-secondary",actionName:"Archive",statusName:"Archived"}),r.GL.Draft,{svgName:o.vn.Edit,svgColorClassName:"",actionName:"Draft",statusName:"Draft"}),r.GL.Published,{svgName:o.vn.VisibleOn,svgColorClassName:"text-success",actionName:"Publish",statusName:"Published"}),u=n(83914),d=n(56644);const m={badge:"ciO47",draftLight:"A6Yi7",draftDark:"fkXBX",published:"Ovzwy",archived:"r_dco"};function f(e){var t="rounded-pill d-flex align-items-center ps-2 py-1 fw-semibold ms-2 ".concat(m.badge);switch(e.status){case d.GL.Published:t+=" ".concat(m.published);break;case d.GL.Archived:t+=" ".concat(m.archived);break;case d.GL.Draft:t+=" ".concat(e.darkMode?m.draftDark:m.draftLight)}return e.wrapperClassName&&(t+=" ".concat(e.wrapperClassName)),t}function p(e){var t=l[e.status],n=t.statusName,i=t.svgName;return a.createElement("div",{className:f(e)},a.createElement(u.x,{svgName:i}),a.createElement("div",null,n))}var v=n(85219);const g={stickyWrapper:"zhw6K",badgeWrapper:"NOvn1",badge:"pxQSR"};var b=i.T.encloseNamespace("shared.classificationPreviewBanner");function y(e){return a.createElement("div",{className:"".concat(g.stickyWrapper," py-2 d-flex justify-content-space-between bg-dark text-white mx-2 rounded")},a.createElement("div",{className:"position-absolute d-flex ".concat(g.badgeWrapper)},a.createElement(p,{status:e.status,wrapperClassName:"".concat(g.badge),darkMode:!0})),a.createElement("div",{className:"flex-grow-1"},a.createElement("h1",{className:"text-center my-3 h5"},a.createElement(v.V,{emoji:"👀"}),b("topic"===e.type?"topicTitle":"companyTitle"))))}},67814:(e,t,n)=>{n.d(t,{p:()=>L,v:()=>N});var a=n(32735),i=n(110),r=n(50690),o=n(22406),c=n(78408),s=n(83657),l=n(23481),u=n(15611),d=n(83914),m=n(35223),f="shared.backButton";function p(e){var t=Object.assign({textShadow:!0},e),n=t.backToName,i=t.appLink,r=t.color,o=t.extraClasses,c=t.textShadow,s=n?l.T.getPhrase(f,"backTo",{backToName:n}):l.T.getPhrase(f,"back"),p="black"===r?"":"text-white",v=c?"text-shadow":"";return a.createElement(u.F,{appLink:i,className:"d-inline-flex align-items-center h5 mb-0 ".concat(o," ").concat(p," ").concat(v)},a.createElement(d.x,{svgName:m.vn.ChevronLeft,size:d.S.Medium}),a.createElement("span",{className:"ms-1"},s))}p.defaultProps={color:"black",extraClasses:""};var v=n(4527),g=n(83345),b=n(7733),y=n(10587),h=n(94232),w=n(54610),C=n(79967),T=n(9085),E=n(67453);const k={bannerContent:"sSCTB",actionsContainer:"Z5WI2",bannerContentWithLogo:"rgs7Q",container:"M51HJ",logoContainer:"vkeJk",logoContainerLeft:"M3U9B",logoHeading:"EtRwC",specialEventContainer:"rOxDc",headingLarge:"_8pnV",heading:"JXVBH"};var S="".concat(y.y[w.__.Banners].width,":").concat(y.y[w.__.Banners].height);function I(e){return e.length<160?"h1":k.headingLarge}var L=a.memo(function(e){var t,n,l,u,d=e.heading,m=e.banner,f=e.imageCdnUrl,y=e.actions,L=e.sortComponent,N=e.blockColourClass,x=e.specialEvent,O=a.useContext(h.n),P=(0,C.k)().xxl?1920:1200,A=a.useMemo(function(){if(!x||e.showComingSoon)return!1;var t=i.O.format(new Date,"YYYY-MM-DD");return x.endDate?x.startDate<=t&&x.endDate>=t:x.startDate===t},[x]),D=e.imageOptions||{width:P,ratio:S,resizeType:w.Nq.Cover},j=!!m&&!!f&&E.j.createBannerUrl(m,{fallbackBaseUrl:f,fallbackCategoryName:d,type:w.__.Banners},D),F={className:"banner banner-header ".concat(e.bannerClassName),style:j?{backgroundImage:"url('".concat(j,"')")}:{}};!m&&N&&(delete F.style,F.className+=" ".concat(N));var U=e.detailsComponent,B=(0,T.x)(e.heading,b.o);return r.b.renderInPortalIfExists(a.createElement("header",Object.assign({},F),a.createElement("div",{className:"container ".concat(k.container," position-relative inner-banner")},e.backButtonAppLink&&a.createElement("div",{className:"pt-3"},a.createElement(p,{appLink:e.backButtonAppLink,backToName:e.backButtonText,extraClasses:e.backButtonClasses,color:"white"})),a.createElement("div",{className:"".concat(e.alignLogoLeft?"position-absolute top-50 start-0 translate-middle-y w-100 ps-4":"".concat(k.bannerContent," px-2 ").concat((null===(t=e.logo)||void 0===t?void 0:t.url)?k.bannerContentWithLogo:""))},!!x&&a.createElement("div",{className:"position-relative ".concat(k.specialEventContainer)},a.createElement(c.s,{body:{type:x.endDate?"range":"day",text:x.endDate?"".concat(i.O.format(x.startDate,"DD"),"-").concat(i.O.format(x.endDate,"DD")):i.O.format(x.startDate,"DD")},month:function(e){return e.endDate?i.O.isSame(e.startDate,e.endDate,"month")?i.O.format(e.startDate,"MMMM"):"".concat(i.O.format(e.startDate,"MMM")," - ").concat(i.O.format(e.endDate,"MMM")):i.O.format(e.startDate,"MMMM")}(x),theme:e.calendarTheme})),a.createElement("div",null,A&&a.createElement("div",{className:"rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block"},a.createElement(g.x,{namespace:"shared.bannerHeader",phrase:"onToday"})),e.showComingSoon&&a.createElement(o.r,{className:"pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap"}),a.createElement("div",{className:"d-flex align-items-center"},e.alignLogoLeft&&(null===(n=e.logo)||void 0===n?void 0:n.url)&&a.createElement("div",{className:"".concat(k.logoContainerLeft," d-none d-md-block rounded-circle overflow-hidden me-3 ").concat(B)},a.createElement(v.w,{src:E.j.createUrl(null===(l=e.logo)||void 0===l?void 0:l.url,{size:w.h2.Medium}),style:{backgroundColor:e.logoBgColour}})),a.createElement("h1",{className:"text-white text-shadow pe-3 position-static ".concat(k.heading," ").concat(I(d)," ").concat(e.alignLogoLeft?"w-50":"")},d,U&&a.createElement(U,null)))),!!y&&a.createElement("div",{className:k.actionsContainer},a.createElement(s.e,{actions:y,sortComponent:L,actionsDropdownClassName:e.actionsDropdownClassName}))),!e.alignLogoLeft&&!!(null===(u=e.logo)||void 0===u?void 0:u.url)&&a.createElement("div",{className:k.logoContainer},a.createElement("img",{src:E.j.createUrl(e.logo.url,{size:w.h2.Medium}),className:"rounded-circle"})))),null==O?void 0:O.container)},function(e,t){var n,a;return e.actions===t.actions&&e.heading===t.heading&&(null===(n=e.logo)||void 0===n?void 0:n.url)===(null===(a=t.logo)||void 0===a?void 0:a.url)});function N(){var e=a.useContext(h.n);return r.b.renderInPortalIfExists(a.createElement("div",{className:"partial-banner partial-loading-background ".concat(k.banner)}),null==e?void 0:e.container)}},38502:(e,t,n)=>{n.d(t,{r:()=>d});var a=n(32735),i=n(49985),r=n(15611),o=n(18559),c=n(11607),s=n(83914),l=n(22771);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(o.C,{type:o.g.Count,data:e.tab.count})))}function d(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:"",ref:e.containerRef},a.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 a.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?a.createElement(r.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 ")},a.createElement(u,{tab:e})):a.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&&i.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))})))}d.defaultProps={borderRadius:"lg"}},17101:(e,t,n)=>{var a;n.d(t,{n:()=>a}),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"}(a||(a={}))},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),i=n(81886),r=n(67058),o=n(14553),c=n(49267),s=n(49075),l={notFound:r.d,forbidden:{rating:o.q,yearLevel:o.q,region:c.a,privacy:o.q},badRequest:s._,internalServerError:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var r;r="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},l),t);r&&i.Q.Ry.isStatusCodeError(r)&&(r!==a.o.InternalServer?r!==a.o.NotFound?r!==a.o.Forbidden?n.badRequest||i.Q.Ry.throw(new o.badRequest):n.forbidden||i.Q.Ry.throw(new o.forbidden.privacy):n.notFound||i.Q.Ry.throw(new o.notFound):n.internalServerError||i.Q.Ry.throw(new s._))}}},7198:(e,t,n)=>{n.d(t,{f:()=>i});var a=n(99940),i={submitFeedback:function(e,t){return{url:"{gateway}/v1/feedback",key:"submit:feedback",type:a.k.POST,data:Object.assign(Object.assign({},e),t)}}}},91286:(e,t,n)=>{n.d(t,{v:()=>o});var a=n(32735),i=n(94644);function r(e){return e.map(function(e){return e.statusCode}).join(":")}function o(e,t,n){var o=Array.isArray(e)?e:[e];(0,a.useEffect)(function(){o.forEach(function(e){(0,i.r)(e.statusCode,t,n)})},[r(o),t,n])}},63719:(e,t,n)=>{n.d(t,{h:()=>c});var a=n(32735),i=n(77316);function r(e,t){if(e){if("string"==typeof e)return o(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)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function c(e){var t,n,c=(t=a.useMemo(function(){return i.p.getBuilder()},[]),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,c=[],s=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||r(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),s=c[0],l=(0,c[1])(s);return l&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||r(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(l),[Object.assign(Object.assign({},e),{active:!0})]):l}},52167:(e,t,n)=>{n.d(t,{m:()=>m});var a=n(53301),i=n.n(a),r=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,a=Array(t);n<t;n++)a[n]=e[n];return a}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"),m={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]},getTags:function(e,t,n,a){var i,r=[t].concat(function(e){if(Array.isArray(e))return l(e)}(i=a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(i)||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}}(i)||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.")}());r.push(n?"student":"staff"),e.role===c.i.Admin&&r.push("administrator");var o=m.mapCountryCodeToTag(e.countryCode);return o&&r.push(o),r},categorizeFiles:function(e){return e.reduce(function(e,t){var n=t.get("fileInfo");return i().isValidFile(t.get("file"),r.l.VIDEO)?e.videoUrls.push(null==n?void 0:n.url):e.imageUrls.push(null==n?void 0:n.url),e},{imageUrls:[],videoUrls:[]})}}},26948:(e,t,n)=>{n.r(t),n.d(t,{CuratedClassificationView:()=>Rt});var a=n(32735),i=n(6044),r=n(23481),o=n(20354),c=n(49985),s=n(65858),l=n(7870),u=n(31549),d=n(83345),m=n(87114),f="subject.classificationHeaderDetails",p=function(e){var t=e.className;return a.createElement("span",{className:t},"•")};function v(e){var t=m.i.getCounts(e.classification),n=t.dashboardVideoCount,i=t.childDashboardVideoCount,r=t.dashboardResourceCount,o=t.childDashboardResourceCount,c=t.childClassificationCount,s=n+i,l=r+o;return a.createElement("p",{className:"mb-n1 font-size-normal fw-normal mt-1"},!!c&&a.createElement(d.x,{namespace:f,phrase:"topics",options:{count:c.toLocaleString(),smartCount:c}}),!!s&&a.createElement(a.Fragment,null,c>0&&a.createElement(p,{className:"mx-2"}),a.createElement(d.x,{namespace:f,phrase:"videos",options:{count:s.toLocaleString(),smartCount:s}})),!!l&&a.createElement(a.Fragment,null,a.createElement(p,{className:"mx-2"}),a.createElement(d.x,{namespace:f,phrase:"resources",options:{count:l.toLocaleString(),smartCount:l}})))}var g=n(97958),b=n(36532),y=n(56644),h=n(35223),w="subjects.curatedClassificationEmptyState",C=r.T.encloseNamespace(w);function T(e){var t,n,i=(null===(t=e.dashboard)||void 0===t?void 0:t.status)===y.GL.Archived;return a.createElement(d.D.Provider,{value:w},a.createElement(g.u,null,a.createElement(g.u.Image,{src:e.imageUrl,altText:C("headingForNP")}),e.isReadonly?a.createElement(a.Fragment,null,a.createElement(g.u.Heading,null,a.createElement(d.x,{namespace:w,phrase:"headingForCurator"})),a.createElement(g.u.Info,null,a.createElement(d.x,{namespace:w,phrase:"info"})),a.createElement(b.u,{title:i?r.T.getPhrase(w,"archivedCtaTooltip"):"",spanHack:!0},a.createElement(g.u.Cta,{text:r.T.getPhrase(w,"add"),appLink:null===(n=e.addWidgetApplink)||void 0===n?void 0:n.call(e),className:"btn btn-dark",icon:h.vn.Plus,disabled:i}))):a.createElement(g.u.Heading,null,a.createElement(d.x,{phrase:"headingForNP"}))))}var E=n(91693),k=n(43278),S=n(75795);const I={container:"k1iOO",mobile:"QwoBj"};function L(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function N(e){var t,n,i=(t=a.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,c=[],s=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||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}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),r=i[0],o=i[1];return a.createElement("div",{className:"".concat(I.mobile," d-inline-flex gap-1")},r&&a.createElement("div",{className:"bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3"},a.createElement("h2",{className:"h5"},e.title),a.createElement(k.w,{items:e.widgets.map(function(e){return{name:e.name,id:e.id,tocIndentation:e.metadata.tocIndentation}}),activeId:e.activeId,appLink:e.appLink,analyticsData:e.analyticsData,setControlledId:e.setControlledId,getAppLink:e.getAppLink,onItemClick:function(){return o(!1)}})),a.createElement("div",{className:I.container},a.createElement(E.h,{className:"btn btn-outline-dark",svgName:h.vn.TableOfContents,onClick:function(){var t;o(!r),t={actionType:r?s.Vw.Hide:s.Vw.Open,entity:s.py.TableOfContents,location:s.LZ.Dashboard},c.k.logUserAction(e.analyticsData,t)}})))}function x(e){return a.createElement("aside",{className:"col-3 order-1"},a.createElement("div",{className:"".concat(I.container," ps-3")},a.createElement("h2",{className:"h5"},e.title),a.createElement(k.w,{items:e.widgets.map(function(e){return{name:e.name,id:e.id,tocIndentation:e.metadata.tocIndentation}}),activeId:e.activeId,appLink:e.appLink,analyticsData:e.analyticsData,setControlledId:e.setControlledId,getAppLink:e.getAppLink})))}function O(e){function t(e){var t=S.O.getCurrentRoute().appLink,n=t.params?Object.assign({},t.params):{};return n.tocId=e.id,Object.assign(Object.assign({},t),{params:n})}return a.createElement(a.Fragment,null,e.isSmallScreen?a.createElement(N,Object.assign({},e,{getAppLink:t})):a.createElement(x,Object.assign({},e,{getAppLink:t})))}var P="subjects.teacherOnlyEmptyState",A=r.T.encloseNamespace(P);function D(e){var t;return a.createElement(d.D.Provider,{value:P},a.createElement(g.u,null,a.createElement(g.u.Image,{src:e.imageUrl,altText:A("heading")}),a.createElement(g.u.Heading,null,a.createElement(d.x,{phrase:"heading"})),a.createElement(g.u.Info,null,a.createElement(d.x,{phrase:"info"})),a.createElement(g.u.Cta,{text:A("cta"),appLink:null===(t=e.ctaAppLink)||void 0===t?void 0:t.call(e),className:"btn btn-dark"})))}var j=n(75896),F=n(78479),U=n(42308),B=n(80889),R=n(21366),M=n(67814),V=n(3534),_=n(22021),W=n(62333),G=n(86764),H=n(16714),q=n(3747),z=n(65332),Z=n(9907),Q=n(42735),$=n(15611),Y="subjects.classificationComingSoon",J=r.T.encloseNamespace(Y);function K(e){var t,n,i=!!(null===(n=null===(t=e.data.followers)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length);return a.createElement(d.D.Provider,{value:Y},a.createElement(g.u,{className:"pt-0"},a.createElement(g.u.Image,{src:e.imageUrl,altText:J("comingSoon")}),a.createElement(g.u.Heading,null,a.createElement(d.x,{phrase:"comingSoon"})),a.createElement(g.u.Info,null,a.createElement(d.x,{phrase:e.showSignUp?"infoAnon":"info"})),e.canFollowSubjects&&a.createElement(Q.K,{svgName:i?h.vn.BellFilled:h.vn.Bell,onClick:function(){var t;null===(t=e.onToggleFollow)||void 0===t||t.call(e)},showSpinner:e.showFollowButtonSpinner,className:"btn follow-btn me-2 ".concat(i?"btn-outline-dark":"btn-dark")},a.createElement(d.x,{phrase:i?"following":"follow"})),e.showSignUp&&!e.canFollowSubjects&&a.createElement($.F,{appLink:e.signUpAppLink,className:"btn btn-dark d-none d-lg-inline-block",analyticsOptions:{actionType:s.Vw.Click,location:s.LZ.ClassificationComingSoon,entity:s.py.AppLink,workflowPhase:s.eu.Start,descriptor:s.Yu.SignUp},analyticsData:{},tag:"button"},J("signUp"))))}var X=n(49935),ee=n(79967),te=n(69454),ne=n(57900),ae=n(81886),ie=n(2948),re=n(1048),oe=n(54135),ce=n(11607),se=n(38143),le=n(5859);function ue(e,t){if(e){if("string"==typeof e)return de(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)?de(e,t):void 0}}function de(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var me="subjects.audienceFilter";function fe(e){var t,n,i=e.audiences,r=e.activeAudiences,o=e.appLink,c=e.disabled||!o,s=(t=(0,ie.D)(se.g.AUDIENCE_FILTER,void 0,{storage:ne.Z1.SessionStorage}),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,c=[],s=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(t,n)||ue(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[1];function l(e,t){var n;if(!c){var a,i=t?[].concat(function(e){return function(e){if(Array.isArray(e))return de(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||ue(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(null!==(n=null==r?void 0:r.map(function(e){return e.name}))&&void 0!==n?n:[]),[e.name]):r.map(function(e){return e.name}).filter(function(t){return t!==e.name});ae.Q.C$.trigger(Object.assign(Object.assign({},o),{params:(a=re.t.omit(o.params,["a"]),i.length?Object.assign({},a,{a:i}):a)}),{replace:!0})}}return a.useEffect(function(){e.disablePersist||s(r)},[r]),i&&i.length?a.createElement(b.u,{title:e.tooltip,spanHack:!0},a.createElement("div",{className:"d-flex flex-wrap row-gap-2"},i.map(function(e){return a.createElement(oe.e,{key:e.masterId,audience:e,highlight:!c&&!!(null==r?void 0:r.find(function(t){return t.masterId===e.masterId})),setAudience:l,isDisabled:c})}),!c&&!!r&&!!Object.keys(r).length&&a.createElement(ce.L,{className:"info-link d-inline-block ms-1",onClick:function(){if(!c){var e=re.t.omit(o.params,["a"]);ae.Q.C$.trigger(Object.assign(Object.assign({},o),{params:e}),{replace:!0})}}},a.createElement(d.x,{namespace:me,phrase:"clear"})))):a.createElement(a.Fragment,null)}var pe=le.u.getPartialLoadingItems({numItems:6}),ve=function(){return a.createElement("div",{className:"d-flex flex-wrap row-gap-2"},pe.map(function(e,t){var n=e.width;return a.createElement("span",{key:t,className:"rounded-pill partial-loading-background me-1",dangerouslySetInnerHTML:{__html:" "},style:{width:n}})}))};function ge(e){return a.createElement(fe,{audiences:e.audiences,activeAudiences:e.activeAudiences,disabled:e.disabled,appLink:e.appLink,disablePersist:e.disablePersist,tooltip:e.tooltip})}var be=n(38502),ye=n(10253),he=n(30064);const we={curatedTopicTab:"CmVlO",tabTransition:"rX31t"};var Ce="shared.classificationDashboard";function Te(e,t,n,a){var i,o,c,l,u,d,f,p,v,g,b,y,w,C,T,E,k,S=t.lg||t.xl||t.xxl||t.xs;return m.i.isTopLevelTopic(e.classification)?[{name:S?r.T.getPhrase(Ce,"newReleases"):"",appLink:null===(o=null===(i=e.appLinks)||void 0===i?void 0:i.classification)||void 0===o?void 0:o.call(i,e.classification),active:"new-releases"===n,svgName:h.vn.Sparkle,analyticsData:{id:"new-releases",classificationId:e.classification.id,classificationName:e.classification.name,presentationId:e.presentation.id,presentationDescription:e.presentation.description,name:r.T.getPhrase(Ce,"newReleases"),url:ae.Q.C$.getHref(null===(l=null===(c=e.appLinks)||void 0===c?void 0:c.classification)||void 0===l?void 0:l.call(c,e.classification))},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs},className:"".concat(t.xs?"w-100":""," ").concat(a?we.tabTransition:"")},{name:S?r.T.getPhrase(Ce,"allTopics"):"",appLink:null===(d=null===(u=e.appLinks)||void 0===u?void 0:u.classificationDirectory)||void 0===d?void 0:d.call(u,e.classification),active:"all-topics"===n,svgName:h.vn.Grid,analyticsData:{id:"all-topics",classificationId:e.classification.id,classificationName:e.classification.name,presentationId:e.presentation.id,presentationDescription:e.presentation.description,name:r.T.getPhrase(Ce,"allTopics"),url:ae.Q.C$.getHref(null===(p=null===(f=e.appLinks)||void 0===f?void 0:f.classificationDirectory)||void 0===p?void 0:p.call(f,e.classification))},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs},className:"".concat(t.xs?"w-100":""," ").concat(a?we.tabTransition:"")}]:[{name:S?r.T.getPhrase(Ce,"topic"):"",appLink:null===(g=null===(v=e.appLinks)||void 0===v?void 0:v.classification)||void 0===g?void 0:g.call(v,e.classification),active:"curated-topic"===n,svgName:h.vn.Rectangles,analyticsData:{id:"curated-topic",classificationId:e.classification.id,classificationName:e.classification.name,presentationId:e.presentation.id,presentationDescription:e.presentation.description,name:r.T.getPhrase(Ce,"topic"),url:ae.Q.C$.getHref(null===(y=null===(b=e.appLinks)||void 0===b?void 0:b.classification)||void 0===y?void 0:y.call(b,e.classification))},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs},className:(k=a?we.tabTransition:"",t.xs?k+" w-100":S?" ".concat(we.curatedTopicTab):k)},{name:S?r.T.getPhrase(Ce,"curriculum"):"",appLink:null===(C=null===(w=e.appLinks)||void 0===w?void 0:w.classificationCurriculum)||void 0===C?void 0:C.call(w,e.classification),active:"curriculum"===n,svgName:h.vn.GraduationCap,analyticsData:{id:"curriculum",classificationId:e.classification.id,classificationName:e.classification.name,presentationId:e.presentation.id,presentationDescription:e.presentation.description,name:r.T.getPhrase(Ce,"curriculum"),url:ae.Q.C$.getHref(null===(E=null===(T=e.appLinks)||void 0===T?void 0:T.classificationCurriculum)||void 0===E?void 0:E.call(T,e.classification))},analyticsOptions:{actionType:s.Vw.Click,entity:s.py.Url,location:s.LZ.MagicTabs},className:"".concat(t.xs?"w-100":""," ").concat(a?we.tabTransition:"")}]}function Ee(e){var t=(0,ee.k)(),n=(0,he.d)(e.activeTab),i=n.tab,r=n.isHighlighting,o=(0,ye.c)("topics-directory-tab").setProductTipRef;return a.createElement(be.r,{borderRadius:"sm",containerRef:function(e){return o(e)},className:t.xs?"w-100":"",listClassName:"d-flex flex-nowrap",tabs:Te(e,t,i,r)})}function ke(e){var t,n,i,r,o,c,s,l,u=(0,ee.k)(),d=(r=e.audiences,o=e.activeAudiences,c=e.activeTab,s=e.isEmpty,!!e.isComingSoon||!(!s||(null==o?void 0:o.length))||!te.T.shouldShowAudiences(r)||"curriculum"===c);function f(){var t;return!(!e.classification||!e.dashboard)&&!R.S.isSystemGeneratedDashboard(e.dashboard.widgets)&&(m.i.isTopLevelTopic(e.classification)?e.hasTopicDirectoryDashboard:!(!(null===(t=e.classification.externalMetadata)||void 0===t?void 0:t.isCurated)||!e.hasTopicCurriculumDashboard))}return a.createElement("div",{className:(l="d-flex flex-column py-3 mb-3",e.isComingSoon||(l+=" border-bottom"),!f()&&!d||u.xs?l+" row-gap-3":l)},a.createElement("div",{className:function(){if(d)return u.xs?"d-flex flex-column justify-content-between row-gap-3":"d-flex align-items-center justify-content-between";var e="";return e+="d-flex align-items-center justify-content-between mb-1",u.xs&&(e+=" row-gap-3 mb-0"),e}()},a.createElement(X.Oo,{breadcrumbs:null===(t=e.getBreadcrumbs)||void 0===t?void 0:t.call(e)}),f()&&d&&a.createElement(Ee,{classification:e.classification,activeTab:e.activeTab,appLinks:e.appLinks,presentation:e.presentation})),a.createElement("div",{className:function(){var e="d-flex align-items-end justify-content-between";return u.xs&&(e+=" row-gap-3 flex-wrap"),e}()},!d&&a.createElement(ge,{audiences:e.audiences,activeAudiences:e.activeAudiences,appLink:null===(i=(n=e.appLinks).audience)||void 0===i?void 0:i.call(n),disabled:e.disableAudiences,tooltip:e.audienceTooltip,disablePersist:!e.isViewingCurrentPresentation}),f()&&!d&&a.createElement(Ee,{classification:e.classification,activeTab:e.activeTab,appLinks:e.appLinks,presentation:e.presentation})))}function Se(e){return Se="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},Se(e)}function Ie(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 a,i,r,o,c=[],s=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return Le(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)?Le(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 Le(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Ne="shared.classificationDashboard";function xe(e){return e.widgetId===U.z.Blurb&&e.templateId===F.f.Heading}function Oe(e){return e.widgetId===U.z.CuratedClassifications||e.widgetId===U.z.Classifications}function Pe(e){var t,n,i,c,l=function(e,t){var n,i,r,c,s=a.useMemo(function(){return e?{isSystemGeneratedDashboard:R.S.isSystemGeneratedDashboard(e.widgets),systemGeneratedVideoWidget:e.widgets.find(function(e){return e.widgetId===U.z.ClassificationPinnedVideos&&e.templateId!==F.f.ThumbnailVerticalList})}:{isSystemGeneratedDashboard:!1,systemGeneratedVideoWidget:null}},[null==e?void 0:e.id]),l=s.isSystemGeneratedDashboard,u=s.systemGeneratedVideoWidget,d=o.a.useBasicFetch(!!u&&B._.dashboardWidgetContent(null==u?void 0:u.id,R.S.getWidgetParams(u.widgetId,u.templateId,R.S.getDashboardTargetType(e),null==t?void 0:t.map(function(e){return e.masterId})),null==u?void 0:u.templateId));return l?{widgets:null!==(i=null===(n=null==e?void 0:e.widgets)||void 0===n?void 0:n.filter(function(e){return e.widgetId!==U.z.ClassificationPinnedVideos||e.templateId===F.f.ThumbnailVerticalList}))&&void 0!==i?i:[],videoList:null!==(c=null===(r=d.data)||void 0===r?void 0:r.content)&&void 0!==c?c:[],videoListWidgetId:null==u?void 0:u.id}:{widgets:j.m.sortBy(null==e?void 0:e.widgets,"index")}}(e.dashboard,e.activeAudiences),u=l.widgets,d=l.videoList,f=l.videoListWidgetId,p=(0,q.a)(G.r.LGDown),g=a.useRef(new Set),b=a.useMemo(function(){return u.reduce(function(e,t){return e[t.id]=!1,e},{})},[null==u?void 0:u.length]),h=Ie(a.useState(b),2),w=h[0],C=h[1],E=Ie(a.useState(e.tableOfContentsId),2),k=E[0],S=E[1],I=Ie(a.useState(""),2),L=I[0],N=I[1],x=Array.from(g.current);function P(t,n,a){var i,r,o=R.S.getWidgetParams(n,a,R.S.getDashboardTargetType(e.dashboard),null===(i=e.activeAudiences)||void 0===i?void 0:i.map(function(e){return e.masterId}),null===(r=e.curriculums.preferredCurriculum)||void 0===r?void 0:r.id);return e.getWidgetContentRequest(t,o,a)}(0,Z.P)(x,k),(0,z.D)({setActiveId:N,headingElements:x,controlledId:k,setControlledId:S});var A=!e.isComingSoon&&!e.isTeacherOnly&&(!e.dashboard||e.dashboard.status===y.GL.Archived&&!e.isReadonly||e.dashboard.status===y.GL.Draft&&!e.isPreviewing||!(null==u?void 0:u.length)||(!d||!d.length)&&Object.values(w).every(function(e){return!!e}));a.useEffect(function(){A&&C(b)},[null==u?void 0:u.length]);var Q=a.useCallback(function(t,n){if(w[t]!==n){var a=Object.assign(Object.assign({},w),(l={},m=n,(d=function(e){var t=function(e){if("object"!=Se(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Se(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Se(t)?t:t+""}(d=t))in l?Object.defineProperty(l,d,{value:m,enumerable:!0,configurable:!0,writable:!0}):l[d]=m,l));if(R.S.isType(e.dashboard,y.ku.ClassificationDirectory))C(a);else{for(var i=0;i<u.length;){var r=u[i];if(xe(r)){for(var o=!0,c=i+1;o&&c<u.length;){var s=u[c];if(xe(s))break;a[s.id]||Oe(s)||(o=!1),c++}i=c,a[r.id]=o}else i++}C(a)}}var l,d,m},[w,u]);function $(e){return xe(e)&&w[e.id]}function Y(e,t){if(e.widgetId===U.z.ClassificationDashboardExternalMedia){var n=u[t-1];return w[n.id]?e.name.replace("Other videos","Videos"):e.name}return e.name}var J,X=u.filter(function(e){var t;return!$(e)&&!!(null===(t=e.metadata)||void 0===t?void 0:t.showInTableOfContents)}),ee=u.every(Oe),te=X.length>=2,ne=te&&!p,ae=(null===(t=e.settings)||void 0===t?void 0:t.hasTopicDirectories)&&m.i.isTopLevelTopic(e.classification)&&!e.isTertiaryCustomerWithoutExchange;return a.createElement("div",{className:"bg-white px-4 ".concat((J=R.S.getDashboardTargetType(e.dashboard),e.moviesAndTv||J===y.ku.ClassificationCurriculum?"":"dashboard-spacing-lg"))},a.createElement(M.p,{heading:e.classification.name,banner:e.classification.banner,imageCdnUrl:e.imageCdnUrl,actions:null===(n=e.getBannerActions)||void 0===n?void 0:n.call(e),actionsDropdownClassName:"btn btn-outline-dark",specialEvent:e.specialEvent,calendarTheme:{background:"bg-light-blue",border:"border-light-blue"},showComingSoon:e.isComingSoon,detailsComponent:ae?function(){return a.createElement(v,{classification:e.classification})}:null}),a.createElement(ke,{dashboard:e.dashboard,classification:e.classification,presentation:e.presentation,appLinks:e.appLinks,activeTab:e.tab,audiences:e.audiences,activeAudiences:e.activeAudiences,getBreadcrumbs:e.getBreadcrumbs,hasTopicDirectoryDashboard:e.hasTopicDirectoryDashboard,hasTopicCurriculumDashboard:e.hasTopicCurriculumDashboard,isComingSoon:e.isComingSoon,isEmpty:A,isViewingCurrentPresentation:e.isViewCurrentPresentation,disableAudiences:ee||e.isReadonly,audienceTooltip:ee?r.T.getPhrase(Ne,"audienceTooltip"):""}),e.isComingSoon&&a.createElement(K,{imageUrl:e.comingSoonImageUrl,data:e.classification,canFollowSubjects:e.canFollowSubjects,showFollowButtonSpinner:e.showFollowButtonSpinner,onToggleFollow:function(){return e.onToggleFollow(e.classification,s.LZ.ClassificationComingSoon)},showSignUp:!e.hasLocalPermissions(H.E.FollowComingSoonTopics),signUpAppLink:null===(c=(i=e.appLinks).signUp)||void 0===c?void 0:c.call(i)}),!e.isComingSoon&&a.createElement("div",{className:"".concat(ne?"row no-wrap":"")},te&&a.createElement(O,{widgets:X,title:e.classification.name,activeId:L,clickable:!e.isReadonly,analyticsData:e.analyticsData,setControlledId:S,isSmallScreen:p}),a.createElement("div",{className:ne?"col-9 order-0":""},u.map(function(t,n){return $(t)?a.createElement(a.Fragment,{key:t.id}):a.createElement(W.L,{widgetCollection:y.ku.Classification,headingElementRef:g,key:t.id,id:t.id,name:Y(t,n),description:t.description,classification:e.classification,templateId:t.templateId,widgetTypeId:t.widgetId,audiences:e.audiences,getContentRequest:P,setIsEmpty:Q,appLinks:e.appLinks,presentation:e.presentation,analyticsData:e.analyticsData,isScrollToTargetWidget:e.scrollToWidgetId===t.id,imageCdnUrl:e.imageCdnUrl,onSubmitFeedback:e.onSubmitFeedback,metadata:t.metadata,isBot:e.isBot,hasTableOfContents:ne,lazyLoad:e.lazyLoad,dashboardTarget:R.S.getDashboardTargetType(e.dashboard),widgetIndex:n,hasPermissions:e.hasPermissions,hasLocalPermissions:e.hasLocalPermissions,isPreviewing:e.isReadonly,contentType:e.contentType,resourceThumbnailFallbackImageUrl:e.resourceThumbnailFallbackImageUrl,onToggleFollowClassification:e.onToggleFollow,settings:e.settings,isEditing:e.isReadonly,isTertiaryCustomerWithoutExchange:e.isTertiaryCustomerWithoutExchange,commonVideoProps:e.commonVideoProps,curriculums:e.curriculums,limitTotalItems:!1,seeMoreLink:null,onClickRemoveItem:null,badgeComponent:null})})),!!(null==d?void 0:d.length)&&a.createElement(a.Fragment,null,a.createElement(_.B,{name:r.T.getPhrase(Ne,"videos")}),a.createElement(V.E4,{videos:d,getVideoAppLink:function(t,n){return e.appLinks.videoType(t,Object.assign(Object.assign({},n),{contextId:f,includeContext:n.includeContext}))},hasPermissions:e.hasPermissions,presentationAudiences:e.audiences,getPreviewQuestionsAppLink:e.appLinks.previewQuestions,commonVideoProps:e.commonVideoProps}))),A&&a.createElement(T,{dashboard:e.dashboard,isReadonly:e.isReadonly,imageUrl:e.emptyImageUrl,addWidgetApplink:e.appLinks.widgetWizard}),e.isTeacherOnly&&a.createElement(D,{imageUrl:e.emptyImageUrl,ctaAppLink:function(){return e.appLinks.allTopics(e.classification.presentationId)}}))}function Ae(){return a.createElement("div",{className:"bg-white px-4"},a.createElement(M.v,null),a.createElement("div",{className:"d-flex flex-column row-gap-3 py-3 mb-3 border-bottom"},a.createElement(X.b2,null),a.createElement(ve,null)))}Pe.defaultProps={appLinks:{}};var De=n(65042),je=n(51365),Fe=n(2284),Ue=n(17101),Be=n(4594),Re=n(12754),Me=n(89454),Ve=n(21750),_e=n(39151),We=n(1666),Ge=n(7198),He=n(99940),qe=n(97395);function ze(e){return function(e){if(Array.isArray(e))return Ze(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ze(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)?Ze(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ze(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Qe=function(e){return qe._.urlBuilder("{gateway}/v1/users/me/classifications/following",{id:e})},$e={follow:function(e,t,n,a){return{url:"{gateway}/v1/users/me/classifications/following",key:"follow:".concat(e.join(",")),type:He.k.POST,data:e,formatData:function(){return e.map(function(e){return{id:e,followers:{data:[t]}}})},success:n,error:a,invalidationKeys:[].concat(ze(e.map(function(e){return"classification:".concat(e)})),["my:subject:preferences","classifications"])}},unfollow:function(e,t,n,a){return{url:Qe(e),key:"unfollow:".concat(e.join(",")),type:He.k.DELETE,formatData:function(){return e.map(function(e){return{id:e,followers:{data:[]}}})},success:n,error:a,invalidationKeys:[].concat(ze(e.map(function(e){return"classification:".concat(e)})),["my:subject:preferences","classifications"])}}},Ye=n(98064),Je=n(31949),Ke=n(69883),Xe=n(63719),et=n(56520),tt=n(91286),nt=n(22902),at=n(15311),it=n(79612),rt=n(37802),ot=n(52167),ct=n(76753),st=n(99742),lt=n(10671),ut=n(58321),dt=n(82817),mt=n(7179),ft=n(86698),pt=n(34181),vt=n(10741),gt=n(33192),bt=n(23923),yt=n(73024),ht=n(64364),wt=n(14070),Ct=n(97291);function Tt(e){return Tt="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},Tt(e)}function Et(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,kt(a.key),a)}}function kt(e){var t=function(e){if("object"!=Tt(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=Tt(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==Tt(t)?t:t+""}function St(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(St=function(){return!!e})()}function It(e){return It=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},It(e)}function Lt(e,t){return Lt=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},Lt(e,t)}var Nt="subjects.topicNotFoundError",xt=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=It(t),function(e,t){if(t&&("object"==Tt(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,St()?Reflect.construct(t,n||[],It(e).constructor):t.apply(e,n))}(this,t,["Topic doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Lt(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"TopicNotFoundError"}},{key:"heading",get:function(){return r.T.getPhrase(Nt,"heading")}},{key:"description",get:function(){return r.T.getPhrase(Nt,"description")}},{key:"cta",get:function(){return{text:r.T.getPhrase(Nt,"cta"),appLink:{application:Ct.O.SUBJECT,action:wt.e.Subjects.PRESENTATION_TOPICS}}}}])&&Et(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(ht.H),Ot=n(23737),Pt=n(11188);const At={followButton:"HlRXj"};function Dt(){var e,t,n="function"==typeof Symbol?Symbol:{},a=n.iterator||"@@iterator",i=n.toStringTag||"@@toStringTag";function r(n,a,i,r){var s=a&&a.prototype instanceof c?a:c,l=Object.create(s.prototype);return jt(l,"_invoke",function(n,a,i){var r,c,s,l=0,u=i||[],d=!1,m={p:0,n:0,v:e,a:f,f:f.bind(e,4),d:function(t,n){return r=t,c=0,s=e,m.n=n,o}};function f(n,a){for(c=n,s=a,t=0;!d&&l&&!i&&t<u.length;t++){var i,r=u[t],f=m.p,p=r[2];n>3?(i=p===a)&&(s=r[(c=r[4])?5:(c=3,3)],r[4]=r[5]=e):r[0]<=f&&((i=n<2&&f<r[1])?(c=0,m.v=a,m.n=r[1]):f<p&&(i=n<3||r[0]>a||a>p)&&(r[4]=n,r[5]=a,m.n=p,c=0))}if(i||n>1)return o;throw d=!0,a}return function(i,u,p){if(l>1)throw TypeError("Generator is already running");for(d&&1===u&&f(u,p),c=u,s=p;(t=c<2?e:s)||!d;){r||(c?c<3?(c>1&&(m.n=-1),f(c,s)):m.n=s:m.v=s);try{if(l=2,r){if(c||(i="next"),t=r[i]){if(!(t=t.call(r,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=r.return)&&t.call(r),c<2&&(s=TypeError("The iterator does not provide a '"+i+"' method"),c=1);r=e}else if((t=(d=m.n<0)?s:n.call(a,m))!==o)break}catch(t){r=e,c=1,s=t}finally{l=1}}return{value:t,done:d}}}(n,i,r),!0),l}var o={};function c(){}function s(){}function l(){}t=Object.getPrototypeOf;var u=[][a]?t(t([][a]())):(jt(t={},a,function(){return this}),t),d=l.prototype=c.prototype=Object.create(u);function m(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,l):(e.__proto__=l,jt(e,i,"GeneratorFunction")),e.prototype=Object.create(d),e}return s.prototype=l,jt(d,"constructor",l),jt(l,"constructor",s),s.displayName="GeneratorFunction",jt(l,i,"GeneratorFunction"),jt(d),jt(d,i,"Generator"),jt(d,a,function(){return this}),jt(d,"toString",function(){return"[object Generator]"}),(Dt=function(){return{w:r,m}})()}function jt(e,t,n,a){var i=Object.defineProperty;try{i({},"",{})}catch(e){i=0}jt=function(e,t,n,a){if(t)i?i(e,t,{value:n,enumerable:!a,configurable:!a,writable:!a}):e[t]=n;else{var r=function(t,n){jt(e,t,function(e){return this._invoke(t,n,e)})};r("next",0),r("throw",1),r("return",2)}},jt(e,t,n,a)}function Ft(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var Ut=function(e,t,n,a){return new(n||(n=Promise))(function(i,r){function o(e){try{s(a.next(e))}catch(e){r(e)}}function c(e){try{s(a.throw(e))}catch(e){r(e)}}function s(e){var t;e.done?i(e.value):(t=e.value,t instanceof n?t:new n(function(e){e(t)})).then(o,c)}s((a=a.apply(e,t||[])).next())})};Rt.defaultProps={queryParams:{}};var Bt=r.T.encloseNamespace("subjects.classification");function Rt(e){var t,n,r,d,f,p,v,g,b,w,C,T,E,k,S,I,L,N,x,O=(N=a.useState(!1),x=2,function(e){if(Array.isArray(e))return e}(N)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,i,r,o,c=[],s=!0,l=!1;try{if(r=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=r.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,i=e}finally{try{if(!s&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(N,x)||function(e,t){if(e){if("string"==typeof e)return Ft(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)?Ft(e,t):void 0}}(N,x)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),P=O[0],A=O[1],D=(0,Ke.Z)(),j=o.a.useGetFetchAsync(),F=(0,nt.T)(),U=F.hasPermissions,M=F.hasLocalPermissions,V=(0,rt.r)(null),_=o.a.useBasicFetch(_e.L.config()),W=o.a.useBasicFetch(Je.N.currentUser()),z=(0,et.R0)(),Z=z.openInCurationStudioLabel,Q=z.isUserCurator,$=z.getOpenInCurationStudioLink,Y=(0,dt.M)(),J=o.a.useBasicFetch(U(H.C.CanSubmitFeedback)&&(null===(t=W.data)||void 0===t?void 0:t.isAuthenticated)&&We.h.customer(W.data.customerId)),K=o.a.useBasicFetch(Ve.x.classification(e.id,null===(n=W.data)||void 0===n?void 0:n.id)),X=o.a.useBasicFetch(K.data&&Ve.x.presentationById(K.data.presentationId)),ee=o.a.useBasicFetch(K.data&&Me.O.audiencesByPresentationId(K.data.presentationId)),ne=o.a.useBasicFetch(K.data&&l.N.nextTopicSpecialEvent(e.id,K.data.presentationId)),ae=o.a.useBasicFetch((null===(r=W.data)||void 0===r?void 0:r.isAuthenticated)&&Ye.D.libraries()),ie=(0,ft.y)(),re=ie.activePresentation,oe=ie.availablePresentations,ce=ie.canAccessPresentation,se=o.a.useBasicFetch(Ve.x.path(e.id)),le=function(e,t,n){var a=(0,rt.r)(null),i=a.hasTopicDirectories,r=a.hasTopicVideoListFeature,o=(0,Ot.y)({classificationId:e,queryParams:t,targetType:y.ku.Classification}),c=o.dashboard,s=o.isPreviewing,l=o.isTeacherOnly,u=(0,Ot.y)({classificationId:e,queryParams:t,targetType:y.ku.ClassificationDirectory}).dashboard,d=(0,Ot.y)({classificationId:e,queryParams:t,targetType:y.ku.ClassificationCurriculum}).dashboard;return{dashboard:function(){switch(n){case y.ku.Classification:return c;case y.ku.ClassificationDirectory:return u;case y.ku.ClassificationCurriculum:return d}}(),hasTopicDirectoryDashboard:i&&!!u.data,hasTopicCurriculumDashboard:r&&!!d.data,isTeacherOnly:l,isPreviewing:s}}(e.id,e.queryParams,e.targetType),ue=le.dashboard,de=le.hasTopicDirectoryDashboard,me=le.hasTopicCurriculumDashboard,fe=le.isPreviewing,pe=le.isTeacherOnly,ve=(0,bt.B)(),ge=(0,at.r)(),be=o.a.useBasicFetch(Ve.x.regionAlternatives(e.id)),ye=gt.f.getPreferredRegionAlternative(be.data,null===(d=W.data)||void 0===d?void 0:d.contentRegion);(0,it.M)(ct.CG.getClassificationMetadata({content:{classification:K.data,dashboard:ue.data},phraseContext:{phraseHandler:Bt,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:gt.f.getCanonicalLink({stripPresentationSlug:!0,customAppLink:pt.L.getAppLink(Object.assign(Object.assign({},K.data),{name:(null==ye?void 0:ye.name)||(null===(f=K.data)||void 0===f?void 0:f.name)}),e.queryParams),hrefTransformer:gt.f.createRegionHrefTransformer(be.data,null===(p=W.data)||void 0===p?void 0:p.contentRegion)}),allowIndexing:gt.f.allowIndexing(),hrefLang:gt.f.getContentHrefLang(be.data,function(){return pt.L.getAppLink(K.data)})})),(0,tt.v)(K,{notFound:xt}),(0,mt.P)({id:e.id,app:"topics"});var he=(null==re?void 0:re.id)===(null===(v=X.data)||void 0===v?void 0:v.id),we=(0,q.a)(G.r.MDDown),Ce=(0,q.a)(G.r.SMDown),Te=(0,ut.U)({locationContext:s.LZ.VideoThumbnail,mtv:e.queryParams.mtv}).commonVideoProps,Ee=(0,lt._)({location:lt.i.VideoItem}),ke=U(H.C.FollowSubjects),Se=(null===(g=K.data)||void 0===g?void 0:g.status)===Fe.W.ComingSoon&&!fe,Ie=te.T.getActiveAudiencesFromParams(ee.data,e.queryParams),Le=null!==(b=null==Ie?void 0:Ie.map(function(e){return e.masterId}))&&void 0!==b?b:[],Ne=R.S.getDashboardTargetType(ue.data);function xe(e,t){var n,a,i;if(ke&&K){var r=e.id.toString()===(null===(a=null===(n=K.data)||void 0===n?void 0:n.id)||void 0===a?void 0:a.toString());r&&A(!0);var o=m.i.isFollowing(e),l=o?$e.unfollow:$e.follow;j(l([e.id],null===(i=W.data)||void 0===i?void 0:i.id)).then(function(){c.k.logUserAction(qe,{location:t,actionType:s.Vw.Follow,workflowPhase:s.eu.Complete,descriptor:o?s.DL.Off:s.DL.On,entity:s.py.Classification}),r||D.success(Bt(o?"unfollowed":"followed",{name:e.name}))}).finally(function(){r&&A(!1)})}}var Oe=(0,Pt.rB)(K.data,Ne,e.queryParams,W.data),He=(0,Xe.h)({name:null===(w=K.data)||void 0===w?void 0:w.name}),qe={presentationId:null===(C=X.data)||void 0===C?void 0:C.id,presentationName:null===(T=X.data)||void 0===T?void 0:T.name,currentClassificationId:null===(E=K.data)||void 0===E?void 0:E.id,currentClassificationName:null===(k=K.data)||void 0===k?void 0:k.name,followingCurrentClassification:!!(null===(L=null===(I=null===(S=K.data)||void 0===S?void 0:S.followers)||void 0===I?void 0:I.data)||void 0===L?void 0:L.length),activeAudienceNames:(null==Ie?void 0:Ie.length)?Ie.map(function(e){return e.name}):null,activeAudienceIds:Le.length?Le:null};return _.data&&ue.hasCompleted&&K.data&&X.data&&se.data&&oe&&ee.data&&ne.hasCompleted?a.createElement(je.M.Provider,{value:Ee},a.createElement("div",{className:"position-relative"},!(!fe||!ue.data)&&a.createElement(De.a,{status:ue.data.status,type:"topic"}),a.createElement(Pe,{dashboard:ue.data,classification:K.data,getWidgetContentRequest:function(e,t,n){var a=u.g.hasTwigOrTigtag(ae.data,W.data),i=a.hasTwig,r=a.hasTigtag;return B._.dashboardWidgetContent(e,t,n,X.data,{hideTigTag:!r,hideTwig:!i})},getBreadcrumbs:function(){var e;if(ce(null===(e=X.data)||void 0===e?void 0:e.id))return function(){return He}}(),hasPermissions:U,hasLocalPermissions:M,presentation:X.data,curriculums:Y,onToggleFollow:xe,getBannerActions:function(){var e,t,n,a,i,r=!!(null===(n=null===(t=null===(e=K.data)||void 0===e?void 0:e.followers)||void 0===t?void 0:t.data)||void 0===n?void 0:n.length);if(!ke)return[];var o=[{label:Ce?"":Bt(r?"following":"follow"),onClick:function(){return xe(K.data,s.LZ.Banner)},svgName:r?h.vn.BellFilled:h.vn.Bell,className:"btn follow-btn me-2 ".concat(r?"btn-outline-dark":"btn-dark"," ").concat(At.followButton),button:!0,tooltip:r||we?void 0:Bt("followBtnTooltip"),showSpinner:P}];return Q&&o.push({label:Z,href:$(Be.E.Subject,null===(a=K.data)||void 0===a?void 0:a.id,null===(i=X.data)||void 0===i?void 0:i.id),openInNewTab:!0}),o},audiences:e.queryParams.mtv?null:ee.data,activeAudiences:Ie,analyticsData:qe,imageCdnUrl:_.data.imageCdnUrl,resourceThumbnailFallbackImageUrl:st.W.Fallbacks.RESOURCE_THUMBNAIL,emptyImageUrl:pe?st.W.EmptyStates.Topics.TEACHER_ONLY:st.W.EmptyStates.Topics.TOPIC,isComingSoon:Se,showFollowButtonSpinner:P,comingSoonImageUrl:st.W.EmptyStates.Topics.COMING_SOON,appLinks:Object.assign(Object.assign({},Oe),{signUp:yt.t.getSignUpAppLink,widgetWizard:function(){return null},previewQuestions:function(e){return vt.j.getPreviewQuestionsAppLink(e)}}),isPreviewing:fe,isViewCurrentPresentation:he,canFollowSubjects:ke,onSubmitFeedback:U(H.C.CanSubmitFeedback)&&function(e){return Ut(this,void 0,void 0,Dt().m(function t(){var n;return Dt().w(function(t){for(;;)switch(t.n){case 0:return t.n=1,j(Ge.f.submitFeedback({type:Ue.n.Footer,user:ot.m.getUserInfo(W.data,J.data),tags:ot.m.getTags(W.data,Re.x.Primary,U(H.C.StudentExperience),["topics","in product feedback"])},{reaction:e.type,feedback:e.content,location:"Topic Footer",presentationName:X.data.description,presentationId:X.data.id,dashboardName:ue.data.name,dashboardId:ue.data.id,classificationName:K.data.name,classificationId:K.data.id,currentPageUrl:i.Ab.GetCurrentUrl()}));case 1:return n=t.v,c.k.logUserAction({feedbackType:e.type,content:e.content,presentationId:X.data.id,classificationId:K.data.id,dashboardId:ue.data.id},{actionType:s.Vw.Submit,location:s.LZ.ClassificationFooter,entity:s.py.Feedback,workflowPhase:s.eu.Complete}),t.a(2,n)}},t)}))},tableOfContentsId:e.queryParams.tocId,lazyLoad:!gt.f.isBot(),moviesAndTv:e.queryParams.mtv,isTeacherOnly:pe,specialEvent:ne.data,isBot:gt.f.isBot(),hasTopicDirectoryDashboard:de,hasTopicCurriculumDashboard:me,tab:m.i.getActiveTopicTab(K.data,e.targetType),settings:V,isTertiaryCustomerWithoutExchange:ve&&!(null==ge?void 0:ge.hasProduct(Re.x.Exchange)),commonVideoProps:Te}))):a.createElement(Ae,null)}},22771:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
3
|
-
//# sourceMappingURL=6948-91184efeb6-lite.chunk.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6948-91184efeb6-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/calendar/flight-request/CalendarRequests.ts","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/apps/subjects/constants/DashboardStatusConfig.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/dashboard-status-badge/dashboard-status-badge.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/dashboard-status-badge/DashboardStatusBadge.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preview-banner/preview-banner.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preview-banner/PreviewBanner.tsx","file:///app/packages/libs/shared/src/components/back-button/BackButton.tsx","file:///app/packages/libs/shared/src/components/banner-header/banner-header.scss","file:///app/packages/libs/shared/src/components/banner-header/BannerHeader.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/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/table-of-contents.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-coming-soon/ClassificationComingSoon.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-filter/AudienceFilter.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/audiences/ClassificationDashboardAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/classification-tabs.scss","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-tabs/ClassificationTabs.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/classification-dashboard-nav/ClassificationDashboardNav.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/ClassificationDashboard.tsx","file:///app/packages/libs/shared/src/apps/subjects/hooks/useGetTopicsWidgets.ts","file:///app/packages/libs/shared/src/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard.tsx","file:///app/packages/libs/shared/src/flight-requests/FollowRequests.ts","file:///app/packages/projects/lite/src/apps/subjects/errors/TopicNotFoundError.ts","file:///app/packages/projects/lite/src/apps/subjects/views/classification/curated-classification-view.scss","file:///app/packages/projects/lite/src/apps/subjects/views/classification/CuratedClassificationView.tsx","file:///app/packages/projects/lite/src/apps/subjects/hooks/useFetchClassificationDashboard.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["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 {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\",\"badge\":\"KmfP8\"};","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nconst namespace = 'shared.audienceItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-gray-900 text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `${styles.badge} lh-1 rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <button\n type='button'\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n aria-label={`${getPhrase('ariaFilter')} ${audience.name}`}\n disabled={isDisabled}\n >\n {lowerCaseToTitleCase(audience.name)}\n </button>\n );\n}","import { localSvgs } from 'libs/shared/images/svg';\nimport { DashboardStatus } from 'libs/shared/interfaces/models/Dashboard';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface DashboardStatusConfigType {\n statusName: string;\n actionName: string;\n svgName: localSvgs;\n svgColorClassName: string;\n}\n\nexport const DashboardStatusConfig: Record<DashboardStatus, DashboardStatusConfigType> = {\n [DashboardStatus.Archived]: {\n svgName: cvSvgLibrary.Archive,\n svgColorClassName: 'text-secondary',\n actionName: 'Archive',\n statusName: 'Archived'\n },\n [DashboardStatus.Draft]: {\n svgName: cvSvgLibrary.Edit,\n svgColorClassName: '',\n actionName: 'Draft',\n statusName: 'Draft'\n },\n [DashboardStatus.Published]: {\n svgName: cvSvgLibrary.VisibleOn,\n svgColorClassName: 'text-success',\n actionName: 'Publish',\n statusName: 'Published'\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"badge\":\"ciO47\",\"draftLight\":\"A6Yi7\",\"draftDark\":\"fkXBX\",\"published\":\"Ovzwy\",\"archived\":\"r_dco\"};","import React from 'react';\n\nimport { DashboardStatusConfig } from 'libs/shared/apps/subjects/constants/DashboardStatusConfig';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { DashboardStatus } from 'libs/shared/interfaces';\n\nimport styles from './dashboard-status-badge.scss';\n\nfunction getClassName(props: DashboardStatusBadgeProps): string {\n let className = `rounded-pill d-flex align-items-center ps-2 py-1 fw-semibold ms-2 ${styles.badge}`;\n\n switch (props.status) {\n case DashboardStatus.Published:\n className += ` ${styles.published}`;\n break;\n case DashboardStatus.Archived:\n className += ` ${styles.archived}`;\n break;\n case DashboardStatus.Draft:\n className += ` ${props.darkMode ? styles.draftDark : styles.draftLight}`;\n break;\n }\n\n if (props.wrapperClassName)\n className += ` ${props.wrapperClassName}`;\n\n return className;\n}\n\ninterface DashboardStatusBadgeProps {\n status: DashboardStatus;\n darkMode?: boolean;\n wrapperClassName?: string;\n}\n\nexport function DashboardStatusBadge(props: DashboardStatusBadgeProps): JSX.Element {\n const { statusName, svgName } = DashboardStatusConfig[props.status];\n\n return (\n <div className={getClassName(props)}>\n <SvgContainer svgName={svgName} />\n <div>{statusName}</div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"stickyWrapper\":\"zhw6K\",\"badgeWrapper\":\"NOvn1\",\"badge\":\"pxQSR\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DashboardStatusBadge } from 'libs/shared/apps/subjects/components/classification-dashboard/dashboard-status-badge/DashboardStatusBadge';\nimport { EmojiText } from 'libs/shared/components/emoji-text/EmojiText';\nimport { DashboardStatus } from 'libs/shared/interfaces';\n\nimport styles from './preview-banner.scss';\n\nconst namespace = 'shared.classificationPreviewBanner';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PreviewBannerProps {\n status: DashboardStatus;\n type: 'company' | 'topic';\n}\n\nexport function PreviewBanner(props: PreviewBannerProps): JSX.Element {\n return (\n <div className={`${styles.stickyWrapper} py-2 d-flex justify-content-space-between bg-dark text-white mx-2 rounded`}>\n <div className={`position-absolute d-flex ${styles.badgeWrapper}`}>\n <DashboardStatusBadge status={props.status} wrapperClassName={`${styles.badge}`} darkMode />\n </div>\n <div className='flex-grow-1'>\n <h1 className='text-center my-3 h5'>\n <EmojiText emoji='👀' />\n {getPhrase(props.type === 'topic' ? 'topicTitle' : 'companyTitle')}\n </h1>\n </div>\n </div>\n );\n}\n","import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'shared.backButton';\n\ninterface BackButtonProps {\n appLink: Core.AppLink;\n backToName?: string;\n color?: 'black' | 'white';\n extraClasses?: string;\n /**\n * Whether or not the button text has a text shadow. Defaults to true\n */\n textShadow?: boolean;\n}\n\nBackButton.defaultProps = {\n color: 'black',\n extraClasses: ''\n};\n\nexport function BackButton(props: BackButtonProps): React.ReactElement {\n const { backToName, appLink, color, extraClasses, textShadow } = {\n textShadow: true,\n ...props\n };\n\n const backPhrase = backToName\n ? LanguageService.getPhrase(namespace, 'backTo', { backToName })\n : LanguageService.getPhrase(namespace, 'back');\n\n const colorClass = color === 'black' ? '' : 'text-white';\n const textShadowClass = textShadow ? 'text-shadow' : '';\n\n return (\n <AppLink\n appLink={appLink}\n className={`d-inline-flex align-items-center h5 mb-0 ${extraClasses} ${colorClass} ${textShadowClass}`}\n >\n <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Medium} />\n <span className='ms-1'>{backPhrase}</span>\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"bannerContent\":\"sSCTB\",\"actionsContainer\":\"Z5WI2\",\"bannerContentWithLogo\":\"rgs7Q\",\"container\":\"M51HJ\",\"logoContainer\":\"vkeJk\",\"logoContainerLeft\":\"M3U9B\",\"logoHeading\":\"EtRwC\",\"specialEventContainer\":\"rOxDc\",\"headingLarge\":\"_8pnV\",\"heading\":\"JXVBH\"};","import * as React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\nimport { PortalHelper } from 'libs/common/react/utils/PortalHelper';\n\nimport { ComingSoonTag } from 'libs/shared/apps/calendar/components/coming-soon-tag/ComingSoonTag';\nimport { GenericCalendarDate } from 'libs/shared/apps/calendar/components/generic-calendar-date/GenericCalendarDate';\nimport { CalendarTheme } from 'libs/shared/apps/calendar/interfaces/CalendarTheme';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { BackButton } from 'libs/shared/components/back-button/BackButton';\nimport { LazyImage } from 'libs/shared/components/lazy-image/LazyImage';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { ImageMinDimensions } from 'libs/shared/constants/ImageSizes';\nimport { BannerPortalContext } from 'libs/shared/context/BannerPortalContext';\nimport { ImageSize, ImageType, ResizeType } from 'libs/shared/enums/Images';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Banner, CalendarEvent, Logo } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper, ImageOptions } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './banner-header.scss';\n\nconst RATIO = `${ImageMinDimensions[ImageType.Banners].width}:${ImageMinDimensions[ImageType.Banners].height}`;\nconst DEFAULT_WIDTH = 1200; // This is ImageSize.Large for a Banner.\nconst LARGE_SCREEN_WIDTH = 1920;\n\nfunction useGetImageWidth(): number {\n const breakpoints = useBreakpoints();\n\n if (breakpoints.xxl)\n return LARGE_SCREEN_WIDTH;\n\n return DEFAULT_WIDTH;\n}\n\nfunction getSizeClass(heading: string): string {\n if (heading.length < 160)\n return 'h1';\n\n return styles.headingLarge;\n}\n\ninterface BannerHeaderProps {\n heading: string;\n banner?: Banner;\n bannerClassName?: string;\n imageCdnUrl?: string;\n logo?: Logo;\n logoBgColour?: string;\n actions?: ActionOptions[];\n specialEvent?: CalendarEvent;\n backButtonAppLink?: Core.AppLink;\n backButtonText?: string;\n backButtonClasses?: string;\n sortComponent?: JSX.Element;\n blockColourClass?: string;\n actionsDropdownClassName?: string;\n detailsComponent?: () => React.ReactElement;\n imageOptions?: ImageOptions;\n showComingSoon?: boolean;\n alignLogoLeft?: boolean;\n calendarTheme?: CalendarTheme;\n}\n\nconst namespace = 'shared.bannerHeader';\n\nexport const BannerHeader = React.memo(function(props: React.PropsWithChildren<BannerHeaderProps>): React.ReactElement {\n const { heading, banner, imageCdnUrl, actions, sortComponent, blockColourClass, specialEvent } = props;\n\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n const imageWidth = useGetImageWidth();\n\n const specialEventIsToday = React.useMemo(() => {\n if (!specialEvent || props.showComingSoon)\n return false;\n\n const today = DateHelper.format(new Date(), 'YYYY-MM-DD');\n\n if (!specialEvent.endDate)\n return specialEvent.startDate === today;\n\n return specialEvent.startDate <= today && specialEvent.endDate >= today;\n }, [specialEvent]);\n\n function getSpecialEventMonthText(specialEvent: CalendarEvent): string {\n if (!specialEvent.endDate)\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n if (DateHelper.isSame(specialEvent.startDate, specialEvent.endDate, 'month'))\n return DateHelper.format(specialEvent.startDate, 'MMMM');\n\n return `${DateHelper.format(specialEvent.startDate, 'MMM')} - ${DateHelper.format(specialEvent.endDate, 'MMM')}`;\n }\n\n const imageOptions = props.imageOptions || {\n width: imageWidth,\n ratio: RATIO,\n resizeType: ResizeType.Cover\n };\n\n const url = !!banner && !!imageCdnUrl && ImageHelper.createBannerUrl(banner, {\n fallbackBaseUrl: imageCdnUrl,\n fallbackCategoryName: heading,\n type: ImageType.Banners\n }, imageOptions);\n\n const containerProps: React.DetailedHTMLProps<React.HTMLAttributes<HTMLDivElement>, HTMLDivElement> = {\n className: `banner banner-header ${props.bannerClassName}`,\n style: url ? { backgroundImage: `url('${url}')` } : {}\n };\n\n if (!banner && blockColourClass) {\n delete containerProps.style;\n containerProps.className += ` ${blockColourClass}`;\n }\n\n const DetailsComponent = props.detailsComponent;\n\n const logoFallbackBgClassName = getBgColorClass(props.heading, BG_COLOUR_CLASS_NAMES);\n\n return PortalHelper.renderInPortalIfExists(\n // \"banner\" is used in playlists in Online. banner-header is used by all other projects\n <header {...containerProps}>\n <div className={`container ${styles.container} position-relative inner-banner`}>\n {props.backButtonAppLink && (\n <div className='pt-3'>\n <BackButton\n appLink={props.backButtonAppLink}\n backToName={props.backButtonText}\n extraClasses={props.backButtonClasses}\n color='white'\n />\n </div>\n )}\n \n <div className={`${props.alignLogoLeft ? 'position-absolute top-50 start-0 translate-middle-y w-100 ps-4' : `${styles.bannerContent} px-2 ${props.logo?.url ? styles.bannerContentWithLogo : ''}`}`}>\n {!!specialEvent && (\n <div className={`position-relative ${styles.specialEventContainer}`}>\n <GenericCalendarDate\n body={{\n type: specialEvent.endDate ? 'range' : 'day',\n text: specialEvent.endDate\n ? `${DateHelper.format(specialEvent.startDate, 'DD')}-${DateHelper.format(specialEvent.endDate, 'DD')}`\n : DateHelper.format(specialEvent.startDate, 'DD')\n }}\n month={getSpecialEventMonthText(specialEvent)}\n theme={props.calendarTheme}\n />\n </div>\n )}\n <div>\n {specialEventIsToday && (\n <div className='rounded-pill py-1 px-2 my-1 me-1 fw-semibold bg-light-blue lh-1 d-inline-block'>\n <Text namespace={namespace} phrase='onToday' />\n </div>\n )}\n {props.showComingSoon && (\n <ComingSoonTag className='pe-2 fw-semibold mb-1 rounded-pill justify-content-start text-nowrap' />\n )}\n <div className='d-flex align-items-center'>\n {props.alignLogoLeft && props.logo?.url &&\n <div className={`${styles.logoContainerLeft} d-none d-md-block rounded-circle overflow-hidden me-3 ${logoFallbackBgClassName}`}>\n <LazyImage\n src={ImageHelper.createUrl(props.logo?.url, { size: ImageSize.Medium })}\n style={{ backgroundColor: props.logoBgColour }}\n />\n </div>\n }\n <h1 className={`text-white text-shadow pe-3 position-static ${styles.heading} ${getSizeClass(heading)} ${props.alignLogoLeft ? 'w-50' : ''}`}>\n {heading}\n {DetailsComponent && <DetailsComponent />}\n </h1>\n </div>\n </div>\n {!!actions && (\n <div className={styles.actionsContainer}>\n <Actions\n actions={actions}\n sortComponent={sortComponent}\n actionsDropdownClassName={props.actionsDropdownClassName}\n />\n </div>\n )}\n </div>\n {!props.alignLogoLeft && !!props.logo?.url &&\n <div className={styles.logoContainer}>\n <img\n src={ImageHelper.createUrl(props.logo.url, { size: ImageSize.Medium })}\n className='rounded-circle'\n />\n </div>\n }\n </div>\n </header>,\n portalContainerContext?.container\n );\n}, (prevProps, nextProps): boolean => (\n prevProps.actions === nextProps.actions\n && prevProps.heading === nextProps.heading\n && prevProps.logo?.url === nextProps.logo?.url\n));\n\nexport function PartialBannerHeader(): JSX.Element {\n const portalContainerContext = React.useContext(BannerPortalContext);\n\n return PortalHelper.renderInPortalIfExists(\n <div className={`partial-banner partial-loading-background ${styles.banner}`} />,\n portalContainerContext?.container\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 { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n internalServerError?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError,\n internalServerError: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.InternalServer) {\n if (!ignoreMap.internalServerError)\n Core.ErrorHelper.throw(new UnspecifiedError());\n return;\n }\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import { 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 { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\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];\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 { Text } from 'libs/shared/components/text/Text';\nimport { Classification } from 'libs/shared/interfaces';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nconst namespace = 'subject.classificationHeaderDetails';\n\nconst Separator = ({ className }: { className: string }) =>\n <span className={className}>•</span>;\n\ninterface ClassificationHeaderDetailsProps {\n classification: Classification;\n}\n\nexport function ClassificationHeaderDetails(props: ClassificationHeaderDetailsProps): React.ReactElement {\n const {\n dashboardVideoCount,\n childDashboardVideoCount,\n dashboardResourceCount,\n childDashboardResourceCount,\n childClassificationCount\n } = TopicsHelper.getCounts(props.classification);\n\n const videoCount = dashboardVideoCount + childDashboardVideoCount;\n const resourceCount = dashboardResourceCount + childDashboardResourceCount;\n\n return (\n <p className='mb-n1 font-size-normal fw-normal mt-1'>\n {!!childClassificationCount && (\n <Text\n namespace={namespace}\n phrase='topics'\n options={{ count: childClassificationCount.toLocaleString(), smartCount: childClassificationCount }}\n />\n )}\n\n {!!videoCount && (\n <>\n {childClassificationCount > 0 && <Separator className='mx-2' />}\n <Text\n namespace={namespace}\n phrase='videos'\n options={{ count: videoCount.toLocaleString(), smartCount: videoCount }}\n />\n </>\n )}\n {!!resourceCount && (\n <>\n <Separator className='mx-2' />\n <Text\n namespace={namespace}\n phrase='resources'\n options={{ count: resourceCount.toLocaleString(), smartCount: resourceCount }}\n />\n </>\n )}\n </p>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, 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.curatedClassificationEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CuratedClassificationEmptyStateProps {\n dashboard: CuratedDashboard;\n imageUrl: string;\n isReadonly: boolean;\n addWidgetApplink?: () => Core.AppLink;\n}\n\nexport function CuratedClassificationEmptyState(props: CuratedClassificationEmptyStateProps): JSX.Element {\n const isArchived = props.dashboard?.status === DashboardStatus.Archived;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('headingForNP')} />\n {!props.isReadonly ? (\n <EmptyState.Heading>\n <Text phrase='headingForNP' />\n </EmptyState.Heading>\n ) : (\n <>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='headingForCurator' />\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 </>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"k1iOO\",\"mobile\":\"QwoBj\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { TableOfContentsList } from 'libs/shared/components/table-of-contents-list/TableOfContentsList';\nimport { CuratedWidget } from 'libs/shared/interfaces';\nimport { ContextService } from 'libs/shared/services/ContextService';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './table-of-contents.scss';\n\ninterface TableOfContentsContainerProps {\n widgets: CuratedWidget[];\n title: string;\n activeId: string;\n appLink?: Core.AppLink;\n clickable?: boolean;\n analyticsData?: HashObject;\n setControlledId: (arg: string) => void;\n isSmallScreen?: boolean;\n}\ninterface TableOfContentsProps extends TableOfContentsContainerProps {\n getAppLink: (widget: CuratedWidget) => Core.AppLink\n}\n\nfunction TableOfContentsMobile(props: TableOfContentsProps) {\n const [ isExpanded, setIsExpanded ] = React.useState(false);\n\n function logUserAction() {\n const analyticsOptions = {\n actionType: !isExpanded ? UserAction.Open : UserAction.Hide,\n entity: EntityType.TableOfContents,\n location: LocationContext.Dashboard\n };\n\n AnalyticsHelper.logUserAction(props.analyticsData, analyticsOptions);\n }\n\n function onClickIcon() {\n setIsExpanded(!isExpanded);\n logUserAction();\n }\n\n return (\n <div className={`${styles.mobile} d-inline-flex gap-1`}>\n \n {isExpanded && (\n <div className='bg-white px-3 pt-3 pb-2 border border-dark rounded-1 ps-3'>\n <h2 className='h5'>{props.title}</h2>\n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n onItemClick={() => setIsExpanded(false)}\n />\n </div>\n )}\n <div className={styles.container}>\n <IconButton\n className='btn btn-outline-dark'\n svgName={cvSvgLibrary.TableOfContents}\n onClick={onClickIcon}\n />\n </div>\n </div>\n );\n}\n\nfunction TableOfContents(props: TableOfContentsProps): JSX.Element {\n return (\n <aside className='col-3 order-1'>\n <div className={`${styles.container} ps-3`}>\n <h2 className='h5'>{props.title}</h2>\n \n <TableOfContentsList\n items={props.widgets.map(widget => (\n { name: widget.name, id: widget.id, tocIndentation: widget.metadata.tocIndentation }\n ))}\n activeId={props.activeId}\n appLink={props.appLink}\n analyticsData={props.analyticsData}\n setControlledId={props.setControlledId}\n getAppLink={props.getAppLink}\n />\n </div>\n </aside>\n );\n}\n\nexport function TableOfContentsContainer(props: TableOfContentsContainerProps): JSX.Element {\n function getAppLink(widget: CuratedWidget): Core.AppLink {\n const currentAppLink = ContextService.getCurrentRoute().appLink;\n \n const params: HashObject = currentAppLink.params\n ? { ...(currentAppLink.params as HashObject) }\n : {};\n\n params.tocId = widget.id;\n\n return {\n ...currentAppLink,\n params\n };\n }\n\n return (\n <>\n {!props.isSmallScreen\n ? <TableOfContents {...props} getAppLink={getAppLink} />\n : <TableOfContentsMobile {...props} getAppLink={getAppLink} />\n }\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'subjects.teacherOnlyEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface TeacherOnlyEmptyStateProps {\n imageUrl: string;\n ctaAppLink?: () => Core.AppLink;\n}\n\nexport function TeacherOnlyEmptyState(props: TeacherOnlyEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('heading')} />\n <EmptyState.Heading>\n <Text phrase='heading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text phrase='info' />\n </EmptyState.Info>\n\n <EmptyState.Cta\n text={getPhrase('cta')}\n appLink={props.ctaAppLink?.()}\n className='btn btn-dark'\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionButton } from 'libs/shared/components/actions/ActionButton';\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';\nimport { Classification } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'subjects.classificationComingSoon';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ComingSoonProps {\n data: Classification;\n onToggleFollow?: () => void;\n canFollowSubjects: boolean;\n imageUrl: string;\n showFollowButtonSpinner: boolean;\n showSignUp: boolean;\n signUpAppLink: Core.AppLink;\n}\n\nexport function ClassificationComingSoon(props: ComingSoonProps): JSX.Element {\n const isFollowing = !!props.data.followers?.data?.length;\n function onClick(): void {\n props.onToggleFollow?.();\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState className='pt-0'>\n <EmptyState.Image src={props.imageUrl} altText={getPhrase('comingSoon')} />\n\n <EmptyState.Heading>\n <Text phrase='comingSoon' />\n </EmptyState.Heading>\n\n <EmptyState.Info>\n <Text phrase={props.showSignUp ? 'infoAnon' : 'info'} />\n </EmptyState.Info>\n\n {props.canFollowSubjects && (\n <ActionButton\n svgName={isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell}\n onClick={onClick}\n showSpinner={props.showFollowButtonSpinner}\n className={`btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'}`}\n >\n <Text phrase={isFollowing ? 'following' : 'follow'} />\n </ActionButton>\n )}\n\n {props.showSignUp && !props.canFollowSubjects && (\n <AppLink\n appLink={props.signUpAppLink}\n className='btn btn-dark d-none d-lg-inline-block'\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.ClassificationComingSoon,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n analyticsData={{}}\n tag='button'\n >\n {getPhrase('signUp')}\n </AppLink>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { Core } from 'libs/common/core';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item/AudienceItem';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\n\nconst namespace = 'subjects.audienceFilter';\n\ninterface AudienceFilterProps {\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n disabled?: boolean;\n appLink: Core.AppLink;\n disablePersist?: boolean;\n tooltip?: string;\n}\n\nexport function AudienceFilter(props: AudienceFilterProps): React.ReactElement {\n const { audiences, activeAudiences, appLink } = props;\n\n const isDisabled = props.disabled || !appLink;\n\n const [ , setActiveAudiences ] = useViewModel<PresentationAudience[]>(\n SharedViewModelKeys.AUDIENCE_FILTER,\n undefined,\n { storage: StorageType.SessionStorage }\n );\n\n React.useEffect(() => {\n if (!props.disablePersist)\n setActiveAudiences(activeAudiences);\n }, [activeAudiences]);\n\n function onToggleAudience(audience: PresentationAudience, isSelected: boolean): void {\n if (isDisabled)\n return;\n\n const activeAudienceNames = isSelected\n ? [ ...(activeAudiences?.map(a => a.name) ?? []), audience.name ]\n : activeAudiences.map(a => a.name).filter(name => name !== audience.name);\n\n const getParams = () => {\n const otherParams = ObjectHelper.omit(appLink.params, ['a']);\n\n if (!activeAudienceNames.length)\n return otherParams;\n\n return Object.assign({}, otherParams, { a: activeAudienceNames });\n };\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params: getParams()\n }, { replace: true });\n }\n\n function onClickClearAudiences(): void {\n if (isDisabled)\n return;\n\n const params = ObjectHelper.omit(appLink.params, ['a']);\n\n Core.AppLinkHelper.trigger({\n ...appLink,\n params\n }, { replace: true });\n }\n\n if (!audiences || !audiences.length)\n return <></>;\n\n return (\n <Tooltip title={props.tooltip} spanHack>\n <div className='d-flex flex-wrap row-gap-2'>\n {audiences.map((a: PresentationAudience) => (\n <AudienceItem\n key={a.masterId}\n audience={a}\n highlight={!isDisabled && !!activeAudiences?.find(aa => aa.masterId === a.masterId)}\n setAudience={onToggleAudience}\n isDisabled={isDisabled}\n />\n ))}\n {(!isDisabled && !!activeAudiences && !!Object.keys(activeAudiences).length) && (\n <DivButton className='info-link d-inline-block ms-1' onClick={onClickClearAudiences}>\n <Text namespace={namespace} phrase='clear' />\n </DivButton>\n )}\n </div>\n </Tooltip>\n );\n}\n\nconst PARTIAL_AUDIENCES = PartialLoadingHelper.getPartialLoadingItems({ numItems: 6 });\n\nexport const PartialAudienceFilter = () => (\n <div className={'d-flex flex-wrap row-gap-2'}>\n {PARTIAL_AUDIENCES.map(({ width }, idx) => (\n <span\n key={idx}\n className='rounded-pill partial-loading-background me-1'\n dangerouslySetInnerHTML={{ __html: ' ' }}\n style={{ width }}\n />\n ))}\n </div>\n);","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { AudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\ninterface ClassificationDashboardAudiencesProps {\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n appLink: Core.AppLink;\n disabled: boolean;\n disablePersist: boolean;\n tooltip: string;\n}\n\nexport function ClassificationDashboardAudiences(props: ClassificationDashboardAudiencesProps): JSX.Element {\n return (\n <AudienceFilter\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n disabled={props.disabled}\n appLink={props.appLink}\n disablePersist={props.disablePersist}\n tooltip={props.tooltip}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"curatedTopicTab\":\"CmVlO\",\"tabTransition\":\"rX31t\"};","import React from 'react';\n\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 { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { useProductTipsContext } from 'libs/shared/context/product-tips-context/ProductTipsContext';\nimport { Breakpoints, useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, Presentation } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { useDirectoryTabProductTipSwitcher } from '../../../hooks/useDirectoryTabProductTipSwitcher';\n\nimport styles from './classification-tabs.scss';\n\nconst namespace = 'shared.classificationDashboard';\n\nexport type ClassificationTab = 'new-releases' | 'all-topics' | 'curated-topic' | 'curriculum';\n\nfunction getTabs(\n props: ClassificationTabsProps,\n breakpoints: Breakpoints,\n activeTab: ClassificationTab,\n isHighlighting: boolean\n): PillTab[] {\n const showText = breakpoints.lg || breakpoints.xl || breakpoints.xxl || breakpoints.xs;\n\n function getTopicTabClassName(): string {\n let className = isHighlighting ? styles.tabTransition : '';\n\n if (breakpoints.xs)\n return className + ' w-100';\n\n if (showText)\n return className = ` ${styles.curatedTopicTab}`;\n\n return className;\n }\n\n if (TopicsHelper.isTopLevelTopic(props.classification)) {\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'newReleases') : '',\n appLink: props.appLinks?.classification?.(props.classification),\n active: activeTab === 'new-releases',\n svgName: cvSvgLibrary.Sparkle,\n analyticsData: {\n id: 'new-releases',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'newReleases'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'allTopics') : '',\n appLink: props.appLinks?.classificationDirectory?.(props.classification),\n active: activeTab === 'all-topics',\n svgName: cvSvgLibrary.Grid,\n analyticsData: {\n id: 'all-topics',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'allTopics'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationDirectory?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n }\n\n return [{\n name: showText ? LanguageService.getPhrase(namespace, 'topic') : '',\n appLink: props.appLinks?.classification?.(props.classification),\n active: activeTab === 'curated-topic',\n svgName: cvSvgLibrary.Rectangles,\n analyticsData: {\n id: 'curated-topic',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'topic'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classification?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: getTopicTabClassName()\n }, {\n name: showText ? LanguageService.getPhrase(namespace, 'curriculum') : '',\n appLink: props.appLinks?.classificationCurriculum?.(props.classification),\n active: activeTab === 'curriculum',\n svgName: cvSvgLibrary.GraduationCap,\n analyticsData: {\n id: 'curriculum',\n classificationId: props.classification.id,\n classificationName: props.classification.name,\n presentationId: props.presentation.id,\n presentationDescription: props.presentation.description,\n name: LanguageService.getPhrase(namespace, 'curriculum'),\n url: Core.AppLinkHelper.getHref(props.appLinks?.classificationCurriculum?.(props.classification))\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n },\n className: `${breakpoints.xs ? 'w-100' : ''} ${isHighlighting ? styles.tabTransition : ''}`\n }];\n}\n\ninterface ClassificationTabsProps {\n classification: Classification;\n presentation: Presentation;\n appLinks: {\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n };\n activeTab: ClassificationTab;\n}\n\nexport function ClassificationTabs(props: ClassificationTabsProps): JSX.Element {\n const breakpoints = useBreakpoints();\n const { tab, isHighlighting } = useDirectoryTabProductTipSwitcher(props.activeTab);\n\n const { setProductTipRef } = useProductTipsContext('topics-directory-tab');\n\n return (\n <PillTabSelector\n borderRadius='sm'\n containerRef={el => setProductTipRef(el)}\n className={breakpoints.xs ? 'w-100' : ''}\n listClassName='d-flex flex-nowrap'\n tabs={getTabs(props, breakpoints, tab, isHighlighting)}\n />\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { Breadcrumb, Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { Classification, CuratedDashboard, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationDashboardAudiences } from '../audiences/ClassificationDashboardAudiences';\nimport { ClassificationTab, ClassificationTabs } from '../classification-tabs/ClassificationTabs';\n\nfunction shouldHideAudiences(\n audiences: PresentationAudience[],\n activeAudiences: PresentationAudience[],\n activeTab: ClassificationTab,\n isEmpty: boolean,\n isComingSoon: boolean\n): boolean {\n if (isComingSoon)\n return true;\n\n if (isEmpty && !activeAudiences?.length)\n return true;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return true;\n\n if (activeTab === 'curriculum')\n return true;\n\n return false;\n}\n\ninterface ClassificationDashboardNavProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n appLinks: {\n audience: () => Core.AppLink;\n classification: (classification: Classification | null) => Core.AppLink;\n classificationDirectory: (classification: Classification) => Core.AppLink;\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n };\n activeTab: ClassificationTab;\n audiences: PresentationAudience[];\n activeAudiences: PresentationAudience[];\n getBreadcrumbs: () => Breadcrumb[];\n\n hasTopicDirectoryDashboard: boolean;\n hasTopicCurriculumDashboard: boolean;\n isComingSoon: boolean;\n isEmpty: boolean;\n isViewingCurrentPresentation: boolean;\n disableAudiences: boolean;\n audienceTooltip: string;\n}\n\nexport function ClassificationDashboardNav(props: ClassificationDashboardNavProps): JSX.Element {\n const breakpoints = useBreakpoints();\n\n const hideAudiences = shouldHideAudiences(\n props.audiences,\n props.activeAudiences,\n props.activeTab,\n props.isEmpty,\n props.isComingSoon\n );\n\n function canShowTabs(): boolean {\n if (!props.classification || !props.dashboard)\n return false;\n\n if (CuratedDashboardHelper.isSystemGeneratedDashboard(props.dashboard.widgets))\n return false;\n\n /**\n * For our top-level topics, we can show the topic tab if the topic has a directory dashboard.\n */\n if (TopicsHelper.isTopLevelTopic(props.classification))\n return props.hasTopicDirectoryDashboard;\n\n /**\n * For our curated topics, we can show the curriculum tab if the topic has one, which it should\n */\n if (props.classification.externalMetadata?.isCurated && props.hasTopicCurriculumDashboard)\n return true;\n\n return false;\n }\n\n function getContainerClass(): string {\n let className = 'd-flex flex-column py-3 mb-3';\n\n if (!props.isComingSoon)\n className += ' border-bottom';\n\n if ((canShowTabs() || hideAudiences) && !breakpoints.xs)\n return className;\n\n return className + ' row-gap-3';\n }\n\n function getTopRowClass(): string {\n if (hideAudiences) {\n if (breakpoints.xs)\n return 'd-flex flex-column justify-content-between row-gap-3';\n\n return 'd-flex align-items-center justify-content-between';\n }\n\n let className = '';\n\n className += 'd-flex align-items-center justify-content-between mb-1';\n\n if (breakpoints.xs)\n className += ' row-gap-3 mb-0';\n\n return className;\n }\n\n function getBottomRowClass(): string {\n let className = 'd-flex align-items-end justify-content-between';\n\n if (breakpoints.xs)\n className += ' row-gap-3 flex-wrap';\n\n return className;\n }\n\n return (\n <div className={getContainerClass()}>\n <div className={getTopRowClass()}>\n <Breadcrumbs breadcrumbs={props.getBreadcrumbs?.()} />\n\n {canShowTabs() && hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\n />\n )}\n </div>\n\n <div className={getBottomRowClass()}>\n {!hideAudiences && (\n <ClassificationDashboardAudiences\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n appLink={props.appLinks.audience?.()}\n disabled={props.disableAudiences}\n tooltip={props.audienceTooltip}\n disablePersist={!props.isViewingCurrentPresentation}\n />\n )}\n\n {canShowTabs() && !hideAudiences && (\n <ClassificationTabs\n classification={props.classification}\n activeTab={props.activeTab}\n appLinks={props.appLinks}\n presentation={props.presentation}\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';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsOptions, HashObject, LocationContext } from 'libs/analytics/interfaces';\n\nimport { ClassificationHeaderDetails } from 'libs/shared/apps/subjects/components/classification-dashboard/classification-header-details/ClassificationHeaderDetails';\nimport { CuratedClassificationEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/empty-state/CuratedClassificationEmptyState';\nimport { TableOfContentsContainer } from 'libs/shared/apps/subjects/components/classification-dashboard/table-of-contents/TableOfContents';\nimport { TeacherOnlyEmptyState } from 'libs/shared/apps/subjects/components/classification-dashboard/teacher-only/TeacherOnlyEmptyState';\nimport { useGetTopicsWidgets } from 'libs/shared/apps/subjects/hooks/useGetTopicsWidgets';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoList } from 'libs/shared/components/video-list/VideoList';\nimport { WidgetHeader } from 'libs/shared/components/widgets/curated-widgets/components/header/WidgetHeader';\nimport { WidgetContainerView } from 'libs/shared/components/widgets/curated-widgets/WidgetContainerView';\nimport { AllClassificationWidgetTemplates } from 'libs/shared/components/widgets/curated-widgets/WidgetProps';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { LocalPermissionName } from 'libs/shared/enums/PermissionName';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { HasLocalPermissionsFunc, HasPermissionsFunc } from 'libs/shared/hooks/usePermissions';\nimport { useTableOfContentsActiveHeading } from 'libs/shared/hooks/useTableOfContentsActiveHeading';\nimport { useTableOfContentsScroll } from 'libs/shared/hooks/useTableOfContentsScroll';\nimport { CalendarEvent, CalendarEventContentType, Classification, CuratedDashboard, CuratedWidget, CuratedWidgetQueryParams, CurriculumData, DashboardStatus, DashboardTargetType, InteractiveMetadata, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { CommonVideoProps } from 'libs/shared/interfaces/CommonVideoProps';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ClassificationComingSoon } from './classification-coming-soon/ClassificationComingSoon';\nimport { ClassificationDashboardNav } from './classification-dashboard-nav/ClassificationDashboardNav';\nimport { ClassificationTab } from './classification-tabs/ClassificationTabs';\n\nconst namespace = 'shared.classificationDashboard';\n\nfunction isHeadingWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.Blurb && widget.templateId === WidgetTemplate.Heading;\n}\n\nfunction isTopicWidget(widget: CuratedWidget) {\n return widget.widgetId === WidgetTypeId.CuratedClassifications || widget.widgetId === WidgetTypeId.Classifications;\n}\n\nexport interface ClassificationDashboardProps {\n dashboard: CuratedDashboard;\n classification: Classification;\n presentation: Presentation;\n hasPermissions: HasPermissionsFunc;\n hasLocalPermissions: HasLocalPermissionsFunc;\n resourceThumbnailFallbackImageUrl: string;\n hasTopicDirectoryDashboard: boolean;\n hasTopicCurriculumDashboard: boolean;\n isTertiaryCustomerWithoutExchange: boolean;\n tab: ClassificationTab;\n specialEvent?: CalendarEvent;\n curriculums: CurriculumData;\n\n audiences: PresentationAudience[];\n activeAudiences?: PresentationAudience[];\n\n getWidgetContentRequest: (\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => Flight.Request;\n\n getBannerActions?: () => ActionOptions[];\n getBreadcrumbs?: () => Breadcrumb[];\n onToggleFollow?: (classification: Classification, locationContext: LocationContext) => void;\n canFollowSubjects: boolean;\n onSubmitFeedback?: (feedback: DashboardFeedbackData) => Promise<void>;\n\n appLinks?: AllClassificationWidgetTemplates['appLinks'] & {\n signUp: () => Core.AppLink;\n widgetWizard: () => Core.AppLink;\n previewQuestions: (interactive: InteractiveMetadata) => Core.AppLink\n classificationCurriculum: (classification: Classification) => Core.AppLink;\n audience: () => Core.AppLink;\n };\n\n imageCdnUrl: string\n emptyImageUrl: string;\n comingSoonImageUrl?: string;\n\n analyticsOptions?: AnalyticsOptions;\n analyticsData?: HashObject;\n\n scrollToWidgetId?: string;\n tableOfContentsId?: string;\n\n // Means the dashboard contains no linked or working filters\n isReadonly?: boolean;\n\n // Means the dashboard is being previewed by ClickView staff either in product or in curator\n isPreviewing?: boolean;\n\n // Means the parent topic for the dashboard has a status of \"Coming Soon\"\n isComingSoon?: boolean;\n\n showFollowButtonSpinner?: boolean;\n \n isViewCurrentPresentation?: boolean;\n\n // By default widgets will always be lazyloaded. We override this behaviour only in extenuating \n // circumstances, such as dynamic rendering for SEO.\n lazyLoad?: boolean;\n\n moviesAndTv?: boolean;\n\n isTeacherOnly?: boolean;\n \n contentType?: CalendarEventContentType;\n\n isBot?: boolean;\n\n settings?: AllClassificationWidgetTemplates['settings'];\n\n commonVideoProps: CommonVideoProps;\n}\n\nClassificationDashboard.defaultProps = {\n appLinks: {}\n};\n\nexport function ClassificationDashboard(props: ClassificationDashboardProps): JSX.Element {\n const { widgets, videoList, videoListWidgetId } = useGetTopicsWidgets(props.dashboard, props.activeAudiences);\n\n const isSmallScreen = useMediaQuery(MediaQueryStrings.LGDown);\n const headingRef = React.useRef<Set<Element>>(new Set());\n\n const initialEmptyWidgets = React.useMemo(() => {\n return widgets.reduce((acc: HashObject<boolean>, widget) => {\n acc[widget.id] = false;\n return acc;\n }, {});\n }, [widgets?.length]);\n\n const [ emptyWidgets, setEmptyWidgets ] = React.useState(initialEmptyWidgets);\n\n const [ controlledId, setControlledId ] = React.useState(props.tableOfContentsId);\n\n const [ tableOfContentActiveId, setTableOfContentActiveId ] = React.useState<string>('');\n\n const headingElements = Array.from(headingRef.current);\n useTableOfContentsScroll(headingElements, controlledId);\n useTableOfContentsActiveHeading({\n setActiveId: setTableOfContentActiveId,\n headingElements,\n controlledId,\n setControlledId\n });\n\n function shouldShowEmptyState(): boolean {\n if (props.isComingSoon)\n return false;\n\n if (props.isTeacherOnly)\n return false;\n\n if (!props.dashboard)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Archived && !props.isReadonly)\n return true;\n\n if (props.dashboard.status === DashboardStatus.Draft && !props.isPreviewing)\n return true;\n\n if (!widgets?.length)\n return true;\n\n if (videoList && videoList.length)\n return false;\n\n return Object.values(emptyWidgets).every(state => !!state);\n }\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 props.activeAudiences?.map(a => a.masterId),\n props.curriculums.preferredCurriculum?.id\n );\n\n return props.getWidgetContentRequest(id, params, template);\n }\n\n const showEmptyState = shouldShowEmptyState();\n\n React.useEffect(() => {\n /**\n * When we add the first widget of the dashboard, the showEmptyState is `true`, the WidgetContainer is not going to be rendered to lazyload the `content`\n * so we set the emptyWidget to initial make sure the widget container is rendered to lazyload `widget.content`\n * and let the WidgetContainer to re-set the empty state based on the actual `widget.content` from backend\n */\n if (showEmptyState) {\n setEmptyWidgets(initialEmptyWidgets);\n }\n }, [widgets?.length]);\n\n const onSetIsEmpty = React.useCallback((widgetId: string, isEmpty: boolean) => {\n if (emptyWidgets[widgetId] === isEmpty)\n return;\n\n const newEmptyState = {\n ...emptyWidgets,\n [widgetId]: isEmpty\n };\n\n // The logic beneath this if-block doesn't apply to classification directories. This is because\n // classification directories don't support audience filtering, so widgets should never be empty,\n // meaning headings should never be hidden.\n if (CuratedDashboardHelper.isType(props.dashboard, DashboardTargetType.ClassificationDirectory)) {\n setEmptyWidgets(newEmptyState);\n return;\n }\n\n let index = 0;\n\n /**\n * Every time a widget is identified as empty, we check each heading blurb widget\n * to see if it should be hidden. This will be the case when all widgets beneath a heading\n * (up until the next heading) are empty.\n */\n while (index < widgets.length) {\n const currentWidget = widgets[index];\n\n if (!isHeadingWidget(currentWidget)) {\n index++;\n continue;\n }\n\n let isHeadingEmpty = true;\n let subWidgetIndex = index + 1;\n\n while (isHeadingEmpty && subWidgetIndex < widgets.length) {\n const headingSubWidget = widgets[subWidgetIndex];\n\n if (isHeadingWidget(headingSubWidget))\n break;\n\n if (!newEmptyState[headingSubWidget.id] && !isTopicWidget(headingSubWidget))\n isHeadingEmpty = false;\n\n subWidgetIndex++;\n }\n\n index = subWidgetIndex;\n\n newEmptyState[currentWidget.id] = isHeadingEmpty;\n }\n\n setEmptyWidgets(newEmptyState);\n }, [ emptyWidgets, widgets ]);\n\n function hideWidget(widget: CuratedWidget): boolean {\n return isHeadingWidget(widget) && emptyWidgets[widget.id];\n }\n\n function useLargeDashboardSpacing(): boolean {\n const target = CuratedDashboardHelper.getDashboardTargetType(props.dashboard);\n\n if (props.moviesAndTv || target === DashboardTargetType.ClassificationCurriculum)\n return false;\n\n return true;\n }\n\n function getWidgetHeading(widget: CuratedWidget, index: number): string {\n if (widget.widgetId === WidgetTypeId.ClassificationDashboardExternalMedia) {\n const previousWidget = widgets[index - 1];\n\n if (emptyWidgets[previousWidget.id])\n return widget.name.replace('Other videos', 'Videos');\n\n return widget.name;\n }\n\n return widget.name;\n }\n\n const widgetsInTableOfContents = widgets.filter(w => {\n return !hideWidget(w) && !!w.metadata?.showInTableOfContents;\n });\n\n const isTopicOnlyDashboard = widgets.every(isTopicWidget);\n\n const shouldShowTableOfContents = widgetsInTableOfContents.length >= 2;\n const shouldShowSideTableOfContents = shouldShowTableOfContents && !isSmallScreen;\n\n const shouldShowTopicCounts = (\n props.settings?.hasTopicDirectories &&\n TopicsHelper.isTopLevelTopic(props.classification) &&\n !props.isTertiaryCustomerWithoutExchange\n );\n\n /**\n * We don't put the .topic-dashboard class when we're in a movies and tv classification\n * because we don't want the extra padding between widgets.\n */\n return (\n <div className={`bg-white px-4 ${useLargeDashboardSpacing() ? 'dashboard-spacing-lg' : ''}`}>\n <BannerHeader\n heading={props.classification.name}\n banner={props.classification.banner}\n imageCdnUrl={props.imageCdnUrl}\n actions={props.getBannerActions?.()}\n actionsDropdownClassName='btn btn-outline-dark'\n specialEvent={props.specialEvent}\n calendarTheme={{\n background: 'bg-light-blue',\n border: 'border-light-blue'\n }}\n showComingSoon={props.isComingSoon}\n detailsComponent={shouldShowTopicCounts\n ? () => <ClassificationHeaderDetails classification={props.classification} />\n : null\n }\n />\n\n <ClassificationDashboardNav\n dashboard={props.dashboard}\n classification={props.classification}\n presentation={props.presentation}\n appLinks={props.appLinks}\n activeTab={props.tab}\n audiences={props.audiences}\n activeAudiences={props.activeAudiences}\n getBreadcrumbs={props.getBreadcrumbs}\n hasTopicDirectoryDashboard={props.hasTopicDirectoryDashboard}\n hasTopicCurriculumDashboard={props.hasTopicCurriculumDashboard}\n isComingSoon={props.isComingSoon}\n isEmpty={showEmptyState}\n isViewingCurrentPresentation={props.isViewCurrentPresentation}\n disableAudiences={isTopicOnlyDashboard || props.isReadonly}\n audienceTooltip={isTopicOnlyDashboard ? LanguageService.getPhrase(namespace, 'audienceTooltip') : ''}\n />\n\n {props.isComingSoon && (\n <ClassificationComingSoon\n imageUrl={props.comingSoonImageUrl}\n data={props.classification}\n canFollowSubjects={props.canFollowSubjects}\n showFollowButtonSpinner={props.showFollowButtonSpinner}\n onToggleFollow={() => props.onToggleFollow(props.classification, LocationContext.ClassificationComingSoon)}\n showSignUp={!props.hasLocalPermissions(LocalPermissionName.FollowComingSoonTopics)}\n signUpAppLink={props.appLinks.signUp?.()}\n />\n )}\n\n {!props.isComingSoon && (\n <div className={`${shouldShowSideTableOfContents ? 'row no-wrap' : ''}`}>\n {shouldShowTableOfContents && (\n <TableOfContentsContainer\n widgets={widgetsInTableOfContents}\n title={props.classification.name}\n activeId={tableOfContentActiveId}\n clickable={!props.isReadonly}\n analyticsData={props.analyticsData}\n setControlledId={setControlledId}\n isSmallScreen={isSmallScreen}\n />\n )}\n\n <div className={shouldShowSideTableOfContents ? 'col-9 order-0' : ''}>\n {widgets.map((widget, idx) => {\n if (hideWidget(widget))\n return <React.Fragment key={widget.id}></React.Fragment>;\n\n return (\n <WidgetContainerView\n widgetCollection={DashboardTargetType.Classification}\n headingElementRef={headingRef}\n key={widget.id}\n id={widget.id}\n name={getWidgetHeading(widget, idx)}\n description={widget.description}\n classification={props.classification}\n templateId={widget.templateId}\n widgetTypeId={widget.widgetId}\n audiences={props.audiences}\n getContentRequest={getWidgetContentRequest}\n setIsEmpty={onSetIsEmpty}\n appLinks={props.appLinks}\n presentation={props.presentation}\n analyticsData={props.analyticsData}\n isScrollToTargetWidget={props.scrollToWidgetId === widget.id}\n imageCdnUrl={props.imageCdnUrl}\n onSubmitFeedback={props.onSubmitFeedback}\n metadata={widget.metadata}\n isBot={props.isBot}\n hasTableOfContents={shouldShowSideTableOfContents}\n lazyLoad={props.lazyLoad}\n dashboardTarget={CuratedDashboardHelper.getDashboardTargetType(props.dashboard)}\n widgetIndex={idx}\n hasPermissions={props.hasPermissions}\n hasLocalPermissions={props.hasLocalPermissions}\n isPreviewing={props.isReadonly}\n contentType={props.contentType}\n resourceThumbnailFallbackImageUrl={props.resourceThumbnailFallbackImageUrl}\n onToggleFollowClassification={props.onToggleFollow}\n settings={props.settings}\n isEditing={props.isReadonly}\n isTertiaryCustomerWithoutExchange={props.isTertiaryCustomerWithoutExchange}\n commonVideoProps={props.commonVideoProps}\n curriculums={props.curriculums}\n\n // TODO: Do we actually need this shit if it wasn't even being passed in?\n limitTotalItems={false}\n seeMoreLink={null}\n onClickRemoveItem={null}\n badgeComponent={null}\n />\n );\n })}\n </div>\n\n {!!videoList?.length && (\n <>\n <WidgetHeader name={LanguageService.getPhrase(namespace, 'videos')} />\n <VideoList\n videos={videoList}\n getVideoAppLink={(video, opts) => props.appLinks.videoType(\n video,\n { ...opts, contextId: videoListWidgetId, includeContext: opts.includeContext }\n )}\n hasPermissions={props.hasPermissions}\n presentationAudiences={props.audiences}\n getPreviewQuestionsAppLink={props.appLinks.previewQuestions}\n commonVideoProps={props.commonVideoProps}\n />\n </>\n )}\n </div>\n )}\n\n {showEmptyState && (\n <CuratedClassificationEmptyState\n dashboard={props.dashboard}\n isReadonly={props.isReadonly}\n imageUrl={props.emptyImageUrl}\n addWidgetApplink={props.appLinks.widgetWizard}\n />\n )}\n\n {props.isTeacherOnly && (\n <TeacherOnlyEmptyState\n imageUrl={props.emptyImageUrl}\n ctaAppLink={() => props.appLinks.allTopics(props.classification.presentationId)}\n />\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { WidgetTypeId } from 'libs/shared/enums/WidgetTypeId';\nimport { DashboardRequests } from 'libs/shared/flight-requests/DashboardRequests';\nimport { CuratedDashboard, CuratedMediaWidget, CuratedWidget, PresentationAudience, Video } from 'libs/shared/interfaces';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\n\nexport interface Response {\n widgets: CuratedWidget[];\n\n videoList?: Video[];\n videoListWidgetId?: string;\n}\n\n/**\n * This hook helps us with custom logic for to display system generated dashboards in a slightly\n * different way.\n */\nexport function useGetTopicsWidgets(dashboard: CuratedDashboard, activeAudiences: PresentationAudience[]): Response {\n const {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget\n } = React.useMemo(() => {\n if (!dashboard) {\n return {\n isSystemGeneratedDashboard: false,\n systemGeneratedVideoWidget: null\n };\n }\n\n const isSystemGeneratedDashboard = CuratedDashboardHelper.isSystemGeneratedDashboard(dashboard.widgets);\n\n return {\n isSystemGeneratedDashboard,\n systemGeneratedVideoWidget: dashboard.widgets.find(widget => {\n return (\n widget.widgetId === WidgetTypeId.ClassificationPinnedVideos &&\n widget.templateId !== WidgetTemplate.ThumbnailVerticalList\n );\n })\n };\n }, [dashboard?.id]);\n\n const systemGeneratedVideoContent = Flight.useBasicFetch<CuratedMediaWidget<Video[]>>(\n !!systemGeneratedVideoWidget &&\n DashboardRequests.dashboardWidgetContent(\n systemGeneratedVideoWidget?.id,\n CuratedDashboardHelper.getWidgetParams(\n systemGeneratedVideoWidget.widgetId,\n systemGeneratedVideoWidget.templateId,\n CuratedDashboardHelper.getDashboardTargetType(dashboard),\n activeAudiences?.map(a => a.masterId)\n ),\n systemGeneratedVideoWidget?.templateId\n )\n );\n\n // Non system generated dashboards are returned as per usual\n if (!isSystemGeneratedDashboard)\n return { widgets: ArrayHelper.sortBy(dashboard?.widgets, 'index') };\n\n // System generated dashboard have the video widget removed and returned as a separate video list\n return {\n widgets: dashboard?.widgets?.filter(widget => {\n if (widget.widgetId !== WidgetTypeId.ClassificationPinnedVideos)\n return true;\n\n if (widget.templateId === WidgetTemplate.ThumbnailVerticalList)\n return true;\n\n return false;\n }) ?? [],\n videoList: systemGeneratedVideoContent.data?.content ?? [],\n videoListWidgetId: systemGeneratedVideoWidget?.id\n };\n}","import React from 'react';\n\nimport { PartialAudienceFilter } from 'libs/shared/apps/subjects/components/audience-filter/AudienceFilter';\nimport { PartialBannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\n\nexport function PartialClassificationDashboard(): JSX.Element {\n return (\n <div className='bg-white px-4'>\n <PartialBannerHeader />\n\n <div className='d-flex flex-column row-gap-3 py-3 mb-3 border-bottom'>\n <PartialBreadcrumbs />\n <PartialAudienceFilter />\n </div>\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nconst endpoints = {\n follow: () => `{gateway}/v1/users/me/classifications/following`,\n unfollow: (ids: string[]) => UrlHelper.urlBuilder('{gateway}/v1/users/me/classifications/following', { id: ids })\n};\n\nexport const FollowRequests = {\n /**\n * @param data - array of object ids the user is going to follow\n */\n follow(\n ids: string[],\n userId: string,\n success?: (data: string[]) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: endpoints.follow(),\n key: `follow:${ids.join(',')}`,\n type: HttpVerbs.POST,\n data: ids,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: [userId]\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n },\n\n unfollow(ids: string[], userId: string, success?: () => void, error?: () => void): Flight.Request {\n return {\n url: endpoints.unfollow(ids),\n key: `unfollow:${ids.join(',')}`,\n type: HttpVerbs.DELETE,\n formatData: () => {\n return ids.map(id => ({\n id,\n followers: {\n data: []\n }\n }));\n },\n success,\n error,\n invalidationKeys: [ ...ids.map(id => `classification:${id}`), 'my:subject:preferences', 'classifications' ]\n };\n }\n};\n","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ErrorCta, ErrorPageError } from 'libs/shared/errors/primitives/ErrorPageError';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'subjects.topicNotFoundError';\n\nexport class TopicNotFoundError extends ErrorPageError {\n constructor() {\n super('Topic doesn\\'t exist');\n }\n\n // @ts-ignore\n public get name(): string {\n return 'TopicNotFoundError';\n }\n\n // @ts-ignore\n public get heading(): string {\n return LanguageService.getPhrase(namespace, 'heading');\n }\n\n // @ts-ignore\n public get description(): string {\n return LanguageService.getPhrase(namespace, 'description');\n }\n\n // @ts-ignore\n public get cta(): ErrorCta {\n return {\n text: LanguageService.getPhrase(namespace, 'cta'),\n appLink: {\n application: AppChannels.SUBJECT,\n action: Actions.Subjects.PRESENTATION_TOPICS\n }\n };\n }\n}","// extracted by mini-css-extract-plugin\nexport default {\"followButton\":\"HlRXj\"};","import React from 'react';\n\nimport { LocationUtils } from 'libs/common/backbone/core';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, ToggleDescriptor, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { CalendarRequests } from 'libs/shared/apps/calendar/flight-request/CalendarRequests';\nimport { LibraryHelper } from 'libs/shared/apps/libraries/utils/LibraryHelper';\nimport { ClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/ClassificationDashboard';\nimport { PartialClassificationDashboard } from 'libs/shared/apps/subjects/components/classification-dashboard/partial-loading/PartialClassificationDashboard';\nimport { PreviewBanner } from 'libs/shared/apps/subjects/components/preview-banner/PreviewBanner';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { DashboardFeedbackData } from 'libs/shared/components/feedback-form/FeedbackForm';\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\nimport { ClassificationStatus } from 'libs/shared/enums/ClassificationStatus';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { WidgetTemplate } from 'libs/shared/enums/WidgetTemplate';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\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 { FollowRequests } from 'libs/shared/flight-requests/FollowRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCurationStudio } from 'libs/shared/hooks/useCurationStudio';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\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 { CalendarEvent, Classification, Config, CuratedWidgetQueryParams, CurrentUser, Customer, DashboardTargetType, Library, Presentation, PresentationAudience, RegionAlternative } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\nimport { CuratedDashboardHelper } from 'libs/shared/utils/DashboardHelper';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { TopicsHelper } from 'libs/shared/utils/topics-helper/TopicsHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useVideoActions, VideoActionsLocation } from 'shared/hooks/use-video-actions/useVideoActions';\nimport { useCommonVideoProps } from 'shared/hooks/useCommonVideoProps';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { ClassificationAppLinkHelper } from 'shared/utils/ClassificationAppLinkHelper';\nimport { InteractiveHelpers } from 'shared/utils/InteractiveHelper';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\n\nimport { useIsTertiary } from 'apps/onboarding/hooks/useIsTertiary';\nimport { SignUpHelper } from 'apps/sign-up/utils/SignUpHelper';\nimport { TopicNotFoundError } from 'apps/subjects/errors/TopicNotFoundError';\nimport { useFetchClassificationDashboard } from 'apps/subjects/hooks/useFetchClassificationDashboard';\n\nimport { ClassificationViewQueryParams, getClassificationAppLinks } from './ClassificationViewUtils';\n\nimport styles from './curated-classification-view.scss';\n\ninterface CuratedClassificationViewProps {\n id: string;\n queryParams?: ClassificationViewQueryParams;\n targetType: DashboardTargetType;\n}\n\nCuratedClassificationView.defaultProps = {\n queryParams: {}\n};\n\nconst namespace = 'subjects.classification';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function CuratedClassificationView(props: CuratedClassificationViewProps): React.ReactElement {\n const [ showFollowButtonSpinner, setShowFollowButtonSpinner ] = React.useState<boolean>(false);\n\n const alerts = useAlerts();\n const fetchAsync = Flight.useGetFetchAsync();\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const settings = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const { openInCurationStudioLabel, isUserCurator, getOpenInCurationStudioLink } = useCurationStudio();\n const curriculums = useCurriculums();\n\n const customer = Flight.useBasicFetch<Customer>(\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n currentUser.data?.isAuthenticated &&\n CustomerRequests.customer(currentUser.data.customerId)\n );\n\n const classification = Flight.useBasicFetch<Classification>(\n ClassificationRequests.classification(props.id, currentUser.data?.id)\n );\n\n const presentation = Flight.useBasicFetch<Presentation>(\n classification.data &&\n ClassificationRequests.presentationById(classification.data.presentationId)\n );\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n classification.data &&\n AudienceRequests.audiencesByPresentationId(classification.data.presentationId)\n );\n\n const specialEvent = Flight.useBasicFetch<CalendarEvent>(\n classification.data &&\n CalendarRequests.nextTopicSpecialEvent(props.id, classification.data.presentationId)\n );\n\n const libraries = Flight.useBasicFetch<Library[]>(\n currentUser.data?.isAuthenticated &&\n LibraryRequests.libraries()\n );\n\n const {\n activePresentation,\n availablePresentations,\n canAccessPresentation\n } = usePresentation();\n\n const path = Flight.useBasicFetch<Classification[]>(ClassificationRequests.path(props.id));\n\n const {\n dashboard,\n hasTopicDirectoryDashboard,\n hasTopicCurriculumDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchClassificationDashboard(props.id, props.queryParams, props.targetType);\n\n const isTertiary = useIsTertiary();\n const products = useProducts();\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n ClassificationRequests.regionAlternatives(props.id)\n );\n\n const preferredRegionAlternative = SeoHelper.getPreferredRegionAlternative(\n regionAlternatives.data,\n currentUser.data?.contentRegion\n );\n useSetPageMetadata(PageMetadataHelper.getClassificationMetadata({\n content: { classification: classification.data, dashboard: dashboard.data },\n\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({\n stripPresentationSlug: true,\n customAppLink: ClassificationAppLinkHelper.getAppLink({\n ...classification.data,\n name: preferredRegionAlternative?.name || classification.data?.name\n }, props.queryParams),\n hrefTransformer: SeoHelper.createRegionHrefTransformer(\n regionAlternatives.data,\n currentUser.data?.contentRegion\n )\n }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, () => (\n ClassificationAppLinkHelper.getAppLink(classification.data)\n ))\n }));\n\n useHandleObjectError(classification, {\n notFound: TopicNotFoundError\n });\n useDeepLinks({ id: props.id, app: 'topics' });\n\n const isViewCurrentPresentation = activePresentation?.id === presentation.data?.id;\n \n const isSmallScreen = useMediaQuery(MediaQueryStrings.MDDown);\n const isMobile = useMediaQuery(MediaQueryStrings.SMDown);\n\n const { commonVideoProps } = useCommonVideoProps({\n locationContext: LocationContext.VideoThumbnail,\n mtv: props.queryParams.mtv\n });\n const videoActions = useVideoActions({ location: VideoActionsLocation.VideoItem });\n\n const canFollowSubjects = hasPermissions(PermissionName.FollowSubjects);\n const isComingSoon = (\n classification.data?.status === ClassificationStatus.ComingSoon &&\n !isPreviewing\n );\n\n /**\n * We use the current active audiences to re-fetch content for that specific audience set.\n */\n const activeAudiences = AudienceHelper.getActiveAudiencesFromParams(audiences.data, props.queryParams);\n const activeAudienceIds = activeAudiences?.map(a => a.masterId) ?? [];\n\n const targetType = CuratedDashboardHelper.getDashboardTargetType(dashboard.data);\n\n /**\n * Following\n */\n function onToggleFollow(followedClassification: Classification, location: LocationContext) {\n if (!canFollowSubjects || !classification)\n return;\n\n const isTogglingCurrentTopic = followedClassification.id.toString() === classification.data?.id?.toString();\n\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(true);\n\n const isFollowing = TopicsHelper.isFollowing(followedClassification);\n\n const request = isFollowing\n ? FollowRequests.unfollow\n : FollowRequests.follow;\n\n fetchAsync(request([followedClassification.id], currentUser.data?.id))\n .then(() => {\n AnalyticsHelper.logUserAction(analyticsData, {\n location,\n actionType: UserAction.Follow,\n workflowPhase: WorkflowPhase.Complete,\n descriptor: isFollowing ? ToggleDescriptor.Off : ToggleDescriptor.On,\n entity: EntityType.Classification\n });\n\n if (!isTogglingCurrentTopic) {\n alerts.success(getPhrase(isFollowing ? 'unfollowed' : 'followed', { name: followedClassification.name }));\n }\n })\n .finally(() => {\n if (isTogglingCurrentTopic)\n setShowFollowButtonSpinner(false);\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 [ 'topics', 'in product feedback' ]\n )\n }, {\n reaction: feedback.type,\n feedback: feedback.content,\n location: 'Topic Footer',\n presentationName: presentation.data.description,\n presentationId: presentation.data.id,\n dashboardName: dashboard.data.name,\n dashboardId: dashboard.data.id,\n classificationName: classification.data.name,\n classificationId: classification.data.id,\n currentPageUrl: LocationUtils.GetCurrentUrl()\n }));\n\n AnalyticsHelper.logUserAction({\n feedbackType: feedback.type,\n content: feedback.content,\n presentationId: presentation.data.id,\n classificationId: classification.data.id,\n dashboardId: dashboard.data.id\n }, {\n actionType: UserAction.Submit,\n location: LocationContext.ClassificationFooter,\n entity: EntityType.Feedback,\n workflowPhase: WorkflowPhase.Complete\n });\n\n return promise;\n }\n\n function getBannerActions(): ActionOptions[] {\n const isFollowing = !!classification.data?.followers?.data?.length;\n\n if (!canFollowSubjects)\n return [];\n\n const actions: ActionOptions[] = [{\n label: isMobile ? '' : getPhrase(isFollowing ? 'following' : 'follow'),\n onClick: () => onToggleFollow(classification.data, LocationContext.Banner),\n svgName: isFollowing ? cvSvgLibrary.BellFilled : cvSvgLibrary.Bell,\n className: `btn follow-btn me-2 ${isFollowing ? 'btn-outline-dark' : 'btn-dark'} ${styles.followButton}`,\n button: true,\n tooltip: (isFollowing || isSmallScreen) ? undefined : getPhrase('followBtnTooltip'),\n showSpinner: showFollowButtonSpinner\n }];\n\n if (isUserCurator)\n actions.push({\n label: openInCurationStudioLabel,\n href: getOpenInCurationStudioLink(MasterType.Subject, classification.data?.id, presentation.data?.id),\n openInNewTab: true\n });\n \n return actions;\n }\n\n const appLinks = getClassificationAppLinks(\n classification.data,\n targetType,\n props.queryParams,\n currentUser.data\n );\n\n const breadcrumbs = useBreadcrumbs({ name: classification.data?.name });\n function getBreadcrumbs(): () => Breadcrumb[] {\n if (!canAccessPresentation(presentation.data?.id))\n return;\n\n return () => breadcrumbs;\n }\n \n /**\n * Additional topics data to be mixed in with lower-level component analytics collection\n */\n const analyticsData = {\n presentationId: presentation.data?.id,\n presentationName: presentation.data?.name,\n currentClassificationId: classification.data?.id,\n currentClassificationName: classification.data?.name,\n followingCurrentClassification: !!classification.data?.followers?.data?.length,\n activeAudienceNames: activeAudiences?.length ? activeAudiences.map(a => a.name) : null,\n activeAudienceIds: activeAudienceIds.length ? activeAudienceIds : null\n };\n\n const dataLoaded = !!config.data\n && dashboard.hasCompleted\n && !!classification.data\n && !!presentation.data\n && !!path.data\n && !!availablePresentations\n && !!audiences.data\n && specialEvent.hasCompleted;\n\n if (!dataLoaded)\n return <PartialClassificationDashboard />;\n\n return (\n <VideoActionsContext.Provider value={videoActions}>\n <div className='position-relative'>\n {!!(isPreviewing && dashboard.data) && <PreviewBanner status={dashboard.data.status} type='topic' />}\n <ClassificationDashboard\n dashboard={dashboard.data}\n classification={classification.data}\n getWidgetContentRequest={(\n id: string,\n params: CuratedWidgetQueryParams,\n widgetTemplate: WidgetTemplate\n ) => {\n const { hasTwig, hasTigtag } = LibraryHelper.hasTwigOrTigtag(libraries.data, currentUser.data);\n \n return DashboardRequests.dashboardWidgetContent(\n id,\n params,\n widgetTemplate,\n presentation.data,\n { hideTigTag: !hasTigtag, hideTwig: !hasTwig }\n );\n }}\n getBreadcrumbs={getBreadcrumbs()}\n hasPermissions={hasPermissions}\n hasLocalPermissions={hasLocalPermissions}\n presentation={presentation.data}\n curriculums={curriculums}\n onToggleFollow={onToggleFollow}\n getBannerActions={getBannerActions}\n audiences={props.queryParams.mtv ? null : audiences.data}\n activeAudiences={activeAudiences}\n analyticsData={analyticsData}\n imageCdnUrl={config.data.imageCdnUrl}\n resourceThumbnailFallbackImageUrl={ImageUrls.Fallbacks.RESOURCE_THUMBNAIL}\n emptyImageUrl={isTeacherOnly ? ImageUrls.EmptyStates.Topics.TEACHER_ONLY : ImageUrls.EmptyStates.Topics.TOPIC}\n isComingSoon={isComingSoon}\n showFollowButtonSpinner={showFollowButtonSpinner}\n comingSoonImageUrl={ImageUrls.EmptyStates.Topics.COMING_SOON}\n appLinks={{\n ...appLinks,\n signUp: SignUpHelper.getSignUpAppLink,\n widgetWizard: () => null,\n previewQuestions: interactive => InteractiveHelpers.getPreviewQuestionsAppLink(interactive)\n }}\n isPreviewing={isPreviewing}\n isViewCurrentPresentation={isViewCurrentPresentation}\n canFollowSubjects={canFollowSubjects}\n onSubmitFeedback={\n hasPermissions(PermissionName.CanSubmitFeedback) &&\n onSubmitFeedback\n }\n tableOfContentsId={props.queryParams.tocId}\n lazyLoad={!SeoHelper.isBot()}\n moviesAndTv={props.queryParams.mtv}\n isTeacherOnly={isTeacherOnly}\n specialEvent={specialEvent.data}\n isBot={SeoHelper.isBot()}\n hasTopicDirectoryDashboard={hasTopicDirectoryDashboard}\n hasTopicCurriculumDashboard={hasTopicCurriculumDashboard}\n tab={TopicsHelper.getActiveTopicTab(classification.data, props.targetType)}\n // just... one... more.. prop....\n settings={settings}\n isTertiaryCustomerWithoutExchange={isTertiary && !products?.hasProduct(ProductId.Exchange)}\n commonVideoProps={commonVideoProps}\n />\n </div>\n </VideoActionsContext.Provider>\n );\n}\n","import { useSettings } from 'libs/shared/hooks/useSettings';\nimport { DashboardTargetType } from 'libs/shared/interfaces';\n\nimport { useFetchCuratedDashboard } from 'shared/utils/DashboardHelper';\n\nimport { ClassificationViewQueryParams } from '../views/classification/ClassificationViewUtils';\n\nexport function useFetchClassificationDashboard(\n id: string,\n queryParams: ClassificationViewQueryParams,\n targetType: DashboardTargetType\n) {\n const { hasTopicDirectories, hasTopicVideoListFeature } = useSettings(null);\n\n const {\n dashboard: curatedTopicDashboard,\n isPreviewing,\n isTeacherOnly\n } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.Classification\n });\n\n const { dashboard: directoryDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationDirectory\n });\n\n const { dashboard: curriculumDashboard } = useFetchCuratedDashboard({\n classificationId: id,\n queryParams: queryParams,\n targetType: DashboardTargetType.ClassificationCurriculum\n });\n\n function getDashboard() {\n switch (targetType) {\n case DashboardTargetType.Classification:\n return curatedTopicDashboard;\n case DashboardTargetType.ClassificationDirectory:\n return directoryDashboard;\n case DashboardTargetType.ClassificationCurriculum:\n return curriculumDashboard;\n }\n }\n\n return {\n dashboard: getDashboard(),\n hasTopicDirectoryDashboard: hasTopicDirectories && !!directoryDashboard.data,\n hasTopicCurriculumDashboard: hasTopicVideoListFeature && !!curriculumDashboard.data,\n isTeacherOnly,\n isPreviewing\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["CalendarRequests","calendarEvents","from","to","presentationId","url","publicUrl","key","nextTopicSpecialEvent","classificationId","params","limit","Date","objectType","formatData","events","getPhrase","LanguageService","AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","cursorClass","className","type","onClick","FunctionHelper","role","name","disabled","split","map","s","charAt","toUpperCase","substring","join","defaultProps","DashboardStatusConfig","Dashboard","svgName","svgColorClassName","actionName","statusName","getClassName","status","darkMode","wrapperClassName","DashboardStatusBadge","SvgContainer","PreviewBanner","EmojiText","emoji","namespace","BackButton","textShadow","backToName","appLink","color","backPhrase","colorClass","textShadowClass","AppLink","size","S","RATIO","width","height","getSizeClass","heading","length","BannerHeader","banner","imageCdnUrl","actions","sortComponent","blockColourClass","specialEvent","portalContainerContext","BannerPortalContext","imageWidth","useBreakpoints","xxl","specialEventIsToday","showComingSoon","today","DateHelper","endDate","startDate","imageOptions","ratio","resizeType","ImageHelper","fallbackBaseUrl","fallbackCategoryName","containerProps","bannerClassName","style","backgroundImage","DetailsComponent","detailsComponent","logoFallbackBgClassName","getBgColorClass","PortalHelper","backButtonAppLink","backButtonText","backButtonClasses","alignLogoLeft","logo","GenericCalendarDate","body","text","month","getSpecialEventMonthText","theme","calendarTheme","Text","phrase","ComingSoonTag","LazyImage","src","backgroundColor","logoBgColour","Actions","actionsDropdownClassName","container","prevProps","nextProps","PartialBannerHeader","TabContents","tab","count","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","index","active","analyticsData","analyticsOptions","onSelect","onSelectTab","FeedbackType","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","internalServerError","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","FeedbackRequests","submitFeedback","requestData","formValues","generateCacheKey","flightObjs","obj","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useBreadcrumbs","current","match","breadcrumbs","useBuilder","COUNTRY_CODE_TAGS","C","FeedbackFormHelper","getUserInfo","currentUser","customer","id","username","email","userType","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapCountryCodeToTag","countryCode","getTags","product","hasStudentExperience","extraTags","tags","push","countryCodeTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","Separator","ClassificationHeaderDetails","TopicsHelper","classification","dashboardVideoCount","childDashboardVideoCount","dashboardResourceCount","childDashboardResourceCount","childClassificationCount","videoCount","resourceCount","options","toLocaleString","smartCount","CuratedClassificationEmptyState","isArchived","dashboard","value","EmptyState","imageUrl","altText","isReadonly","Tooltip","title","spanHack","addWidgetApplink","icon","TableOfContentsMobile","isExpanded","setIsExpanded","TableOfContentsList","items","widgets","widget","tocIndentation","metadata","activeId","setControlledId","getAppLink","onItemClick","IconButton","actionType","entity","location","AnalyticsHelper","TableOfContents","TableOfContentsContainer","currentAppLink","ContextService","tocId","isSmallScreen","TeacherOnlyEmptyState","ctaAppLink","ClassificationComingSoon","isFollowing","followers","showSignUp","canFollowSubjects","ActionButton","onToggleFollow","showSpinner","showFollowButtonSpinner","signUpAppLink","workflowPhase","descriptor","SignUp","tag","AudienceFilter","audiences","activeAudiences","setActiveAudiences","SharedViewModelKeys","undefined","storage","onToggleAudience","isSelected","otherParams","activeAudienceNames","a","filter","ObjectHelper","Object","assign","replace","disablePersist","tooltip","masterId","find","aa","keys","DivButton","PARTIAL_AUDIENCES","PartialLoadingHelper","numItems","PartialAudienceFilter","idx","dangerouslySetInnerHTML","__html","ClassificationDashboardAudiences","getTabs","breakpoints","activeTab","isHighlighting","showText","lg","xl","xs","appLinks","classificationName","presentation","presentationDescription","description","classificationDirectory","classificationCurriculum","ClassificationTabs","useDirectoryTabProductTipSwitcher","setProductTipRef","el","ClassificationDashboardNav","isEmpty","hideAudiences","isComingSoon","AudienceHelper","canShowTabs","hasTopicDirectoryDashboard","externalMetadata","isCurated","hasTopicCurriculumDashboard","getTopRowClass","Breadcrumbs","getBreadcrumbs","getBottomRowClass","disableAudiences","audienceTooltip","isViewingCurrentPresentation","isHeadingWidget","widgetId","WidgetTypeId","templateId","WidgetTemplate","isTopicWidget","ClassificationDashboard","isSystemGeneratedDashboard","systemGeneratedVideoWidget","systemGeneratedVideoContent","DashboardRequests","videoList","content","videoListWidgetId","ArrayHelper","useGetTopicsWidgets","headingRef","Set","initialEmptyWidgets","acc","emptyWidgets","setEmptyWidgets","tableOfContentsId","controlledId","tableOfContentActiveId","setTableOfContentActiveId","headingElements","getWidgetContentRequest","widgetTypeId","template","curriculums","preferredCurriculum","useTableOfContentsScroll","useTableOfContentsActiveHeading","setActiveId","showEmptyState","isTeacherOnly","isPreviewing","values","every","state","onSetIsEmpty","newEmptyState","currentWidget","isHeadingEmpty","subWidgetIndex","headingSubWidget","hideWidget","getWidgetHeading","previousWidget","target","widgetsInTableOfContents","w","showInTableOfContents","isTopicOnlyDashboard","shouldShowTableOfContents","shouldShowSideTableOfContents","shouldShowTopicCounts","settings","hasTopicDirectories","isTertiaryCustomerWithoutExchange","moviesAndTv","getBannerActions","background","border","isViewCurrentPresentation","comingSoonImageUrl","hasLocalPermissions","signUp","clickable","WidgetContainerView","widgetCollection","headingElementRef","getContentRequest","setIsEmpty","isScrollToTargetWidget","scrollToWidgetId","onSubmitFeedback","isBot","hasTableOfContents","lazyLoad","dashboardTarget","widgetIndex","hasPermissions","contentType","resourceThumbnailFallbackImageUrl","onToggleFollowClassification","isEditing","commonVideoProps","limitTotalItems","seeMoreLink","onClickRemoveItem","badgeComponent","WidgetHeader","VideoList","videos","getVideoAppLink","video","opts","videoType","contextId","includeContext","presentationAudiences","getPreviewQuestionsAppLink","previewQuestions","emptyImageUrl","widgetWizard","allTopics","PartialClassificationDashboard","endpoints","ids","UrlHelper","FollowRequests","follow","userId","success","error","HttpVerbs","invalidationKeys","unfollow","TopicNotFoundError","application","action","ErrorPageError","CuratedClassificationView","queryParams","setShowFollowButtonSpinner","alerts","fetchAsync","usePermissions","useSettings","config","ConfigRequests","UserRequests","useCurationStudio","openInCurationStudioLabel","isUserCurator","getOpenInCurationStudioLink","useCurriculums","PermissionName","isAuthenticated","CustomerRequests","ClassificationRequests","AudienceRequests","libraries","LibraryRequests","usePresentation","activePresentation","availablePresentations","canAccessPresentation","path","targetType","hasTopicVideoListFeature","curatedTopicDashboard","directoryDashboard","curriculumDashboard","getDashboard","useFetchClassificationDashboard","isTertiary","useIsTertiary","products","regionAlternatives","preferredRegionAlternative","SeoHelper","useSetPageMetadata","PageMetadataHelper","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","customAppLink","ClassificationAppLinkHelper","hrefTransformer","allowIndexing","hrefLang","useDeepLinks","app","isMobile","useCommonVideoProps","locationContext","mtv","videoActions","useVideoActions","ClassificationStatus","activeAudienceIds","followedClassification","isTogglingCurrentTopic","toString","request","then","presentationName","currentClassificationId","currentClassificationName","followingCurrentClassification","hasCompleted","VideoActionsContext","widgetTemplate","LibraryHelper","hasTwig","hasTigtag","hideTigTag","hideTwig","label","button","href","MasterType","openInNewTab","ImageUrls","SignUpHelper","interactive","InteractiveHelper","feedback","user","ProductId","reaction","dashboardName","dashboardId","currentPageUrl","promise","feedbackType","hasProduct"],"sourceRoot":""}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[9649],{7355:(e,t,n)=>{n.r(t),n.d(t,{SeriesView:()=>de});var r=n(32735),i=n(70680),a=n(81886),o=n(23481),s=n(20354),c=n(65858),l=n(67814),u=n(49935),d=n(37929),p=n(87801),m=n(1860),f=n(3534),v=n(79718),b=n(7733),h=n(51365),g=n(16714),y=n(183),E=n(23788),S=n(21750),k=n(39151),w=n(60011),P=n(31949),C=n(63719),I=n(56520),O=n(91286),j=n(60115),L=n(22902),A=n(79612),x=n(37802),T=n(80783),N=n(76753),_=n(35223),F=n(68140),V=n(14070),B=n(97291),D=n(64364);function H(e){return H="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},H(e)}function R(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,U(r.key),r)}}function U(e){var t=function(e){if("object"!=H(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=H(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==H(t)?t:t+""}function Q(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch(e){}return(Q=function(){return!!e})()}function J(e){return J=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},J(e)}function M(e,t){return M=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},M(e,t)}var W="shared.seriesNotFoundError",G=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),function(e,t,n){return t=J(t),function(e,t){if(t&&("object"==H(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,Q()?Reflect.construct(t,n||[],J(e).constructor):t.apply(e,n))}(this,t,["Series doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&M(e,t)}(t,e),n=t,(r=[{key:"name",get:function(){return"SeriesNotFoundError"}},{key:"heading",get:function(){return o.T.getPhrase(W,"heading")}},{key:"description",get:function(){return o.T.getPhrase(W,"description")}}])&&R(n.prototype,r),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,r}(D.H),Z=n(46390),z=n(10671),K=n(58321),Y=n(7179),$=n(44110),q=n(97816),X=n(10741),ee=n(33192),te=n(22490),ne=n(40254),re=n(82431),ie=n(97958),ae=n(83345),oe=n(99742),se="series.seriesEmptyState";function ce(){return r.createElement(ae.D.Provider,{value:se},r.createElement(ie.u,null,r.createElement(ie.u.Image,{src:oe.W.EmptyStates.Playlists.PLAYLIST_VIDEOS}),r.createElement(ie.u.Heading,null,r.createElement(ae.x,{phrase:"heading"}))))}var le=o.T.encloseNamespace("shared.series"),ue=function(e){return b.o[e.name.charCodeAt(0)%b.o.length]};function de(e){var t,n,o,b=(0,i.I0)(),D=(0,K.U)({locationContext:c.LZ.VideoThumbnail}).commonVideoProps,H=(0,L.T)(),R=H.hasPermissions,U=H.hasLocalPermissions,Q=(0,x.r)(null),J=Q.hasShareFlowV2,M=Q.hasClassrooms,W=(0,Z.G)().isPlugin,ie=(0,I.R0)(),ae=ie.openInCurationStudioLabel,oe=ie.isUserCurator,se=ie.getOpenInCurationStudioLink;(0,Y.P)({id:e.id,app:"series",shareId:e.shareId});var de=s.a.useBasicFetch(k.L.config()),pe=s.a.useBasicFetch(P.N.currentUser()),me=s.a.useBasicFetch(e.shareId?w.J.sharedSeries(e.id,e.shareId):w.J.series(e.id)),fe=(0,$.i)();(0,A.M)(N.CG.getSeriesMetadata({content:me.data,phraseContext:{phraseHandler:le,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:ee.f.getCanonicalLink({stripPresentationSlug:!0,customAppLink:re.j.getSeriesAppLink(me.data)}),allowIndexing:ee.f.allowIndexing()}));var ve=(0,z._)({location:z.i.VideoItem,shareId:e.shareId}),be=s.a.useBasicFetch(e.classificationId&&S.x.path(e.classificationId)),he=T.z.hideAssignButton(pe.data,M);function ge(e){return!ee.f.isBot()||!e}function ye(t){var n;return ge(t)?w.J.seriesVideos(e.id,null===(n=pe.data)||void 0===n?void 0:n.id,Se,t):null}function Ee(e){return s.a.getFetch(b)(ye(e))}var Se=!!pe.data&&F.d.getOrSetSortType(pe.data.id,e.sort,E.D.Series),ke={classificationId:e.classificationId,mtv:e.moviesAndTv},we=(0,j.K)(!!pe.data&&ye,Ee),Pe=we.items,Ce=we.isFetching,Ie=we.nextCursor;(0,q.V)(Pe),(0,O.v)(me,{notFound:G});var Oe=!R(g.C.StudentExperience)&&U(g.E.UseSeriesActions),je=(0,C.h)({name:null===(t=me.data)||void 0===t?void 0:t.name});return r.createElement(h.M.Provider,{value:ve},r.createElement("div",{className:"px-3"},de.data&&me.data?r.createElement(l.p,{heading:me.data.name,banner:me.data.banner,imageCdnUrl:de.data.imageCdnUrl,actions:function(){var t,n,r;if(W||!Oe)return[];var i=[],a=J&&!R(g.C.StudentExperience)&&!he;return a&&i.push({label:le("assign"),appLink:ne.W.existingClassroom({entityType:"series",objectId:e.id}),svgName:_.vn.Classrooms,className:"btn btn-outline-dark me-2",button:!0}),i.push({label:!a&&le("share"),tooltip:a&&le("share"),appLink:me&&{application:B.O.SHARE,action:V.e.Share.SHARE,args:[null===(t=me.data)||void 0===t?void 0:t.id],params:{entityType:"series"}},svgName:J?_.vn.Link:_.vn.Share,className:"btn btn-outline-dark me-2 align-self-stretch",button:!0}),oe&&i.push({label:ae,href:se(null===(n=me.data)||void 0===n?void 0:n.typeId,null===(r=me.data)||void 0===r?void 0:r.id),openInNewTab:!0}),i}(),actionsDropdownClassName:"btn btn-outline-dark",blockColourClass:ue(me.data)}):r.createElement(l.v,null),r.createElement("div",null,r.createElement("div",{className:(null===(n=me.data)||void 0===n?void 0:n.description)||e.moviesAndTv&&be.data?"border-bottom py-3 mb-3":"pt-3 mb-2"},e.hideBreadCrumbs?r.createElement(r.Fragment,null):!me.data||e.classificationId&&!be.data?r.createElement(u.b2,null):r.createElement(u.Oo,{breadcrumbs:je}),r.createElement("div",{className:"d-flex align-items-center"},(null===(o=me.data)||void 0===o?void 0:o.description)&&r.createElement("div",{className:"mb-0 ".concat(e.classificationId?"pt-2":"")},r.createElement(d.D,{lines:2},function(){return r.createElement("p",{className:"mb-0 d-inline"},me.data.description)})),me.data&&r.createElement("div",{className:"ms-auto"},r.createElement(v.p,{variant:"outline-dark",type:Se,analyticsOptions:{location:c.LZ.VideoListHeader,entity:c.py.Video,actionType:c.Vw.Sort,workflowPhase:c.eu.Complete},getSortAppLink:function(e){return re.j.getSeriesAppLink(me.data,Object.assign(Object.assign({},ke),{sort:e}))}})))),Pe?0===Pe.length?r.createElement(ce,null):r.createElement(r.Fragment,null,r.createElement(f.E4,{videos:Pe,getVideoAppLink:function(t,n){var r;if(e.shareId){var i=a.Q.C$.getCurrentAppLink();return Object.assign(Object.assign({},i),{params:{videoId:t.id,contextId:e.id,context:y.Q.Series}})}var o=Object.assign(Object.assign({},n),{context:y.Q.Series,contextId:e.id,moviesAndTv:e.moviesAndTv||void 0,includeContext:null===(r=pe.data)||void 0===r?void 0:r.isAuthenticated});return te.W.getAppLink(t,o)},hasPermissions:R,presentationAudiences:e.moviesAndTv?null:fe.data,getPreviewQuestionsAppLink:function(e){return X.j.getPreviewQuestionsAppLink(e)},commonVideoProps:D}),(Ce||Ie)&&ge(Ie)&&r.createElement(p._,{isFetching:Ce,fetchNext:Ee,nextCursor:Ie})):r.createElement(m.S,null))))}}}]);
|
|
2
|
-
//# sourceMappingURL=9649-0225d5a4c7-lite.chunk.js.map
|