@clickview/lite 0.50.0-rc.8 → 0.50.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +2 -2
- package/dist/css/{lite-app-f2595ac365.css → lite-app-cf9b57ee91.css} +1 -1
- package/dist/scripts/{1617-d6c1d47afe-lite.chunk.js → 1617-3cf9199cb1-lite.chunk.js} +2 -2
- package/dist/scripts/{1617-d6c1d47afe-lite.chunk.js.map → 1617-3cf9199cb1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3012-1cde12ab3d-lite.chunk.js → 3012-08307aac0e-lite.chunk.js} +2 -2
- package/dist/scripts/{3012-1cde12ab3d-lite.chunk.js.map → 3012-08307aac0e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3020-97e3d647ab-lite.chunk.js → 3020-9f647705a0-lite.chunk.js} +2 -2
- package/dist/scripts/{3020-97e3d647ab-lite.chunk.js.map → 3020-9f647705a0-lite.chunk.js.map} +1 -1
- package/dist/scripts/5974-ec9007f42b-lite.chunk.js +2 -0
- package/dist/scripts/5974-ec9007f42b-lite.chunk.js.map +1 -0
- package/dist/scripts/7115-18b0e390de-lite.chunk.js +2 -0
- package/dist/scripts/7115-18b0e390de-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-9111dc8132.min.js → bundle-48ad415564.min.js} +3 -3
- package/dist/scripts/bundle-48ad415564.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/5974-215374f364-lite.chunk.js +0 -2
- package/dist/scripts/5974-215374f364-lite.chunk.js.map +0 -1
- package/dist/scripts/7115-8510dcd735-lite.chunk.js +0 -2
- package/dist/scripts/7115-8510dcd735-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-9111dc8132.min.js.map +0 -1
- /package/dist/scripts/{bundle-9111dc8132.min.js.LICENSE.txt → bundle-48ad415564.min.js.LICENSE.txt} +0 -0
package/dist/scripts/{3012-1cde12ab3d-lite.chunk.js.map → 3012-08307aac0e-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/3012-1cde12ab3d-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/hooks/usePrevious.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/manage-classroom-teacher-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/partial-manage-classroom-teachers.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-teachers/ClassroomTeachersView.tsx"],"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} \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 React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\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\nconst namespace = 'classrooms.manageClassroomTeachersEmptyState';\n\ninterface ManageClassroomTeachersEmptyStateProps {\n classroom: Classroom;\n}\n\nexport function RosteredClassroomTeachersEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n {/* todo add kb link */}\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\nexport function ManageClassroomTeachersEmptyState(props: ManageClassroomTeachersEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n \n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addTeachers')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kTynd\",\"name\":\"UWi4G\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\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 { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser } 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 styles from './manage-classroom-teacher-item.scss';\n\nconst namespace = 'classrooms.manageClassroomTeacherItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getRemoveTeachersAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [teacherId]\n }\n});\n\nconst getAssignAsOwnerAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ASSIGN_AS_OWNER,\n args: [ classroomId, teacherId ]\n});\n\nconst getRevokeOwnershipAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REVOKE_OWNERSHIP,\n args: [ classroomId, teacherId ]\n});\n\ninterface ManageClassroomTeacherItemProps {\n classroom: Classroom;\n teacher: User;\n config: Config;\n onToggleCheckbox: () => void;\n checked: boolean;\n isOwner: (userId: string) => boolean;\n currentUser: CurrentUser;\n readOnly?: boolean;\n readonlyTooltip?: string;\n}\n\nexport function ManageClassroomTeacherItem(props: ManageClassroomTeacherItemProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const teacherIsAdmin = UserHelper.getUserRole(props.teacher) === UserRole.Admin;\n\n function getCanManageTeacher(): boolean {\n // Current user can perform any action on themselves\n if (props.currentUser.id === props.teacher.id)\n return true;\n\n // This permission allows total control over a classroom\n if (hasPermissions(PermissionName.ManageAllClassrooms))\n return true;\n\n // Regular teachers or owners cannot perform actions on admins in the classroom\n if (teacherIsAdmin)\n return false;\n\n return props.isOwner(props.currentUser.id);\n }\n\n const canManageTeacher = getCanManageTeacher();\n\n const actionDisabled = !canManageTeacher || props.readOnly;\n\n function getActions(): ActionOptions[] {\n // Non-owners cannot perform any actions on other classroom teachers\n if (!props.isOwner(props.currentUser.id))\n return [];\n\n const actions: ActionOptions[] = [];\n\n const disabledClassName = 'text-secondary disabled cursor-default';\n\n // Actions are different if the user item is for the current user\n const isManagingCurrentUser = props.currentUser.id === props.teacher.id;\n\n if (!isManagingCurrentUser) {\n if (props.isOwner(props.teacher.id)) {\n actions.push({\n order: 0,\n label: getPhrase('revokeOwnership'),\n appLink: getRevokeOwnershipAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Demote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRevokeOwnershipFromAdmin') : ''\n });\n } else {\n actions.push({\n order: 0,\n label: getPhrase('assignAsOwner'),\n appLink: getAssignAsOwnerAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Promote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotAssignAdminAsOwner') : ''\n });\n }\n }\n\n actions.push({\n order: 10,\n label: isManagingCurrentUser ? getPhrase('leaveClassroom') : getPhrase('removeTeacher'),\n appLink: getRemoveTeachersAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.classroom.id,\n userId: props.teacher.id\n },\n analyticsOptions: {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : 'text-danger',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRemoveAdmin') : ''\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n {props.isOwner(props.currentUser.id) && (\n <Checkbox\n id={props.teacher.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n )}\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.teacher.name, props.teacher.surname)}\n imageUrl={props.teacher.avatar?.url}\n />\n </div>\n\n <p className={`${styles.name} me-2 text-truncate mb-0 text-nowrap`}>{UserHelper.getFullName(props.teacher)}</p>\n\n {!!teacherIsAdmin && (\n <div className={`classroom-pill text-white bg-navy`}>\n <Text namespace={namespace} phrase='admin' />\n </div>\n )}\n\n {(!teacherIsAdmin && props.isOwner(props.teacher.id)) && (\n <div className={`classroom-pill text-white bg-indigo`}>\n <Text namespace={namespace} phrase='owner' />\n </div>\n )}\n\n <MoreActions\n actions={getActions()}\n className='ms-auto'\n actionsDropdownClassName='btn btn-link'\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\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 { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config, CurrentUser, User } 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 { ManageClassroomTeacherItem } from 'apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem';\n\nimport { ManageClassroomTeachersEmptyState } from './empty-state/ManageClassroomTeachersEmptyState';\n\nconst namespace = 'classrooms.manageClassroomTeachers';\n\ninterface ManageClassroomTeachersProps {\n classroom: Classroom;\n isOwner: (teacherId: string) => boolean;\n currentUser: CurrentUser;\n teachers: User[];\n config: Config;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomTeachers(props: ManageClassroomTeachersProps): JSX.Element {\n const CheckboxHelper = useBulkCheckboxManager(props.teachers);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n function onClickBulkRemoveTeachers(): void {\n if (!selectionCount || !props.isOwner(props.currentUser.id) || props.readOnly)\n return;\n\n const teacherIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n teacherCount: teacherIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomTeachers\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [props.classroom.id],\n params: {\n teacherIds\n }\n });\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.teachers?.length)\n return <ManageClassroomTeachersEmptyState classroom={props.classroom} />;\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n {props.isOwner(props.currentUser.id) && (\n <>\n <Checkbox\n id='manage-classroom-teachers-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <DivButton\n className={!selectionCount || props.readOnly ? 'me-auto text-light cursor-default' : 'me-auto'}\n onClick={onClickBulkRemoveTeachers}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n disabled={props.readOnly}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark ms-auto'\n appLink={props.readOnly\n ? null\n : {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n analyticsData={{ id: props.classroom.id }}\n analyticsOptions={{\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomTeachers\n }}\n >\n <Text namespace={namespace} phrase='addTeacher' />\n </IconButton>\n </Tooltip>\n </>\n )}\n </div>\n\n <ul className='striped-list list-unstyled'>\n {props.teachers.map(teacher => (\n <li key={teacher.id}>\n <ManageClassroomTeacherItem\n classroom={props.classroom}\n teacher={teacher}\n config={props.config}\n checked={CheckboxHelper.isChecked(teacher.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(teacher.id)}\n currentUser={props.currentUser}\n isOwner={props.isOwner}\n readOnly={props.readOnly}\n readonlyTooltip={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"FQwVf\",\"avatar\":\"mYQWy\",\"checkbox\":\"svGp0\",\"actionIcon\":\"rKbj_\",\"addTeachers\":\"qigWD\",\"teacherName\":\"SiD8n\",\"moreActions\":\"sAUZY\"};","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-teachers.scss';\n\nexport const PartialManageClassroomTeachers = 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={`ms-2 me-4 partial-loading-background ${styles.checkbox}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new teachers button */}\n <div className={`partial-loading-background ${styles.addTeachers}`} />\n </div>\n\n {/* Teachers list */}\n <ul className='striped-list list-unstyled'>\n {Array(3).fill(null).map((teacher, 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 {/* Teacher name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.teacherName}`} />\n </div>\n\n {/* More actions */}\n <div className={`ms-auto partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\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';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ManageClassroomTeachersEmptyState, RosteredClassroomTeachersEmptyState } from 'apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState';\nimport { ManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers';\nimport { PartialManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomTeachers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomTeachersViewProps {\n id: string;\n}\n\nexport function ClassroomTeachersView(props: ClassroomTeachersViewProps): JSX.Element {\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 owners = Flight.useBasicFetch<User[]>(ClassroomRequests.getClassroomOwners(props.id));\n const invitees = Flight.useBasicFetch<User[]>(\n currentUser.data?.customerId && ClassroomRequests.getClassroomInvitees(props.id, currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n const { isOwner: currentUserIsOwner } = useCheckClassroomPermissions(props.id);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n \n function isOwner(teacherId: string): boolean {\n if (teacherId === currentUser.data.id)\n return currentUserIsOwner;\n\n return owners.data.some(owner => owner.id.toString() === teacherId.toString());\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 (!classroom.data || !invitees.hasCompleted || !owners.hasCompleted || !config.data)\n return <PartialManageClassroomTeachers />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='teachers'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered) {\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!invitees.data?.length ? (\n <RosteredClassroomTeachersEmptyState />\n ) : (\n <ManageClassroomTeachers\n classroom={classroom.data}\n teachers={invitees.data}\n config={config.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly\n />\n )}\n </>\n );\n }\n\n if (invitees.data?.length) {\n return (\n <ManageClassroomTeachers\n config={config.data}\n classroom={classroom.data}\n teachers={invitees.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly={isRostered}\n />\n );\n }\n\n return <ManageClassroomTeachersEmptyState classroom={classroom.data}/>;\n })()}\n\n </ClassroomLayout>\n );\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","usePrevious","value","ref","namespace","RosteredClassroomTeachersEmptyState","EmptyState","src","ImageUrls","Text","phrase","href","target","LanguageService","ManageClassroomTeachersEmptyState","icon","appLink","application","action","args","classroom","getRemoveTeachersAppLink","teacherId","classroomId","params","teacherIds","getAssignAsOwnerAppLink","getRevokeOwnershipAppLink","ManageClassroomTeacherItem","hasPermissions","usePermissions","teacherIsAdmin","UserHelper","teacher","UserRole","canManageTeacher","currentUser","PermissionName","isOwner","actionDisabled","readOnly","Checkbox","checked","onChange","onToggleCheckbox","disabled","Avatar","imageCdnUrl","config","initials","name","surname","imageUrl","avatar","url","actions","disabledClassName","isManagingCurrentUser","push","order","label","analyticsData","analyticsOptions","actionType","entity","descriptor","workflowPhase","location","tooltip","readonlyTooltip","userId","getActions","actionsDropdownClassName","ManageClassroomTeachers","CheckboxHelper","teachers","selectionCount","edgeToEdge","indeterminate","DivButton","onClick","AnalyticsHelper","teacherCount","SvgContainer","svgName","title","tooltipPlacement","tooltipSpanHack","Tooltip","spanHack","IconButton","key","PartialManageClassroomTeachers","numItems","PartialPillTabSelector","fill","ClassroomTeachersView","UserRequests","data","ClassroomRequests","owners","invitees","customerId","ConfigRequests","dispatch","currentUserIsOwner","isRostered","_integrations","rostered","some","owner","useSetPageMetadata","classroomName","useHandleClassroomErrors","hasCompleted","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","request","activeTab"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/3012-08307aac0e-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/hooks/usePrevious.ts","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/manage-classroom-teacher-item.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/partial-manage-classroom-teachers.scss","file:///app/packages/projects/lite/src/apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers.tsx","file:///app/packages/projects/lite/src/apps/classrooms/views/classroom-teachers/ClassroomTeachersView.tsx"],"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} \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 React from 'react';\n\n// https://reactjs.org/docs/hooks-faq.html#how-to-get-the-previous-props-or-state\nexport function usePrevious<T>(value: T): T {\n const ref = React.useRef<T>();\n React.useEffect(() => {\n ref.current = value;\n });\n return ref.current;\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\nconst namespace = 'classrooms.manageClassroomTeachersEmptyState';\n\ninterface ManageClassroomTeachersEmptyStateProps {\n classroom: Classroom;\n}\n\nexport function RosteredClassroomTeachersEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info className='mb-2'><Text phrase='emptyStateInfo' /></EmptyState.Info>\n\n {/* todo add kb link */}\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\nexport function ManageClassroomTeachersEmptyState(props: ManageClassroomTeachersEmptyStateProps): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.TEACHERS} />\n\n <EmptyState.Heading><Text phrase='emptyStateHeading' /></EmptyState.Heading>\n\n <EmptyState.Info ><Text phrase='emptyStateInfo' /></EmptyState.Info>\n \n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'addTeachers')}\n icon={cvSvgLibrary.Plus}\n appLink={{\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n />\n\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"kTynd\",\"name\":\"UWi4G\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\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 { Text } from 'libs/shared/components/text/Text';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { Config, CurrentUser } 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 styles from './manage-classroom-teacher-item.scss';\n\nconst namespace = 'classrooms.manageClassroomTeacherItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst getRemoveTeachersAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [classroomId],\n params: {\n teacherIds: [teacherId]\n }\n});\n\nconst getAssignAsOwnerAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ASSIGN_AS_OWNER,\n args: [ classroomId, teacherId ]\n});\n\nconst getRevokeOwnershipAppLink = (teacherId: string, classroomId: string) => ({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REVOKE_OWNERSHIP,\n args: [ classroomId, teacherId ]\n});\n\ninterface ManageClassroomTeacherItemProps {\n classroom: Classroom;\n teacher: User;\n config: Config;\n onToggleCheckbox: () => void;\n checked: boolean;\n isOwner: (userId: string) => boolean;\n currentUser: CurrentUser;\n readOnly?: boolean;\n readonlyTooltip?: string;\n}\n\nexport function ManageClassroomTeacherItem(props: ManageClassroomTeacherItemProps): JSX.Element {\n const { hasPermissions } = usePermissions();\n\n const teacherIsAdmin = UserHelper.getUserRole(props.teacher) === UserRole.Admin;\n\n function getCanManageTeacher(): boolean {\n // Current user can perform any action on themselves\n if (props.currentUser.id === props.teacher.id)\n return true;\n\n // This permission allows total control over a classroom\n if (hasPermissions(PermissionName.ManageAllClassrooms))\n return true;\n\n // Regular teachers or owners cannot perform actions on admins in the classroom\n if (teacherIsAdmin)\n return false;\n\n return props.isOwner(props.currentUser.id);\n }\n\n const canManageTeacher = getCanManageTeacher();\n\n const actionDisabled = !canManageTeacher || props.readOnly;\n\n function getActions(): ActionOptions[] {\n // Non-owners cannot perform any actions on other classroom teachers\n if (!props.isOwner(props.currentUser.id))\n return [];\n\n const actions: ActionOptions[] = [];\n\n const disabledClassName = 'text-secondary disabled cursor-default';\n\n // Actions are different if the user item is for the current user\n const isManagingCurrentUser = props.currentUser.id === props.teacher.id;\n\n if (!isManagingCurrentUser) {\n if (props.isOwner(props.teacher.id)) {\n actions.push({\n order: 0,\n label: getPhrase('revokeOwnership'),\n appLink: getRevokeOwnershipAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Demote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRevokeOwnershipFromAdmin') : ''\n });\n } else {\n actions.push({\n order: 0,\n label: getPhrase('assignAsOwner'),\n appLink: getAssignAsOwnerAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.teacher.id,\n classroomId: props.classroom.id\n },\n analyticsOptions: {\n actionType: UserAction.Promote,\n entity: EntityType.User,\n descriptor: AssocDescriptor.Classroom,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : '',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotAssignAdminAsOwner') : ''\n });\n }\n }\n\n actions.push({\n order: 10,\n label: isManagingCurrentUser ? getPhrase('leaveClassroom') : getPhrase('removeTeacher'),\n appLink: getRemoveTeachersAppLink(props.teacher.id, props.classroom.id),\n analyticsData: {\n id: props.classroom.id,\n userId: props.teacher.id\n },\n analyticsOptions: {\n actionType: UserAction.Dissociate,\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n location: LocationContext.ManageClassroomTeacherListItem\n },\n className: actionDisabled ? disabledClassName : 'text-danger',\n disabled: actionDisabled,\n tooltip: props.readOnly ? props.readonlyTooltip : !canManageTeacher ? getPhrase('cannotRemoveAdmin') : ''\n });\n\n return actions;\n }\n\n return (\n <div className='d-flex align-items-center py-1 px-4'>\n {props.isOwner(props.currentUser.id) && (\n <Checkbox\n id={props.teacher.id}\n checked={props.checked}\n onChange={props.onToggleCheckbox}\n className='me-2'\n disabled={props.readOnly}\n />\n )}\n\n <div className={`${styles.avatarContainer} me-2`}>\n <Avatar\n imageCdnUrl={props.config.imageCdnUrl}\n initials={UserHelper.getInitials(props.teacher.name, props.teacher.surname)}\n imageUrl={props.teacher.avatar?.url}\n />\n </div>\n\n <p className={`${styles.name} me-2 text-truncate mb-0 text-nowrap`}>{UserHelper.getFullName(props.teacher)}</p>\n\n {!!teacherIsAdmin && (\n <div className={`classroom-pill text-white bg-navy`}>\n <Text namespace={namespace} phrase='admin' />\n </div>\n )}\n\n {(!teacherIsAdmin && props.isOwner(props.teacher.id)) && (\n <div className={`classroom-pill text-white bg-indigo`}>\n <Text namespace={namespace} phrase='owner' />\n </div>\n )}\n\n <MoreActions\n actions={getActions()}\n className='ms-auto'\n actionsDropdownClassName='btn btn-link'\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\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 { useBulkCheckboxManager } from 'libs/shared/hooks/useBulkCheckboxManager';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { Classroom, Config, CurrentUser, User } 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 { ManageClassroomTeacherItem } from 'apps/classrooms/components/manage-classroom-teacher-item/ManageClassroomTeacherItem';\n\nimport { ManageClassroomTeachersEmptyState } from './empty-state/ManageClassroomTeachersEmptyState';\n\nconst namespace = 'classrooms.manageClassroomTeachers';\n\ninterface ManageClassroomTeachersProps {\n classroom: Classroom;\n isOwner: (teacherId: string) => boolean;\n currentUser: CurrentUser;\n teachers: User[];\n config: Config;\n readOnly?: boolean;\n}\n\nexport function ManageClassroomTeachers(props: ManageClassroomTeachersProps): JSX.Element {\n const CheckboxHelper = useBulkCheckboxManager(props.teachers);\n const selectionCount = CheckboxHelper.getSelected().length;\n\n function onClickBulkRemoveTeachers(): void {\n if (!selectionCount || !props.isOwner(props.currentUser.id) || props.readOnly)\n return;\n\n const teacherIds = CheckboxHelper.getSelected();\n\n AnalyticsHelper.logUserAction({\n id: props.classroom.id,\n teacherCount: teacherIds.length\n }, {\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Dissociate,\n location: LocationContext.ManageClassroomTeachers\n });\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.REMOVE_TEACHERS,\n args: [props.classroom.id],\n params: {\n teacherIds\n }\n });\n }\n\n const edgeToEdge = useMediaQuery(MediaQueryStrings.XLDown);\n\n if (!props.teachers?.length)\n return <ManageClassroomTeachersEmptyState classroom={props.classroom} />;\n\n return (\n <>\n <div className={`d-flex align-items-center py-2 ${edgeToEdge ? 'ps-2' : 'ps-4'}`}>\n {props.isOwner(props.currentUser.id) && (\n <>\n <Checkbox\n id='manage-classroom-teachers-bulk'\n onChange={CheckboxHelper.onToggleBulk}\n checked={CheckboxHelper.bulkChecked}\n className='me-2'\n indeterminate={CheckboxHelper.hasSomeSelections()}\n disabled={props.readOnly}\n />\n\n <DivButton\n className={!selectionCount || props.readOnly ? 'me-auto text-light cursor-default' : 'me-auto'}\n onClick={onClickBulkRemoveTeachers}\n >\n <SvgContainer\n svgName={cvSvgLibrary.Delete}\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : LanguageService.getPhrase(namespace, 'delete')}\n tooltipPlacement='top'\n tooltipSpanHack\n />\n </DivButton>\n <Tooltip\n spanHack\n title={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n >\n <IconButton\n disabled={props.readOnly}\n svgName={cvSvgLibrary.Plus}\n className='btn btn-outline-dark ms-auto'\n appLink={props.readOnly\n ? null\n : {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.ADD_TEACHERS,\n args: [props.classroom.id]\n }}\n analyticsData={{ id: props.classroom.id }}\n analyticsOptions={{\n entity: EntityType.Classroom,\n descriptor: AssocDescriptor.User,\n workflowPhase: WorkflowPhase.Start,\n actionType: UserAction.Associate,\n location: LocationContext.ManageClassroomTeachers\n }}\n >\n <Text namespace={namespace} phrase='addTeacher' />\n </IconButton>\n </Tooltip>\n </>\n )}\n </div>\n\n <ul className='striped-list list-unstyled'>\n {props.teachers.map(teacher => (\n <li key={teacher.id}>\n <ManageClassroomTeacherItem\n classroom={props.classroom}\n teacher={teacher}\n config={props.config}\n checked={CheckboxHelper.isChecked(teacher.id)}\n onToggleCheckbox={() => CheckboxHelper.onToggleItem(teacher.id)}\n currentUser={props.currentUser}\n isOwner={props.isOwner}\n readOnly={props.readOnly}\n readonlyTooltip={props.readOnly ? LanguageService.getPhrase(namespace, 'disabledByRostering') : ''}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"heading\":\"FQwVf\",\"avatar\":\"mYQWy\",\"checkbox\":\"svGp0\",\"actionIcon\":\"rKbj_\",\"addTeachers\":\"qigWD\",\"teacherName\":\"SiD8n\",\"moreActions\":\"sAUZY\"};","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-teachers.scss';\n\nexport const PartialManageClassroomTeachers = 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={`ms-2 me-4 partial-loading-background ${styles.checkbox}`} />\n {/* Delete action */}\n <div className={`me-auto partial-loading-background ${styles.actionIcon}`} />\n\n {/* Add new teachers button */}\n <div className={`partial-loading-background ${styles.addTeachers}`} />\n </div>\n\n {/* Teachers list */}\n <ul className='striped-list list-unstyled'>\n {Array(3).fill(null).map((teacher, 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 {/* Teacher name */}\n <div className='w-25'>\n <div className={`partial-loading-background ${styles.teacherName}`} />\n </div>\n\n {/* More actions */}\n <div className={`ms-auto partial-loading-background ${styles.moreActions}`} />\n </div>\n </li>\n ))}\n </ul>\n </div>\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';\n\nimport { RosteringAlert } from 'libs/shared/components/rostering/rostering-alert/RosteringAlert';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Classroom, Config, CurrentUser, User } from 'libs/shared/interfaces';\n\nimport { ManageClassroomTeachersEmptyState, RosteredClassroomTeachersEmptyState } from 'apps/classrooms/components/manage-classroom-teachers/empty-state/ManageClassroomTeachersEmptyState';\nimport { ManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/ManageClassroomTeachers';\nimport { PartialManageClassroomTeachers } from 'apps/classrooms/components/manage-classroom-teachers/partial-loading/PartialManageClassroomTeachers';\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { useCheckClassroomPermissions } from 'apps/classrooms/hooks/useClassroomPermissions';\nimport { useHandleClassroomErrors } from 'apps/classrooms/hooks/useHandleClassroomErrors';\nimport { ClassroomLayout } from 'apps/classrooms/layouts/ClassroomLayout';\n\nconst namespace = 'classrooms.classroomTeachers';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface ClassroomTeachersViewProps {\n id: string;\n}\n\nexport function ClassroomTeachersView(props: ClassroomTeachersViewProps): JSX.Element {\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 owners = Flight.useBasicFetch<User[]>(ClassroomRequests.getClassroomOwners(props.id));\n const staff = Flight.useBasicFetch<User[]>(\n currentUser.data?.customerId && ClassroomRequests.getClassroomStaff(props.id, currentUser.data.customerId)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const dispatch = useDispatch();\n const { isOwner: currentUserIsOwner } = useCheckClassroomPermissions(props.id);\n\n const isRostered = classroom.data?._integrations?.rostered;\n\n useSetPageMetadata({\n title: getPhrase('pageTitle', { classroomName: classroom.data?.name })\n });\n useHandleClassroomErrors(classroom);\n \n function isOwner(teacherId: string): boolean {\n if (teacherId === currentUser.data.id)\n return currentUserIsOwner;\n\n return owners.data.some(owner => owner.id.toString() === teacherId.toString());\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 (!classroom.data || !staff.hasCompleted || !owners.hasCompleted || !config.data)\n return <PartialManageClassroomTeachers />;\n\n return (\n <ClassroomLayout\n classroom={classroom.data}\n currentUser={currentUser.data}\n onTogglePin={onTogglePin}\n activeTab='teachers'\n isRostered={isRostered}\n >\n {(() => {\n if (isRostered) {\n return (\n <>\n <RosteringAlert type='classroom'/>\n {!staff.data?.length ? (\n <RosteredClassroomTeachersEmptyState />\n ) : (\n <ManageClassroomTeachers\n classroom={classroom.data}\n teachers={staff.data}\n config={config.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly\n />\n )}\n </>\n );\n }\n\n if (staff.data?.length) {\n return (\n <ManageClassroomTeachers\n config={config.data}\n classroom={classroom.data}\n teachers={staff.data}\n currentUser={currentUser.data}\n isOwner={isOwner}\n readOnly={isRostered}\n />\n );\n }\n\n return <ManageClassroomTeachersEmptyState classroom={classroom.data}/>;\n })()}\n\n </ClassroomLayout>\n );\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","usePrevious","value","ref","namespace","RosteredClassroomTeachersEmptyState","EmptyState","src","ImageUrls","Text","phrase","href","target","LanguageService","ManageClassroomTeachersEmptyState","icon","appLink","application","action","args","classroom","getRemoveTeachersAppLink","teacherId","classroomId","params","teacherIds","getAssignAsOwnerAppLink","getRevokeOwnershipAppLink","ManageClassroomTeacherItem","hasPermissions","usePermissions","teacherIsAdmin","UserHelper","teacher","UserRole","canManageTeacher","currentUser","PermissionName","isOwner","actionDisabled","readOnly","Checkbox","checked","onChange","onToggleCheckbox","disabled","Avatar","imageCdnUrl","config","initials","name","surname","imageUrl","avatar","url","actions","disabledClassName","isManagingCurrentUser","push","order","label","analyticsData","analyticsOptions","actionType","entity","descriptor","workflowPhase","location","tooltip","readonlyTooltip","userId","getActions","actionsDropdownClassName","ManageClassroomTeachers","CheckboxHelper","teachers","selectionCount","edgeToEdge","indeterminate","DivButton","onClick","AnalyticsHelper","teacherCount","SvgContainer","svgName","title","tooltipPlacement","tooltipSpanHack","Tooltip","spanHack","IconButton","key","PartialManageClassroomTeachers","numItems","PartialPillTabSelector","fill","ClassroomTeachersView","UserRequests","data","ClassroomRequests","owners","staff","customerId","ConfigRequests","dispatch","currentUserIsOwner","isRostered","_integrations","rostered","some","owner","useSetPageMetadata","classroomName","useHandleClassroomErrors","hasCompleted","ClassroomLayout","onTogglePin","shouldPin","onSuccess","onError","request","activeTab"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3020],{83657:(e,t,n)=>{n.d(t,{e:()=>l});var a=n(32735),r=n(91967),o=n(10874),i=n(76177),c=n(42735),s=n(86509);function l(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],l=[];t.forEach((function(e){e.button?n.push(e):l.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||l.length?a.createElement("div",{className:u},a.createElement(a.Fragment,null,a.createElement("span",{className:"d-flex align-items-center"},n.length?n.map((function(e,t){return a.createElement(a.Fragment,{key:t},function(){if(e.label){var t=r.q.isFunction(e.label)?e.label:function(){return a.createElement(a.Fragment,null,e.label)};return a.createElement(c.K,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,tooltip:e.tooltip,showSpinner:e.showSpinner,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled},t())}var n=a.createElement(o.h,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled});return e.tooltip?a.createElement(i.u,{title:e.tooltip,spanHack:!0},n):n}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,l.length?a.createElement(s.m,{actions:l,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)))):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),o=n(81886),i=n(45157),c=n(49985),s=n(36848),l=n(83914),u=n(76177),m=n(35223);const d={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function b(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(s.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&c.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&o.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,o="actions-dropdown-".concat(i.Y.getRandomInt()),c="dropdown-toggle px-0 ".concat(d.dropdownToggle);return e.dropdownToggleClassName&&(c+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:c,type:"button",id:o,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",onClick:t?e.fetchMore:null},a.createElement(l.x,{svgName:m.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":o},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(b,{action:e}))):a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(b,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:l.S.Small}},49935:(e,t,n)=>{n.d(t,{Oo:()=>m,b2:()=>d});var a=n(32735),r=n(36848),o=n(86764),i=n(3747),c=n(5859),s=n(35223),l=n(83914),u=function(e){var t=e.breadcrumb,n=t.name,o=t.appLink,i=t.active,c=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(i?" active":"")},i?a.createElement("strong",null,n):a.createElement(r.F,{appLink:o},c&&a.createElement(l.x,{svgName:s.vn.ChevronLeft,size:l.S.Small}),a.createElement("span",{className:c?"ms-2":""},n)))},m=function(e){var t=e.breadcrumbs,n=(0,i.a)(o.r.XS),r=null==t?void 0:t.length;return!r||n&&r<2?a.createElement(a.Fragment,null):n?a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(u,{breadcrumb:t[r-2],withBackIcon:!0}))):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return a.createElement(u,{key:t,breadcrumb:e})}))))},d=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,i.a)(o.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),o=n(36848),i=n(18559),c=n(11607),s=n(83914),l=n(87432);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:""},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},5062:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(32735),r=n(87432);const o={partialSize:"ntGsj"};function i(){return a.createElement("div",{className:"partial-loading-background ".concat(r.Z.pillTabSelector," ").concat(o.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),o=n(67058),i=n(14553),c=n(49267),s=n(49075),l={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==a.o.NotFound?o!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new i.badRequest):n.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):n.notFound||r.Q.Ry.throw(new i.notFound))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var a=n(32735),r=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){i.forEach((function(e){(0,r.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>r});var a=n(32045),r={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return a.w.Disabled;if(1===e)return a.w.Active;if(2===e)return a.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===a.w.Disabled)return 0;if(e===a.w.Active)return 1;if(e===a.w.Inactive)return 2}return null}}},5859:(e,t,n)=>{function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.d(t,{u:()=>o});var r={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var a=n(32735),r=n(23481),o=n(49985),i=n(65858),c=n(11607),s=n(83914),l=n(69883),u=n(1643),m=n(35223);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=r.T.encloseNamespace("classrooms.classroomStar"),f=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,r=(t=a.useState(f(e.classroom)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=r[0],b=r[1],g=(0,l.Z)();return a.useEffect((function(){f(e.classroom)!==u&&b(!u)}),[f(e.classroom)]),a.createElement(c.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},a.createElement(s.x,{svgName:u?m.vn.Star:m.vn.StarOutline,size:s.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>s});var a=n(20354),r=n(16714),o=n(31949),i=n(22902),c=n(88630),s=function(e){var t,n=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),s=a.a.useBasicFetch(o.N.currentUser()),l=a.a.useBasicFetch(!n&&(null===(t=s.data)||void 0===t?void 0:t.customerId)&&c.F.getClassroomInvitees(e,s.data.customerId)),u=a.a.useBasicFetch(!n&&c.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!s.hasCompleted)return{isLoading:!0};var m=s.data.id.toString(),d=!!u.data.find((function(e){return e.id.toString()===m})),p=!!l.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:d||p,isOwner:d}}},31491:(e,t,n)=>{n.d(t,{_:()=>A});var a=n(16714),r=n(67058),o=n(91286),i=n(22902),c=n(23481),s=n(64364),l=n(14070),u=n(97291);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){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,p(a.key),a)}}function p(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function f(e,t,n){return t=g(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,b()?Reflect.construct(t,n||[],g(e).constructor):t.apply(e,n))}function b(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(b=function(){return!!e})()}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",h=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),f(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return c.T.getPhrase(v,"heading")}},{key:"description",get:function(){return c.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&d(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function O(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,S(a.key),a)}}function S(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=E(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(t)?t:t+""}function w(e,t,n){return t=C(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,N()?Reflect.construct(t,n||[],C(e).constructor):t.apply(e,n))}function N(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(N=function(){return!!e})()}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function k(e,t){return k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},k(e,t)}var T="classrooms.classroomNotFoundError",L=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),w(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&k(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return c.T.getPhrase(T,"heading")}},{key:"description",get:function(){return c.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&O(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H),A=function(e){var t=(0,i.T)().hasPermissions;(0,o.v)(e,{notFound:L,forbidden:{privacy:t(a.C.ViewClassrooms)?h:r.d}})}},5289:(e,t,n)=>{n.d(t,{R:()=>N});var a=n(32735),r=n(23481),o=n(81886),i=n(65858),c=n(83657),s=n(49935),l=n(38502),u=n(32045),m=n(53036),d=n(14070),p=n(97291),f=n(62691),b=n(86764),g=n(86613),y=n(3747),v=n(35223),h=n(46009),E="classrooms.hooks",O=function(e,t,n){var a=(0,y.a)(b.r.SMDown),o=(0,h.p)(e),c={id:e},s={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return o.isOwner&&u.push({order:0,label:r.T.getPhrase(E,"editClassroom"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsData:c,analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Edit}),svgName:v.vn.Edit,button:!a,className:n?"disabled ".concat(l):a?"":l}),u.push({order:10,label:r.T.getPhrase(E,"generateJoinLink"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",button:!a&&!o.isOwner,className:n?"disabled":a||o.isOwner?"":l}),o.isOwner&&u.push({order:20,label:r.T.getPhrase(E,"archive"),analyticsData:c,disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(o.isOwner||o.isTeacher)&&t.role!==g.i.Admin&&u.push({order:30,label:r.T.getPhrase(E,"leaveClassroom"),disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},c),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u};const S={actionsContainer:"uYv5Z"};var w=r.T.encloseNamespace("classrooms.classroomLayout");function N(e){var t=(0,h.p)(e.classroom.id),n=O(e.classroom.id,e.currentUser,e.isRostered),r=m.h.getStatusAsString(e.classroom.status),b=[{name:w("students"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:w("groups"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:w("teachers"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==w("groups")}));return a.useEffect((function(){r!==u.w.Active&&o.Q.C$.trigger({application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||r!==u.w.Active?a.createElement(a.Fragment,null):a.createElement("div",{className:"px-3 position-relative"},a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"mt-1 me-1"},a.createElement(f.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),a.createElement("h1",{className:"mb-0"},e.classroom.name)),!!n.length&&a.createElement("div",{className:S.actionsContainer},a.createElement(c.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),a.createElement("div",{className:"pb-3 pt-1"},a.createElement(s.Oo,{breadcrumbs:[{name:w("classroomsBreadcrumb"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),a.createElement("div",{className:"pb-2"},a.createElement(l.r,{tabs:b})),e.children)}},87432:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
-
//# sourceMappingURL=3020-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[3020],{83657:(e,t,n)=>{n.d(t,{e:()=>l});var a=n(32735),r=n(91967),o=n(10874),i=n(76177),c=n(42735),s=n(86509);function l(e){var t=a.useMemo((function(){return e.actions.sort((function(e,t){return e.order-t.order}))}),[e.actions]),n=[],l=[];t.forEach((function(e){e.button?n.push(e):l.push(e)}));var u="d-flex";return e.className&&(u+=" ".concat(e.className)),n.length||l.length?a.createElement("div",{className:u},a.createElement(a.Fragment,null,a.createElement("span",{className:"d-flex align-items-center"},n.length?n.map((function(e,t){return a.createElement(a.Fragment,{key:t},function(){if(e.label){var t=r.q.isFunction(e.label)?e.label:function(){return a.createElement(a.Fragment,null,e.label)};return a.createElement(c.K,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,tooltip:e.tooltip,showSpinner:e.showSpinner,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled},t())}var n=a.createElement(o.h,{appLink:e.appLink,href:e.href,onClick:e.onClick,svgName:e.svgName,className:e.className,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,openInNewTab:e.openInNewTab,disabled:e.disabled});return e.tooltip?a.createElement(i.u,{title:e.tooltip,spanHack:!0},n):n}())})):a.createElement(a.Fragment,null),e.sortComponent&&e.sortComponent,l.length?a.createElement(s.m,{actions:l,dropdownToggleClassName:e.actionsDropdownClassName,dropdownToggleSvgSize:e.dropdownToggleSvgSize,fetchMore:e.fetchMore}):a.createElement(a.Fragment,null)))):a.createElement(a.Fragment,null)}},86509:(e,t,n)=>{n.d(t,{m:()=>g});var a=n(32735),r=n(91967),o=n(81886),i=n(45157),c=n(49985),s=n(36848),l=n(83914),u=n(76177),m=n(35223);const d={dropdownToggle:"UCAnJ"};function p(){return a.createElement(a.Fragment,null,a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"8rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"12rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"11rem"}})),a.createElement("div",{style:{padding:"0.53125rem 1rem"}},a.createElement("div",{className:"partial-loading-background",style:{height:"1.0625rem",width:"9rem"}})))}function f(e){var t="dropdown-item";return e&&(t+=" ".concat(e)),t}function b(e){var t=r.q.isFunction(e.action.label)?e.action.label:function(){return a.createElement(a.Fragment,null,e.action.label)};if(e.action.appLink)return a.createElement(s.F,{appLink:e.action.appLink,onClick:e.action.onClick,className:f(e.action.className),analyticsData:e.action.analyticsData,analyticsOptions:e.action.analyticsOptions,openInNewTab:e.action.openInNewTab,disabled:e.action.disabled},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t()));function n(t){t.preventDefault(),e.action.analyticsData&&e.action.analyticsOptions&&c.k.logUserAction(e.action.analyticsData,e.action.analyticsOptions),r.q.isFunction(e.action.onClick)&&e.action.onClick(),e.action.href&&o.Q.Ab.PageLoad(e.action.href,e.action.openInNewTab)}return e.action.href?a.createElement("a",{className:f(e.action.className),onClick:n,href:e.action.href},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2 align-middle"}),a.createElement("span",{className:"align-middle"},t())):a.createElement("span",{className:"cursor-pointer ".concat(f(e.action.className)),onClick:n,role:"button",tabIndex:0,onKeyDown:function(e){return"Enter"===e.key&&n(e)}},e.action.svgName&&a.createElement(l.x,{svgName:e.action.svgName,className:"d-inline-block svg-container me-2"}),t())}function g(e){if(!e.actions||!e.actions.length)return a.createElement(a.Fragment,null);var t=e.actions.some((function(e){return e.lazyPlaceholder})),n="dropdown";e.className&&(n+=" ".concat(e.className));var r,o="actions-dropdown-".concat(i.Y.getRandomInt()),c="dropdown-toggle px-0 ".concat(d.dropdownToggle);return e.dropdownToggleClassName&&(c+=" ".concat(e.dropdownToggleClassName)),a.createElement("div",{className:n},a.createElement("button",{className:c,type:"button",id:o,"data-bs-toggle":"dropdown","data-toggle":"dropdown","aria-haspopup":"true","aria-expanded":"false",onClick:t?e.fetchMore:null},a.createElement(l.x,{svgName:m.vn.More,size:e.dropdownToggleSvgSize})),a.createElement("div",{className:"dropdown-menu dropdown-menu-end dropdown-menu-right","aria-labelledby":o},t?a.createElement(p,null):e.actions.map((function(e,t){var n=void 0!==r&&r!==e.group;return r=e.group,e.tooltip?a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(u.u,{title:e.tooltip,spanHack:!0},a.createElement(b,{action:e}))):a.createElement(a.Fragment,{key:t},n&&a.createElement("hr",{className:"dropdown-divider",role:"separator"}),a.createElement(b,{action:e}))}))))}g.defaultProps={dropdownToggleClassName:"btn btn-light",dropdownToggleSvgSize:l.S.Small}},49935:(e,t,n)=>{n.d(t,{Oo:()=>m,b2:()=>d});var a=n(32735),r=n(36848),o=n(86764),i=n(3747),c=n(5859),s=n(35223),l=n(83914),u=function(e){var t=e.breadcrumb,n=t.name,o=t.appLink,i=t.active,c=e.withBackIcon;return a.createElement("li",{className:"breadcrumb-item".concat(i?" active":"")},i?a.createElement("strong",null,n):a.createElement(r.F,{appLink:o},c&&a.createElement(l.x,{svgName:s.vn.ChevronLeft,size:l.S.Small}),a.createElement("span",{className:c?"ms-2":""},n)))},m=function(e){var t=e.breadcrumbs,n=(0,i.a)(o.r.XS),r=null==t?void 0:t.length;return!r||n&&r<2?a.createElement(a.Fragment,null):n?a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},a.createElement(u,{breadcrumb:t[r-2],withBackIcon:!0}))):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},t.map((function(e,t){return a.createElement(u,{key:t,breadcrumb:e})}))))},d=a.memo((function(e){var t=e.numItems,n=void 0===t?3:t;return(0,i.a)(o.r.XS)?a.createElement("div",{className:"partial-loading-background",style:{height:"1.3125rem",width:"6rem"}}):a.createElement("nav",{"aria-label":"breadcrumb"},a.createElement("ol",{className:"breadcrumb m-0 p-0"},c.u.getPartialLoadingItems({numItems:n}).map((function(e,t){var n=e.width;return a.createElement("li",{key:t,className:"breadcrumb-item"},a.createElement("span",{className:"d-inline-block partial-loading-background",style:{width:n},dangerouslySetInnerHTML:{__html:" "}}))}))))}))},38502:(e,t,n)=>{n.d(t,{r:()=>m});var a=n(32735),r=n(49985),o=n(36848),i=n(18559),c=n(11607),s=n(83914),l=n(87432);function u(e){return a.createElement(a.Fragment,null,!!e.tab.svgName&&a.createElement("div",{className:e.tab.name?"pe-1":""},a.createElement(s.x,{svgName:e.tab.svgName})),e.tab.name,"number"==typeof e.tab.count&&a.createElement("div",{className:"ps-2"},a.createElement(i.C,{type:i.g.Count,data:e.tab.count})))}function m(e){var t;return a.createElement("nav",{className:null!==(t=e.className)&&void 0!==t?t:""},a.createElement("ul",{className:"\n list-unstyled d-inline-block m-0 ".concat(l.Z.pillTabSelector,"\n ").concat(e.borderRadius?l.Z.radiusSmall:"","\n ").concat(e.listClassName,"\n ")},e.tabs.map((function(e,t){return a.createElement("li",{className:"\n p-0 ".concat(l.Z.tab," ").concat(e.active?"btn btn-dark":"btn btn-outline-dark","\n ").concat(e.name?l.Z.minWidth:""," ").concat(e.className,"\n "),key:t},e.appLink?a.createElement(o.F,{appLink:e.appLink,analyticsData:e.analyticsData,analyticsOptions:e.analyticsOptions,className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ".concat(l.Z.tabLink,"\n ")},a.createElement(u,{tab:e})):a.createElement(c.L,{className:"\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset p-2 text-nowrap ".concat(l.Z.tabLink,"\n "),onClick:function(){return function(e){!e.active&&e.onSelect&&(e.onSelect(),e.analyticsData&&e.analyticsOptions&&r.k.logUserAction(e.analyticsData,e.analyticsOptions))}(e)}},a.createElement(u,{tab:e})))}))))}m.defaultProps={borderRadius:"lg"}},5062:(e,t,n)=>{n.d(t,{Z:()=>i});var a=n(32735),r=n(87432);const o={partialSize:"ntGsj"};function i(){return a.createElement("div",{className:"partial-loading-background ".concat(r.Z.pillTabSelector," ").concat(o.partialSize)})}},94644:(e,t,n)=>{n.d(t,{r:()=>u});var a=n(50242),r=n(81886),o=n(67058),i=n(14553),c=n(49267),s=n(49075),l={notFound:o.d,forbidden:{rating:i.q,yearLevel:i.q,region:c.a,privacy:i.q},badRequest:s._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var i=Object.assign(Object.assign({},l),t);o&&r.Q.Ry.isStatusCodeError(o)&&(o!==a.o.NotFound?o!==a.o.Forbidden?n.badRequest||r.Q.Ry.throw(new i.badRequest):n.forbidden||r.Q.Ry.throw(new i.forbidden.privacy):n.notFound||r.Q.Ry.throw(new i.notFound))}}},91286:(e,t,n)=>{n.d(t,{v:()=>i});var a=n(32735),r=n(94644);function o(e){return e.map((function(e){return e.statusCode})).join(":")}function i(e,t,n){var i=Array.isArray(e)?e:[e];(0,a.useEffect)((function(){i.forEach((function(e){(0,r.r)(e.statusCode,t,n)}))}),[o(i),t,n])}},53036:(e,t,n)=>{n.d(t,{h:()=>r});var a=n(32045),r={getStatusAsString:function(e){if("string"==typeof e)return e;if("number"==typeof e){if(0===e)return a.w.Disabled;if(1===e)return a.w.Active;if(2===e)return a.w.Inactive}return null},getStatusAsNumber:function(e){if("number"==typeof e)return e;if("string"==typeof e){if(e===a.w.Disabled)return 0;if(e===a.w.Active)return 1;if(e===a.w.Inactive)return 2}return null}}},5859:(e,t,n)=>{function a(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}n.d(t,{u:()=>o});var r={numItems:5,minWidth:50,maxWidth:100},o={getPartialLoadingItems:function(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=Object.assign(Object.assign({},r),t);return(e=Array(n.numItems),function(e){if(Array.isArray(e))return a(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return a(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?a(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(){return{width:"".concat(Math.max(Math.floor(Math.random()*n.maxWidth),n.minWidth),"px")}}))}}},62691:(e,t,n)=>{n.d(t,{m:()=>b});var a=n(32735),r=n(23481),o=n(49985),i=n(65858),c=n(11607),s=n(83914),l=n(69883),u=n(1643),m=n(35223);function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=Array(t);n<t;n++)a[n]=e[n];return a}var p=r.T.encloseNamespace("classrooms.classroomStar"),f=function(e){return u.h.isFavouritedByCurrentUser(e)};function b(e){var t,n,r=(t=a.useState(f(e.classroom)),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,o,i,c=[],s=!0,l=!1;try{if(o=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;s=!1}else for(;!(s=(a=o.call(n)).done)&&(c.push(a.value),c.length!==t);s=!0);}catch(e){l=!0,r=e}finally{try{if(!s&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(l)throw r}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return d(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?d(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),u=r[0],b=r[1],g=(0,l.Z)();return a.useEffect((function(){f(e.classroom)!==u&&b(!u)}),[f(e.classroom)]),a.createElement(c.L,{onClick:function(){b(!u),e.onToggle(!u,(function(){return function(t){if(t)return o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.On,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),void g.success(p("pinSuccess",{classroomName:e.classroom.name,escapeText:!0}));o.k.logUserAction({id:e.classroom.id},{location:e.locationContext,actionType:i.Vw.Favourite,descriptor:i.DL.Off,entity:i.py.Classroom,workflowPhase:i.eu.Complete}),g.success(p("unpinSuccess",{classroomName:e.classroom.name,escapeText:!0}))}(!u)}),(function(){return b(t=u),void(t?g.error(p("unpinError",{classroomName:e.classroom.name,escapeText:!0})):g.error(p("pinError",{classroomName:e.classroom.name,escapeText:!0})));var t}))},className:u?"text-yellow":""},a.createElement(s.x,{svgName:u?m.vn.Star:m.vn.StarOutline,size:s.S.Medium}))}},46009:(e,t,n)=>{n.d(t,{p:()=>s});var a=n(20354),r=n(16714),o=n(31949),i=n(22902),c=n(88630),s=function(e){var t,n=(0,(0,i.T)().hasPermissions)(r.C.ManageAllClassrooms),s=a.a.useBasicFetch(o.N.currentUser()),l=a.a.useBasicFetch(!n&&(null===(t=s.data)||void 0===t?void 0:t.customerId)&&c.F.getClassroomStaff(e,s.data.customerId)),u=a.a.useBasicFetch(!n&&c.F.getClassroomOwners(e));if(n)return{isLoading:!1,isOwner:!0,isTeacher:!0};if(!l.hasCompleted||!u.hasCompleted||!s.hasCompleted)return{isLoading:!0};var m=s.data.id.toString(),d=!!u.data.find((function(e){return e.id.toString()===m})),p=!!l.data.find((function(e){return e.id.toString()===m}));return{isLoading:!1,isTeacher:d||p,isOwner:d}}},31491:(e,t,n)=>{n.d(t,{_:()=>A});var a=n(16714),r=n(67058),o=n(91286),i=n(22902),c=n(23481),s=n(64364),l=n(14070),u=n(97291);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){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,p(a.key),a)}}function p(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=m(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==m(t)?t:t+""}function f(e,t,n){return t=g(t),function(e,t){if(t&&("object"==m(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,b()?Reflect.construct(t,n||[],g(e).constructor):t.apply(e,n))}function b(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(b=function(){return!!e})()}function g(e){return g=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},g(e)}function y(e,t){return y=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},y(e,t)}var v="classrooms.cannotAccessClassroomError",h=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),f(this,t,["Cannot access classroom"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"CannotAccessClassroomError"}},{key:"heading",get:function(){return c.T.getPhrase(v,"heading")}},{key:"description",get:function(){return c.T.getPhrase(v,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(v,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&d(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H);function E(e){return E="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},E(e)}function O(e,t){for(var n=0;n<t.length;n++){var a=t[n];a.enumerable=a.enumerable||!1,a.configurable=!0,"value"in a&&(a.writable=!0),Object.defineProperty(e,S(a.key),a)}}function S(e){var t=function(e,t){if("object"!=E(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var a=n.call(e,"string");if("object"!=E(a))return a;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"==E(t)?t:t+""}function w(e,t,n){return t=C(t),function(e,t){if(t&&("object"==E(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(e)}(e,N()?Reflect.construct(t,n||[],C(e).constructor):t.apply(e,n))}function N(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(N=function(){return!!e})()}function C(e){return C=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},C(e)}function k(e,t){return k=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},k(e,t)}var T="classrooms.classroomNotFoundError",L=function(e){function t(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t),w(this,t,["Classroom doesn't exist"])}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&k(e,t)}(t,e),n=t,(a=[{key:"name",get:function(){return"ClassroomNotFoundError"}},{key:"heading",get:function(){return c.T.getPhrase(T,"heading")}},{key:"description",get:function(){return c.T.getPhrase(T,"description")}},{key:"cta",get:function(){return{text:c.T.getPhrase(T,"cta"),appLink:{application:u.O.CLASSROOMS,action:l.e.Classrooms.HOME}}}}])&&O(n.prototype,a),Object.defineProperty(n,"prototype",{writable:!1}),n;var n,a}(s.H),A=function(e){var t=(0,i.T)().hasPermissions;(0,o.v)(e,{notFound:L,forbidden:{privacy:t(a.C.ViewClassrooms)?h:r.d}})}},5289:(e,t,n)=>{n.d(t,{R:()=>N});var a=n(32735),r=n(23481),o=n(81886),i=n(65858),c=n(83657),s=n(49935),l=n(38502),u=n(32045),m=n(53036),d=n(14070),p=n(97291),f=n(62691),b=n(86764),g=n(86613),y=n(3747),v=n(35223),h=n(46009),E="classrooms.hooks",O=function(e,t,n){var a=(0,y.a)(b.r.SMDown),o=(0,h.p)(e),c={id:e},s={entity:i.py.Classroom,workflowPhase:i.eu.Start,location:i.LZ.Classroom},l="btn btn-outline-dark me-2",u=[];return o.isOwner&&u.push({order:0,label:r.T.getPhrase(E,"editClassroom"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.EDIT_CLASSROOM,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsData:c,analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Edit}),svgName:v.vn.Edit,button:!a,className:n?"disabled ".concat(l):a?"":l}),u.push({order:10,label:r.T.getPhrase(E,"generateJoinLink"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.GENERATE_JOIN_LINK,args:[e]},disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",button:!a&&!o.isOwner,className:n?"disabled":a||o.isOwner?"":l}),o.isOwner&&u.push({order:20,label:r.T.getPhrase(E,"archive"),analyticsData:c,disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Archive,descriptor:i.DL.On}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.ARCHIVE_CLASSROOM,args:[e]},className:n?"disabled":""}),(o.isOwner||o.isTeacher)&&t.role!==g.i.Admin&&u.push({order:30,label:r.T.getPhrase(E,"leaveClassroom"),disabled:n,tooltip:n?r.T.getPhrase(E,"disabledByRostering"):"",className:n?"disabled":"text-danger",analyticsData:Object.assign(Object.assign({},c),{teacherId:t.id}),analyticsOptions:Object.assign(Object.assign({},s),{actionType:i.Vw.Dissociate,descriptor:i.iF.User}),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.REMOVE_TEACHERS,args:[e],params:{teacherIds:[t.id]}}}),u};const S={actionsContainer:"uYv5Z"};var w=r.T.encloseNamespace("classrooms.classroomLayout");function N(e){var t=(0,h.p)(e.classroom.id),n=O(e.classroom.id,e.currentUser,e.isRostered),r=m.h.getStatusAsString(e.classroom.status),b=[{name:w("students"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroom.id]},active:"students"===e.activeTab},{name:w("groups"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_GROUPS,args:[e.classroom.id]},active:"groups"===e.activeTab},{name:w("teachers"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.CLASSROOM_TEACHERS,args:[e.classroom.id]},active:"teachers"===e.activeTab}].filter((function(t){return!e.isRostered||t.name!==w("groups")}));return a.useEffect((function(){r!==u.w.Active&&o.Q.C$.trigger({application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME},{replace:!0})}),[e.classroom.status]),!t.isLoading&&!t.isTeacher||r!==u.w.Active?a.createElement(a.Fragment,null):a.createElement("div",{className:"px-3 position-relative"},a.createElement("div",{className:"d-flex"},a.createElement("div",{className:"mt-1 me-1"},a.createElement(f.m,{classroom:e.classroom,onToggle:e.onTogglePin,locationContext:i.LZ.Classroom})),a.createElement("h1",{className:"mb-0"},e.classroom.name)),!!n.length&&a.createElement("div",{className:S.actionsContainer},a.createElement(c.e,{actions:n,actionsDropdownClassName:"btn btn-outline-dark"})),a.createElement("div",{className:"pb-3 pt-1"},a.createElement(s.Oo,{breadcrumbs:[{name:w("classroomsBreadcrumb"),appLink:{application:p.O.CLASSROOMS,action:d.e.Classrooms.HOME}},{name:e.classroom.name,active:!0}]})),a.createElement("div",{className:"pb-2"},a.createElement(l.r,{tabs:b})),e.children)}},87432:(e,t,n)=>{n.d(t,{Z:()=>a});const a={pillTabSelector:"Hdi6o",tab:"RvNxr",minWidth:"GHSz9",radiusSmall:"VhJJa",tabLink:"WFyvo"}}}]);
|
|
2
|
+
//# sourceMappingURL=3020-9f647705a0-lite.chunk.js.map
|