@clickview/lite 0.50.0-rc.1 → 0.50.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{355-lite-7e76df6ab5.chunk.css → 355-lite-e474c8ddce.chunk.css} +1 -1
- package/dist/css/{7715-lite-671ee43c49.chunk.css → 7715-lite-25809cdd3d.chunk.css} +1 -1
- package/dist/css/{8139-lite-10c11c0722.chunk.css → 8139-lite-5511af77bf.chunk.css} +1 -1
- package/dist/css/{8960-lite-d45f2332e6.chunk.css → 8960-lite-a80ad92ea7.chunk.css} +1 -1
- package/dist/css/{9395-lite-01ed62af75.chunk.css → 9395-lite-e7ca0b1320.chunk.css} +1 -1
- package/dist/css/lite-app-f2595ac365.css +53 -0
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1285-086e83fddf-lite.chunk.js → 1285-f4b56a47c2-lite.chunk.js} +2 -2
- package/dist/scripts/{1285-086e83fddf-lite.chunk.js.map → 1285-f4b56a47c2-lite.chunk.js.map} +1 -1
- package/dist/scripts/{355-81c86415d9-lite.chunk.js → 355-eaf55dc95f-lite.chunk.js} +1 -1
- package/dist/scripts/{355-81c86415d9-lite.chunk.js.map → 355-eaf55dc95f-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4395-2e9e72a400-lite.chunk.js → 4395-322f459cb0-lite.chunk.js} +2 -2
- package/dist/scripts/4395-322f459cb0-lite.chunk.js.map +1 -0
- package/dist/scripts/{5562-42375ce894-lite.chunk.js → 5562-09db6be3de-lite.chunk.js} +3 -3
- package/dist/scripts/{5562-42375ce894-lite.chunk.js.map → 5562-09db6be3de-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6480-06435aaa46-lite.chunk.js → 6480-60a0ad2ff5-lite.chunk.js} +1 -1
- package/dist/scripts/{6480-06435aaa46-lite.chunk.js.map → 6480-60a0ad2ff5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{679-a58b19729d-lite.chunk.js → 679-51a0b936e0-lite.chunk.js} +2 -2
- package/dist/scripts/{679-a58b19729d-lite.chunk.js.map → 679-51a0b936e0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6863-562ff82f45-lite.chunk.js → 6863-670092eaa5-lite.chunk.js} +1 -1
- package/dist/scripts/{6863-562ff82f45-lite.chunk.js.map → 6863-670092eaa5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6948-8c8d9131eb-lite.chunk.js → 6948-e7a16d8c0b-lite.chunk.js} +2 -2
- package/dist/scripts/{6948-8c8d9131eb-lite.chunk.js.map → 6948-e7a16d8c0b-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7052-32d8266e82-lite.chunk.js → 7052-a4d79c9f20-lite.chunk.js} +3 -3
- package/dist/scripts/{7052-32d8266e82-lite.chunk.js.map → 7052-a4d79c9f20-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7715-e5380d1440-lite.chunk.js → 7715-634be84dc5-lite.chunk.js} +2 -2
- package/dist/scripts/{7715-e5380d1440-lite.chunk.js.map → 7715-634be84dc5-lite.chunk.js.map} +1 -1
- package/dist/scripts/7855-04bc8e52e3-lite.chunk.js +2 -0
- package/dist/scripts/7855-04bc8e52e3-lite.chunk.js.map +1 -0
- package/dist/scripts/{8055-f4de552821-lite.chunk.js → 8055-a6d102b953-lite.chunk.js} +3 -3
- package/dist/scripts/{8055-f4de552821-lite.chunk.js.map → 8055-a6d102b953-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8139-37635f8bcd-lite.chunk.js → 8139-2a36098eae-lite.chunk.js} +3 -3
- package/dist/scripts/{8139-37635f8bcd-lite.chunk.js.map → 8139-2a36098eae-lite.chunk.js.map} +1 -1
- package/dist/scripts/8243-e4baf0ae31-lite.chunk.js +2 -0
- package/dist/scripts/8243-e4baf0ae31-lite.chunk.js.map +1 -0
- package/dist/scripts/{8419-70c7a44baa-lite.chunk.js → 8419-510dc22a69-lite.chunk.js} +1 -1
- package/dist/scripts/{8419-70c7a44baa-lite.chunk.js.map → 8419-510dc22a69-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-181720391d-lite.chunk.js → 9395-77dfcbad18-lite.chunk.js} +2 -2
- package/dist/scripts/{9395-181720391d-lite.chunk.js.map → 9395-77dfcbad18-lite.chunk.js.map} +1 -1
- package/dist/scripts/950-68255d3086-lite.chunk.js +2 -0
- package/dist/scripts/950-68255d3086-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-be1688b50c.min.js → bundle-0187039e1a.min.js} +3 -3
- package/dist/scripts/bundle-0187039e1a.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/css/lite-app-5b9f4761e1.css +0 -53
- package/dist/scripts/4395-2e9e72a400-lite.chunk.js.map +0 -1
- package/dist/scripts/7855-1c7a0adeab-lite.chunk.js +0 -2
- package/dist/scripts/7855-1c7a0adeab-lite.chunk.js.map +0 -1
- package/dist/scripts/8243-5d673b616d-lite.chunk.js +0 -2
- package/dist/scripts/8243-5d673b616d-lite.chunk.js.map +0 -1
- package/dist/scripts/950-4b9770bfe3-lite.chunk.js +0 -2
- package/dist/scripts/950-4b9770bfe3-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-be1688b50c.min.js.map +0 -1
- /package/dist/scripts/{5562-42375ce894-lite.chunk.js.LICENSE.txt → 5562-09db6be3de-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7052-32d8266e82-lite.chunk.js.LICENSE.txt → 7052-a4d79c9f20-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8055-f4de552821-lite.chunk.js.LICENSE.txt → 8055-a6d102b953-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8139-37635f8bcd-lite.chunk.js.LICENSE.txt → 8139-2a36098eae-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-181720391d-lite.chunk.js.LICENSE.txt → 9395-77dfcbad18-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-be1688b50c.min.js.LICENSE.txt → bundle-0187039e1a.min.js.LICENSE.txt} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7715],{69395:(e,t,n)=>{n.d(t,{e:()=>l});var r=n(32735),a=n(91967);const i={disabled:"pERi4",disabledHighlighted:"AxyWm"};function l(e){var t=e.audience,n=e.highlight,l=e.setAudience,c=e.isDisabled,o=e.extraClasses,s=function(e,t){return e?t?"".concat(i.disabledHighlighted," text-light"):"bg-
|
|
2
|
-
//# sourceMappingURL=7715-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7715],{69395:(e,t,n)=>{n.d(t,{e:()=>l});var r=n(32735),a=n(91967);const i={disabled:"pERi4",disabledHighlighted:"AxyWm"};function l(e){var t=e.audience,n=e.highlight,l=e.setAudience,c=e.isDisabled,o=e.extraClasses,s=function(e,t){return e?t?"".concat(i.disabledHighlighted," text-light"):"bg-blue text-light":t?"".concat(i.disabled," text-secondary"):"bg-light"}(n,c),u="rounded-pill d-inline-block me-1 user-select-none ".concat(c?"cursor-default":"cursor-pointer"," ").concat(s," ").concat(o);return r.createElement("span",{className:u,onClick:function(){!c&&a.q.isFunction(l)&&l(t,!n)},role:"checkbox","aria-checked":n},t.name.split(" ").map((function(e){return e.charAt(0).toUpperCase()+e.substring(1)})).join(" "))}l.defaultProps={extraClasses:""}},60836:(e,t,n)=>{n.d(t,{j:()=>i});var r=n(32735);function a(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 i=function(e){var t,n,i=(t=r.useState(1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,c=[],o=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return a(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)?a(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=i[0],c=i[1];return r.useEffect((function(){l>0||e()}),[l]),[function(){c((function(e){return e-1}))},c]}},59406:(e,t,n)=>{n.r(t),n.d(t,{AudiencePreferencesView:()=>$});var r=n(32735),a=n(70680),i=n(81886),l=n(20354),c=n(65858),o=n(23481),s=n(75896),u=n(69395);function d(e){var t=e.width,n=void 0===t?90:t,a=e.height,i=void 0===a?35:a,l=e.count,c=void 0===l?5:l,o=e.align,s="center"===(void 0===o?"left":o)?"justify-content-center":"justify-content-start";return r.createElement("ul",{className:"d-flex flex-wrap ps-0 m-0 ".concat(s)},Array(c).fill(null).map((function(e,t){return r.createElement("li",{key:t,className:"partial-loading-background mx-1 mb-1 rounded-pill list-unstyled",style:{height:"".concat(i,"px"),width:"".concat(n,"px")}})})))}var f=n(9826),m=n(49602),p=n(36848),v=n(2102),h=n(83345),g=n(83523),b=n(69883),y=n(60836);const E={audienceList:"gGUpk",imageContainer:"mLKC0"};function k(e){return function(e){if(Array.isArray(e))return A(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||x(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 S(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,i,l,c=[],o=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=i.call(n)).done)&&(c.push(r.value),c.length!==t);o=!0);}catch(e){s=!0,a=e}finally{try{if(!o&&null!=n.return&&(l=n.return(),Object(l)!==l))return}finally{if(s)throw a}}return c}}(e,t)||x(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 x(e,t){if(e){if("string"==typeof e)return A(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)?A(e,t):void 0}}function A(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 C="subjects.audiencePreferences";function w(e){var t=S(r.useState([]),2),n=t[0],a=t[1],l=S(r.useState(!1),2),c=l[0],d=l[1],x=S(r.useState(e.bulkPreferencesState),2),A=x[0],w=x[1],P=m.b.hasBulkSelectedLevels(A),I=(0,b.Z)();r.useEffect((function(){var t;if(null===(t=e.preselections)||void 0===t?void 0:t.length){var r=e.preselections.map((function(e){return e.masterId}));a(s.m.uniq([].concat(k(n),k(r))))}else a([])}),[]);var L=S((0,y.j)((function(){d(!1),e.isOnboarding||I.success(o.T.getPhrase(C,"success")),e.nextAppLink&&i.Q.C$.trigger(e.nextAppLink)})),2),N=L[0],j=L[1];function O(t){return!!e.preselections&&e.preselections.map((function(e){return e.masterId})).sort().toString()!==t.sort().toString()}function B(){return e.bulkPreferencesState!==A}function T(){if(!n.length&&!P)return!1;var t=B()||O(n);return!(!e.isOnboarding&&!t)}function U(e){var t=s.m.addOrRemoveImmutable(n,e.masterId);a(t)}function F(){var e=m.b.getNextBulkState(A,"audiences");w(e),m.b.hasBulkSelectedLevels(e)&&a([])}return r.createElement(h.D.Provider,{value:C},r.createElement("form",{className:"p-3"},r.createElement("div",{className:"position-relative"},r.createElement("ul",{className:"d-flex flex-wrap justify-content-center mx-auto mb-0 ps-0 py-3 ".concat(E.audienceList)},e.options.map((function(e){return r.createElement(u.e,{key:e.masterId,audience:e,highlight:n.includes(e.masterId),setAudience:U,extraClasses:"h4 py-1 px-3 mx-1 mb-1",isDisabled:P})})))),r.createElement("div",{className:"mx-auto ".concat(E.imageContainer)},r.createElement("img",{className:"img-fluid",src:e.imageUrl,alt:"",role:"presentation"})),r.createElement(f.e,{justify:e.backButtonAppLink?"between":"end"},r.createElement("div",null,!!e.backButtonAppLink&&r.createElement(p.F,{appLink:e.backButtonAppLink,className:"btn btn-outline-dark"},r.createElement(h.x,{phrase:"back"}))),r.createElement("div",{className:"d-flex align-items-center justify-content-end"},r.createElement("div",{className:"d-flex me-3"},r.createElement("p",{onClick:F,className:"me-2 mb-0 fw-bold"},r.createElement(h.x,{phrase:"allLevels"})),r.createElement(g.Z,{onClick:F,on:P,hideOutline:!0})),r.createElement(v.m,{variant:"dark",disabled:!T(),onClick:function(){var t;if(T())if(O(n)||B()){d(!0);var r=n.filter((function(t){var n;return!(null===(n=e.preselections)||void 0===n?void 0:n.find((function(e){return e.masterId===t})))})).map((function(t){var n;return null===(n=e.options)||void 0===n?void 0:n.find((function(e){return e.masterId===t}))})),a=null===(t=e.preselections)||void 0===t?void 0:t.filter((function(e){return!n.includes(e.masterId)})),l=0;(null==r?void 0:r.length)&&l++,(null==a?void 0:a.length)&&l++,B()&&l++,j(l),e.saveChanges(r,a,A,N,(function(){I.error(o.T.getPhrase(C,"error")),d(!1)}))}else e.nextAppLink&&i.Q.C$.trigger(e.nextAppLink)},showSpinner:c},r.createElement(h.x,{phrase:e.isOnboarding?"next":"save"}))))))}function P(){return r.createElement("div",{className:"p-3"},r.createElement("div",{className:"w-100 mx-auto py-3"},r.createElement(d,{align:"center"})))}var I=n(77963),L=n(65728),N=n(61699),j=n(31949),O=n(37802),B=n(69454),T=n(99742),U=n(14070),F=n(97291),R=n(71164),_="settings.audiencePreferences";function $(){var e,t=l.a.useBasicFetch(j.N.currentUser()),n=l.a.useBasicFetch(N.o.availablePresentations()),o=l.a.useBasicFetch(N.o.allLevelPreferences()),s=l.a.useBasicFetch(N.o.myLevelPreferences()),u=(0,O.r)(c.LZ.PreferencesSettings),d=u.bulkOnboardingPreferencesState,f=u.isLoadingSettings,m=u.updateSetting,p=!!(null===(e=o.data)||void 0===e?void 0:e.length)&&B.T.shouldShowAudiences(o.data);r.useEffect((function(){o.hasCompleted&&(p||i.Q.C$.trigger({application:F.O.SETTINGS,action:U.e.Settings.TOPIC_PREFERENCES},{replace:!0}))}),[o.hasCompleted]);var v=(0,a.I0)(),g=!!o.hasCompleted&&!!s.hasCompleted&&!f;return r.createElement(R.T,{availablePresentations:n.data,audiences:o.data},r.createElement("p",{className:"mt-3"},r.createElement(h.x,{namespace:_,phrase:"info"})),g&&p?r.createElement(w,{options:o.data,preselections:s.data,bulkPreferencesState:d,saveChanges:function(e,n,r,a,i){if(r!==d){var c={name:L.E.BulkOnboardingPreferencesState,value:r,kind:I.g.Permanent};m(t.data.id,c,a,i)}(null==e?void 0:e.length)&&l.a.fetch(v,N.o.followLevels(e,a,i)),(null==n?void 0:n.length)&&l.a.fetch(v,N.o.unfollowLevels(n,a,i))},imageUrl:T.W.Onboarding.YEAR_GROUPS}):r.createElement(P,null))}}}]);
|
|
2
|
+
//# sourceMappingURL=7715-634be84dc5-lite.chunk.js.map
|
package/dist/scripts/{7715-e5380d1440-lite.chunk.js.map → 7715-634be84dc5-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/7715-e5380d1440-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/hooks/UseOnSaveAll.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/partial-loading/PartialAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/audience-preferences.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/AudiencePreferences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences.tsx","file:///app/packages/projects/lite/src/apps/settings/views/preferences/audiences/AudiencePreferencesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-info text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <span\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n >\n {lowerCaseToTitleCase(audience.name)}\n </span>\n );\n}","import React from 'react';\n\ntype ReturnValue = [\n () => void,\n React.Dispatch<React.SetStateAction<number>>\n];\n\n/**\n * This hook solves a problem where you want to trigger an \"onSuccess\" callback function\n * only after the last of multiple API calls have completed.\n * \n * Example: the user clicks a \"Save\" button, which triggers 2 API calls. You have a callback function\n * that you want to run after both API calls have succeeded. This hook will help you do that of you pass it\n * the callback function and set the counter to 2.\n */\nexport const useOnSaveAll = (onDone: () => void): ReturnValue => {\n const [ counter, setCounter ] = React.useState(1);\n\n function onSave(): void {\n setCounter(val => val - 1);\n }\n\n React.useEffect(() => {\n if (counter > 0)\n return;\n \n onDone();\n }, [counter]);\n\n return [ onSave, setCounter ];\n};","import * as React from 'react';\n\ninterface PartialAudiencesProps {\n count?: number;\n width?: number;\n height?: number;\n align?: 'left' | 'center';\n}\n\nexport function PartialAudiences({ width = 90, height = 35, count = 5, align = 'left' }: PartialAudiencesProps): JSX.Element {\n const justifyClass = align === 'center' ? 'justify-content-center' : 'justify-content-start';\n\n return (\n <ul className={`d-flex flex-wrap ps-0 m-0 ${justifyClass}`}>\n {Array(count).fill(null).map((item, i) => (\n <li\n key={i}\n className='partial-loading-background mx-1 mb-1 rounded-pill list-unstyled'\n style={{ height: `${height}px`, width: `${width}px` }}\n />\n ))}\n </ul>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audienceList\":\"gGUpk\",\"imageContainer\":\"mLKC0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item';\nimport { OnboardingFooter } from 'libs/shared/apps/subjects/components/preferences/footer/OnboardingFooter';\nimport { OnboardingHelper } from 'libs/shared/apps/subjects/utils/OnboardingHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useOnSaveAll } from 'libs/shared/hooks/UseOnSaveAll';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-preferences.scss';\n\nconst namespace = 'subjects.audiencePreferences';\n\ninterface AudiencePreferencesProps {\n options: PresentationAudience[];\n preselections: PresentationAudience[];\n bulkPreferencesState: BulkOnboardingPreferencesState;\n saveChanges: (\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ) => void;\n \n imageUrl: string;\n\n isOnboarding?: boolean;\n backButtonAppLink?: Core.AppLink;\n nextAppLink?: Core.AppLink;\n}\n\nexport function AudiencePreferences(props: AudiencePreferencesProps): JSX.Element {\n const [ selectedAudiences, setSelectedAudiences ] = React.useState<string[]>([]);\n const [ showSpinner, setShowSpinner ] = React.useState<boolean>(false);\n\n const [ bulkPreferencesState, setBulkPreferencesState ] = React.useState<BulkOnboardingPreferencesState>(\n props.bulkPreferencesState\n );\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(bulkPreferencesState);\n\n const alerts = useAlerts();\n\n /**\n * Set initial selections\n */\n React.useEffect(() => {\n if (!props.preselections?.length) {\n setSelectedAudiences([]);\n return;\n }\n\n const preselectedIds = props.preselections.map(audience => audience.masterId);\n setSelectedAudiences(ArrayHelper.uniq([ ...selectedAudiences, ...preselectedIds ]));\n }, []);\n\n const [ onSuccess, setCounter ] = useOnSaveAll(() => {\n setShowSpinner(false);\n\n if (!props.isOnboarding)\n alerts.success(LanguageService.getPhrase(namespace, 'success'));\n\n if (props.nextAppLink)\n Core.AppLinkHelper.trigger(props.nextAppLink);\n });\n\n function hasChangedAudiences(selectedAudiences: string[]): boolean {\n if (!props.preselections)\n return false;\n\n const preselectedIds = props.preselections.map(p => p.masterId);\n return preselectedIds.sort().toString() !== selectedAudiences.sort().toString();\n }\n\n function hasChangedBulkState(): boolean {\n return props.bulkPreferencesState !== bulkPreferencesState;\n }\n\n function isValid(): boolean {\n if (!selectedAudiences.length && !hasBulkSelectedLevels)\n return false;\n\n const hasChanged = hasChangedBulkState() || hasChangedAudiences(selectedAudiences);\n\n if (!props.isOnboarding && !hasChanged)\n return false;\n\n return true;\n }\n\n function onSave(): void {\n if (!isValid())\n return;\n\n // If they have selected the bulk option, we do not want to clear their preferences or save any changes.\n if (!hasChangedAudiences(selectedAudiences) && !hasChangedBulkState()) {\n if (props.nextAppLink) {\n Core.AppLinkHelper.trigger(props.nextAppLink);\n }\n\n return;\n }\n\n setShowSpinner(true);\n\n const newAudiences = selectedAudiences\n .filter(id => !props.preselections?.find(level => level.masterId === id))\n .map(id => props.options?.find(level => level.masterId === id));\n\n const oldAudiences = props.preselections?.filter(level => !selectedAudiences.includes(level.masterId));\n\n let onSaveCounter = 0;\n\n if (newAudiences?.length)\n onSaveCounter++;\n\n if (oldAudiences?.length)\n onSaveCounter++;\n\n if (hasChangedBulkState())\n onSaveCounter++;\n\n setCounter(onSaveCounter);\n\n props.saveChanges(\n newAudiences,\n oldAudiences,\n bulkPreferencesState,\n onSuccess,\n () => {\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n setShowSpinner(false);\n }\n );\n }\n\n function onSelectLevel(audience: PresentationAudience): void {\n const newSelections = ArrayHelper.addOrRemoveImmutable(selectedAudiences, audience.masterId);\n setSelectedAudiences(newSelections);\n }\n\n function onToggleSelectAll(): void {\n const newBulkState = OnboardingHelper.getNextBulkState(bulkPreferencesState, 'audiences');\n\n setBulkPreferencesState(newBulkState);\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(newBulkState);\n\n if (hasBulkSelectedLevels)\n setSelectedAudiences([]);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <form className='p-3'>\n <div className='position-relative'>\n <ul className={`d-flex flex-wrap justify-content-center mx-auto mb-0 ps-0 py-3 ${styles.audienceList}`}>\n {props.options.map(option => (\n <AudienceItem\n key={option.masterId}\n audience={option}\n highlight={selectedAudiences.includes(option.masterId)}\n setAudience={onSelectLevel}\n extraClasses='h4 py-1 px-3 mx-1 mb-1'\n isDisabled={hasBulkSelectedLevels}\n />\n ))}\n </ul>\n </div>\n\n <div className={`mx-auto ${styles.imageContainer}`}>\n <img\n className='img-fluid'\n src={props.imageUrl}\n alt=''\n role='presentation'\n />\n </div>\n\n <OnboardingFooter justify={props.backButtonAppLink ? 'between' : 'end'}>\n <div>\n {!!props.backButtonAppLink && (\n <AppLink appLink={props.backButtonAppLink} className='btn btn-outline-dark'>\n <Text phrase='back' />\n </AppLink>\n )}\n </div>\n\n <div className='d-flex align-items-center justify-content-end'>\n <div className='d-flex me-3'>\n <p onClick={onToggleSelectAll} className='me-2 mb-0 fw-bold'>\n <Text phrase='allLevels' />\n </p>\n <ToggleSwitch\n onClick={onToggleSelectAll}\n on={hasBulkSelectedLevels}\n hideOutline\n />\n </div>\n\n <SpinnerButton\n variant='dark'\n disabled={!isValid()}\n onClick={onSave}\n showSpinner={showSpinner}\n >\n <Text phrase={props.isOnboarding ? 'next' : 'save'} />\n </SpinnerButton>\n </div>\n </OnboardingFooter>\n </form>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { PartialAudiences } from 'libs/shared/apps/subjects/components/audience-item';\n\nexport function PartialAudiencePreferences(): JSX.Element {\n return (\n <div className='p-3'>\n <div className='w-100 mx-auto py-3'>\n <PartialAudiences align='center' />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/AudiencePreferences';\nimport { PartialAudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { PreferencesLayout } from 'apps/settings/components/preferences/PreferencesLayout';\n\nconst namespace = 'settings.audiencePreferences';\n\nexport function AudiencePreferencesView(): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const availablePresentations = Flight.useBasicFetch<Presentation[]>(PreferenceRequests.availablePresentations());\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(PreferenceRequests.allLevelPreferences());\n const preselections = Flight.useBasicFetch<PresentationAudience[]>(\n PreferenceRequests.myLevelPreferences()\n );\n\n const {\n bulkOnboardingPreferencesState, isLoadingSettings, updateSetting\n } = useSettings(LocationContext.PreferencesSettings);\n\n const canAccess = !!audiences.data?.length && AudienceHelper.shouldShowAudiences(audiences.data);\n\n // Redirect away if the user's presentation does not have more than 1 audience\n React.useEffect(() => {\n if (!audiences.hasCompleted)\n return;\n\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TOPIC_PREFERENCES\n }, { replace: true });\n }\n }, [audiences.hasCompleted]);\n\n const dispatch = useDispatch();\n\n function onSave(\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ): void {\n if (bulkState !== bulkOnboardingPreferencesState) {\n const newSetting = {\n name: SettingName.BulkOnboardingPreferencesState,\n value: bulkState,\n kind: SettingKind.Permanent\n };\n\n updateSetting(\n currentUser.data.id,\n newSetting,\n onSuccess,\n onError\n );\n }\n\n if (newAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.followLevels(newAudiences, onSuccess, onError));\n\n if (oldAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.unfollowLevels(oldAudiences, onSuccess, onError));\n }\n\n const dataLoaded = (\n !!audiences.hasCompleted &&\n !!preselections.hasCompleted &&\n !isLoadingSettings\n );\n\n return (\n <PreferencesLayout\n availablePresentations={availablePresentations.data}\n audiences={audiences.data}\n >\n <p className='mt-3'><Text namespace={namespace} phrase='info' /></p>\n\n {(dataLoaded && canAccess) ? (\n <AudiencePreferences\n options={audiences.data}\n preselections={preselections.data}\n bulkPreferencesState={bulkOnboardingPreferencesState}\n saveChanges={onSave}\n imageUrl={ImageUrls.Onboarding.YEAR_GROUPS}\n />\n ) : <PartialAudiencePreferences />}\n </PreferencesLayout>\n );\n}"],"names":["AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","className","onClick","FunctionHelper","role","name","split","map","s","charAt","toUpperCase","substring","join","defaultProps","useOnSaveAll","onDone","counter","setCounter","val","PartialAudiences","width","height","count","align","justifyClass","Array","fill","item","i","key","style","namespace","AudiencePreferences","selectedAudiences","setSelectedAudiences","showSpinner","setShowSpinner","bulkPreferencesState","setBulkPreferencesState","hasBulkSelectedLevels","OnboardingHelper","alerts","preselections","length","preselectedIds","masterId","ArrayHelper","isOnboarding","success","LanguageService","nextAppLink","onSuccess","hasChangedAudiences","p","sort","toString","hasChangedBulkState","isValid","hasChanged","onSelectLevel","newSelections","onToggleSelectAll","newBulkState","value","options","option","includes","src","imageUrl","alt","OnboardingFooter","justify","backButtonAppLink","AppLink","appLink","Text","phrase","ToggleSwitch","on","hideOutline","SpinnerButton","variant","disabled","newAudiences","filter","id","find","level","oldAudiences","onSaveCounter","saveChanges","error","PartialAudiencePreferences","AudiencePreferencesView","currentUser","UserRequests","availablePresentations","PreferenceRequests","audiences","useSettings","bulkOnboardingPreferencesState","isLoadingSettings","updateSetting","canAccess","data","AudienceHelper","hasCompleted","application","action","replace","dispatch","dataLoaded","PreferencesLayout","bulkState","onError","newSetting","SettingName","kind","SettingKind","ImageUrls"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/7715-634be84dc5-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/audience-item.scss","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/AudienceItem.tsx","file:///app/packages/libs/shared/src/hooks/UseOnSaveAll.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/audience-item/partial-loading/PartialAudiences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/audience-preferences.scss","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/AudiencePreferences.tsx","file:///app/packages/libs/shared/src/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences.tsx","file:///app/packages/projects/lite/src/apps/settings/views/preferences/audiences/AudiencePreferencesView.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"disabled\":\"pERi4\",\"disabledHighlighted\":\"AxyWm\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-item.scss';\n\nfunction lowerCaseToTitleCase(str: string): string {\n return str.split(' ').map((s: string) => s.charAt(0).toUpperCase() + s.substring(1)).join(' ');\n}\n\nfunction getColourClass(highlight: boolean, isDisabled: boolean): string {\n if (highlight) return isDisabled ? `${styles.disabledHighlighted} text-light` : 'bg-blue text-light';\n if (isDisabled) return `${styles.disabled} text-secondary`;\n return 'bg-light';\n}\n\ninterface AudienceItemProps {\n audience: PresentationAudience;\n highlight: boolean;\n setAudience?: (audience: PresentationAudience, highlight: boolean) => void;\n isDisabled?: boolean;\n extraClasses?: string;\n}\n\nAudienceItem.defaultProps = {\n extraClasses: ''\n};\n\nexport function AudienceItem(props: AudienceItemProps): React.ReactElement {\n const { audience, highlight, setAudience, isDisabled, extraClasses } = props;\n\n const colourClass = getColourClass(highlight, isDisabled);\n const cursorClass = isDisabled ? 'cursor-default' : 'cursor-pointer';\n const className = `rounded-pill d-inline-block me-1 user-select-none ${cursorClass} ${colourClass} ${extraClasses}`;\n\n const onClick = () => {\n if (isDisabled || !FunctionHelper.isFunction(setAudience))\n return;\n\n setAudience(audience, !highlight);\n };\n\n return (\n <span\n className={className}\n onClick={onClick}\n role='checkbox'\n aria-checked={highlight}\n >\n {lowerCaseToTitleCase(audience.name)}\n </span>\n );\n}","import React from 'react';\n\ntype ReturnValue = [\n () => void,\n React.Dispatch<React.SetStateAction<number>>\n];\n\n/**\n * This hook solves a problem where you want to trigger an \"onSuccess\" callback function\n * only after the last of multiple API calls have completed.\n * \n * Example: the user clicks a \"Save\" button, which triggers 2 API calls. You have a callback function\n * that you want to run after both API calls have succeeded. This hook will help you do that of you pass it\n * the callback function and set the counter to 2.\n */\nexport const useOnSaveAll = (onDone: () => void): ReturnValue => {\n const [ counter, setCounter ] = React.useState(1);\n\n function onSave(): void {\n setCounter(val => val - 1);\n }\n\n React.useEffect(() => {\n if (counter > 0)\n return;\n \n onDone();\n }, [counter]);\n\n return [ onSave, setCounter ];\n};","import * as React from 'react';\n\ninterface PartialAudiencesProps {\n count?: number;\n width?: number;\n height?: number;\n align?: 'left' | 'center';\n}\n\nexport function PartialAudiences({ width = 90, height = 35, count = 5, align = 'left' }: PartialAudiencesProps): JSX.Element {\n const justifyClass = align === 'center' ? 'justify-content-center' : 'justify-content-start';\n\n return (\n <ul className={`d-flex flex-wrap ps-0 m-0 ${justifyClass}`}>\n {Array(count).fill(null).map((item, i) => (\n <li\n key={i}\n className='partial-loading-background mx-1 mb-1 rounded-pill list-unstyled'\n style={{ height: `${height}px`, width: `${width}px` }}\n />\n ))}\n </ul>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audienceList\":\"gGUpk\",\"imageContainer\":\"mLKC0\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AudienceItem } from 'libs/shared/apps/subjects/components/audience-item';\nimport { OnboardingFooter } from 'libs/shared/apps/subjects/components/preferences/footer/OnboardingFooter';\nimport { OnboardingHelper } from 'libs/shared/apps/subjects/utils/OnboardingHelper';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { ToggleSwitch } from 'libs/shared/components/toggle-switch/ToggleSwitch';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useOnSaveAll } from 'libs/shared/hooks/UseOnSaveAll';\nimport { PresentationAudience } from 'libs/shared/interfaces';\n\nimport styles from './audience-preferences.scss';\n\nconst namespace = 'subjects.audiencePreferences';\n\ninterface AudiencePreferencesProps {\n options: PresentationAudience[];\n preselections: PresentationAudience[];\n bulkPreferencesState: BulkOnboardingPreferencesState;\n saveChanges: (\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ) => void;\n \n imageUrl: string;\n\n isOnboarding?: boolean;\n backButtonAppLink?: Core.AppLink;\n nextAppLink?: Core.AppLink;\n}\n\nexport function AudiencePreferences(props: AudiencePreferencesProps): JSX.Element {\n const [ selectedAudiences, setSelectedAudiences ] = React.useState<string[]>([]);\n const [ showSpinner, setShowSpinner ] = React.useState<boolean>(false);\n\n const [ bulkPreferencesState, setBulkPreferencesState ] = React.useState<BulkOnboardingPreferencesState>(\n props.bulkPreferencesState\n );\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(bulkPreferencesState);\n\n const alerts = useAlerts();\n\n /**\n * Set initial selections\n */\n React.useEffect(() => {\n if (!props.preselections?.length) {\n setSelectedAudiences([]);\n return;\n }\n\n const preselectedIds = props.preselections.map(audience => audience.masterId);\n setSelectedAudiences(ArrayHelper.uniq([ ...selectedAudiences, ...preselectedIds ]));\n }, []);\n\n const [ onSuccess, setCounter ] = useOnSaveAll(() => {\n setShowSpinner(false);\n\n if (!props.isOnboarding)\n alerts.success(LanguageService.getPhrase(namespace, 'success'));\n\n if (props.nextAppLink)\n Core.AppLinkHelper.trigger(props.nextAppLink);\n });\n\n function hasChangedAudiences(selectedAudiences: string[]): boolean {\n if (!props.preselections)\n return false;\n\n const preselectedIds = props.preselections.map(p => p.masterId);\n return preselectedIds.sort().toString() !== selectedAudiences.sort().toString();\n }\n\n function hasChangedBulkState(): boolean {\n return props.bulkPreferencesState !== bulkPreferencesState;\n }\n\n function isValid(): boolean {\n if (!selectedAudiences.length && !hasBulkSelectedLevels)\n return false;\n\n const hasChanged = hasChangedBulkState() || hasChangedAudiences(selectedAudiences);\n\n if (!props.isOnboarding && !hasChanged)\n return false;\n\n return true;\n }\n\n function onSave(): void {\n if (!isValid())\n return;\n\n // If they have selected the bulk option, we do not want to clear their preferences or save any changes.\n if (!hasChangedAudiences(selectedAudiences) && !hasChangedBulkState()) {\n if (props.nextAppLink) {\n Core.AppLinkHelper.trigger(props.nextAppLink);\n }\n\n return;\n }\n\n setShowSpinner(true);\n\n const newAudiences = selectedAudiences\n .filter(id => !props.preselections?.find(level => level.masterId === id))\n .map(id => props.options?.find(level => level.masterId === id));\n\n const oldAudiences = props.preselections?.filter(level => !selectedAudiences.includes(level.masterId));\n\n let onSaveCounter = 0;\n\n if (newAudiences?.length)\n onSaveCounter++;\n\n if (oldAudiences?.length)\n onSaveCounter++;\n\n if (hasChangedBulkState())\n onSaveCounter++;\n\n setCounter(onSaveCounter);\n\n props.saveChanges(\n newAudiences,\n oldAudiences,\n bulkPreferencesState,\n onSuccess,\n () => {\n alerts.error(LanguageService.getPhrase(namespace, 'error'));\n setShowSpinner(false);\n }\n );\n }\n\n function onSelectLevel(audience: PresentationAudience): void {\n const newSelections = ArrayHelper.addOrRemoveImmutable(selectedAudiences, audience.masterId);\n setSelectedAudiences(newSelections);\n }\n\n function onToggleSelectAll(): void {\n const newBulkState = OnboardingHelper.getNextBulkState(bulkPreferencesState, 'audiences');\n\n setBulkPreferencesState(newBulkState);\n\n const hasBulkSelectedLevels = OnboardingHelper.hasBulkSelectedLevels(newBulkState);\n\n if (hasBulkSelectedLevels)\n setSelectedAudiences([]);\n }\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <form className='p-3'>\n <div className='position-relative'>\n <ul className={`d-flex flex-wrap justify-content-center mx-auto mb-0 ps-0 py-3 ${styles.audienceList}`}>\n {props.options.map(option => (\n <AudienceItem\n key={option.masterId}\n audience={option}\n highlight={selectedAudiences.includes(option.masterId)}\n setAudience={onSelectLevel}\n extraClasses='h4 py-1 px-3 mx-1 mb-1'\n isDisabled={hasBulkSelectedLevels}\n />\n ))}\n </ul>\n </div>\n\n <div className={`mx-auto ${styles.imageContainer}`}>\n <img\n className='img-fluid'\n src={props.imageUrl}\n alt=''\n role='presentation'\n />\n </div>\n\n <OnboardingFooter justify={props.backButtonAppLink ? 'between' : 'end'}>\n <div>\n {!!props.backButtonAppLink && (\n <AppLink appLink={props.backButtonAppLink} className='btn btn-outline-dark'>\n <Text phrase='back' />\n </AppLink>\n )}\n </div>\n\n <div className='d-flex align-items-center justify-content-end'>\n <div className='d-flex me-3'>\n <p onClick={onToggleSelectAll} className='me-2 mb-0 fw-bold'>\n <Text phrase='allLevels' />\n </p>\n <ToggleSwitch\n onClick={onToggleSelectAll}\n on={hasBulkSelectedLevels}\n hideOutline\n />\n </div>\n\n <SpinnerButton\n variant='dark'\n disabled={!isValid()}\n onClick={onSave}\n showSpinner={showSpinner}\n >\n <Text phrase={props.isOnboarding ? 'next' : 'save'} />\n </SpinnerButton>\n </div>\n </OnboardingFooter>\n </form>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { PartialAudiences } from 'libs/shared/apps/subjects/components/audience-item';\n\nexport function PartialAudiencePreferences(): JSX.Element {\n return (\n <div className='p-3'>\n <div className='w-100 mx-auto py-3'>\n <PartialAudiences align='center' />\n </div>\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { AudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/AudiencePreferences';\nimport { PartialAudiencePreferences } from 'libs/shared/apps/subjects/components/preferences/audience-preferences/partial-loading/PartialAudiencePreferences';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { BulkOnboardingPreferencesState } from 'libs/shared/enums/BulkOnboardingPreferencesState';\nimport { SettingKind } from 'libs/shared/enums/SettingKind';\nimport { SettingName } from 'libs/shared/enums/SettingName';\nimport { PreferenceRequests } from 'libs/shared/flight-requests/PreferenceRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { CurrentUser, Presentation, PresentationAudience } from 'libs/shared/interfaces';\nimport { AudienceHelper } from 'libs/shared/utils/audience-helper/AudienceHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { PreferencesLayout } from 'apps/settings/components/preferences/PreferencesLayout';\n\nconst namespace = 'settings.audiencePreferences';\n\nexport function AudiencePreferencesView(): JSX.Element {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const availablePresentations = Flight.useBasicFetch<Presentation[]>(PreferenceRequests.availablePresentations());\n\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(PreferenceRequests.allLevelPreferences());\n const preselections = Flight.useBasicFetch<PresentationAudience[]>(\n PreferenceRequests.myLevelPreferences()\n );\n\n const {\n bulkOnboardingPreferencesState, isLoadingSettings, updateSetting\n } = useSettings(LocationContext.PreferencesSettings);\n\n const canAccess = !!audiences.data?.length && AudienceHelper.shouldShowAudiences(audiences.data);\n\n // Redirect away if the user's presentation does not have more than 1 audience\n React.useEffect(() => {\n if (!audiences.hasCompleted)\n return;\n\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.TOPIC_PREFERENCES\n }, { replace: true });\n }\n }, [audiences.hasCompleted]);\n\n const dispatch = useDispatch();\n\n function onSave(\n newAudiences: PresentationAudience[],\n oldAudiences: PresentationAudience[],\n bulkState: BulkOnboardingPreferencesState,\n onSuccess: () => void,\n onError: () => void\n ): void {\n if (bulkState !== bulkOnboardingPreferencesState) {\n const newSetting = {\n name: SettingName.BulkOnboardingPreferencesState,\n value: bulkState,\n kind: SettingKind.Permanent\n };\n\n updateSetting(\n currentUser.data.id,\n newSetting,\n onSuccess,\n onError\n );\n }\n\n if (newAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.followLevels(newAudiences, onSuccess, onError));\n\n if (oldAudiences?.length)\n Flight.fetch(dispatch, PreferenceRequests.unfollowLevels(oldAudiences, onSuccess, onError));\n }\n\n const dataLoaded = (\n !!audiences.hasCompleted &&\n !!preselections.hasCompleted &&\n !isLoadingSettings\n );\n\n return (\n <PreferencesLayout\n availablePresentations={availablePresentations.data}\n audiences={audiences.data}\n >\n <p className='mt-3'><Text namespace={namespace} phrase='info' /></p>\n\n {(dataLoaded && canAccess) ? (\n <AudiencePreferences\n options={audiences.data}\n preselections={preselections.data}\n bulkPreferencesState={bulkOnboardingPreferencesState}\n saveChanges={onSave}\n imageUrl={ImageUrls.Onboarding.YEAR_GROUPS}\n />\n ) : <PartialAudiencePreferences />}\n </PreferencesLayout>\n );\n}"],"names":["AudienceItem","props","audience","highlight","setAudience","isDisabled","extraClasses","colourClass","getColourClass","className","onClick","FunctionHelper","role","name","split","map","s","charAt","toUpperCase","substring","join","defaultProps","useOnSaveAll","onDone","counter","setCounter","val","PartialAudiences","width","height","count","align","justifyClass","Array","fill","item","i","key","style","namespace","AudiencePreferences","selectedAudiences","setSelectedAudiences","showSpinner","setShowSpinner","bulkPreferencesState","setBulkPreferencesState","hasBulkSelectedLevels","OnboardingHelper","alerts","preselections","length","preselectedIds","masterId","ArrayHelper","isOnboarding","success","LanguageService","nextAppLink","onSuccess","hasChangedAudiences","p","sort","toString","hasChangedBulkState","isValid","hasChanged","onSelectLevel","newSelections","onToggleSelectAll","newBulkState","value","options","option","includes","src","imageUrl","alt","OnboardingFooter","justify","backButtonAppLink","AppLink","appLink","Text","phrase","ToggleSwitch","on","hideOutline","SpinnerButton","variant","disabled","newAudiences","filter","id","find","level","oldAudiences","onSaveCounter","saveChanges","error","PartialAudiencePreferences","AudiencePreferencesView","currentUser","UserRequests","availablePresentations","PreferenceRequests","audiences","useSettings","bulkOnboardingPreferencesState","isLoadingSettings","updateSetting","canAccess","data","AudienceHelper","hasCompleted","application","action","replace","dispatch","dataLoaded","PreferencesLayout","bulkState","onError","newSetting","SettingName","kind","SettingKind","ImageUrls"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[7855],{75314:(e,t,n)=>{n.d(t,{j:()=>w});var a=n(32735),r=n(80247),o=n(23481),i=n(91967),c=n(76177),l=n(4594),s=n(45778),m=n(60376),u=n(36511),d=n(35223);const p={removeRecipient:"mCbMC",recipientItem:"kdcb0",showSpinner:"xH6Mu",avatarContainer:"Zcpg3",recipientDetails:"v5EmV",recipientDetailsWithRemoveButton:"_V928"};var v="shared.classroomGroupRecipientItemMetadata";function g(e){var t;return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(m.f,{svgName:d.vn.Group,variant:(0,u.I)(null===(t=e.classroomGroup.metadata)||void 0===t?void 0:t.colour)})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.classroomGroup.name),a.createElement("p",{className:"text-secondary m-0"},function(e){var t,n,a,r=null!==(n=null===(t=e.users)||void 0===t?void 0:t.count)&&void 0!==n?n:0,i=null===(a=e.classroom)||void 0===a?void 0:a.name;return i?o.T.getPhrase(v,"subheading",{classroomName:i,smartCount:r}):""}(e.classroomGroup))))}var f="shared.classroomRecipientItemMetadata";function E(e){return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(m.f,{svgName:d.vn.Classrooms,variant:"teal"})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.classroom.name),a.createElement("p",{className:"text-secondary m-0"},(i=(null===(n=(t=e.classroom).users)||void 0===n?void 0:n.count)||(null===(r=t.enrolments)||void 0===r?void 0:r.count),Number.isInteger(i)?o.T.getPhrase(f,"subheading",{smartCount:i}):""))));var t,n,r,i}var h=n(20789),y=n(76881),C=n(86613),x=n(64818),b=o.T.encloseNamespace("shared.userRecipientItemMetadata");function N(e){var t;return a.createElement(a.Fragment,null,a.createElement("div",{className:"".concat(p.avatarContainer," d-inline-block")},a.createElement(h.q,{imageUrl:null===(t=e.user.avatar)||void 0===t?void 0:t.url,imageCdnUrl:e.imageCdnUrl,initials:x.l.getInitials(e.user.name,e.user.surname)})),a.createElement("div",{className:e.detailsClassName},a.createElement("h4",{className:"font-size-normal fw-normal m-0"},e.showDisplayName?x.l.getDisplayName(e.user):x.l.getFullName(e.user)),a.createElement("p",{className:"text-secondary m-0"},e.getSubText?e.getSubText(e.user):function(e){var t=x.l.getUserType(e),n=x.l.getUserRole(e);if(t===y.Y.Staff)return n===C.i.Admin?b("admin"):b("staff");var a=x.l.getYearGroup(e);return(null==a?void 0:a.name)?a.name:b("student")}(e.user))))}function S(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var k=o.T.encloseNamespace("share.recipientItem");function I(e){switch(e){case l.E.User:return k("removeUser");case l.E.Classroom:return k("removeClassroom");case l.E.ClassroomGroup:return k("removeGroup")}return null}function w(e){var t,n,o=(t=a.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return S(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)?S(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),m=o[0],u=o[1],d="".concat(p.recipientItem," d-flex");m&&(d+=" ".concat(p.showSpinner));var v="".concat(e.removeRecipient?p.recipientDetailsWithRemoveButton:p.recipientDetails," d-inline-block ms-2");return a.createElement("div",{className:d},s.G.isType(e.entity,l.E.User)?a.createElement(N,{user:e.entity,imageCdnUrl:e.imageCdnUrl,detailsClassName:v,showDisplayName:e.showDisplayName,getSubText:e.getSubText}):s.G.isType(e.entity,l.E.Classroom)?a.createElement(E,{classroom:e.entity,detailsClassName:v}):s.G.isType(e.entity,l.E.ClassroomGroup)?a.createElement(g,{classroomGroup:e.entity,detailsClassName:v}):void 0,i.q.isFunction(e.removeRecipient)&&a.createElement("div",{className:"".concat(p.removeRecipient," d-inline-flex justify-content-center align-items-center")},m?a.createElement(r.Z,{as:"div",size:"sm",animation:"border",role:"status"}):a.createElement(c.u,{title:I(e.entity.typeId),spanHack:!0},a.createElement("div",{className:"btn-close cursor-pointer",role:"button","aria-label":"Close",onClick:function(){u(!0),e.removeRecipient(e.entity.id,(function(){return u(!1)}))}}))))}},82872:(e,t,n)=>{n.d(t,{t:()=>k,D:()=>I});var a=n(32735),r=n(91967),o=n(11607),i=n(83914),c=n(4594),l=n(76881),s=n(36511),m=n(45778),u=n(35223),d=n(64818),p=n(80247),v=n(23481);const g={avatar:"srrS3"};function f(e){var t=e.imageUrl,n=e.initials,r={};return t&&(r.backgroundImage="url('".concat(t,"')")),a.createElement("div",{className:g.avatar,style:r},t?a.createElement(a.Fragment,null," "):n)}var E=n(76177);const h={svgContainer:"laVU4",selection:"vEOCt",expander:"d1NHd",iconContainer:"rFH4W",icon:"BarYz",bubble:"HF0E8",spinnerContainer:"iKeXW",remove:"pyzCM",removeBubble:"mgt6Y"};var y=v.T.encloseNamespace("shared.inputSelection");function C(e){var t,n="".concat(h.svgContainer," ").concat(h.icon);return e.typeId===c.E.Classroom?n+=" text-teal":n+=" text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)),n}function x(e){var t,n=function(e){var t;switch(e.typeId){case c.E.Classroom:return"text-teal-hover";case c.E.ClassroomGroup:return"text-".concat((0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour),"-hover")}}(e.selection),r=e.selection.typeId===c.E.Classroom;if(!e.canExpand){if(!e.selection.typeId||e.selection.typeId===c.E.User){var l=e.selection;return a.createElement("div",{className:h.svgContainer},a.createElement(f,{imageUrl:null===(t=l.avatar)||void 0===t?void 0:t.url,initials:d.l.getInitials(e.selection.name,e.selection.surname)}))}return a.createElement(E.u,{title:y(r?"emptyClassroom":"emptyGroup")},a.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},a.createElement(i.x,{className:C(e.selection),svgName:r?u.vn.Classrooms:u.vn.Group})))}return e.hasExpanded?a.createElement("div",{className:"d-flex align-items-center text-white ".concat(h.spinnerContainer," ").concat(h.svgContainer)},a.createElement(p.Z,{as:"div",size:"sm",animation:"border",role:"status"})):a.createElement(a.Fragment,null,a.createElement(o.L,{className:"align-items-center cursor-pointer text-white border border-white rounded-circle ".concat(h.expander," ").concat(n),onClick:e.onClickExpand},a.createElement(i.x,{svgName:u.vn.Plus,className:"d-flex align-items-center ".concat(h.svgContainer)})),a.createElement("div",{className:"align-items-center border border-white bg-white ".concat(h.iconContainer)},a.createElement(i.x,{className:C(e.selection),svgName:r?u.vn.Classrooms:u.vn.Group})))}function b(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],l=!0,s=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return N(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)?N(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 N(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}function S(e){var t;if(!e.typeId)return"dark-blue";switch(e.typeId){case c.E.User:return"number"==typeof e.userType?2===e.userType?"dark-blue":"indigo":e.userType===l.Y.Learner?"dark-blue":"indigo";case c.E.Classroom:return"teal";case c.E.ClassroomGroup:return(0,s.I)(null===(t=e.metadata)||void 0===t?void 0:t.colour)}}function k(e){var t,n,r,l=m.G.isType(e.selection,c.E.Classroom),s=m.G.isType(e.selection,c.E.ClassroomGroup),d=e.onClickExpand&&(l||s),p=!!(null===(t=e.selection.users||e.selection.enrolments)||void 0===t?void 0:t.count),v=!!(null===(r=null===(n=e.selection.users)||void 0===n?void 0:n.data)||void 0===r?void 0:r.length),g=b(a.useState(!1),2),f=g[0],E=g[1],y=b(a.useState(d&&p),2),C=y[0],x=y[1];if(a.useEffect((function(){x(d&&p)}),[d,p]),v){var N=e.selection,k=S(e.selection);return a.createElement("div",{className:"d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-".concat(k," text-").concat(k," ").concat(h.bubble)},N.users.data.map((function(t){return a.createElement(I,{key:"".concat(t.id,":").concat(e.selection.id),selection:t,colourVariant:k,hasStudentExperience:e.hasStudentExperience})})),a.createElement(o.L,{className:"cursor-pointer position-absolute text-".concat(k," ").concat(h.removeBubble),onClick:function(){return e.onClickRemove(e.selection)}},a.createElement(i.x,{svgName:u.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}return a.createElement(I,{selection:e.selection,canExpand:C,hasExpanded:f,onClickExpand:function(){E(!0),e.onClickExpand(e.selection.id)},onClickRemove:e.onClickRemove,colourVariant:S(e.selection),hasStudentExperience:e.hasStudentExperience})}function I(e){var t=e.colourVariant||S(e.selection),n=e.selection.name;return e.selection.typeId===c.E.User&&(n=e.hasStudentExperience?d.l.getDisplayName(e.selection):d.l.getFullName(e.selection)),a.createElement("div",{className:"".concat(h.selection," bg-").concat(t," rounded-pill text-").concat(t," d-flex align-items-center me-1 mt-1 overflow-hidden")},!e.hideExpander&&a.createElement(x,{canExpand:e.canExpand,hasExpanded:e.hasExpanded,onClickExpand:e.onClickExpand,selection:e.selection}),a.createElement("span",{className:"mx-1 text-white text-truncate"},n),r.q.isFunction(e.onClickRemove)&&a.createElement(o.L,{className:"d-flex align-items-center cursor-pointer align-self-stretch text-white ".concat(h.remove),onClick:function(){return e.onClickRemove(e.selection)}},a.createElement(i.x,{svgName:u.vn.Close,className:"d-flex align-items-center ".concat(h.svgContainer)})))}},7855:(e,t,n)=>{n.d(t,{d:()=>g,R:()=>f});var a=n(32735),r=n(23481),o=n(75896),i=n(75314),c=n(2136),l=n(83914),s=n(89589),m=n(97481),u=n(35223),d=n(82872);const p={container:"Dc3kX",suggestionsContainerOpen:"c5t3e",selectionContainer:"kFjoN",sectionContainer:"mLrE3"};var v="shared.tokenizedTypeahead",g=10;function f(e){var t;return a.createElement("div",{className:"form-control h-auto d-flex align-items-top position-relative ".concat(e.hideIcon?"":"py-1 px-0"," ").concat(e.className)},!e.hideIcon&&a.createElement(l.x,{className:"svg-container m-1",svgName:u.vn.Search}),a.createElement("div",{className:"".concat(p.selectionContainer," d-flex flex-wrap align-items-center mt-n1")},e.selections.map((function(t){return e.getInputTokenComponent?e.getInputTokenComponent(t):a.createElement(d.t,{key:t.id,selection:t,onClickRemove:e.removeSelection,onClickExpand:e.fetchSelectionMembers,hasStudentExperience:e.hasStudentExperience})})),a.createElement(c.E,Object.assign({},e,{onBackspace:function(){e.selections.length&&e.removeSelection(o.m.last(e.selections))},recentSearchHeading:e.recentSearchHeading||r.T.getPhrase(v,"recentSearchHeading"),placeholder:(null===(t=e.selections)||void 0===t?void 0:t.length)?" ":e.placeholder,searchIconPlacement:!1,clearQueryOnSelect:!0,getSuggestionComponent:function(t){return e.getSuggestionComponent?e.getSuggestionComponent(t):a.createElement(i.j,{entity:t,imageCdnUrl:e.imageCdnUrl,showDisplayName:e.hasStudentExperience})},getEmptyStateComponent:function(t){return a.createElement(s.x,{query:t,imageUrl:e.emptyStateImageUrl})},getErrorStateComponent:function(t){return a.createElement(m.d,{imageUrl:e.errorStateImageUrl,onClickTryAgain:t})},theme:{container:p.container,suggestionsContainerOpen:"bg-white py-1 rounded border mt-1 ".concat(p.suggestionsContainerOpen),sectionContainer:"border-bottom py-1 ".concat(p.sectionContainer)},sectionTitleClassName:"ps-2",renderSuggestionsOnInputFocus:e.renderSuggestionsOnInputFocus,onSuggestionDependencies:[e.selections]}))),!!e.sharePermissionsDescription&&a.createElement("span",{className:"px-2 text-secondary text-nowrap"},e.sharePermissionsDescription))}f.defaultProps={renderSuggestionsOnInputFocus:!0}},89589:(e,t,n)=>{n.d(t,{x:()=>l});var a=n(32735),r=n(83345),o=n(28329);const i={emptyState:"bKTf0"};var c="shared.typeaheadEmptyState";function l(e){var t=e.query,n=void 0===t?"":t,l=e.imageUrl,s=(0,o.N)(n,300);return a.createElement("div",{className:"d-flex flex-column align-items-center text-center",onClick:function(e){e.stopPropagation()}},a.createElement("img",{alt:"",role:"presentation",src:l,className:"pb-2 ".concat(i.emptyState)}),a.createElement("h2",{className:"h6"},a.createElement(r.x,{namespace:c,phrase:"noResults",options:{query:s,smartCount:s.length}})))}},97481:(e,t,n)=>{n.d(t,{d:()=>l});var a=n(32735),r=n(11607),o=n(83345);const i={emptyState:"k5mEG"};var c="shared.typeaheadErrorState";function l(e){return a.createElement("div",{className:"d-flex flex-column align-items-center text-center",onClick:function(e){e.stopPropagation()}},a.createElement("img",{alt:"",role:"presentation",src:e.imageUrl,className:"pb-2 ".concat(i.emptyState)}),a.createElement("h2",{className:"h6"},a.createElement(o.x,{namespace:c,phrase:"error"})),a.createElement(r.L,{onClick:function(t){t.stopPropagation(),e.onClickTryAgain()},className:"btn btn-link info-link p-0"},a.createElement(o.x,{namespace:c,phrase:"tryAgain"})))}},36511:(e,t,n)=>{n.d(t,{I:()=>r});var a=n(40424);function r(e){switch(e){case a.R.Pink:return"pink";case a.R.Orange:return"orange";case a.R.Green:return"green";case a.R.Blue:return"blue";case a.R.Purple:return"purple";case a.R.Indigo:return"indigo";default:return"pink"}}}}]);
|
|
2
|
+
//# sourceMappingURL=7855-04bc8e52e3-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/7855-04bc8e52e3-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/classroom-group-recipient-item-metadata/ClassroomGroupRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/classroom-recipient-item-metadata/ClassroomRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///app/packages/libs/shared/src/apps/share/components/recipient-item/RecipientItem.tsx","file:///app/packages/libs/shared/src/apps/share/components/white-avatar/white-avatar.scss","file:///app/packages/libs/shared/src/apps/share/components/white-avatar/WhiteAvatar.tsx","file:///app/packages/libs/shared/src/apps/share/components/tokenized-typeahead/input-selection.scss","file:///app/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelectionExpander.tsx","file:///app/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelection.tsx","file:///app/packages/libs/shared/src/apps/share/components/tokenized-typeahead/tokenized-typeahead.scss","file:///app/packages/libs/shared/src/apps/share/components/tokenized-typeahead/TokenizedTypeahead.tsx","file:///app/packages/libs/shared/src/components/typeahead-empty-state/typeahead-empty-state.scss","file:///app/packages/libs/shared/src/components/typeahead-empty-state/TypeaheadEmptyState.tsx","file:///app/packages/libs/shared/src/components/typeahead-error-state/typeahead-error-state.scss","file:///app/packages/libs/shared/src/components/typeahead-error-state/TypeaheadErrorState.tsx","file:///app/packages/libs/shared/src/utils/GroupHelper.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.classroomGroupRecipientItemMetadata';\n\nfunction getSubheading(classroomGroup: ClassroomGroup): string {\n const userCount = classroomGroup.users?.count ?? 0;\n const classroomName = classroomGroup.classroom?.name;\n\n if (classroomName)\n return LanguageService.getPhrase(namespace, 'subheading', { classroomName, smartCount: userCount });\n\n return '';\n}\n\ninterface ClassroomGroupRecipientItemMetadataProps {\n classroomGroup: ClassroomGroup;\n detailsClassName: string;\n}\n\nexport function ClassroomGroupRecipientItemMetadata(props: ClassroomGroupRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(props.classroomGroup.metadata?.colour)}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.classroomGroup.name}\n </h4>\n <p className='text-secondary m-0'>{getSubheading(props.classroomGroup)}</p>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.classroomRecipientItemMetadata';\n\nfunction getSubheading(classroom: Classroom): string {\n // Getting count from users is a temporary fix until enrolments count is working in Search api\n const userCount = classroom.users?.count || classroom.enrolments?.count;\n\n if (Number.isInteger(userCount))\n return LanguageService.getPhrase(namespace, 'subheading', { smartCount: userCount });\n\n return '';\n}\n\ninterface ClassroomRecipientItemMetadataProps {\n classroom: Classroom;\n detailsClassName: string;\n}\n\nexport function ClassroomRecipientItemMetadata(props: ClassroomRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.classroom.name}\n </h4>\n <p className='text-secondary m-0'>{getSubheading(props.classroom)}</p>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n\n if (yearGroup?.name)\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\ninterface UserRecipientItemMetadataProps {\n user: User;\n imageCdnUrl: string;\n detailsClassName: string;\n showDisplayName: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <Avatar\n imageUrl={props.user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.user.name, props.user.surname)}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.showDisplayName\n ? UserHelper.getDisplayName(props.user)\n : UserHelper.getFullName(props.user)\n }\n </h4>\n <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>\n </div>\n </>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { ClassroomGroupRecipientItemMetadata } from './classroom-group-recipient-item-metadata/ClassroomGroupRecipientItemMetadata';\nimport { ClassroomRecipientItemMetadata } from './classroom-recipient-item-metadata/ClassroomRecipientItemMetadata';\nimport { UserRecipientItemMetadata } from './user-recipient-item-metadata/UserRecipientItemMetadata';\n\nimport styles from './recipient-item.scss';\n\nconst namespace = 'share.recipientItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getRemovePhrase(type: MasterType): string {\n switch (type) {\n case (MasterType.User):\n return getPhrase('removeUser');\n case (MasterType.Classroom):\n return getPhrase('removeClassroom');\n case (MasterType.ClassroomGroup):\n return getPhrase('removeGroup');\n }\n return null;\n}\n\ninterface RecipientItemProps<T extends BaseObject = BaseObject> {\n entity: T;\n imageCdnUrl: string;\n showDisplayName: boolean;\n removeRecipient?: (id: string, onError?: () => void) => void;\n getSubText?: (entity: T) => string;\n}\n\nexport function RecipientItem<T extends BaseObject = BaseObject>(props: RecipientItemProps<T>): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n let className = `${styles.recipientItem} d-flex`;\n\n if (showSpinner)\n className += ` ${styles.showSpinner}`;\n\n const detailsClassName = `${props.removeRecipient\n ? styles.recipientDetailsWithRemoveButton\n : styles.recipientDetails} d-inline-block ms-2`;\n\n function removeRecipient(): void {\n setShowSpinner(true);\n props.removeRecipient(props.entity.id, () => setShowSpinner(false));\n }\n\n return (\n <div className={className}>\n {(() => {\n if (MasterTypeHelper.isType<User>(props.entity, MasterType.User)) {\n return (\n <UserRecipientItemMetadata\n user={props.entity}\n imageCdnUrl={props.imageCdnUrl}\n detailsClassName={detailsClassName}\n showDisplayName={props.showDisplayName}\n getSubText={props.getSubText}\n />\n );\n }\n\n if (MasterTypeHelper.isType<Classroom>(props.entity, MasterType.Classroom)) {\n return (\n <ClassroomRecipientItemMetadata\n classroom={props.entity}\n detailsClassName={detailsClassName}\n />\n );\n }\n\n if (MasterTypeHelper.isType<ClassroomGroup>(props.entity, MasterType.ClassroomGroup)) {\n return (\n <ClassroomGroupRecipientItemMetadata\n classroomGroup={props.entity}\n detailsClassName={detailsClassName}\n />\n );\n }\n })()}\n\n {FunctionHelper.isFunction(props.removeRecipient) && (\n <div className={`${styles.removeRecipient} d-inline-flex justify-content-center align-items-center`}>\n {showSpinner\n ? <Spinner as='div' size='sm' animation='border' role='status' />\n : (\n <Tooltip title={getRemovePhrase(props.entity.typeId)} spanHack>\n <div\n className='btn-close cursor-pointer'\n role='button'\n aria-label='Close'\n onClick={removeRecipient}\n >\n </div>\n </Tooltip>\n )\n }\n </div>\n )}\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"srrS3\"};","import React from 'react';\n\nimport styles from './white-avatar.scss';\n\ninterface WhiteAvatarProps {\n initials: string;\n imageUrl?: string;\n}\n\nexport function WhiteAvatar(props: WhiteAvatarProps): React.ReactElement {\n const { imageUrl, initials } = props;\n\n const style: React.CSSProperties = {};\n\n if (imageUrl)\n style.backgroundImage = `url('${imageUrl}')`;\n\n return (\n <div className={styles.avatar} style={style}>\n {imageUrl ? <> </> : initials}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"svgContainer\":\"laVU4\",\"selection\":\"vEOCt\",\"expander\":\"d1NHd\",\"iconContainer\":\"rFH4W\",\"icon\":\"BarYz\",\"bubble\":\"HF0E8\",\"spinnerContainer\":\"iKeXW\",\"remove\":\"pyzCM\",\"removeBubble\":\"mgt6Y\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WhiteAvatar } from 'libs/shared/apps/share/components/white-avatar/WhiteAvatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './input-selection.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.inputSelection');\n\nfunction mapEntityTypeToForegroundColor(entity: BaseObject): string {\n switch (entity.typeId) {\n case MasterType.Classroom: {\n return 'text-teal-hover';\n }\n\n case MasterType.ClassroomGroup: {\n return `text-${mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour)}-hover`;\n }\n }\n}\n\nfunction getColouredIconClass(selection: Classroom | ClassroomGroup): string {\n let iconClass = `${styles.svgContainer} ${styles.icon}`;\n\n if (selection.typeId === MasterType.Classroom)\n iconClass += ' text-teal';\n else\n iconClass += ` text-${mapColourToBsVariant((selection as ClassroomGroup).metadata?.colour)}`;\n\n return iconClass;\n}\n\ninterface InputSelectionExpanderProps {\n canExpand: boolean;\n hasExpanded: boolean;\n selection: BaseObject;\n onClickExpand?: () => void;\n}\n\nexport function InputSelectionExpander(props: InputSelectionExpanderProps): JSX.Element {\n const colourClass = mapEntityTypeToForegroundColor(props.selection);\n\n const isClassroom = props.selection.typeId === MasterType.Classroom;\n\n if (!props.canExpand) {\n if (!props.selection.typeId || props.selection.typeId === MasterType.User) {\n const user = props.selection as User;\n\n return (\n <div className={styles.svgContainer}>\n <WhiteAvatar\n imageUrl={user.avatar?.url}\n initials={UserHelper.getInitials(props.selection.name, (props.selection as User).surname)}\n />\n </div>\n );\n }\n\n return (\n <Tooltip title={getPhrase(isClassroom ? 'emptyClassroom' : 'emptyGroup')}>\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </Tooltip>\n );\n }\n\n if (!props.hasExpanded) {\n return (\n <>\n {/* Visible on hover */}\n <DivButton\n className={`align-items-center cursor-pointer text-white border border-white rounded-circle ${styles.expander} ${colourClass}`}\n onClick={props.onClickExpand}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n\n {/* Visible when not hovering */}\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </>\n );\n }\n\n return (\n <div className={`d-flex align-items-center text-white ${styles.spinnerContainer} ${styles.svgContainer}`}>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n );\n}","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InputSelectionExpander } from './InputSelectionExpander';\n\nimport styles from './input-selection.scss';\n\n/**\n * TODO: This entire file needs to be refactored to work\n * better with non standard entities. ATM it's also being used\n * in the invite a colleague UI for trials. - Sha\n */\ninterface OtherEntity {\n id: never;\n typeId: never;\n name: string;\n}\n\ntype Entity = Classroom | ClassroomGroup | User | OtherEntity;\n\nfunction mapEntityTypeToBsVariant(entity: Entity): ButtonProps['variant'] {\n if (!entity.typeId)\n return 'dark-blue';\n\n switch (entity.typeId) {\n case MasterType.User: {\n // TODO: Delete this once https://clickview.atlassian.net/browse/INBOX-2151 is addressed\n if (typeof(entity as User).userType === 'number')\n return ((entity as User).userType as any) === 2 ? 'dark-blue' : 'indigo';\n\n if ((entity as User).userType === UserGroup.Learner)\n return 'dark-blue';\n\n return 'indigo';\n }\n\n case MasterType.Classroom: {\n return 'teal';\n }\n\n case MasterType.ClassroomGroup: {\n return mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour);\n }\n }\n}\n\ninterface InputSelectionProps {\n selection: Entity;\n onClickRemove?: (selection: Entity) => void;\n onClickExpand?: (id: string) => void;\n hasStudentExperience?: boolean;\n}\n\nexport function InputSelection(props: InputSelectionProps): JSX.Element {\n const isClassroom = MasterTypeHelper.isType(props.selection, MasterType.Classroom);\n const isClassroomGroup = MasterTypeHelper.isType(props.selection, MasterType.ClassroomGroup);\n const isExpandable = props.onClickExpand && (isClassroom || isClassroomGroup);\n\n /**\n * We only know that there are no members if props.selections.users.count exists\n * and is 0 as it is set to 0 in <MainShare /> after fetching the users.\n */\n const hasMembers = !!(\n (props.selection as ClassroomGroup).users ||\n (props.selection as Classroom).enrolments\n )?.count;\n const hasFetchedMembers = !!(props.selection as Classroom | ClassroomGroup).users?.data?.length;\n\n const [ hasExpanded, setHasExpanded ] = React.useState(false);\n const [ canExpand, setCanExpand ] = React.useState(isExpandable && hasMembers);\n\n React.useEffect(() => {\n setCanExpand(isExpandable && hasMembers);\n }, [ isExpandable, hasMembers ]);\n\n function onClickExpand(): void {\n setHasExpanded(true);\n props.onClickExpand(props.selection.id);\n }\n\n if (hasFetchedMembers) {\n const selection: Classroom | ClassroomGroup = props.selection as Classroom | ClassroomGroup;\n\n const colourVariant = mapEntityTypeToBsVariant(props.selection);\n\n return (\n <div className={`d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-${colourVariant} text-${colourVariant} ${styles.bubble}`}>\n {selection.users.data.map(user => (\n <InputToken\n key={`${user.id}:${props.selection.id}`}\n selection={user}\n colourVariant={colourVariant}\n hasStudentExperience={props.hasStudentExperience}\n />\n ))}\n\n <DivButton\n className={`cursor-pointer position-absolute text-${colourVariant} ${styles.removeBubble}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n </div>\n );\n }\n\n return (\n <InputToken\n selection={props.selection}\n canExpand={canExpand}\n hasExpanded={hasExpanded}\n onClickExpand={onClickExpand}\n onClickRemove={props.onClickRemove}\n colourVariant={mapEntityTypeToBsVariant(props.selection)}\n hasStudentExperience={props.hasStudentExperience}\n />\n );\n}\n\ninterface InputTokenProps<T extends HashObject> {\n selection: T | Entity;\n colourVariant: string;\n canExpand?: boolean;\n hasExpanded?: boolean;\n onClickExpand?: () => void;\n onClickRemove?: (selection: Entity) => void;\n hasStudentExperience?: boolean;\n hideExpander?: boolean;\n}\n\nexport function InputToken<T extends HashObject = Entity>(props: InputTokenProps<T>): JSX.Element {\n const colourVariant = props.colourVariant || mapEntityTypeToBsVariant(props.selection);\n\n let selectionName = props.selection.name;\n\n if (props.selection.typeId === MasterType.User) {\n selectionName = props.hasStudentExperience\n ? UserHelper.getDisplayName(props.selection as User)\n : UserHelper.getFullName(props.selection as User);\n }\n\n return (\n <div className={`${styles.selection} bg-${colourVariant} rounded-pill text-${colourVariant} d-flex align-items-center me-1 mt-1 overflow-hidden`}>\n {!props.hideExpander && (\n <InputSelectionExpander\n canExpand={props.canExpand}\n hasExpanded={props.hasExpanded}\n onClickExpand={props.onClickExpand}\n selection={props.selection}\n />\n )}\n\n <span className='mx-1 text-white text-truncate'>{selectionName}</span>\n\n {FunctionHelper.isFunction(props.onClickRemove) && (\n <DivButton\n className={`d-flex align-items-center cursor-pointer align-self-stretch text-white ${styles.remove}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Dc3kX\",\"suggestionsContainerOpen\":\"c5t3e\",\"selectionContainer\":\"kFjoN\",\"sectionContainer\":\"mLrE3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { RecipientItem } from 'libs/shared/apps/share/components/recipient-item/RecipientItem';\nimport { SearchBar, SearchBarProps } from 'libs/shared/components/search-bar/SearchBar';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TypeaheadEmptyState } from 'libs/shared/components/typeahead-empty-state/TypeaheadEmptyState';\nimport { TypeaheadErrorState } from 'libs/shared/components/typeahead-error-state/TypeaheadErrorState';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { InputSelection } from './InputSelection';\n\nimport styles from './tokenized-typeahead.scss';\n\nconst namespace = 'shared.tokenizedTypeahead';\n\nexport const TOKENIZED_TYPEAHEAD_SUGGESTIONS_LIMIT = 10;\n\ninterface TokenizedTypeaheadProps<T extends BaseObject = BaseObject> extends SearchBarProps<T> {\n selections: T[];\n removeSelection: (selection: T) => void;\n emptyStateImageUrl: string;\n errorStateImageUrl: string;\n hasStudentExperience?: boolean;\n getInputTokenComponent?: (selection: T) => JSX.Element;\n imageCdnUrl?: string;\n className?: string;\n hideIcon?: boolean;\n\n /**\n * If this is passed in groups and classrooms will have the option to expand\n * otherwise they will appear as normal without the + icon\n */\n fetchSelectionMembers?: (id: string) => void;\n sharePermissionsDescription?: string;\n}\n\nTokenizedTypeahead.defaultProps = {\n renderSuggestionsOnInputFocus: true\n};\n\n/**\n * This component extends the functionality of the `SearchBar` component by\n * displaying a list of selections as tokens inside the search bar.\n * \n * Any component using this component is responsible for managing the state of\n * these tokens (selections). See `MainShare.tsx` for an example.\n */\nexport function TokenizedTypeahead<T extends BaseObject = BaseObject>(props: TokenizedTypeaheadProps<T>): JSX.Element {\n return (\n <div className={`form-control h-auto d-flex align-items-top position-relative ${props.hideIcon ? '' : 'py-1 px-0'} ${props.className}`}>\n {!props.hideIcon && <SvgContainer className='svg-container m-1' svgName={cvSvgLibrary.Search} />}\n\n <div className={`${styles.selectionContainer} d-flex flex-wrap align-items-center mt-n1`}>\n {props.selections.map(s => {\n if (props.getInputTokenComponent)\n return props.getInputTokenComponent(s);\n\n return (\n <InputSelection\n key={s.id}\n selection={s}\n onClickRemove={props.removeSelection}\n onClickExpand={props.fetchSelectionMembers}\n hasStudentExperience={props.hasStudentExperience}\n />\n );\n })}\n\n <SearchBar\n {...props}\n onBackspace={() => {\n if (!props.selections.length)\n return;\n\n props.removeSelection(ArrayHelper.last(props.selections));\n }}\n recentSearchHeading={props.recentSearchHeading || LanguageService.getPhrase(namespace, 'recentSearchHeading')}\n placeholder={!props.selections?.length ? props.placeholder : ' '}\n searchIconPlacement={false}\n clearQueryOnSelect\n getSuggestionComponent={suggestion => {\n if (props.getSuggestionComponent)\n return props.getSuggestionComponent(suggestion);\n\n return (\n <RecipientItem\n entity={suggestion}\n imageCdnUrl={props.imageCdnUrl}\n showDisplayName={props.hasStudentExperience}\n />\n );\n }}\n getEmptyStateComponent={query => <TypeaheadEmptyState query={query} imageUrl={props.emptyStateImageUrl} />}\n getErrorStateComponent={onClickTryAgain =>\n <TypeaheadErrorState imageUrl={props.errorStateImageUrl} onClickTryAgain={onClickTryAgain} />\n }\n theme={{\n container: styles.container,\n suggestionsContainerOpen: `bg-white py-1 rounded border mt-1 ${styles.suggestionsContainerOpen}`,\n sectionContainer: `border-bottom py-1 ${styles.sectionContainer}`\n }}\n sectionTitleClassName='ps-2'\n renderSuggestionsOnInputFocus={props.renderSuggestionsOnInputFocus}\n onSuggestionDependencies={[props.selections]}\n />\n </div>\n\n {!!props.sharePermissionsDescription &&\n <span className='px-2 text-secondary text-nowrap'>{props.sharePermissionsDescription}</span>\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"emptyState\":\"bKTf0\"};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useDebounce } from 'libs/shared/hooks/UseDebounce';\n\nimport styles from './typeahead-empty-state.scss';\n\nconst namespace = 'shared.typeaheadEmptyState';\n\ninterface TypeaheadEmptyStateProps {\n query: string;\n imageUrl: string;\n}\n\nexport function TypeaheadEmptyState({ query = '', imageUrl }: TypeaheadEmptyStateProps): JSX.Element {\n function onClick(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n }\n\n const debouncedQuery = useDebounce(query, 300);\n\n return (\n <div className='d-flex flex-column align-items-center text-center' onClick={onClick}>\n <img\n alt=''\n role='presentation'\n src={imageUrl}\n className={`pb-2 ${styles.emptyState}`}\n />\n <h2 className='h6'>\n <Text\n namespace={namespace}\n phrase='noResults'\n options={{ query: debouncedQuery, smartCount: debouncedQuery.length }}\n />\n </h2>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"emptyState\":\"k5mEG\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './typeahead-error-state.scss';\n\nconst namespace = 'shared.typeaheadErrorState';\n\ninterface TypeaheadErrorStateProps {\n imageUrl: string;\n onClickTryAgain: () => void;\n}\n\nexport function TypeaheadErrorState(props: TypeaheadErrorStateProps): JSX.Element {\n function onClickComponent(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n }\n\n function onClickTryAgain(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n \n props.onClickTryAgain();\n }\n\n return (\n <div className='d-flex flex-column align-items-center text-center' onClick={onClickComponent}>\n <img\n alt=''\n role='presentation'\n src={props.imageUrl}\n className={`pb-2 ${styles.emptyState}`}\n />\n <h2 className='h6'>\n <Text namespace={namespace} phrase='error' />\n </h2>\n <DivButton onClick={onClickTryAgain} className='btn btn-link info-link p-0'>\n <Text namespace={namespace} phrase='tryAgain' />\n </DivButton>\n </div>\n );\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n"],"names":["namespace","ClassroomGroupRecipientItemMetadata","props","className","IconCircle","svgName","variant","classroomGroup","metadata","colour","detailsClassName","name","userCount","users","count","classroomName","classroom","LanguageService","smartCount","getSubheading","ClassroomRecipientItemMetadata","enrolments","Number","isInteger","getPhrase","UserRecipientItemMetadata","Avatar","imageUrl","user","avatar","url","imageCdnUrl","initials","UserHelper","surname","showDisplayName","getSubText","userType","role","UserGroup","UserRole","yearGroup","getRemovePhrase","type","MasterType","RecipientItem","showSpinner","setShowSpinner","removeRecipient","MasterTypeHelper","entity","FunctionHelper","Spinner","as","size","animation","Tooltip","title","typeId","spanHack","onClick","id","WhiteAvatar","style","backgroundImage","getColouredIconClass","selection","iconClass","InputSelectionExpander","colourClass","mapEntityTypeToForegroundColor","isClassroom","canExpand","SvgContainer","hasExpanded","DivButton","onClickExpand","mapEntityTypeToBsVariant","InputSelection","isClassroomGroup","isExpandable","hasMembers","hasFetchedMembers","data","length","setHasExpanded","setCanExpand","colourVariant","map","InputToken","key","hasStudentExperience","onClickRemove","selectionName","hideExpander","TOKENIZED_TYPEAHEAD_SUGGESTIONS_LIMIT","TokenizedTypeahead","hideIcon","selections","s","getInputTokenComponent","removeSelection","fetchSelectionMembers","SearchBar","onBackspace","ArrayHelper","recentSearchHeading","placeholder","searchIconPlacement","clearQueryOnSelect","getSuggestionComponent","suggestion","getEmptyStateComponent","query","TypeaheadEmptyState","emptyStateImageUrl","getErrorStateComponent","onClickTryAgain","TypeaheadErrorState","errorStateImageUrl","theme","container","suggestionsContainerOpen","sectionContainer","sectionTitleClassName","renderSuggestionsOnInputFocus","onSuggestionDependencies","sharePermissionsDescription","defaultProps","debouncedQuery","e","stopPropagation","alt","src","Text","phrase","options","mapColourToBsVariant","groupColour"],"sourceRoot":""}
|