@clickview/lite 0.48.0-rc.2 → 0.48.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1197-52bedf8583-lite.chunk.js → 1197-bc02ba8644-lite.chunk.js} +2 -2
- package/dist/scripts/1197-bc02ba8644-lite.chunk.js.map +1 -0
- package/dist/scripts/{1285-e93a3f21ba-lite.chunk.js → 1285-746158eef6-lite.chunk.js} +2 -2
- package/dist/scripts/{1285-e93a3f21ba-lite.chunk.js.map → 1285-746158eef6-lite.chunk.js.map} +1 -1
- package/dist/scripts/1628-3104bf944c-lite.chunk.js +2 -0
- package/dist/scripts/1628-3104bf944c-lite.chunk.js.map +1 -0
- package/dist/scripts/{170-f48bfc1128-lite.chunk.js → 170-bf0dd6b8ae-lite.chunk.js} +3 -3
- package/dist/scripts/170-bf0dd6b8ae-lite.chunk.js.map +1 -0
- package/dist/scripts/227-c82ab0d861-lite.chunk.js +2 -0
- package/dist/scripts/227-c82ab0d861-lite.chunk.js.map +1 -0
- package/dist/scripts/{2469-c504f7a87d-lite.chunk.js → 2469-34d8afaeb3-lite.chunk.js} +2 -2
- package/dist/scripts/{2469-c504f7a87d-lite.chunk.js.map → 2469-34d8afaeb3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2679-6c0646cc30-lite.chunk.js → 2679-269830f57c-lite.chunk.js} +2 -2
- package/dist/scripts/2679-269830f57c-lite.chunk.js.map +1 -0
- package/dist/scripts/{2734-a792d5393b-lite.chunk.js → 2734-9533718178-lite.chunk.js} +2 -2
- package/dist/scripts/2734-9533718178-lite.chunk.js.map +1 -0
- package/dist/scripts/{2851-e79b075ea9-lite.chunk.js → 2851-c0655d1a1d-lite.chunk.js} +2 -2
- package/dist/scripts/2851-c0655d1a1d-lite.chunk.js.map +1 -0
- package/dist/scripts/{3157-327cefda57-lite.chunk.js → 3157-730ff8b0ce-lite.chunk.js} +2 -2
- package/dist/scripts/3157-730ff8b0ce-lite.chunk.js.map +1 -0
- package/dist/scripts/{3158-7cff145fc4-lite.chunk.js → 3158-fbc814c471-lite.chunk.js} +2 -2
- package/dist/scripts/3158-fbc814c471-lite.chunk.js.map +1 -0
- package/dist/scripts/{5442-eecab1d715-lite.chunk.js → 5442-2326dc9418-lite.chunk.js} +2 -2
- package/dist/scripts/{5442-eecab1d715-lite.chunk.js.map → 5442-2326dc9418-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5591-a4850980ea-lite.chunk.js → 5591-90c4fa0949-lite.chunk.js} +2 -2
- package/dist/scripts/5591-90c4fa0949-lite.chunk.js.map +1 -0
- package/dist/scripts/{5940-3ddc297b7a-lite.chunk.js → 5940-634de60f9b-lite.chunk.js} +2 -2
- package/dist/scripts/5940-634de60f9b-lite.chunk.js.map +1 -0
- package/dist/scripts/{6274-7d4c6ba241-lite.chunk.js → 6274-473fcd2e63-lite.chunk.js} +2 -2
- package/dist/scripts/{6274-7d4c6ba241-lite.chunk.js.map → 6274-473fcd2e63-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7172-2d87ce76a3-lite.chunk.js → 7172-960e49b199-lite.chunk.js} +2 -2
- package/dist/scripts/7172-960e49b199-lite.chunk.js.map +1 -0
- package/dist/scripts/7180-79ada17b34-lite.chunk.js +2 -0
- package/dist/scripts/7180-79ada17b34-lite.chunk.js.map +1 -0
- package/dist/scripts/{7301-44362a7b42-lite.chunk.js → 7301-50cf0faef7-lite.chunk.js} +2 -2
- package/dist/scripts/{7301-44362a7b42-lite.chunk.js.map → 7301-50cf0faef7-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7915-afd2304b08-lite.chunk.js → 7915-44db39c137-lite.chunk.js} +2 -2
- package/dist/scripts/7915-44db39c137-lite.chunk.js.map +1 -0
- package/dist/scripts/{8025-d7a573aca0-lite.chunk.js → 8025-24e45dc3b7-lite.chunk.js} +2 -2
- package/dist/scripts/8025-24e45dc3b7-lite.chunk.js.map +1 -0
- package/dist/scripts/{8258-6c86ad1fa4-lite.chunk.js → 8258-02d619de75-lite.chunk.js} +2 -2
- package/dist/scripts/{8258-6c86ad1fa4-lite.chunk.js.map → 8258-02d619de75-lite.chunk.js.map} +1 -1
- package/dist/scripts/8906-0821b0babe-lite.chunk.js +3 -0
- package/dist/scripts/8906-0821b0babe-lite.chunk.js.map +1 -0
- package/dist/scripts/{9212-d73ddd1ae6-lite.chunk.js → 9212-445b6499cb-lite.chunk.js} +2 -2
- package/dist/scripts/9212-445b6499cb-lite.chunk.js.map +1 -0
- package/dist/scripts/{9557-580fd7d743-lite.chunk.js → 9557-1ba0323e44-lite.chunk.js} +2 -2
- package/dist/scripts/{9557-580fd7d743-lite.chunk.js.map → 9557-1ba0323e44-lite.chunk.js.map} +1 -1
- package/dist/scripts/bundle-058c7cee3f.min.js +3 -0
- package/dist/scripts/bundle-058c7cee3f.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1197-52bedf8583-lite.chunk.js.map +0 -1
- package/dist/scripts/1628-58b55d05b5-lite.chunk.js +0 -2
- package/dist/scripts/1628-58b55d05b5-lite.chunk.js.map +0 -1
- package/dist/scripts/170-f48bfc1128-lite.chunk.js.map +0 -1
- package/dist/scripts/227-fb7b36b41a-lite.chunk.js +0 -2
- package/dist/scripts/227-fb7b36b41a-lite.chunk.js.map +0 -1
- package/dist/scripts/2679-6c0646cc30-lite.chunk.js.map +0 -1
- package/dist/scripts/2734-a792d5393b-lite.chunk.js.map +0 -1
- package/dist/scripts/2851-e79b075ea9-lite.chunk.js.map +0 -1
- package/dist/scripts/3157-327cefda57-lite.chunk.js.map +0 -1
- package/dist/scripts/3158-7cff145fc4-lite.chunk.js.map +0 -1
- package/dist/scripts/5591-a4850980ea-lite.chunk.js.map +0 -1
- package/dist/scripts/5940-3ddc297b7a-lite.chunk.js.map +0 -1
- package/dist/scripts/7172-2d87ce76a3-lite.chunk.js.map +0 -1
- package/dist/scripts/7180-b29d70e9d8-lite.chunk.js +0 -2
- package/dist/scripts/7180-b29d70e9d8-lite.chunk.js.map +0 -1
- package/dist/scripts/7915-afd2304b08-lite.chunk.js.map +0 -1
- package/dist/scripts/8025-d7a573aca0-lite.chunk.js.map +0 -1
- package/dist/scripts/8906-49532e8ec3-lite.chunk.js +0 -3
- package/dist/scripts/8906-49532e8ec3-lite.chunk.js.map +0 -1
- package/dist/scripts/9212-d73ddd1ae6-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-0fbdccea0d.min.js +0 -3
- package/dist/scripts/bundle-0fbdccea0d.min.js.map +0 -1
- /package/dist/scripts/{170-f48bfc1128-lite.chunk.js.LICENSE.txt → 170-bf0dd6b8ae-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8906-49532e8ec3-lite.chunk.js.LICENSE.txt → 8906-0821b0babe-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-0fbdccea0d.min.js.LICENSE.txt → bundle-058c7cee3f.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5940],{91200:(e,t,n)=>{n.d(t,{Y:()=>c});var a=n(32735),r=n(68050),i=n(69111),o=n(84231);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function c(e){var t,n=function(e){if(Array.isArray(e))return l(e)}(t=Array(e.numItems))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.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)||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.")}(),c=e.itemClassName||"";return a.createElement(a.Fragment,null,e.showHeading&&a.createElement("div",{className:"".concat(o.Z.partialHeading," mb-1 partial-loading-background")}),a.createElement(r.Z,{className:"mx-n1 mb-n2"},n.map((function(e,t){return a.createElement(i.Z,{key:t,xs:6,sm:4,lg:3,className:"".concat(c," px-1 pb-2")},a.createElement("div",{className:"".concat(o.Z.playlistItem," partial-loading-background rounded-3")}))}))))}c.defaultProps={numItems:8}},48745:(e,t,n)=>{n.d(t,{t:()=>A});var a=n(32735),r=n(82602),i=n(23481),o=n(110),l=n(65858),c=n(83345);const s={fontSmall:"OYBRp"};var u="playlists.playlistCount";function d(e){var t=function(e){var t,n,a,r,i,o;return!!e&&(null!==(n=null===(t=e.videos)||void 0===t?void 0:t.count)&&void 0!==n?n:0)+(null!==(r=null===(a=e.interactives)||void 0===a?void 0:a.count)&&void 0!==r?r:0)+(null!==(o=null===(i=e.clips)||void 0===i?void 0:i.count)&&void 0!==o?o:0)}(e.playlist);return!1===t||Number.isNaN(t)?a.createElement(a.Fragment,null):a.createElement("span",{className:s.fontSmall},a.createElement(c.x,{namespace:u,phrase:"count",options:{smartCount:t}}))}var m=n(20789),p=n(89725),f=n(64818);function v(e){var t,n,r,i=e.playlist._liteOwner;if(null===(t=e.playlist._isClickViewCurated)||void 0===t?void 0:t.value)return a.createElement(p.F,null);if(!(null==i?void 0:i.id)||!(null===(n=e.currentUser)||void 0===n?void 0:n.id))return a.createElement(a.Fragment,null);if(i.id.toString()===e.currentUser.id.toString())return a.createElement(a.Fragment,null);var o="string"==typeof i.avatar?i.avatar:null===(r=i.avatar)||void 0===r?void 0:r.url;return a.createElement(m.q,{imageUrl:o,imageCdnUrl:e.imageCdnUrl,initials:f.l.getInitials(i.name,i.surname)})}var g=n(36848),y=n(40955),h=n(75163),b=n(5465),E=n(54610),N=n(80143),w=n(9085),C=n(67453),S=n(84231),P="playlists.playlistList";function A(e){var t,n,c=C.j.createUrl(e.data.cover&&e.data.cover.url,{size:E.h2.Medium,resizeType:E.Nq.Cover}),s=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,u=(0,N.n)(s,e.presentationAudiences),m=S.Z.playlistItem,p=!!c||!!e.showFallbackImage;p&&(m+=" ".concat(S.Z.playlistItemGradient)),!p&&e.bgColourClassNames&&(m+=" ".concat(S.Z.playlistItem," ").concat((0,w.x)(e.data.name,e.bgColourClassNames))),"round"===e.itemStyle&&(m+=" rounded-3 overflow-hidden"),"round-left"===e.itemStyle&&(m+=" rounded-start-lg overflow-hidden");var f=Object.assign(Object.assign({},e.analyticsData),{id:null===(t=e.data)||void 0===t?void 0:t.id,name:null===(n=e.data)||void 0===n?void 0:n.name}),A=Object.assign(Object.assign({},e.analyticsOptions),{entity:l.py.Playlist});return a.createElement(g.F,{appLink:e.appLink,analyticsData:f,analyticsOptions:A,title:function(){var t;return!e.data.contentModifiedDate||(null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value)?"":i.T.getPhrase(P,"lastUpdated",{timeago:(0,r.WU)(o.O.convertUTCToLocal(e.data.contentModifiedDate))})}()},a.createElement(h.Z,{data:c,alt:e.data.name,className:m},!!e.showFallbackImage&&a.createElement(b.oy,{type:b.mS.Playlist}),a.createElement("div",{className:"text-white ".concat(S.Z.playlistMetadata)},!!e.showCount&&a.createElement(d,{playlist:e.data}),a.createElement("h5",{className:"mb-0 ".concat(e.titleClassName||"")},a.createElement("span",{className:"clamp-2"},e.data.name)),!!s&&!!s.length&&!!u&&a.createElement(y.P,{className:"".concat(e.audienceLabelClass?e.audienceLabelClass:""," mt-1"),audience:u,border:"white"})),!!e.showOwner&&!!e.imageCdnUrl&&a.createElement("div",{className:S.Z.ownerAvatarContainer},a.createElement(v,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl}))))}A.defaultProps={itemStyle:"square"}},31273:(e,t,n)=>{n.d(t,{P:()=>s});var a=n(32735),r=n(68050),i=n(69111),o=n(65858),l=n(48745),c={actionType:o.Vw.Click,entity:o.py.Playlist,location:o.LZ.PlaylistListItem,descriptor:o._S.Cover};function s(e){return a.createElement(r.Z,{className:"mx-n1"},e.extraPlaylistItem&&a.createElement(i.Z,{key:"extra-playlist-item",xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},e.extraPlaylistItem),e.playlists.map((function(t){return a.createElement(i.Z,{key:t.id,xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},a.createElement(l.t,{data:t,appLink:e.getPlaylistAppLink(t),imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,presentationAudiences:e.presentationAudiences,bgColourClassNames:e.bgColourClassNames,showCount:e.showCount,showOwner:e.showOwner,showFallbackImage:e.showFallbackImage,titleClassName:e.itemTitleClassName,itemStyle:e.itemStyle,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),c)}))})))}},83657:(e,t,n)=>{n.d(t,{e:()=>s});var a=n(32735),r=n(91967),i=n(10874),o=n(76177),l=n(42735),c=n(86509);function s(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],s=[];t.forEach((function(e){e.button?n.push(e):s.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||s.length?a.createElement("div",{className:u},a.createElement(a.Fragment,null,a.createElement("span",{className:"d-flex align-items-center"},n.length?n.map((function(e,t){return a.createElement(a.Fragment,{key:t},function(){if(e.label){var t=r.q.isFunction(e.label)?e.label:function(){return a.createElement(a.Fragment,null,e.label)};return a.createElement(l.K,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,tooltip:e.tooltip,showSpinner:e.showSpinner,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled},t())}var n=a.createElement(i.h,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled});return e.tooltip?a.createElement(o.u,{title:e.tooltip,spanHack:!0},n):n}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,s.length?a.createElement(c.m,{actions:s,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)))):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),i=n(81886),o=n(45157),l=n(49985),c=n(36848),s=n(83914),u=n(76177),d=n(35223);const m={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function v(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(c.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&l.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&i.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,i="actions-dropdown-".concat(o.Y.getRandomInt()),l="dropdown-toggle px-0 ".concat(m.dropdownToggle);return e.dropdownToggleClassName&&(l+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:l,type:"button",id:i,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",onClick:t?e.fetchMore:null},a.createElement(s.x,{svgName:d.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":i},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(v,{action:e}))):a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(v,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:s.S.Small}},40955:(e,t,n)=>{n.d(t,{P:()=>r});var a=n(32735);function r(e){return e.audience?a.createElement("div",{className:"audience-label border rounded-pill d-inline-block px-2 text-nowrap \n ".concat("border-"+e.border," ").concat(e.className?e.className:"")},e.audience.name):a.createElement(a.Fragment,null)}},71020:(e,t,n)=>{n.d(t,{_:()=>u});var a=n(32735),r=n(80247),i=n(34152),o=n(83914),l=n(35223);const c={container:"VwD1b",spinner:"eJ85e"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function u(e){var t,n,u=(t=(0,i.YD)(),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,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.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)?s(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.")}()),d=u[0],m=u[1];return a.useEffect((function(){var t;e.fetchOnScroll&&m&&!e.isFetching&&(null===(t=e.fetchNext)||void 0===t||t.call(e,e.nextCursor))}),[m,e.isFetching]),a.createElement("div",{className:"p-3 text-center ".concat(c.container),ref:d},e.isFetching?a.createElement(r.Z,{as:"span",animation:"border",role:"status",className:c.spinner}):a.createElement(o.x,{svgName:l.vn.ChevronDown,className:"svg-container cursor-pointer",size:o.S.Large,onClick:function(){var t;return null===(t=e.fetchNext)||void 0===t?void 0:t.call(e,e.nextCursor)}}))}u.defaultProps={fetchOnScroll:!1}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),i=n(67058),o=n(14553),l=n(49267),c=n(49075),s={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:l.a,privacy:o.q},badRequest:c._};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 i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},s),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==a.o.NotFound?i!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new o.badRequest):n.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):n.notFound||r.Q.Ry.throw(new o.notFound))}}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var a=n(32735),r=n(50242),i=n(91967),o=400,l=n(45719);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function s(e,t,n,s,u,d){var m,p,f,v,g=(m=(0,a.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(m,p)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(m,p)||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.")}()),y=g[0],h=g[1],b=t,E=(0,l.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,u);return f={fetchNextPage:function(){if(t&&e&&E)return h((function(e){return e+1})),b(E.nextCursor)},hasMore:!!(null==E?void 0:E.nextCursor),isFetching:null==E?void 0:E.isFetching,scrollContainer:d},v=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;f.fetchNextPage()}},(0,a.useEffect)((function(){var e=i.q.throttle(v,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,a.useEffect)((function(){E&&E.shouldInitialFetch&&t&&(b(),h((function(e){return e+1})))}),[null==E?void 0:E.shouldInitialFetch,t]),(0,a.useEffect)((function(){var e,t;if((null==E?void 0:E.statusCode)&&i.q.isFunction(n)){var a=+(null===(t=null===(e=E.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));a!==r.k.ClientError&&a!==r.k.ServerError||n(y,E.statusCode)}}),[null==E?void 0:E.statusCode]),{items:null==E?void 0:E.items,hasMore:!!(null==E?void 0:E.nextCursor),nextCursor:null==E?void 0:E.nextCursor,isFetching:null==E?void 0:E.isFetching,totalItems:null==E?void 0:E.totalItems,hasFirstPageCompleted:null==E?void 0:E.hasFirstPageCompleted}}},80143:(e,t,n)=>{n.d(t,{n:()=>i});var a=n(32735),r=n(69454);function i(e,t){var n=a.useMemo((function(){return(null==e?void 0:e.length)&&t&&r.T.shouldShowAudiences(t)?r.T.getSortedPresentationAudiences(e,t):null}),[e]);return a.useMemo((function(){return(null==n?void 0:n.length)?r.T.getMergedPresentationAudienceString(n):null}),[n])}},69454:(e,t,n)=>{n.d(t,{T:()=>d});var a=n(75896),r=n(1048),i=n(55171);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var l=/\d/,c=function(e){var t,n,r=a.m.first(e),i=a.m.last(e);return r.name===i.name?r.name:"Advanced"===i.name?"lower"===(t=r.name.split(" "),n=1,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,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(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.")}())[0].toLowerCase()?"Lower Sec - Adv":"Upper Sec - Adv":"Lower - Upper Sec"},s=/([0-9]+)/gi,u=/\s|\+/gi,d={getSortedPresentationAudiences:function(e,t){var n=e.filter((function(e){return!!e})).map((function(e){return e.id.toString()}));return t.filter((function(e){return n.includes(e.masterId.toString())}))},getMergedPresentationAudienceString:function(e){var t,n,r,o="";switch(+a.m.first(e).presentationId){case i.e.PresentationIds.DEFAULT:case i.e.PresentationIds.AU_SECONDARY:case i.e.PresentationIds.US_ELEMENTARY:case i.e.PresentationIds.AU_PRIMARY:case i.e.PresentationIds.STREAMABLE_LEARNING:if(1===e.length)return e[0];o=function(e){var t=e.map((function(e){return e.name})).join(" "),n=t.split(" ").filter((function(e){return!isNaN(+e)})).map((function(e){return+e}))||[],a=t.split(" ").filter((function(e){return isNaN(+e)}))||[],r=e.find((function(e){return!l.test(e.name)})),i=a.find((function(e){return e!==(null==r?void 0:r.name)}));if(e.length>1&&(i+="s"),r&&n.length)return"".concat(i," ").concat(r.name.charAt(0)," - ").concat(n.pop());var o=function(e){var t,n,a,r,i=!1,o=[];for(e=e.sort((function(e,t){return e-t})),a=0;a<e.length;a++)r=a+1,i||(t=e[a]),n=e[r],e[a]+1===n?i=!0:i?(o.push("".concat(t," - ").concat(e[a])),i=!1):(o.push("".concat(e[a])),i=!1);return o}(n);return"".concat(i," ").concat(o.join(", "))}(e);break;case i.e.PresentationIds.SCOTLAND_PRIMARY:case i.e.PresentationIds.INTERNATIONAL_PRIMARY:case i.e.PresentationIds.INTERNATIONAL_SECONDARY:if(1===e.length)return e[0];o=function(e){var t=e.map((function(e){return e.name})),n={};t.forEach((function(e,t){if(0!==t){var a=e.split(" ");Object.keys(n).forEach((function(e){a.includes(e)||delete n[e]}))}else e.split(" ").forEach((function(e,t){n[e]=0===t?"start":"end"}))}));var a=Object.keys(n)[0],r=n[a];if(!a)return e[0].name;var i=e[0].name,o=e[e.length-1].name,l=function(e){return e.split(a)[0]},c="".concat(l(i)," - ").concat(l(o));return"start"===r?"".concat(a," ").concat(c):"".concat(c," ").concat(a)}(e);break;case i.e.PresentationIds.ENGLISH_SECONDARY:o=c(e);break;case i.e.PresentationIds.SCOTLAND_SECONDARY:t=e,n=a.m.first(t),r=a.m.last(t),o=n.name===r.name?n.name:"Senior Phase"===r.name?"".concat(n.name," - Senior"):"Third - Fourth Level";break;case i.e.PresentationIds.ENGLAND_PRIMARY:o=function(e){var t=a.m.first(e),n=a.m.last(e),r=a.m.first(t.name.split(" ")),i=a.m.first(n.name.split(" ")),o=t.name.split(" ").find((function(e){return!isNaN(+e)})),l=n.name.split(" ").find((function(e){return!isNaN(+e)}));if(t===n)return"Key"===r||"Reception"===r?t.name:"".concat(r," KS").concat(o);var c="",s="";return c="Reception"===r?"R":"KS".concat(o),s="KS".concat(l),"Lower"===r&&"Upper"===i?"L ".concat(c," - U ").concat(s):("Lower"===r&&(c="Lower ".concat(c)),"Upper"===i&&(s="Upper ".concat(s)),"Key"===i&&(s=n.name),"".concat(c," - ").concat(s))}(e);case i.e.PresentationIds.US_MIDDLE:case i.e.PresentationIds.US_HIGH:}return o?{name:o}:null},sortMembersWithDuplicateNamesByAudience:function(e){var t=function(e){return e.length?(e.forEach((function(e){var r=+a.m.first(e.name.match(s));if(!t)return t=e,void(n=r);r<n&&(t=e)})),t):null;var t,n},n={},r=[];return e.forEach((function(e){if(!n[e.name])return n[e.name]=1,void r.push(e);r.push(e),n[e.name]++;var a=r.splice(r.length-n[e.name]).sort((function(e,n){var a=t(e.subjectPresentationAudiences.data),r=t(n.subjectPresentationAudiences.data);if(!a&&r)return 1;if(!r)return-1;var i=a.name.localeCompare(r.name);return 0===i?i:i>0?-1:1}));r=r.concat(a)})),r},getActiveAudiencesFromParams:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r.t.isObject(t)&&!r.t.isEmpty(t)&&e&&e.length&&d.shouldShowAudiences(e)){var n=t.a;if(n){"string"==typeof n&&(n=[n]);var a=function(e){return e.replace(u,"").toLowerCase()},i=n.reduce((function(e,t){return e[a(t)]=t,e}),{});return e.filter((function(e){return i[a(e.name)]}))}}},getAudienceParams:function(e){return(null==e?void 0:e.length)?{a:e.map((function(e){return e.name}))}:null},shouldShowAudiences:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!!e&&e.length>1}}},5940:(e,t,n)=>{n.r(t),n.d(t,{PlaylistsView:()=>J});var a=n(32735),r=n(70680),i=n(23481),o=n(20354),l=n(65858),c=n(91200),s=n(31273),u=n(91967),d=n(76611),m=n(36848);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function f(e,t,n){var a;return a=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=p(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t),(t="symbol"==p(a)?a:a+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v="playlists.playlistSortSelect",g=u.q.memoize((function(){return f(f(f(f(f({},d.o.RecentlyUpdated,{name:i.T.getPhrase(v,"recentlyUpdated")}),d.o.AtoZ,{name:i.T.getPhrase(v,"atoz")}),d.o.ZtoA,{name:i.T.getPhrase(v,"ztoa")}),d.o.Newest,{name:i.T.getPhrase(v,"newest")}),d.o.Oldest,{name:i.T.getPhrase(v,"oldest")})}));function y(e){var t=e.type,n=e.getSortAppLink,r=e.variant,i=g();return a.createElement("div",{className:"dropdown"},a.createElement("a",{className:"btn btn-".concat(r," ms-2 dropdown-toggle"),type:"button",id:"sort-select","data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},i[t].name),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":"sort-select"},Object.values(d.o).map((function(e){var r="dropdown-item";return e===t&&(r+=" active"),a.createElement(m.F,{key:e,className:r,appLink:n(e),analyticsData:{sort:i[e].name},analyticsOptions:{location:l.LZ.PlaylistListHeader,entity:l.py.Playlists,actionType:l.Vw.Sort,workflowPhase:l.eu.Complete}},i[e].name)}))))}y.defaultProps={variant:"light"};var h=n(23257),b=n(70006),E=n(71521),N=n(83657),w=n(71020),C=n(83345),S=n(7733),P=n(16714),A=n(94644),I=n(39151),L=n(5112),k=n(31949),T=n(69883),O=n(60115),F=n(22902),x=n(79612),U=n(35223),j=n(14070),D=n(97291),M=n(44110),R=n(26323),_=n(99742);const Y={playlistMetadata:"vv8fW"};var Z="playlists.favouritesPlaylistItem",V=i.T.encloseNamespace(Z);function q(e){var t={entity:l.py.Playlist,actionType:l.Vw.Click,location:l.LZ.PlaylistListItem},n=_.W.FAVOURITES_PLAYLIST.FAV_PLAYLIST_COVER,r={application:D.O.MY_FAVOURITES,action:j.e.MyFavourites.MY_FAVOURITES};return a.createElement(m.F,{appLink:r,analyticsData:{name:"Favourites",extraItem:"user-favourites"},analyticsOptions:t,title:V("favouritesTitle")},a.createElement("div",{className:"position-relative"},a.createElement("div",{className:"text-white ".concat(Y.playlistMetadata)},!e.isLoadingCount&&a.createElement("span",null,a.createElement(C.x,{namespace:Z,phrase:"count",options:{smartCount:e.count}})),a.createElement("h5",{className:"mb-0"},a.createElement("span",{className:"clamp-2"},V("favouritesTitle")))),a.createElement("img",{src:n,className:"w-100 h-100 rounded-3"})))}var B=n(23232),H="playlists.playlistsEmptyState",$=i.T.encloseNamespace(H);function z(e){return a.createElement(C.D.Provider,{value:H},a.createElement(B.u,null,a.createElement(B.u.Image,{src:_.W.EmptyStates.Playlists.PLAYLISTS,altText:$("info")}),a.createElement(B.u.Heading,null,a.createElement(C.x,{phrase:"heading"})),a.createElement(B.u.Info,null,a.createElement(C.x,{phrase:e.isStudent?"studentInfo":"info"})),a.createElement(B.u.Cta,{text:i.T.getPhrase(H,"cta"),icon:U.vn.Plus,appLink:{application:D.O.PLAYLISTS,action:j.e.Playlists.NEW_PLAYLIST}})))}function W(){return a.createElement(C.D.Provider,{value:H},a.createElement(B.u,null,a.createElement(B.u.Image,{src:_.W.EmptyStates.Playlists.PLAYLISTS_PUBLIC,altText:$("info")}),a.createElement(B.u.Heading,null,a.createElement(C.x,{phrase:"heading"})),a.createElement(B.u.Info,null,a.createElement(C.x,{phrase:"info"})),a.createElement(B.u.Cta,{text:i.T.getPhrase(H,"publicCta"),appLink:{application:D.O.SIGN_UP,action:j.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:l.Vw.Click,location:l.LZ.PlaylistsLanding,entity:l.py.AppLink,workflowPhase:l.eu.Start,descriptor:l.Yu.SignUp}})))}var G="playlists.playlists",K=i.T.encloseNamespace(G);function Q(e){return{application:D.O.PLAYLISTS,action:j.e.Playlists.HOME,params:{sort:e}}}function J(e){var t,n=(0,r.I0)(),i=(0,T.Z)(),u=(0,F.T)(),d=u.hasLocalPermissions,m=u.hasPermissions,p=u.isLoaded,f=m(P.C.StudentExperience),v=o.a.useBasicFetch(I.L.config()),g=o.a.useBasicFetch(k.N.currentUser()),_=(0,M.i)(),Y=!!g.data&&E.A.getOrSetSortType(g.data.id,e.sort),Z=(0,R.B)(null===(t=g.data)||void 0===t?void 0:t.id),V=Z.count,B=Z.favourites,H={count:V,isLoadingCount:Z.isLoading,data:B},$=!!Y&&function(e){return L.C.getUserPlaylists(new b.l(Y,e,h.e.All))},J=!!$&&function(e){o.a.getFetch(n)($(e))};(0,x.M)({title:K("pageTitle"),description:K("pageDescription")});var X=!d(P.E.ViewPlaylistsLanding)&&Y,ee=(0,O.K)(!!X&&$,J,(function(e,t){if(1===e)return(0,A.r)(t);i.error(K("error"))})),te=ee.items,ne=ee.hasMore,ae=ee.isFetching,re=[{label:K("createPlaylist"),appLink:{application:D.O.PLAYLISTS,action:j.e.Playlists.NEW_PLAYLIST},svgName:U.vn.Plus,className:"btn btn-outline-dark",button:!0,analyticsData:{},analyticsOptions:{location:l.LZ.Banner,entity:l.py.Playlist,workflowPhase:l.eu.Start,actionType:l.Vw.Create}}],ie=!!te&&!!g.data&&!!v.data&&(!!_.data||_.hasError)&&!!p;return d(P.E.ViewPlaylistsLanding)?a.createElement(W,null):!ie||H.count||(null==te?void 0:te.length)?a.createElement("div",{className:"bg-white px-3"},a.createElement("div",{className:"d-flex justify-content-between align-items-end pb-3"},a.createElement("h1",{className:"h2 mb-0"},a.createElement(C.x,{namespace:G,phrase:"headerTitle"})),!!Y&&a.createElement(N.e,{actions:re,sortComponent:a.createElement(y,{variant:"outline-dark",type:Y,getSortAppLink:Q})})),ie?a.createElement(s.P,{playlists:te,getPlaylistAppLink:e.getPlaylistAppLink,imageCdnUrl:v.data.imageCdnUrl,currentUser:g.data,presentationAudiences:_.data||[],bgColourClassNames:S.o,itemContainerClassName:"columns-of-five",itemStyle:"round",showCount:!0,showOwner:!0,extraPlaylistItem:H.count?a.createElement(q,Object.assign({},H)):null}):a.createElement(c.Y,{itemClassName:"columns-of-five"}),ie&&(ne||ae)&&a.createElement(w._,{isFetching:ae,fetchNext:J})):a.createElement(z,{isStudent:f})}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var a=n(20354),r=n(89454),i=n(86698),o=function(){var e=(0,i.y)({redirectOnError:!0}).activePresentation;return a.a.useBasicFetch(!!e&&r.O.presentationAudiences(e.id))}},26323:(e,t,n)=>{n.d(t,{B:()=>l});var a=n(20354),r=n(63419);function i(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)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(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 o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function l(e){var t,n,o,l,c,s,u,d,m,p=a.a.useBasicFetch(e&&r.P.getFavouritesVideosCount(e)),f=a.a.useBasicFetch(e&&r.P.getFavouritesClipsCount(e)),v=a.a.useBasicFetch(e&&r.P.getFavouritesInteractivesCount(e));return{count:(null===(t=p.data)||void 0===t?void 0:t.count)+(null===(n=v.data)||void 0===n?void 0:n.count)+(null===(o=f.data)||void 0===o?void 0:o.count),favourites:[].concat(i((null===(l=p.data)||void 0===l?void 0:l.data)||[]),i((null===(c=f.data)||void 0===c?void 0:c.data)||[]),i((null===(s=v.data)||void 0===s?void 0:s.data)||[])),isLoading:!(null===(u=p.data)||void 0===u?void 0:u.data)||!(null===(d=f.data)||void 0===d?void 0:d.data)||!(null===(m=v.data)||void 0===m?void 0:m.data)}}},84231:(e,t,n)=>{n.d(t,{Z:()=>a});const a={playlistItem:"CaRJx",playlistItemGradient:"BI7p2",playlistMetadata:"eDk1l",partialHeading:"w4lWh",ownerAvatarContainer:"JImqE"}},68050:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(95685),r=n.n(a),i=n(32735),o=n(46304),l=n(74512);const c=i.forwardRef((({bsPrefix:e,className:t,as:n="div",...a},i)=>{const c=(0,o.vE)(e,"row"),s=(0,o.pi)(),u=(0,o.zG)(),d=`${c}-cols`,m=[];return s.forEach((e=>{const t=a[e];let n;delete a[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const r=e!==u?`-${e}`:"";null!=n&&m.push(`${d}${r}-${n}`)})),(0,l.jsx)(n,{ref:i,...a,className:r()(t,c,...m)})}));c.displayName="Row";const s=c},82602:(e,t,n)=>{n.d(t,{WU:()=>s});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],i={},o=function(e,t){i[e]=t},l=[60,60,24,7,365/7/12,12];function c(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var s=function(e,t,n){var a=function(e,t){return(+(t?c(t):new Date)-+c(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return i[e]||i.en_US}(t))};o("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),o("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
|
|
2
|
-
//# sourceMappingURL=5940-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5940],{91200:(e,t,n)=>{n.d(t,{Y:()=>c});var a=n(32735),r=n(68050),i=n(69111),o=n(84231);function l(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function c(e){var t,n=function(e){if(Array.isArray(e))return l(e)}(t=Array(e.numItems))||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(t)||function(e,t){if(e){if("string"==typeof e)return l(e,t);var n=Object.prototype.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)||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.")}(),c=e.itemClassName||"";return a.createElement(a.Fragment,null,e.showHeading&&a.createElement("div",{className:"".concat(o.Z.partialHeading," mb-1 partial-loading-background")}),a.createElement(r.Z,{className:"mx-n1 mb-n2"},n.map((function(e,t){return a.createElement(i.Z,{key:t,xs:6,sm:4,lg:3,className:"".concat(c," px-1 pb-2")},a.createElement("div",{className:"".concat(o.Z.playlistItem," partial-loading-background rounded-3")}))}))))}c.defaultProps={numItems:8}},48745:(e,t,n)=>{n.d(t,{t:()=>A});var a=n(32735),r=n(82602),i=n(23481),o=n(110),l=n(65858),c=n(83345);const s={fontSmall:"OYBRp"};var u="playlists.playlistCount";function d(e){var t=function(e){var t,n,a,r,i,o;return!!e&&(null!==(n=null===(t=e.videos)||void 0===t?void 0:t.count)&&void 0!==n?n:0)+(null!==(r=null===(a=e.interactives)||void 0===a?void 0:a.count)&&void 0!==r?r:0)+(null!==(o=null===(i=e.clips)||void 0===i?void 0:i.count)&&void 0!==o?o:0)}(e.playlist);return!1===t||Number.isNaN(t)?a.createElement(a.Fragment,null):a.createElement("span",{className:s.fontSmall},a.createElement(c.x,{namespace:u,phrase:"count",options:{smartCount:t}}))}var m=n(20789),p=n(89725),f=n(64818);function v(e){var t,n,r,i=e.playlist._liteOwner;if(null===(t=e.playlist._isClickViewCurated)||void 0===t?void 0:t.value)return a.createElement(p.F,null);if(!(null==i?void 0:i.id)||!(null===(n=e.currentUser)||void 0===n?void 0:n.id))return a.createElement(a.Fragment,null);if(i.id.toString()===e.currentUser.id.toString())return a.createElement(a.Fragment,null);var o="string"==typeof i.avatar?i.avatar:null===(r=i.avatar)||void 0===r?void 0:r.url;return a.createElement(m.q,{imageUrl:o,imageCdnUrl:e.imageCdnUrl,initials:f.l.getInitials(i.name,i.surname)})}var g=n(36848),y=n(40955),h=n(75163),b=n(5465),E=n(54610),N=n(80143),w=n(9085),C=n(67453),S=n(84231),P="playlists.playlistList";function A(e){var t,n,c=C.j.createUrl(e.data.cover&&e.data.cover.url,{size:E.h2.Medium,resizeType:E.Nq.Cover}),s=e.data.subjectPresentationAudiences&&e.data.subjectPresentationAudiences.data,u=(0,N.n)(s,e.presentationAudiences),m=S.Z.playlistItem,p=!!c||!!e.showFallbackImage;p&&(m+=" ".concat(S.Z.playlistItemGradient)),!p&&e.bgColourClassNames&&(m+=" ".concat(S.Z.playlistItem," ").concat((0,w.x)(e.data.name,e.bgColourClassNames))),"round"===e.itemStyle&&(m+=" rounded-3 overflow-hidden"),"round-left"===e.itemStyle&&(m+=" rounded-start-lg overflow-hidden");var f=Object.assign(Object.assign({},e.analyticsData),{id:null===(t=e.data)||void 0===t?void 0:t.id,name:null===(n=e.data)||void 0===n?void 0:n.name}),A=Object.assign(Object.assign({},e.analyticsOptions),{entity:l.py.Playlist});return a.createElement(g.F,{appLink:e.appLink,analyticsData:f,analyticsOptions:A,title:function(){var t;return!e.data.contentModifiedDate||(null===(t=e.data._isClickViewCurated)||void 0===t?void 0:t.value)?"":i.T.getPhrase(P,"lastUpdated",{timeago:(0,r.WU)(o.O.convertUTCToLocal(e.data.contentModifiedDate))})}()},a.createElement(h.Z,{data:c,alt:e.data.name,className:m},!!e.showFallbackImage&&a.createElement(b.oy,{type:b.mS.Playlist}),a.createElement("div",{className:"text-white ".concat(S.Z.playlistMetadata)},!!e.showCount&&a.createElement(d,{playlist:e.data}),a.createElement("h5",{className:"mb-0 ".concat(e.titleClassName||"")},a.createElement("span",{className:"clamp-2"},e.data.name)),!!s&&!!s.length&&!!u&&a.createElement(y.P,{className:"".concat(e.audienceLabelClass?e.audienceLabelClass:""," mt-1"),audience:u,border:"white"})),!!e.showOwner&&!!e.imageCdnUrl&&a.createElement("div",{className:S.Z.ownerAvatarContainer},a.createElement(v,{playlist:e.data,currentUser:e.currentUser,imageCdnUrl:e.imageCdnUrl}))))}A.defaultProps={itemStyle:"square"}},31273:(e,t,n)=>{n.d(t,{P:()=>s});var a=n(32735),r=n(68050),i=n(69111),o=n(65858),l=n(48745),c={actionType:o.Vw.Click,entity:o.py.Playlist,location:o.LZ.PlaylistListItem,descriptor:o._S.Cover};function s(e){return a.createElement(r.Z,{className:"mx-n1"},e.extraPlaylistItem&&a.createElement(i.Z,{key:"extra-playlist-item",xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},e.extraPlaylistItem),e.playlists.map((function(t){return a.createElement(i.Z,{key:t.id,xs:6,sm:4,lg:3,className:"mb-2 px-1 ".concat(e.itemContainerClassName?e.itemContainerClassName:"")},a.createElement(l.t,{data:t,appLink:e.getPlaylistAppLink(t),imageCdnUrl:e.imageCdnUrl,currentUser:e.currentUser,presentationAudiences:e.presentationAudiences,bgColourClassNames:e.bgColourClassNames,showCount:e.showCount,showOwner:e.showOwner,showFallbackImage:e.showFallbackImage,titleClassName:e.itemTitleClassName,itemStyle:e.itemStyle,analyticsData:e.analyticsData,analyticsOptions:Object.assign(Object.assign({},e.analyticsOptions),c)}))})))}},83657:(e,t,n)=>{n.d(t,{e:()=>s});var a=n(32735),r=n(91967),i=n(10874),o=n(76177),l=n(42735),c=n(86509);function s(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],s=[];t.forEach((function(e){e.button?n.push(e):s.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||s.length?a.createElement("div",{className:u},a.createElement(a.Fragment,null,a.createElement("span",{className:"d-flex align-items-center"},n.length?n.map((function(e,t){return a.createElement(a.Fragment,{key:t},function(){if(e.label){var t=r.q.isFunction(e.label)?e.label:function(){return a.createElement(a.Fragment,null,e.label)};return a.createElement(l.K,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,tooltip:e.tooltip,showSpinner:e.showSpinner,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled},t())}var n=a.createElement(i.h,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled});return e.tooltip?a.createElement(o.u,{title:e.tooltip,spanHack:!0},n):n}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,s.length?a.createElement(c.m,{actions:s,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)))):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),i=n(81886),o=n(45157),l=n(49985),c=n(36848),s=n(83914),u=n(76177),d=n(35223);const m={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function v(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(c.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&l.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&i.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(s.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,i="actions-dropdown-".concat(o.Y.getRandomInt()),l="dropdown-toggle px-0 ".concat(m.dropdownToggle);return e.dropdownToggleClassName&&(l+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:l,type:"button",id:i,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",onClick:t?e.fetchMore:null},a.createElement(s.x,{svgName:d.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":i},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(v,{action:e}))):a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(v,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:s.S.Small}},40955:(e,t,n)=>{n.d(t,{P:()=>r});var a=n(32735);function r(e){return e.audience?a.createElement("div",{className:"audience-label border rounded-pill d-inline-block px-2 text-nowrap \n ".concat("border-"+e.border," ").concat(e.className?e.className:"")},e.audience.name):a.createElement(a.Fragment,null)}},71020:(e,t,n)=>{n.d(t,{_:()=>u});var a=n(32735),r=n(80247),i=n(34152),o=n(83914),l=n(35223);const c={container:"VwD1b",spinner:"eJ85e"};function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function u(e){var t,n,u=(t=(0,i.YD)(),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,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.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)?s(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.")}()),d=u[0],m=u[1];return a.useEffect((function(){var t;e.fetchOnScroll&&m&&!e.isFetching&&(null===(t=e.fetchNext)||void 0===t||t.call(e,e.nextCursor))}),[m,e.isFetching]),a.createElement("div",{className:"p-3 text-center ".concat(c.container),ref:d},e.isFetching?a.createElement(r.Z,{as:"span",animation:"border",role:"status",className:c.spinner}):a.createElement(o.x,{svgName:l.vn.ChevronDown,className:"svg-container cursor-pointer",size:o.S.Large,onClick:function(){var t;return null===(t=e.fetchNext)||void 0===t?void 0:t.call(e,e.nextCursor)}}))}u.defaultProps={fetchOnScroll:!1}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),i=n(67058),o=n(14553),l=n(49267),c=n(49075),s={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:l.a,privacy:o.q},badRequest:c._};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 i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},s),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==a.o.NotFound?i!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new o.badRequest):n.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):n.notFound||r.Q.Ry.throw(new o.notFound))}}},60115:(e,t,n)=>{n.d(t,{K:()=>s});var a=n(32735),r=n(50242),i=n(91967),o=400,l=n(45719);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function s(e,t,n,s,u,d){var m,p,f,v,g=(m=(0,a.useState)(0),p=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(m,p)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(m,p)||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.")}()),y=g[0],h=g[1],b=t,E=(0,l.P)((function(t){if(!e)return null;var n=e(t);return n?n.key:null}),s,u);return f={fetchNextPage:function(){if(t&&e&&E)return h((function(e){return e+1})),b(E.nextCursor)},hasMore:!!(null==E?void 0:E.nextCursor),isFetching:null==E?void 0:E.isFetching,scrollContainer:d},v=function(){if(!f.isFetching){if(f.scrollContainer){var e=f.scrollContainer;if(e.getBoundingClientRect().height+e.scrollTop<e.scrollHeight-o)return}else if(window.innerHeight+document.documentElement.scrollTop<document.documentElement.scrollHeight-o)return;f.fetchNextPage()}},(0,a.useEffect)((function(){var e=i.q.throttle(v,200),t=f.scrollContainer||window;return f.hasMore&&t.addEventListener("scroll",e),function(){return t.removeEventListener("scroll",e)}}),[f.hasMore,f.fetchNextPage,f.scrollContainer]),(0,a.useEffect)((function(){E&&E.shouldInitialFetch&&t&&(b(),h((function(e){return e+1})))}),[null==E?void 0:E.shouldInitialFetch,t]),(0,a.useEffect)((function(){var e,t;if((null==E?void 0:E.statusCode)&&i.q.isFunction(n)){var a=+(null===(t=null===(e=E.statusCode)||void 0===e?void 0:e.toString())||void 0===t?void 0:t.substr(0,1));a!==r.k.ClientError&&a!==r.k.ServerError||n(y,E.statusCode)}}),[null==E?void 0:E.statusCode]),{items:null==E?void 0:E.items,hasMore:!!(null==E?void 0:E.nextCursor),nextCursor:null==E?void 0:E.nextCursor,isFetching:null==E?void 0:E.isFetching,totalItems:null==E?void 0:E.totalItems,hasFirstPageCompleted:null==E?void 0:E.hasFirstPageCompleted}}},80143:(e,t,n)=>{n.d(t,{n:()=>i});var a=n(32735),r=n(69454);function i(e,t){var n=a.useMemo((function(){return(null==e?void 0:e.length)&&t&&r.T.shouldShowAudiences(t)?r.T.getSortedPresentationAudiences(e,t):null}),[e]);return a.useMemo((function(){return(null==n?void 0:n.length)?r.T.getMergedPresentationAudienceString(n):null}),[n])}},69454:(e,t,n)=>{n.d(t,{T:()=>d});var a=n(75896),r=n(1048),i=n(55171);function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var l=/\d/,c=function(e){var t,n,r=a.m.first(e),i=a.m.last(e);return r.name===i.name?r.name:"Advanced"===i.name?"lower"===(t=r.name.split(" "),n=1,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,r,i,o,l=[],c=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;c=!1}else for(;!(c=(a=i.call(n)).done)&&(l.push(a.value),l.length!==t);c=!0);}catch(e){s=!0,r=e}finally{try{if(!c&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return l}}(t,n)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(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.")}())[0].toLowerCase()?"Lower Sec - Adv":"Upper Sec - Adv":"Lower - Upper Sec"},s=/([0-9]+)/gi,u=/\s|\+/gi,d={getSortedPresentationAudiences:function(e,t){var n=e.filter((function(e){return!!e})).map((function(e){return e.id.toString()}));return t.filter((function(e){return n.includes(e.masterId.toString())}))},getMergedPresentationAudienceString:function(e){var t,n,r,o="";switch(+a.m.first(e).presentationId){case i.e.PresentationIds.DEFAULT:case i.e.PresentationIds.AU_SECONDARY:case i.e.PresentationIds.US_ELEMENTARY:case i.e.PresentationIds.AU_PRIMARY:case i.e.PresentationIds.STREAMABLE_LEARNING:if(1===e.length)return e[0];o=function(e){var t=e.map((function(e){return e.name})).join(" "),n=t.split(" ").filter((function(e){return!isNaN(+e)})).map((function(e){return+e}))||[],a=t.split(" ").filter((function(e){return isNaN(+e)}))||[],r=e.find((function(e){return!l.test(e.name)})),i=a.find((function(e){return e!==(null==r?void 0:r.name)}));if(e.length>1&&(i+="s"),r&&n.length)return"".concat(i," ").concat(r.name.charAt(0)," - ").concat(n.pop());var o=function(e){var t,n,a,r,i=!1,o=[];for(e=e.sort((function(e,t){return e-t})),a=0;a<e.length;a++)r=a+1,i||(t=e[a]),n=e[r],e[a]+1===n?i=!0:i?(o.push("".concat(t," - ").concat(e[a])),i=!1):(o.push("".concat(e[a])),i=!1);return o}(n);return"".concat(i," ").concat(o.join(", "))}(e);break;case i.e.PresentationIds.SCOTLAND_PRIMARY:case i.e.PresentationIds.INTERNATIONAL_PRIMARY:case i.e.PresentationIds.INTERNATIONAL_SECONDARY:if(1===e.length)return e[0];o=function(e){var t=e.map((function(e){return e.name})),n={};t.forEach((function(e,t){if(0!==t){var a=e.split(" ");Object.keys(n).forEach((function(e){a.includes(e)||delete n[e]}))}else e.split(" ").forEach((function(e,t){n[e]=0===t?"start":"end"}))}));var a=Object.keys(n)[0],r=n[a];if(!a)return e[0].name;var i=e[0].name,o=e[e.length-1].name,l=function(e){return e.split(a)[0]},c="".concat(l(i)," - ").concat(l(o));return"start"===r?"".concat(a," ").concat(c):"".concat(c," ").concat(a)}(e);break;case i.e.PresentationIds.ENGLISH_SECONDARY:o=c(e);break;case i.e.PresentationIds.SCOTLAND_SECONDARY:t=e,n=a.m.first(t),r=a.m.last(t),o=n.name===r.name?n.name:"Senior Phase"===r.name?"".concat(n.name," - Senior"):"Third - Fourth Level";break;case i.e.PresentationIds.ENGLAND_PRIMARY:o=function(e){var t=a.m.first(e),n=a.m.last(e),r=a.m.first(t.name.split(" ")),i=a.m.first(n.name.split(" ")),o=t.name.split(" ").find((function(e){return!isNaN(+e)})),l=n.name.split(" ").find((function(e){return!isNaN(+e)}));if(t===n)return"Key"===r||"Reception"===r?t.name:"".concat(r," KS").concat(o);var c="",s="";return c="Reception"===r?"R":"KS".concat(o),s="KS".concat(l),"Lower"===r&&"Upper"===i?"L ".concat(c," - U ").concat(s):("Lower"===r&&(c="Lower ".concat(c)),"Upper"===i&&(s="Upper ".concat(s)),"Key"===i&&(s=n.name),"".concat(c," - ").concat(s))}(e);case i.e.PresentationIds.US_MIDDLE:case i.e.PresentationIds.US_HIGH:}return o?{name:o}:null},sortMembersWithDuplicateNamesByAudience:function(e){var t=function(e){return e.length?(e.forEach((function(e){var r=+a.m.first(e.name.match(s));if(!t)return t=e,void(n=r);r<n&&(t=e)})),t):null;var t,n},n={},r=[];return e.forEach((function(e){if(!n[e.name])return n[e.name]=1,void r.push(e);r.push(e),n[e.name]++;var a=r.splice(r.length-n[e.name]).sort((function(e,n){var a=t(e.subjectPresentationAudiences.data),r=t(n.subjectPresentationAudiences.data);if(!a&&r)return 1;if(!r)return-1;var i=a.name.localeCompare(r.name);return 0===i?i:i>0?-1:1}));r=r.concat(a)})),r},getActiveAudiencesFromParams:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(r.t.isObject(t)&&!r.t.isEmpty(t)&&e&&e.length&&d.shouldShowAudiences(e)){var n=t.a;if(n){"string"==typeof n&&(n=[n]);var a=function(e){return e.replace(u,"").toLowerCase()},i=n.reduce((function(e,t){return e[a(t)]=t,e}),{});return e.filter((function(e){return i[a(e.name)]}))}}},getAudienceParams:function(e){return(null==e?void 0:e.length)?{a:e.map((function(e){return e.name}))}:null},shouldShowAudiences:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return!!e&&e.length>1}}},5940:(e,t,n)=>{n.r(t),n.d(t,{PlaylistsView:()=>J});var a=n(32735),r=n(70680),i=n(23481),o=n(20354),l=n(65858),c=n(91200),s=n(31273),u=n(91967),d=n(76611),m=n(36848);function p(e){return p="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},p(e)}function f(e,t,n){var a;return a=function(e,t){if("object"!=p(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=p(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(t),(t="symbol"==p(a)?a:a+"")in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var v="playlists.playlistSortSelect",g=u.q.memoize((function(){return f(f(f(f(f({},d.o.RecentlyUpdated,{name:i.T.getPhrase(v,"recentlyUpdated")}),d.o.AtoZ,{name:i.T.getPhrase(v,"atoz")}),d.o.ZtoA,{name:i.T.getPhrase(v,"ztoa")}),d.o.Newest,{name:i.T.getPhrase(v,"newest")}),d.o.Oldest,{name:i.T.getPhrase(v,"oldest")})}));function y(e){var t=e.type,n=e.getSortAppLink,r=e.variant,i=g();return a.createElement("div",{className:"dropdown"},a.createElement("a",{className:"btn btn-".concat(r," ms-2 dropdown-toggle"),type:"button",id:"sort-select","data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false"},i[t].name),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":"sort-select"},Object.values(d.o).map((function(e){var r="dropdown-item";return e===t&&(r+=" active"),a.createElement(m.F,{key:e,className:r,appLink:n(e),analyticsData:{sort:i[e].name},analyticsOptions:{location:l.LZ.PlaylistListHeader,entity:l.py.Playlists,actionType:l.Vw.Sort,workflowPhase:l.eu.Complete}},i[e].name)}))))}y.defaultProps={variant:"light"};var h=n(23257),b=n(70006),E=n(71521),N=n(83657),w=n(71020),C=n(83345),S=n(7733),P=n(16714),A=n(94644),I=n(39151),L=n(5112),k=n(31949),T=n(69883),O=n(60115),F=n(22902),x=n(79612),U=n(35223),j=n(14070),D=n(97291),M=n(44110),R=n(26323),_=n(99742);const Y={playlistMetadata:"vv8fW"};var Z="playlists.favouritesPlaylistItem",V=i.T.encloseNamespace(Z);function q(e){var t={entity:l.py.Playlist,actionType:l.Vw.Click,location:l.LZ.PlaylistListItem},n=_.W.FAVOURITES_PLAYLIST.FAV_PLAYLIST_COVER,r={application:D.O.MY_FAVOURITES,action:j.e.MyFavourites.MY_FAVOURITES};return a.createElement(m.F,{appLink:r,analyticsData:{name:"Favourites",extraItem:"user-favourites"},analyticsOptions:t,title:V("favouritesTitle")},a.createElement("div",{className:"position-relative"},a.createElement("div",{className:"text-white ".concat(Y.playlistMetadata)},!e.isLoadingCount&&a.createElement("span",null,a.createElement(C.x,{namespace:Z,phrase:"count",options:{smartCount:e.count}})),a.createElement("h5",{className:"mb-0"},a.createElement("span",{className:"clamp-2"},V("favouritesTitle")))),a.createElement("img",{src:n,className:"w-100 h-100 rounded-3"})))}var B=n(23232),H="playlists.playlistsEmptyState",$=i.T.encloseNamespace(H);function z(e){return a.createElement(C.D.Provider,{value:H},a.createElement(B.u,null,a.createElement(B.u.Image,{src:_.W.EmptyStates.Playlists.PLAYLISTS,altText:$("info")}),a.createElement(B.u.Heading,null,a.createElement(C.x,{phrase:"heading"})),a.createElement(B.u.Info,null,a.createElement(C.x,{phrase:e.isStudent?"studentInfo":"info"})),a.createElement(B.u.Cta,{text:i.T.getPhrase(H,"cta"),icon:U.vn.Plus,appLink:{application:D.O.PLAYLISTS,action:j.e.Playlists.NEW_PLAYLIST}})))}function W(){return a.createElement(C.D.Provider,{value:H},a.createElement(B.u,null,a.createElement(B.u.Image,{src:_.W.EmptyStates.Playlists.PLAYLISTS_PUBLIC,altText:$("info")}),a.createElement(B.u.Heading,null,a.createElement(C.x,{phrase:"heading"})),a.createElement(B.u.Info,null,a.createElement(C.x,{phrase:"info"})),a.createElement(B.u.Cta,{text:i.T.getPhrase(H,"publicCta"),appLink:{application:D.O.SIGN_UP,action:j.e.SignUp.SIGN_UP},analyticsData:{},analyticsOptions:{actionType:l.Vw.Click,location:l.LZ.PlaylistsLanding,entity:l.py.AppLink,workflowPhase:l.eu.Start,descriptor:l.Yu.SignUp}})))}var G="playlists.playlists",K=i.T.encloseNamespace(G);function Q(e){return{application:D.O.PLAYLISTS,action:j.e.Playlists.HOME,params:{sort:e}}}function J(e){var t,n=(0,r.I0)(),i=(0,T.Z)(),u=(0,F.T)(),d=u.hasLocalPermissions,m=u.hasPermissions,p=u.isLoaded,f=m(P.C.StudentExperience),v=o.a.useBasicFetch(I.L.config()),g=o.a.useBasicFetch(k.N.currentUser()),_=(0,M.i)(),Y=!!g.data&&E.A.getOrSetSortType(g.data.id,e.sort),Z=(0,R.B)(null===(t=g.data)||void 0===t?void 0:t.id),V=Z.count,B=Z.favourites,H={count:V,isLoadingCount:Z.isLoading,data:B},$=!!Y&&function(e){return L.C.getUserPlaylists(new b.l(Y,e,h.e.All))},J=!!$&&function(e){o.a.getFetch(n)($(e))};(0,x.M)({title:K("pageTitle"),description:K("pageDescription")});var X=!d(P.E.ViewPlaylistsLanding)&&Y,ee=(0,O.K)(!!X&&$,J,(function(e,t){if(1===e)return(0,A.r)(t);i.error(K("error"))})),te=ee.items,ne=ee.hasMore,ae=ee.isFetching,re=[{label:K("createPlaylist"),appLink:{application:D.O.PLAYLISTS,action:j.e.Playlists.NEW_PLAYLIST},svgName:U.vn.Plus,className:"btn btn-outline-dark",button:!0,analyticsData:{},analyticsOptions:{location:l.LZ.Banner,entity:l.py.Playlist,workflowPhase:l.eu.Start,actionType:l.Vw.Create}}],ie=!!te&&!!g.data&&!!v.data&&(!!_.data||_.hasError)&&!!p;return d(P.E.ViewPlaylistsLanding)?a.createElement(W,null):!ie||H.count||(null==te?void 0:te.length)?a.createElement("div",{className:"bg-white px-3"},a.createElement("div",{className:"d-flex justify-content-between align-items-end pb-3"},a.createElement("h1",{className:"h2 mb-0"},a.createElement(C.x,{namespace:G,phrase:"headerTitle"})),!!Y&&a.createElement(N.e,{actions:re,sortComponent:a.createElement(y,{variant:"outline-dark",type:Y,getSortAppLink:Q})})),ie?a.createElement(s.P,{playlists:te,getPlaylistAppLink:e.getPlaylistAppLink,imageCdnUrl:v.data.imageCdnUrl,currentUser:g.data,presentationAudiences:_.data||[],bgColourClassNames:S.o,itemContainerClassName:"columns-of-five",itemStyle:"round",showCount:!0,showOwner:!0,extraPlaylistItem:H.count?a.createElement(q,Object.assign({},H)):null}):a.createElement(c.Y,{itemClassName:"columns-of-five"}),ie&&(ne||ae)&&a.createElement(w._,{isFetching:ae,fetchNext:J})):a.createElement(z,{isStudent:f})}},44110:(e,t,n)=>{n.d(t,{i:()=>o});var a=n(20354),r=n(89454),i=n(86698),o=function(){var e=(0,i.y)({redirectOnError:!0}),t=e.activePresentation,n=e.getFallbackPresentation,o=t||n();return a.a.useBasicFetch(!!o&&r.O.presentationAudiences(o.id))}},26323:(e,t,n)=>{n.d(t,{B:()=>l});var a=n(20354),r=n(63419);function i(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)||function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.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}}(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 o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function l(e){var t,n,o,l,c,s,u,d,m,p=a.a.useBasicFetch(e&&r.P.getFavouritesVideosCount(e)),f=a.a.useBasicFetch(e&&r.P.getFavouritesClipsCount(e)),v=a.a.useBasicFetch(e&&r.P.getFavouritesInteractivesCount(e));return{count:(null===(t=p.data)||void 0===t?void 0:t.count)+(null===(n=v.data)||void 0===n?void 0:n.count)+(null===(o=f.data)||void 0===o?void 0:o.count),favourites:[].concat(i((null===(l=p.data)||void 0===l?void 0:l.data)||[]),i((null===(c=f.data)||void 0===c?void 0:c.data)||[]),i((null===(s=v.data)||void 0===s?void 0:s.data)||[])),isLoading:!(null===(u=p.data)||void 0===u?void 0:u.data)||!(null===(d=f.data)||void 0===d?void 0:d.data)||!(null===(m=v.data)||void 0===m?void 0:m.data)}}},84231:(e,t,n)=>{n.d(t,{Z:()=>a});const a={playlistItem:"CaRJx",playlistItemGradient:"BI7p2",playlistMetadata:"eDk1l",partialHeading:"w4lWh",ownerAvatarContainer:"JImqE"}},68050:(e,t,n)=>{n.d(t,{Z:()=>s});var a=n(95685),r=n.n(a),i=n(32735),o=n(46304),l=n(74512);const c=i.forwardRef((({bsPrefix:e,className:t,as:n="div",...a},i)=>{const c=(0,o.vE)(e,"row"),s=(0,o.pi)(),u=(0,o.zG)(),d=`${c}-cols`,m=[];return s.forEach((e=>{const t=a[e];let n;delete a[e],null!=t&&"object"==typeof t?({cols:n}=t):n=t;const r=e!==u?`-${e}`:"";null!=n&&m.push(`${d}${r}-${n}`)})),(0,l.jsx)(n,{ref:i,...a,className:r()(t,c,...m)})}));c.displayName="Row";const s=c},82602:(e,t,n)=>{n.d(t,{WU:()=>s});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],i={},o=function(e,t){i[e]=t},l=[60,60,24,7,365/7/12,12];function c(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var s=function(e,t,n){var a=function(e,t){return(+(t?c(t):new Date)-+c(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return i[e]||i.en_US}(t))};o("en_US",(function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]})),o("zh_CN",(function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]}))}}]);
|
|
2
|
+
//# sourceMappingURL=5940-634de60f9b-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/5940-634de60f9b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PartialPlaylistList.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-count/playlist-count.scss","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-count/PlaylistCount.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistOwnerAvatar.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistItem.tsx","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/PlaylistList.tsx","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/components/audience-label/AudienceLabel.tsx","file:///app/packages/libs/shared/src/components/infinite-scroll-footer/infinite-scroll-footer.scss","file:///app/packages/libs/shared/src/components/infinite-scroll-footer/InfiniteScrollFooter.tsx","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteScroll.ts","file:///app/packages/libs/shared/src/hooks/UseInfiniteList.ts","file:///app/packages/libs/shared/src/hooks/UseMergeAudiences.ts","file:///app/packages/libs/shared/src/utils/audience-helper/AudienceStringBuilders.ts","file:///app/packages/libs/shared/src/utils/audience-helper/AudienceHelper.ts","file:///app/packages/libs/shared/src/apps/playlists/components/sort-select/PlaylistSortSelect.tsx","file:///app/packages/projects/lite/src/apps/playlists/components/favourites-playlist-item/favourites-playlist-item.scss","file:///app/packages/projects/lite/src/apps/playlists/components/favourites-playlist-item/FavouritesPlaylistItem.tsx","file:///app/packages/projects/lite/src/apps/playlists/views/playlists/empty-state/PlaylistsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/playlists/views/playlists/PlaylistsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/usePresentationAudiences.ts","file:///app/packages/projects/lite/src/shared/views/favourites/hooks/useFavouritesCount.ts","file:///app/packages/libs/shared/src/apps/playlists/components/playlist-list/playlist.scss","file:///app/node_modules/react-bootstrap/esm/Row.js","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport styles from './playlist.scss';\n\ninterface PartialPlaylistListProps {\n numItems?: number;\n itemClassName?: string;\n showHeading?: boolean;\n}\n\nPartialPlaylistList.defaultProps = {\n numItems: 8\n};\n\nexport function PartialPlaylistList(props: PartialPlaylistListProps): JSX.Element {\n const PARTIAL_PLAYLISTS = [...Array(props.numItems)];\n\n const className = props.itemClassName || '';\n\n return (\n <>\n {props.showHeading && <div className={`${styles.partialHeading} mb-1 partial-loading-background`} />}\n <Row className='mx-n1 mb-n2'>\n {PARTIAL_PLAYLISTS.map((p, idx) => (\n <Col key={idx} xs={6} sm={4} lg={3} className={`${className} px-1 pb-2`}>\n <div className={`${styles.playlistItem} partial-loading-background rounded-3`} />\n </Col>\n ))}\n </Row>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"fontSmall\":\"OYBRp\"};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Playlist } from 'libs/shared/interfaces';\n\nimport styles from './playlist-count.scss';\n\nconst namespace = 'playlists.playlistCount';\n\nfunction getCount(playlist: Playlist): number | false {\n if (!playlist)\n return false;\n\n const videos = playlist.videos?.count ?? 0;\n const interactives = playlist.interactives?.count ?? 0;\n const clips = playlist.clips?.count ?? 0;\n\n return videos + interactives + clips;\n}\n\ninterface PlaylistCountProps {\n playlist: Playlist;\n}\n\nexport function PlaylistCount(props: PlaylistCountProps): JSX.Element {\n const count = getCount(props.playlist);\n\n if (count === false || Number.isNaN(count))\n return <></>;\n\n return (\n <span className={styles.fontSmall}>\n <Text namespace={namespace} phrase='count' options={{ smartCount: count }} />\n </span>\n );\n}","import * as React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { ClickViewAvatar } from 'libs/shared/components/clickview-avatar/ClickViewAvatar';\nimport { CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\ninterface PlaylistOwnerAvatarProps {\n playlist: Playlist;\n imageCdnUrl: string;\n currentUser?: CurrentUser;\n}\n\nexport function PlaylistOwnerAvatar(props: PlaylistOwnerAvatarProps): JSX.Element {\n const { _liteOwner } = props.playlist;\n\n if (props.playlist._isClickViewCurated?.value)\n return (\n <ClickViewAvatar />\n );\n\n if (!_liteOwner?.id || !props.currentUser?.id)\n return <></>;\n\n const currentUserIsOwner = _liteOwner.id.toString() === props.currentUser.id.toString();\n\n if (currentUserIsOwner)\n return <></>;\n\n const url = typeof _liteOwner.avatar === 'string' ? _liteOwner.avatar : _liteOwner.avatar?.url;\n\n return (\n <Avatar\n imageUrl={url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(_liteOwner.name, _liteOwner.surname)}\n />\n );\n}","import * as React from 'react';\nimport { format } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { AnalyticsOptions, EntityType, HashObject } from 'libs/analytics/interfaces';\n\nimport { PlaylistCount } from 'libs/shared/apps/playlists/components/playlist-count/PlaylistCount';\nimport { PlaylistOwnerAvatar } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistOwnerAvatar';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { AudienceLabel } from 'libs/shared/components/audience-label/AudienceLabel';\nimport { BaseImage } from 'libs/shared/components/image/BaseImage';\nimport { ImageFallback, ImageFallbackType } from 'libs/shared/components/image/ImageFallback';\nimport { ImageSize, ResizeType } from 'libs/shared/enums/Images';\nimport { useMergeAudiences } from 'libs/shared/hooks/UseMergeAudiences';\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\nimport { getBgColorClass } from 'libs/shared/utils/getBgColorClass';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './playlist.scss';\n\nconst namespace = 'playlists.playlistList';\n\nexport type PlaylistItemStyle = 'square' | 'round' | 'round-left';\n\nexport interface PlaylistItemProps {\n data: Playlist;\n appLink: Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n bgColourClassNames?: string[];\n titleClassName?: string;\n imageCdnUrl?: string;\n itemStyle?: PlaylistItemStyle;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n audienceLabelClass?: string;\n}\n\nPlaylistItem.defaultProps = {\n itemStyle: 'square'\n};\n\nexport function PlaylistItem(props: PlaylistItemProps): JSX.Element {\n const imageUrl = ImageHelper.createUrl(props.data.cover && props.data.cover.url, {\n size: ImageSize.Medium,\n resizeType: ResizeType.Cover\n });\n\n const audiences = props.data.subjectPresentationAudiences &&\n props.data.subjectPresentationAudiences.data;\n\n const mergedAudience = useMergeAudiences(audiences, props.presentationAudiences);\n\n let className = styles.playlistItem;\n\n const showImage = !!imageUrl || !!props.showFallbackImage;\n\n if (showImage)\n className += ` ${styles.playlistItemGradient}`;\n\n if (!showImage && props.bgColourClassNames)\n className += ` ${styles.playlistItem} ${getBgColorClass(props.data.name, props.bgColourClassNames)}`;\n\n if (props.itemStyle === 'round')\n className += ` rounded-3 overflow-hidden`;\n\n if (props.itemStyle === 'round-left')\n className += ` rounded-start-lg overflow-hidden`;\n\n const analyticsData = { ...props.analyticsData,\n id: props.data?.id,\n name: props.data?.name\n };\n\n const analyticsOptions = {\n ...props.analyticsOptions,\n entity: EntityType.Playlist\n };\n\n const getTitle = () => {\n if (!props.data.contentModifiedDate || props.data._isClickViewCurated?.value)\n return '';\n\n return LanguageService.getPhrase(namespace, 'lastUpdated', {\n timeago: format(DateHelper.convertUTCToLocal(props.data.contentModifiedDate))\n });\n };\n\n return (\n <AppLink\n appLink={props.appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getTitle()}\n >\n <BaseImage data={imageUrl} alt={props.data.name} className={className}>\n {!!props.showFallbackImage && <ImageFallback type={ImageFallbackType.Playlist} />}\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!!props.showCount && (\n <PlaylistCount playlist={props.data} />\n )}\n <h5 className={`mb-0 ${props.titleClassName || ''}`}><span className='clamp-2'>{props.data.name}</span></h5>\n {!!audiences && !!audiences.length && !!mergedAudience &&\n <AudienceLabel\n className={`${props.audienceLabelClass ? props.audienceLabelClass : ''} mt-1`}\n audience={mergedAudience}\n border='white'\n />\n }\n </div>\n {!!props.showOwner && !!props.imageCdnUrl &&\n <div className={styles.ownerAvatarContainer}>\n <PlaylistOwnerAvatar\n playlist={props.data}\n currentUser={props.currentUser}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n }\n </BaseImage>\n </AppLink>\n );\n}","import * as React from 'react';\nimport { Col, Row } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/core';\n\nimport { AnalyticsOptions, ClickDescriptor, EntityType, HashObject, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurrentUser, Playlist, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { PlaylistItem, PlaylistItemStyle } from './PlaylistItem';\n\ninterface PlaylistListProps {\n playlists: Playlist[];\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n currentUser?: CurrentUser;\n presentationAudiences?: PresentationAudience[];\n itemContainerClassName?: string;\n itemTitleClassName?: string;\n bgColourClassNames?: string[];\n itemStyle?: PlaylistItemStyle;\n imageCdnUrl?: string;\n showCount?: boolean;\n showOwner?: boolean;\n showFallbackImage?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n extraPlaylistItem?: JSX.Element;\n}\n\nconst analyticsOptions: AnalyticsOptions = {\n actionType: UserAction.Click,\n entity: EntityType.Playlist,\n location: LocationContext.PlaylistListItem,\n descriptor: ClickDescriptor.Cover\n};\n\nexport function PlaylistList(props: PlaylistListProps): JSX.Element {\n return (\n <Row className='mx-n1'>\n {props.extraPlaylistItem && (\n <Col key='extra-playlist-item' xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n {props.extraPlaylistItem}\n </Col>\n )}\n\n {props.playlists.map(p => (\n <Col key={p.id} xs={6} sm={4} lg={3} className={`mb-2 px-1 ${props.itemContainerClassName ? props.itemContainerClassName : ''}`}>\n <PlaylistItem\n data={p}\n appLink={props.getPlaylistAppLink(p)}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n presentationAudiences={props.presentationAudiences}\n bgColourClassNames={props.bgColourClassNames}\n showCount={props.showCount}\n showOwner={props.showOwner}\n showFallbackImage={props.showFallbackImage}\n titleClassName={props.itemTitleClassName}\n itemStyle={props.itemStyle}\n analyticsData={props.analyticsData}\n analyticsOptions={{ ...props.analyticsOptions, ...analyticsOptions }}\n />\n </Col>\n ))}\n </Row>\n );\n}","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n <>\n <span className='d-flex align-items-center'>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n \n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </span>\n </>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <div className='dropdown-menu dropdown-menu-end dropdown-menu-right' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <React.Fragment key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </React.Fragment>\n );\n }\n \n return (\n <React.Fragment key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </React.Fragment>\n );\n })\n }\n </div>\n </div>\n );\n}","import * as React from 'react';\n\nimport { Audience } from 'libs/shared/interfaces';\n\nimport styles from './audience-label.scss';\n\ntype AudienceBorderColour = 'dark' | 'white';\n\ninterface AudienceLabelProps {\n audience: Audience;\n border: AudienceBorderColour;\n className?: string;\n}\n\nexport function AudienceLabel(props: AudienceLabelProps): JSX.Element {\n if (!props.audience)\n return <></>;\n\n // Note: the audience-label class is applied so that parent components can override styling, and Online can style this component\n return (\n <div\n className={`audience-label border rounded-pill d-inline-block px-2 text-nowrap \n ${'border-' + props.border} ${props.className ? props.className : ''}`}\n >\n {props.audience.name}\n </div>\n );\n}\n\ninterface AudienceLabelListProps {\n audiences: Audience[];\n border: AudienceBorderColour;\n}\n\nexport function AudienceLabelList(props: AudienceLabelListProps): JSX.Element {\n if (!props.audiences || !props.audiences.length)\n return <></>;\n\n return (\n <>\n {props.audiences.map((a, idx) => (\n <span key={idx} className={styles.audienceLabelListItem}>\n <AudienceLabel audience={a} border={props.border} />\n </span>\n ))}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"VwD1b\",\"spinner\":\"eJ85e\"};","import * as React from 'react';\nimport { Spinner } from 'react-bootstrap';\nimport { useInView } from 'react-intersection-observer';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './infinite-scroll-footer.scss';\n\ninterface InfiniteScrollFooterProps {\n isFetching: boolean;\n fetchNext?: (nextCursor: string) => void;\n nextCursor?: string;\n fetchOnScroll?: boolean;\n}\n\nInfiniteScrollFooter.defaultProps = {\n fetchOnScroll: false\n};\n\nexport function InfiniteScrollFooter(props: InfiniteScrollFooterProps): React.ReactElement {\n const [ ref, inView ] = useInView();\n\n React.useEffect(() => {\n if (!props.fetchOnScroll)\n return;\n\n if (!inView || props.isFetching)\n return;\n\n props.fetchNext?.(props.nextCursor);\n }, [ inView, props.isFetching ]);\n\n return (\n <div className={`p-3 text-center ${styles.container}`} ref={ref}>\n {props.isFetching\n ? <Spinner as='span' animation='border' role='status' className={styles.spinner} />\n : (\n <SvgContainer\n svgName={cvSvgLibrary.ChevronDown}\n className='svg-container cursor-pointer'\n size={SvgContainerSize.Large}\n onClick={() => props.fetchNext?.(props.nextCursor)}\n />\n )\n }\n </div>\n );\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\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};\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.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 { useEffect } from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst SCROLL_TOLERANCE = 400; // value in px\n\ninterface UseInfiniteScrollOptions {\n fetchNextPage: () => void;\n hasMore: boolean;\n isFetching: boolean;\n scrollContainer?: HTMLElement;\n}\n\nexport function useInfiniteScroll(options: UseInfiniteScrollOptions): void {\n const handleScroll = (): void => {\n if (options.isFetching)\n return;\n\n if (!options.scrollContainer) {\n const currentScrollHeight = window.innerHeight + document.documentElement.scrollTop;\n \n const totalHeight = document.documentElement.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n } else {\n const { scrollContainer } = options;\n const currentScrollHeight = scrollContainer.getBoundingClientRect().height + scrollContainer.scrollTop;\n \n const totalHeight = scrollContainer.scrollHeight - SCROLL_TOLERANCE;\n \n if (currentScrollHeight < totalHeight)\n return;\n }\n\n options.fetchNextPage();\n };\n\n useEffect(() => {\n const onScroll = FunctionHelper.throttle(handleScroll, 200);\n\n const scrollContainer = options.scrollContainer || window;\n\n if (options.hasMore)\n scrollContainer.addEventListener('scroll', onScroll);\n\n return () => scrollContainer.removeEventListener('scroll', onScroll);\n }, [ options.hasMore, options.fetchNextPage, options.scrollContainer ]);\n}","import { useEffect, useState } from 'react';\n\nimport { HttpStatus, HttpStatusClass } from 'libs/common/backbone/enums/HttpStatus';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { BaseObject, BasePaginatedCollection } from 'libs/shared/interfaces';\n\nimport { useInfiniteScroll } from './UseInfiniteScroll';\nimport { useSelectAllPages } from './UseSelectAllPages';\n\nexport interface UseInfiniteListResult<T extends BaseObject> {\n items: T[];\n hasMore: boolean;\n isFetching: boolean;\n nextCursor: string;\n totalItems?: number;\n hasFirstPageCompleted: boolean;\n}\n\n/**\n * Hook to extract an infinite list from the application state,\n * save it locally in state and only update when new data\n * is fetched.\n * \n * @param getRequest - callback function to get the request for each page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n * \n * @param fetchNext - callback function to fetch a page.\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\n */\nexport function useInfiniteList<TObject = BaseObject, TResponse = BasePaginatedCollection<TObject>>(\n getRequest: ((cursor?: string) => Flight.Request) | false,\n fetchNext: ((cursor?: string) => void) | false,\n onError?: (pageNumber: number, statusCode: HttpStatus) => void,\n getItems?: (responseData: TResponse) => TObject[],\n getCursor?: (responseData: TResponse) => string,\n scrollContainer?: HTMLElement\n): UseInfiniteListResult<TObject> {\n const [ pagesFetched, setPagesFetched ] = useState(0);\n\n const fetchNextFn = fetchNext as (cursor?: string) => void;\n\n function getKey(cursor?: string): string {\n if (!getRequest)\n return null;\n\n const request = getRequest(cursor);\n\n if (!request)\n return null;\n\n return request.key;\n }\n\n const response = useSelectAllPages<TObject, TResponse>(\n getKey,\n getItems,\n getCursor\n );\n\n function fetchNextPage(): void {\n if (!fetchNext || !getRequest || !response)\n return;\n\n setPagesFetched(currentVal => currentVal + 1);\n return fetchNextFn(response.nextCursor);\n }\n\n useInfiniteScroll({\n fetchNextPage,\n hasMore: !!response?.nextCursor,\n isFetching: response?.isFetching,\n scrollContainer\n });\n\n useEffect(() => {\n if (!response)\n return;\n\n if (response.shouldInitialFetch && fetchNext) {\n fetchNextFn();\n setPagesFetched(currentVal => currentVal + 1);\n }\n }, [ response?.shouldInitialFetch, fetchNext ]);\n\n useEffect(() => {\n if (!response?.statusCode || !FunctionHelper.isFunction(onError))\n return;\n\n const httpStatusClass: HttpStatusClass = +(response.statusCode?.toString()?.substr(0, 1));\n\n if (httpStatusClass !== HttpStatusClass.ClientError && httpStatusClass !== HttpStatusClass.ServerError)\n return;\n\n onError(pagesFetched, response.statusCode);\n }, [response?.statusCode]);\n\n return {\n items: response?.items,\n hasMore: !!response?.nextCursor,\n nextCursor: response?.nextCursor,\n isFetching: response?.isFetching,\n totalItems: response?.totalItems,\n hasFirstPageCompleted: response?.hasFirstPageCompleted\n };\n}","import React from 'react';\n\nimport { Audience, PresentationAudience } from '../interfaces';\nimport { AudienceHelper } from '../utils/audience-helper/AudienceHelper';\n\nexport function useMergeAudiences(\n audiences: Audience[],\n presentationAudiences: PresentationAudience[]\n): PresentationAudience {\n // Memoize the audience functions as they are somewhat expensive and the result shouldn't change\n const sortedAudiences = React.useMemo(() => {\n if (!audiences?.length || !presentationAudiences || !AudienceHelper.shouldShowAudiences(presentationAudiences))\n return null;\n\n return AudienceHelper.getSortedPresentationAudiences(audiences, presentationAudiences);\n }, [audiences]);\n\n const mergedAudience = React.useMemo(() => {\n if (!sortedAudiences?.length)\n return null;\n\n return AudienceHelper.getMergedPresentationAudienceString(sortedAudiences);\n }, [sortedAudiences]);\n\n return mergedAudience;\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nconst HAS_NUMBER_REGEX = /\\d/;\nconst COUNT_OFFSET = 1;\n\nexport const AudienceStringBuilders = {\n /**\n * Handles audience sets like:\n * - Year 7, Year 8, etc\n * - Kindergarten, Grade 1, Grade 2, etc\n */\n yearsAndGradesBuilder(audiences: PresentationAudience[]): string {\n /**\n * Create a string with all of the audiences\n */\n const combinedNames = audiences.map(a => a.name).join(' ');\n\n /**\n * Extract all the numbers and matches from the string\n */\n const numberList = combinedNames.split(' ').filter(name => !isNaN(+name)).map(num => +num) || [];\n const wordList = combinedNames.split(' ').filter(name => isNaN(+name)) || [];\n\n // Find an audience that doesn't have a number, like \"Kindergarten\" or \"Foundation\".\n const audienceWithoutNum = audiences.find(p => {\n return !HAS_NUMBER_REGEX.test(p.name);\n });\n\n // Get audience label prefix\n let prefix = wordList.find(name => name !== audienceWithoutNum?.name);\n\n // Pluralise the prefix is there are multiple audiences\n if (audiences.length > 1)\n prefix += 's';\n\n if (audienceWithoutNum && numberList.length)\n return `${prefix} ${audienceWithoutNum.name.charAt(0)} - ${numberList.pop()}`;\n\n /**\n * Build set of logical audience ranges\n */\n const audienceRange = processAudienceRanges(numberList);\n\n return `${prefix} ${audienceRange.join(', ')}`;\n },\n\n /**\n * Handles audience sets like:\n * - Early Level, First Level, etc\n * - Lower Primary, Middle Primary, etc\n */\n wordyLevelsBuilder(audiences: PresentationAudience[]): string {\n const audienceNames = audiences.map(a => a.name);\n\n const commonWordsAndTheirPositions: { [word: string]: 'start' | 'end' } = {};\n\n /**\n * Go through each audience name, and find the words that are common between _all_ of the audiences.\n * For example, if the audiences are \"Early Level\", \"First Level\", and \"Second Level\", the common\n * word will be \"Level\".\n * We will also save whether the common word appears at the beginning or the end of the audience name.\n */\n audienceNames.forEach((name, index) => {\n if (index === 0) {\n const wordsInName = name.split(' ');\n wordsInName.forEach((word, index) => {\n commonWordsAndTheirPositions[word] = index === 0 ? 'start' : 'end';\n });\n\n return;\n }\n\n const wordsInName = name.split(' ');\n\n Object.keys(commonWordsAndTheirPositions).forEach(word => {\n if (!wordsInName.includes(word))\n delete commonWordsAndTheirPositions[word];\n });\n });\n\n // This function currently only handles audience names with 1 common word.\n const commonWord = Object.keys(commonWordsAndTheirPositions)[0];\n const commonWordPosition = commonWordsAndTheirPositions[commonWord];\n\n if (!commonWord)\n return audiences[0].name;\n\n /**\n * At this point, we will have a common word and the position of that word.\n * We now need to build out the rest of the audience name by merging the unique words.\n * For example, if the audiences are \"Early Level\", \"First Level\", and \"Second Level\", we will get\n * \"Early - Second\"\n */\n\n const firstAudienceName = audiences[0].name;\n const lastAudienceName = audiences[audiences.length - 1].name;\n\n // Function to strip the common word out of the audience name\n const stripOutCommonWord = (name: string) => name.split(commonWord)[0];\n\n const mergedWord = `${stripOutCommonWord(firstAudienceName)} - ${stripOutCommonWord(lastAudienceName)}`;\n\n const finalName = commonWordPosition === 'start'\n ? `${commonWord} ${mergedWord}`\n : `${mergedWord} ${commonWord}`;\n\n return finalName;\n },\n\n /**\n * Handles the english secondary audiences, which can be: Lower Secondary, Upper Secondary, and Advanced\n */\n englishSecondaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n if (firstAudience.name === lastAudience.name)\n return firstAudience.name;\n\n if (lastAudience.name === 'Advanced') {\n const [level] = firstAudience.name.split(' ');\n\n if (level.toLowerCase() === 'lower')\n return 'Lower Sec - Adv';\n\n return 'Upper Sec - Adv';\n }\n\n return 'Lower - Upper Sec';\n },\n\n scottishSecondaryBuilder(audiences: PresentationAudience[]): string {\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n if (firstAudience.name === lastAudience.name)\n return firstAudience.name;\n\n if (lastAudience.name === 'Senior Phase')\n return `${firstAudience.name} - Senior`;\n\n return 'Third - Fourth Level';\n },\n\n /**\n * Handles the audience set: Reception, Key Stage 1, Lower Key Stage 2, and Upper Key Stage 2\n */\n keyStagesBuilder(audiences: PresentationAudience[]): string {\n // The first and last audience will build out the range\n const firstAudience = ArrayHelper.first(audiences);\n const lastAudience = ArrayHelper.last(audiences);\n\n // The first word in the strings will either be \"Upper\", \"Lower\", \"Key\", or \"Reception\"\n const firstAudienceFirstWord = ArrayHelper.first(firstAudience.name.split(' '));\n const lastAudienceFirstWord = ArrayHelper.first(lastAudience.name.split(' '));\n\n // Each audience in this set except for \"Reception\" has a number. Get the numbers for the first and last audiences\n const firstAudienceNumber = firstAudience.name.split(' ').find(word => !isNaN(+word));\n const lastAudienceNumber = lastAudience.name.split(' ').find(word => !isNaN(+word));\n\n // If there's only one audience on the video:\n if (firstAudience === lastAudience) {\n // For these 2 audiences, return the full name as it's short enough already\n if (firstAudienceFirstWord === 'Key' || firstAudienceFirstWord === 'Reception')\n return firstAudience.name;\n\n // For the Upper/Lower key stage audiences, abbreviate the \"key stage\" part to KS1/KS2\n return `${firstAudienceFirstWord} KS${firstAudienceNumber}`;\n }\n\n /**\n * Handle when the object has >1 audience\n */\n\n let firstAudienceString = '';\n let lastAudienceString = '';\n\n // Reception is always shortened to \"R\" when in a range\n if (firstAudienceFirstWord === 'Reception') {\n firstAudienceString = 'R';\n } else {\n // All other audiences will be abbreviated to \"KS1/KS2\"\n firstAudienceString = `KS${firstAudienceNumber}`;\n }\n\n // The last audience will always be a key stage, so abbreviate this too\n lastAudienceString = `KS${lastAudienceNumber}`;\n\n // If the audience range contains both the \"Lower\" and \"Upper\" audiences, abbreviate those and return\n if (firstAudienceFirstWord === 'Lower' && lastAudienceFirstWord === 'Upper') {\n return `L ${firstAudienceString} - U ${lastAudienceString}`;\n }\n\n // Add \"Lower\" and \"Upper\" to the strings if it's needed\n if (firstAudienceFirstWord === 'Lower') {\n firstAudienceString = `Lower ${firstAudienceString}`;\n }\n\n if (lastAudienceFirstWord === 'Upper') {\n lastAudienceString = `Upper ${lastAudienceString}`;\n }\n\n // This handles a case where the range is Reception - Key Stage 1. In which case we don't abbreviate the key stage part to KS1.\n if (lastAudienceFirstWord === 'Key') {\n lastAudienceString = lastAudience.name;\n }\n\n return `${firstAudienceString} - ${lastAudienceString}`;\n }\n};\n\nfunction processAudienceRanges(audienceValues: number[]): string[] {\n /**\n * Lookahead by increments of offset\n */\n const offset = COUNT_OFFSET;\n\n let initialVal; let nextVal;\n let isContinguous: boolean = false;\n\n const ranges: string[] = [];\n\n // Audience values need to be in ascending order\n audienceValues = audienceValues.sort((a, b) => a - b);\n\n let i; let j;\n\n for (i = 0; i < audienceValues.length; i++) {\n j = i + 1;\n\n // Set our lower boundary to compare against\n if (!isContinguous)\n initialVal = audienceValues[i];\n\n nextVal = audienceValues[j];\n\n /**\n * Where the next number is also the next incremental value\n * we're going to continue iterating until the next value\n * is no longer contiguos.\n */\n if (audienceValues[i] + offset === nextVal) {\n isContinguous = true;\n } else if (isContinguous) {\n /**\n * Where we were tracking a contiguous set, format appropriately \n * and store the vals\n */\n\n ranges.push(`${initialVal} - ${audienceValues[i]}`);\n isContinguous = false;\n } else {\n /**\n * Where the values arent contiguous, just store the current value\n */\n\n ranges.push(`${audienceValues[i]}`);\n isContinguous = false;\n }\n }\n\n return ranges;\n}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { HardCoded } from 'libs/shared/constants/HardCoded';\nimport { Audience, BaseObject, PresentationAudience } from 'libs/shared/interfaces';\n\nimport { AudienceStringBuilders } from './AudienceStringBuilders';\n\nconst DIGIT_REGEX = /([0-9]+)/ig;\nconst SPACE_REGEX = /\\s|\\+/ig;\n\n/**\n * Where there is 1 or less audiences on a presentation, it provides little value to\n * the user's experience, so we'll hide audiences altogether.\n */\nconst MIN_AUDIENCE_THRESHOLD = 1;\n\nexport const AudienceHelper = {\n /**\n * This is needed to sort an object's audiences, as they are not sorted by the backend.\n * To do this, we take the presentation audiences (sorted) and filter them by the object's\n * audiences, leaving behind a sorted array of object audiences.\n */\n getSortedPresentationAudiences(\n objectAudiences: Audience[],\n presentationAudiences: PresentationAudience[]\n ): PresentationAudience[] {\n /**\n * Atm there is a bug in flight's optimize, around multiple parts of the page \n * fetching the same object with a different response. We are filtering out\n * falsey values in our object audience ids until that's fixed. - Sha\n */\n const objectAudienceIds = objectAudiences\n .filter(v => !!v)\n .map(audience => audience.id.toString());\n\n /**\n * Remove audiences that aren't relevant for the user's current presentation\n */\n const filteredAudiences = presentationAudiences.filter(presAudience => {\n return objectAudienceIds.includes(presAudience.masterId.toString());\n });\n\n return filteredAudiences;\n },\n\n /**\n * This function accepts a set of presentation audiences, and returns a single\n * audience where the name is a merged string of the names of all of the audiences passed in.\n *\n * As we add more presentations that have different audience sets, we'll need to extend the `switch`\n * statement below to either include new string builder functions, or to include new presentation IDs\n * for existing string builder functions.\n */\n getMergedPresentationAudienceString(presentationAudiences: PresentationAudience[]): PresentationAudience {\n const { presentationId } = ArrayHelper.first(presentationAudiences);\n\n let mergedAudienceString = '';\n\n switch (+presentationId) {\n // Generic `Name Number`. Sometimes has just name. Examples: Year 12, Grade 4, Kindergarten\n case HardCoded.PresentationIds.DEFAULT:\n case HardCoded.PresentationIds.AU_SECONDARY:\n case HardCoded.PresentationIds.US_ELEMENTARY:\n case HardCoded.PresentationIds.AU_PRIMARY:\n case HardCoded.PresentationIds.STREAMABLE_LEARNING:\n if (presentationAudiences.length === 1)\n return presentationAudiences[0];\n\n mergedAudienceString = AudienceStringBuilders.yearsAndGradesBuilder(presentationAudiences);\n break;\n\n // Early Level, First Level, Second Level, etc.\n case HardCoded.PresentationIds.SCOTLAND_PRIMARY:\n case HardCoded.PresentationIds.INTERNATIONAL_PRIMARY:\n case HardCoded.PresentationIds.INTERNATIONAL_SECONDARY:\n if (presentationAudiences.length === 1)\n return presentationAudiences[0];\n\n mergedAudienceString = AudienceStringBuilders.wordyLevelsBuilder(presentationAudiences);\n break;\n\n case HardCoded.PresentationIds.ENGLISH_SECONDARY:\n mergedAudienceString = AudienceStringBuilders.englishSecondaryBuilder(presentationAudiences);\n break;\n\n \n case HardCoded.PresentationIds.SCOTLAND_SECONDARY:\n mergedAudienceString = AudienceStringBuilders.scottishSecondaryBuilder(presentationAudiences);\n break;\n\n // Key Stage 1, Lower Key Stage 2, etc.\n case HardCoded.PresentationIds.ENGLAND_PRIMARY:\n mergedAudienceString = AudienceStringBuilders.keyStagesBuilder(presentationAudiences);\n break;\n\n // These presentations only have 1 audience mapped. These are never shown as badges in the product.\n case HardCoded.PresentationIds.US_MIDDLE:\n case HardCoded.PresentationIds.US_HIGH:\n default:\n break;\n }\n\n if (!mergedAudienceString)\n return null;\n\n return { name: mergedAudienceString } as PresentationAudience;\n },\n\n /**\n * This function assumes the members array passed in is ordered by `name`.\n */\n sortMembersWithDuplicateNamesByAudience(members: BaseObject[]): BaseObject[] {\n // Returns the lowest level audience out of an array of audience objects by looking at the name\n const getLowestAudience = (audiences: Audience[]) => {\n if (!audiences.length)\n return null;\n\n let lowestAudience: Audience;\n let lowestAudienceDigit: number;\n\n audiences.forEach(audience => {\n const digit = +ArrayHelper.first(audience.name.match(DIGIT_REGEX));\n\n if (!lowestAudience) {\n lowestAudience = audience;\n lowestAudienceDigit = digit;\n return;\n }\n\n if (digit < lowestAudienceDigit)\n lowestAudience = audience;\n });\n\n return lowestAudience;\n };\n\n // This is used to track how many times a member's name appears in the collection\n const nameCountMap: HashObject<number> = {};\n\n let sorted: BaseObject[] = [];\n\n members.forEach(member => {\n if (!nameCountMap[member.name]) {\n nameCountMap[member.name] = 1;\n sorted.push(member);\n return;\n }\n\n sorted.push(member);\n nameCountMap[member.name]++;\n\n // Take the slice of duplicates that we want to sort by audience\n const slice = sorted.splice(sorted.length - nameCountMap[member.name]);\n\n // Sort the slice by lowest audience\n const sortedSlice = slice.sort((a: any, b: any) => {\n const firstObjLowestAudience = getLowestAudience(a.subjectPresentationAudiences.data);\n const secondObjLowestAudience = getLowestAudience(b.subjectPresentationAudiences.data);\n\n if (!firstObjLowestAudience && secondObjLowestAudience)\n return 1;\n\n if (!secondObjLowestAudience)\n return -1;\n\n const comparison = firstObjLowestAudience.name.localeCompare(secondObjLowestAudience.name);\n\n if (comparison === 0) return comparison;\n\n return comparison > 0 ? -1 : 1;\n });\n\n sorted = sorted.concat(sortedSlice);\n });\n\n return sorted;\n },\n\n getActiveAudiencesFromParams(audiences: PresentationAudience[], params: HashObject = {}): PresentationAudience[] {\n if (!ObjectHelper.isObject(params) || ObjectHelper.isEmpty(params))\n return;\n\n if (!audiences || !audiences.length)\n return;\n\n if (!AudienceHelper.shouldShowAudiences(audiences))\n return;\n\n // 'a' is shorthand for audience\n let { a } = params;\n\n if (!a)\n return;\n\n // Only a single query param was passed, we'll wrap it in an array\n if (typeof a === 'string')\n a = [a];\n\n const normalizeAudienceName = (audienceName: string) => {\n return audienceName.replace(SPACE_REGEX, '').toLowerCase();\n };\n\n // Build an audience lookup\n const audienceLookup = a.reduce((state: HashObject, audienceStr: string) => {\n state[normalizeAudienceName(audienceStr)] = audienceStr;\n return state;\n }, {});\n\n // Filter out our active audience based on whether their name matches the lookup object\n return audiences.filter((audience: PresentationAudience) => {\n return audienceLookup[normalizeAudienceName(audience.name)];\n });\n },\n\n getAudienceParams(audiences: PresentationAudience[]): HashObject {\n if (!audiences?.length)\n return null;\n\n return { a: audiences.map(a => a.name) };\n },\n\n shouldShowAudiences(audiences: PresentationAudience[] = []): boolean {\n if (!audiences)\n return false;\n\n return audiences.length > MIN_AUDIENCE_THRESHOLD;\n }\n};\n","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nconst namespace = 'playlists.playlistSortSelect';\n\nconst getSortTypes = FunctionHelper.memoize(() => {\n return {\n [PlaylistSortType.RecentlyUpdated]: {\n name: LanguageService.getPhrase(namespace, 'recentlyUpdated')\n },\n [PlaylistSortType.AtoZ]: {\n name: LanguageService.getPhrase(namespace, 'atoz')\n },\n [PlaylistSortType.ZtoA]: {\n name: LanguageService.getPhrase(namespace, 'ztoa')\n },\n [PlaylistSortType.Newest]: {\n name: LanguageService.getPhrase(namespace, 'newest')\n },\n [PlaylistSortType.Oldest]: {\n name: LanguageService.getPhrase(namespace, 'oldest')\n }\n };\n});\n\ninterface PlaylistSortSelectProps {\n type: PlaylistSortType;\n getSortAppLink: (sort: PlaylistSortType) => Core.AppLink;\n variant?: ButtonProps['variant'];\n}\n\nPlaylistSortSelect.defaultProps = {\n variant: 'light'\n};\n\nexport function PlaylistSortSelect(props: PlaylistSortSelectProps): JSX.Element {\n const { type, getSortAppLink, variant } = props;\n const sortTypes = getSortTypes();\n\n return (\n <div className='dropdown'>\n <a className={`btn btn-${variant} ms-2 dropdown-toggle`} type='button' id='sort-select' data-bs-toggle='dropdown' data-toggle='dropdown' aria-haspopup='true' aria-expanded='false'>\n {sortTypes[type].name}\n </a>\n <div className='dropdown-menu dropdown-menu-end dropdown-menu-right' aria-labelledby='sort-select'>\n {Object.values(PlaylistSortType).map(k => {\n let className = 'dropdown-item';\n\n if (k === type)\n className += ' active';\n\n return (\n <AppLink\n key={k}\n className={className}\n appLink={getSortAppLink(k)}\n analyticsData={{\n sort: sortTypes[k].name\n }}\n analyticsOptions={{\n location: LocationContext.PlaylistListHeader,\n entity: EntityType.Playlists,\n actionType: UserAction.Sort,\n workflowPhase: WorkflowPhase.Complete\n }}\n >\n {sortTypes[k].name}\n </AppLink>\n );\n })}\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"playlistMetadata\":\"vv8fW\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport styles from './favourites-playlist-item.scss';\n\nconst namespace = 'playlists.favouritesPlaylistItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FavouritesPlaylistItemProps {\n data: VideoTypes[];\n count: number;\n isLoadingCount: boolean;\n}\n\nexport function FavouritesPlaylistItem(props: FavouritesPlaylistItemProps): JSX.Element {\n const analyticsData = {\n name: 'Favourites',\n extraItem: 'user-favourites'\n };\n\n const analyticsOptions = {\n entity: EntityType.Playlist,\n actionType: UserAction.Click,\n location: LocationContext.PlaylistListItem\n };\n\n const coverUrl = ImageUrls.FAVOURITES_PLAYLIST.FAV_PLAYLIST_COVER ;\n const appLink = {\n application: AppChannels.MY_FAVOURITES,\n action: Actions.MyFavourites.MY_FAVOURITES\n };\n\n return (\n <AppLink\n appLink={appLink}\n analyticsData={analyticsData}\n analyticsOptions={analyticsOptions}\n title={getPhrase('favouritesTitle')}\n >\n <div className='position-relative'>\n <div className={`text-white ${styles.playlistMetadata}`}>\n {!props.isLoadingCount && (\n <span>\n <Text namespace={namespace} phrase='count' options={{ smartCount: props.count }} />\n </span>\n )}\n <h5 className={`mb-0`}><span className='clamp-2'>{getPhrase('favouritesTitle')}</span></h5>\n </div>\n \n <img src={coverUrl} className='w-100 h-100 rounded-3'/>\n </div>\n </AppLink>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'playlists.playlistsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface PlaylistEmptyStateProps {\n isStudent: boolean;\n}\n\nexport function PlaylistsEmptyState(props: PlaylistEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Playlists.PLAYLISTS} altText={getPhrase('info')} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase={props.isStudent ? 'studentInfo' : 'info'} /></EmptyState.Info>\n\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.NEW_PLAYLIST\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function PlaylistsPublicEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Playlists.PLAYLISTS_PUBLIC} altText={getPhrase('info')} />\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'publicCta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.PlaylistsLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { PartialPlaylistList } from 'libs/shared/apps/playlists/components/playlist-list/PartialPlaylistList';\nimport { PlaylistList } from 'libs/shared/apps/playlists/components/playlist-list/PlaylistList';\nimport { PlaylistSortSelect } from 'libs/shared/apps/playlists/components/sort-select/PlaylistSortSelect';\nimport { PlaylistSortType } from 'libs/shared/apps/playlists/enums/PlaylistSortType';\nimport { PlaylistType } from 'libs/shared/apps/playlists/enums/PlaylistType';\nimport { PlaylistCollectionIdentifier } from 'libs/shared/apps/playlists/interfaces/identifiers/PlaylistCollectionIdentifier';\nimport { PlaylistSortHelper } from 'libs/shared/apps/playlists/utils/PlaylistSortHelper';\nimport { Actions as ActionsComponent } from 'libs/shared/components/actions/Actions';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BG_COLOUR_CLASS_NAMES } from 'libs/shared/constants/ColourClassNames';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Playlist } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePresentationAudiences } from 'shared/hooks/usePresentationAudiences';\nimport { useFavouritesCount } from 'shared/views/favourites/hooks/useFavouritesCount';\n\nimport { FavouritesPlaylistItem } from 'apps/playlists/components/favourites-playlist-item/FavouritesPlaylistItem';\n\nimport { PlaylistsEmptyState, PlaylistsPublicEmptyState } from './empty-state/PlaylistsEmptyState';\n\nconst namespace = 'playlists.playlists';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSortAppLink(sort: PlaylistSortType): Core.AppLink {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.HOME,\n params: {\n sort: sort\n }\n };\n}\n\ninterface PlaylistsViewProps {\n getPlaylistAppLink: (playlist: Playlist) => Core.AppLink;\n sort?: PlaylistSortType;\n}\n\nexport function PlaylistsView(props: PlaylistsViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const { hasLocalPermissions, hasPermissions, isLoaded } = usePermissions();\n\n const isStudent = hasPermissions(PermissionName.StudentExperience);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const user = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n \n const audiences = usePresentationAudiences();\n\n const sort = !!user.data && PlaylistSortHelper.getOrSetSortType(user.data.id, props.sort);\n\n const { count, favourites, isLoading } = useFavouritesCount(user.data?.id);\n\n const favouritesPlaylist = {\n count,\n isLoadingCount: isLoading,\n data: favourites\n };\n\n const getPlaylistRequest = !!sort && ((cursor?: string) =>\n PlaylistRequests.getUserPlaylists(new PlaylistCollectionIdentifier(sort, cursor, PlaylistType.All)));\n\n const fetchNext = !!getPlaylistRequest && ((cursor?: string) => {\n Flight.getFetch(dispatch)(getPlaylistRequest(cursor));\n });\n\n useSetPageMetadata({\n title: getPhrase('pageTitle'),\n description: getPhrase('pageDescription')\n });\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewPlaylistsLanding) && sort;\n\n const {\n items: playlists,\n hasMore,\n isFetching\n } = useInfiniteList<Playlist>(shouldFetch ? getPlaylistRequest : false, fetchNext, onError);\n\n function onError(pageNumber: number, httpStatus: HttpStatus): void {\n if (pageNumber === 1)\n return handleHttpError(httpStatus);\n\n alerts.error(getPhrase('error'));\n }\n\n const actions = [\n {\n label: getPhrase('createPlaylist'),\n appLink: { application: AppChannels.PLAYLISTS, action: Actions.Playlists.NEW_PLAYLIST },\n svgName: cvSvgLibrary.Plus,\n className: 'btn btn-outline-dark',\n button: true,\n analyticsData: {},\n analyticsOptions: {\n location: LocationContext.Banner,\n entity: EntityType.Playlist,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Create\n }\n }\n ];\n\n const dataLoaded = (\n !!playlists &&\n !!user.data &&\n !!config.data &&\n (!!audiences.data || audiences.hasError) &&\n !!isLoaded\n );\n\n if (hasLocalPermissions(LocalPermissionName.ViewPlaylistsLanding))\n return <PlaylistsPublicEmptyState />;\n\n if (dataLoaded && !favouritesPlaylist.count && !playlists?.length)\n return <PlaylistsEmptyState isStudent={isStudent} />;\n\n return (\n <div className='bg-white px-3'>\n <div className='d-flex justify-content-between align-items-end pb-3'>\n <h1 className='h2 mb-0'><Text namespace={namespace} phrase='headerTitle' /></h1>\n {!!sort &&\n <ActionsComponent\n actions={actions}\n sortComponent={(\n <PlaylistSortSelect\n variant='outline-dark'\n type={sort}\n getSortAppLink={getSortAppLink}\n />\n )}\n />\n }\n </div>\n {dataLoaded\n ? (\n <PlaylistList\n playlists={playlists}\n getPlaylistAppLink={props.getPlaylistAppLink}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={user.data}\n presentationAudiences={audiences.data || []}\n bgColourClassNames={BG_COLOUR_CLASS_NAMES}\n itemContainerClassName='columns-of-five'\n itemStyle='round'\n showCount\n showOwner\n extraPlaylistItem={\n favouritesPlaylist.count\n ? <FavouritesPlaylistItem {...favouritesPlaylist}/>\n : null\n }\n />\n ) : <PartialPlaylistList itemClassName='columns-of-five' />\n }\n {(dataLoaded && (hasMore || isFetching)) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} />\n }\n </div>\n );\n}\n","import { Flight } from 'libs/common/react/index';\n\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport { usePresentation } from 'shared/hooks/usePresentation';\n\nexport const usePresentationAudiences = () => {\n const { activePresentation, getFallbackPresentation } = usePresentation({ redirectOnError: true });\n\n const presentation = activePresentation || getFallbackPresentation();\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!presentation &&\n AudienceRequests.presentationAudiences(presentation.id)\n );\n\n return audiences;\n};","\nimport { Flight } from 'libs/common/flight';\n\nimport { FavouriteRequests } from 'libs/shared/flight-requests/FavouriteRequests';\nimport { FavouritesCountResponse } from 'libs/shared/interfaces';\n\nexport function useFavouritesCount(userId?: string) {\n// todo there is a beckend bug that we cannot group fetch these three number\n const favouriteVideosCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesVideosCount(userId));\n const favouriteClipsCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesClipsCount(userId));\n const favouriteInteractivesCount = Flight.useBasicFetch<FavouritesCountResponse>(userId &&\n FavouriteRequests.getFavouritesInteractivesCount(userId));\n \n const totalCount = favouriteVideosCount.data?.count\n + favouriteInteractivesCount.data?.count\n + favouriteClipsCount.data?.count;\n\n const favourites = [\n ...(favouriteVideosCount.data?.data || []),\n ...(favouriteClipsCount.data?.data || []),\n ...(favouriteInteractivesCount.data?.data || [])\n ];\n\n return {\n count: totalCount,\n favourites,\n isLoading: !favouriteVideosCount.data?.data\n || !favouriteClipsCount.data?.data\n || !favouriteInteractivesCount.data?.data\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"playlistItem\":\"CaRJx\",\"playlistItemGradient\":\"BI7p2\",\"playlistMetadata\":\"eDk1l\",\"partialHeading\":\"w4lWh\",\"ownerAvatarContainer\":\"JImqE\"};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { useBootstrapPrefix, useBootstrapBreakpoints, useBootstrapMinBreakpoint } from './ThemeProvider';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst Row = /*#__PURE__*/React.forwardRef(({\n bsPrefix,\n className,\n // Need to define the default \"as\" during prop destructuring to be compatible with styled-components github.com/react-bootstrap/react-bootstrap/issues/3595\n as: Component = 'div',\n ...props\n}, ref) => {\n const decoratedBsPrefix = useBootstrapPrefix(bsPrefix, 'row');\n const breakpoints = useBootstrapBreakpoints();\n const minBreakpoint = useBootstrapMinBreakpoint();\n const sizePrefix = `${decoratedBsPrefix}-cols`;\n const classes = [];\n breakpoints.forEach(brkPoint => {\n const propValue = props[brkPoint];\n delete props[brkPoint];\n let cols;\n if (propValue != null && typeof propValue === 'object') {\n ({\n cols\n } = propValue);\n } else {\n cols = propValue;\n }\n const infix = brkPoint !== minBreakpoint ? `-${brkPoint}` : '';\n if (cols != null) classes.push(`${sizePrefix}${infix}-${cols}`);\n });\n return /*#__PURE__*/_jsx(Component, {\n ref: ref,\n ...props,\n className: classNames(className, decoratedBsPrefix, ...classes)\n });\n});\nRow.displayName = 'Row';\nexport default Row;","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["PartialPlaylistList","props","PARTIAL_PLAYLISTS","Array","numItems","className","itemClassName","showHeading","map","p","idx","key","xs","sm","lg","defaultProps","namespace","PlaylistCount","count","playlist","videos","interactives","clips","getCount","Number","isNaN","Text","phrase","options","smartCount","PlaylistOwnerAvatar","_liteOwner","_isClickViewCurated","value","ClickViewAvatar","id","currentUser","toString","url","avatar","Avatar","imageUrl","imageCdnUrl","initials","UserHelper","name","surname","PlaylistItem","ImageHelper","data","cover","size","resizeType","audiences","subjectPresentationAudiences","mergedAudience","presentationAudiences","showImage","showFallbackImage","bgColourClassNames","getBgColorClass","itemStyle","analyticsData","analyticsOptions","entity","AppLink","appLink","title","contentModifiedDate","LanguageService","timeago","DateHelper","getTitle","BaseImage","alt","ImageFallback","type","showCount","titleClassName","length","AudienceLabel","audienceLabelClass","audience","border","showOwner","actionType","location","descriptor","PlaylistList","extraPlaylistItem","itemContainerClassName","playlists","getPlaylistAppLink","itemTitleClassName","Actions","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","label","href","onClick","svgName","tooltip","showSpinner","openInNewTab","disabled","iconButton","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","dropdownToggleSvgSize","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","SvgContainer","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","showDivider","undefined","group","Tooltip","S","InfiniteScrollFooter","ref","inView","fetchOnScroll","isFetching","fetchNext","nextCursor","Spinner","as","animation","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","SCROLL_TOLERANCE","useInfiniteList","getRequest","onError","getItems","getCursor","scrollContainer","handleScroll","useState","pagesFetched","setPagesFetched","fetchNextFn","response","cursor","request","fetchNextPage","currentVal","hasMore","getBoundingClientRect","scrollTop","scrollHeight","window","innerHeight","document","documentElement","useEffect","onScroll","addEventListener","removeEventListener","shouldInitialFetch","httpStatusClass","substr","HttpStatus","items","totalItems","hasFirstPageCompleted","useMergeAudiences","sortedAudiences","HAS_NUMBER_REGEX","AudienceStringBuilders","firstAudience","ArrayHelper","lastAudience","split","toLowerCase","DIGIT_REGEX","SPACE_REGEX","AudienceHelper","getSortedPresentationAudiences","objectAudiences","objectAudienceIds","filter","v","presAudience","includes","masterId","getMergedPresentationAudienceString","mergedAudienceString","presentationId","HardCoded","combinedNames","join","numberList","num","wordList","audienceWithoutNum","find","test","prefix","charAt","pop","audienceRange","audienceValues","initialVal","nextVal","i","j","isContinguous","ranges","processAudienceRanges","audienceNames","commonWordsAndTheirPositions","index","wordsInName","Object","keys","word","commonWord","commonWordPosition","firstAudienceName","lastAudienceName","stripOutCommonWord","mergedWord","firstAudienceFirstWord","lastAudienceFirstWord","firstAudienceNumber","lastAudienceNumber","firstAudienceString","lastAudienceString","sortMembersWithDuplicateNamesByAudience","members","getLowestAudience","digit","match","lowestAudience","lowestAudienceDigit","nameCountMap","sorted","member","sortedSlice","splice","firstObjLowestAudience","secondObjLowestAudience","comparison","localeCompare","concat","getActiveAudiencesFromParams","params","ObjectHelper","shouldShowAudiences","normalizeAudienceName","audienceName","replace","audienceLookup","reduce","state","audienceStr","getAudienceParams","getSortTypes","PlaylistSortType","PlaylistSortSelect","getSortAppLink","variant","sortTypes","values","k","workflowPhase","getPhrase","FavouritesPlaylistItem","coverUrl","ImageUrls","application","extraItem","isLoadingCount","src","PlaylistsEmptyState","EmptyState","altText","isStudent","text","icon","PlaylistsPublicEmptyState","SignUp","PlaylistsView","dispatch","alerts","usePermissions","hasLocalPermissions","hasPermissions","isLoaded","PermissionName","config","ConfigRequests","user","UserRequests","usePresentationAudiences","PlaylistSortHelper","useFavouritesCount","favourites","favouritesPlaylist","isLoading","getPlaylistRequest","PlaylistRequests","PlaylistCollectionIdentifier","PlaylistType","useSetPageMetadata","description","shouldFetch","pageNumber","httpStatus","error","dataLoaded","hasError","P","redirectOnError","activePresentation","getFallbackPresentation","presentation","userId","favouriteVideosCount","favouriteClipsCount","favouriteInteractivesCount","Row","bsPrefix","Component","decoratedBsPrefix","breakpoints","minBreakpoint","sizePrefix","classes","brkPoint","propValue","cols","infix","displayName","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","parseInt","trim","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","unit"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6274],{38365:(e,t,n)=>{n.d(t,{n:()=>w,W:()=>O});var a=n(32735),r=n(80247),o=n(80130),l=n(92802),c=n(91967),i=n(1048),s=n(36848),u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function m(e){var t=e.label,n=e.checkboxLabelClassName,r=e.checkboxLabelFontWeight,l=e.className,c=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return a.createElement(o.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check ".concat(l||"")},a.createElement(w,Object.assign({className:"form-check-input"},c)),a.createElement(o.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===r?"fw-normal":""," \n ").concat(n),htmlFor:c.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&a.createElement(a.Fragment,null,a.createElement("span",null," "),a.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=n(83914),p=n(83345),f=n(73814),b=n(35223);function v(e){var t=(0,l.u6)().values[e.fieldName];return"string"!=typeof t?a.createElement(a.Fragment,null):a.createElement("div",{className:"float-end text-secondary fw-normal"},t.length,"/",e.limit," characters")}const h={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var y=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},E="shared.formField";function w(e){var t,n,o=e.children,s=e.showLoadingSpinner,u=y(e,["children","showLoadingSpinner"]),m=(t=a.useState(e.type),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,r,o,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.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)?g(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.")}()),p=m[0],f=m[1],v=c.q.isFunction(o)?function(e){return o(e)}:a.Children.count(o)?o:null;if("password"!==u.type)return s?a.createElement("div",{className:"position-relative"},a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize"])),v),a.createElement("div",{className:h.spinner},a.createElement(r.Z,{animation:"border",size:"sm"}))):a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize"])),v);var E="position-relative ".concat(h.passwordContainer);return u.className&&(E+=" ".concat(u.className)),u.disabled&&(E+=" ".concat(h.passwordContainerDisabled)),a.createElement("div",{className:E},a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(h.passwordInput," border-0 w-100 h-100 outline-none rounded")}),v),"password"===u.type&&a.createElement(d.x,{svgName:"password"===p?b.vn.VisibleOn:b.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(h.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function O(e){var t=e.label,n=e.className,r=e.showCharacterCounter,c=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,g=e.infoText,O=e.formSize,N=e.showOptionalLabel,x=y(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel"]),S=(0,l.u6)(),k=S.errors,C=S.touched,j=function(){};if("checkbox"===x.type){var P=i.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(P.onChange=j),a.createElement(m,Object.assign({},P))}var I=Object.assign(Object.assign({},x),{className:f.w.getCustomFormControlClassName(k,C,x.name,O,n,"string"==typeof e.as?e.as:null)});return e.disabled&&(I.onChange=j),a.createElement(o.Z.Group,{className:"form-group"},!!t&&a.createElement(o.Z.Label,{htmlFor:x.id,className:"d-flex align-items-center"},t,c&&a.createElement("span",{className:"text-danger"},"*"),s&&a.createElement(d.x,{className:"svg-container text-secondary ".concat(h.infoTooltip),svgName:b.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),N&&a.createElement("span",{className:"text-secondary"}," ",a.createElement(p.x,{namespace:E,phrase:"optional"})),!!r&&!!x.maxLength&&a.createElement("div",{className:"ms-auto"},a.createElement(v,{fieldName:x.name,limit:x.maxLength}))),a.createElement(w,Object.assign({},I)),!!g&&a.createElement(o.Z.Text,{className:"text-secondary"},g),a.createElement(l.Bc,{name:x.name},(function(e){return a.createElement(o.Z.Control.Feedback,{type:"invalid"},e)})))}w.defaultProps={autoComplete:"off"},O.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,n)=>{n.d(t,{b:()=>u,n:()=>s});var a=n(32735),r=n(92802),o=n(91967),l=n(1048);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var i=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function s(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,s=e.initialValues,u=e.onSubmit,m=i(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=l.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(l.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(s)):s,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,o=a.resetForm,l=a.setFieldError,i=n&&e.validationSchema?e.validationSchema.cast(t):t;u(i,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&o(),n.errors)for(var a=0,i=Object.entries(n.errors);a<i.length;a++){var s=(e=i[a],t=2,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,r,o,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(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.")}()),u=s[0],m=s[1];l(u,m)}r(!1)}))},initialStatus:p}),o.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}s.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},73814:(e,t,n)=>{n.d(t,{w:()=>r});var a=n(92802),r={getCustomFormControlClassName:function(e,t,n,r,o,l){var c="";return c=function(e,t){var n="";return n="select"===e?"form-select":"form-control","sm"===t&&(n+=" ".concat(n,"-sm")),"lg"===t&&(n+=" ".concat(n,"-lg")),n}(l,r),(0,a.u9)(t,n)&&(0,a.u9)(e,n)&&(c+=" is-invalid"),o&&(c+=" ".concat(o)),c}}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(96787);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}},36274:(e,t,n)=>{n.d(t,{D:()=>S});var a=n(32735),r=n(82644),o=n(92802),l=n(23481),c=n(38365),i=n(13876),s=n(83345),u=n(77123),m=n(11607),d=n(83914),p=n(96787),f=n(36511),b=n(35223);const v={dropdownToggle:"ajlHC",colourButton:"ixMmY",colourList:"qSQt0",colourOption:"Uln9P",selected:"XEvln"};function h(e){function t(t,n){var a="".concat(v.colourOption," position-relative"),r=e.disabled?"cursor-default":"",o=(0,f.I)(t),l=t===n?"".concat(v.selected," border border-dark"):"";return"".concat(a," ").concat(r," bg-").concat(o," ").concat(l)}var n,r,o={className:"h-100 dropdown"};return e.disabled&&(o.show=!1),a.createElement(u.Z,Object.assign({},o),a.createElement(u.Z.Toggle,{id:e.id,variant:"link",className:(n="".concat(v.dropdownToggle," p-0 d-flex align-items-center text-decoration-none h-100"),r=e.disabled?"cursor-default":"","".concat(n," ").concat(r))},a.createElement("div",{className:"d-flex align-items-center border border-secondary rounded bg-white h-100 ".concat(v.colourButton)},a.createElement("div",{className:"px-0 py-1 rounded bg-".concat((0,f.I)(e.selection))}," "),!e.disabled&&a.createElement(d.x,{svgName:b.vn.Caret}))),a.createElement(u.Z.Menu,null,a.createElement("ul",{className:"".concat(v.colourList," list-unstyled d-flex flex-wrap px-2 m-0")},Object.keys(p.R).map((function(n){var r=p.R[n];return a.createElement("li",{key:"".concat(e.id,":").concat(r),className:"m-1"},a.createElement(m.L,{onClick:function(){return e.onSelect(r)},className:t(r,e.selection)}," "))})))))}h.defaultProps={selection:p.R.Pink,onSelect:function(){}};const g={groupNameInput:"CsVDW",colourPickerContainer:"DdjHF"};var y="classrooms.classroomGroupDetailsForm",E=l.T.encloseNamespace(y);function w(e){var t=(0,r.b)();return a.createElement(o.l0,null,a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"form-group me-2"},a.createElement("label",{htmlFor:"".concat(e.isNew?"create":"edit","-classroom-group")},a.createElement(s.x,{namespace:y,phrase:"colourLabel"})),a.createElement("div",{className:g.colourPickerContainer},a.createElement(h,{onSelect:function(e){return t.setFieldValue("colour",e)},selection:t.values.colour,id:"".concat(e.isNew?"create":"edit","-classroom-group")}))),a.createElement("div",{className:"form-group w-75"},a.createElement("label",{htmlFor:"name"},a.createElement(s.x,{namespace:y,phrase:"nameLabel"})),a.createElement(c.W,{type:"text",name:"name",id:"name",className:"".concat(g.groupNameInput),placeholder:E("groupNamePlaceholder"),autoFocus:!0,value:t.values.name}))),a.createElement(i.u,null,a.createElement(i.u.Cancel,{onClick:e.onClickCancel}),a.createElement(i.u.Submit,{variant:"dark",isNew:e.isNew})))}var O=n(5173),N=l.T.encloseNamespace("classrooms.classroomValidation"),x=(0,O.Ry)().shape({name:(0,O.Z_)().max(255,(function(){return N("nameExceeds")})).required((function(){return N("nameRequired")})).default(""),description:(0,O.Z_)().default(""),colour:(0,O.Z_)().required((function(){return N("colourRequired")})).default(p.R.Pink)});function S(e){var t,n=e.group,o=e.saveGroup,l=e.onClickCancel,c={id:null==n?void 0:n.id,name:null==n?void 0:n.name,description:null==n?void 0:n.description,colour:null===(t=null==n?void 0:n.metadata)||void 0===t?void 0:t.colour};return a.createElement(r.n,{initialValues:c,validationSchema:x,onSubmit:o},a.createElement(w,{isNew:!n,onClickCancel:l}))}}}]);
|
|
2
|
-
//# sourceMappingURL=6274-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6274],{38365:(e,t,n)=>{n.d(t,{n:()=>w,W:()=>O});var a=n(32735),r=n(80247),o=n(80130),l=n(92802),c=n(91967),i=n(1048),s=n(36848),u=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function m(e){var t=e.label,n=e.checkboxLabelClassName,r=e.checkboxLabelFontWeight,l=e.className,c=u(e,["label","checkboxLabelClassName","checkboxLabelFontWeight","className"]);return a.createElement(o.Z.Group,{className:"form-group"},a.createElement("div",{className:"form-check ".concat(l||"")},a.createElement(w,Object.assign({className:"form-check-input"},c)),a.createElement(o.Z.Label,{className:"form-check-label cursor-pointer ".concat("normal"===r?"fw-normal":""," \n ").concat(n),htmlFor:c.id},t),e.checkboxAppLink&&e.checkboxAppLinkText&&a.createElement(a.Fragment,null,a.createElement("span",null," "),a.createElement(s.F,{appLink:e.checkboxAppLink,className:"info-link"},e.checkboxAppLinkText))))}var d=n(83914),p=n(83345),f=n(73814),b=n(35223);function v(e){var t=(0,l.u6)().values[e.fieldName];return"string"!=typeof t?a.createElement(a.Fragment,null):a.createElement("div",{className:"float-end text-secondary fw-normal"},t.length,"/",e.limit," characters")}const h={revealPassword:"jCfI0",passwordInput:"RBJnf",passwordContainer:"d78lK",passwordContainerDisabled:"asbVo",infoTooltip:"wzyOG",spinner:"CycFx"};function g(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var y=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n},E="shared.formField";function w(e){var t,n,o=e.children,s=e.showLoadingSpinner,u=y(e,["children","showLoadingSpinner"]),m=(t=a.useState(e.type),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,r,o,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return g(e,t);var n=Object.prototype.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)?g(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.")}()),p=m[0],f=m[1],v=c.q.isFunction(o)?function(e){return o(e)}:a.Children.count(o)?o:null;if("password"!==u.type)return s?a.createElement("div",{className:"position-relative"},a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize"])),v),a.createElement("div",{className:h.spinner},a.createElement(r.Z,{animation:"border",size:"sm"}))):a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize"])),v);var E="position-relative ".concat(h.passwordContainer);return u.className&&(E+=" ".concat(u.className)),u.disabled&&(E+=" ".concat(h.passwordContainerDisabled)),a.createElement("div",{className:E},a.createElement(l.gN,Object.assign({},i.t.omit(u,["formSize","type","className"]),{type:p,className:"".concat(h.passwordInput," border-0 w-100 h-100 outline-none rounded")}),v),"password"===u.type&&a.createElement(d.x,{svgName:"password"===p?b.vn.VisibleOn:b.vn.VisibleOff,className:"svg-container cursor-pointer ".concat(h.revealPassword),onClick:function(){f("password"===p?"text":"password")}}))}function O(e){var t=e.label,n=e.className,r=e.showCharacterCounter,c=e.showRequiredStar,s=e.infoTooltip,u=e.infoTooltipPlacement,g=e.infoText,O=e.formSize,N=e.showOptionalLabel,x=y(e,["label","className","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel"]),S=(0,l.u6)(),k=S.errors,C=S.touched,j=function(){};if("checkbox"===x.type){var P=i.t.omit(e,["formSize","infoTooltipPlacement"]);return e.disabled&&(P.onChange=j),a.createElement(m,Object.assign({},P))}var I=Object.assign(Object.assign({},x),{className:f.w.getCustomFormControlClassName(k,C,x.name,O,n,"string"==typeof e.as?e.as:null)});return e.disabled&&(I.onChange=j),a.createElement(o.Z.Group,{className:"form-group"},!!t&&a.createElement(o.Z.Label,{htmlFor:x.id,className:"d-flex align-items-center"},t,c&&a.createElement("span",{className:"text-danger"},"*"),s&&a.createElement(d.x,{className:"svg-container text-secondary ".concat(h.infoTooltip),svgName:b.vn.Info,title:s,tooltipPlacement:u,tooltipSpanHack:!0}),N&&a.createElement("span",{className:"text-secondary"}," ",a.createElement(p.x,{namespace:E,phrase:"optional"})),!!r&&!!x.maxLength&&a.createElement("div",{className:"ms-auto"},a.createElement(v,{fieldName:x.name,limit:x.maxLength}))),a.createElement(w,Object.assign({},I)),!!g&&a.createElement(o.Z.Text,{className:"text-secondary"},g),a.createElement(l.Bc,{name:x.name},(function(e){return a.createElement(o.Z.Control.Feedback,{type:"invalid"},e)})))}w.defaultProps={autoComplete:"off"},O.defaultProps={autoComplete:"off",infoTooltipPlacement:"top"}},82644:(e,t,n)=>{n.d(t,{b:()=>u,n:()=>s});var a=n(32735),r=n(92802),o=n(91967),l=n(1048);function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var i=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var r=0;for(a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]])}return n};function s(e){var t=e.castInitialValues,n=e.castValuesOnSubmit,s=e.initialValues,u=e.onSubmit,m=i(e,["castInitialValues","castValuesOnSubmit","initialValues","onSubmit"]),d=t&&e.validationSchema?e.validationSchema.cast(function(e){if(!e)return{};var t=l.t.deepClone(e);return function e(n){Object.keys(t).forEach((function(a){t.hasOwnProperty(a)&&(l.t.isObject(n[a])?e(n[a]):null===t[a]&&delete t[a])}))}(t),t}(s)):s,p={allowInitialSubmit:e.allowInitialSubmit};return a.createElement(r.J9,Object.assign({enableReinitialize:!0},m,{initialValues:d,onSubmit:function(t,a){var r=a.setSubmitting,o=a.resetForm,l=a.setFieldError,i=n&&e.validationSchema?e.validationSchema.cast(t):t;u(i,(function(){var e,t,n=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(n.reset&&o(),n.errors)for(var a=0,i=Object.entries(n.errors);a<i.length;a++){var s=(e=i[a],t=2,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,r,o,l,c=[],i=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;i=!1}else for(;!(i=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return c(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?c(e,t):void 0}}(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.")}()),u=s[0],m=s[1];l(u,m)}r(!1)}))},initialStatus:p}),o.q.isFunction(e.children)?function(t){return e.children(t)}:a.Children.count(e.children)?e.children:null)}function u(){return(0,r.u6)()}s.defaultProps={castInitialValues:!0,castValuesOnSubmit:!0}},73814:(e,t,n)=>{n.d(t,{w:()=>r});var a=n(92802),r={getCustomFormControlClassName:function(e,t,n,r,o,l){var c="";return c=function(e,t){var n="";return n="select"===e?"form-select":"form-control","sm"===t&&(n+=" ".concat(n,"-sm")),"lg"===t&&(n+=" ".concat(n,"-lg")),n}(l,r),(0,a.u9)(t,n)&&(0,a.u9)(e,n)&&(c+=" is-invalid"),o&&(c+=" ".concat(o)),c}}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(96787);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}},36274:(e,t,n)=>{n.d(t,{D:()=>S});var a=n(32735),r=n(82644),o=n(92802),l=n(23481),c=n(38365),i=n(13876),s=n(83345),u=n(34509),m=n(11607),d=n(83914),p=n(96787),f=n(36511),b=n(35223);const v={dropdownToggle:"ajlHC",colourButton:"ixMmY",colourList:"qSQt0",colourOption:"Uln9P",selected:"XEvln"};function h(e){function t(t,n){var a="".concat(v.colourOption," position-relative"),r=e.disabled?"cursor-default":"",o=(0,f.I)(t),l=t===n?"".concat(v.selected," border border-dark"):"";return"".concat(a," ").concat(r," bg-").concat(o," ").concat(l)}var n,r,o={className:"h-100 dropdown"};return e.disabled&&(o.show=!1),a.createElement(u.Z,Object.assign({},o),a.createElement(u.Z.Toggle,{id:e.id,variant:"link",className:(n="".concat(v.dropdownToggle," p-0 d-flex align-items-center text-decoration-none h-100"),r=e.disabled?"cursor-default":"","".concat(n," ").concat(r))},a.createElement("div",{className:"d-flex align-items-center border border-secondary rounded bg-white h-100 ".concat(v.colourButton)},a.createElement("div",{className:"px-0 py-1 rounded bg-".concat((0,f.I)(e.selection))}," "),!e.disabled&&a.createElement(d.x,{svgName:b.vn.Caret}))),a.createElement(u.Z.Menu,null,a.createElement("ul",{className:"".concat(v.colourList," list-unstyled d-flex flex-wrap px-2 m-0")},Object.keys(p.R).map((function(n){var r=p.R[n];return a.createElement("li",{key:"".concat(e.id,":").concat(r),className:"m-1"},a.createElement(m.L,{onClick:function(){return e.onSelect(r)},className:t(r,e.selection)}," "))})))))}h.defaultProps={selection:p.R.Pink,onSelect:function(){}};const g={groupNameInput:"CsVDW",colourPickerContainer:"DdjHF"};var y="classrooms.classroomGroupDetailsForm",E=l.T.encloseNamespace(y);function w(e){var t=(0,r.b)();return a.createElement(o.l0,null,a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"form-group me-2"},a.createElement("label",{htmlFor:"".concat(e.isNew?"create":"edit","-classroom-group")},a.createElement(s.x,{namespace:y,phrase:"colourLabel"})),a.createElement("div",{className:g.colourPickerContainer},a.createElement(h,{onSelect:function(e){return t.setFieldValue("colour",e)},selection:t.values.colour,id:"".concat(e.isNew?"create":"edit","-classroom-group")}))),a.createElement("div",{className:"form-group w-75"},a.createElement("label",{htmlFor:"name"},a.createElement(s.x,{namespace:y,phrase:"nameLabel"})),a.createElement(c.W,{type:"text",name:"name",id:"name",className:"".concat(g.groupNameInput),placeholder:E("groupNamePlaceholder"),autoFocus:!0,value:t.values.name}))),a.createElement(i.u,null,a.createElement(i.u.Cancel,{onClick:e.onClickCancel}),a.createElement(i.u.Submit,{variant:"dark",isNew:e.isNew})))}var O=n(5173),N=l.T.encloseNamespace("classrooms.classroomValidation"),x=(0,O.Ry)().shape({name:(0,O.Z_)().max(255,(function(){return N("nameExceeds")})).required((function(){return N("nameRequired")})).default(""),description:(0,O.Z_)().default(""),colour:(0,O.Z_)().required((function(){return N("colourRequired")})).default(p.R.Pink)});function S(e){var t,n=e.group,o=e.saveGroup,l=e.onClickCancel,c={id:null==n?void 0:n.id,name:null==n?void 0:n.name,description:null==n?void 0:n.description,colour:null===(t=null==n?void 0:n.metadata)||void 0===t?void 0:t.colour};return a.createElement(r.n,{initialValues:c,validationSchema:x,onSubmit:o},a.createElement(w,{isNew:!n,onClickCancel:l}))}}}]);
|
|
2
|
+
//# sourceMappingURL=6274-473fcd2e63-lite.chunk.js.map
|