@clickview/lite 0.50.1-rc.1 → 0.50.1-rc.2

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.
Files changed (75) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{1820-lite-ebb89eab7a.chunk.css → 1820-lite-8008c78ef7.chunk.css} +1 -1
  3. package/dist/css/{2120-lite-dd1595051d.chunk.css → 2120-lite-b1876117b4.chunk.css} +1 -1
  4. package/dist/css/{2137-lite-7045732fc8.chunk.css → 2137-lite-6e9d11bd5b.chunk.css} +1 -1
  5. package/dist/css/{2795-lite-1641e6fbf9.chunk.css → 2795-lite-34f8ca5018.chunk.css} +1 -1
  6. package/dist/css/{3515-lite-66473d08ed.chunk.css → 3515-lite-10695a1950.chunk.css} +1 -1
  7. package/dist/css/{458-lite-66473d08ed.chunk.css → 458-lite-10695a1950.chunk.css} +1 -1
  8. package/dist/css/{5242-lite-3e960b685e.chunk.css → 5242-lite-30642a9642.chunk.css} +1 -1
  9. package/dist/css/{5446-lite-ae2395342f.chunk.css → 5446-lite-2e956685f4.chunk.css} +1 -1
  10. package/dist/css/{6850-lite-c1a8731a93.chunk.css → 6850-lite-0bf8514497.chunk.css} +2 -2
  11. package/dist/css/{7987-lite-94679244a2.chunk.css → 7987-lite-fd431fbaf2.chunk.css} +1 -1
  12. package/dist/css/{9620-lite-d77e9ad59b.chunk.css → 9620-lite-111c825071.chunk.css} +1 -1
  13. package/dist/scripts/1169-5a0d974a94-lite.chunk.js +2 -0
  14. package/dist/scripts/1169-5a0d974a94-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{1820-68114ca994-lite.chunk.js → 1820-9a1f618969-lite.chunk.js} +2 -2
  16. package/dist/scripts/1820-9a1f618969-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{2120-88f6dd6652-lite.chunk.js → 2120-82a7b90997-lite.chunk.js} +1 -1
  18. package/dist/scripts/{2120-88f6dd6652-lite.chunk.js.map → 2120-82a7b90997-lite.chunk.js.map} +1 -1
  19. package/dist/scripts/{2137-093f479ff9-lite.chunk.js → 2137-2e78e535ad-lite.chunk.js} +1 -1
  20. package/dist/scripts/{2137-093f479ff9-lite.chunk.js.map → 2137-2e78e535ad-lite.chunk.js.map} +1 -1
  21. package/dist/scripts/{2795-0616748349-lite.chunk.js → 2795-eb3a51adc2-lite.chunk.js} +1 -1
  22. package/dist/scripts/{2795-0616748349-lite.chunk.js.map → 2795-eb3a51adc2-lite.chunk.js.map} +1 -1
  23. package/dist/scripts/3070-63e0a6b63e-lite.chunk.js +2 -0
  24. package/dist/scripts/3070-63e0a6b63e-lite.chunk.js.map +1 -0
  25. package/dist/scripts/{3515-0d5feefbe3-lite.chunk.js → 3515-72a31e0bbd-lite.chunk.js} +1 -1
  26. package/dist/scripts/{3515-0d5feefbe3-lite.chunk.js.map → 3515-72a31e0bbd-lite.chunk.js.map} +1 -1
  27. package/dist/scripts/{458-e3aaac093b-lite.chunk.js → 458-1ca8abf829-lite.chunk.js} +1 -1
  28. package/dist/scripts/{458-e3aaac093b-lite.chunk.js.map → 458-1ca8abf829-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4718-b3cfb276a7-lite.chunk.js +2 -0
  30. package/dist/scripts/4718-b3cfb276a7-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5242-e2f40bdd0e-lite.chunk.js → 5242-e5cc8311eb-lite.chunk.js} +1 -1
  32. package/dist/scripts/{5242-e2f40bdd0e-lite.chunk.js.map → 5242-e5cc8311eb-lite.chunk.js.map} +1 -1
  33. package/dist/scripts/{5446-1ef1639ef6-lite.chunk.js → 5446-5a2f719a6f-lite.chunk.js} +1 -1
  34. package/dist/scripts/{5446-1ef1639ef6-lite.chunk.js.map → 5446-5a2f719a6f-lite.chunk.js.map} +1 -1
  35. package/dist/scripts/{5940-511beff2ee-lite.chunk.js → 5940-5731abccf3-lite.chunk.js} +2 -2
  36. package/dist/scripts/5940-5731abccf3-lite.chunk.js.map +1 -0
  37. package/dist/scripts/6309-f5bb1c14dc-lite.chunk.js +3 -0
  38. package/dist/scripts/6309-f5bb1c14dc-lite.chunk.js.map +1 -0
  39. package/dist/scripts/6450-2745feb746-lite.chunk.js +2 -0
  40. package/dist/scripts/6450-2745feb746-lite.chunk.js.map +1 -0
  41. package/dist/scripts/6850-393de993b8-lite.chunk.js +3 -0
  42. package/dist/scripts/6850-393de993b8-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7987-db0037709c-lite.chunk.js → 7987-ff7de6531f-lite.chunk.js} +1 -1
  44. package/dist/scripts/{7987-db0037709c-lite.chunk.js.map → 7987-ff7de6531f-lite.chunk.js.map} +1 -1
  45. package/dist/scripts/9016-0c078a39cb-lite.chunk.js +3 -0
  46. package/dist/scripts/9016-0c078a39cb-lite.chunk.js.map +1 -0
  47. package/dist/scripts/9620-d0f04eeccd-lite.chunk.js +3 -0
  48. package/dist/scripts/9620-d0f04eeccd-lite.chunk.js.map +1 -0
  49. package/dist/scripts/{bundle-bb2e18c8ca.min.js → bundle-815f926b0f.min.js} +3 -3
  50. package/dist/scripts/bundle-815f926b0f.min.js.map +1 -0
  51. package/package.json +1 -1
  52. package/dist/scripts/1169-3df974a8eb-lite.chunk.js +0 -2
  53. package/dist/scripts/1169-3df974a8eb-lite.chunk.js.map +0 -1
  54. package/dist/scripts/1820-68114ca994-lite.chunk.js.map +0 -1
  55. package/dist/scripts/3070-b148205227-lite.chunk.js +0 -2
  56. package/dist/scripts/3070-b148205227-lite.chunk.js.map +0 -1
  57. package/dist/scripts/4718-2b58aa560d-lite.chunk.js +0 -2
  58. package/dist/scripts/4718-2b58aa560d-lite.chunk.js.map +0 -1
  59. package/dist/scripts/5940-511beff2ee-lite.chunk.js.map +0 -1
  60. package/dist/scripts/6309-36ea0c9f2c-lite.chunk.js +0 -3
  61. package/dist/scripts/6309-36ea0c9f2c-lite.chunk.js.map +0 -1
  62. package/dist/scripts/6450-6819d42c15-lite.chunk.js +0 -2
  63. package/dist/scripts/6450-6819d42c15-lite.chunk.js.map +0 -1
  64. package/dist/scripts/6850-16bec85d3c-lite.chunk.js +0 -3
  65. package/dist/scripts/6850-16bec85d3c-lite.chunk.js.map +0 -1
  66. package/dist/scripts/9016-c359251f82-lite.chunk.js +0 -3
  67. package/dist/scripts/9016-c359251f82-lite.chunk.js.map +0 -1
  68. package/dist/scripts/9620-630f9e6344-lite.chunk.js +0 -3
  69. package/dist/scripts/9620-630f9e6344-lite.chunk.js.map +0 -1
  70. package/dist/scripts/bundle-bb2e18c8ca.min.js.map +0 -1
  71. /package/dist/scripts/{6309-36ea0c9f2c-lite.chunk.js.LICENSE.txt → 6309-f5bb1c14dc-lite.chunk.js.LICENSE.txt} +0 -0
  72. /package/dist/scripts/{6850-16bec85d3c-lite.chunk.js.LICENSE.txt → 6850-393de993b8-lite.chunk.js.LICENSE.txt} +0 -0
  73. /package/dist/scripts/{9016-c359251f82-lite.chunk.js.LICENSE.txt → 9016-0c078a39cb-lite.chunk.js.LICENSE.txt} +0 -0
  74. /package/dist/scripts/{9620-630f9e6344-lite.chunk.js.LICENSE.txt → 9620-d0f04eeccd-lite.chunk.js.LICENSE.txt} +0 -0
  75. /package/dist/scripts/{bundle-bb2e18c8ca.min.js.LICENSE.txt → bundle-815f926b0f.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2120-88f6dd6652-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/shared/views/view-curriculum-links/ViewCurriculumLinksView.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/tags.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState<Presentation[]>([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n\n if (!props.curriculumLinks?.length) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n <ul className='list-unstyled mb-0'>\n {curriculumTags.map(t => (\n <li\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img\n src={ImageHelper.createUrl(t.cover.url, { size: ImageSize.Small })}\n alt={t.name}\n className='rounded-circle'\n />\n </div>\n {t.name}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeMore')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n\n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLDivElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLDivElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <div\n className='d-flex flex-nowrap position-relative w-100'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.viewCurriculumLinks');\n\ninterface ViewCurriculumLinksViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ViewCurriculumLinksView(props: ViewCurriculumLinksViewProps): React.ReactElement {\n const {\n hasLoaded,\n preferredCurriculum,\n availableCurriculums,\n nonEmptyCurriculums,\n curriculumLinks,\n updateCurriculum\n } = useCurriculums(props.id);\n\n const [ showLoadingSpinner, setShowLoadingSpinner ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const alerts = useAlerts();\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowLoadingSpinner(true);\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: video.data?.id,\n videoName: video.data?.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowLoadingSpinner(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(preferredCurriculum ?? ArrayHelper.first(availableCurriculums));\n\n setShowLoadingSpinner(false);\n }, [ preferredCurriculum?.id, hasLoaded ]);\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n size='lg'\n >\n <div className='mb-3 mx-2'>\n {!!nonEmptyCurriculums?.length && (\n <DynamicWidget\n collection={nonEmptyCurriculums}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n )}\n </div>\n\n {!showLoadingSpinner ? (\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n onChangeCurriculum={onChangeCurriculum}\n />\n </div>\n ) : (\n <div className='d-flex justify-content-center align-items-center py-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Submit variant='dark' onClick={props.closePopup} text={getPhrase('close')} />\n </PopupButtons>\n </Popup>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};","// extracted by mini-css-extract-plugin\nexport default {\"tagList\":\"Zw6d9\",\"disabled\":\"jlL1c\",\"partialTag\":\"too_N\",\"badge\":\"OjtN8\",\"close\":\"X9joI\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","BRACKET_SEGMENT_REGEX","namespace","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","phrase","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","map","ca","join","push","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","length","then","curriculumLinkSets","newSet","subject","audience","areas","leaves","curriculumObj","type","emptyStateUrl","t","linkSetKey","getPhrase","CurriculumLinksEmptyState","altText","PartialCurriculumLinkSection","PartialCurriculumLinks","PartialTagItem","tagClass","classNames","LanguageService","SeeMore","AppLink","appLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","showSeeMoreLink","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","children","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","S","CurriculumType","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","ViewCurriculumLinksView","hasLoaded","preferredCurriculum","availableCurriculums","nonEmptyCurriculums","updateCurriculum","showLoadingSpinner","setShowLoadingSpinner","selectedCurriculum","setSelectedCurriculum","video","alerts","curriculumId","newCurriculum","find","c","videoId","videoName","entity","actionType","location","error","title","closePopup","collection","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","as","animation","variant","text"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2120-82a7b90997-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinkItem.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/CurriculumLinksEmptyState.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/PartialCurriculumLinks.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/partial-loading/partial-curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/PartialTagItem.tsx","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/widget-header.scss","file:///app/packages/libs/shared/src/components/widgets/curated-widgets/components/header/WidgetHeader.tsx","file:///app/packages/libs/shared/src/utils/DragHelper.ts","file:///app/packages/libs/shared/src/components/widgets/sliding-list/SlidingListContainer.tsx","file:///app/packages/libs/shared/src/components/widgets/widget-button/widget-button.scss","file:///app/packages/libs/shared/src/components/widgets/widget-button/WidgetButton.tsx","file:///app/packages/libs/shared/src/enums/CssMeasurement.ts","file:///app/packages/libs/shared/src/enums/CurriculumType.ts","file:///app/packages/libs/shared/src/enums/WidgetInteraction.ts","file:///app/packages/libs/shared/src/hooks/UseGetMediaQueryString.ts","file:///app/packages/projects/lite/src/shared/views/view-curriculum-links/ViewCurriculumLinksView.tsx","file:///app/packages/libs/shared/src/components/curriculum-links/curriculum-links.scss","file:///app/packages/libs/shared/src/components/tags/tags.scss"],"sourcesContent":["import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport styles from './curriculum-links.scss';\n\ninterface CurriculumLinkItemProps {\n data: Presentation;\n onChangeCurriculum: (id: string) => any;\n selected: boolean;\n}\n\nexport function CurriculumLinkItem(props: CurriculumLinkItemProps): JSX.Element {\n const { data: curriculumTag } = props;\n\n return (\n <DivButton\n key={curriculumTag.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} ${props.selected ? styles.selected : ''}`}\n onClick={() => props.onChangeCurriculum(curriculumTag.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle border`}>\n <img\n src={ImageHelper.createUrl(curriculumTag.cover.url, { size: ImageSize.Small })}\n alt={curriculumTag.name}\n className='rounded-circle'\n />\n </div>\n <div className='ms-2'>\n {curriculumTag.name}\n </div>\n </DivButton>\n );\n}","import React from 'react';\n\nimport { PartialCurriculumLinks } from 'libs/shared/components/curriculum-links/partial-loading/PartialCurriculumLinks';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CurriculumType } from 'libs/shared/enums/CurriculumType';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { Curriculum, Presentation } from 'libs/shared/interfaces';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { CurriculumLinksEmptyState } from './CurriculumLinksEmptyState';\n\nimport styles from './curriculum-links.scss';\n\nconst BRACKET_SEGMENT_REGEX = /(.*)\\s\\((.*)?\\)/i;\n\nconst namespace = 'shared.curriculumLinks';\n\nconst BASE_PILL_CLASS = 'text-nowrap font-size-normal rounded-pill py-1 px-2 my-0 d-inline-block';\n\ninterface CurriculumStructure {\n [CurriculumType.Subject]: Curriculum<CurriculumType.Subject>;\n [CurriculumType.Audience]: Curriculum<CurriculumType.Audience>;\n areasAndLeaves: Array<{\n [CurriculumType.Area]: Curriculum<CurriculumType.Area>[];\n [CurriculumType.Leaf]: Curriculum<CurriculumType.Leaf>[];\n }>;\n}\n\ninterface CurriculumLeafProps {\n leaf: Curriculum<CurriculumType.Leaf>;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n uiContainsCodes: boolean;\n}\n\nfunction CurriculumLeaf(props: CurriculumLeafProps): JSX.Element {\n function getCurriculumCodeClass(): string {\n const baseClass = BASE_PILL_CLASS + ' bg-white border';\n\n // If a leaf has no code but the rest of the UI has leaf nodes w/ codes, we show a special \"No code\" pill\n if (!props.leaf.name && props.uiContainsCodes)\n return baseClass + ' border-secondary text-secondary';\n\n return baseClass + ' border-dark';\n }\n\n const codeRef = React.useRef<HTMLDivElement>();\n\n React.useEffect(() => {\n if (!codeRef.current)\n return;\n\n const { width } = codeRef.current.getBoundingClientRect();\n\n props.trySetMaxCodeWidth(width);\n }, [codeRef.current]);\n\n return (\n <div className='d-flex'>\n {(() => {\n if (!props.leaf.description)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.name }} />;\n\n /**\n * If a leaf has no code but the rest of the UI has leaf nodes\n * with codes, we show a special \"No code\" pill. Example: https://imgur.com/3L1Ela3\n */\n if (!props.leaf.name && props.uiContainsCodes) {\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>\n <Text namespace={namespace} phrase='noCode' />\n </h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n }\n\n /**\n * If a leaf has no code and the rest of the UI leaf nodes have no code, we just\n * display the description with a bullet point. Example: https://imgur.com/jzJvmWs\n */\n if (!props.leaf.name && !props.uiContainsCodes)\n return <p className='m-0' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />;\n\n return (\n <>\n <div\n className='me-1 align-self-start'\n style={{ minWidth: props.codeWidth ? `${props.codeWidth}px` : 'auto' }}\n >\n <h5 ref={codeRef} className={getCurriculumCodeClass()}>{props.leaf.name}</h5>\n </div>\n <p className='m-0 align-self-center' dangerouslySetInnerHTML={{ __html: props.leaf.description }} />\n </>\n );\n })()}\n </div>\n );\n}\n\ninterface CurriculumSubjectProps {\n linkSet: CurriculumStructure;\n codeWidth: number;\n trySetMaxCodeWidth: React.Dispatch<React.SetStateAction<number>>;\n}\n\nfunction CurriculumSubject(props: CurriculumSubjectProps): JSX.Element {\n const areaAndLeafSets: { [areaText: string]: Curriculum<CurriculumType.Leaf>[]; } = {};\n\n let uiContainsCodes = false;\n\n props.linkSet.areasAndLeaves.forEach(areaAndLeafSet => {\n const areaText = areaAndLeafSet[CurriculumType.Area].map(ca => ca.name).join(' - ');\n\n if (areaAndLeafSets[areaText]) {\n areaAndLeafSet[CurriculumType.Leaf].forEach(leaf => {\n areaAndLeafSets[areaText].push(leaf);\n\n // We need the info on if _any_ leaf node has a code in it. See why in the comments in `<CurriculumLeaf />`\n if (leaf.name)\n uiContainsCodes = true;\n });\n\n return;\n }\n\n areaAndLeafSets[areaText] = areaAndLeafSet[CurriculumType.Leaf];\n });\n\n function getAudienceText(): string {\n const audienceSegment = props.linkSet[CurriculumType.Audience].name;\n const subjectSegment = props.linkSet[CurriculumType.Subject].name;\n\n /**\n * In some curriculums, such as the UK curriculum, the audience string may contain a year group\n * in brackets. For example, it may be \"Lower Key Stage 2 (Year 4)\".\n * This regex will pull that segment out if it exists.\n */\n const audienceBracketSegments = audienceSegment.match(BRACKET_SEGMENT_REGEX);\n\n if (audienceBracketSegments)\n return `${audienceBracketSegments[1]} • ${audienceBracketSegments[2]} • ${subjectSegment}`;\n\n return `${audienceSegment} • ${subjectSegment}`;\n }\n\n function getLeafStyleClass(leaf: Curriculum<CurriculumType.Leaf>): string {\n const className = 'mb-2';\n\n if (!leaf.name && !uiContainsCodes)\n return className + ' ms-4 ' + styles.leafDescriptionOnly;\n\n return className;\n }\n\n return (\n <>\n <h3 className={`${BASE_PILL_CLASS} text-white bg-dark-blue fw-normal me-1 mb-2`}>\n {getAudienceText()}\n </h3>\n\n <div className={`me-2 ${styles.curriculumSubject}`}>\n {Object.keys(areaAndLeafSets).map((areaText, i) => {\n return (\n <div key={i} className={styles.areaLeafSet} >\n {areaText && <h4 className='mb-1 font-size-normal'>{areaText}</h4>}\n <ul className='list-unstyled'>\n {areaAndLeafSets[areaText].map(leaf => (\n <li key={leaf.id} className={getLeafStyleClass(leaf)}>\n <CurriculumLeaf\n leaf={leaf}\n codeWidth={props.codeWidth}\n trySetMaxCodeWidth={props.trySetMaxCodeWidth}\n uiContainsCodes={uiContainsCodes}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n })}\n </div>\n </>\n );\n}\n\ninterface CurriculumLinksSet {\n [subjectAndAudienceIdKey: string]: CurriculumStructure\n}\n\ninterface CurriculumLinksProps {\n curriculumLinks: Curriculum[][];\n emptyStateUrl?: string;\n checkAllCurriculums?: () => Promise<Presentation[]>;\n onChangeCurriculum?: (id: string) => void;\n}\n\nexport function CurriculumLinks(props: CurriculumLinksProps): JSX.Element {\n const [ codeWidth, setCodeWidth ] = React.useState(0);\n const [ showOtherCurriculums, setShowOtherCurriculums ] = React.useState(false);\n const [ loadingOther, setLoadingOther ] = React.useState(false);\n const [ curriculumTags, setCurriculumTags ] = React.useState<Presentation[]>([]);\n\n React.useEffect(() => {\n if (props.checkAllCurriculums && !props.curriculumLinks?.length) {\n setLoadingOther(true);\n // only fetch other curriculums when this curriculum is displayed\n props.checkAllCurriculums().then(data => {\n if (data.length) {\n setShowOtherCurriculums(true);\n }\n\n setCurriculumTags(data);\n }).finally(() => setLoadingOther(false));\n }\n }, [props.curriculumLinks?.length]);\n\n function trySetMaxCodeWidth(width: number): void {\n /**\n * The width of the curriculum code column should be identical for each leaf node, meaning\n * the leaf description text will be perfectly vertically aligned all the way down.\n * See here for example: https://imgur.com/MbganZf\n * \n * This is achieved by us setting the state for the maximum code width, and forcing all\n * smaller codes to abide by that max width.\n * \n * This value is used in the `<CurriculumLeaf />` component.\n */\n setCodeWidth(currentVal => {\n if (currentVal >= width)\n return currentVal;\n\n return width;\n });\n }\n\n /**\n * Here, we're taking the structure of links from the backend, and restructuring it in a way\n * that resembles the structure of our UI more closely. The general idea is:\n * \n * CurriculumAudience - CurriculumSubject\n * CurriculumAreas\n * CurriculumLeaves\n */\n const curriculumLinkSets = React.useMemo(() => {\n const newSet: CurriculumLinksSet = {};\n\n props.curriculumLinks.forEach(linkSet => {\n let subject: Curriculum<CurriculumType.Subject> = null;\n let audience: Curriculum<CurriculumType.Audience> = null;\n const areas: Curriculum<CurriculumType.Area>[] = [];\n const leaves: Curriculum<CurriculumType.Leaf>[] = [];\n \n linkSet.forEach(curriculumObj => {\n switch (curriculumObj.type) {\n case CurriculumType.Subject:\n subject = curriculumObj as Curriculum<CurriculumType.Subject>;\n break;\n case CurriculumType.Audience:\n audience = curriculumObj as Curriculum<CurriculumType.Audience>;\n break;\n case CurriculumType.Area:\n areas.push(curriculumObj as Curriculum<CurriculumType.Area>);\n break;\n case CurriculumType.Leaf:\n leaves.push(curriculumObj as Curriculum<CurriculumType.Leaf>);\n break;\n default:\n break;\n }\n });\n \n const key = `${subject.id}:${audience.id}`;\n \n if (newSet[key]) {\n newSet[key].areasAndLeaves.push({\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n });\n \n return;\n }\n \n newSet[key] = {\n [CurriculumType.Subject]: subject,\n [CurriculumType.Audience]: audience,\n areasAndLeaves: [{\n [CurriculumType.Area]: areas,\n [CurriculumType.Leaf]: leaves\n }]\n };\n });\n\n return newSet;\n }, [props.curriculumLinks]);\n\n if (loadingOther) {\n return <PartialCurriculumLinks />;\n }\n\n if (!props.curriculumLinks?.length) {\n // only if all other curriculums don't have links we render the empty state\n if (props.emptyStateUrl && !showOtherCurriculums && !loadingOther)\n return <CurriculumLinksEmptyState emptyStateUrl={props.emptyStateUrl} />;\n }\n\n if (showOtherCurriculums) {\n return (\n <div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmpty' />\n </div>\n <div className='mb-3'>\n <Text namespace={namespace} phrase='currentEmptyInfo' />\n </div>\n <ul className='list-unstyled mb-0'>\n {curriculumTags.map(t => (\n <li\n key={t.id}\n className={`p-1 pe-2 rounded-pill d-inline-flex align-items-center cursor-pointer ${styles.tag} me-2`}\n onClick={() => props.onChangeCurriculum(t.id.toString())}\n >\n <div className={`bg-white ${styles.cover} rounded-circle`}>\n <img\n src={ImageHelper.createUrl(t.cover.url, { size: ImageSize.Small })}\n alt={t.name}\n className='rounded-circle'\n />\n </div>\n {t.name}\n </li>\n ))}\n </ul>\n </div>\n );\n }\n\n return (\n <ul className='list-unstyled m-0'>\n {Object.keys(curriculumLinkSets).map((linkSetKey, i) => (\n <li key={`linkset-${i}`} className={styles.curriculumSet}>\n <CurriculumSubject\n linkSet={curriculumLinkSets[linkSetKey]}\n trySetMaxCodeWidth={trySetMaxCodeWidth}\n codeWidth={codeWidth}\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nconst namespace = 'shared.curriculumLinks';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface CurriculumLinksEmptyStateProps {\n emptyStateUrl: string;\n}\n\nexport function CurriculumLinksEmptyState(props: CurriculumLinksEmptyStateProps): JSX.Element {\n return (\n <EmptyState className='pt-3'>\n <EmptyState.Image src={props.emptyStateUrl} altText={getPhrase('emptyInfo')} size='small'/>\n <EmptyState.Heading>\n <Text namespace={namespace} phrase='emptyHeading' />\n </EmptyState.Heading>\n <EmptyState.Info>\n <Text namespace={namespace} phrase='emptyInfo' />\n </EmptyState.Info>\n </EmptyState>\n );\n}","import React from 'react';\n\nimport styles from './partial-curriculum-links.scss';\n\nconst PartialCurriculumLinkSection = () => (\n <>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block me-1 mb-2 ${styles.audience}`} />\n <div>\n <div className={`partial-loading-background mb-1 ${styles.area}`} />\n\n <div className='mb-2 d-flex'>\n <div className={`me-1 align-self-start ${styles.code}`}>\n <div className={`partial-loading-background rounded-pill py-1 px-2 d-inline-block w-100 h-100`} />\n </div>\n \n <div className={`partial-loading-background ${styles.description}`} />\n </div>\n </div>\n </>\n);\n\nexport function PartialCurriculumLinks(): JSX.Element {\n return (\n <div>\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div className='mb-3'>\n <PartialCurriculumLinkSection />\n </div>\n\n <div>\n <PartialCurriculumLinkSection />\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"audience\":\"vDcrq\",\"area\":\"GXhoW\",\"code\":\"goKaS\",\"description\":\"vFew6\"};","import React from 'react';\n\nimport styles from './tags.scss';\n\ninterface PartialTagItemProps {\n tagClass?: string;\n}\n\nexport const PartialTagItem = React.memo(function({ tagClass = '' }: PartialTagItemProps): JSX.Element {\n const classNames = `partial-loading-background d-inline-block rounded-pill py-1 px-2 mb-1 me-1 text-nowrap ${tagClass} ${styles.partialTag}`;\n\n return (\n <div className='mt-1'>\n <span className={classNames}>&nbsp;</span>\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"seeMore\":\"yv0FS\"};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions, ClickDescriptor } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport styles from './widget-header.scss';\n\nconst namespace = 'shared.widgetHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface WidgetHeaderProps {\n name: string;\n description: string;\n\n appLink?: Core.AppLink;\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n showSeeMoreLink?: boolean;\n onClick?: () => void;\n}\n\nfunction SeeMore(props: WidgetHeaderProps) {\n return (\n <div className={`ms-3 ${styles.seeMore}`}>\n <AppLink\n appLink={props.appLink}\n analyticsData={props.analyticsData }\n analyticsOptions={{ ...props.analyticsOptions, descriptor: ClickDescriptor.SeeMore }}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n >\n <p className='hover-text-underline text-dark curated-widget-heading'>{getPhrase('seeMore')}</p>\n </AppLink>\n </div>\n );\n}\n\nexport function WidgetHeader(props: WidgetHeaderProps): JSX.Element {\n const hasDescription = !!props.description;\n\n if (!props.name && !props.description)\n return <></>;\n\n return (\n <div className='curated-widget-header'>\n <div className='d-flex justify-content-between'>\n {!!props.name && (\n <div className={styles.title}>\n <AppLink\n appLink={props.appLink}\n analyticsOptions={props.analyticsOptions}\n analyticsData={props.analyticsData}\n className={`text-decoration-none ${props.appLink ? 'curated-widget-link' : ''}`}\n onClick={props.onClick}\n >\n <h2 className='h4 curated-widget-heading'>\n {props.name}\n </h2>\n </AppLink>\n </div>\n )}\n {!!props.appLink && !hasDescription && !!props.showSeeMoreLink && <SeeMore {...props}/>}\n </div>\n \n {hasDescription && (\n <div className='d-flex justify-content-between align-items-end'>\n <p className={`description curated-widget-description ${styles.description}`}>\n <span>{props.description}</span>\n </p>\n {!!props.appLink && !!props.showSeeMoreLink && <SeeMore {...props}/> }\n </div>\n )}\n </div>\n );\n}","import { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nconst blankImage = new Image();\nblankImage.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAUEBAAAACwAAAAAAQABAAACAkQBADs=';\n\nexport const DragHelper = {\n // This removes the image that appears when you drag a draggable HTML element\n hideDragImage(event: React.DragEvent<HTMLElement>): void {\n if (!event.dataTransfer.setDragImage || !FunctionHelper.isFunction(event.dataTransfer.setDragImage))\n return;\n\n event.dataTransfer.setDragImage(blankImage, 0, 0);\n }\n};","import * as React from 'react';\n\nimport { UserAgentHelper } from 'libs/common/backbone/utils/UserAgentHelper';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { CssMeasurement } from 'libs/shared/enums/CssMeasurement';\nimport { DragHelper } from 'libs/shared/utils/DragHelper';\n\nconst isTouchScreen = UserAgentHelper.isTouchScreen();\n\nconst getPositionStyling = (xPosition: number, measurement: CssMeasurement, dragPercentage?: number) => {\n // Used in situations where a touch screen user is dragging the `<FixedWidget />`\n if (measurement === CssMeasurement.Percentage && dragPercentage)\n xPosition = xPosition - dragPercentage;\n\n return {\n transform: `translate3d(${xPosition}${measurement}, 0px, 0px)`,\n transition: 'transform .4s ease-in-out'\n };\n};\n\ninterface SlidingListContainerProps extends React.PropsWithChildren<unknown> {\n position: number;\n positionType: CssMeasurement;\n\n onDrag?: (event: React.DragEvent<HTMLDivElement>) => void;\n onDragEnd?: () => void;\n\n onTouchMove?: (event: React.TouchEvent<HTMLDivElement>) => void;\n onTouchEnd?: () => void;\n\n percentageDragged?: number;\n}\n\nexport const SlidingListContainer = React.forwardRef((\n props: SlidingListContainerProps,\n ref: React.MutableRefObject<HTMLDivElement>\n): JSX.Element => {\n const { children, positionType, onDrag, onDragEnd, onTouchMove, onTouchEnd, percentageDragged, position = 0 } = props;\n\n function getEventListeners(): HashObject {\n const listenerProps: HashObject = {};\n\n if (onDrag && onDragEnd) {\n listenerProps.draggable = true;\n listenerProps.onDragEnd = onDragEnd;\n listenerProps.onDragStart = DragHelper.hideDragImage;\n listenerProps.onDragOver = onDrag;\n }\n\n if (onTouchMove && onTouchEnd && isTouchScreen) {\n listenerProps.onTouchMoveCapture = onTouchMove;\n listenerProps.onTouchEndCapture = onTouchEnd;\n }\n\n return listenerProps;\n }\n\n return (\n <div\n className='d-flex flex-nowrap position-relative w-100'\n style={getPositionStyling(position, positionType, percentageDragged)}\n ref={ref}\n {...getEventListeners()}\n >\n {children}\n </div>\n );\n});","// extracted by mini-css-extract-plugin\nexport default {\"buttonContainer\":\"_ejId\",\"left\":\"VSAPU\",\"right\":\"kgeXh\",\"button\":\"gAsE9\",\"hoverText\":\"APA36\",\"buttonHover\":\"cqD75\",\"chevron\":\"Ev4hr\",\"extendedClickableArea\":\"AtsWP\",\"gradientRight\":\"ZuAif\",\"gradientLeft\":\"Pt3nx\",\"topPos\":\"BVcIS\"};","import * as React from 'react';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { FixedWidgetState } from 'libs/shared/components/widgets/fixed-widget';\nimport { WidgetContents } from 'libs/shared/enums/WidgetContents';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './widget-button.scss';\n\nexport enum WidgetButtonDirection {\n Left,\n Right\n}\n\ninterface WidgetButtonProps {\n onClick: (event: React.MouseEvent<HTMLDivElement, MouseEvent>) => void;\n direction: WidgetButtonDirection;\n hide: boolean;\n contents?: WidgetContents;\n useGradientBackdrop?: boolean;\n className?: string;\n hoverText?: string;\n hideExtendedClickableArea?: boolean;\n state?: FixedWidgetState;\n\n leftButtonClassName?: string;\n rightButtonClassName?: string;\n leftGradientClassName?: string;\n rightGradientClassName?: string;\n}\n\nexport const WidgetButton = React.memo(function(props: WidgetButtonProps): JSX.Element {\n const isLeft = props.direction === WidgetButtonDirection.Left;\n\n const arrowSvg = isLeft ? cvSvgLibrary.ChevronLeft : cvSvgLibrary.ChevronRight;\n\n function getPositionClass(): string {\n let className = styles.topPos;\n \n // Left / Right\n if (isLeft)\n className += ` ${styles.left} ${props.leftButtonClassName}`;\n else\n className += ` ${styles.right} ${props.rightButtonClassName}`;\n \n return className;\n }\n\n function getStyle(): React.CSSProperties {\n if (props.state?.contents === 'videos')\n return { paddingBottom: (56.25 / props.state?.viewableItems) + '%' };\n\n return { height: '100%' };\n }\n\n if (props.hide)\n return <></>;\n\n return (\n <div className={styles.buttonContainer} style={getStyle()}>\n {props.useGradientBackdrop &&\n <div className={isLeft ? `${styles.gradientLeft} ${props.leftGradientClassName}` : `${styles.gradientRight} ${props.rightGradientClassName}`} />\n }\n\n {!props.hideExtendedClickableArea && (\n <div\n role='button'\n onClick={props.onClick}\n className={`${styles.extendedClickableArea} ${isLeft ? styles.left : styles.right}`}\n />\n )}\n\n <div\n role='button'\n className={`${getPositionClass()} ${styles.button} ${props.className || ''}`}\n onClick={props.onClick}\n >\n {props.hoverText && (\n <span className={`ps-3 pe-2 ${styles.hoverText}`}>{props.hoverText}</span>\n )}\n <SvgContainer\n svgName={arrowSvg}\n size={SvgContainerSize.Medium}\n className={`svg-container d-inline-block ${styles.chevron}`}\n />\n </div>\n </div>\n );\n});","export enum CssMeasurement {\n Percentage = '%',\n Pixels = 'px'\n}","export enum CurriculumType {\n Subject = 'CurriculumSubject',\n Audience = 'CurriculumAudience',\n Area = 'CurriculumArea',\n Leaf = 'CurriculumLeaf'\n}","export enum WidgetInteraction {\n Init = 'init',\n Next = 'next',\n Previous = 'previous',\n Resize = 'resize',\n Drag = 'drag',\n Update = 'update',\n JumpToIndex = 'jump-to-index'\n}","import { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\n\nimport { useMediaQuery } from './UseMediaQuery';\n\n/**\n * @deprecated Please use useBreakpoints() instead\n */\nexport function useGetMediaQueryString(): MediaQueryStrings {\n const isXS = useMediaQuery(MediaQueryStrings.XS);\n const isSM = useMediaQuery(MediaQueryStrings.SM);\n const isMD = useMediaQuery(MediaQueryStrings.MD);\n const isLG = useMediaQuery(MediaQueryStrings.LG);\n const isXL = useMediaQuery(MediaQueryStrings.XL);\n const isXXL = useMediaQuery(MediaQueryStrings.XXL);\n\n let currentString = MediaQueryStrings.LG; // default\n if (isXS) currentString = MediaQueryStrings.XS;\n if (isSM) currentString = MediaQueryStrings.SM;\n if (isMD) currentString = MediaQueryStrings.MD;\n if (isLG) currentString = MediaQueryStrings.LG;\n if (isXL) currentString = MediaQueryStrings.XL;\n if (isXXL) currentString = MediaQueryStrings.XXL;\n\n return currentString;\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, PresentationDescriptor, UserAction } from 'libs/analytics/interfaces';\n\nimport { CurriculumLinkItem } from 'libs/shared/components/curriculum-links/CurriculumLinkItem';\nimport { CurriculumLinks } from 'libs/shared/components/curriculum-links/CurriculumLinks';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { PartialTagItem } from 'libs/shared/components/tags/PartialTagItem';\nimport { DynamicWidget } from 'libs/shared/components/widgets/dynamic-widget';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { PopupViewProps, Presentation, Video } from 'libs/shared/interfaces';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.viewCurriculumLinks');\n\ninterface ViewCurriculumLinksViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function ViewCurriculumLinksView(props: ViewCurriculumLinksViewProps): React.ReactElement {\n const {\n hasLoaded,\n preferredCurriculum,\n availableCurriculums,\n nonEmptyCurriculums,\n curriculumLinks,\n updateCurriculum\n } = useCurriculums(props.id);\n\n const [ showLoadingSpinner, setShowLoadingSpinner ] = React.useState(!hasLoaded);\n const [ selectedCurriculum, setSelectedCurriculum ] = React.useState<Presentation>();\n\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n\n const alerts = useAlerts();\n function onChangeCurriculum(curriculumId: string): void {\n const newCurriculum = availableCurriculums.find(c => c.id.toString() === curriculumId);\n\n if (!newCurriculum?.id)\n return;\n\n if (selectedCurriculum?.id?.toString() === newCurriculum?.id?.toString())\n return;\n\n setSelectedCurriculum(newCurriculum);\n setShowLoadingSpinner(true);\n\n const onSuccess = () => {\n AnalyticsHelper.logUserAction({\n id: newCurriculum.id,\n name: newCurriculum.id,\n description: newCurriculum.description,\n videoId: video.data?.id,\n videoName: video.data?.name\n }, {\n entity: EntityType.Presentation,\n actionType: UserAction.Select,\n descriptor: PresentationDescriptor.Curriculum,\n location: LocationContext.PlayPage\n });\n };\n\n const onError = () => {\n // If the request to change curriculum fails, we reset the select state and alert the user\n setSelectedCurriculum(selectedCurriculum);\n setShowLoadingSpinner(false);\n alerts.error(getPhrase('updateFailed'));\n };\n\n updateCurriculum(newCurriculum, onSuccess, onError);\n }\n\n React.useEffect(() => {\n if (!hasLoaded)\n return;\n\n if (!selectedCurriculum)\n setSelectedCurriculum(preferredCurriculum ?? ArrayHelper.first(availableCurriculums));\n\n setShowLoadingSpinner(false);\n }, [ preferredCurriculum?.id, hasLoaded ]);\n\n return (\n <Popup\n title={getPhrase('heading')}\n closePopup={props.closePopup}\n size='lg'\n >\n <div className='mb-3 mx-2'>\n {!!nonEmptyCurriculums?.length && (\n <DynamicWidget\n collection={nonEmptyCurriculums}\n childClassName='flex-shrink-0'\n childComponent={props => {\n return (\n <CurriculumLinkItem\n {...props}\n selected={selectedCurriculum?.id?.toString() === props.data.id.toString()}\n onChangeCurriculum={onChangeCurriculum}\n />\n );\n }}\n partialLoadingComponent={() => <PartialTagItem />}\n widgetDataDeps={[selectedCurriculum?.id?.toString()]}\n />\n )}\n </div>\n\n {!showLoadingSpinner ? (\n <div className='pb-3'>\n <CurriculumLinks\n curriculumLinks={curriculumLinks}\n emptyStateUrl={ImageUrls.EmptyStates.CURRICULUM_LINKS}\n onChangeCurriculum={onChangeCurriculum}\n />\n </div>\n ) : (\n <div className='d-flex justify-content-center align-items-center py-5'>\n <Spinner as='div' animation='border' role='status' />\n </div>\n )}\n\n <PopupButtons>\n <PopupButtons.Submit variant='dark' onClick={props.closePopup} text={getPhrase('close')} />\n </PopupButtons>\n </Popup>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"curriculumSubject\":\"GvGYH\",\"curriculumSet\":\"d7RK0\",\"areaLeafSet\":\"XRTAe\",\"closeButton\":\"N3l5Q\",\"heading\":\"hAxR4\",\"leafDescriptionOnly\":\"h66ke\",\"dropdown\":\"CsG6G\",\"tag\":\"rdLqY\",\"cover\":\"etwaD\",\"active\":\"aDLMe\",\"selected\":\"BMrSd\"};","// extracted by mini-css-extract-plugin\nexport default {\"tagList\":\"Zw6d9\",\"disabled\":\"jlL1c\",\"partialTag\":\"too_N\",\"badge\":\"OjtN8\",\"close\":\"X9joI\"};"],"names":["CurriculumLinkItem","props","curriculumTag","data","key","id","className","selected","onClick","onChangeCurriculum","toString","src","cover","url","size","alt","name","BRACKET_SEGMENT_REGEX","namespace","BASE_PILL_CLASS","CurriculumLeaf","getCurriculumCodeClass","baseClass","leaf","uiContainsCodes","codeRef","current","width","getBoundingClientRect","trySetMaxCodeWidth","description","style","minWidth","codeWidth","ref","phrase","dangerouslySetInnerHTML","__html","CurriculumSubject","audienceSegment","subjectSegment","audienceBracketSegments","areaAndLeafSets","getLeafStyleClass","linkSet","areasAndLeaves","forEach","areaAndLeafSet","areaText","map","ca","join","push","match","Object","keys","i","CurriculumLinks","setCodeWidth","showOtherCurriculums","setShowOtherCurriculums","loadingOther","setLoadingOther","curriculumTags","setCurriculumTags","currentVal","checkAllCurriculums","curriculumLinks","length","then","curriculumLinkSets","newSet","subject","audience","areas","leaves","curriculumObj","type","emptyStateUrl","t","linkSetKey","getPhrase","CurriculumLinksEmptyState","altText","PartialCurriculumLinkSection","PartialCurriculumLinks","PartialTagItem","tagClass","classNames","LanguageService","SeeMore","AppLink","appLink","analyticsData","analyticsOptions","descriptor","WidgetHeader","hasDescription","showSeeMoreLink","blankImage","Image","DragHelper","event","dataTransfer","setDragImage","FunctionHelper","isTouchScreen","UserAgentHelper","SlidingListContainer","listenerProps","xPosition","measurement","dragPercentage","children","positionType","onDrag","onDragEnd","onTouchMove","onTouchEnd","percentageDragged","position","CssMeasurement","C","transform","transition","draggable","onDragStart","onDragOver","onTouchMoveCapture","onTouchEndCapture","WidgetButtonDirection","WidgetButton","isLeft","direction","Left","arrowSvg","hide","state","contents","paddingBottom","viewableItems","height","useGradientBackdrop","leftGradientClassName","rightGradientClassName","hideExtendedClickableArea","role","leftButtonClassName","rightButtonClassName","hoverText","SvgContainer","svgName","S","CurriculumType","WidgetInteraction","useGetMediaQueryString","isXS","isSM","isMD","isLG","isXL","isXXL","currentString","ViewCurriculumLinksView","hasLoaded","preferredCurriculum","availableCurriculums","nonEmptyCurriculums","updateCurriculum","showLoadingSpinner","setShowLoadingSpinner","selectedCurriculum","setSelectedCurriculum","video","alerts","curriculumId","newCurriculum","find","c","videoId","videoName","entity","actionType","location","error","title","closePopup","collection","childClassName","childComponent","partialLoadingComponent","widgetDataDeps","as","animation","variant","text"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2137],{38502:(e,a,t)=>{t.d(a,{r:()=>m});var n=t(32735),s=t(49985),i=t(36848),r=t(18559),c=t(11607),l=t(83914),o=t(87432);function u(e){return n.createElement(n.Fragment,null,!!e.tab.svgName&&n.createElement("div",{className:e.tab.name?"pe-1":""},n.createElement(l.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&n.createElement("div",{className:"ps-2"},n.createElement(r.C,{type:r.g.Count,data:e.tab.count})))}function m(e){var a;return n.createElement("nav",{className:null!==(a=e.className)&&void 0!==a?a:"",ref:e.containerRef},n.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(o.Z.pillTabSelector,"\n ").concat(e.borderRadius?o.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,a){return n.createElement("li",{className:"\n p-0 ".concat(o.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?o.Z.minWidth:""," ").concat(e.className,"\n "),key:a},e.appLink?n.createElement(i.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(o.Z.tabLink,"\n ")},n.createElement(u,{tab:e})):n.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(o.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&s.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},n.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},97990:(e,a,t)=>{t.d(a,{t:()=>p});var n=t(32735),s=t(81886),i=t(23481),r=t(65858),c=t(38502),l=t(14070),o=t(97291),u="settings.staffManagerTabs",m=i.T.encloseNamespace(u),d={staffManager:{application:o.O.USER_MANAGER,action:l.e.UserManager.STAFF},inviteRequests:{application:o.O.USER_MANAGER,action:l.e.UserManager.ACCESS_REQUESTS}};function p(e){var a=e.active;return n.createElement("div",{className:"mb-3"},n.createElement(c.r,{tabs:[{name:m("staffManager"),appLink:d.staffManager,active:"staff-manager"===a,analyticsData:{name:m("staffManager"),url:s.Q.C$.getHref(d.staffManager)},analyticsOptions:{actionType:r.Vw.Click,entity:r.py.Url,location:r.LZ.MagicTabs}},{name:m("inviteRequests"),appLink:d.inviteRequests,active:"invite-requests"===a,analyticsData:{name:i.T.getPhrase(u,"inviteRequests"),url:s.Q.C$.getHref(d.inviteRequests)},analyticsOptions:{actionType:r.Vw.Click,entity:r.py.Url,location:r.LZ.MagicTabs}}]}))}},90314:(e,a,t)=>{t.r(a),t.d(a,{StaffManagerView:()=>B});var n=t(32735),s=t(70680),i=t(23481),r=t(20354),c=t(65858),l=t(88822),o=t(46456),u=t(26055),m=t(43820),d=t(56138),p=t(39739),f=t(37395),E=t(99705),v=t(76881),g=t(39151),y=t(70145),S=t(44538),N=t(31949),h=t(69883),b=t(91286),R=t(79612),k=t(37802),T=t(12778),x=t(99742),U=t(97990),M=t(48327),A=t(47288),P=t(51180),C=t(18087),L=t(23232),q=t(83345),w=t(35223),F=t(14070),O=t(97291),_="userManager.staffManagerEmptyState",I=v.Y.Staff;function Z(){return n.createElement(q.D.Provider,{value:_},n.createElement(L.u,null,n.createElement(L.u.Image,{src:x.W.EmptyStates.UserManager.STAFF}),n.createElement(L.u.Heading,null,n.createElement(q.x,{phrase:"heading"})),n.createElement(L.u.Info,null,n.createElement(q.x,{phrase:"info"})),n.createElement("div",{className:"d-flex justify-content-center align-items-center"},n.createElement("div",{className:"px-1"},n.createElement(L.u.Cta,{text:i.T.getPhrase(_,"addNew"),icon:w.vn.Plus,appLink:{application:O.O.USER_MANAGER,action:F.e.UserManager.CREATE_USER,params:{userType:I}}})),n.createElement("div",{className:"px-1"},n.createElement(L.u.Cta,{text:i.T.getPhrase(_,"uploadAList"),icon:w.vn.Upload,appLink:{application:O.O.USER_MANAGER,action:F.e.UserManager.USER_UPLOAD_POPUP,params:{userType:I}}})))))}var V=i.T.encloseNamespace("userManager.staffManager"),D=v.Y.Staff;function B(e){var a,t,i,v,L,q,w,F;(0,R.M)({title:V("pageTitle")});var O=(0,s.I0)(),_=(0,h.Z)(),I=(0,C.Y)(D,e.queryParams),B=(0,k.r)(c.LZ.Settings).domainSettings,H=r.a.useBasicFetch(S.K.getRostering()),G=r.a.useBasicFetch(N.N.currentUser()),W=r.a.useBasicFetch(g.L.config()),Q=r.a.useBasicFetch(!!G.data&&A.N.getIdentityProviders(G.data.customerId)),j=r.a.useBasicFetch(y.h.userProducts()),Y=(null===(a=H.data)||void 0===a?void 0:a.status)&&"None"!==H.data.status,J=(0,P.T)(G.data,e.queryParams,D),$=J.data?"results"in J.data?J.data.results:J.data.data:null;r.a.useBasicFetch(A.N.authenticationMethods(null!==(i=null===(t=null==$?void 0:$.map((function(e){return e.id})))||void 0===t?void 0:t.sort())&&void 0!==i?i:[]));var z=(0,d.x)({userType:D,queryParams:e.queryParams,getUserCountRequest:A.N.userCount});(0,b.v)(J);var K=p.P.showEmptyState(J,e.queryParams);return n.createElement(u.A.Provider,{value:m.a.Primary},n.createElement("div",{className:"px-3"},n.createElement(o.g,{userType:D,appLinks:I,users:$,userCount:z.data,hasRostering:Y}),B&&!Y&&n.createElement(U.t,{active:"staff-manager"}),K?n.createElement(Z,null):n.createElement("main",{className:"py-3 clearfix"},n.createElement(l.G,{users:$,userType:D,config:W.data,currentUser:G.data,appLinks:I,searchEmptyState:x.W.EmptyStates.UserManager.SEARCH,onClickSendResetEmail:function(e){r.a.fetch(O,A.N.sendPasswordResetEmail(e.id,G.data.customerId,(function(){_.success(V("passwordResetEmailSuccess",{email:e.email,escapeText:!0}))}),(function(){_.error(V("passwordResetEmailError",{email:e.email,escapeText:!0}))})))},onClickResendActivationEmail:function(e){r.a.fetch(O,A.N.resendActivationEmail(e.id,(function(){_.success(V("resendActivationEmailSuccess",{email:e.email,escapeText:!0}))}),(function(){_.error(V("resendActivationEmailError",{email:e.email,escapeText:!0}))})))},onClickSendVerificationEmail:function(e){r.a.fetch(O,A.N.resendVerificationEmail(e.id,G.data.customerId,(function(){_.success(V("resendVerificationEmailSuccess",{email:e.email,escapeText:!0}))}),(function(){_.error(V("resendVerificationEmailError",{email:e.email,escapeText:!0}))})))},totalUsers:null===(v=z.data)||void 0===v?void 0:v.count,queryParams:e.queryParams,fetchUserIds:function(a){r.a.fetch(O,A.N.getSearchUserIds(G.data.customerId,G.data.id,D,e.queryParams,a))},ssoHelpArticle:T.o.getLiteArticle(E.b.EditSsoAccounts),hasSso:!!(null===(L=Q.data)||void 0===L?void 0:L.length),userRequest:N.N.getUserIdByQuery,selectWithSpreadsheetTemplate:M.d,hasRostering:Y,products:null!==(q=j.data.map((function(e){return e.id})))&&void 0!==q?q:[]}),!!(null===(F=null===(w=J.data)||void 0===w?void 0:w.pagination)||void 0===F?void 0:F.cursors)&&n.createElement(f.t,{appLink:I.search,cursors:J.data.pagination.cursors,buttonVariant:"outline-dark",className:"py-2 float-end"}))))}},87432:(e,a,t)=>{t.d(a,{Z:()=>n});const n={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
2
- //# sourceMappingURL=2137-093f479ff9-lite.chunk.js.map
2
+ //# sourceMappingURL=2137-2e78e535ad-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2137-093f479ff9-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/projects/lite/src/apps/user-manager/components/staff-manager-tabs/StaffManagerTabs.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/staff-manager/empty-state/LiteStaffManagerEmptyState.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/staff-manager/LiteStaffManagerView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { StaffManagerAppLinks } from 'apps/user-manager/interfaces/StaffManagerAppLinks';\n\nconst namespace = 'settings.staffManagerTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst staffManagerAppLinks: StaffManagerAppLinks = {\n staffManager: {\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STAFF\n },\n inviteRequests: {\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.ACCESS_REQUESTS\n }\n};\n\ninterface StaffManagerTabsProps {\n active: 'staff-manager' | 'invite-requests'\n}\n\nexport function StaffManagerTabs(props: StaffManagerTabsProps): JSX.Element {\n const { active } = props;\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={[{\n name: getPhrase('staffManager'),\n appLink: staffManagerAppLinks.staffManager,\n active: active === 'staff-manager',\n analyticsData: {\n name: getPhrase('staffManager'),\n url: Core.AppLinkHelper.getHref(staffManagerAppLinks.staffManager)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('inviteRequests'),\n appLink: staffManagerAppLinks.inviteRequests,\n active: active === 'invite-requests',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'inviteRequests'),\n url: Core.AppLinkHelper.getHref(staffManagerAppLinks.inviteRequests)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }]}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'userManager.staffManagerEmptyState';\nconst userType = UserGroup.Staff;\n\nexport function StaffManagerEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.UserManager.STAFF} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <div className='d-flex justify-content-center align-items-center'>\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addNew')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.CREATE_USER,\n params: { userType }\n }}\n />\n </div>\n\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'uploadAList')}\n icon={cvSvgLibrary.Upload}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.USER_UPLOAD_POPUP,\n params: { userType }\n }}\n />\n </div>\n </div>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ManageUsers } from 'libs/shared/apps/user-manager/components/manage-users/ManageUsers';\nimport { UserManagerHeader } from 'libs/shared/apps/user-manager/components/user-manager-header/UserManagerHeader';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useFetchUserCount } from 'libs/shared/apps/user-manager/hooks/useFetchUserCount';\nimport { GetIdentityProvidersResponse } from 'libs/shared/apps/user-manager/interfaces/GetIdentityProvidersResponse';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Product, RosteringResponse, User } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { StaffManagerTabs } from 'apps/user-manager/components/staff-manager-tabs/StaffManagerTabs';\nimport { SelectWithSpreadsheetTemplates } from 'apps/user-manager/constants/SelectWithSpreadsheetTemplate';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { useFetchUsers } from 'apps/user-manager/hooks/useFetchUsers';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nimport { StaffManagerEmptyState } from './empty-state/LiteStaffManagerEmptyState';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.staffManager');\n\nconst userType = UserGroup.Staff;\n\ninterface StaffManagerViewProps {\n queryParams: UserManagerQueryParams;\n}\n\nexport function StaffManagerView(props: StaffManagerViewProps): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const appLinks = getUserManagerAppLinks(userType, props.queryParams);\n const { domainSettings } = useSettings(LocationContext.Settings);\n\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const identityProviders = Flight.useBasicFetch<GetIdentityProvidersResponse>(!!currentUser.data &&\n UserManagerRequests.getIdentityProviders(currentUser.data.customerId));\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n\n const staffResponse = useFetchUsers(\n currentUser.data,\n props.queryParams,\n userType\n );\n\n const staff = staffResponse.data ? (('results' in staffResponse.data) ? staffResponse.data.results : staffResponse.data.data) : null;\n\n Flight.useBasicFetch(UserManagerRequests.authenticationMethods(staff?.map(s => s.id)?.sort() ?? []));\n\n const userCount = useFetchUserCount({\n userType,\n queryParams: props.queryParams,\n getUserCountRequest: UserManagerRequests.userCount\n });\n\n useHandleObjectError(staffResponse);\n\n function onClickResendActivationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendActivationEmail(user.id, () => {\n alerts.success(getPhrase('resendActivationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendActivationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function onClickSendResetEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.sendPasswordResetEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('passwordResetEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('passwordResetEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function fetchUserIds(success: (userIds: string[]) => void): void {\n Flight.fetch(dispatch, UserManagerRequests.getSearchUserIds(\n currentUser.data.customerId,\n currentUser.data.id,\n userType,\n props.queryParams,\n success\n ));\n }\n\n function onClickResendVerificationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendVerificationEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('resendVerificationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendVerificationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n const showEmptyState = UserManagerHelper.showEmptyState(staffResponse, props.queryParams);\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <div className='px-3'>\n <UserManagerHeader\n userType={userType}\n appLinks={appLinks}\n users={staff}\n userCount={userCount.data}\n hasRostering={hasRostering}\n />\n\n {domainSettings && !hasRostering && <StaffManagerTabs active='staff-manager'/>}\n\n {!showEmptyState ? (\n <main className='py-3 clearfix'>\n <ManageUsers\n users={staff}\n userType={userType}\n config={config.data}\n currentUser={currentUser.data}\n appLinks={appLinks}\n searchEmptyState={ImageUrls.EmptyStates.UserManager.SEARCH}\n onClickSendResetEmail={onClickSendResetEmail}\n onClickResendActivationEmail={onClickResendActivationEmail}\n onClickSendVerificationEmail={onClickResendVerificationEmail}\n totalUsers={userCount.data?.count}\n queryParams={props.queryParams}\n fetchUserIds={fetchUserIds}\n ssoHelpArticle={ArticleHelper.getLiteArticle(LiteSupportArticle.EditSsoAccounts)}\n hasSso={!!identityProviders.data?.length}\n userRequest={UserRequests.getUserIdByQuery}\n selectWithSpreadsheetTemplate={SelectWithSpreadsheetTemplates}\n hasRostering={hasRostering}\n products={products.data.map(p => p.id) ?? []}\n />\n {!!staffResponse.data?.pagination?.cursors && (\n <Pagination\n appLink={appLinks.search}\n cursors={staffResponse.data.pagination.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n />\n )}\n </main>\n ) : <StaffManagerEmptyState />}\n </div>\n </UserManagerClientContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","namespace","getPhrase","staffManagerAppLinks","staffManager","application","action","inviteRequests","StaffManagerTabs","url","actionType","entity","location","userType","UserGroup","StaffManagerEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","text","LanguageService","icon","params","StaffManagerView","useSetPageMetadata","title","dispatch","alerts","appLinks","queryParams","domainSettings","useSettings","rostering","RosteringRequests","currentUser","UserRequests","config","ConfigRequests","identityProviders","UserManagerRequests","customerId","products","ProductRequests","hasRostering","status","staffResponse","useFetchUsers","staff","results","s","id","sort","userCount","useFetchUserCount","getUserCountRequest","showEmptyState","UserManagerHelper","UserManagerClientContext","UserManagerClient","UserManagerHeader","users","ManageUsers","searchEmptyState","onClickSendResetEmail","user","success","email","escapeText","error","onClickResendActivationEmail","onClickSendVerificationEmail","totalUsers","fetchUserIds","ssoHelpArticle","ArticleHelper","hasSso","length","userRequest","selectWithSpreadsheetTemplate","SelectWithSpreadsheetTemplate","p","pagination","cursors","Pagination","search","buttonVariant"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2137-2e78e535ad-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/projects/lite/src/apps/user-manager/components/staff-manager-tabs/StaffManagerTabs.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/staff-manager/empty-state/LiteStaffManagerEmptyState.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/staff-manager/LiteStaffManagerView.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss"],"sourcesContent":["import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { StaffManagerAppLinks } from 'apps/user-manager/interfaces/StaffManagerAppLinks';\n\nconst namespace = 'settings.staffManagerTabs';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst staffManagerAppLinks: StaffManagerAppLinks = {\n staffManager: {\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STAFF\n },\n inviteRequests: {\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.ACCESS_REQUESTS\n }\n};\n\ninterface StaffManagerTabsProps {\n active: 'staff-manager' | 'invite-requests'\n}\n\nexport function StaffManagerTabs(props: StaffManagerTabsProps): JSX.Element {\n const { active } = props;\n \n return (\n <div className='mb-3'>\n <PillTabSelector\n tabs={[{\n name: getPhrase('staffManager'),\n appLink: staffManagerAppLinks.staffManager,\n active: active === 'staff-manager',\n analyticsData: {\n name: getPhrase('staffManager'),\n url: Core.AppLinkHelper.getHref(staffManagerAppLinks.staffManager)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }, {\n name: getPhrase('inviteRequests'),\n appLink: staffManagerAppLinks.inviteRequests,\n active: active === 'invite-requests',\n analyticsData: {\n name: LanguageService.getPhrase(namespace, 'inviteRequests'),\n url: Core.AppLinkHelper.getHref(staffManagerAppLinks.inviteRequests)\n },\n analyticsOptions: {\n actionType: UserAction.Click,\n entity: EntityType.Url,\n location: LocationContext.MagicTabs\n }\n }]}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'userManager.staffManagerEmptyState';\nconst userType = UserGroup.Staff;\n\nexport function StaffManagerEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.UserManager.STAFF} />\n\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='info' /></EmptyState.Info>\n\n <div className='d-flex justify-content-center align-items-center'>\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addNew')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.CREATE_USER,\n params: { userType }\n }}\n />\n </div>\n\n <div className='px-1'>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'uploadAList')}\n icon={cvSvgLibrary.Upload}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.USER_UPLOAD_POPUP,\n params: { userType }\n }}\n />\n </div>\n </div>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { ManageUsers } from 'libs/shared/apps/user-manager/components/manage-users/ManageUsers';\nimport { UserManagerHeader } from 'libs/shared/apps/user-manager/components/user-manager-header/UserManagerHeader';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { useFetchUserCount } from 'libs/shared/apps/user-manager/hooks/useFetchUserCount';\nimport { GetIdentityProvidersResponse } from 'libs/shared/apps/user-manager/interfaces/GetIdentityProvidersResponse';\nimport { UserManagerQueryParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserManagerQueryParams';\nimport { UserManagerHelper } from 'libs/shared/apps/user-manager/utils/UserManagerHelper';\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { RosteringRequests } from 'libs/shared/flight-requests/RosteringRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, Product, RosteringResponse, User } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { StaffManagerTabs } from 'apps/user-manager/components/staff-manager-tabs/StaffManagerTabs';\nimport { SelectWithSpreadsheetTemplates } from 'apps/user-manager/constants/SelectWithSpreadsheetTemplate';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\nimport { useFetchUsers } from 'apps/user-manager/hooks/useFetchUsers';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nimport { StaffManagerEmptyState } from './empty-state/LiteStaffManagerEmptyState';\n\nconst getPhrase = LanguageService.encloseNamespace('userManager.staffManager');\n\nconst userType = UserGroup.Staff;\n\ninterface StaffManagerViewProps {\n queryParams: UserManagerQueryParams;\n}\n\nexport function StaffManagerView(props: StaffManagerViewProps): JSX.Element {\n useSetPageMetadata({ title: getPhrase('pageTitle') });\n const dispatch = useDispatch();\n const alerts = useAlerts();\n const appLinks = getUserManagerAppLinks(userType, props.queryParams);\n const { domainSettings } = useSettings(LocationContext.Settings);\n\n const rostering = Flight.useBasicFetch<RosteringResponse>(RosteringRequests.getRostering());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const identityProviders = Flight.useBasicFetch<GetIdentityProvidersResponse>(!!currentUser.data &&\n UserManagerRequests.getIdentityProviders(currentUser.data.customerId));\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const hasRostering = rostering.data?.status && rostering.data.status !== 'None';\n\n const staffResponse = useFetchUsers(\n currentUser.data,\n props.queryParams,\n userType\n );\n\n const staff = staffResponse.data ? (('results' in staffResponse.data) ? staffResponse.data.results : staffResponse.data.data) : null;\n\n Flight.useBasicFetch(UserManagerRequests.authenticationMethods(staff?.map(s => s.id)?.sort() ?? []));\n\n const userCount = useFetchUserCount({\n userType,\n queryParams: props.queryParams,\n getUserCountRequest: UserManagerRequests.userCount\n });\n\n useHandleObjectError(staffResponse);\n\n function onClickResendActivationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendActivationEmail(user.id, () => {\n alerts.success(getPhrase('resendActivationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendActivationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function onClickSendResetEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.sendPasswordResetEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('passwordResetEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('passwordResetEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n function fetchUserIds(success: (userIds: string[]) => void): void {\n Flight.fetch(dispatch, UserManagerRequests.getSearchUserIds(\n currentUser.data.customerId,\n currentUser.data.id,\n userType,\n props.queryParams,\n success\n ));\n }\n\n function onClickResendVerificationEmail(user: User): void {\n Flight.fetch(dispatch, UserManagerRequests.resendVerificationEmail(user.id, currentUser.data.customerId, () => {\n alerts.success(getPhrase('resendVerificationEmailSuccess', { email: user.email, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('resendVerificationEmailError', { email: user.email, escapeText: true }));\n }));\n }\n\n const showEmptyState = UserManagerHelper.showEmptyState(staffResponse, props.queryParams);\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <div className='px-3'>\n <UserManagerHeader\n userType={userType}\n appLinks={appLinks}\n users={staff}\n userCount={userCount.data}\n hasRostering={hasRostering}\n />\n\n {domainSettings && !hasRostering && <StaffManagerTabs active='staff-manager'/>}\n\n {!showEmptyState ? (\n <main className='py-3 clearfix'>\n <ManageUsers\n users={staff}\n userType={userType}\n config={config.data}\n currentUser={currentUser.data}\n appLinks={appLinks}\n searchEmptyState={ImageUrls.EmptyStates.UserManager.SEARCH}\n onClickSendResetEmail={onClickSendResetEmail}\n onClickResendActivationEmail={onClickResendActivationEmail}\n onClickSendVerificationEmail={onClickResendVerificationEmail}\n totalUsers={userCount.data?.count}\n queryParams={props.queryParams}\n fetchUserIds={fetchUserIds}\n ssoHelpArticle={ArticleHelper.getLiteArticle(LiteSupportArticle.EditSsoAccounts)}\n hasSso={!!identityProviders.data?.length}\n userRequest={UserRequests.getUserIdByQuery}\n selectWithSpreadsheetTemplate={SelectWithSpreadsheetTemplates}\n hasRostering={hasRostering}\n products={products.data.map(p => p.id) ?? []}\n />\n {!!staffResponse.data?.pagination?.cursors && (\n <Pagination\n appLink={appLinks.search}\n cursors={staffResponse.data.pagination.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n />\n )}\n </main>\n ) : <StaffManagerEmptyState />}\n </div>\n </UserManagerClientContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};"],"names":["TabContents","props","tab","svgName","className","name","count","type","data","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","map","index","active","key","appLink","analyticsData","analyticsOptions","onClick","onSelect","onSelectTab","defaultProps","namespace","getPhrase","staffManagerAppLinks","staffManager","application","action","inviteRequests","StaffManagerTabs","url","actionType","entity","location","userType","UserGroup","StaffManagerEmptyState","value","EmptyState","src","ImageUrls","Text","phrase","text","LanguageService","icon","params","StaffManagerView","useSetPageMetadata","title","dispatch","alerts","appLinks","queryParams","domainSettings","useSettings","rostering","RosteringRequests","currentUser","UserRequests","config","ConfigRequests","identityProviders","UserManagerRequests","customerId","products","ProductRequests","hasRostering","status","staffResponse","useFetchUsers","staff","results","s","id","sort","userCount","useFetchUserCount","getUserCountRequest","showEmptyState","UserManagerHelper","UserManagerClientContext","UserManagerClient","UserManagerHeader","users","ManageUsers","searchEmptyState","onClickSendResetEmail","user","success","email","escapeText","error","onClickResendActivationEmail","onClickSendVerificationEmail","totalUsers","fetchUserIds","ssoHelpArticle","ArticleHelper","hasSso","length","userRequest","selectWithSpreadsheetTemplate","SelectWithSpreadsheetTemplate","p","pagination","cursors","Pagination","search","buttonVariant"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2795],{92869:(e,t,a)=>{a.d(t,{t:()=>c});var n=a(48088),r=a(95846),c={preventScrollTop:function(){n.Radio.channel(r.G.SHELL).trigger("prevent:scroll:top")}}},75097:(e,t,a)=>{a.d(t,{U:()=>c});var n=a(32735),r=a(95245);function c(e){var t=e.count,a=void 0===t?6:t;return n.createElement("div",{className:"d-flex"},n.createElement("div",{className:"d-flex ps-1"},Array(a).fill(null).map((function(e,t){return n.createElement("div",{key:t,className:"".concat(r.Z.partialButton," partial-loading-background mx-1")})}))))}},49935:(e,t,a)=>{a.d(t,{Oo:()=>m,b2:()=>d});var n=a(32735),r=a(36848),c=a(86764),l=a(3747),o=a(5859),i=a(35223),s=a(83914),u=function(e){var t=e.breadcrumb,a=t.name,c=t.appLink,l=t.active,o=e.withBackIcon;return n.createElement("li",{className:"breadcrumb-item".concat(l?" active":"")},l?n.createElement("strong",null,a):n.createElement(r.F,{appLink:c},o&&n.createElement(s.x,{svgName:i.vn.ChevronLeft,size:s.S.Small}),n.createElement("span",{className:o?"ms-2":""},a)))},m=function(e){var t=e.breadcrumbs,a=(0,l.a)(c.r.XS),r=null==t?void 0:t.length;return!r||a&&r<2?n.createElement(n.Fragment,null):a?n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},n.createElement(u,{breadcrumb:t[r-2],withBackIcon:!0}))):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return n.createElement(u,{key:t,breadcrumb:e})}))))},d=n.memo((function(e){var t=e.numItems,a=void 0===t?3:t;return(0,l.a)(c.r.XS)?n.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):n.createElement("nav",{"aria-label":"breadcrumb"},n.createElement("ol",{className:"breadcrumb m-0 p-0"},o.u.getPartialLoadingItems({numItems:a}).map((function(e,t){var a=e.width;return n.createElement("li",{key:t,className:"breadcrumb-item"},n.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:a},dangerouslySetInnerHTML:{__html:"&nbsp"}}))}))))}))},37395:(e,t,a)=>{a.d(t,{t:()=>m});var n=a(32735),r=a(98269),c=a(92869),l=a(49985),o=a(65858),i=a(36848),s=a(83345);function u(e,t,a){var n;if(!t)return null;var r=null!==(n=e.params)&&void 0!==n?n:{};return a?(null==r?void 0:r.previous)?{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null==r?void 0:r.previous,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:null,previous:null})}:{application:e.application,action:e.action,args:e.args,params:Object.assign(Object.assign({},r),{cursor:t,previous:r.cursor})}}function m(e){var t=e.appLink,a=e.cursors,m=e.className,d=e.buttonVariant,p=e.prevHack,g=e.scrollTop,v=e.onClick;function b(e){t&&!g&&c.t.preventScrollTop(),l.k.logUserAction({page:e},{location:o.LZ.Pagination,entity:o.py.Pagination,actionType:o.Vw.Navigate}),v&&v(a[e])}return t?n.createElement(s.D.Provider,{value:"shared.pagination"},n.createElement("div",{className:m},n.createElement(i.F,{appLink:u(t,a.previous,p),className:"btn btn-".concat(d," me-1 ").concat(a.previous?"":"disabled"),onClick:function(){return b("previous")},style:{display:"inline-block"}},n.createElement(s.x,{phrase:"previous"})),n.createElement(i.F,{appLink:u(t,a.next),className:"btn btn-".concat(d," ").concat(a.next?"":"disabled"),onClick:function(){return b("next")},style:{display:"inline-block"}},n.createElement(s.x,{phrase:"next"})))):n.createElement(s.D.Provider,{value:"shared.pagination"},n.createElement("div",{className:m},n.createElement(r.Z,{variant:d,className:"me-1 ".concat(a.previous?"":"disabled"),onClick:function(){return b("previous")}},n.createElement(s.x,{phrase:"previous"})),n.createElement(r.Z,{variant:d,className:"btn ".concat(a.next?"":"disabled"),onClick:function(){return b("next")}},n.createElement(s.x,{phrase:"next"}))))}m.defaultProps={className:"py-2",buttonVariant:"secondary"}},81514:(e,t,a)=>{a.d(t,{V:()=>c});var n=a(86764),r=a(3747);function c(){var e=(0,r.a)(n.r.XS),t=(0,r.a)(n.r.SM),a=(0,r.a)(n.r.MD),c=(0,r.a)(n.r.LG),l=(0,r.a)(n.r.XL),o=(0,r.a)(n.r.XXL),i=n.r.LG;return e&&(i=n.r.XS),t&&(i=n.r.SM),a&&(i=n.r.MD),c&&(i=n.r.LG),l&&(i=n.r.XL),o&&(i=n.r.XXL),i}},91286:(e,t,a)=>{a.d(t,{v:()=>l});var n=a(32735),r=a(94644);function c(e){return e.map((function(e){return e.statusCode})).join(":")}function l(e,t,a){var l=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){l.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[c(l),t,a])}},299:(e,t,a)=>{a.d(t,{X:()=>l});var n=a(32735),r=a(69217),c=a(94631),l=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=t.idField,l=void 0===a?"id":a,o=t.persistNamespace,i=t.initialState?t.initialState:new Map,s=n.useRef(i),u=(0,r.N)(),m=(0,c.D)(e),d=(0,c.D)(o);function p(){s.current.clear(),u()}function g(e){return"number"==typeof e?e=e.toString():"string"!=typeof e&&(e=e[l].toString()),s.current.get(e)}function v(){return!!(null==e?void 0:e.length)&&e.every(g)}function b(e){e.forEach((function(e){s.current.set(e,!0)})),u()}return n.useEffect((function(){t.initialState||o&&d===o||(null==m?void 0:m.map((function(e){return e[l]})).join())!==(null==e?void 0:e.map((function(e){return e[l]})).join())&&p()}),[m,d,e,t.initialState]),n.useEffect((function(){var e;(null===(e=t.preselectedIds)||void 0===e?void 0:e.length)&&b(t.preselectedIds)}),[]),{onToggleBulk:function(){var t=!v();e.forEach((function(e){t?s.current.set(e[l].toString(),!0):s.current.delete(e[l].toString())})),u()},onToggleItem:function(e){var t=!s.current.get(e.toString());t?s.current.set(e.toString(),t):s.current.delete(e.toString()),u()},getSelected:function(){return Array.from(s.current.keys())},isChecked:g,bulkChecked:v(),deselectAll:function(){(null==e?void 0:e.length)&&(e.forEach((function(e){s.current.delete(e[l].toString())})),u())},hasSomeSelections:function(){return!!(null==e?void 0:e.length)&&!!e.find((function(e){return g(e)}))},setSelected:b,getSelectedCount:function(){return s.current.size},reset:p,getMap:function(){return s.current}}}},94631:(e,t,a)=>{a.d(t,{D:()=>r});var n=a(32735);function r(e){var t=n.useRef();return n.useEffect((function(){t.current=e})),t.current}},58418:(e,t,a)=>{a.r(t),a.d(t,{UserAuditLogView:()=>te});var n=a(32735),r=a(23481),c=a(57900),l=a(20354),o=a(75097),i=a(49935);const s={partialHeading:"rfiJl",partialJobCount:"h8k_u",partialCheckbox:"HkuOS",partialExportButton:"Iul7S",row:"mwigG",checkboxColumn:"Z5jLG",actionColumn:"rLxYh",usersColumn:"QZzab",dateColumn:"Wf_Jp",performedByColumn:"Ubtmj",seeMoreColumn:"XdP6u",heading:"kRMMH",action:"DvDvW",users:"goKpg",date:"ejYGb",performedBy:"NhjyL"};function u(){return n.createElement("div",{className:"d-flex striped-row rounded py-3 ".concat(s.row)},n.createElement("div",{className:"".concat(s.checkboxColumn," d-flex justify-content-center")},n.createElement("div",{className:"partial-loading-background ".concat(s.partialCheckbox," ms-0")})),n.createElement("div",{className:"".concat(s.actionColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.action)})),n.createElement("div",{className:"".concat(s.usersColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.users)})),n.createElement("div",{className:"".concat(s.dateColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.date)})),n.createElement("div",{className:"".concat(s.performedByColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.performedBy)})),n.createElement("div",{className:"".concat(s.seeMoreColumn)}," "))}function m(){return n.createElement("div",{className:"d-flex py-2 mb-1"},n.createElement("div",{className:"".concat(s.checkboxColumn)}," "),n.createElement("div",{className:"".concat(s.actionColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),n.createElement("div",{className:"".concat(s.usersColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),n.createElement("div",{className:"".concat(s.dateColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),n.createElement("div",{className:"".concat(s.performedByColumn)},n.createElement("div",{className:"partial-loading-background ".concat(s.heading)})),n.createElement("div",{className:"".concat(s.seeMoreColumn)}," "))}function d(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"mb-3 mt-n1"},n.createElement(m,null),n.createElement("div",{className:"striped-list no-full-width"},n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null),n.createElement(u,null))))}function p(){return n.createElement(n.Fragment,null,n.createElement("div",{className:"partial-loading-background mb-2 ".concat(s.partialHeading)}),n.createElement("div",{className:"pb-3"},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement(i.b2,null),n.createElement("div",{className:"partial-loading-background ".concat(s.partialJobCount)}))),n.createElement("div",{className:"d-flex align-items-center pb-2"},n.createElement("div",{className:"partial-loading-background ".concat(s.partialCheckbox)}),n.createElement("div",{className:"ms-4 ps-3"},n.createElement(o.U,{count:3})),n.createElement("div",{className:"ms-auto partial-loading-background ".concat(s.partialExportButton)})),n.createElement(d,null))}var g=a(89422),v=a(89965),b=a(37395),f=a(2102),E=a(83345),y=a(76881),h=a(69883),k=a(299),N=a(75795),S=a(65858),C=a(93251),x=a(97514),w="userManager.userAuditLogFilters";function j(e){var t=[x.x$.SortBy([{id:"newest",name:r.T.getPhrase(w,"newest"),default:!0},{id:"oldest",name:r.T.getPhrase(w,"oldest")}]),x.x$.BulkActionType(),x.x$.UserType()];return n.createElement(C.J,{queryParams:e.queryParams,mainFilters:t,appLink:e.appLinks.auditLog,analyticsOptions:{entity:S.py.BatchJob,location:S.LZ.UserAuditLog},hideHeading:!0,hideDivider:!0,constantIndices:[]})}var L=a(69674),T=a(110),A=a(149),M=a(36848),B=a(89725),I=a(83914),O=a(86794);const P={seeMore:"uymuO"};function R(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var U="userManager.userAuditLogTable",J=r.T.encloseNamespace(U),D={table:"striped-list no-full-width pb-3",header:"fw-semibold pb-1",headerCell:"px-2 py-1",row:"striped-row rounded audit-log-row",cell:"d-flex align-items-center py-3 px-2"};function F(e){var t,a,r,c,l=(t=e.jobs.data,a=e.isChecked,t.map((function(e){var t=T.O.format(e.dateCreated,"DD/MM/YYYY, hh:mmA");return{id:e.id,checked:a(e.id),actionType:A.b.mapJobTypeToName(e.type),userType:A.b.mapDataTypeToUserType(e.dataType),date:t,performedBy:{name:e.submitterName,submittedByClickView:e.submittedByClickView}}})));return n.createElement(L.i,{columns:(r=e.appLinks.bulkActionSummary,c=e.onToggleCheckbox,[{Header:"",id:"checkboxes",accessor:function(e){return{id:e.id,checked:e.checked}},Cell:function(e){return n.createElement("div",{className:"text-center mx-auto"},n.createElement(v.X,{id:e.value.id,checked:e.value.checked,onChange:function(){return c(e.value.id)}}))},width:10},{Header:J("action"),accessor:"actionType",id:"actionType",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:20},{Header:J("users"),accessor:"userType",id:"userType",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},function(){switch(t){case y.Y.Learner:return J("students");case y.Y.Staff:return J("staff");case y.Y.Unknown:default:return J("unknown")}}())},width:10},{Header:J("date"),accessor:"date",id:"date",Cell:function(e){var t=e.value;return n.createElement("div",{className:"w-100"},t)},width:20},{Header:J("performedBy"),accessor:"performedBy",id:"performedBy",Cell:function(e){return n.createElement("div",{className:"w-100 d-flex align-items-center"},e.value.submittedByClickView&&n.createElement(O.b,{className:"me-1",size:I.S.Small},n.createElement(B.F,null)),e.value.name)},width:20},{Header:"",accessor:"id",id:"seeMore",Cell:function(e){var t,a,c=e.value;return n.createElement("div",{className:"w-100 d-flex justify-content-end"},n.createElement(M.F,{className:"info-link text-end me-3 ms-auto ".concat(P.seeMore),appLink:Object.assign(Object.assign({},r),{args:(null===(t=r.args)||void 0===t?void 0:t.length)?[].concat((a=r.args,function(e){if(Array.isArray(e))return R(e)}(a)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(a)||function(e,t){if(e){if("string"==typeof e)return R(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?R(e,t):void 0}}(a)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),[c]):[c]})},n.createElement(E.x,{namespace:U,phrase:"seeMore"})))},width:30}]),data:l,theme:D})}var _=a(23232),H="userManager.auditLogEmptyState";function X(e){return n.createElement(_.u,null,n.createElement(_.u.Image,{src:e.imageUrl}),n.createElement(_.u.Heading,null,n.createElement(E.x,{namespace:H,phrase:"heading"})),n.createElement(_.u.Info,null,n.createElement(E.x,{namespace:H,phrase:"info"})))}const Y={bulkCheckbox:"NMw5T"};function G(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}var q="userManager.auditLog",V=r.T.encloseNamespace(q);function Z(e){var t,a,r,l,o=c.SG.get(g.K.AUDIT_LOG_REFERRER_KEY),s=(r=n.useState(!1),l=2,function(e){if(Array.isArray(e))return e}(r)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,c,l,o=[],i=!0,s=!1;try{if(c=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;i=!1}else for(;!(i=(n=c.call(a)).done)&&(o.push(n.value),o.length!==t);i=!0);}catch(e){s=!0,r=e}finally{try{if(!i&&null!=a.return&&(l=a.return(),Object(l)!==l))return}finally{if(s)throw r}}return o}}(r,l)||function(e,t){if(e){if("string"==typeof e)return G(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?G(e,t):void 0}}(r,l)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=s[0],m=s[1],d=(0,k.X)(e.jobs.data),p=(0,h.Z)();return n.createElement(n.Fragment,null,n.createElement("h1",{className:"h2"},n.createElement(E.x,{namespace:q,phrase:"heading"})),n.createElement("div",{className:"pb-3"},n.createElement("div",{className:"d-flex justify-content-between"},n.createElement(i.Oo,{breadcrumbs:[{name:V("settingsBreadcrumb"),appLink:e.appLinks.settings},{name:V(o===y.Y.Learner?"studentManager":"staffManager"),appLink:e.appLinks.userManager},{name:V("heading"),active:!0}]}),n.createElement("p",{className:"mb-0 fw-semibold"},n.createElement(E.x,{namespace:q,phrase:"totalJobs",options:{showing:e.jobs.data.length,smartCount:e.jobs.count}})))),n.createElement("div",{className:"d-flex align-items-center pb-2"},n.createElement(v.X,{className:Y.bulkCheckbox,id:"bulk-audit-log-checkbox",checked:d.bulkChecked,onChange:d.onToggleBulk,indeterminate:d.hasSomeSelections()}),n.createElement("div",{className:"ms-4 ps-1"},n.createElement(j,{queryParams:e.queryParams,appLinks:e.appLinks})),n.createElement(f.m,{variant:"dark",className:"ms-auto",onClick:function(){if(!u){m(!0);var t=d.getSelected();e.onClickExport(t).then((function(){return p.success(V("exportSuccess"))})).catch((function(){return p.error(V("exportError"))})).finally((function(){return m(!1)}))}},disabled:!d.hasSomeSelections()||u,showSpinner:u},n.createElement(E.x,{namespace:q,phrase:"export"}))),(null===(t=e.jobs.data)||void 0===t?void 0:t.length)?n.createElement(F,{jobs:e.jobs,appLinks:e.appLinks,onToggleCheckbox:d.onToggleItem,isChecked:d.isChecked}):n.createElement(X,{imageUrl:e.emptyStateImageUrl}),!!(null===(a=e.jobs.pagination)||void 0===a?void 0:a.cursors)&&n.createElement(b.t,{className:"p-0 text-end pb-3",cursors:e.jobs.pagination.cursors,appLink:N.O.getCurrentRoute().appLink,buttonVariant:"outline-dark"}))}var K=a(91286),$=a(79612),z=a(99742),W=a(29613),Q=a(18087),ee="userManager.userAuditLogView";function te(e){var t=c.SG.get(g.K.AUDIT_LOG_REFERRER_KEY),a=l.a.useBasicFetch(W.q.getJobs(e.queryParams));(0,K.v)(a),(0,$.M)({title:r.T.getPhrase(ee,"pageTitle")});var o=l.a.useGetFetchAsync(),i=(0,Q.Y)(t);return a.hasCompleted?n.createElement("div",{className:"px-3"},n.createElement(Z,{jobs:a.data,appLinks:i,queryParams:e.queryParams,onClickExport:function(e){return o(W.q.sendJobReports(e))},emptyStateImageUrl:z.W.EmptyStates.Search.RESULTS})):n.createElement("div",{className:"px-3"},n.createElement(p,null))}},29613:(e,t,a)=>{a.d(t,{q:()=>l});var n=a(99940),r=a(97395),c=a(149),l={createJob:function(e,t,a){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:n.k.POST,data:e,success:t,error:a}},getJobs:function(e){var t={},a=[],n=[];return e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.bulkActionType?(a=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],t.type=a):t.type=c.O,e.userType&&(n=Array.isArray(e.userType)?e.userType:[e.userType],t.dataType=n),{url:r._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(a.sort().join(":"),":").concat(n.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,t,a){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:t,error:a}},getJobResults:function(e,t,a,n,c){var l={status:t};return a&&(l.cursor=a),{url:r._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),l),key:"job:".concat(e,":results:").concat(t,":").concat(a),success:n,error:c}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:n.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}}}]);
2
- //# sourceMappingURL=2795-0616748349-lite.chunk.js.map
2
+ //# sourceMappingURL=2795-eb3a51adc2-lite.chunk.js.map