@clickview/lite 0.67.0-rc.5 → 0.67.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{6822-lite-c32c06fff9.chunk.css → 1319-lite-f181681870.chunk.css} +1 -0
- package/dist/css/{1265-lite-cf5a64d933.chunk.css → 2205-lite-daccc93768.chunk.css} +1 -0
- package/dist/css/3407-lite-2b6d2c3596.chunk.css +1 -0
- package/dist/css/{1928-lite-7535155363.chunk.css → 3657-lite-30c63783c6.chunk.css} +1 -0
- package/dist/css/4205-lite-2b6d2c3596.chunk.css +1 -0
- package/dist/css/{6264-lite-6c16dff355.chunk.css → 4586-lite-2b4142796a.chunk.css} +1 -0
- package/dist/css/{3192-lite-dca2cbecd4.chunk.css → 5259-lite-c43d17524f.chunk.css} +1 -0
- package/dist/css/{2613-lite-2b363e89ec.chunk.css → 897-lite-49388db199.chunk.css} +1 -0
- package/dist/css/{lite-app-d8fa7e0f98.css → lite-app-d2e53316e7.css} +5 -6
- package/dist/scripts/{6822-e059388f0e-lite.chunk.js → 1319-44debe2be5-lite.chunk.js} +2 -2
- package/dist/scripts/{6822-e059388f0e-lite.chunk.js.map → 1319-44debe2be5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1265-1c11ef03e1-lite.chunk.js → 2205-7596edf3ff-lite.chunk.js} +3 -3
- package/dist/scripts/2205-7596edf3ff-lite.chunk.js.map +1 -0
- package/dist/scripts/{2564-b38ceabfc3-lite.chunk.js → 2564-7758fc9a23-lite.chunk.js} +2 -2
- package/dist/scripts/{2564-b38ceabfc3-lite.chunk.js.map → 2564-7758fc9a23-lite.chunk.js.map} +1 -1
- package/dist/scripts/3407-d7bb190086-lite.chunk.js +2 -0
- package/dist/scripts/3407-d7bb190086-lite.chunk.js.map +1 -0
- package/dist/scripts/{1928-2bdfd44f43-lite.chunk.js → 3657-9ab3ea0e92-lite.chunk.js} +2 -2
- package/dist/scripts/{1928-2bdfd44f43-lite.chunk.js.map → 3657-9ab3ea0e92-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3978-e86c2d54be-lite.chunk.js → 3978-ef3884cfe5-lite.chunk.js} +2 -2
- package/dist/scripts/{3978-e86c2d54be-lite.chunk.js.map → 3978-ef3884cfe5-lite.chunk.js.map} +1 -1
- package/dist/scripts/4205-b37ae8ccb9-lite.chunk.js +3 -0
- package/dist/scripts/4205-b37ae8ccb9-lite.chunk.js.map +1 -0
- package/dist/scripts/{6264-4b52686f8d-lite.chunk.js → 4586-f9ab450399-lite.chunk.js} +2 -2
- package/dist/scripts/{6264-4b52686f8d-lite.chunk.js.map → 4586-f9ab450399-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3192-5fafe73839-lite.chunk.js → 5259-c1be5e460a-lite.chunk.js} +2 -2
- package/dist/scripts/{3192-5fafe73839-lite.chunk.js.map → 5259-c1be5e460a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5722-2704be9eac-lite.chunk.js → 5722-ffeb02c053-lite.chunk.js} +2 -2
- package/dist/scripts/5722-ffeb02c053-lite.chunk.js.map +1 -0
- package/dist/scripts/6450-8f22c3d427-lite.chunk.js +2 -0
- package/dist/scripts/6450-8f22c3d427-lite.chunk.js.map +1 -0
- package/dist/scripts/6919-afa7705c12-lite.chunk.js +2 -0
- package/dist/scripts/{2121-aec96064d1-lite.chunk.js.map → 6919-afa7705c12-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7318-20bc42718d-lite.chunk.js → 7318-bf6bb0e9f7-lite.chunk.js} +2 -2
- package/dist/scripts/{7318-20bc42718d-lite.chunk.js.map → 7318-bf6bb0e9f7-lite.chunk.js.map} +1 -1
- package/dist/scripts/7426-c64273c529-lite.chunk.js +3 -0
- package/dist/scripts/7426-c64273c529-lite.chunk.js.map +1 -0
- package/dist/scripts/897-10a911aed5-lite.chunk.js +2 -0
- package/dist/scripts/897-10a911aed5-lite.chunk.js.map +1 -0
- package/dist/scripts/9630-871c10832c-lite.chunk.js +3 -0
- package/dist/scripts/9630-871c10832c-lite.chunk.js.LICENSE.txt +1 -0
- package/dist/scripts/9630-871c10832c-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-60e5e2f3ee.min.js → bundle-3fed522614.min.js} +3 -3
- package/dist/scripts/{bundle-60e5e2f3ee.min.js.map → bundle-3fed522614.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1265-1c11ef03e1-lite.chunk.js.map +0 -1
- package/dist/scripts/1477-fa0f6cc194-lite.chunk.js +0 -2
- package/dist/scripts/1477-fa0f6cc194-lite.chunk.js.map +0 -1
- package/dist/scripts/2121-aec96064d1-lite.chunk.js +0 -2
- package/dist/scripts/2613-3d81a10b0b-lite.chunk.js +0 -2
- package/dist/scripts/2613-3d81a10b0b-lite.chunk.js.map +0 -1
- package/dist/scripts/4005-d961c9bbff-lite.chunk.js +0 -3
- package/dist/scripts/4005-d961c9bbff-lite.chunk.js.map +0 -1
- package/dist/scripts/5722-2704be9eac-lite.chunk.js.map +0 -1
- package/dist/scripts/7426-f704b4187d-lite.chunk.js +0 -3
- package/dist/scripts/7426-f704b4187d-lite.chunk.js.map +0 -1
- package/dist/scripts/9630-94751b1994-lite.chunk.js +0 -2
- package/dist/scripts/9630-94751b1994-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1265-1c11ef03e1-lite.chunk.js.LICENSE.txt → 2205-7596edf3ff-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{2564-b38ceabfc3-lite.chunk.js.LICENSE.txt → 2564-7758fc9a23-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4005-d961c9bbff-lite.chunk.js.LICENSE.txt → 4205-b37ae8ccb9-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7426-f704b4187d-lite.chunk.js.LICENSE.txt → 7426-c64273c529-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-60e5e2f3ee.min.js.LICENSE.txt → bundle-3fed522614.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3407],{1353:(e,t,n)=>{n.d(t,{$:()=>d});var r=n(32735),i=n(23481),l=n(11607),a=n(54610),c=n(67453),o=n(22161),u=i.T.encloseNamespace("shared.curriculumLinks");function d(e){var t,n=e.data;return r.createElement(l.L,{key:n.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center ".concat(o.Z.tag," ").concat(e.selected?o.Z.selected:""),onClick:function(){return e.onChangeCurriculum(n.id.toString())},"aria-label":"".concat(u("ariaFilter")," ").concat(n.name)},(null===(t=n.cover)||void 0===t?void 0:t.url)&&r.createElement("div",{className:"bg-white ".concat(o.Z.cover," rounded-circle border")},r.createElement("img",{src:c.j.createUrl(n.cover.url,{size:a.h2.Small}),alt:n.name,className:"rounded-circle"})),r.createElement("div",{className:"ms-2"},n.name))}},63112:(e,t,n)=>{n.d(t,{o:()=>l});var r=n(32735),i=n(91807),l=r.memo((function(e){var t=e.tagClass,n="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(i.Z.partialTag);return r.createElement("div",{className:"mt-1"},r.createElement("span",{className:n}," "))}))},65163:(e,t,n)=>{n.d(t,{QL:()=>r.Q,eb:()=>r.e});var r=n(16450);n(14244)},7506:(e,t,n)=>{n.r(t),n.d(t,{ViewCurriculumLinksView:()=>S});var r=n(32735),i=n(80247),l=n(23481),a=n(20354),c=n(75896),o=n(49985),u=n(65858),d=n(1353),s=n(93439),m=n(9111),v=n(13876),p=n(63112),f=n(65163),g=n(1575),h=n(69883),y=n(99742),b=n(82817);function C(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,i,l,a,c=[],o=!0,u=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=l.call(n)).done)&&(c.push(r.value),c.length!==t);o=!0);}catch(e){u=!0,i=e}finally{try{if(!o&&null!=n.return&&(a=n.return(),Object(a)!==a))return}finally{if(u)throw i}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return E(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?E(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function E(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var k=l.T.encloseNamespace("shared.viewCurriculumLinks");function S(e){var t,n=(0,b.M)(e.id),l=n.hasLoaded,E=n.preferredCurriculum,S=n.availableCurriculums,N=n.nonEmptyCurriculums,w=n.curriculumLinks,L=n.updateCurriculum,x=C(r.useState(!l),2),j=x[0],A=x[1],U=C(r.useState(),2),Z=U[0],I=U[1],P=a.a.useBasicFetch(g.R.video(e.id)),T=(0,h.Z)();function _(e){var t,n,r=S.find((function(t){return t.id.toString()===e}));(null==r?void 0:r.id)&&(null===(t=null==Z?void 0:Z.id)||void 0===t?void 0:t.toString())!==(null===(n=null==r?void 0:r.id)||void 0===n?void 0:n.toString())&&(I(r),A(!0),L(r,(function(){var e,t;o.k.logUserAction({id:r.id,name:r.id,description:r.description,videoId:null===(e=P.data)||void 0===e?void 0:e.id,videoName:null===(t=P.data)||void 0===t?void 0:t.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.PlayPage})}),(function(){I(Z),A(!1),T.error(k("updateFailed"))})))}return r.useEffect((function(){l&&(Z||I(null!=E?E:c.m.first(S)),A(!1))}),[null==E?void 0:E.id,l]),r.createElement(m.G,{title:k("heading"),closePopup:e.closePopup,size:"lg"},r.createElement("div",{className:"mb-3 mx-2"},!!(null==N?void 0:N.length)&&r.createElement(f.eb,{collection:N,childClassName:"flex-shrink-0",childComponent:function(e){var t;return r.createElement(d.$,Object.assign({},e,{selected:(null===(t=null==Z?void 0:Z.id)||void 0===t?void 0:t.toString())===e.data.id.toString(),onChangeCurriculum:_}))},partialLoadingComponent:function(){return r.createElement(p.o,null)},widgetDataDeps:[null===(t=null==Z?void 0:Z.id)||void 0===t?void 0:t.toString()]})),j?r.createElement("div",{className:"d-flex justify-content-center align-items-center py-5"},r.createElement(i.Z,{as:"div",animation:"border",role:"status"})):r.createElement("div",{className:"pb-3"},r.createElement(s.h,{curriculumLinks:w,emptyStateUrl:y.W.EmptyStates.CURRICULUM_LINKS,onChangeCurriculum:_,hasNonEmptyCurriculums:!!N.length})),r.createElement(v.u,null,r.createElement(v.u.Submit,{variant:"dark",onClick:e.closePopup,text:k("close")})))}}}]);
|
|
2
|
+
//# sourceMappingURL=3407-d7bb190086-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/3407-d7bb190086-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/projects/lite/src/shared/views/view-curriculum-links/ViewCurriculumLinksView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n aria-label={`${getPhrase('ariaFilter')} ${curriculumTag.name}`}\n >\n {curriculumTag.cover?.url && (\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n )}\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.viewCurriculumLinks');\n\ninterface ViewCurriculumLinksViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ViewCurriculumLinksView(props: ViewCurriculumLinksViewProps): React.ReactElement {\n const {\n hasLoaded,\n preferredCurriculum,\n availableCurriculums,\n nonEmptyCurriculums,\n curriculumLinks,\n updateCurriculum\n } = useCurriculums(props.id);\n\n const [ showLoadingSpinner, setShowLoadingSpinner ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const alerts = useAlerts();\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowLoadingSpinner(true);\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: video.data?.id,\n videoName: video.data?.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowLoadingSpinner(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(preferredCurriculum ?? ArrayHelper.first(availableCurriculums));\n\n setShowLoadingSpinner(false);\n }, [ preferredCurriculum?.id, hasLoaded ]);\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n size='lg'\n >\n <div className='mb-3 mx-2'>\n {!!nonEmptyCurriculums?.length && (\n <DynamicWidget\n collection={nonEmptyCurriculums}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n )}\n </div>\n\n {!showLoadingSpinner ? (\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n onChangeCurriculum={onChangeCurriculum}\n hasNonEmptyCurriculums={!!nonEmptyCurriculums.length}\n />\n </div>\n ) : (\n <div className='d-flex justify-content-center align-items-center py-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Submit variant='dark' onClick={props.closePopup} text={getPhrase('close')} />\n </PopupButtons>\n </Popup>\n );\n}\n"],"names":["getPhrase","CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","name","cover","url","src","size","alt","PartialTagItem","tagClass","classNames","ViewCurriculumLinksView","hasLoaded","preferredCurriculum","availableCurriculums","nonEmptyCurriculums","curriculumLinks","updateCurriculum","showLoadingSpinner","setShowLoadingSpinner","selectedCurriculum","setSelectedCurriculum","video","alerts","curriculumId","newCurriculum","find","c","description","videoId","videoName","entity","actionType","descriptor","location","error","title","closePopup","length","collection","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","as","animation","role","emptyStateUrl","hasNonEmptyCurriculums","variant","text"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3657],{78681:(e,a,t)=>{t.d(a,{Z:()=>r});var r={ratings:function(){return{url:"/api/domain/v2/me/ratings",key:"ratings"}}}},66446:(e,a,t)=>{t.r(a),t.d(a,{StudentManagerView:()=>W});var r=t(32735),s=t(70680),n=t(23481),o=t(20354),c=t(88822),u=t(75896),i=t(86685),l=t(18559),d=t(83345),m="userManager.unknownYearGroupWarning";function p(e){var a=e.ratings.filter((function(e){return!!e.code})),t=u.m.first(a.sort((function(e,a){return e.value-a.value})));return r.createElement(d.D.Provider,{value:m},r.createElement(i.W,null,r.createElement(d.x,{phrase:"unknownYearGroupStudents"}),r.createElement("div",{className:"d-inline-flex"},r.createElement(l.C,{data:t,type:l.g.Rating,className:" mx-2"})),r.createElement(d.x,{phrase:"unknownYearGroupPrompt"})))}var v=t(46456),y=t(26055),g=t(43820),E=t(56138),h=t(39739),f=t(37395),b=t(99705),k=t(76881),S=t(39151),T=t(70145),P=t(78681),A=t(44538),N=t(31949),R=t(69883),j=t(91286),x=t(79612),U=t(12778),w=t(99742),C=t(29613),I=t(48327),M=t(47288),B=t(51180),q=t(18087),G=t(23232),L=t(35223),_=t(14070),F=t(97291),Y="userManager.studentManagerEmptyState",J=k.Y.Learner;function O(){return r.createElement(d.D.Provider,{value:Y},r.createElement(G.u,null,r.createElement(G.u.Image,{src:w.W.EmptyStates.UserManager.STUDENTS,size:"small"}),r.createElement(G.u.Heading,null,r.createElement(d.x,{phrase:"heading"})),r.createElement(G.u.Info,null,r.createElement(d.x,{phrase:"info"})),r.createElement("div",{className:"d-flex justify-content-center align-items-center"},r.createElement("div",{className:"px-1"},r.createElement(G.u.Cta,{text:n.T.getPhrase(Y,"addNew"),icon:L.vn.Plus,appLink:{application:F.O.USER_MANAGER,action:_.e.UserManager.CREATE_USER,params:{userType:J}}})),r.createElement("div",{className:"px-1"},r.createElement(G.u.Cta,{text:n.T.getPhrase(Y,"uploadAList"),icon:L.vn.Upload,appLink:{application:F.O.USER_MANAGER,action:_.e.UserManager.USER_UPLOAD_POPUP,params:{userType:J}}})))))}var V=n.T.encloseNamespace("userManager.studentManager"),D=k.Y.Learner;function W(e){var a,t,n,u,i,l,d,m,G,L;(0,x.M)({title:V("pageTitle")});var _=(0,q.Y)(D,e.queryParams),F=(0,s.I0)(),Y=(0,R.Z)(),J=o.a.useBasicFetch(A.K.getRostering()),W=o.a.useBasicFetch(N.N.currentUser()),H=o.a.useBasicFetch(S.L.config()),Z=o.a.useBasicFetch(W.data&&M.N.yearGroups(W.data.customerId)),K=o.a.useBasicFetch(!!W.data&&C.q.getYearGroupRolloverStatus(W.data.customerId)),z=o.a.useBasicFetch(!!W.data&&M.N.getIdentityProviders(W.data.customerId)),Q=o.a.useBasicFetch(T.h.userProducts()),X=o.a.useBasicFetch(P.Z.ratings()),$=(null===(a=J.data)||void 0===a?void 0:a.status)&&"None"!==J.data.status,ee=(0,B.T)(W.data,e.queryParams,D),ae=function(e){return o.a.useBasicFetch(e&&M.N.userCount(e.customerId,e.id,k.Y.Learner,{yearGroup:["0"]}))}(W.data),te=ae.data&&(null===(t=ae.data)||void 0===t?void 0:t.count)>0,re=ee.data?"results"in ee.data?ee.data.results:ee.data.data:null;o.a.useBasicFetch(M.N.authenticationMethods(null!==(u=null===(n=null==re?void 0:re.map((function(e){return e.id})))||void 0===n?void 0:n.sort())&&void 0!==u?u:[]));var se=(0,E.x)({userType:D,queryParams:e.queryParams,getUserCountRequest:M.N.userCount});(0,j.v)(ee);var ne=h.P.showEmptyState(ee,e.queryParams);return r.createElement(y.A.Provider,{value:g.a.Primary},te&&r.createElement(p,{ratings:X.data}),r.createElement("div",{className:"px-3"},r.createElement(v.g,{userType:D,appLinks:_,users:re,userCount:se.data,hasRostering:$,hasSso:!!(null===(i=z.data)||void 0===i?void 0:i.length)}),ne?r.createElement(O,null):r.createElement("main",{className:"py-3 clearfix"},r.createElement(c.G,{users:re,userType:D,config:H.data,currentUser:W.data,appLinks:_,searchEmptyState:w.W.EmptyStates.UserManager.SEARCH,totalUsers:null===(l=se.data)||void 0===l?void 0:l.count,queryParams:e.queryParams,yearGroups:Z.data,yearGroupRolloverStatus:K.data,fetchUserIds:function(a){o.a.fetch(F,M.N.getSearchUserIds(W.data.customerId,W.data.id,D,e.queryParams,a))},ssoHelpArticle:U.o.getLiteArticle(b.b.EditSsoAccounts),onClickSendVerificationEmail:function(e){o.a.fetch(F,M.N.resendVerificationEmail(e.id,W.data.customerId,(function(){Y.success(V("resendVerificationEmailSuccess",{email:e.email,escapeText:!0}))}),(function(){Y.error(V("resendVerificationEmailError",{email:e.email,escapeText:!0}))})))},onClickResendActivationEmail:function(e){o.a.fetch(F,M.N.resendActivationEmail(e.id,(function(){Y.success(V("resendActivationEmailSuccess",{email:e.email,escapeText:!0}))}),(function(){Y.error(V("resendActivationEmailError",{email:e.email,escapeText:!0}))})))},hasSso:!!(null===(d=z.data)||void 0===d?void 0:d.length),userRequest:N.N.getUserIdByQuery,selectWithSpreadsheetTemplate:I.d,hasRostering:$,products:null!==(m=Q.data.map((function(e){return e.id})))&&void 0!==m?m:[]}),!!(null===(L=null===(G=ee.data)||void 0===G?void 0:G.pagination)||void 0===L?void 0:L.cursors)&&r.createElement(f.t,{appLink:_.search,cursors:ee.data.pagination.cursors,buttonVariant:"outline-dark",className:"py-2 float-end"}))))}},29613:(e,a,t)=>{t.d(a,{q:()=>o});var r=t(99940),s=t(97395),n=t(149),o={createJob:function(e,a,t){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:r.k.POST,data:e,success:a,error:t}},getJobs:function(e){var a={},t=[],r=[];return e.cursor&&(a.cursor=e.cursor),e.sort&&("oldest"===e.sort?a.order="ASC":a.order="DESC"),e.bulkActionType?(t=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],a.type=t):a.type=n.O,e.userType&&(r=Array.isArray(e.userType)?e.userType:[e.userType],a.dataType=r),{url:s._.urlBuilder("{gateway}/v1/batch/jobs",a),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(t.sort().join(":"),":").concat(r.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,a,t){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:a,error:t}},getJobResults:function(e,a,t,r,n){var o={status:a};return t&&(o.cursor=t),{url:s._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),o),key:"job:".concat(e,":results:").concat(a,":").concat(t),success:r,error:n}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:r.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}}}]);
|
|
2
|
+
//# sourceMappingURL=3657-9ab3ea0e92-lite.chunk.js.map
|
package/dist/scripts/{1928-2bdfd44f43-lite.chunk.js.map → 3657-9ab3ea0e92-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/1928-2bdfd44f43-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/flight-requests/RatingRequests.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/unknown-year-group-warning/UnknownYearGroupWarning.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/student-manager/empty-state/LiteStudentManagerEmptyState.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/student-manager/LiteStudentManagerView.tsx","file:///app/packages/projects/lite/src/apps/user-manager/hooks/useUnknownYearGroupUsersCount.ts","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nexport const RatingRequests = {\n ratings(): Flight.Request {\n return {\n url: '/api/domain/v2/me/ratings',\n key: 'ratings'\n };\n }\n};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Rating } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.unknownYearGroupWarning';\n\ninterface UnknownYearGroupWarningProps {\n ratings: Rating[];\n}\n\nexport function UnknownYearGroupWarning(props: UnknownYearGroupWarningProps): JSX.Element {\n const validRatings = props.ratings.filter(r => !!r.code);\n const lowestRatings = ArrayHelper.first(validRatings.sort((a, b) => a.value - b.value));\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <WarningAlert>\n <Text phrase='unknownYearGroupStudents' />\n <div className='d-inline-flex'>\n <Badge data={lowestRatings} type={BadgeType.Rating} className=' mx-2' />\n </div>\n <Text phrase='unknownYearGroupPrompt' />\n </WarningAlert>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\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 = 'userManager.studentManagerEmptyState';\nconst userType = UserGroup.Learner;\n\nexport function StudentManagerEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.UserManager.STUDENTS} size='small' />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <div className='d-flex justify-content-center align-items-center'>\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addNew')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.CREATE_USER,\n params: { userType }\n }}\n />\n </div>\n\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'uploadAList')}\n icon={cvSvgLibrary.Upload}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.USER_UPLOAD_POPUP,\n params: { userType }\n }}\n />\n </div>\n </div>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ManageUsers } from 'libs/shared/apps/user-manager/components/manage-users/ManageUsers';\nimport { UnknownYearGroupWarning } from 'libs/shared/apps/user-manager/components/unknown-year-group-warning/UnknownYearGroupWarning';\nimport { UserManagerHeader } from 'libs/shared/apps/user-manager/components/user-manager-header/UserManagerHeader';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useFetchUserCount } from 'libs/shared/apps/user-manager/hooks/useFetchUserCount';\nimport { GetIdentityProvidersResponse } from 'libs/shared/apps/user-manager/interfaces/GetIdentityProvidersResponse';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { YearGroupRolloverStatus } from 'libs/shared/apps/user-manager/interfaces/YearGroupRolloverStatus';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Product, Rating, RosteringResponse, User, YearGroup } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SelectWithSpreadsheetTemplates } from 'apps/user-manager/constants/SelectWithSpreadsheetTemplate';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { useFetchUsers } from 'apps/user-manager/hooks/useFetchUsers';\nimport { useUnknownYearGroupUsersCount } from 'apps/user-manager/hooks/useUnknownYearGroupUsersCount';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nimport { StudentManagerEmptyState } from './empty-state/LiteStudentManagerEmptyState';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.studentManager');\n\nconst userType = UserGroup.Learner;\n\ninterface StudentManagerViewProps {\n queryParams: UserManagerQueryParams;\n}\n\nexport function StudentManagerView(props: StudentManagerViewProps): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n const appLinks = getUserManagerAppLinks(userType, props.queryParams);\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && UserManagerRequests.yearGroups(currentUser.data.customerId)\n );\n const yearGroupRolloverStatus = Flight.useBasicFetch<YearGroupRolloverStatus>(!!currentUser.data &&\n JobRequests.getYearGroupRolloverStatus(currentUser.data.customerId));\n const identityProviders = Flight.useBasicFetch<GetIdentityProvidersResponse>(!!currentUser.data &&\n UserManagerRequests.getIdentityProviders(currentUser.data.customerId));\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n\n const studentResponse = useFetchUsers(\n currentUser.data,\n props.queryParams,\n userType\n );\n\n const unknownYearGroupStudentsCount = useUnknownYearGroupUsersCount(currentUser.data);\n const hasUnknownYearGroupStudents = unknownYearGroupStudentsCount.data\n && unknownYearGroupStudentsCount.data?.count > 0;\n\n const students = studentResponse.data ? (('results' in studentResponse.data) ? studentResponse.data.results : studentResponse.data.data) : null;\n\n Flight.useBasicFetch(UserManagerRequests.authenticationMethods(students?.map(s => s.id)?.sort() ?? []));\n\n const userCount = useFetchUserCount({\n userType,\n queryParams: props.queryParams,\n getUserCountRequest: UserManagerRequests.userCount\n });\n\n useHandleObjectError(studentResponse);\n\n function fetchUserIds(success: (userIds: string[]) => void): void {\n Flight.fetch(dispatch, UserManagerRequests.getSearchUserIds(\n currentUser.data.customerId,\n currentUser.data.id,\n userType,\n props.queryParams,\n success\n ));\n }\n\n function onClickResendActivationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendActivationEmail(user.id, () => {\n alerts.success(getPhrase('resendActivationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendActivationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function onClickResendVerificationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendVerificationEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('resendVerificationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendVerificationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n const showEmptyState = UserManagerHelper.showEmptyState(studentResponse, props.queryParams);\n \n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n {hasUnknownYearGroupStudents && <UnknownYearGroupWarning ratings={ratings.data} />}\n\n <div className='px-3'>\n <UserManagerHeader\n userType={userType}\n appLinks={appLinks}\n users={students}\n userCount={userCount.data}\n hasRostering={hasRostering}\n hasSso={!!identityProviders.data?.length}\n />\n\n {!showEmptyState ? (\n <main className='py-3 clearfix'>\n <ManageUsers\n users={students}\n userType={userType}\n config={config.data}\n currentUser={currentUser.data}\n appLinks={appLinks}\n searchEmptyState={ImageUrls.EmptyStates.UserManager.SEARCH}\n totalUsers={userCount.data?.count}\n queryParams={props.queryParams}\n yearGroups={yearGroups.data}\n yearGroupRolloverStatus={yearGroupRolloverStatus.data}\n fetchUserIds={fetchUserIds}\n ssoHelpArticle={ArticleHelper.getLiteArticle(LiteSupportArticle.EditSsoAccounts)}\n onClickSendVerificationEmail={onClickResendVerificationEmail}\n onClickResendActivationEmail={onClickResendActivationEmail}\n hasSso={!!identityProviders.data?.length}\n userRequest={UserRequests.getUserIdByQuery}\n selectWithSpreadsheetTemplate={SelectWithSpreadsheetTemplates}\n hasRostering={hasRostering}\n products={products.data.map(p => p.id) ?? []}\n />\n {!!studentResponse.data?.pagination?.cursors && (\n <Pagination\n appLink={appLinks.search}\n cursors={studentResponse.data.pagination.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n />\n )}\n </main>) :\n <StudentManagerEmptyState />\n }\n </div>\n </UserManagerClientContext.Provider>\n );\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { GetUserCountResponse } from 'libs/shared/apps/user-manager/interfaces/GetUserCountResponse';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nexport function useUnknownYearGroupUsersCount(\n currentUser: CurrentUser\n): Flight.Response<GetUserCountResponse> {\n return Flight.useBasicFetch(currentUser && UserManagerRequests.userCount(\n currentUser.customerId,\n currentUser.id,\n UserGroup.Learner,\n { yearGroup: ['0']}\n ));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};"],"names":["RatingRequests","ratings","url","key","namespace","UnknownYearGroupWarning","props","validRatings","filter","r","code","lowestRatings","ArrayHelper","sort","a","b","value","WarningAlert","W","Text","phrase","className","Badge","data","type","userType","UserGroup","StudentManagerEmptyState","EmptyState","src","ImageUrls","size","text","LanguageService","icon","appLink","application","action","params","getPhrase","StudentManagerView","useSetPageMetadata","title","appLinks","queryParams","dispatch","alerts","rostering","RosteringRequests","currentUser","UserRequests","config","ConfigRequests","yearGroups","UserManagerRequests","customerId","yearGroupRolloverStatus","JobRequests","identityProviders","products","ProductRequests","hasRostering","status","studentResponse","useFetchUsers","unknownYearGroupStudentsCount","id","yearGroup","useUnknownYearGroupUsersCount","hasUnknownYearGroupStudents","count","students","results","map","s","userCount","useFetchUserCount","getUserCountRequest","showEmptyState","UserManagerHelper","UserManagerClientContext","UserManagerClient","UserManagerHeader","users","hasSso","length","ManageUsers","searchEmptyState","totalUsers","fetchUserIds","success","ssoHelpArticle","ArticleHelper","onClickSendVerificationEmail","user","email","escapeText","error","onClickResendActivationEmail","userRequest","selectWithSpreadsheetTemplate","SelectWithSpreadsheetTemplate","p","pagination","cursors","Pagination","search","buttonVariant","createJob","getJobs","bulkActionTypes","userTypes","cursor","order","bulkActionType","Array","isArray","dataType","join","getJob","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","sendJobReports","ids","jobIds","getJobSummary"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3657-9ab3ea0e92-lite.chunk.js","mappings":"oIAEO,IAAMA,EAAiB,CAC5BC,QAAO,WACL,MAAO,CACLC,IAAK,4BACLC,IAAK,UAET,E,kKCCIC,EAAY,sCAMZ,SAAUC,EAAwBC,GACtC,IAAMC,EAAeD,EAAML,QAAQO,QAAO,SAAAC,GAAC,QAAMA,EAAEC,IAAI,IACjDC,EAAgBC,EAAA,QAAkBL,EAAaM,MAAK,SAACC,EAAGC,GAAC,OAAKD,EAAEE,MAAQD,EAAEC,KAAK,KAErF,OACE,gBAAC,aAAiC,CAACA,MAAOZ,GACxC,gBAACa,EAAAC,EAAY,KACX,gBAACC,EAAA,EAAI,CAACC,OAAO,6BACb,uBAAKC,UAAU,iBACb,gBAACC,EAAA,EAAK,CAACC,KAAMZ,EAAea,KAAMF,EAAA,SAAkBD,UAAU,WAEhE,gBAACF,EAAA,EAAI,CAACC,OAAO,4BAIrB,C,6SCjBM,EAAY,uCACZK,EAAWC,EAAA,UAEX,SAAUC,IACd,OACE,gBAAC,aAAiC,CAACX,MAAO,GACxC,gBAACY,EAAA,EAAU,KACT,gBAACA,EAAA,QAAgB,CAACC,IAAKC,EAAA,mCAA4CC,KAAK,UAExE,gBAACH,EAAA,UAAkB,KAAC,gBAACT,EAAA,EAAI,CAACC,OAAO,aAEjC,gBAACQ,EAAA,OAAe,KAAC,gBAACT,EAAA,EAAI,CAACC,OAAO,UAE9B,uBAAKC,UAAU,oDACb,uBAAKA,UAAU,QACb,gBAACO,EAAA,MAAc,CACbI,KAAMC,EAAA,YAA0B,EAAW,UAC3CC,KAAM,UACNC,QAAS,CACPC,YAAa,iBACbC,OAAQ,4BACRC,OAAQ,CAAEb,SAAAA,OAKhB,uBAAKJ,UAAU,QACb,gBAACO,EAAA,MAAc,CACbI,KAAMC,EAAA,YAA0B,EAAW,eAC3CC,KAAM,YACNC,QAAS,CACPC,YAAa,iBACbC,OAAQ,kCACRC,OAAQ,CAAEb,SAAAA,SAQ1B,CCbA,IAAMc,EAAYN,EAAA,mBAAiC,8BAE7C,EAAWP,EAAA,UAMX,SAAUc,EAAmBlC,G,yBACjC,EAAAmC,EAAA,GAAmB,CAAEC,MAAOH,EAAU,eACtC,IAAMI,GAAW,OAAuB,EAAUrC,EAAMsC,aAClDC,GAAW,UACXC,GAAS,SAETC,EAAY,kBAAwCC,EAAA,kBACpDC,EAAc,kBAAkCC,EAAA,iBAChDC,EAAS,kBAA6BC,EAAA,YACtCC,EAAa,kBACjBJ,EAAY1B,MAAQ+B,EAAA,aAA+BL,EAAY1B,KAAKgC,aAEhEC,EAA0B,oBAAgDP,EAAY1B,MAC1FkC,EAAA,6BAAuCR,EAAY1B,KAAKgC,aACpDG,EAAoB,oBAAqDT,EAAY1B,MACzF+B,EAAA,uBAAyCL,EAAY1B,KAAKgC,aACtDI,EAAW,kBAAgCC,EAAA,kBAC3C3D,EAAU,kBAA+BD,EAAA,aAEzC6D,GAA6B,QAAd,EAAAd,EAAUxB,YAAI,eAAEuC,SAAoC,SAA1Bf,EAAUxB,KAAKuC,OAExDC,IAAkB,EAAAC,EAAA,GACtBf,EAAY1B,KACZjB,EAAMsC,YACN,GAGIqB,GCpEF,SACJhB,GAEA,OAAO,kBAAqBA,GAAeK,EAAA,YACzCL,EAAYM,WACZN,EAAYiB,GACZxC,EAAA,UACA,CAAEyC,UAAW,CAAC,OAElB,CD2DwCC,CAA8BnB,EAAY1B,MAC1E8C,GAA8BJ,GAA8B1C,OAC3B,QAAlC,EAAA0C,GAA8B1C,YAAI,eAAE+C,OAAQ,EAE3CC,GAAWR,GAAgBxC,KAAS,YAAawC,GAAgBxC,KAAQwC,GAAgBxC,KAAKiD,QAAUT,GAAgBxC,KAAKA,KAAQ,KAE3I,kBAAqB+B,EAAA,wBAA0E,QAAhC,EAAwB,QAAxB,EAAAiB,cAAQ,EAARA,GAAUE,KAAI,SAAAC,GAAC,OAAIA,EAAER,EAAE,WAAC,eAAErD,cAAM,QAAI,KAEnG,IAAM8D,IAAY,EAAAC,EAAA,GAAkB,CAClCnD,SAAA,EACAmB,YAAatC,EAAMsC,YACnBiC,oBAAqBvB,EAAA,eAGvB,OAAqBS,IA4BrB,IAAMe,GAAiBC,EAAA,iBAAiChB,GAAiBzD,EAAMsC,aAE/E,OACE,gBAACoC,EAAA,WAAiC,CAAChE,MAAOiE,EAAA,WACvCZ,IAA+B,gBAAChE,EAAuB,CAACJ,QAASA,EAAQsB,OAE1E,uBAAKF,UAAU,QACb,gBAAC6D,EAAA,EAAiB,CAChBzD,SAAU,EACVkB,SAAUA,EACVwC,MAAOZ,GACPI,UAAWA,GAAUpD,KACrBsC,aAAcA,EACduB,UAAgC,QAAtB,EAAA1B,EAAkBnC,YAAI,eAAE8D,UAGlCP,GAgCA,gBAACnD,EAAwB,MA/BzB,wBAAMN,UAAU,iBACd,gBAACiE,EAAA,EAAW,CACVH,MAAOZ,GACP9C,SAAU,EACV0B,OAAQA,EAAO5B,KACf0B,YAAaA,EAAY1B,KACzBoB,SAAUA,EACV4C,iBAAkBzD,EAAA,iCAClB0D,WAA0B,QAAd,EAAAb,GAAUpD,YAAI,eAAE+C,MAC5B1B,YAAatC,EAAMsC,YACnBS,WAAYA,EAAW9B,KACvBiC,wBAAyBA,EAAwBjC,KACjDkE,aAvDZ,SAAsBC,GACpB,UAAa7C,EAAUS,EAAA,mBACrBL,EAAY1B,KAAKgC,WACjBN,EAAY1B,KAAK2C,GACjB,EACA5D,EAAMsC,YACN8C,GAEJ,EAgDYC,eAAgBC,EAAA,iBAA6B,qBAC7CC,6BAvCZ,SAAwCC,GACtC,UAAajD,EAAUS,EAAA,0BAA4CwC,EAAK5B,GAAIjB,EAAY1B,KAAKgC,YAAY,WACvGT,EAAO4C,QAAQnD,EAAU,iCAAkC,CAAEwD,MAAOD,EAAKC,MAAOC,YAAY,IAC9F,IAAG,WACDlD,EAAOmD,MAAM1D,EAAU,+BAAgC,CAAEwD,MAAOD,EAAKC,MAAOC,YAAY,IAC1F,IACF,EAkCYE,6BAhDZ,SAAsCJ,GACpC,UAAajD,EAAUS,EAAA,wBAA0CwC,EAAK5B,IAAI,WACxEpB,EAAO4C,QAAQnD,EAAU,+BAAgC,CAAEwD,MAAOD,EAAKC,MAAOC,YAAY,IAC5F,IAAG,WACDlD,EAAOmD,MAAM1D,EAAU,6BAA8B,CAAEwD,MAAOD,EAAKC,MAAOC,YAAY,IACxF,IACF,EA2CYZ,UAAgC,QAAtB,EAAA1B,EAAkBnC,YAAI,eAAE8D,QAClCc,YAAajD,EAAA,mBACbkD,8BAA+BC,EAAA,EAC/BxC,aAAcA,EACdF,SAAsC,QAA5B,EAAAA,EAASpC,KAAKkD,KAAI,SAAA6B,GAAC,OAAIA,EAAEpC,EAAE,WAAC,QAAI,QAET,QAAhC,EAAoB,QAApB,EAAAH,GAAgBxC,YAAI,eAAEgF,kBAAU,eAAEC,UACnC,gBAACC,EAAA,EAAU,CACTtE,QAASQ,EAAS+D,OAClBF,QAASzC,GAAgBxC,KAAKgF,WAAWC,QACzCG,cAAc,eACdtF,UAAU,qBAS1B,C,sEE9JaoC,EAAc,CACzBmD,UAAS,SACPrF,EACAmE,EACAO,GAEA,MAAO,CACL/F,IAAK,0BACLC,IAAK,aACLqB,KAAM,SACND,KAAAA,EACAmE,QAAAA,EACAO,MAAAA,EAEJ,EAEAY,QAAO,SAACjE,GACN,IAAMN,EAAqB,CAAC,EAExBwE,EAAkC,GAClCC,EAAyB,GA+B7B,OA7BInE,EAAYoE,SACd1E,EAAO0E,OAASpE,EAAYoE,QAE1BpE,EAAY/B,OACW,WAArB+B,EAAY/B,KACdyB,EAAO2E,MAAQ,MAEf3E,EAAO2E,MAAQ,QAGfrE,EAAYsE,gBACdJ,EAAkBK,MAAMC,QAAQxE,EAAYsE,gBACxCtE,EAAYsE,eACZ,CAACtE,EAAYsE,gBAEjB5E,EAAOd,KAAOsF,GAGdxE,EAAOd,KAAO,IAGZoB,EAAYnB,WACdsF,EAAYI,MAAMC,QAAQxE,EAAYnB,UAClCmB,EAAYnB,SACZ,CAACmB,EAAYnB,UAEjBa,EAAO+E,SAAWN,GAGb,CACL7G,IAAK,eAAqB,0BAA2BoC,GACrDnC,IAAK,cAAF,OAAgByC,EAAYoE,OAAM,YAAIpE,EAAY/B,KAAI,YAAIiG,EAAgBjG,OAAOyG,KAAK,KAAI,YAAIP,EAAUlG,OAAOyG,KAAK,MAE3H,EAEAC,OAAM,SAACrD,GACL,MAAO,CACLhE,IAAK,2BAAF,OAA6BgE,GAChC/D,IAAK,OAAF,OAAS+D,GAEhB,EAEAsD,eAAc,SACZtD,EACAwB,EACAO,GAEA,MAAO,CACL/F,IAAK,2BAAF,OAA6BgE,EAAE,aAClC/D,IAAK,OAAF,OAAS+D,EAAE,aACduD,iBAAkB,OAAF,OAASvD,EAAE,aAC3BwB,QAAAA,EACAO,MAAAA,EAEJ,EAEAyB,cAAa,SACXxD,EACAJ,EACAkD,EACAtB,EACAO,GAEA,IAAM3D,EAAqB,CACzBwB,OAAAA,GAMF,OAHIkD,IACF1E,EAAO0E,OAASA,GAEX,CACL9G,IAAK,eAAqB,2BAAD,OAA4BgE,EAAE,YAAY5B,GACnEnC,IAAK,OAAF,OAAS+D,EAAE,oBAAYJ,EAAM,YAAIkD,GACpCtB,QAAAA,EACAO,MAAAA,EAEJ,EAEA0B,2BAA0B,SAACpE,GACzB,MAAO,CACLrD,IAAK,4CAAF,OAA8CqD,EAAU,yBAC3DpD,IAAK,6BAET,EAEAyH,eAAc,SAACC,GACb,MAAO,CACL3H,IAAK,oCACLC,IAAK,oBAAF,OAAsB0H,EAAIhH,OAAOyG,KAAK,MACzC9F,KAAM,SACND,KAAM,CACJuG,OAAQD,GAGd,EAEAE,cAAa,SAAC7D,GACZ,MAAO,CACLhE,IAAK,2BAAF,OAA6BgE,EAAE,YAClC/D,IAAK,eAAF,OAAiB+D,GAExB,E","sources":["file:///app/packages/libs/shared/src/flight-requests/RatingRequests.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/unknown-year-group-warning/UnknownYearGroupWarning.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/student-manager/empty-state/LiteStudentManagerEmptyState.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/student-manager/LiteStudentManagerView.tsx","file:///app/packages/projects/lite/src/apps/user-manager/hooks/useUnknownYearGroupUsersCount.ts","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts"],"sourcesContent":["import { Flight } from 'libs/common/flight';\n\nexport const RatingRequests = {\n ratings(): Flight.Request {\n return {\n url: '/api/domain/v2/me/ratings',\n key: 'ratings'\n };\n }\n};","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { WarningAlert } from 'libs/shared/apps/user-manager/components/warning-alert/WarningAlert';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { Rating } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.unknownYearGroupWarning';\n\ninterface UnknownYearGroupWarningProps {\n ratings: Rating[];\n}\n\nexport function UnknownYearGroupWarning(props: UnknownYearGroupWarningProps): JSX.Element {\n const validRatings = props.ratings.filter(r => !!r.code);\n const lowestRatings = ArrayHelper.first(validRatings.sort((a, b) => a.value - b.value));\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <WarningAlert>\n <Text phrase='unknownYearGroupStudents' />\n <div className='d-inline-flex'>\n <Badge data={lowestRatings} type={BadgeType.Rating} className=' mx-2' />\n </div>\n <Text phrase='unknownYearGroupPrompt' />\n </WarningAlert>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\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 = 'userManager.studentManagerEmptyState';\nconst userType = UserGroup.Learner;\n\nexport function StudentManagerEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.UserManager.STUDENTS} size='small' />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <div className='d-flex justify-content-center align-items-center'>\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addNew')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.CREATE_USER,\n params: { userType }\n }}\n />\n </div>\n\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'uploadAList')}\n icon={cvSvgLibrary.Upload}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.USER_UPLOAD_POPUP,\n params: { userType }\n }}\n />\n </div>\n </div>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { ManageUsers } from 'libs/shared/apps/user-manager/components/manage-users/ManageUsers';\nimport { UnknownYearGroupWarning } from 'libs/shared/apps/user-manager/components/unknown-year-group-warning/UnknownYearGroupWarning';\nimport { UserManagerHeader } from 'libs/shared/apps/user-manager/components/user-manager-header/UserManagerHeader';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useFetchUserCount } from 'libs/shared/apps/user-manager/hooks/useFetchUserCount';\nimport { GetIdentityProvidersResponse } from 'libs/shared/apps/user-manager/interfaces/GetIdentityProvidersResponse';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { YearGroupRolloverStatus } from 'libs/shared/apps/user-manager/interfaces/YearGroupRolloverStatus';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { RatingRequests } from 'libs/shared/flight-requests/RatingRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Config, CurrentUser, Product, Rating, RosteringResponse, User, YearGroup } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { SelectWithSpreadsheetTemplates } from 'apps/user-manager/constants/SelectWithSpreadsheetTemplate';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { useFetchUsers } from 'apps/user-manager/hooks/useFetchUsers';\nimport { useUnknownYearGroupUsersCount } from 'apps/user-manager/hooks/useUnknownYearGroupUsersCount';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nimport { StudentManagerEmptyState } from './empty-state/LiteStudentManagerEmptyState';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.studentManager');\n\nconst userType = UserGroup.Learner;\n\ninterface StudentManagerViewProps {\n queryParams: UserManagerQueryParams;\n}\n\nexport function StudentManagerView(props: StudentManagerViewProps): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n const appLinks = getUserManagerAppLinks(userType, props.queryParams);\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data && UserManagerRequests.yearGroups(currentUser.data.customerId)\n );\n const yearGroupRolloverStatus = Flight.useBasicFetch<YearGroupRolloverStatus>(!!currentUser.data &&\n JobRequests.getYearGroupRolloverStatus(currentUser.data.customerId));\n const identityProviders = Flight.useBasicFetch<GetIdentityProvidersResponse>(!!currentUser.data &&\n UserManagerRequests.getIdentityProviders(currentUser.data.customerId));\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n const ratings = Flight.useBasicFetch<Rating[]>(RatingRequests.ratings());\n\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n\n const studentResponse = useFetchUsers(\n currentUser.data,\n props.queryParams,\n userType\n );\n\n const unknownYearGroupStudentsCount = useUnknownYearGroupUsersCount(currentUser.data);\n const hasUnknownYearGroupStudents = unknownYearGroupStudentsCount.data\n && unknownYearGroupStudentsCount.data?.count > 0;\n\n const students = studentResponse.data ? (('results' in studentResponse.data) ? studentResponse.data.results : studentResponse.data.data) : null;\n\n Flight.useBasicFetch(UserManagerRequests.authenticationMethods(students?.map(s => s.id)?.sort() ?? []));\n\n const userCount = useFetchUserCount({\n userType,\n queryParams: props.queryParams,\n getUserCountRequest: UserManagerRequests.userCount\n });\n\n useHandleObjectError(studentResponse);\n\n function fetchUserIds(success: (userIds: string[]) => void): void {\n Flight.fetch(dispatch, UserManagerRequests.getSearchUserIds(\n currentUser.data.customerId,\n currentUser.data.id,\n userType,\n props.queryParams,\n success\n ));\n }\n\n function onClickResendActivationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendActivationEmail(user.id, () => {\n alerts.success(getPhrase('resendActivationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendActivationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function onClickResendVerificationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendVerificationEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('resendVerificationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendVerificationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n const showEmptyState = UserManagerHelper.showEmptyState(studentResponse, props.queryParams);\n \n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n {hasUnknownYearGroupStudents && <UnknownYearGroupWarning ratings={ratings.data} />}\n\n <div className='px-3'>\n <UserManagerHeader\n userType={userType}\n appLinks={appLinks}\n users={students}\n userCount={userCount.data}\n hasRostering={hasRostering}\n hasSso={!!identityProviders.data?.length}\n />\n\n {!showEmptyState ? (\n <main className='py-3 clearfix'>\n <ManageUsers\n users={students}\n userType={userType}\n config={config.data}\n currentUser={currentUser.data}\n appLinks={appLinks}\n searchEmptyState={ImageUrls.EmptyStates.UserManager.SEARCH}\n totalUsers={userCount.data?.count}\n queryParams={props.queryParams}\n yearGroups={yearGroups.data}\n yearGroupRolloverStatus={yearGroupRolloverStatus.data}\n fetchUserIds={fetchUserIds}\n ssoHelpArticle={ArticleHelper.getLiteArticle(LiteSupportArticle.EditSsoAccounts)}\n onClickSendVerificationEmail={onClickResendVerificationEmail}\n onClickResendActivationEmail={onClickResendActivationEmail}\n hasSso={!!identityProviders.data?.length}\n userRequest={UserRequests.getUserIdByQuery}\n selectWithSpreadsheetTemplate={SelectWithSpreadsheetTemplates}\n hasRostering={hasRostering}\n products={products.data.map(p => p.id) ?? []}\n />\n {!!studentResponse.data?.pagination?.cursors && (\n <Pagination\n appLink={appLinks.search}\n cursors={studentResponse.data.pagination.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n />\n )}\n </main>) :\n <StudentManagerEmptyState />\n }\n </div>\n </UserManagerClientContext.Provider>\n );\n}\n","import { Flight } from 'libs/common/flight';\n\nimport { GetUserCountResponse } from 'libs/shared/apps/user-manager/interfaces/GetUserCountResponse';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { CurrentUser } from 'libs/shared/interfaces';\n\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nexport function useUnknownYearGroupUsersCount(\n currentUser: CurrentUser\n): Flight.Response<GetUserCountResponse> {\n return Flight.useBasicFetch(currentUser && UserManagerRequests.userCount(\n currentUser.customerId,\n currentUser.id,\n UserGroup.Learner,\n { yearGroup: ['0']}\n ));\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};"],"names":["RatingRequests","ratings","url","key","namespace","UnknownYearGroupWarning","props","validRatings","filter","r","code","lowestRatings","ArrayHelper","sort","a","b","value","WarningAlert","W","Text","phrase","className","Badge","data","type","userType","UserGroup","StudentManagerEmptyState","EmptyState","src","ImageUrls","size","text","LanguageService","icon","appLink","application","action","params","getPhrase","StudentManagerView","useSetPageMetadata","title","appLinks","queryParams","dispatch","alerts","rostering","RosteringRequests","currentUser","UserRequests","config","ConfigRequests","yearGroups","UserManagerRequests","customerId","yearGroupRolloverStatus","JobRequests","identityProviders","products","ProductRequests","hasRostering","status","studentResponse","useFetchUsers","unknownYearGroupStudentsCount","id","yearGroup","useUnknownYearGroupUsersCount","hasUnknownYearGroupStudents","count","students","results","map","s","userCount","useFetchUserCount","getUserCountRequest","showEmptyState","UserManagerHelper","UserManagerClientContext","UserManagerClient","UserManagerHeader","users","hasSso","length","ManageUsers","searchEmptyState","totalUsers","fetchUserIds","success","ssoHelpArticle","ArticleHelper","onClickSendVerificationEmail","user","email","escapeText","error","onClickResendActivationEmail","userRequest","selectWithSpreadsheetTemplate","SelectWithSpreadsheetTemplate","p","pagination","cursors","Pagination","search","buttonVariant","createJob","getJobs","bulkActionTypes","userTypes","cursor","order","bulkActionType","Array","isArray","dataType","join","getJob","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","sendJobReports","ids","jobIds","getJobSummary"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3978],{39902:(e,t,r)=>{r.d(t,{F:()=>m,f:()=>f});var n=r(32735),a=r(20354),i=r(75896);function o(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(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 u(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function l(e,t,r){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=s(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=50;function f(e,t){var r=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),n=a.a.useBasicFetchAll(r),o=i.m.flatten(n.data),u=n.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},t.id,t))}),{}):null;return{itemsArr:o,items:u,isFetching:n.isFetching}}function m(e,t,r){var c,f,m,v,h=r||function(e){return"object"===s(e)?e.id:e},y=n.useRef(new Set),b=(m=n.useState([]),v=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(m,v)||u(m,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=b[0],g=b[1];n.useEffect((function(){if(null==e?void 0:e.length){var r=[];e.forEach((function(e){var t=h(e);y.current.has(t)||(r.push(e),y.current.add(t))})),r.length&&g((function(e){return[].concat(o(e),o(i.m.chunk(r,d).map(t)))}))}}),[null==e?void 0:e.length]);var I=a.a.useBasicFetchAll(p),w=i.m.flatten(I.data),A=I.data.length?w.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},h(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(f=null===(c=I.responses)||void 0===c?void 0:c[0])||void 0===f?void 0:f.hasCompleted),itemsArr:w,items:A,isFetching:I.isFetching}}},63719:(e,t,r)=>{r.d(t,{h:()=>u});var n=r(32735),a=r(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e){var t,r,u=(t=n.useMemo((function(){return a.p.getBuilder()}),[]),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(t,r)||i(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=u[0],s=(0,u[1])(c);return s&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(s),[Object.assign(Object.assign({},e),{active:!0})]):s}},93978:(e,t,r)=>{r.r(t),r.d(t,{PlaySharedVideoView:()=>E});var n=r(32735),a=r(20354),i=r(65858),o=r(16714),u=r(89454),c=r(43012),s=r(39151),l=r(1666),d=r(20768),f=r(31949),m=r(1575),v=r(63719),h=r(26304),y=r(22902),b=r(79612),p=r(37802),g=r(76753),I=r(51855),w=r(82817),A=r(7179),V=r(49948),C=r(36873),S=r(27638),j=r(86698),P=r(35014),F=r(97816),O=r(33192),x=r(
|
|
2
|
-
//# sourceMappingURL=3978-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3978],{39902:(e,t,r)=>{r.d(t,{F:()=>m,f:()=>f});var n=r(32735),a=r(20354),i=r(75896);function o(e){return function(e){if(Array.isArray(e))return c(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||u(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 u(e,t){if(e){if("string"==typeof e)return c(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?c(e,t):void 0}}function c(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function s(e){return s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},s(e)}function l(e,t,r){return(t=function(e){var t=function(e){if("object"!=s(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=s(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==s(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var d=50;function f(e,t){var r=i.m.chunk(e,d).map((function(e){return t(i.m.uniq(e))})),n=a.a.useBasicFetchAll(r),o=i.m.flatten(n.data),u=n.data.length?o.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},t.id,t))}),{}):null;return{itemsArr:o,items:u,isFetching:n.isFetching}}function m(e,t,r){var c,f,m,v,h=r||function(e){return"object"===s(e)?e.id:e},y=n.useRef(new Set),b=(m=n.useState([]),v=2,function(e){if(Array.isArray(e))return e}(m)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(m,v)||u(m,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),p=b[0],g=b[1];n.useEffect((function(){if(null==e?void 0:e.length){var r=[];e.forEach((function(e){var t=h(e);y.current.has(t)||(r.push(e),y.current.add(t))})),r.length&&g((function(e){return[].concat(o(e),o(i.m.chunk(r,d).map(t)))}))}}),[null==e?void 0:e.length]);var I=a.a.useBasicFetchAll(p),w=i.m.flatten(I.data),A=I.data.length?w.reduce((function(e,t){return Object.assign(Object.assign({},e),l({},h(t),t))}),{}):null;return{hasFirstRequestCompleted:!!(null===(f=null===(c=I.responses)||void 0===c?void 0:c[0])||void 0===f?void 0:f.hasCompleted),itemsArr:w,items:A,isFetching:I.isFetching}}},63719:(e,t,r)=>{r.d(t,{h:()=>u});var n=r(32735),a=r(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}function u(e){var t,r,u=(t=n.useMemo((function(){return a.p.getBuilder()}),[]),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,i,o,u=[],c=!0,s=!1;try{if(i=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=i.call(r)).done)&&(u.push(n.value),u.length!==t);c=!0);}catch(e){s=!0,a=e}finally{try{if(!c&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(t,r)||i(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),c=u[0],s=(0,u[1])(c);return s&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(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.")}()}(s),[Object.assign(Object.assign({},e),{active:!0})]):s}},93978:(e,t,r)=>{r.r(t),r.d(t,{PlaySharedVideoView:()=>E});var n=r(32735),a=r(20354),i=r(65858),o=r(16714),u=r(89454),c=r(43012),s=r(39151),l=r(1666),d=r(20768),f=r(31949),m=r(1575),v=r(63719),h=r(26304),y=r(22902),b=r(79612),p=r(37802),g=r(76753),I=r(51855),w=r(82817),A=r(7179),V=r(49948),C=r(36873),S=r(27638),j=r(86698),P=r(35014),F=r(97816),O=r(33192),x=r(35287),T=r(91442),k=r(16857);function E(e){var t,r,E,M,B,U,q,L=(0,S.u)(i.LZ.VideoThumbnail),N=L.setFavourite,R=L.canFavourite,G=(0,y.T)().hasPermissions,_=(0,I.G)().isPlugin,D=(0,P.I)(),$=(0,T.a)(),W=(0,j.y)().activePresentation,Z=(0,p.r)(null),z=Z.hasTopicDirectories,H=Z.hasPlayPageTranscript,J=a.a.useBasicFetch(f.N.currentUser()),K=a.a.useBasicFetch(m.R.sharedVideo(e.objectId,e.shareId)),Q=a.a.useBasicFetch(D.canViewClips&&c.e.videoClips(e.objectId)),X=a.a.useBasicFetch(D.canViewInteractives&&d.b.videoInteractives(e.objectId)),Y=a.a.useBasicFetch(s.L.config()),ee=(0,C.k)({video:K.data,context:e.queryParams.context,contextId:e.queryParams.contextId,moviesAndTv:e.queryParams.mtv,currentUser:J.data}),te=(0,V.l)(e.objectId),re=a.a.useBasicFetch(!!W&&u.O.audiencesByPresentationId(W.id)),ne=a.a.useBasicFetch((null===(t=J.data)||void 0===t?void 0:t.isAuthenticated)&&l.h.yearGroups(J.data.customerId));(0,b.M)(g.CG.getVideoMetadata({content:K.data,canonicalLink:O.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:!1})),(0,F.V)(null!==(r=ee.videos)&&void 0!==r?r:[]),(0,h.b)(K,{private:k.m}),(0,A.P)({id:e.objectId,app:"videos",shareId:e.shareId});var ae=(0,v.h)({name:null===(E=K.data)||void 0===E?void 0:E.name}),ie=(0,w.M)(e.objectId);return K.data&&J.hasCompleted&&Y.hasCompleted&&te.hasCompleted?n.createElement("div",{className:"px-3"},n.createElement(x.j,{video:K.data,clips:null===(M=Q.data)||void 0===M?void 0:M.data,interactives:null===(B=X.data)||void 0===B?void 0:B.data,yearGroups:ne.data,curriculums:ie,imageCdnUrl:Y.data.imageCdnUrl,relatedVideos:ee,currentUser:J.data,setFavourite:N,canFavourite:R,pointsOfInterest:null==te?void 0:te.items,playNext:null===(U=e.queryParams)||void 0===U?void 0:U.playNext,shareId:e.shareId,featureAccess:D,audiences:re.data,params:e.queryParams,canManageVideoAccess:G(o.C.ManageVideoAccess),tableOfContentsId:null===(q=e.queryParams)||void 0===q?void 0:q.tocId,shouldShowSideTableOfContents:$,isPlugin:_,breadcrumbs:ae,hasTopicDirectories:z,hasTranscript:H})):n.createElement(n.Fragment,null)}},35014:(e,t,r)=>{r.d(t,{I:()=>c});var n=r(16714),a=r(12754),i=r(22902),o=r(15311),u=r(11387);function c(){var e=(0,i.T)(),t=e.hasPermissions,r=e.hasLocalPermissions,c=(0,(0,o.r)().hasProduct)(a.x.Primary);return{canViewGlance:t(n.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:c&&t(n.C.ViewVideoInteractives),canViewClips:c&&t(n.C.ViewVideoClips),canViewCurriculumLinks:t(n.C.ViewCurriculums),canUseActions:r(n.E.UseVideoActions),canViewPublicLayout:!r(n.E.WatchVideos)&&u.C.hasRegionPrefix(),canViewResourceItems:r(n.E.ViewVideoResourceItems),canNavigate:c}}},97816:(e,t,r)=>{r.d(t,{V:()=>s});var n=r(20354),a=r(21750),i=r(31949),o=r(1575),u=r(39902),c=r(31908);function s(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},s=n.a.useBasicFetch(i.N.currentUser()),l=function(e){return e?Array.isArray(e)?e.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):"data"in e?e.data.filter((function(e){return!!e&&(c.M.isVideo(e)||c.M.isClip(e))})):[]:[]}(e).map((function(e){return e.id}));(0,u.F)(l,(function(e){return o.R.videoMixinAssocs(e,r.flightNamespace)})),(0,u.F)((null===(t=s.data)||void 0===t?void 0:t.isAuthenticated)&&l,(function(e){return a.x.hasCurriculumLinks(e,null,r.flightNamespace)}))}}}]);
|
|
2
|
+
//# sourceMappingURL=3978-ef3884cfe5-lite.chunk.js.map
|
package/dist/scripts/{3978-e86c2d54be-lite.chunk.js.map → 3978-ef3884cfe5-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3978-e86c2d54be-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/PlaySharedVideoView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, Config, CurrentUser, InteractiveCollection, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { PlayPage } from 'shared/views/play/components/play-page/PlayPage';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoView(props: ShareLinkViewProps): React.ReactElement {\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const featureAccess = useVideoFeatureAccess();\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const { activePresentation } = usePresentation();\n const { hasTopicDirectories, hasPlayPageTranscript } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId)\n );\n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.objectId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n imageCdnUrl={config.data.imageCdnUrl}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n hasTopicDirectories={hasTopicDirectories}\n hasTranscript={hasPlayPageTranscript}\n />\n </div>\n );\n}","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import { Flight } from 'libs/common/flight';\n\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, CurrentUser, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n useGrowingBatchFetch(\n currentUser.data?.isAuthenticated && videoIds,\n ids => ClassificationRequests.hasCurriculumLinks(ids, null, options.flightNamespace)\n );\n}"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","PlaySharedVideoView","props","u","setFavourite","canFavourite","hasPermissions","isPlugin","featureAccess","shouldShowSideTableOfContents","activePresentation","hasTopicDirectories","hasPlayPageTranscript","currentUser","video","objectId","shareId","clips","canViewClips","interactives","canViewInteractives","config","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","audiences","yearGroups","isAuthenticated","customerId","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","name","curriculums","className","imageCdnUrl","playNext","params","canManageVideoAccess","tableOfContentsId","tocId","hasTranscript","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","options","videoIds","Array","isArray","filter","o","getValidObjects","v","ids","flightNamespace"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3978-ef3884cfe5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/apps/share/views/play-shared-video/PlaySharedVideoView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"sourcesContent":["import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<T>(\n objs: T[],\n getRequest: (items: T[]) => Flight.Request,\n _getKey?: (obj: T) => string\n) {\n const getKey = _getKey || ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n const unfetchedItems: T[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n\n setRequests(r => ([ ...r, ...ArrayHelper.chunk<T>(unfetchedItems, CHUNK_SIZE).map(getRequest) ]));\n }, [objs?.length]);\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching\n };\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import * as React from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { ClipCollection, Config, CurrentUser, InteractiveCollection, PresentationAudience, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { PlayPage } from 'shared/views/play/components/play-page/PlayPage';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/hooks/useShouldShowTableOfContents';\n\nimport { ShareLinkPrivateError } from 'apps/share/errors/share-link-private/ShareLinkPrivateError';\nimport { ShareLinkViewProps } from 'apps/share/interfaces/ShareLinkViewProps';\n\nexport function PlaySharedVideoView(props: ShareLinkViewProps): React.ReactElement {\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.VideoThumbnail);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const featureAccess = useVideoFeatureAccess();\n\n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const { activePresentation } = usePresentation();\n const { hasTopicDirectories, hasPlayPageTranscript } = useSettings(null);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(\n VideoRequests.sharedVideo(props.objectId, props.shareId)\n );\n const clips = Flight.useBasicFetch<ClipCollection>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.objectId)\n );\n const interactives = Flight.useBasicFetch<InteractiveCollection>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.objectId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context: props.queryParams.context,\n contextId: props.queryParams.contextId,\n moviesAndTv: props.queryParams.mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.objectId);\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n !!activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: false\n }));\n\n useVideoMixin(relatedVideos.videos ?? []);\n useCannotConsumeError(video, { private: ShareLinkPrivateError });\n useDeepLinks({ id: props.objectId, app: 'videos', shareId: props.shareId });\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n const curriculums = useCurriculums(props.objectId);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <div className='px-3'>\n <PlayPage\n video={video.data}\n clips={clips.data?.data}\n interactives={interactives.data?.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n imageCdnUrl={config.data.imageCdnUrl}\n relatedVideos={relatedVideos}\n currentUser={currentUser.data}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n pointsOfInterest={pointsOfInterest?.items}\n playNext={props.queryParams?.playNext}\n shareId={props.shareId}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n tableOfContentsId={props.queryParams?.tocId}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n hasTopicDirectories={hasTopicDirectories}\n hasTranscript={hasPlayPageTranscript}\n />\n </div>\n );\n}","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import { Flight } from 'libs/common/flight';\n\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { Clip, ClipCollection, CurrentUser, Video, VideoCollection } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\ntype Types = Video[] | VideoCollection | Clip[] | ClipCollection;\n\nfunction getValidObjects(objects: Types): (Video | Clip)[] {\n if (!objects)\n return [];\n\n if (Array.isArray(objects))\n return objects.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n if ('data' in objects)\n return objects.data.filter(o => !!o && (VideoHelper.isVideo(o) || VideoHelper.isClip(o)));\n\n return [];\n}\n\ninterface VideoMixinOptions {\n /**\n * If the videos that are having new data mixed into are sitting on an explicit Flight namespace,\n * providing that namespace here is required\n */\n flightNamespace?: string;\n}\n\nexport function useVideoMixin(objects: Types, options: VideoMixinOptions = {}): void {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const videoIds = getValidObjects(objects).map(v => v.id);\n\n useGrowingBatchFetch(videoIds, ids => VideoRequests.videoMixinAssocs(ids, options.flightNamespace));\n useGrowingBatchFetch(\n currentUser.data?.isAuthenticated && videoIds,\n ids => ClassificationRequests.hasCurriculumLinks(ids, null, options.flightNamespace)\n );\n}"],"names":["CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","map","chunk","responses","itemsArr","data","items","length","reduce","acc","item","id","isFetching","useGrowingBatchFetch","objs","_getKey","getKey","obj","fetchedItems","Set","setRequests","unfetchedItems","forEach","key","current","has","push","add","r","hasFirstRequestCompleted","hasCompleted","useBreadcrumbs","match","breadcrumbs","useBuilder","active","PlaySharedVideoView","props","u","setFavourite","canFavourite","hasPermissions","isPlugin","featureAccess","shouldShowSideTableOfContents","activePresentation","hasTopicDirectories","hasPlayPageTranscript","currentUser","video","objectId","shareId","clips","canViewClips","interactives","canViewInteractives","config","relatedVideos","context","queryParams","contextId","moviesAndTv","mtv","pointsOfInterest","audiences","yearGroups","isAuthenticated","customerId","content","canonicalLink","stripPresentationSlug","allowIndexing","videos","private","app","name","curriculums","className","imageCdnUrl","playNext","params","canManageVideoAccess","tableOfContentsId","tocId","hasTranscript","useVideoFeatureAccess","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","useVideoMixin","objects","options","videoIds","Array","isArray","filter","o","getValidObjects","v","ids","flightNamespace"],"sourceRoot":""}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/*! For license information please see 4205-b37ae8ccb9-lite.chunk.js.LICENSE.txt */
|
|
2
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4205],{1353:(e,t,r)=>{r.d(t,{$:()=>s});var n=r(32735),i=r(23481),a=r(11607),o=r(54610),c=r(67453),u=r(22161),l=i.T.encloseNamespace("shared.curriculumLinks");function s(e){var t,r=e.data;return n.createElement(a.L,{key:r.id,className:"p-1 pe-2 rounded-pill d-inline-flex align-items-center ".concat(u.Z.tag," ").concat(e.selected?u.Z.selected:""),onClick:function(){return e.onChangeCurriculum(r.id.toString())},"aria-label":"".concat(l("ariaFilter")," ").concat(r.name)},(null===(t=r.cover)||void 0===t?void 0:t.url)&&n.createElement("div",{className:"bg-white ".concat(u.Z.cover," rounded-circle border")},n.createElement("img",{src:c.j.createUrl(r.cover.url,{size:o.h2.Small}),alt:r.name,className:"rounded-circle"})),n.createElement("div",{className:"ms-2"},r.name))}},63112:(e,t,r)=>{r.d(t,{o:()=>a});var n=r(32735),i=r(91807),a=n.memo((function(e){var t=e.tagClass,r="partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ".concat(void 0===t?"":t," ").concat(i.Z.partialTag);return n.createElement("div",{className:"mt-1"},n.createElement("span",{className:r}," "))}))},65163:(e,t,r)=>{r.d(t,{QL:()=>n.Q,eb:()=>n.e});var n=r(16450);r(14244)},35014:(e,t,r)=>{r.d(t,{I:()=>u});var n=r(16714),i=r(12754),a=r(22902),o=r(15311),c=r(11387);function u(){var e=(0,a.T)(),t=e.hasPermissions,r=e.hasLocalPermissions,u=(0,(0,o.r)().hasProduct)(i.x.Primary);return{canViewGlance:t(n.C.ViewVideoGlance),canViewResources:!0,canViewInteractives:u&&t(n.C.ViewVideoInteractives),canViewClips:u&&t(n.C.ViewVideoClips),canViewCurriculumLinks:t(n.C.ViewCurriculums),canUseActions:r(n.E.UseVideoActions),canViewPublicLayout:!r(n.E.WatchVideos)&&c.C.hasRegionPrefix(),canViewResourceItems:r(n.E.ViewVideoResourceItems),canNavigate:u}}},95892:(e,t,r)=>{r.r(t),r.d(t,{VideoGuidanceClassroomGuideView:()=>ee});var n=r(32735),i=r(81886),a=r(20354),o=r(28400),c=r(49985),u=r(65858),l=r(42648),s=r(23481),d=r(75896),m=r(44599),f=r(38496),p=r(83345),h=r(85597),v=r(54333);function y(e){return y="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},y(e)}function g(e,t,r){return(t=function(e){var t=function(e){if("object"!=y(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=y(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==y(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function b(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var w=/(.*)\s\((.*)?\)/i,C="shared.curriculumLinks",E="text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold";function k(e){function t(){var t=E+" bg-white border";return!e.leaf.name&&e.uiContainsCodes?t+" border-secondary text-secondary":t+" border-dark"}var r=n.useRef();return n.useEffect((function(){if(r.current){var t=r.current.getBoundingClientRect().width;e.trySetMaxCodeWidth(t)}}),[r.current]),n.createElement("div",{className:"d-flex"},e.leaf.description?!e.leaf.name&&e.uiContainsCodes?n.createElement(n.Fragment,null,n.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},n.createElement("h5",{ref:r,className:t()},n.createElement(p.x,{namespace:C,phrase:"noCode"}))),n.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):e.leaf.name||e.uiContainsCodes?n.createElement(n.Fragment,null,n.createElement("div",{className:"me-1 align-self-start",style:{minWidth:e.codeWidth?"".concat(e.codeWidth,"px"):"auto"}},n.createElement("h5",{ref:r,className:t()},e.leaf.name)),n.createElement("p",{className:"m-0 align-self-center",dangerouslySetInnerHTML:{__html:e.leaf.description}})):n.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.description}}):n.createElement("p",{className:"m-0",dangerouslySetInnerHTML:{__html:e.leaf.name}}))}function L(e){var t,r,i,a={},o=!1;function c(e){var t="mb-2";return e.name||o?t:t+" ms-4 "+v.Z.leafDescriptionOnly}return e.linkSet.areasAndLeaves.forEach((function(e){var t=e[h.k.Area].map((function(e){return e.name})).join(" - ");a[t]?e[h.k.Leaf].forEach((function(e){a[t].find((function(t){return t.name===e.name}))||(a[t].push(e),e.name&&(o=!0))})):a[t]=e[h.k.Leaf]})),n.createElement(n.Fragment,null,n.createElement("h3",{className:"".concat(E," text-white bg-ultramarine fw-normal me-1 mb-2")},(t=e.linkSet[h.k.Audience].name,r=e.linkSet[h.k.Subject].name,(i=t.match(w))?"".concat(i[1]," • ").concat(i[2]," • ").concat(r):"".concat(t," • ").concat(r))),n.createElement("div",{className:"me-2 ".concat(v.Z.curriculumSubject)},Object.keys(a).map((function(t,r){return n.createElement("div",{key:r,className:v.Z.areaLeafSet},t&&n.createElement("h4",{className:"mb-1 font-size-normal"},t),n.createElement("ul",{className:"list-unstyled"},a[t].map((function(t){return n.createElement("li",{key:t.id,className:c(t)},n.createElement(k,{leaf:t,codeWidth:e.codeWidth,trySetMaxCodeWidth:e.trySetMaxCodeWidth,uiContainsCodes:o}))}))))}))))}function S(e){var t,r,i,a=(r=n.useState(0),i=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,a,o,c=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(r,i)||function(e,t){if(e){if("string"==typeof e)return b(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?b(e,t):void 0}}(r,i)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=a[0],c=a[1];function u(e){c((function(t){return t>=e?t:e}))}var l=n.useMemo((function(){var t={};return e.curriculumLinks.forEach((function(e){var r=null,n=null,i=[],a=[];e.forEach((function(e){switch(e.type){case h.k.Subject:r=e;break;case h.k.Audience:n=e;break;case h.k.Area:i.push(e);break;case h.k.Leaf:a.push(e)}}));var o="".concat(r.id,":").concat(n.id);t[o]?t[o].areasAndLeaves.push(g(g({},h.k.Area,i),h.k.Leaf,a)):t[o]=g(g(g({},h.k.Subject,r),h.k.Audience,n),"areasAndLeaves",[g(g({},h.k.Area,i),h.k.Leaf,a)])})),t}),[e.curriculumLinks]);return e.curriculumLinks?(null===(t=e.curriculumLinks)||void 0===t?void 0:t.length)?n.createElement("ul",{className:"list-unstyled m-0"},Object.keys(l).map((function(e,t){return n.createElement("li",{key:"linkset-".concat(t),className:v.Z.curriculumSet},n.createElement(L,{linkSet:l[e],trySetMaxCodeWidth:u,codeWidth:o}))}))):n.createElement(f.p,{emptyStateUrl:e.emptyStateUrl}):n.createElement(m.Z,null)}var x=r(1353),V=r(63112),P=r(65163);function O(e){var t,r,i;return n.createElement(P.eb,{collection:(null===(t=e.selectedCurriculum)||void 0===t?void 0:t.id)?e.curriculums.nonEmptyCurriculums:null,childClassName:"flex-shrink-0",childComponent:function(t){var r,i;return n.createElement(x.$,Object.assign({},t,{selected:(null===(i=null===(r=e.selectedCurriculum)||void 0===r?void 0:r.id)||void 0===i?void 0:i.toString())===t.data.id.toString(),onChangeCurriculum:e.onChangeCurriculum}))},partialLoadingComponent:function(){return n.createElement(V.o,null)},widgetDataDeps:[null===(i=null===(r=e.selectedCurriculum)||void 0===r?void 0:r.id)||void 0===i?void 0:i.toString(),e.onChangeCurriculum],noNegativePadding:e.noNegativePadding})}var N=r(79104),j=r(9111),A=r(13876),I=r(69883);function _(e){return _="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},_(e)}function T(){T=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,i=Object.defineProperty||function(e,t,r){e[t]=r.value},a="function"==typeof Symbol?Symbol:{},o=a.iterator||"@@iterator",c=a.asyncIterator||"@@asyncIterator",u=a.toStringTag||"@@toStringTag";function l(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{l({},"")}catch(e){l=function(e,t,r){return e[t]=r}}function s(e,t,r,n){var a=t&&t.prototype instanceof y?t:y,o=Object.create(a.prototype),c=new N(n||[]);return i(o,"_invoke",{value:x(e,r,c)}),o}function d(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=s;var m="suspendedStart",f="suspendedYield",p="executing",h="completed",v={};function y(){}function g(){}function b(){}var w={};l(w,o,(function(){return this}));var C=Object.getPrototypeOf,E=C&&C(C(j([])));E&&E!==r&&n.call(E,o)&&(w=E);var k=b.prototype=y.prototype=Object.create(w);function L(e){["next","throw","return"].forEach((function(t){l(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(i,a,o,c){var u=d(e[i],e,a);if("throw"!==u.type){var l=u.arg,s=l.value;return s&&"object"==_(s)&&n.call(s,"__await")?t.resolve(s.__await).then((function(e){r("next",e,o,c)}),(function(e){r("throw",e,o,c)})):t.resolve(s).then((function(e){l.value=e,o(l)}),(function(e){return r("throw",e,o,c)}))}c(u.arg)}var a;i(this,"_invoke",{value:function(e,n){function i(){return new t((function(t,i){r(e,n,t,i)}))}return a=a?a.then(i,i):i()}})}function x(t,r,n){var i=m;return function(a,o){if(i===p)throw Error("Generator is already running");if(i===h){if("throw"===a)throw o;return{value:e,done:!0}}for(n.method=a,n.arg=o;;){var c=n.delegate;if(c){var u=V(c,n);if(u){if(u===v)continue;return u}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(i===m)throw i=h,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);i=p;var l=d(t,r,n);if("normal"===l.type){if(i=n.done?h:f,l.arg===v)continue;return{value:l.arg,done:n.done}}"throw"===l.type&&(i=h,n.method="throw",n.arg=l.arg)}}}function V(t,r){var n=r.method,i=t.iterator[n];if(i===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,V(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var a=d(i,t.iterator,r.arg);if("throw"===a.type)return r.method="throw",r.arg=a.arg,r.delegate=null,v;var o=a.arg;return o?o.done?(r[t.resultName]=o.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):o:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function P(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function O(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function N(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(P,this),this.reset(!0)}function j(t){if(t||""===t){var r=t[o];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var i=-1,a=function r(){for(;++i<t.length;)if(n.call(t,i))return r.value=t[i],r.done=!1,r;return r.value=e,r.done=!0,r};return a.next=a}}throw new TypeError(_(t)+" is not iterable")}return g.prototype=b,i(k,"constructor",{value:b,configurable:!0}),i(b,"constructor",{value:g,configurable:!0}),g.displayName=l(b,u,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,b):(e.__proto__=b,l(e,u,"GeneratorFunction")),e.prototype=Object.create(k),e},t.awrap=function(e){return{__await:e}},L(S.prototype),l(S.prototype,c,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,i,a){void 0===a&&(a=Promise);var o=new S(s(e,r,n,i),a);return t.isGeneratorFunction(r)?o:o.next().then((function(e){return e.done?e.value:o.next()}))},L(k),l(k,u,"Generator"),l(k,o,(function(){return this})),l(k,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=j,N.prototype={constructor:N,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(O),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function i(n,i){return c.type="throw",c.arg=t,r.next=n,i&&(r.method="next",r.arg=e),!!i}for(var a=this.tryEntries.length-1;a>=0;--a){var o=this.tryEntries[a],c=o.completion;if("root"===o.tryLoc)return i("end");if(o.tryLoc<=this.prev){var u=n.call(o,"catchLoc"),l=n.call(o,"finallyLoc");if(u&&l){if(this.prev<o.catchLoc)return i(o.catchLoc,!0);if(this.prev<o.finallyLoc)return i(o.finallyLoc)}else if(u){if(this.prev<o.catchLoc)return i(o.catchLoc,!0)}else{if(!l)throw Error("try statement without catch or finally");if(this.prev<o.finallyLoc)return i(o.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&n.call(i,"finallyLoc")&&this.prev<i.finallyLoc){var a=i;break}}a&&("break"===e||"continue"===e)&&a.tryLoc<=t&&t<=a.finallyLoc&&(a=null);var o=a?a.completion:{};return o.type=e,o.arg=t,a?(this.method="next",this.next=a.finallyLoc,v):this.complete(o)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),O(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var i=n.arg;O(r)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:j(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var M=function(e,t,r,n){return new(r||(r=Promise))((function(i,a){function o(e){try{u(n.next(e))}catch(e){a(e)}}function c(e){try{u(n.throw(e))}catch(e){a(e)}}function u(e){var t;e.done?i(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(o,c)}u((n=n.apply(e,t||[])).next())}))},U=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var i=0;for(n=Object.getOwnPropertySymbols(e);i<n.length;i++)t.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(e,n[i])&&(r[n[i]]=e[n[i]])}return r},W="shared.videoGuidanceClassroomGuidePopup",Z=350;function F(e){var t,r,a,o,f,h,v,y,g=(v=n.useState(),y=2,function(e){if(Array.isArray(e))return e}(v)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,i,a,o,c=[],u=!0,l=!1;try{if(a=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;u=!1}else for(;!(u=(n=a.call(r)).done)&&(c.push(n.value),c.length!==t);u=!0);}catch(e){l=!0,i=e}finally{try{if(!u&&null!=r.return&&(o=r.return(),Object(o)!==o))return}finally{if(l)throw i}}return c}}(v,y)||function(e,t){if(e){if("string"==typeof e)return G(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?G(e,t):void 0}}(v,y)||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.")}()),b=g[0],w=g[1],C=(0,I.Z)();n.useEffect((function(){if(!e.isLoading&&e.curriculums&&!b){var t=e.curriculums.activeCurriculum?e.curriculums.activeCurriculum:d.m.first(e.curriculums.availableCurriculums);w(t)}}),[e.isLoading,null===(r=null===(t=e.curriculums)||void 0===t?void 0:t.activeCurriculum)||void 0===r?void 0:r.id]);var E=e.canViewCurriculumLinks&&(null===(a=e.curriculums)||void 0===a?void 0:a.customerHasCurriculumLinks);return n.createElement(j.G,{closePopup:e.onClickClose,showLoadingSpinner:e.isLoading,title:s.T.getPhrase(W,"classroomGuide"),size:"lg"},!e.isLoading&&n.createElement(n.Fragment,null,n.createElement(l.ZP,{autoHeightMax:Z,autoHeightMin:Z,autoHeight:!0,className:"pb-3",renderThumbVertical:function(e){var t=e.style,r=U(e,["style"]);return n.createElement("div",Object.assign({},r,{style:Object.assign(Object.assign({},t),{borderRadius:"inherit",backgroundColor:"rgba(0, 0, 0, 0.2)",zIndex:5}),className:"thumb-vertical"}))}},n.createElement("div",{className:E?"mb-4":""},n.createElement(N.j,{video:e.video,pointsOfInterest:e.pointsOfInterest,setStartTime:function(t){var r,n={t,includeContext:null===(r=e.currentUser)||void 0===r?void 0:r.isAuthenticated},a=e.getVideoAppLink(e.video,n);i.Q.C$.trigger(a),e.closePopup()},getTagAppLink:e.getTagAppLink,suppressInteractivity:e.canViewPublicLayout,onClickTag:e.closePopup,canViewGlance:e.canViewGlance,hideScrollbar:!0})),E&&n.createElement(n.Fragment,null,n.createElement("h2",{className:"h6"},n.createElement(p.x,{namespace:W,phrase:"curriculumLinks"})),n.createElement("div",{className:"mb-2"},n.createElement(O,{curriculums:e.curriculums,selectedCurriculum:b,onChangeCurriculum:function(t){var r,n,i;return M(this,void 0,void 0,T().mark((function a(){var o;return T().wrap((function(a){for(;;)switch(a.prev=a.next){case 0:if(null==(o=e.curriculums.availableCurriculums.find((function(e){return e.id.toString()===t})))?void 0:o.id){a.next=3;break}return a.abrupt("return",!1);case 3:if((null===(n=null===(r=e.curriculums.activeCurriculum)||void 0===r?void 0:r.id)||void 0===n?void 0:n.toString())!==(null===(i=null==o?void 0:o.id)||void 0===i?void 0:i.toString())){a.next=5;break}return a.abrupt("return",!1);case 5:return w(o),a.prev=6,a.next=9,e.curriculums.updateCurriculum(o);case 9:c.k.logUserAction({id:o.id,name:o.id,description:o.description,videoId:e.video.id,videoName:e.video.name},{entity:u.py.Presentation,actionType:u.Vw.Select,descriptor:u.kD.Curriculum,location:u.LZ.ClassroomGuidancePopup}),a.next=16;break;case 12:a.prev=12,a.t0=a.catch(6),w(b),C.error(s.T.getPhrase(W,"updateCurriculumFailed"));case 16:case"end":return a.stop()}}),a,null,[[6,12]])})))},noNegativePadding:!0})),(null===(o=e.curriculums)||void 0===o?void 0:o.hasLoaded)?n.createElement(S,{curriculumLinks:null!==(h=null===(f=e.curriculums)||void 0===f?void 0:f.curriculumLinks)&&void 0!==h?h:[],emptyStateUrl:e.curriculumLinksEmptyStateUrl}):n.createElement(m.Z,null))),n.createElement(A.u,null,n.createElement(A.u.Cancel,{onClick:e.onClickClose,text:s.T.getPhrase(W,"close")}),n.createElement(A.u.Submit,{text:s.T.getPhrase(W,"viewVideo"),variant:"dark",onClick:e.onClickViewVideo}))))}var R=r(4594),H=r(43012),$=r(31949),D=r(1575),z=r(31908),Q=r(99742),Y=r(14070),B=r(97291),K=r(82817),q=r(49948),J=r(35014),X=r(22490);function ee(e){var t=a.a.useBasicFetch($.N.currentUser()),r=a.a.useBasicFetch(e.type===R.E.Video?D.R.video(e.id):H.e.clip(e.id)),l=(0,q.l)(e.id,!0),s=(0,K.M)(e.id),d=(0,J.I)();return n.createElement(F,{isLoading:!r.hasCompleted||!l.hasCompleted,video:r.data,pointsOfInterest:l.items,curriculums:s,onClickClose:function(){c.k.logUserAction({id:r.data.id,name:r.data.name},{entity:z.M.isVideo(r.data)?u.py.Video:u.py.Clip,location:u.LZ.ClassroomGuidancePopup,actionType:u.Vw.Click,descriptor:u.od.Close}),e.closePopup()},onClickViewVideo:function(){if(c.k.logUserAction({id:r.data.id,name:r.data.name},{entity:z.M.isVideo(r.data)?u.py.Video:u.py.Clip,location:u.LZ.ClassroomGuidancePopup,actionType:u.Vw.Click,descriptor:u.od.ViewVideo}),z.M.isVideo(r.data))return i.Q.C$.trigger({application:B.O.VIDEOS,action:Y.e.Videos.PLAY_VIDEO,args:[r.data.id,o.m.slugify(r.data.name)]}),void e.closePopup();i.Q.C$.trigger({application:B.O.CLIPS,action:Y.e.Clips.PLAY_CLIP,args:[r.data.id,o.m.slugify(r.data.name)]}),e.closePopup()},curriculumLinksEmptyStateUrl:Q.W.EmptyStates.CURRICULUM_LINKS,getVideoAppLink:X.W.getAppLink,getTagAppLink:function(e){return{application:B.O.SEARCH,action:Y.e.Search.HOME,params:{tagOrClassification:e.name}}},canViewCurriculumLinks:d.canViewCurriculumLinks,canViewPublicLayout:d.canViewPublicLayout,canViewGlance:d.canViewGlance,closePopup:e.closePopup,currentUser:t.data})}}}]);
|
|
3
|
+
//# sourceMappingURL=4205-b37ae8ccb9-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/4205-b37ae8ccb9-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/projects/lite/src/shared/hooks/useVideoFeatureAccess.ts","file:///app/packages/libs/shared/src/components/play-page/curriculum-links/CurriculumLinksV2.tsx","file:///app/packages/libs/shared/src/components/play-page/curriculum-links/CurriculumsWidget.tsx","file:///app/packages/libs/shared/src/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup.tsx","file:///app/packages/projects/lite/src/shared/views/video-guidance-classroom-guide/VideoGuidanceClassroomGuideView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n aria-label={`${getPhrase('ariaFilter')} ${curriculumTag.name}`}\n >\n {curriculumTag.cover?.url && (\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n )}\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}> </span>\n </div>\n );\n});","import { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useProducts } from 'libs/shared/hooks/UseProducts';\n\nimport { LiteRouteHelper } from 'shared/utils/LiteRouteHelper';\n\nexport interface VideoFeaturesHash {\n canViewGlance: boolean;\n canViewResources: boolean;\n canViewInteractives: boolean;\n canViewClips: boolean;\n canUseActions: boolean;\n canViewPublicLayout: boolean;\n canNavigate: boolean;\n canViewCurriculumLinks: boolean;\n canViewResourceItems: boolean;\n}\n\nexport function useVideoFeatureAccess() {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasProduct } = useProducts();\n\n const hasNP = hasProduct(ProductId.Primary);\n\n function showPublicLayout(): boolean {\n /**\n * Authenticated users should never see the placeholder\n */\n if (hasLocalPermissions(LocalPermissionName.WatchVideos))\n return false;\n\n /**\n * Accessing a play page unathenticated will have different contextual behabviours:\n * - For a share page, the user should see the video and never the placeholder\n * - For a public browsing page (ie. using a route-prefix) they should see the placeholder\n */\n return LiteRouteHelper.hasRegionPrefix();\n }\n\n return {\n canViewGlance: hasPermissions(PermissionName.ViewVideoGlance),\n canViewResources: true,\n canViewInteractives: hasNP && hasPermissions(PermissionName.ViewVideoInteractives),\n canViewClips: hasNP && hasPermissions(PermissionName.ViewVideoClips),\n canViewCurriculumLinks: hasPermissions(PermissionName.ViewCurriculums),\n canUseActions: hasLocalPermissions(LocalPermissionName.UseVideoActions),\n canViewPublicLayout: showPublicLayout(),\n canViewResourceItems: hasLocalPermissions(LocalPermissionName.ViewVideoResourceItems),\n canNavigate: hasNP\n };\n}","import React from 'react';\n\nimport { CurriculumLinksEmptyState } from 'libs/shared/components/curriculum-links/CurriculumLinksEmptyState';\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { Curriculum } from 'libs/shared/interfaces';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block fw-semibold';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n if (!areaAndLeafSets[areaText].find(l => l.name === leaf.name)) {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n }\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year level\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-ultramarine fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksV2Props {\n curriculumLinks?: Curriculum[][];\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksV2(props: CurriculumLinksV2Props): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n\n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (!props.curriculumLinks)\n return <PartialCurriculumLinks />;\n\n if (!props.curriculumLinks?.length) {\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { CurriculumData, Presentation } from 'libs/shared/interfaces';\n\ninterface CurriculumsWidgetProps {\n curriculums: CurriculumData;\n selectedCurriculum: Presentation;\n onChangeCurriculum: (curriculumId: string) => void;\n noNegativePadding?: boolean;\n}\n\nexport function CurriculumsWidget(props: CurriculumsWidgetProps): JSX.Element {\n return (\n <DynamicWidget\n collection={props.selectedCurriculum?.id ? props.curriculums.nonEmptyCurriculums : null}\n childClassName='flex-shrink-0'\n childComponent={_props => {\n return (\n <CurriculumLinkItem\n {..._props}\n selected={props.selectedCurriculum?.id?.toString() === _props.data.id.toString()}\n onChangeCurriculum={props.onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[ props.selectedCurriculum?.id?.toString(), props.onChangeCurriculum ]}\n noNegativePadding={props.noNegativePadding}\n />\n );\n}","import React from 'react';\nimport Scrollbars from 'react-custom-scrollbars-2';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { CurriculumLinksV2 } from 'libs/shared/components/play-page/curriculum-links/CurriculumLinksV2';\nimport { CurriculumsWidget } from 'libs/shared/components/play-page/curriculum-links/CurriculumsWidget';\nimport { VideoAtAGlanceV2 } from 'libs/shared/components/play-page/glance/VideoAtAGlanceV2';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { Clip, CurrentUser, CurriculumData, PointOfInterest, PopupViewProps, Presentation, Tag, Video } from 'libs/shared/interfaces';\nimport { GetVideoAppLinkOptions } from 'libs/shared/interfaces/VideoAppLinkOptions';\n\nconst namespace = 'shared.videoGuidanceClassroomGuidePopup';\n\nconst MIN_MAX_HEIGHT = 350;\n\ninterface VideoGuidanceClassroomGuidePopupProps extends PopupViewProps {\n isLoading: boolean;\n video: Video | Clip;\n onClickClose: () => void;\n onClickViewVideo: () => void;\n pointsOfInterest: PointOfInterest[];\n curriculums: CurriculumData;\n curriculumLinksEmptyStateUrl: string;\n currentUser: CurrentUser;\n\n getTagAppLink?: (tag: Tag) => Core.AppLink;\n getVideoAppLink: (video: Video | Clip, opts: GetVideoAppLinkOptions) => Core.AppLink;\n\n canViewPublicLayout: boolean;\n canViewCurriculumLinks: boolean;\n canViewGlance: boolean;\n}\n\nexport function VideoGuidanceClassroomGuidePopup(props: VideoGuidanceClassroomGuidePopupProps): JSX.Element {\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const alerts = useAlerts();\n\n React.useEffect(() => {\n if (props.isLoading || !props.curriculums)\n return;\n\n if (!selectedCurriculum) {\n const currentCurriculum = props.curriculums.activeCurriculum\n ? props.curriculums.activeCurriculum\n : ArrayHelper.first(props.curriculums.availableCurriculums);\n setSelectedCurriculum(currentCurriculum);\n }\n }, [ props.isLoading, props.curriculums?.activeCurriculum?.id ]);\n\n async function onChangeCurriculum(curriculumId: string): Promise<boolean> {\n const newCurriculum = props.curriculums.availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return false;\n\n if (props.curriculums.activeCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return false;\n\n setSelectedCurriculum(newCurriculum);\n\n try {\n await props.curriculums.updateCurriculum(newCurriculum);\n\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: props.video.id,\n videoName: props.video.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.ClassroomGuidancePopup\n });\n } catch {\n setSelectedCurriculum(selectedCurriculum);\n alerts.error(LanguageService.getPhrase(namespace, 'updateCurriculumFailed'));\n }\n }\n\n const hasCurriculumLinks = props.canViewCurriculumLinks && props.curriculums?.customerHasCurriculumLinks;\n\n return (\n <Popup\n closePopup={props.onClickClose}\n showLoadingSpinner={props.isLoading}\n title={LanguageService.getPhrase(namespace, 'classroomGuide')}\n size='lg'\n >\n {!props.isLoading && (\n <>\n <Scrollbars\n autoHeightMax={MIN_MAX_HEIGHT}\n autoHeightMin={MIN_MAX_HEIGHT}\n autoHeight\n className='pb-3'\n // move vertical scrollbar to the top\n renderThumbVertical={({ style, ...props }) => <div {...props} style={{ ...style, borderRadius: 'inherit', backgroundColor: 'rgba(0, 0, 0, 0.2)', zIndex: 5 }} className='thumb-vertical'/>}\n >\n <div className={hasCurriculumLinks ? 'mb-4' : ''}>\n <VideoAtAGlanceV2\n video={props.video}\n pointsOfInterest={props.pointsOfInterest}\n setStartTime={startTime => {\n const opts = { t: startTime, includeContext: props.currentUser?.isAuthenticated };\n const appLink = props.getVideoAppLink(props.video, opts);\n Core.AppLinkHelper.trigger(appLink);\n props.closePopup();\n }}\n getTagAppLink={props.getTagAppLink}\n suppressInteractivity={props.canViewPublicLayout}\n onClickTag={props.closePopup}\n canViewGlance={props.canViewGlance}\n hideScrollbar\n />\n </div>\n\n {hasCurriculumLinks && (\n <>\n <h2 className='h6'>\n <Text namespace={namespace} phrase='curriculumLinks' />\n </h2>\n \n <div className='mb-2'>\n <CurriculumsWidget\n curriculums={props.curriculums}\n selectedCurriculum={selectedCurriculum}\n onChangeCurriculum={onChangeCurriculum}\n noNegativePadding\n />\n </div>\n \n {!props.curriculums?.hasLoaded\n ? <PartialCurriculumLinks />\n : (\n <CurriculumLinksV2\n curriculumLinks={props.curriculums?.curriculumLinks ?? []}\n emptyStateUrl={props.curriculumLinksEmptyStateUrl}\n />\n )}\n </>\n )}\n </Scrollbars>\n\n <PopupButtons>\n <PopupButtons.Cancel\n onClick={props.onClickClose}\n text={LanguageService.getPhrase(namespace, 'close')}\n />\n <PopupButtons.Submit\n text={LanguageService.getPhrase(namespace, 'viewVideo')}\n variant='dark'\n onClick={props.onClickViewVideo}\n />\n </PopupButtons>\n </>\n )}\n </Popup>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { Flight } from 'libs/common/react/index';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, VideoGuidanceDescriptor } from 'libs/analytics/interfaces';\n\nimport { VideoGuidanceClassroomGuidePopup } from 'libs/shared/components/video-guidance/classroom-guide/popup/VideoGuidanceClassroomGuidePopup';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { Clip, CurrentUser, PopupViewProps, Video } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { VideoAppLinkHelper } from 'shared/utils/VideoAppLinkHelper';\n\ninterface VideoGuidanceClassroomGuideViewProps extends PopupViewProps {\n id: string;\n type: MasterType;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function VideoGuidanceClassroomGuideView(props: VideoGuidanceClassroomGuideViewProps): JSX.Element {\n function getRequest(): Flight.Request {\n return props.type === MasterType.Video\n ? VideoRequests.video(props.id)\n : ClipRequests.clip(props.id);\n }\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Clip | Video>(getRequest());\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n const curriculums = useCurriculums(props.id);\n const featureAccess = useVideoFeatureAccess();\n\n function onClickClose(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: VideoHelper.isVideo(video.data)\n ? EntityType.Video\n : EntityType.Clip,\n location: LocationContext.ClassroomGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.Close\n });\n\n props.closePopup();\n }\n\n function onClickViewVideo(): void {\n AnalyticsHelper.logUserAction({\n id: video.data.id,\n name: video.data.name\n }, {\n entity: VideoHelper.isVideo(video.data)\n ? EntityType.Video\n : EntityType.Clip,\n location: LocationContext.ClassroomGuidancePopup,\n actionType: UserAction.Click,\n descriptor: VideoGuidanceDescriptor.ViewVideo\n });\n\n if (VideoHelper.isVideo(video.data)) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ video.data.id, TextHelper.slugify(video.data.name) ]\n });\n\n props.closePopup();\n }\n\n return (\n <VideoGuidanceClassroomGuidePopup\n isLoading={!video.hasCompleted || !pointsOfInterest.hasCompleted}\n video={video.data}\n pointsOfInterest={pointsOfInterest.items}\n curriculums={curriculums}\n onClickClose={onClickClose}\n onClickViewVideo={onClickViewVideo}\n curriculumLinksEmptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n getVideoAppLink={VideoAppLinkHelper.getAppLink}\n getTagAppLink={tag => ({\n application: AppChannels.SEARCH,\n action: Actions.Search.HOME,\n params: { tagOrClassification: tag.name }\n })}\n canViewCurriculumLinks={featureAccess.canViewCurriculumLinks}\n canViewPublicLayout={featureAccess.canViewPublicLayout}\n canViewGlance={featureAccess.canViewGlance}\n closePopup={props.closePopup}\n currentUser={currentUser.data}\n />\n );\n}"],"names":["getPhrase","CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","name","cover","url","src","size","alt","PartialTagItem","tagClass","classNames","useVideoFeatureAccess","hasPermissions","hasLocalPermissions","hasNP","hasProduct","canViewGlance","canViewResources","canViewInteractives","canViewClips","canViewCurriculumLinks","canUseActions","canViewPublicLayout","canViewResourceItems","canNavigate","BRACKET_SEGMENT_REGEX","namespace","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","Text","phrase","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","CurriculumType","map","ca","join","find","l","push","match","Object","keys","i","CurriculumLinksV2","setCodeWidth","currentVal","curriculumLinkSets","newSet","curriculumLinks","subject","audience","areas","leaves","curriculumObj","type","length","linkSetKey","CurriculumLinksEmptyState","emptyStateUrl","PartialCurriculumLinks","CurriculumsWidget","collection","selectedCurriculum","curriculums","nonEmptyCurriculums","childClassName","childComponent","_props","partialLoadingComponent","widgetDataDeps","noNegativePadding","MIN_MAX_HEIGHT","VideoGuidanceClassroomGuidePopup","setSelectedCurriculum","alerts","isLoading","currentCurriculum","activeCurriculum","ArrayHelper","availableCurriculums","hasCurriculumLinks","customerHasCurriculumLinks","Popup","closePopup","onClickClose","showLoadingSpinner","title","LanguageService","autoHeightMax","autoHeightMin","autoHeight","renderThumbVertical","borderRadius","backgroundColor","zIndex","VideoAtAGlanceV2","video","pointsOfInterest","setStartTime","startTime","opts","t","includeContext","currentUser","isAuthenticated","appLink","getVideoAppLink","getTagAppLink","suppressInteractivity","onClickTag","hideScrollbar","curriculumId","newCurriculum","c","updateCurriculum","AnalyticsHelper","videoId","videoName","entity","actionType","descriptor","location","error","hasLoaded","curriculumLinksEmptyStateUrl","PopupButtons","text","variant","onClickViewVideo","VideoGuidanceClassroomGuideView","UserRequests","MasterType","VideoRequests","ClipRequests","useFetchPointsOfInterest","useCurriculums","featureAccess","hasCompleted","items","VideoHelper","application","action","args","TextHelper","ImageUrls","VideoAppLinkHelper","tag","params","tagOrClassification"],"sourceRoot":""}
|