@clickview/lite 0.82.2 → 0.83.0-rc.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (143) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/languages/en.json +1 -1
  3. package/dist/scripts/1074-fdce06d863-lite.chunk.js +2 -0
  4. package/dist/scripts/1074-fdce06d863-lite.chunk.js.map +1 -0
  5. package/dist/scripts/{1199-da55d69853-lite.chunk.js → 1199-01cc084886-lite.chunk.js} +1 -1
  6. package/dist/scripts/{1199-da55d69853-lite.chunk.js.map → 1199-01cc084886-lite.chunk.js.map} +1 -1
  7. package/dist/scripts/{2664-87c8cbfa7f-lite.chunk.js → 2664-907153c03b-lite.chunk.js} +2 -2
  8. package/dist/scripts/2664-907153c03b-lite.chunk.js.map +1 -0
  9. package/dist/scripts/2970-024b1dd55d-lite.chunk.js +2 -0
  10. package/dist/scripts/2970-024b1dd55d-lite.chunk.js.map +1 -0
  11. package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js → 3392-f7f8cb65e5-lite.chunk.js} +3 -3
  12. package/dist/scripts/3392-f7f8cb65e5-lite.chunk.js.map +1 -0
  13. package/dist/scripts/3840-59e5e53cda-lite.chunk.js +2 -0
  14. package/dist/scripts/3840-59e5e53cda-lite.chunk.js.map +1 -0
  15. package/dist/scripts/{4177-285ddf9ae3-lite.chunk.js → 4177-2d876c7b14-lite.chunk.js} +2 -2
  16. package/dist/scripts/4177-2d876c7b14-lite.chunk.js.map +1 -0
  17. package/dist/scripts/{1336-1826f6e582-lite.chunk.js → 4208-0706461da6-lite.chunk.js} +2 -2
  18. package/dist/scripts/4208-0706461da6-lite.chunk.js.map +1 -0
  19. package/dist/scripts/{4578-7578bcf17a-lite.chunk.js → 4578-27028d26eb-lite.chunk.js} +2 -2
  20. package/dist/scripts/4578-27028d26eb-lite.chunk.js.map +1 -0
  21. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js +2 -0
  22. package/dist/scripts/4598-8f5266e4c2-lite.chunk.js.map +1 -0
  23. package/dist/scripts/{4621-1f79d94416-lite.chunk.js → 4621-7fb0a05bcb-lite.chunk.js} +2 -2
  24. package/dist/scripts/4621-7fb0a05bcb-lite.chunk.js.map +1 -0
  25. package/dist/scripts/4806-a6f31d703c-lite.chunk.js +2 -0
  26. package/dist/scripts/4806-a6f31d703c-lite.chunk.js.map +1 -0
  27. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js → 4948-ba684e5f4f-lite.chunk.js} +1 -1
  28. package/dist/scripts/{4948-de1c75e7fb-lite.chunk.js.map → 4948-ba684e5f4f-lite.chunk.js.map} +1 -1
  29. package/dist/scripts/4985-7e02d5df40-lite.chunk.js +2 -0
  30. package/dist/scripts/4985-7e02d5df40-lite.chunk.js.map +1 -0
  31. package/dist/scripts/{5554-17bb3b86fc-lite.chunk.js → 5554-f1f3baf822-lite.chunk.js} +2 -2
  32. package/dist/scripts/5554-f1f3baf822-lite.chunk.js.map +1 -0
  33. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js +2 -0
  34. package/dist/scripts/5712-7cee70c6b4-lite.chunk.js.map +1 -0
  35. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js +2 -0
  36. package/dist/scripts/6550-d99e0ed75d-lite.chunk.js.map +1 -0
  37. package/dist/scripts/{6909-a9b8930e37-lite.chunk.js → 6909-ba75701156-lite.chunk.js} +2 -2
  38. package/dist/scripts/6909-ba75701156-lite.chunk.js.map +1 -0
  39. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js +2 -0
  40. package/dist/scripts/7148-1ced1b5dce-lite.chunk.js.map +1 -0
  41. package/dist/scripts/7568-55e9b01367-lite.chunk.js +3 -0
  42. package/dist/scripts/7568-55e9b01367-lite.chunk.js.map +1 -0
  43. package/dist/scripts/{7617-9d34c841e6-lite.chunk.js → 7617-211f084b70-lite.chunk.js} +2 -2
  44. package/dist/scripts/7617-211f084b70-lite.chunk.js.map +1 -0
  45. package/dist/scripts/7742-514844bd1a-lite.chunk.js +2 -0
  46. package/dist/scripts/7742-514844bd1a-lite.chunk.js.map +1 -0
  47. package/dist/scripts/7843-cbebf1a786-lite.chunk.js +2 -0
  48. package/dist/scripts/7843-cbebf1a786-lite.chunk.js.map +1 -0
  49. package/dist/scripts/8077-870bd8e245-lite.chunk.js +3 -0
  50. package/dist/scripts/8077-870bd8e245-lite.chunk.js.map +1 -0
  51. package/dist/scripts/843-4dbc5df109-lite.chunk.js +3 -0
  52. package/dist/scripts/843-4dbc5df109-lite.chunk.js.LICENSE.txt +1 -0
  53. package/dist/scripts/843-4dbc5df109-lite.chunk.js.map +1 -0
  54. package/dist/scripts/8735-e74a148502-lite.chunk.js +2 -0
  55. package/dist/scripts/8735-e74a148502-lite.chunk.js.map +1 -0
  56. package/dist/scripts/8856-2d332952ae-lite.chunk.js +2 -0
  57. package/dist/scripts/8856-2d332952ae-lite.chunk.js.map +1 -0
  58. package/dist/scripts/904-2784e45cfc-lite.chunk.js +2 -0
  59. package/dist/scripts/904-2784e45cfc-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js → 9042-fd7e79b891-lite.chunk.js} +1 -1
  61. package/dist/scripts/{9042-fdc5ecb459-lite.chunk.js.map → 9042-fd7e79b891-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/9295-eb130a0b17-lite.chunk.js +2 -0
  63. package/dist/scripts/9295-eb130a0b17-lite.chunk.js.map +1 -0
  64. package/dist/scripts/9528-4e954d9dff-lite.chunk.js +2 -0
  65. package/dist/scripts/9528-4e954d9dff-lite.chunk.js.map +1 -0
  66. package/dist/scripts/{9742-5f99d74bb0-lite.chunk.js → 9742-3f6b75484a-lite.chunk.js} +2 -2
  67. package/dist/scripts/9742-3f6b75484a-lite.chunk.js.map +1 -0
  68. package/dist/scripts/979-6a70a0e616-lite.chunk.js +2 -0
  69. package/dist/scripts/979-6a70a0e616-lite.chunk.js.map +1 -0
  70. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js → 9911-8892b6dbfe-lite.chunk.js} +2 -2
  71. package/dist/scripts/{3612-8c6423bd51-lite.chunk.js.map → 9911-8892b6dbfe-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/bundle-f926852f33.min.js +3 -0
  73. package/dist/scripts/{bundle-9a3e49399a.min.js.map → bundle-f926852f33.min.js.map} +1 -1
  74. package/package.json +1 -1
  75. package/dist/css/2074-lite-ac8da6c78b.chunk.css +0 -4
  76. package/dist/scripts/1202-d96ad80884-lite.chunk.js +0 -2
  77. package/dist/scripts/1202-d96ad80884-lite.chunk.js.map +0 -1
  78. package/dist/scripts/1336-1826f6e582-lite.chunk.js.map +0 -1
  79. package/dist/scripts/2074-39b86b9a22-lite.chunk.js +0 -2
  80. package/dist/scripts/2074-39b86b9a22-lite.chunk.js.map +0 -1
  81. package/dist/scripts/2664-87c8cbfa7f-lite.chunk.js.map +0 -1
  82. package/dist/scripts/2888-2596e106a5-lite.chunk.js +0 -2
  83. package/dist/scripts/2888-2596e106a5-lite.chunk.js.map +0 -1
  84. package/dist/scripts/289-669c0c8222-lite.chunk.js +0 -2
  85. package/dist/scripts/289-669c0c8222-lite.chunk.js.map +0 -1
  86. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js +0 -2
  87. package/dist/scripts/3840-98c79fc0d8-lite.chunk.js.map +0 -1
  88. package/dist/scripts/3893-2856933742-lite.chunk.js +0 -2
  89. package/dist/scripts/3893-2856933742-lite.chunk.js.map +0 -1
  90. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js +0 -3
  91. package/dist/scripts/4006-9dfe9cec1b-lite.chunk.js.map +0 -1
  92. package/dist/scripts/4177-285ddf9ae3-lite.chunk.js.map +0 -1
  93. package/dist/scripts/4578-7578bcf17a-lite.chunk.js.map +0 -1
  94. package/dist/scripts/4621-1f79d94416-lite.chunk.js.map +0 -1
  95. package/dist/scripts/4806-f36469abb7-lite.chunk.js +0 -2
  96. package/dist/scripts/4806-f36469abb7-lite.chunk.js.map +0 -1
  97. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js +0 -2
  98. package/dist/scripts/4985-bdfa839f8f-lite.chunk.js.map +0 -1
  99. package/dist/scripts/5554-17bb3b86fc-lite.chunk.js.map +0 -1
  100. package/dist/scripts/5579-a9c152057f-lite.chunk.js +0 -2
  101. package/dist/scripts/5579-a9c152057f-lite.chunk.js.map +0 -1
  102. package/dist/scripts/5712-e784cfe89c-lite.chunk.js +0 -2
  103. package/dist/scripts/5712-e784cfe89c-lite.chunk.js.map +0 -1
  104. package/dist/scripts/6070-a390fdce21-lite.chunk.js +0 -2
  105. package/dist/scripts/6070-a390fdce21-lite.chunk.js.map +0 -1
  106. package/dist/scripts/6909-a9b8930e37-lite.chunk.js.map +0 -1
  107. package/dist/scripts/7401-98135f09e8-lite.chunk.js +0 -2
  108. package/dist/scripts/7401-98135f09e8-lite.chunk.js.map +0 -1
  109. package/dist/scripts/7617-9d34c841e6-lite.chunk.js.map +0 -1
  110. package/dist/scripts/7742-342db3ce4f-lite.chunk.js +0 -2
  111. package/dist/scripts/7742-342db3ce4f-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7843-f6033528ce-lite.chunk.js +0 -2
  113. package/dist/scripts/7843-f6033528ce-lite.chunk.js.map +0 -1
  114. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js +0 -2
  115. package/dist/scripts/787-dcb3a0a26c-lite.chunk.js.map +0 -1
  116. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js +0 -2
  117. package/dist/scripts/8077-9fdb522d7e-lite.chunk.js.map +0 -1
  118. package/dist/scripts/8133-ffcff3b7fc-lite.chunk.js.map +0 -1
  119. package/dist/scripts/8364-ff63447d36-lite.chunk.js +0 -3
  120. package/dist/scripts/8364-ff63447d36-lite.chunk.js.map +0 -1
  121. package/dist/scripts/8672-6967ce8a23-lite.chunk.js +0 -2
  122. package/dist/scripts/8672-6967ce8a23-lite.chunk.js.map +0 -1
  123. package/dist/scripts/9295-4242401e60-lite.chunk.js +0 -2
  124. package/dist/scripts/9295-4242401e60-lite.chunk.js.map +0 -1
  125. package/dist/scripts/9742-5f99d74bb0-lite.chunk.js.map +0 -1
  126. package/dist/scripts/979-4b893e5603-lite.chunk.js +0 -2
  127. package/dist/scripts/979-4b893e5603-lite.chunk.js.map +0 -1
  128. package/dist/scripts/9911-9272b96e46-lite.chunk.js +0 -2
  129. package/dist/scripts/9911-9272b96e46-lite.chunk.js.map +0 -1
  130. package/dist/scripts/bundle-9a3e49399a.min.js +0 -3
  131. /package/dist/css/{787-lite-5a317efacd.chunk.css → 2970-lite-5a317efacd.chunk.css} +0 -0
  132. /package/dist/css/{6070-lite-45dc286aab.chunk.css → 6550-lite-45dc286aab.chunk.css} +0 -0
  133. /package/dist/css/{2888-lite-856c02f000.chunk.css → 7148-lite-856c02f000.chunk.css} +0 -0
  134. /package/dist/css/{8364-lite-db31e36b79.chunk.css → 843-lite-db31e36b79.chunk.css} +0 -0
  135. /package/dist/css/{9911-lite-856c02f000.chunk.css → 8735-lite-856c02f000.chunk.css} +0 -0
  136. /package/dist/css/{5579-lite-f8e496136d.chunk.css → 8856-lite-f8e496136d.chunk.css} +0 -0
  137. /package/dist/css/{289-lite-2435a34b13.chunk.css → 904-lite-2435a34b13.chunk.css} +0 -0
  138. /package/dist/css/{1202-lite-4a892bdbf2.chunk.css → 9528-lite-4a892bdbf2.chunk.css} +0 -0
  139. /package/dist/css/{3612-lite-2b4142796a.chunk.css → 9911-lite-2b4142796a.chunk.css} +0 -0
  140. /package/dist/scripts/{4006-9dfe9cec1b-lite.chunk.js.LICENSE.txt → 3392-f7f8cb65e5-lite.chunk.js.LICENSE.txt} +0 -0
  141. /package/dist/scripts/{8133-ffcff3b7fc-lite.chunk.js.LICENSE.txt → 7568-55e9b01367-lite.chunk.js.LICENSE.txt} +0 -0
  142. /package/dist/scripts/{8364-ff63447d36-lite.chunk.js.LICENSE.txt → 8077-870bd8e245-lite.chunk.js.LICENSE.txt} +0 -0
  143. /package/dist/scripts/{bundle-9a3e49399a.min.js.LICENSE.txt → bundle-f926852f33.min.js.LICENSE.txt} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4177-2d876c7b14-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/rostering/rostering-alert/RosteringAlert.tsx","file:///app/packages/libs/shared/src/hooks/useBulkCheckboxManager.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/partial-manage-classroom-students.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/full-classrooms-experience/empty-state/ClassroomsNoStudentsState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/classroom-group-pill.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-pill/ClassroomGroupPill.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/manage-classroom-student-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-students/ManageClassroomStudents.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-students/ClassroomStudentsView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useClassroomExperience.ts"],"sourcesContent":["import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'rostering.alert';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RosteringAlertProps {\n type?: 'classroom' | 'general';\n}\n\nexport function RosteringAlert(props: RosteringAlertProps) {\n const text = props.type === 'classroom' ? getPhrase('classroom') : getPhrase('hasRostering');\n\n return (\n <div className='alert text-info bg-light-blue px-2 rounded-3 fw-semibold py-2 d-flex flex-wrap'>\n {text}&nbsp;\n {/* todo add it back when KB article link is ready */}\n {/* <ExternalLink\n className='text-info text-underline'\n href={''}\n newTab\n >\n {LanguageService.getPhrase(namespace, 'learnMore')}\n </ExternalLink> */}\n </div>\n );\n}","import React from 'react';\n\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { useForceUpdate } from 'libs/shared/hooks/useForceUpdate';\nimport { usePrevious } from 'libs/shared/hooks/usePrevious';\n\ntype CheckboxItemsState = Map<string, boolean>;\n\nexport interface BulkCheckboxManager {\n onToggleBulk: () => void;\n onToggleItem: (id: string) => void;\n getSelected: () => string[];\n isChecked: (item: string | number | HashObject<string>) => boolean;\n bulkChecked: boolean;\n deselectAll: () => void;\n hasSomeSelections: () => boolean;\n setSelected: (ids: string[]) => void;\n getSelectedCount: () => number;\n reset: () => void;\n getMap: () => Map<string, boolean>;\n}\n\nexport interface BulkCheckboxManagerOptions {\n idField?: string; // For objects like `PresentationAudiences` that don't use `id` as their identifier field\n persistNamespace?: string;\n preselectedIds?: string[];\n initialState?: CheckboxItemsState;\n}\n\n/**\n * @param collection - The collection you are keeping track of with checkboxes\n * @param options - See interface above\n */\nexport const useBulkCheckboxManager = (collection: HashObject[], options: BulkCheckboxManagerOptions = {}) => {\n const { idField = 'id', persistNamespace } = options;\n\n const initial = options.initialState ? options.initialState : new Map<string, boolean>();\n\n const items = React.useRef<CheckboxItemsState>(initial);\n \n const forceUpdate = useForceUpdate();\n\n const prevCollection = usePrevious(collection);\n const prevNamespace = usePrevious(persistNamespace);\n\n /**\n * This hook will clear the state of this hook when a user navigates between pages\n * if a persistNamespace was not provided\n */\n React.useEffect(() => {\n /**\n * If we're being passed initial state, we don't want to clear the state\n */\n if (options.initialState)\n return;\n\n /**\n * If we've been given a persist namespace, we don't want to clear our\n * selections while the namespace stays the same\n */\n if (persistNamespace && prevNamespace === persistNamespace)\n return;\n\n /**\n * Don't reinitialize if the ids of the new and old collection\n * are identical\n */\n const prevIds = prevCollection?.map(i => i[idField]).join();\n const ids = collection?.map(i => i[idField]).join();\n\n if (prevIds === ids)\n return;\n\n reset();\n }, [ prevCollection, prevNamespace, collection, options.initialState ]);\n\n React.useEffect(() => {\n if (!options.preselectedIds?.length)\n return;\n\n setSelected(options.preselectedIds);\n }, []);\n\n function reset(): void {\n items.current.clear();\n forceUpdate();\n }\n\n // When toggled on, all checkbox items will be enabled. Vice versa if toggled off\n function onToggleBulk(): void {\n const setValue = !isBulkChecked();\n\n collection.forEach(item => {\n if (setValue)\n items.current.set(item[idField].toString(), true);\n else\n items.current.delete(item[idField].toString());\n });\n\n forceUpdate();\n }\n\n // Toggles a single item\n function onToggleItem(id: string): void {\n const nextItemState = !items.current.get(id.toString());\n\n if (nextItemState)\n items.current.set(id.toString(), nextItemState);\n else\n items.current.delete(id.toString());\n \n forceUpdate();\n }\n\n // Returns the state of the item passed in\n function isChecked(item: string | number | HashObject<string>): boolean {\n if (typeof item === 'number')\n item = item.toString();\n else if (typeof item !== 'string')\n item = item[idField].toString();\n\n return items.current.get(item);\n }\n\n function getSelected(): string[] {\n return Array.from(items.current.keys());\n }\n\n function deselectAll(): void {\n if (!collection?.length) return;\n\n collection.forEach(item => {\n items.current.delete(item[idField].toString());\n });\n forceUpdate();\n }\n\n // Returns true if at least 1 item is checked\n function hasSomeSelections(): boolean {\n if (!collection?.length)\n return false;\n\n return !!collection.find(item => isChecked(item));\n }\n\n function isBulkChecked(): boolean {\n if (!collection?.length)\n return false;\n\n return collection.every(isChecked);\n }\n\n function setSelected(ids: string[]): void {\n ids.forEach(id => {\n items.current.set(id, true);\n });\n forceUpdate();\n }\n\n function getSelectedCount(): number {\n return items.current.size;\n }\n\n function getMap(): Map<string, boolean> {\n return items.current;\n }\n\n return {\n onToggleBulk,\n onToggleItem,\n getSelected,\n isChecked,\n bulkChecked: isBulkChecked(),\n deselectAll,\n hasSomeSelections,\n setSelected,\n getSelectedCount,\n reset,\n getMap\n };\n};","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"YrP_G\",\"avatar\":\"droqZ\",\"checkbox\":\"pJf6R\",\"actionIcon\":\"MSvzY\",\"addStudents\":\"j62jt\",\"studentName\":\"gorcb\",\"group\":\"IFmvc\",\"sm\":\"pOcvk\",\"lg\":\"SdQ90\",\"moreActions\":\"S7p4K\"};","import React from 'react';\n\nimport { PartialBreadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PartialPillTabSelector } from 'libs/shared/components/pill-tab-selector/partial-loading/PartialPillTabSelector';\n\nimport styles from './partial-manage-classroom-students.scss';\n\nexport const PartialManageClassroomStudents = React.memo(function(): JSX.Element {\n return (\n <div className='px-3'>\n {/* Heading */}\n <div className={`mb-1 partial-loading-background ${styles.heading}`} />\n\n {/* Breadcrumbs */}\n <div className='pb-3'>\n <PartialBreadcrumbs numItems={2} />\n </div>\n\n {/* Pill tab selector */}\n <div className='pb-2'>\n <PartialPillTabSelector />\n </div>\n\n <div className='d-flex align-items-center py-2'>\n {/* Checkbox */}\n <div className={`mx-4 partial-loading-background ${styles.checkbox}`} />\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new students button */}\n <div className={`partial-loading-background ${styles.addStudents}`} />\n </div>\n\n {/* Students list */}\n <ul className='striped-list list-unstyled'>\n {Array(20).fill(null).map((student, i) => (\n <li key={i}>\n <div className='d-flex align-items-center py-1 px-4'>\n {/* Checkbox */}\n <div className={`me-2 partial-loading-background ${styles.checkbox}`} />\n\n {/* Avatar */}\n <div className={`me-2 partial-loading-background ${styles.avatar}`} />\n\n {/* Student name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.studentName}`} />\n </div>\n\n {/* Groups list. Randomly renders either 1 or 2 groups. Group widths are randomly generated */}\n <div className='me-auto d-flex'>\n {Math.random() > 0.5\n ? (\n <>\n <div className={`partial-loading-background rounded-pill me-1 ${styles.group} ${styles.lg}`} />\n <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n </>\n ) : <div className={`partial-loading-background rounded-pill ${styles.group} ${styles.sm}`} />\n }\n </div>\n\n {/* Group selector */}\n <div className={`me-2 partial-loading-background ${styles.actionIcon}`} />\n {/* More actions */}\n <div className={`partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\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';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'classrooms.classroomsEmptyState';\n\ninterface ClassroomsNoStudentsStateProps {\n canManageUsers: boolean;\n isRostering?: boolean;\n}\n\nexport function ClassroomsNoStudentsState(props: ClassroomsNoStudentsStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='noStudentsHeading' /></EmptyState.Heading>\n <EmptyState.Info className={`w-33 ${!props.canManageUsers ? 'mb-0' : ''}`}>\n <Text phrase='noStudentsInfo' />\n </EmptyState.Info>\n\n {props.canManageUsers && !props.isRostering && (\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'noStudentsCta')}\n appLink={{\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.STUDENTS\n }}\n />\n )}\n {!props.canManageUsers && !props.isRostering && (\n <EmptyState.Info><Text phrase='askAdmin' /></EmptyState.Info>\n )}\n {props.isRostering && (\n <a className='btn btn-link info-link font-semibold' href={''} target='_blank'>\n {LanguageService.getPhrase(namespace, 'rosteringCta')}\n </a>\n )}\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\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 { Classroom } from 'libs/shared/interfaces';\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\nimport { ClassroomsNoStudentsState } from 'apps/classrooms/views/full-classrooms-experience/empty-state/ClassroomsNoStudentsState';\n\nconst namespace = 'classrooms.manageClassroomStudentsEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst STUDENT_ENGAGEMENT_IDEAS_LINK = 'https://static.clickview.com.au/Primary/Documents/Student-engagement-ideas.pdf';\nconst ROSTERING_KB_ARTICLE_URL = '';\n\ninterface ManageClassroomStudentsEmptyStateProps {\n classroom: Classroom;\n classroomIdeasText: string;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n}\n\nexport function RosteredClassroomStudentsEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2' ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n <a className='btn btn-link info-link font-semibold' href={ROSTERING_KB_ARTICLE_URL} target='_blank'>\n {getPhrase('rosteringCta')}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n\nexport function ManageClassroomStudentsEmptyState(props: ManageClassroomStudentsEmptyStateProps): JSX.Element {\n if (props.schoolHasNoStudents)\n return <ClassroomsNoStudentsState canManageUsers={props.canManageUsers} />;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.STUDENTS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info><Text phrase='emptyStateInfo' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addStudents')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [props.classroom.id]\n }}\n />\n\n <a className='btn btn-link info-link font-semibold' href={STUDENT_ENGAGEMENT_IDEAS_LINK} target='_blank'>\n {props.classroomIdeasText}\n </a>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"maxWidth\":\"A0VzW\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\n\nimport styles from './classroom-group-pill.scss';\n\ninterface ClassroomGroupProps {\n group: ClassroomGroup;\n}\n\nexport function ClassroomGroupPill(props: ClassroomGroupProps): JSX.Element {\n if (!props.group)\n return <></>;\n\n return (\n <div className={`classroom-pill ${styles.maxWidth} text-white text-truncate bg-${mapColourToBsVariant(props.group.metadata?.colour)}`}>\n <p className='text-truncate mb-0' title={props.group.name}>{props.group.name}</p>\n </div>\n );\n}\n\ninterface ClassroomGroupExpanderProps {\n count: number;\n onClick: () => void;\n}\n\nexport function ClassroomGroupExpander(props: ClassroomGroupExpanderProps): JSX.Element {\n if (!props.count)\n return <></>;\n\n return (\n <DivButton onClick={props.onClick} className={`classroom-pill bg-white border border-dark`}>\n +{props.count}\n </DivButton>\n );\n}","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { PropsWithAnalyticsOptions, User } from 'libs/shared/interfaces';\nimport { Classroom, ClassroomGroup } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nconst namespace = 'classrooms.classroomGroupDropdown';\n\nconst getNewGroupAppLink = (id: string, students: User[]) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.NEW_GROUP,\n args: [id],\n params: {\n addStudents: students.map(s => s.id)\n }\n});\n\nfunction checkStudentsAllInGroup(students: User[], group: ClassroomGroup) {\n const groupUserIds = new Set(group.users.data.map(u => u.id.toString()));\n return students.every(student => groupUserIds.has(student.id.toString()));\n}\n\nfunction checkStudentsNotInGroup(students: User[], group: ClassroomGroup) {\n const groupUserIds = new Set(group.users.data.map(u => u.id.toString()));\n return students.every(student => !groupUserIds.has(student.id.toString()));\n}\n\ntype ClassroomGroupDropdownProps = PropsWithAnalyticsOptions<{\n id: string;\n classroom: Classroom;\n selectedStudents: User[];\n groups: ClassroomGroup[];\n onSelectGroup: (group: ClassroomGroup, toggleOn?: boolean) => void;\n preselections?: ClassroomGroup[];\n isBulk?: boolean;\n\n alignRight?: boolean;\n disabled?: boolean;\n disabledTooltips?: string;\n}>;\n\nClassroomGroupDropdown.defaultProps = {\n preselections: []\n};\n\nexport function ClassroomGroupDropdown(props: ClassroomGroupDropdownProps): JSX.Element {\n const { onToggleItem, isChecked } = useBulkCheckboxManager(props.groups, {\n preselectedIds: props.preselections.map(s => s.id)\n });\n\n const studentsAllInGroupLookup = props.groups.reduce((acc, group) => {\n acc[group.id] = checkStudentsAllInGroup(props.selectedStudents, group);\n return acc;\n }, {} as Record<string, boolean>);\n\n function onChange(group: ClassroomGroup): void {\n const shouldAdd = !isChecked(group.id);\n props.onSelectGroup(group, shouldAdd);\n\n onToggleItem(group.id);\n }\n\n function onClickCreateNewGroup(): void {\n if (props.disabled)\n return;\n\n AnalyticsHelper.logUserAction({\n classroom: { id: props.classroom.id, name: props.classroom.name }\n }, AnalyticsHelper.mergeOptions(props.analyticsOptions, {\n actionType: UserAction.Create,\n workflowPhase: WorkflowPhase.Start,\n entity: EntityType.ClassroomGroup\n }));\n }\n\n React.useEffect(() => {\n // On each passthrough, validate that the checkbox states are valid\n // This is needed because the group/student state is managed in 2 separate places on the same page\n props.groups.forEach(g => {\n const totalCheckedForGroup = studentsAllInGroupLookup[g.id];\n // Validate if unchecked checkbox should be checked\n if (!!totalCheckedForGroup && !isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n\n // Validate if checked checkbox should be unchecked\n if (!totalCheckedForGroup && isChecked(g.id)) {\n onToggleItem(g.id);\n return;\n }\n });\n }, [\n Object.entries(studentsAllInGroupLookup).sort((a, b) => a[0].localeCompare(b[0])).join(',')\n ]);\n\n const buttonClasses = 'me-2 d-inline-block svg-container sm';\n\n const dropdownProps: HashObject = {\n align: props.alignRight ? 'end' : 'start'\n };\n\n /**\n * This prop is applied like this so that when `props.disabled` it false, the prop is omitted altogether.\n * This is because we want `react-bootstrap` to control the open state, and if we used the `show` prop\n * at all times we'd be preventing that.\n */\n if (props.disabled)\n dropdownProps.show = false;\n\n return (\n <Dropdown {...dropdownProps}>\n <Dropdown.Toggle\n as='div'\n id={props.id}\n className={`${props.disabled ? 'text-light' : 'cursor-pointer'} ${buttonClasses} no-caret`}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Group}\n title={props.disabled ? props.disabledTooltips : LanguageService.getPhrase(namespace, 'addToGroupTooltip')}\n tooltipPlacement='top'\n tooltipSpanHack\n tooltipSpanHackClassName=''\n />\n </Dropdown.Toggle>\n <Dropdown.Menu>\n {!!props.groups?.length && (\n <div className='px-2 border-bottom mb-1'>\n <p className='mb-0'><Text namespace={namespace} phrase='addToGroup' /></p>\n <ul className='list-unstyled pe-3'>\n {props.groups.map(group => {\n const isEmptyChecked = checkStudentsNotInGroup(props.selectedStudents, group);\n const isIndeterminate = !props.isBulk\n ? false\n : !studentsAllInGroupLookup[group.id] && !isEmptyChecked;\n\n return (\n <li key={group.id} className='d-flex align-items-center bg-white my-1'>\n <Checkbox\n id={`${props.id}:${group.id}`}\n checked={isChecked(group.id)}\n onChange={() => onChange(group)}\n indeterminate={isIndeterminate }\n />\n <ClassroomGroupPill group={group} />\n </li>\n );\n })}\n </ul>\n </div>\n )}\n <AppLink\n onClick={onClickCreateNewGroup}\n appLink={getNewGroupAppLink(props.classroom.id, props.selectedStudents)}\n className={props.disabled ? 'disabled' : 'text-nowrap d-flex align-items-center px-2'}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} />\n <Text namespace={namespace} phrase='createNew' />\n </AppLink>\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"rfVnC\",\"name\":\"RYLWZ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { ActionOptions, Actions as MoreActions } from 'libs/shared/components/actions/Actions';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useResizeListener } from 'libs/shared/hooks/UseResizeListener';\nimport { ClassroomGroup, Config } from 'libs/shared/interfaces';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ClassroomGroupExpander, ClassroomGroupPill } from 'apps/classrooms/components/classroom-group-pill/ClassroomGroupPill';\n\nimport styles from './manage-classroom-student-item.scss';\n\ntype GroupVisibilityMapping = { [id: string]: boolean };\n\nconst namespace = 'classrooms.manageClassroomStudentItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getEditStudentAppLink = (id: string) => ({\n application: AppChannels.USER_MANAGER,\n action: Actions.UserManager.EDIT_USER,\n args: [id],\n params: { userType: UserGroup.Learner }\n});\n\nconst getRemoveStudentsAppLink = (studentId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroomId],\n params: {\n studentIds: [studentId]\n }\n});\n\ninterface ManageClassroomStudentItemProps {\n classroom: Classroom;\n student: User;\n classroomGroups: ClassroomGroup[];\n selectedGroups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onToggleCheckbox: () => void;\n checked: boolean;\n readOnly?: boolean;\n readOnlyTooltip?: string;\n}\n\nexport function ManageClassroomStudentItem(props: ManageClassroomStudentItemProps): JSX.Element {\n const [ isComputingTruncation, setIsComputingTruncation ] = React.useState(false);\n const [ hasExpandedGroups, setHasExpandedGroups ] = React.useState(false);\n\n // Maps a group to it's visibility state.\n const [ groupVisibilityMapping, setGroupVisibilityMapping ] = React.useState<GroupVisibilityMapping>({});\n\n const groupListRef = React.useRef<HTMLDivElement>(null);\n const expanderRef = React.useRef<HTMLDivElement>(null);\n const selectedGroupsRef = React.useRef<ClassroomGroup[]>(props.selectedGroups);\n\n const { hasPermissions } = usePermissions();\n\n // Every time the selected groups array changes, we want to re-compute which groups should be truncated\n React.useEffect(() => {\n selectedGroupsRef.current = props.selectedGroups;\n renderAllGroups();\n\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n setIsComputingTruncation(true);\n }, [props.selectedGroups.length]);\n\n function onResize(): void {\n renderAllGroups();\n setIsComputingTruncation(true);\n }\n\n const throttledResizeListener = FunctionHelper.throttle(onResize, 300);\n\n useResizeListener(() => {\n if (hasExpandedGroups) // Don't re-compute if the user has expanded all groups\n return;\n\n throttledResizeListener();\n });\n\n /**\n * This iterates through each group element, and detects if any of them don't\n * fit on the first row of items. The elements that don't will be hidden.\n */\n React.useEffect(() => {\n if (!groupListRef.current || !expanderRef.current || !isComputingTruncation)\n return;\n\n const firstGroupPill = groupListRef.current.firstElementChild as HTMLDivElement;\n if (!firstGroupPill) return;\n\n const topRowHeight = firstGroupPill.getBoundingClientRect().y;\n\n const nextGroupVisibilityMapping: { [id: string]: boolean } = {};\n\n /**\n * Here we're checking if the y-coordinate of any groups\n * don't match the y-coordinate of the first group (which should\n * always be on the first row). This way we know if they should be\n * hidden or not.\n */\n let lastVisibleId: string;\n for (const child of groupListRef.current.children) {\n if (child.id) {\n nextGroupVisibilityMapping[child.id] = child.getBoundingClientRect().y === topRowHeight;\n lastVisibleId = nextGroupVisibilityMapping[child.id] ? child.id : lastVisibleId;\n }\n }\n\n // If the expander button has also wrapped, we hide the last element that we were going to make visible.\n if (expanderRef.current.getBoundingClientRect().y !== topRowHeight)\n nextGroupVisibilityMapping[lastVisibleId] = false;\n\n setGroupVisibilityMapping(nextGroupVisibilityMapping);\n setIsComputingTruncation(false);\n }, [isComputingTruncation]);\n\n function onClickShowAllGroups(): void {\n setHasExpandedGroups(true);\n renderAllGroups();\n }\n\n // Updates the group visibility mapping to display all groups\n function renderAllGroups(): void {\n setGroupVisibilityMapping(selectedGroupsRef.current.reduce((acc, group) => {\n acc[group.id] = true;\n return acc;\n }, {} as GroupVisibilityMapping));\n }\n\n // Returns the number of groups that are invisible\n function getInvisibleGroupCount(): number {\n return Object.keys(groupVisibilityMapping).reduce((count, groupId) => {\n if (!groupVisibilityMapping[groupId])\n count++;\n \n return count;\n }, 0);\n }\n\n function getActions(): ActionOptions[] {\n const actions: ActionOptions[] = [];\n\n if (hasPermissions(PermissionName.ManageUsers))\n actions.push({\n label: getPhrase('editStudent'),\n appLink: getEditStudentAppLink(props.student.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : '',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({ id: props.student.id }, {\n actionType: UserAction.Edit,\n entity: EntityType.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n actions.push({\n label: getPhrase('removeStudent'),\n appLink: getRemoveStudentsAppLink(props.student.id, props.classroom.id),\n disabled: props.readOnly,\n className: props.readOnly ? 'disabled' : 'text-danger',\n tooltip: props.readOnly ? props.readOnlyTooltip : '',\n onClick: () => {\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n name: props.classroom.name,\n userId: props.student.id\n }, {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomStudentListItem\n });\n }\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n <Checkbox\n id={props.student.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n\n <div className={`${styles.avatarContainer} flex-shrink-0 me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.student.name, props.student.surname)}\n imageUrl={props.student.avatar?.url}\n />\n </div>\n\n <p className={`me-2 ${styles.name} text-truncate mb-0 text-nowrap`}>{props.student.name} {props.student.surname}</p>\n\n <div\n // When we are computing the truncation, we want all group elements to be rendered but invisible.\n className={`${isComputingTruncation ? 'invisible' : ''} me-auto d-flex flex-wrap mt-n1`}\n ref={groupListRef}\n >\n {props.selectedGroups.map(group => {\n if (!groupVisibilityMapping[group.id]) // Don't render any groups that are marked as hidden\n return <React.Fragment key={group.id}></React.Fragment>;\n\n return (\n <div key={group.id} className='me-1 mt-1' id={group.id}>\n <ClassroomGroupPill group={group} />\n </div>\n );\n })}\n <div ref={expanderRef} className='me-1 mt-1'>\n <ClassroomGroupExpander count={getInvisibleGroupCount()} onClick={onClickShowAllGroups} />\n </div>\n </div>\n\n <ClassroomGroupDropdown\n id={`add-group-${props.student.id}`}\n classroom={props.classroom}\n groups={props.classroomGroups}\n selectedStudents={[props.student]}\n preselections={props.selectedGroups}\n onSelectGroup={(group, toggleOn) => props.onToggleGroup(props.student, group, toggleOn)}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudentListItem }}\n alignRight\n disabled={props.readOnly}\n disabledTooltips={props.readOnlyTooltip}\n />\n\n <MoreActions\n actions={getActions()}\n actionsDropdownClassName='btn'\n />\n </div>\n );\n}","import * as React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config } from 'libs/shared/interfaces';\nimport { ClassroomGroup, User, UserCollection } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomGroupDropdown } from 'apps/classrooms/components/classroom-group-dropdown/ClassroomGroupDropdown';\nimport { ManageClassroomStudentItem } from 'apps/classrooms/components/manage-classroom-student-item/ManageClassroomStudentItem';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\n\nimport { ManageClassroomStudentsEmptyState } from './empty-state/ManageClassroomStudentsEmptyState';\n\nconst namespace = 'classrooms.manageClassroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ManageClassroomStudentsProps {\n classroom: Classroom;\n students: UserCollection;\n schoolHasNoStudents: boolean;\n canManageUsers: boolean;\n groups: ClassroomGroup[];\n config: Config;\n onToggleGroup: (student: User, group: ClassroomGroup, toggleOn: boolean) => void;\n onBulkSelectGroup: (students: User[], group: ClassroomGroup, shouldAdd: boolean) => void;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomStudents(props: ManageClassroomStudentsProps): JSX.Element {\n const { classroom, students, groups } = props;\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n const CheckboxHelper = useBulkCheckboxManager(students.data);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n const bulkPreselections = groups.filter(group => {\n if (!group.users?.data?.length)\n return false;\n\n let allStudentsFound = true;\n let index = 0;\n\n const studentIds = CheckboxHelper.getSelected();\n\n if (!studentIds.length)\n return;\n\n do {\n const id = studentIds[index];\n if (!group.users.data.find((stu: any) => stu.id.toString() === id.toString()))\n allStudentsFound = false;\n\n index++;\n } while (index < studentIds.length);\n\n return allStudentsFound;\n });\n\n function onClickAddStudents(): void {\n AnalyticsHelper.logUserAction({ id: classroom.id }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_STUDENTS_CHOICES,\n args: [classroom.id]\n });\n }\n\n function onClickBulkRemoveStudents(): void {\n if (!selectionCount || props.readOnly)\n return;\n\n const studentIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: classroom.id,\n studentCount: studentIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomStudents\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_STUDENTS,\n args: [classroom.id],\n params: {\n studentIds\n }\n });\n }\n\n function onSelectGroup(group: ClassroomGroup, shouldAdd: boolean): void {\n const selectedStudentIds = CheckboxHelper.getSelected();\n // optimistically update the UI on bulk add/remove\n props.onBulkSelectGroup(students.data.filter(s => selectedStudentIds.includes(s.id.toString())), group, shouldAdd);\n\n const request = shouldAdd ? ClassroomRequests.addStudentsToGroup : ClassroomRequests.removeStudentsFromGroup;\n\n Flight.fetch(\n dispatch,\n request(selectedStudentIds, group.id, classroom.id, () => {\n AnalyticsHelper.logUserAction({\n id: group.id,\n studentCount: selectedStudentIds.length\n }, {\n actionType: UserAction.Associate,\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudents\n });\n\n alerts.success(getPhrase('addSuccess', { groupName: group.name, escapeText: true }));\n }, () => {\n alerts.error(getPhrase('addError', { groupName: group.name, escapeText: true }));\n })\n );\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!students.data?.length) {\n return (\n <ManageClassroomStudentsEmptyState\n classroom={props.classroom}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={props.schoolHasNoStudents}\n canManageUsers={props.canManageUsers}\n />\n );\n }\n\n const selectedStudents = CheckboxHelper\n .getSelected()\n .map(id => {\n return props.students.data.find(s => s.id.toString() === id.toString());\n })\n .filter(s => !!s);\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n <Checkbox\n id='manage-classroom-students-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <ClassroomGroupDropdown\n id='bulk-add-group'\n classroom={classroom}\n selectedStudents={selectedStudents}\n isBulk\n groups={groups}\n onSelectGroup={onSelectGroup}\n disabled={!selectionCount || props.readOnly}\n preselections={bulkPreselections}\n analyticsOptions={{ location: LocationContext.ManageClassroomStudents }}\n disabledTooltips={props.readOnly && LanguageService.getPhrase(namespace, 'disabledByRostering')}\n />\n <DivButton\n className={`me-auto ${!selectionCount || props.readOnly ? 'text-light cursor-default' : ''}`}\n onClick={onClickBulkRemoveStudents}\n >\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </Tooltip>\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n onClick={onClickAddStudents}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark'\n disabled={props.readOnly}\n >\n <Text namespace={namespace} phrase='addStudent' />\n </IconButton>\n </Tooltip>\n </div>\n\n <ul className='striped-list list-unstyled'>\n {students.data.map(student => (\n <li key={student.id}>\n <ManageClassroomStudentItem\n classroom={classroom}\n student={student}\n classroomGroups={props.groups}\n config={props.config}\n selectedGroups={props.groups.filter(g => g.users.data.find(u => u.id === student.id))}\n checked={CheckboxHelper.isChecked(student.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(student.id)}\n onToggleGroup={props.onToggleGroup}\n readOnly={props.readOnly}\n readOnlyTooltip={props.readOnly ? getPhrase('disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AssocDescriptor, EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { Pagination } from 'libs/shared/components/pagination/Pagination';\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Classroom, ClassroomGroup, ClassroomGroupCollection, Config, CurrentUser, User, UserCollection } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ManageClassroomStudentsEmptyState, RosteredClassroomStudentsEmptyState } from 'apps/classrooms/components/manage-classroom-students/empty-state/ManageClassroomStudentsEmptyState';\nimport { ManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/ManageClassroomStudents';\nimport { PartialManageClassroomStudents } from 'apps/classrooms/components/manage-classroom-students/partial-loading/PartialManageClassroomStudents';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\nimport { UserManagerRequests } from 'apps/user-manager/flight-requests/UserManagerRequests';\n\nconst namespace = 'classrooms.classroomStudents';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst baseAnalyticsOptions = {\n entity: EntityType.ClassroomGroup,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.ManageClassroomStudentListItem\n};\n\ninterface ClassroomStudentsViewProps {\n id: string;\n cursor: string;\n}\n\nexport function ClassroomStudentsView(props: ClassroomStudentsViewProps): JSX.Element {\n const { hasShareFlowV2 } = useSettings(null);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const classroom = Flight.useBasicFetch<Classroom>(currentUser.data &&\n ClassroomRequests.getClassroom(props.id, currentUser.data.id));\n const students = Flight.useBasicFetch<UserCollection>(ClassroomRequests.getClassroomStudents(props.id, props.cursor));\n const allStudents = Flight.useBasicFetch<UserCollection>(currentUser.data &&\n UserManagerRequests.getUsers(currentUser.data.customerId, UserGroup.Learner));\n const groups = Flight.useBasicFetch<ClassroomGroupCollection>(ClassroomRequests.getClassroomGroups(props.id));\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n // Maintain a localGroups to optimistically update the UI\n const [ localGroups, setLocalGroups ] = React.useState<ClassroomGroup[]>(groups.data?.data);\n React.useEffect(() => {\n if (groups.hasCompleted && !groups.isFetching)\n setLocalGroups(groups.data.data);\n }, [ groups.hasCompleted, groups.isFetching ]);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n const dispatch = useDispatch();\n const { hasPermissions } = usePermissions();\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n\n function onToggleGroup(student: User, group: ClassroomGroup, toggleOn: boolean): void {\n const analyticsData = {\n id: group.id,\n studentCount: 1\n };\n\n // optimistically update the UI\n let updatedGroups = [...localGroups];\n if (!toggleOn) {\n updatedGroups = updatedGroups.map(g => {\n if (g.id === group.id) {\n return {\n ...g,\n users: {\n ...g.users,\n data: g.users.data.filter(s => s.id !== student.id)\n }\n };\n }\n return g;\n });\n } else {\n updatedGroups = updatedGroups.map(g => {\n if (g.id === group.id) {\n return {\n ...g,\n users: {\n ...g.users,\n data: ArrayHelper.uniq([ ...g.users.data, student ], 'id')\n }\n };\n }\n return g;\n });\n }\n setLocalGroups(updatedGroups);\n\n // send the request\n const request = toggleOn\n ? ClassroomRequests.addStudentsToGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Associate\n });\n })\n : ClassroomRequests.removeStudentsFromGroup([student.id], group.id, props.id, () => {\n AnalyticsHelper.logUserAction(analyticsData, {\n ...baseAnalyticsOptions,\n actionType: UserAction.Dissociate\n });\n });\n\n Flight.fetch(dispatch, request);\n }\n // optimistically update the UI on bulk add/remove\n function onBulkSelectGroup(students: User[], group: ClassroomGroup, shouldAdd: boolean): void {\n let updatedGroups = [...localGroups];\n if (!shouldAdd) {\n updatedGroups = updatedGroups.map(g => {\n if (g.id !== group.id) {\n return g;\n }\n\n return {\n ...g,\n users: {\n ...g.users,\n data: g.users.data.filter(s => !students.some(stu => stu.id === s.id))\n }\n };\n });\n } else {\n updatedGroups = updatedGroups.map(g => {\n if (g.id !== group.id) {\n return g;\n }\n return {\n ...g,\n users: {\n ...g.users,\n data: ArrayHelper.uniq([ ...g.users.data, ...students ], 'id')\n }\n };\n });\n }\n setLocalGroups(updatedGroups);\n }\n\n function onTogglePin(shouldPin: boolean, onSuccess: () => void, onError: () => void): void {\n if (isRostered)\n return;\n const request = shouldPin\n ? ClassroomRequests.pinClassroom\n : ClassroomRequests.unpinClassroom;\n\n Flight.fetch(dispatch, request(classroom.data, onSuccess, onError));\n }\n\n if (\n !classroom.data\n || !students.data?.data\n || !groups.data?.data\n || !config.data\n || !allStudents.data\n || !localGroups\n )\n return <PartialManageClassroomStudents />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='students'\n isRostered={isRostered}\n hasShareFlowV2={hasShareFlowV2}\n >\n {(() => {\n if (isRostered)\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!students.data?.data?.length ? (\n <RosteredClassroomStudentsEmptyState />\n ) : (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={localGroups}\n onToggleGroup={onToggleGroup}\n onBulkSelectGroup={onBulkSelectGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n readOnly\n />\n )}\n </>\n );\n\n if (students.data?.data?.length) {\n return (\n <ManageClassroomStudents\n classroom={classroom.data}\n students={students.data}\n groups={localGroups}\n onToggleGroup={onToggleGroup}\n onBulkSelectGroup={onBulkSelectGroup}\n config={config.data}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n }\n\n return (\n <ManageClassroomStudentsEmptyState\n classroom={classroom.data}\n classroomIdeasText={getPhrase('classroomIdeasText')}\n schoolHasNoStudents={!allStudents.data?.data?.length}\n canManageUsers={hasPermissions(PermissionName.ManageUsers)}\n />\n );\n })()}\n\n {!!students.data?.pagination?.cursors && (\n <Pagination\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.id]\n }}\n cursors={students.data?.pagination?.cursors}\n buttonVariant='outline-dark'\n className='py-2 float-end'\n prevHack\n />\n )}\n </ClassroomLayout>\n );\n}\n","import { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\ntype ClassroomExperience = 'none' | 'minimal' | 'full';\n\nexport function useClassroomExperience() {\n const { hasShareFlowV2, hasClassrooms, isLoadingSettings } = useSettings(null);\n const { hasPermissions, isLoaded } = usePermissions();\n\n function getExperience(): ClassroomExperience {\n if (!hasClassrooms)\n return 'none';\n\n if (hasPermissions(PermissionName.ViewClassrooms))\n return 'full';\n \n if (hasShareFlowV2)\n return 'minimal';\n }\n\n return {\n experience: getExperience(),\n loading: isLoadingSettings || !isLoaded\n };\n}"],"names":["getPhrase","RosteringAlert","props","text","type","className","useBulkCheckboxManager","collection","options","idField","persistNamespace","initial","initialState","Map","items","forceUpdate","prevCollection","prevNamespace","reset","current","clear","isChecked","item","toString","get","isBulkChecked","length","every","setSelected","ids","forEach","id","set","map","i","join","preselectedIds","onToggleBulk","setValue","onToggleItem","nextItemState","getSelected","Array","from","keys","bulkChecked","deselectAll","hasSomeSelections","find","getSelectedCount","size","getMap","mapColourToBsVariant","groupColour","PartialManageClassroomStudents","numItems","PartialPillTabSelector","fill","student","key","Math","random","namespace","ClassroomsNoStudentsState","value","EmptyState","src","ImageUrls","Text","phrase","canManageUsers","isRostering","LanguageService","appLink","application","action","href","target","STUDENT_ENGAGEMENT_IDEAS_LINK","ROSTERING_KB_ARTICLE_URL","RosteredClassroomStudentsEmptyState","ManageClassroomStudentsEmptyState","schoolHasNoStudents","icon","args","classroom","classroomIdeasText","ClassroomGroupPill","group","metadata","colour","title","name","ClassroomGroupExpander","count","DivButton","onClick","getNewGroupAppLink","students","params","addStudents","s","ClassroomGroupDropdown","groups","preselections","studentsAllInGroupLookup","reduce","acc","groupUserIds","Set","users","data","u","has","checkStudentsAllInGroup","selectedStudents","g","totalCheckedForGroup","Object","entries","sort","a","b","localeCompare","dropdownProps","align","alignRight","disabled","show","Dropdown","as","SvgContainer","svgName","disabledTooltips","tooltipPlacement","tooltipSpanHack","tooltipSpanHackClassName","isEmptyChecked","checkStudentsNotInGroup","isIndeterminate","isBulk","Checkbox","checked","onChange","shouldAdd","onSelectGroup","indeterminate","AppLink","AnalyticsHelper","analyticsOptions","actionType","workflowPhase","entity","defaultProps","getEditStudentAppLink","userType","UserGroup","getRemoveStudentsAppLink","studentId","classroomId","studentIds","ManageClassroomStudentItem","isComputingTruncation","setIsComputingTruncation","hasExpandedGroups","setHasExpandedGroups","groupVisibilityMapping","setGroupVisibilityMapping","groupListRef","expanderRef","selectedGroupsRef","selectedGroups","hasPermissions","usePermissions","renderAllGroups","actions","throttledResizeListener","FunctionHelper","firstGroupPill","firstElementChild","lastVisibleId","topRowHeight","getBoundingClientRect","y","nextGroupVisibilityMapping","children","child","onToggleCheckbox","readOnly","Avatar","imageCdnUrl","config","initials","UserHelper","surname","imageUrl","avatar","url","ref","groupId","classroomGroups","toggleOn","onToggleGroup","location","readOnlyTooltip","PermissionName","push","label","tooltip","userId","descriptor","actionsDropdownClassName","ManageClassroomStudents","dispatch","alerts","CheckboxHelper","selectionCount","bulkPreselections","filter","allStudentsFound","index","stu","edgeToEdge","selectedStudentIds","onBulkSelectGroup","includes","request","ClassroomRequests","studentCount","success","groupName","escapeText","error","Tooltip","spanHack","IconButton","baseAnalyticsOptions","ClassroomStudentsView","hasShareFlowV2","useSettings","currentUser","UserRequests","cursor","allStudents","UserManagerRequests","customerId","ConfigRequests","localGroups","setLocalGroups","hasCompleted","isFetching","isRostered","_integrations","rostered","analyticsData","updatedGroups","ArrayHelper","some","useSetPageMetadata","classroomName","useHandleClassroomErrors","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","activeTab","pagination","cursors","Pagination","buttonVariant","prevHack","useClassroomExperience","hasClassrooms","isLoadingSettings","isLoaded","experience","loading"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[1336],{69087:(e,t,r)=>{r.d(t,{d:()=>C});var n=r(32735),a=r(56644),s=r(23481),i=r(75896),o=r(83914),c=r(8246),u=r(35223);function l(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:u.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:u.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=s.T.encloseNamespace("shared.interactionResponses");function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function v(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(){return n.createElement(n.Fragment,null)},y=v(v(v(v(v(v(v({},a.Z9.Annotation,f),a.Z9.Image,f),a.Z9.MissingWord,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))})):n.createElement(n.Fragment,null)}),a.Z9.MultipleChoice,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e}))})):n.createElement(n.Fragment,null)}),a.Z9.TrueOrFalse,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t}):n.createElement(n.Fragment,null)}),a.Z9.ShortAnswer,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t},e.children):n.createElement(n.Fragment,null)}),a.Z9.Illustration,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)}),g=r(97408),p=r(44526),w=r(56151),h=r(3894),b=r(69737),I=r(83140),E=r(80845),S=r(64818);const k={avatarContainer:"O7oaA"};function C(e){var t,r,a,s,i,o,c,u=y[e.interaction.typeId];if(!u)return n.createElement(n.Fragment,null);var l=(0,E.j_)(e.studentResults),m=(0,E.f6)(e.interaction.id,l),d=I.A.isInteractionCorrect(e.interaction,l);return n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:k.avatarContainer},n.createElement(g.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?S.l.getInitialsFromFullName(e.anonymisedUserName):S.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(s=e.studentResults.user)||void 0===s?void 0:s.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(c=null===(o=e.studentResults)||void 0===o?void 0:o.user)||void 0===c?void 0:c.sessionId)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(w.U,{studentResults:e.studentResults,correctness:d,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},m?n.createElement(u,{interaction:e.interaction,answers:m.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(h.Z,{studentAttempt:m,correctness:d,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(b.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:d}))))))}},93479:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,s=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),s&&(n+=":".concat(s)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}function s(e,t,r){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:r}}var i={interactiveResultSet:function(e,t,r,i,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t,":").concat(o),i),data:s(r,i,o),type:n.k.POST,normalize:!1,success:c,error:u,always:l}},mark:function(e,t,r,a,s,i,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:o}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:n.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},9193:(e,t,r)=>{r.d(t,{D:()=>v});var n=r(32735),a=r(70680),s=r(23481),i=r(20354),o=r(93479),c=r(39157),u=r(69883);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=s.T.encloseNamespace("reportsShared.dataHooks"),v=function(e,t,r){var s,v,f=(s=(0,n.useState)({}),v=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,i,o=[],c=!0,u=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=s.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(s,v)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(s,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=f[0],g=f[1],p=(0,a.I0)(),w=(0,u.Z)();return{markedAnswers:y,addMarkedAnswers:function(e,t){e.forEach(function(e){g(function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))})})},submitMarkedAnswers:function(){var n=Object.keys(y).map(function(e){return y[e]});if(n.length){var a=0,s=0;n.forEach(function(r){var n=r.id,a=r.resultId,s=r.questionId,l=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:s,status:l},c,null,u))})}function c(){s++}function u(){var e,t;++a===n.length&&(e="",t=!1,0===s&&(e=d("error",{smartCount:n.length}),t=!0),s<a&&(e=d("success",{smartCount:s})+" ".concat(d("partialError",{smartCount:a-s}))),s===a&&(e=d("success",{smartCount:s})),t?w.error(e):w.success(e),g({}),r&&r())}}}}},26136:(e,t,r)=>{r.d(t,{B:()=>o});var n=r(76198),a=r(23481),s=r(64818),i=a.T.encloseNamespace("shared.analyticsUtils");function o(e,t){return e?t?(0,n._8)((r=e.id,a=e.sessionId,o=+"".concat(r||function(e){if(!e)return 0;for(var t=0,r=0;r<e.length;r++)t=(t<<5)-t+e.charCodeAt(r),t|=0;return Math.abs(t)}(a)).concat(Math.floor((new Date).getMinutes()/5)),{dictionaries:[n.O9,n.yd],separator:" ",length:2,style:"capital",seed:o})):e.deleted?i("deleted"):s.l.getFullName(e)||i("anonUser"):i("anonUser");var r,a,o}},39157:(e,t,r)=>{r.d(t,{HI:()=>d,R6:()=>u,Rt:()=>f,UU:()=>m,Zs:()=>l,nq:()=>v});var n=r(75896),a=r(94892),s=r(28972),i=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var s={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,c.Q)(e),o=new Set(i.map(function(e){return e.id}));t.students.forEach(function(t){var i=Object.assign(Object.assign({},t),{summary:f(e,t)});i.summary.awaitingMarking?s.markingRequired.push(i):n.m.last(t.results).attempts.filter(function(e){var t;return!!o.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===o.size?(s.completed.push(i),i.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&s.highScore.push(i),i.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&s.lowScore.push(i)):s.notCompleted.push(i)});var u=n.m.sortBy(s.lowScore,function(e){return e.summary.percentCorrect}),l=n.m.sortBy(s.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},s),{lowScore:u,highScore:l})}function l(e,t){return(0,c.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function m(e){return"".concat(e.questionId,":").concat(e.resultId)}function d(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Correct}))?i.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect}))?i.N.Incorrect:void 0}function v(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach(function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var m=o.A.isInteractionCorrect(e,r);m===s.w.Correct&&n++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&u++,m!==s.w.UnAnswered&&a++}}),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function f(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,i=0,u=0;n.forEach(function(e){var t=o.A.isInteractionCorrect(e,r);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&u++});var l=a>0?i/a:0,m=new Set(n.map(function(e){return e.id})),d=r.attempts.filter(function(e){var t;return!!m.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:d,attempts:t.results.length,unanswered:a-d,percentCorrect:l,correct:i,awaitingMarking:u}}},94892:(e,t,r)=>{r.d(t,{T:()=>a,i:()=>n});var n={HIGH:.75,MODERATE:.5},a={HIGH:.7,MODERATE:.7}}}]);
2
- //# sourceMappingURL=1336-1826f6e582-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4208],{69087:(e,t,r)=>{r.d(t,{d:()=>C});var n=r(32735),a=r(56644),s=r(23481),i=r(75896),o=r(83914),c=r(8246),u=r(35223);function l(e){var t=e.answer;return n.createElement("div",{key:t.id,className:"".concat(function(e){switch(e){case c.N.Correct:return"bg-light-green";case c.N.Incorrect:return"bg-light-red";case c.N.PendingReview:return"bg-light-blue"}}(t.status)," rounded p-2 mb-2")},n.createElement("div",{className:"d-flex align-items-center gap-2"},t.status===c.N.Correct&&n.createElement(o.x,{svgName:u.vn.Check,className:"svg-container flex-shrink-0 text-success"}),t.status===c.N.Incorrect&&n.createElement(o.x,{svgName:u.vn.Close,className:"svg-container flex-shrink-0 text-danger"}),!e.customAnswer&&n.createElement("span",{className:e.textClassName},t.text)),e.children)}var m=s.T.encloseNamespace("shared.interactionResponses");function d(e){return d="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},d(e)}function v(e,t,r){return(t=function(e){var t=function(e){if("object"!=d(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=d(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==d(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var f=function(){return n.createElement(n.Fragment,null)},y=v(v(v(v(v(v(v({},a.Z9.Annotation,f),a.Z9.Image,f),a.Z9.MissingWord,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e,textClassName:"bg-white p-1 border border-gray-300 rounded"}))})):n.createElement(n.Fragment,null)}),a.Z9.MultipleChoice,function(e){return e.answers.length?n.createElement("ul",{className:"list-unstyled"},e.answers.map(function(e){return n.createElement("li",{key:e.id},n.createElement(l,{answer:e}))})):n.createElement(n.Fragment,null)}),a.Z9.TrueOrFalse,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t}):n.createElement(n.Fragment,null)}),a.Z9.ShortAnswer,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t},e.children):n.createElement(n.Fragment,null)}),a.Z9.Illustration,function(e){var t=i.m.first(e.answers);return t?n.createElement(l,{answer:t,customAnswer:!0},n.createElement("div",{className:"ratio ratio-16x9"},n.createElement("img",{className:"img-fluid bg-white border rounded h-100 w-100",src:t.text,alt:"".concat(m("illustrationAlt"),": ").concat(e.interaction.name)})),e.children):n.createElement(n.Fragment,null)}),g=r(97408),p=r(44526),w=r(56151),h=r(3894),b=r(69737),I=r(83140),E=r(80845),S=r(64818);const k={avatarContainer:"O7oaA"};function C(e){var t,r,a,s,i,o,c,u=y[e.interaction.typeId];if(!u)return n.createElement(n.Fragment,null);var l=(0,E.j_)(e.studentResults),m=(0,E.f6)(e.interaction.id,l),d=I.A.isInteractionCorrect(e.interaction,l);return n.createElement("div",{className:"position-relative"},n.createElement("div",{className:"rounded ".concat(null!==(t=e.className)&&void 0!==t?t:"")},n.createElement("div",{className:"d-flex"},!!e.showStudentDetails&&n.createElement("div",{className:"me-2"},n.createElement("div",{className:k.avatarContainer},n.createElement(g.q,{imageCdnUrl:e.imageCdnUrl,initials:e.anonymisedUserName?S.l.getInitialsFromFullName(e.anonymisedUserName):S.l.getInitials(null===(r=e.studentResults.user)||void 0===r?void 0:r.name,null===(a=e.studentResults.user)||void 0===a?void 0:a.surname),imageUrl:e.anonymisedUserName?null:null===(i=null===(s=e.studentResults.user)||void 0===s?void 0:s.avatar)||void 0===i?void 0:i.url,showAnonymousUser:!!(null===(c=null===(o=e.studentResults)||void 0===o?void 0:o.user)||void 0===c?void 0:c.sessionId)}))),n.createElement("div",{className:"flex-grow-1"},!!e.showStudentDetails&&n.createElement(w.U,{studentResults:e.studentResults,correctness:d,anonymisedUserName:e.anonymisedUserName}),n.createElement("div",{className:"d-flex justify-content-between"},n.createElement("div",{className:"flex-grow-1 mb-2 ".concat(e.responseComponentClass?e.responseComponentClass:"")},m?n.createElement(u,{interaction:e.interaction,answers:m.answers,imageCdnUrl:e.imageCdnUrl,user:e.studentResults.user,showFeedback:e.showFeedback,showAvatar:e.showAvatar},n.createElement(h.Z,{studentAttempt:m,correctness:d,markInteraction:e.markInteraction,markedStatus:e.markedStatus})):n.createElement(b.R,null)),!e.showStudentDetails&&n.createElement(p.Y,{correctness:d}))))))}},93479:(e,t,r)=>{r.d(t,{I:()=>i});var n=r(99940);function a(e,t,r){if(!t)return e;var n="".concat(e,":").concat(t.start,":").concat(t.end),a=Array.isArray(t.userId)?t.userId.sort().join(":"):t.userId,s=Array.isArray(t.groupId)?t.groupId.sort().join(":"):t.groupId,i=Array.isArray(t.customerId)?t.customerId.sort().join(":"):t.customerId;return a&&(n+=":".concat(a)),s&&(n+=":".concat(s)),i&&(n+=":".concat(i)),r&&(n+=":".concat(r)),n}function s(e,t,r){return{currentUserId:e.id,currentCustomerId:e.customerId,dateRange:t?{start:t.start,end:t.end}:void 0,userIds:null==t?void 0:t.userId,classroomsAndGroups:null==t?void 0:t.groupId,shareId:r}}var i={interactiveResultSet:function(e,t,r,i,o,c,u,l){return{url:o?"/api/domain/v3/analytics/interactives/".concat(e,"/metadata/").concat(t):"/api/domain/v2/analytics/interactives/".concat(e,"/metadata/").concat(t),key:a("interactive:result:set:".concat(e,":").concat(t,":").concat(o),i),data:s(r,i,o),type:n.k.POST,normalize:!1,success:c,error:u,always:l}},mark:function(e,t,r,a,s,i,o){return{url:"/api/domain/v1/analytics/answers/".concat(r),key:"mark:answer:".concat(r,":").concat(a.resultId),type:n.k.PUT,data:a,normalize:!1,invalidationKeys:"interactive:result:set:".concat(e,":").concat(t),success:s,error:i,always:o}},pendingReviews:function(e){var t=e.interactives.map(function(e){return"".concat(e.interactiveId,":").concat(e.metadataId,":").concat(e.shareId)}).join(",");return{url:"/api/domain/v1/analytics/interactives/pending-reviews/summary",key:"interactives:pending:reviews:".concat(t),type:n.k.POST,data:e,normalize:!1}},interactiveResultsReport:function(e){return{url:"/api/domain/v3/analytics/interactives/report",key:"interactive:results:report",data:e,type:n.k.POST,normalize:!1}}}},9193:(e,t,r)=>{r.d(t,{D:()=>v});var n=r(32735),a=r(70680),s=r(23481),i=r(20354),o=r(93479),c=r(39157),u=r(69883);function l(e){return l="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},l(e)}function m(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=Array(t);r<t;r++)n[r]=e[r];return n}var d=s.T.encloseNamespace("reportsShared.dataHooks"),v=function(e,t,r){var s,v,f=(s=(0,n.useState)({}),v=2,function(e){if(Array.isArray(e))return e}(s)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var n,a,s,i,o=[],c=!0,u=!1;try{if(s=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;c=!1}else for(;!(c=(n=s.call(r)).done)&&(o.push(n.value),o.length!==t);c=!0);}catch(e){u=!0,a=e}finally{try{if(!c&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(u)throw a}}return o}}(s,v)||function(e,t){if(e){if("string"==typeof e)return m(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?m(e,t):void 0}}(s,v)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),y=f[0],g=f[1],p=(0,a.I0)(),w=(0,u.Z)();return{markedAnswers:y,addMarkedAnswers:function(e,t){e.forEach(function(e){g(function(r){return Object.assign(Object.assign({},r),function(e,t,r){return(t=function(e){var t=function(e){if("object"!=l(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var r=t.call(e,"string");if("object"!=l(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==l(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}({},(0,c.UU)(e),Object.assign(Object.assign({},e),{status:t})))})})},submitMarkedAnswers:function(){var n=Object.keys(y).map(function(e){return y[e]});if(n.length){var a=0,s=0;n.forEach(function(r){var n=r.id,a=r.resultId,s=r.questionId,l=r.status;i.a.fetch(p,o.I.mark(e,t,n,{id:n,resultId:a,questionId:s,status:l},c,null,u))})}function c(){s++}function u(){var e,t;++a===n.length&&(e="",t=!1,0===s&&(e=d("error",{smartCount:n.length}),t=!0),s<a&&(e=d("success",{smartCount:s})+" ".concat(d("partialError",{smartCount:a-s}))),s===a&&(e=d("success",{smartCount:s})),t?w.error(e):w.success(e),g({}),r&&r())}}}}},39157:(e,t,r)=>{r.d(t,{HI:()=>d,R6:()=>u,Rt:()=>f,UU:()=>m,Zs:()=>l,nq:()=>v});var n=r(75896),a=r(94892),s=r(28972),i=r(8246),o=r(83140),c=r(80845);function u(e,t,r){var s={markingRequired:[],lowScore:[],highScore:[],completed:[],notCompleted:[]},i=(0,c.Q)(e),o=new Set(i.map(function(e){return e.id}));t.students.forEach(function(t){var i=Object.assign(Object.assign({},t),{summary:f(e,t)});i.summary.awaitingMarking?s.markingRequired.push(i):n.m.last(t.results).attempts.filter(function(e){var t;return!!o.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length===o.size?(s.completed.push(i),i.summary.percentCorrect>=((null==r?void 0:r.HIGH)||a.i.HIGH)&&s.highScore.push(i),i.summary.percentCorrect<((null==r?void 0:r.MODERATE)||a.i.MODERATE)&&s.lowScore.push(i)):s.notCompleted.push(i)});var u=n.m.sortBy(s.lowScore,function(e){return e.summary.percentCorrect}),l=n.m.sortBy(s.highScore,function(e){return-e.summary.percentCorrect});return Object.assign(Object.assign({},s),{lowScore:u,highScore:l})}function l(e,t){return(0,c.Wn)(e).find(function(e){return e.id.toString()===t.toString()})}function m(e){return"".concat(e.questionId,":").concat(e.resultId)}function d(e,t,r){var n=(0,c.j_)(t),a=(0,c.f6)(e,n);return(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Correct}))?i.N.Correct:(null==a?void 0:a.answers.every(function(e){var t;return(null===(t=r[m(e)])||void 0===t?void 0:t.status)===i.N.Incorrect}))?i.N.Incorrect:void 0}function v(e,t){var r=t.students.length,n=0,a=0,i=0,u=0,l=0;return t.students.forEach(function(t){var r=(0,c.j_)(t);if(r){l+=t.results.length;var m=o.A.isInteractionCorrect(e,r);m===s.w.Correct&&n++,m===s.w.UnAnswered&&i++,m===s.w.AwaitingMarking&&u++,m!==s.w.UnAnswered&&a++}}),{percentCorrect:r>0?n/r:0,correct:n,answered:a,unanswered:i,awaitingMarking:u,attempts:l}}function f(e,t){var r=(0,c.j_)(t),n=(0,c.Q)(e),a=n.length,i=0,u=0;n.forEach(function(e){var t=o.A.isInteractionCorrect(e,r);t===s.w.Correct&&i++,t===s.w.AwaitingMarking&&u++});var l=a>0?i/a:0,m=new Set(n.map(function(e){return e.id})),d=r.attempts.filter(function(e){var t;return!!m.has(null===(t=null==e?void 0:e.answers[0])||void 0===t?void 0:t.questionId)}).length;return{answered:d,attempts:t.results.length,unanswered:a-d,percentCorrect:l,correct:i,awaitingMarking:u}}}}]);
2
+ //# sourceMappingURL=4208-0706461da6-lite.chunk.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scripts/4208-0706461da6-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/IllustrationResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MissingWordResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/MultipleChoiceResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/TrueOrFalseResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/components/ShortAnswerResponse.tsx","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/interaction-response-item.scss","file:///app/packages/libs/shared/src/apps/analytics/components/questions-list/interaction-response-item/InteractionResponseItem.tsx","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseMarkAnswers.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/InteractiveUtils.ts"],"sourcesContent":["import React from 'react';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { StudentAnswer } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface AnswerContainerProps extends React.PropsWithChildren {\n answer: StudentAnswer;\n textClassName?: string;\n customAnswer?: boolean;\n}\n\nexport function AnswerContainer(props: AnswerContainerProps) {\n const { answer } = props;\n\n function getBgColour(status: InteractiveAnswerStatus) {\n switch (status) {\n case InteractiveAnswerStatus.Correct: return 'bg-light-green';\n case InteractiveAnswerStatus.Incorrect: return 'bg-light-red';\n case InteractiveAnswerStatus.PendingReview: return 'bg-light-blue';\n }\n }\n\n return (\n <div key={answer.id} className={`${getBgColour(answer.status)} rounded p-2 mb-2`}>\n <div className='d-flex align-items-center gap-2'>\n {answer.status === InteractiveAnswerStatus.Correct && <SvgContainer svgName={cvSvgLibrary.Check} className='svg-container flex-shrink-0 text-success' />}\n {answer.status === InteractiveAnswerStatus.Incorrect && <SvgContainer svgName={cvSvgLibrary.Close} className='svg-container flex-shrink-0 text-danger' />}\n {!props.customAnswer && <span className={props.textClassName}>{answer.text}</span>}\n </div>\n {props.children}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nconst namespace = 'shared.interactionResponses';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function IllustrationResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} customAnswer>\n <div className='ratio ratio-16x9'>\n <img\n className='img-fluid bg-white border rounded h-100 w-100'\n src={answer.text}\n alt={`${getPhrase('illustrationAlt')}: ${props.interaction.name}`}\n />\n </div>\n {props.children}\n </AnswerContainer>\n );\n}","import React from 'react';\n\nimport { Interaction, InteractionTypeId, StudentAnswer, User } from 'libs/shared/interfaces';\n\nimport { IllustrationResponse } from './components/IllustrationResponse';\nimport { MissingWordResponse } from './components/MissingWordResponse';\nimport { MultipleChoiceResponse } from './components/MultipleChoiceResponse';\nimport { ShortAnswerResponse } from './components/ShortAnswerResponse';\nimport { TrueOrFalseResponse } from './components/TrueOrFalseResponse';\n\nexport interface ResponseItemComponentProps extends React.PropsWithChildren {\n interaction: Interaction;\n answers: StudentAnswer[];\n imageCdnUrl: string;\n user: User;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n}\nconst NoResponseRequired = () => <></>;\n\nexport const ResponseItemComponentLookup: {\n [typeId: number]: (props: ResponseItemComponentProps) => JSX.Element\n} = {\n [InteractionTypeId.Annotation]: NoResponseRequired,\n [InteractionTypeId.Image]: NoResponseRequired,\n [InteractionTypeId.MissingWord]: MissingWordResponse,\n [InteractionTypeId.MultipleChoice]: MultipleChoiceResponse,\n [InteractionTypeId.TrueOrFalse]: TrueOrFalseResponse,\n [InteractionTypeId.ShortAnswer]: ShortAnswerResponse,\n [InteractionTypeId.Illustration]: IllustrationResponse\n};","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\n\nexport function MissingWordResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer\n answer={answer}\n textClassName='bg-white p-1 border border-gray-300 rounded'\n />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function MultipleChoiceResponse(props: ResponseItemComponentProps) {\n if (!props.answers.length) return <></>;\n\n return (\n <ul className='list-unstyled'>\n {props.answers.map(answer => (\n <li key={answer.id}>\n <AnswerContainer answer={answer} />\n </li>\n ))}\n </ul>\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function TrueOrFalseResponse(props: ResponseItemComponentProps) {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer} />\n );\n}","import React from 'react';\n\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AnswerContainer } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/components/AnswerContainer';\nimport { ResponseItemComponentProps } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\n\nexport function ShortAnswerResponse(props: ResponseItemComponentProps): JSX.Element {\n const answer = ArrayHelper.first(props.answers);\n\n if (!answer)\n return <></>;\n\n return (\n <AnswerContainer answer={answer}>\n {props.children}\n </AnswerContainer>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"O7oaA\"};","import React from 'react';\n\nimport { ResponseItemComponentLookup } from 'libs/shared/apps/analytics/components/questions-list/interaction-response-item/ResponseItemComponentLookup';\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { InteractionResponseCorrectness } from 'libs/shared/components/interaction-response/InteractionResponseCorrectness';\nimport { InteractionStudentDetailsHeader } from 'libs/shared/components/interaction-response/InteractionStudentDetailsHeader';\nimport { MarkResponse } from 'libs/shared/components/interaction-response/MarkResponse';\nimport { NoResponse } from 'libs/shared/components/interaction-response/response-types/NoResponse';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './interaction-response-item.scss';\n\ninterface InteractionResponseProps {\n interaction: Interaction;\n studentResults: StudentResults;\n imageCdnUrl: string;\n markInteraction: (answers: StudentAnswer[], status: InteractiveAnswerStatus) => void;\n markedStatus?: InteractiveAnswerStatus;\n showStudentDetails?: boolean;\n className?: string;\n showFeedback?: boolean;\n showAvatar?: boolean;\n anonymisedUserName?: string;\n responseComponentClass?: string;\n}\n\nexport function InteractionResponseItem(props: InteractionResponseProps): JSX.Element {\n const ResponseItemComponent = ResponseItemComponentLookup[props.interaction.typeId];\n\n if (!ResponseItemComponent)\n return <></>;\n\n const result = getStudentResult(props.studentResults);\n\n const studentAttempt = getStudentAttempt(props.interaction.id, result);\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(props.interaction, result);\n\n return (\n <div className='position-relative'>\n <div className={`rounded ${props.className ?? ''}`}>\n <div className='d-flex'>\n {!!props.showStudentDetails &&\n <div className='me-2'>\n <div className={styles.avatarContainer}>\n <Avatar\n imageCdnUrl={props.imageCdnUrl}\n initials={props.anonymisedUserName\n ? UserHelper.getInitialsFromFullName(props.anonymisedUserName)\n : UserHelper.getInitials(props.studentResults.user?.name, props.studentResults.user?.surname)\n }\n imageUrl={props.anonymisedUserName ? null : props.studentResults.user?.avatar?.url}\n showAnonymousUser={!!props.studentResults?.user?.sessionId}\n />\n </div>\n \n </div>\n }\n <div className='flex-grow-1'>\n {!!props.showStudentDetails &&\n <InteractionStudentDetailsHeader\n studentResults={props.studentResults}\n correctness={correctness}\n anonymisedUserName={props.anonymisedUserName}\n />\n }\n <div className='d-flex justify-content-between'>\n <div className={`flex-grow-1 mb-2 ${props.responseComponentClass ? props.responseComponentClass : ''}`}>\n {studentAttempt\n ? <ResponseItemComponent\n interaction={props.interaction}\n answers={studentAttempt.answers}\n imageCdnUrl={props.imageCdnUrl}\n user={props.studentResults.user}\n showFeedback={props.showFeedback}\n showAvatar={props.showAvatar}\n >\n <MarkResponse\n studentAttempt={studentAttempt}\n correctness={correctness}\n markInteraction={props.markInteraction}\n markedStatus={props.markedStatus}\n />\n </ResponseItemComponent>\n : <NoResponse />\n }\n </div>\n {!props.showStudentDetails &&\n <InteractionResponseCorrectness correctness={correctness} />\n }\n </div>\n </div>\n </div>\n </div>\n </div>\n );\n}","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n const key = data.interactives.map(interactive => `${interactive.interactiveId}:${interactive.metadataId}:${interactive.shareId}`).join(',');\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews:${key}`,\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import { useState } from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { getMarkedAnswerId } from 'libs/shared/apps/analytics/utils/InteractiveUtils';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { StudentAnswer } from 'libs/shared/interfaces';\n\nconst getPhrase = LanguageService.encloseNamespace('reportsShared.dataHooks');\n\nexport type MarkedAnswerHash = { [id: string]: StudentAnswer };\n\n/**\n * This hook manages the storing of a marked answer hash in state and then the submitting\n * of those answers via an api call.\n */\nexport const useMarkAnswers = (interactiveId: string, interactiveMetadataId: string, onDone?: () => void) => {\n const [ markedAnswers, setMarkedAnswers ] = useState<MarkedAnswerHash>({});\n\n const dispatch = useDispatch();\n const alerts = useAlerts();\n\n function addMarkedAnswers(answers: StudentAnswer[], status: InteractiveAnswerStatus): void {\n answers.forEach(a => {\n setMarkedAnswers(m => ({ ...m, [getMarkedAnswerId(a)]: { ...a, status } }));\n });\n }\n\n function submitMarkedAnswers(): void {\n const answers = Object.keys(markedAnswers).map(key => markedAnswers[key]);\n\n if (!answers.length)\n return;\n\n let completeCount = 0;\n let successCount = 0;\n\n function onSuccess(): void {\n successCount++;\n }\n\n function onAlways(): void {\n completeCount++;\n\n if (completeCount === answers.length)\n onComplete();\n }\n\n function onComplete(): void {\n let alertMessage = '';\n let useErrorAlert = false;\n\n if (successCount === 0) {\n alertMessage = getPhrase('error', { smartCount: answers.length });\n useErrorAlert = true;\n }\n\n if (successCount < completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount })\n + ` ${getPhrase('partialError', { smartCount: completeCount - successCount })}`;\n }\n\n if (successCount === completeCount) {\n alertMessage = getPhrase('success', { smartCount: successCount });\n }\n\n useErrorAlert\n ? alerts.error(alertMessage)\n : alerts.success(alertMessage);\n\n setMarkedAnswers({});\n\n onDone && onDone();\n }\n\n answers.forEach(({ id, resultId, questionId, status }) => {\n Flight.fetch(dispatch, InteractiveResultsRequests.mark(\n interactiveId,\n interactiveMetadataId,\n id,\n { id, resultId, questionId, status },\n onSuccess,\n null,\n onAlways\n ));\n });\n }\n\n return {\n markedAnswers,\n addMarkedAnswers,\n submitMarkedAnswers\n };\n};","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { MarkedAnswerHash } from 'libs/shared/apps/analytics/hooks/UseMarkAnswers';\nimport { ResultsSummary } from 'libs/shared/apps/analytics/interfaces/ResultsSummary';\nimport { StudentResultsWithSummary } from 'libs/shared/apps/analytics/interfaces/StudentResultsWithSummary';\nimport { ScoreThresholdDefaults, ScoreThresholds } from 'libs/shared/constants/ScoreThresholds';\nimport { InteractionCorrectness } from 'libs/shared/enums/InteractionCorrectness';\nimport { InteractiveAnswerStatus } from 'libs/shared/enums/InteractiveAnswerStatus';\nimport { Interaction, StudentAnswer, StudentResults } from 'libs/shared/interfaces';\nimport { Interactive, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { InteractiveCorrectnessHelper } from 'libs/shared/utils/InteractiveCorrectnessHelper';\nimport { flattenInteractions, getInteractions, getStudentAttempt, getStudentResult } from 'libs/shared/utils/InteractiveHelper';\n\ninterface StudentGroups {\n markingRequired: StudentResultsWithSummary[];\n lowScore: StudentResultsWithSummary[];\n highScore: StudentResultsWithSummary[];\n completed: StudentResultsWithSummary[];\n notCompleted: StudentResultsWithSummary[];\n}\n\nexport function groupStudents(\n interactive: Interactive,\n results: InteractiveResultSet,\n scoreThreshold?: ScoreThresholds\n): StudentGroups {\n const groups: StudentGroups = {\n markingRequired: [],\n lowScore: [],\n highScore: [],\n completed: [],\n notCompleted: []\n };\n\n const interactions = getInteractions(interactive);\n const interactionIds = new Set(interactions.map(i => i.id));\n \n results.students.forEach(s => {\n const withSummary = {\n ...s,\n summary: getStudentResultsSummary(interactive, s)\n };\n \n if (withSummary.summary.awaitingMarking) {\n groups.markingRequired.push(withSummary);\n return;\n }\n\n const result = ArrayHelper.last(s.results);\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n if (answeredInteractions === interactionIds.size) {\n groups.completed.push(withSummary);\n } else {\n groups.notCompleted.push(withSummary);\n return;\n }\n \n if (withSummary.summary.percentCorrect >= (scoreThreshold?.HIGH || ScoreThresholdDefaults.HIGH))\n groups.highScore.push(withSummary);\n \n if (withSummary.summary.percentCorrect < (scoreThreshold?.MODERATE || ScoreThresholdDefaults.MODERATE))\n groups.lowScore.push(withSummary);\n });\n \n const sortedLowScore = ArrayHelper.sortBy(groups.lowScore, s => s.summary.percentCorrect);\n const sortedHighScore = ArrayHelper.sortBy(groups.highScore, s => -s.summary.percentCorrect);\n \n return {\n ...groups,\n lowScore: sortedLowScore,\n highScore: sortedHighScore\n };\n}\n\nexport function getInteractionById(interactive: Interactive, interactionId: string): Interaction {\n const flattenedInteractions = flattenInteractions(interactive);\n return flattenedInteractions.find(i => i.id.toString() === interactionId.toString());\n}\n\n/**\n * We need to use the question and result ids as a list of one student's responses\n * to multiple questions will all have the same result id and a list of multiple\n * students responses to one question will all have the same questionId.\n */\nexport function getMarkedAnswerId(answer: StudentAnswer): string {\n return `${answer.questionId}:${answer.resultId}`;\n}\n\nexport function getMarkedStatus(\n interactionId: string,\n studentResults: StudentResults,\n markedAnswers: MarkedAnswerHash\n): InteractiveAnswerStatus {\n const result = getStudentResult(studentResults);\n const studentResponse = getStudentAttempt(interactionId, result);\n\n const isMarkedCorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Correct;\n });\n\n if (isMarkedCorrect)\n return InteractiveAnswerStatus.Correct;\n\n const isMarkedIncorrect = studentResponse?.answers.every(a => {\n return markedAnswers[getMarkedAnswerId(a)]?.status === InteractiveAnswerStatus.Incorrect;\n });\n\n if (isMarkedIncorrect)\n return InteractiveAnswerStatus.Incorrect;\n}\n\nexport function getInteractionResultsSummary(\n interaction: Interaction,\n results: InteractiveResultSet\n): ResultsSummary {\n const numStudents = results.students.length;\n let numCorrect = 0;\n let answered = 0;\n let unanswered = 0;\n let awaitingMarking = 0;\n let attempts = 0;\n\n results.students.forEach(s => {\n const result = getStudentResult(s);\n\n if (!result)\n return;\n\n attempts = attempts + s.results.length;\n\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(interaction, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.UnAnswered)\n unanswered++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n\n if (correctness !== InteractionCorrectness.UnAnswered)\n answered++;\n });\n\n\n const percentCorrect = numStudents > 0\n ? numCorrect / numStudents\n : 0;\n\n return {\n percentCorrect,\n correct: numCorrect,\n answered,\n unanswered,\n awaitingMarking,\n attempts\n };\n}\n\nexport function getStudentResultsSummary(interactive: Interactive, studentResults: StudentResults): ResultsSummary {\n const result = getStudentResult(studentResults);\n\n const interactions = getInteractions(interactive);\n\n const numInteractions = interactions.length;\n\n let numCorrect = 0;\n let awaitingMarking = 0;\n\n interactions.forEach(i => {\n const correctness = InteractiveCorrectnessHelper.isInteractionCorrect(i, result);\n\n if (correctness === InteractionCorrectness.Correct)\n numCorrect++;\n\n if (correctness === InteractionCorrectness.AwaitingMarking)\n awaitingMarking++;\n });\n\n const percentCorrect = numInteractions > 0 ? numCorrect / numInteractions : 0;\n\n /**\n * Our interactions list has images and annotations filtered out.\n * We built a map of valid questions, so that we can calculate the unswered accurately.\n * We're doing this because of a bug that caused annotations and images to record answers in the player.\n * - Sha\n */\n const interactionIds = new Set(interactions.map(i => i.id));\n const answeredInteractions = result.attempts.filter(a => !!interactionIds.has(a?.answers[0]?.questionId)).length;\n\n return {\n answered: answeredInteractions,\n attempts: studentResults.results.length,\n unanswered: numInteractions - answeredInteractions,\n percentCorrect,\n correct: numCorrect,\n awaitingMarking\n };\n}"],"names":["AnswerContainer","props","answer","key","id","className","status","InteractiveAnswerStatus","getBgColour","SvgContainer","svgName","customAnswer","textClassName","text","children","getPhrase","LanguageService","NoResponseRequired","ResponseItemComponentLookup","answers","length","map","ArrayHelper","src","alt","interaction","name","InteractionResponseItem","ResponseItemComponent","typeId","result","studentResults","studentAttempt","correctness","InteractiveCorrectnessHelper","showStudentDetails","Avatar","imageCdnUrl","initials","anonymisedUserName","UserHelper","user","surname","imageUrl","avatar","url","showAnonymousUser","sessionId","InteractionStudentDetailsHeader","responseComponentClass","showFeedback","showAvatar","MarkResponse","markInteraction","markedStatus","NoResponse","InteractionResponseCorrectness","getAnalyticsRequestKey","baseKey","filter","extra","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactives","interactive","metadataId","interactiveResultsReport","useMarkAnswers","onDone","useState","markedAnswers","setMarkedAnswers","dispatch","alerts","addMarkedAnswers","forEach","a","m","submitMarkedAnswers","Object","keys","completeCount","successCount","questionId","I","onSuccess","onAlways","alertMessage","useErrorAlert","smartCount","groupStudents","results","scoreThreshold","groups","markingRequired","lowScore","highScore","completed","notCompleted","interactions","interactionIds","Set","i","students","s","withSummary","summary","getStudentResultsSummary","awaitingMarking","push","attempts","has","size","percentCorrect","HIGH","MODERATE","sortedLowScore","sortedHighScore","getInteractionById","interactionId","find","toString","getMarkedAnswerId","getMarkedStatus","studentResponse","every","getInteractionResultsSummary","numStudents","numCorrect","answered","unanswered","correct","numInteractions","answeredInteractions"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
- "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4578],{1619:(e,t,n)=>{n.d(t,{e:()=>y});var a=n(32735),r=n(23481),s=n(31453),i=n(12528),l=n(83914),o=n(35223),c=n(33518),u=n(2510);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=r.T.encloseNamespace("sharev2.shareAvatar"),v=d(d(d(d(d({},u.y.Open,o.vn.Classrooms),u.y.Link,o.vn.Link),u.y.Classroom,o.vn.Classrooms),u.y.Live,o.vn.Play),u.y.LegacyDirect,o.vn.Share),h=d(d(d(d(d({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"purple"),u.y.Live,"purple"),u.y.LegacyDirect,"indigo"),g=d(d(d(d(d({},u.y.Open,"openShareType"),u.y.Link,"linkShareType"),u.y.Classroom,"classroomShareType"),u.y.Live,"liveShareType"),u.y.LegacyDirect,"legacyDirectShareType");function y(e){var t,n,r=function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText,r=e.openClassroomName;if(t===u.y.Open&&r)return r;if(t===u.y.Classroom&&n)return n;var s=p(g[t]);return a&&(s+=" "+a),s}(e);return a.createElement("div",{className:(0,s.A)("d-flex align-items-center gap-2",e.className)},a.createElement("div",null,a.createElement(i.f,{svgName:v[e.type],variant:h[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:(0,s.A)("m-0",e.titleClassName),title:r},r),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,i=void 0===s?0:s;switch(t){case u.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(i,r);case u.y.Open:return p("openShareTypeSubTitle");case u.y.Link:return function(e){return[c.e.JustMySchool,c.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===c.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===c.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===c.e.Public?p("anyoneWithLinkSubTitle"):e===c.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case u.y.Live:return p("liveShareTypeSubTitle");case u.y.LegacyDirect:return p("legacyDirectTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},33518:(e,t,n)=>{var a;n.d(t,{e:()=>a}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(a||(a={}))},2267:(e,t,n)=>{n.d(t,{I:()=>c});var a=n(20354),r=n(64249),s=n(4594),i=n(5112),l=n(60011),o=n(40841),c={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return o._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,a,r,s,i,l;return{preventScrubbing:null!==(r=null!==(a=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==a?a:null==t?void 0:t.preventScrubbing)&&void 0!==r&&r,immediateFeedback:null!==(l=null!==(i=null===(s=null==e?void 0:e.options)||void 0===s?void 0:s.immediateFeedback)&&void 0!==i?i:null==t?void 0:t.immediateFeedback)&&void 0!==l&&l}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case s.E.Video:return"video";case s.E.Playlist:return"playlist";case s.E.Subject:return"subject";case s.E.Series:return"series";case s.E.Interactive:return"interactive";case s.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return a.a.useBasicFetch(i.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return a.a.useBasicFetch(l.J.seriesWithThumbnailAndCount(e))}}return r.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return r.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return r.I.getAnalyticsOptions(e)}}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>l});var a=n(23481),r=n(41661),s=n(65728),i=a.T.encloseNamespace("shared.shared-utils"),l={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:i("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:i("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},83351:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481),s=n(13876),i=n(36532),l=r.T.encloseNamespace("assign.flowControls");function o(e){var t=e.hideBackButton||!e.onClickBack,n=e.hideNextButton||!e.onClickNext,r=e.hideCreateClassroomButton||!e.onClickCreateClassroom;return t&&n&&r?a.createElement(a.Fragment,null):a.createElement(s.u,{className:"justify-content-between"},a.createElement("div",null,!!e.leftComponent&&e.leftComponent,!r&&a.createElement(s.u.Submit,{variant:"link",onClick:e.onClickCreateClassroom,text:l("createClassroom"),className:"text-info p-0"})),a.createElement("div",{className:"d-flex"},!t&&a.createElement(s.u.Cancel,{variant:"link",onClick:e.onClickBack,text:e.backButtonText||l("back")}),!n&&a.createElement(i.u,{title:e.nextButtonTooltip,disable:!e.nextButtonTooltip,placement:"top",spanHack:!0},a.createElement(s.u.Submit,{variant:"dark",onClick:e.onClickNext,text:e.nextButtonText||l("next"),disabled:e.disableNextButton,showSpinner:e.showSpinner}))))}},35690:(e,t,n)=>{n.d(t,{QD:()=>A,Qv:()=>N,__:()=>k});var a=n(32735),r=n(68050),s=n(69111),i=n(42648),l=n(82602),o=n(31453),c=n(1619),u=n(83345),m=n(4594),d="sharev2.shareViewCount";function p(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement(u.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var v=n(2510),h=n(83914),g=n(35223);function y(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(h.x,{svgName:g.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===v.y.Open)return"".concat(t);if(e.share.type===v.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var f=n(21789),E=n(15611),b=n(91693);const S={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var C="assign.previousAssignments";function x(e){return a.createElement("div",{className:(0,o.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(u.x,{namespace:C,phrase:"heading",options:{count:e.count}})),a.createElement(b.h,{svgName:e.show?g.vn.ChevronUp:g.vn.ChevronDown,onClick:e.onToggle}))}function k(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(u.D.Provider,{value:C},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"dateCreated"}))))}function T(e){var t,n,i=f.x.getClassroomForShare(e.share,e.classrooms),m=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(E.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==m?void 0:m.data,analyticsOptions:null==m?void 0:m.options,className:(0,o.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",S.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==i?void 0:i.name,svgSize:h.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,o.A)(S.shareAvatar),titleClassName:(0,o.A)("text-truncate",S.shareAvatarTitle),hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(p,{share:e.share})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(y,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,l.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,o.A)("cursor-pointer text-info hover-text-underline",S.visibleOnHover)},a.createElement(u.x,{namespace:C,phrase:"view"})))))}function N(e){var t;return a.createElement("div",{className:(0,o.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(i.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return a.createElement(T,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,o.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function A(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,o.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(x,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(k,null),a.createElement(N,Object.assign({},e))))}},95890:(e,t,n)=>{n.d(t,{_:()=>d});var a=n(20354),r=n(2267),s=n(4594),i=n(16714),l=n(39151),o=n(20768),c=n(31949),u=n(22902),m=n(45778);function d(e){var t,n=a.a.useBasicFetch(c.N.currentUser()),d=r.I.getFetchFunctionByType(e.entityType)(e.objectId,null===(t=n.data)||void 0===t?void 0:t.id),p=a.a.useBasicFetch(l.L.config()),v=a.a.useBasicFetch(m.G.isType(d.data,s.E.Interactive)&&d.data.interactiveId&&o.b.interactive(d.data.interactiveId)),h=(0,u.T)(),g=h.hasPermissions,y=h.getGatedPermission,f=h.isLoaded,E=g(i.C.StudentExperience),b=g(i.C.CreateClassrooms),S=y(i.C.ShareToOpenClassrooms);return{loaded:!!(n.data&&d.data&&p.data&&f),currentUser:n,entity:d,interactive:v,config:p,hasStudentExp:E,canCreateClassrooms:b,openClassroomGatedPermission:S}}},24578:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>R});var a=n(32735),r=n(23481),s=n(20354),i=n(75896),l=n(110),o=n(18488),c=n(21789),u=n(9111),m=n(83914),d=n(83345),p=n(16714),v=n(22902),h=n(37802),g=n(70227),y=n(80783),f=n(35223),E=n(14070),b=n(97291),S=n(86099),C=n(83351),x=n(35690),k=n(95890),T=n(40254),N=n(88630),A=n(23923),w=n(97958),I=n(99742),L="assign.sharesAndAssignmentsEmptyState",P=r.T.encloseNamespace(L);function B(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:L})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:L})),!e.hideAssignButton&&a.createElement(a.Fragment,null,a.createElement(w.u.Cta,{icon:f.vn.Classrooms,text:P("ctaAssign"),appLink:e.assignAppLink}),a.createElement(w.u.Cta,{className:"text-dark hover-text-underline mt-3 fw-medium",text:P("ctaShareLink"),appLink:e.shareLinkAppLink})),e.hideAssignButton&&a.createElement(w.u.Cta,{icon:f.vn.Link,text:P("ctaShare"),appLink:e.shareLinkAppLink}))}var F="assign.sharesEmptyState",O=r.T.encloseNamespace(F);function j(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:F})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:F})),a.createElement(w.u.Cta,{icon:f.vn.Link,text:O("cta"),appLink:e.appLink}))}var D="assign.showAssignmentsView",M=r.T.encloseNamespace(D),_=400;function H(e,t){if(e&&t)return l.O.isSame(e.dateCreated,t.dateCreated)?0:l.O.isAfter(e.dateCreated,t.dateCreated)?1:-1}function U(e){return a.createElement("a",{href:e.href,target:"_blank",className:"btn btn-link text-info"},a.createElement("span",{className:"pe-1"},a.createElement(d.x,{phrase:"openInSchoolAnalytics",namespace:D})),a.createElement(m.x,{svgName:f.vn.NewWindow,size:m.S.Small}))}function Z(e){return"assign-and-shares"===e.type?a.createElement(B,{assignAppLink:e.assignAppLink,shareLinkAppLink:e.shareAppLink,hideAssignButton:e.hideAssignButton}):a.createElement(j,{appLink:e.shareAppLink})}function R(e){var t,n,r,l=(0,k._)({objectId:e.objectId,entityType:e.entityType}),m=(0,v.T)().hasPermissions,d=(0,h.r)(null).hasShareFlowV2,f=(0,A.B)(),w=s.a.useBasicFetch(o.o.getSharesByObjectId(e.objectId)),I=(null===(t=w.data)||void 0===t?void 0:t.sort(H))||[],L=i.m.uniq(I.map(c.x.getClassroomIdFromShare).filter(function(e){return!!e})),P=s.a.useBasicFetch(w.hasCompleted&&N.F.getClassroomsByIds(L,null===(n=l.currentUser.data)||void 0===n?void 0:n.customerId)),B=g.c.getObjectUrl(null===(r=l.config.data)||void 0===r?void 0:r.analyticsWebUrl,l.entity.data,d),F=m(p.C.ViewAnalyticsProduct)&&m(p.C.ViewCustomerAnalytics),O=d&&f?"shares":"assign-and-shares",j=l.loaded&&!!w.data&&!!P.data;return a.createElement(u.G,{size:"lg",title:M("title"),showLoadingSpinner:!j,closePopup:e.closePopup},!I.length&&a.createElement(Z,{assignAppLink:T.W.flowSelector({entityType:e.entityType,objectId:e.objectId}),shareAppLink:{application:b.O.SHARE,action:E.e.Share.SHARE,args:[e.objectId],params:{entityType:e.entityType}},type:O,hideAssignButton:y.z.hideAssignButtonOnVideoActions(l.currentUser.data)}),!!I.length&&a.createElement(a.Fragment,null,a.createElement(x.__,null),a.createElement(x.Qv,{assignments:I.reverse(),classrooms:P.data,getItemAppLink:function(e){var t=(0,S.pY)(e);if(t)return t},scrollHeightMax:_})),a.createElement(C.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:M("close"),leftComponent:!!B&&F&&a.createElement(U,{href:B})}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},i=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function o(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};i("en_US",function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),i("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
- //# sourceMappingURL=4578-7578bcf17a-lite.chunk.js.map
1
+ "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[4578],{1619:(e,t,n)=>{n.d(t,{e:()=>g});var a=n(32735),r=n(23481),s=n(31453),i=n(12528),l=n(83914),o=n(35223),c=n(33518),u=n(2510);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function d(e,t,n){return(t=function(e){var t=function(e){if("object"!=m(e)||!e)return e;var t=e[Symbol.toPrimitive];if(void 0!==t){var n=t.call(e,"string");if("object"!=m(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var p=r.T.encloseNamespace("sharev2.shareAvatar"),v=d(d(d(d(d({},u.y.Open,o.vn.Classrooms),u.y.Link,o.vn.Link),u.y.Classroom,o.vn.Classrooms),u.y.Live,o.vn.Play),u.y.LegacyDirect,o.vn.Share),h=d(d(d(d(d({},u.y.Open,"blue"),u.y.Link,"black"),u.y.Classroom,"purple"),u.y.Live,"purple"),u.y.LegacyDirect,"indigo"),y=d(d(d(d(d({},u.y.Open,"openShareType"),u.y.Link,"linkShareType"),u.y.Classroom,"classroomShareType"),u.y.Live,"liveShareType"),u.y.LegacyDirect,"legacyDirectShareType");function g(e){var t,n,r=function(e){var t=e.type,n=e.classroomName,a=e.additionalTitleText,r=e.openClassroomName;if(t===u.y.Open&&r)return r;if(t===u.y.Classroom&&n)return n;var s=p(y[t]);return a&&(s+=" "+a),s}(e);return a.createElement("div",{className:(0,s.A)("d-flex align-items-center gap-2",e.className)},a.createElement("div",null,a.createElement(i.f,{svgName:v[e.type],variant:h[e.type],textVariant:"white",svgWrapperClassName:"p-1",svgSize:null!==(t=e.svgSize)&&void 0!==t?t:l.S.Standard})),a.createElement("div",{className:"d-flex flex-column"},a.createElement("p",{className:(0,s.A)("m-0",e.titleClassName),title:r},r),!e.hideSubtitle&&a.createElement("span",{className:"text-secondary"},null!==(n=e.subtitleText)&&void 0!==n?n:function(e){var t=e.type,n=e.privacy,a=e.studentCount,r=void 0===a?0:a,s=e.classroomGroupCount,i=void 0===s?0:s;switch(t){case u.y.Classroom:return function(e,t){return e&&t?"".concat(p("classroomGroupCount",{smartCount:e}),", ").concat(p("studentSubTitle",{smartCount:t})):e?p("groupSubTitle",{smartCount:e}):t?p("studentSubTitle",{smartCount:t}):p("allStudentsSubTitle")}(i,r);case u.y.Open:return p("openShareTypeSubTitle");case u.y.Link:return function(e){return[c.e.JustMySchool,c.e.Protected].includes(e)?p("respectRatingsSubTitle"):e===c.e.JustMySchoolOverrideRestriction?p("anyoneInSchoolSubTitle"):e===c.e.ProtectedOverrideRestriction?p("anyoneSignedInSubTitle"):e===c.e.Public?p("anyoneWithLinkSubTitle"):e===c.e.PinCode?p("anyoneWithPinSubTitle"):void 0}(n);case u.y.Live:return p("liveShareTypeSubTitle");case u.y.LegacyDirect:return p("legacyDirectTypeSubTitle");default:return p("publicShareTypeSubTitle")}}(e))))}},33518:(e,t,n)=>{var a;n.d(t,{e:()=>a}),function(e){e.Public="Public",e.PinCode="PinCode",e.PasswordProtected="PasswordProtected",e.ProtectedOverrideRestriction="ProtectedOverrideRestriction",e.JustMySchoolOverrideRestriction="JustMySchoolOverrideRestriction",e.Protected="Protected",e.JustMySchool="JustMySchool",e.Direct="Direct"}(a||(a={}))},2267:(e,t,n)=>{n.d(t,{I:()=>c});var a=n(20354),r=n(64249),s=n(4594),i=n(5112),l=n(60011),o=n(40841),c={canEmbed:function(e){return["video","interactive","clip"].includes(e)},canAddPolicies:function(e){return["interactive"].includes(e)},getEnabledIntegrations:function(e,t){return o._.getShareIntegrations(e,t).filter(function(e){return e.enabled}).map(function(e){return e.id})},getShareSettingsInitialValues:function(e,t){var n,a,r,s,i,l;return{preventScrubbing:null!==(r=null!==(a=null===(n=null==e?void 0:e.options)||void 0===n?void 0:n.preventScrubbing)&&void 0!==a?a:null==t?void 0:t.preventScrubbing)&&void 0!==r&&r,immediateFeedback:null!==(l=null!==(i=null===(s=null==e?void 0:e.options)||void 0===s?void 0:s.immediateFeedback)&&void 0!==i?i:null==t?void 0:t.immediateFeedback)&&void 0!==l&&l}},getEnabledSettingsField:function(e){return{showImmediateFeedbackField:"interactive"===e,showPreventScrubbingField:"interactive"===e}},getSharableEntityType:function(e){switch(e.objectTypeId){case s.E.Video:return"video";case s.E.Playlist:return"playlist";case s.E.Subject:return"subject";case s.E.Series:return"series";case s.E.Interactive:return"interactive";case s.E.Clip:return"clip"}},getFetchFunctionByType:function(e){switch(e){case"playlist":return function(e){return a.a.useBasicFetch(i.C.playlistWithThumbnailAndCount(e))};case"series":return function(e){return a.a.useBasicFetch(l.J.seriesWithThumbnailAndCount(e))}}return r.I.getFetchFunctionByType(e)},getAnalyticsEntity:function(e){return r.I.getAnalyticsEntity(e)},getAnalyticsOptions:function(e){return r.I.getAnalyticsOptions(e)}}},41661:(e,t,n)=>{var a;n.d(t,{D:()=>a}),function(e){e.GoogleClassroom="google-classroom",e.MicrosoftTeams="microsoft-teams",e.Vivi="vivi",e.AppleTv="apply-tv"}(a||(a={}))},40841:(e,t,n)=>{n.d(t,{_:()=>l});var a=n(23481),r=n(41661),s=n(65728),i=a.T.encloseNamespace("shared.shared-utils"),l={getShareIntegrations:function(e,t){return[{id:r.D.GoogleClassroom,name:i("googleClassroom"),enabled:e,settingName:s.E.ShareToGoogleClassroom},{id:r.D.MicrosoftTeams,name:i("msftTeams"),enabled:t,settingName:s.E.ShareToMicrosoftTeams}]}}},83351:(e,t,n)=>{n.d(t,{P:()=>o});var a=n(32735),r=n(23481),s=n(13876),i=n(36532),l=r.T.encloseNamespace("assign.flowControls");function o(e){var t=e.hideBackButton||!e.onClickBack,n=e.hideNextButton||!e.onClickNext,r=e.hideCreateClassroomButton||!e.onClickCreateClassroom;return t&&n&&r?a.createElement(a.Fragment,null):a.createElement(s.u,{className:"justify-content-between"},a.createElement("div",null,!!e.leftComponent&&e.leftComponent,!r&&a.createElement(s.u.Submit,{variant:"link",onClick:e.onClickCreateClassroom,text:l("createClassroom"),className:"text-info p-0"})),a.createElement("div",{className:"d-flex"},!t&&a.createElement(s.u.Cancel,{variant:"link",onClick:e.onClickBack,text:e.backButtonText||l("back")}),!n&&a.createElement(i.u,{title:e.nextButtonTooltip,disable:!e.nextButtonTooltip,placement:"top",spanHack:!0},a.createElement(s.u.Submit,{variant:"dark",onClick:e.onClickNext,text:e.nextButtonText||l("next"),disabled:e.disableNextButton,showSpinner:e.showSpinner}))))}},35690:(e,t,n)=>{n.d(t,{QD:()=>A,Qv:()=>N,__:()=>k});var a=n(32735),r=n(68050),s=n(69111),i=n(42648),l=n(82602),o=n(31453),c=n(1619),u=n(83345),m=n(4594),d="sharev2.shareViewCount";function p(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement(u.x,{namespace:d,phrase:"viewCount",options:{smartCount:e.share.viewCount||0}})}var v=n(2510),h=n(83914),y=n(35223);function g(e){return[m.E.Playlist,m.E.Series].includes(e.share.objectTypeId)?a.createElement("span",null,"-"):a.createElement("span",{className:"d-inline-flex flex-row gap-2 align-items-center"},a.createElement(h.x,{svgName:y.vn.User}),a.createElement("span",null,function(){var t=e.share.accessCount||0;if(e.share.type===v.y.Open)return"".concat(t);if(e.share.type===v.y.Classroom){var n=e.share.recipients.length;return"".concat(t,"/").concat(n)}return"".concat(t)}()))}var f=n(21789),E=n(15611),b=n(91693);const S={shareListItem:"vLROV",visibleOnHover:"o2KJH",shareAvatar:"zDcMp",shareAvatarTitle:"U8yMQ"};var C="assign.previousAssignments";function x(e){return a.createElement("div",{className:(0,o.A)("d-flex align-items-center justify-content-between",e.show&&"mb-3")},a.createElement("h3",{className:"h6 m-0 p-0"},a.createElement(u.x,{namespace:C,phrase:"heading",options:{count:e.count}})),a.createElement(b.h,{svgName:e.show?y.vn.ChevronUp:y.vn.ChevronDown,onClick:e.onToggle}))}function k(){var e="d-flex align-items-end justify-content-start fw-medium";return a.createElement(u.D.Provider,{value:C},a.createElement(r.Z,{className:"gx-2 px-3 mb-2"},a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"assignedTo"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"views"})),a.createElement(s.Z,{xs:2,className:e},a.createElement(u.x,{phrase:"viewedBy"})),a.createElement(s.Z,{xs:4,className:e},a.createElement(u.x,{phrase:"dateCreated"}))))}function T(e){var t,n,i=f.x.getClassroomForShare(e.share,e.classrooms),m=null===(t=e.getItemAnalytics)||void 0===t?void 0:t.call(e,e.share);return a.createElement(E.F,{key:e.share.shareId,appLink:e.getItemAppLink(e.share),analyticsData:null==m?void 0:m.data,analyticsOptions:null==m?void 0:m.options,className:(0,o.A)("d-block p-3 hover-bg-light-blue border border-top-0 no-hover-text-underline",S.shareListItem,e.className)},a.createElement(r.Z,{className:"gx-2"},a.createElement(s.Z,{xs:4,className:"d-flex align-items-center"},a.createElement(c.e,{type:e.share.type,privacy:e.share.privacy,classroomName:null==i?void 0:i.name,svgSize:h.S.Small,openClassroomName:null===(n=e.share.options)||void 0===n?void 0:n.openClassroomName,className:(0,o.A)(S.shareAvatar),titleClassName:(0,o.A)("text-truncate",S.shareAvatarTitle),hideSubtitle:!0})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(p,{share:e.share})),a.createElement(s.Z,{xs:2,className:"d-flex align-items-center justify-content-start"},a.createElement(g,{share:e.share})),a.createElement(s.Z,{xs:4,lg:3,className:"d-flex align-items-center justify-content-start"},a.createElement("span",null,(0,l.WU)(e.share.dateCreated))),a.createElement(s.Z,{lg:1,className:"align-items-center justify-content-end d-none d-lg-flex"},a.createElement("span",{className:(0,o.A)("cursor-pointer text-info hover-text-underline",S.visibleOnHover)},a.createElement(u.x,{namespace:C,phrase:"view"})))))}function N(e){var t;return a.createElement("div",{className:(0,o.A)("d-flex flex-column border-top rounded-top overflow-hidden")},a.createElement(i.ZP,{autoHeight:!0,autoHeightMin:0,autoHeightMax:null!==(t=e.scrollHeightMax)&&void 0!==t?t:215,autoHide:!0},e.assignments.map(function(t,n){return a.createElement(T,{share:t,classrooms:e.classrooms,getItemAppLink:e.getItemAppLink,getItemAnalytics:function(t){var a;return null===(a=e.getItemAnalytics)||void 0===a?void 0:a.call(e,t,n)},className:(0,o.A)(n%2==0&&"bg-gray-100"),key:t.shareId})})))}function A(e){if(!e.assignments.length)return a.createElement(a.Fragment,null);var t=e.show&&e.assignments.length>3;return a.createElement("div",{className:(0,o.A)("bg-white rounded-3 p-3",t&&"pb-0")},a.createElement(x,{count:e.assignments.length,onToggle:e.onToggle,show:e.show}),e.show&&a.createElement(a.Fragment,null,a.createElement(k,null),a.createElement(N,Object.assign({},e))))}},95890:(e,t,n)=>{n.d(t,{_:()=>d});var a=n(20354),r=n(2267),s=n(4594),i=n(16714),l=n(39151),o=n(20768),c=n(31949),u=n(22902),m=n(45778);function d(e){var t,n=a.a.useBasicFetch(c.N.currentUser()),d=r.I.getFetchFunctionByType(e.entityType)(e.objectId,null===(t=n.data)||void 0===t?void 0:t.id),p=a.a.useBasicFetch(l.L.config()),v=a.a.useBasicFetch(m.G.isType(d.data,s.E.Interactive)&&d.data.interactiveId&&o.b.interactive(d.data.interactiveId)),h=(0,u.T)(),y=h.hasPermissions,g=h.isLoaded,f=y(i.C.StudentExperience),E=y(i.C.CreateClassrooms);return{loaded:!!(n.data&&d.data&&p.data&&g),currentUser:n,entity:d,interactive:v,config:p,hasStudentExp:f,canCreateClassrooms:E}}},24578:(e,t,n)=>{n.r(t),n.d(t,{ShowAssignmentsView:()=>R});var a=n(32735),r=n(23481),s=n(20354),i=n(75896),l=n(110),o=n(18488),c=n(21789),u=n(9111),m=n(83914),d=n(83345),p=n(16714),v=n(22902),h=n(37802),y=n(70227),g=n(80783),f=n(35223),E=n(14070),b=n(97291),S=n(86099),C=n(83351),x=n(35690),k=n(95890),T=n(40254),N=n(88630),A=n(23923),w=n(97958),I=n(99742),L="assign.sharesAndAssignmentsEmptyState",P=r.T.encloseNamespace(L);function B(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:L})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:L})),!e.hideAssignButton&&a.createElement(a.Fragment,null,a.createElement(w.u.Cta,{icon:f.vn.Classrooms,text:P("ctaAssign"),appLink:e.assignAppLink}),a.createElement(w.u.Cta,{className:"text-dark hover-text-underline mt-3 fw-medium",text:P("ctaShareLink"),appLink:e.shareLinkAppLink})),e.hideAssignButton&&a.createElement(w.u.Cta,{icon:f.vn.Link,text:P("ctaShare"),appLink:e.shareLinkAppLink}))}var F="assign.sharesEmptyState",j=r.T.encloseNamespace(F);function O(e){return a.createElement(w.u,{className:"py-4"},a.createElement(w.u.Image,{size:"small",src:I.W.EmptyStates.Share.MY_SHARES}),a.createElement(w.u.Heading,null,a.createElement(d.x,{phrase:"title",namespace:F})),a.createElement(w.u.Info,null,a.createElement(d.x,{phrase:"description",namespace:F})),a.createElement(w.u.Cta,{icon:f.vn.Link,text:j("cta"),appLink:e.appLink}))}var D="assign.showAssignmentsView",M=r.T.encloseNamespace(D),_=400;function H(e,t){if(e&&t)return l.O.isSame(e.dateCreated,t.dateCreated)?0:l.O.isAfter(e.dateCreated,t.dateCreated)?1:-1}function U(e){return a.createElement("a",{href:e.href,target:"_blank",className:"btn btn-link text-info"},a.createElement("span",{className:"pe-1"},a.createElement(d.x,{phrase:"openInSchoolAnalytics",namespace:D})),a.createElement(m.x,{svgName:f.vn.NewWindow,size:m.S.Small}))}function Z(e){return"assign-and-shares"===e.type?a.createElement(B,{assignAppLink:e.assignAppLink,shareLinkAppLink:e.shareAppLink,hideAssignButton:e.hideAssignButton}):a.createElement(O,{appLink:e.shareAppLink})}function R(e){var t,n,r,l=(0,k._)({objectId:e.objectId,entityType:e.entityType}),m=(0,v.T)().hasPermissions,d=(0,h.r)(null).hasShareFlowV2,f=(0,A.B)(),w=s.a.useBasicFetch(o.o.getSharesByObjectId(e.objectId)),I=(null===(t=w.data)||void 0===t?void 0:t.sort(H))||[],L=i.m.uniq(I.map(c.x.getClassroomIdFromShare).filter(function(e){return!!e})),P=s.a.useBasicFetch(w.hasCompleted&&N.F.getClassroomsByIds(L,null===(n=l.currentUser.data)||void 0===n?void 0:n.customerId)),B=y.c.getObjectUrl(null===(r=l.config.data)||void 0===r?void 0:r.analyticsWebUrl,l.entity.data,d),F=m(p.C.ViewAnalyticsProduct)&&m(p.C.ViewCustomerAnalytics),j=d&&f?"shares":"assign-and-shares",O=l.loaded&&!!w.data&&!!P.data;return a.createElement(u.G,{size:"lg",title:M("title"),showLoadingSpinner:!O,closePopup:e.closePopup},!I.length&&a.createElement(Z,{assignAppLink:T.W.flowSelector({entityType:e.entityType,objectId:e.objectId}),shareAppLink:{application:b.O.SHARE,action:E.e.Share.SHARE,args:[e.objectId],params:{entityType:e.entityType}},type:j,hideAssignButton:g.z.hideAssignButtonOnVideoActions(l.currentUser.data)}),!!I.length&&a.createElement(a.Fragment,null,a.createElement(x.__,null),a.createElement(x.Qv,{assignments:I.reverse(),classrooms:P.data,getItemAppLink:function(e){var t=(0,S.pY)(e);if(t)return t},scrollHeightMax:_})),a.createElement(C.P,{hideNextButton:!0,hideCreateClassroomButton:!0,onClickBack:e.closePopup,backButtonText:M("close"),leftComponent:!!B&&F&&a.createElement(U,{href:B})}))}},82602:(e,t,n)=>{n.d(t,{WU:()=>c});var a=["second","minute","hour","day","week","month","year"],r=["秒","分钟","小时","天","周","个月","年"],s={},i=function(e,t){s[e]=t},l=[60,60,24,7,365/7/12,12];function o(e){return e instanceof Date?e:!isNaN(e)||/^\d+$/.test(e)?new Date(parseInt(e)):(e=(e||"").trim().replace(/\.\d+/,"").replace(/-/,"/").replace(/-/,"/").replace(/(\d)T(\d)/,"$1 $2").replace(/Z/," UTC").replace(/([+-]\d\d):?(\d\d)/," $1$2"),new Date(e))}var c=function(e,t,n){var a=function(e,t){return(+(t?o(t):new Date)-+o(e))/1e3}(e,n&&n.relativeDate);return function(e,t){for(var n=e<0?1:0,a=e=Math.abs(e),r=0;e>=l[r]&&r<l.length;r++)e/=l[r];return(e=Math.floor(e))>(0==(r*=2)?9:1)&&(r+=1),t(e,r,a)[n].replace("%s",e.toString())}(a,function(e){return s[e]||s.en_US}(t))};i("en_US",function(e,t){if(0===t)return["just now","right now"];var n=a[Math.floor(t/2)];return e>1&&(n+="s"),[e+" "+n+" ago","in "+e+" "+n]}),i("zh_CN",function(e,t){if(0===t)return["刚刚","片刻后"];var n=r[~~(t/2)];return[e+" "+n+"前",e+" "+n+"后"]})}}]);
2
+ //# sourceMappingURL=4578-27028d26eb-lite.chunk.js.map