@clickview/lite 0.49.7 → 0.49.8
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 +1 -1
- package/dist/scripts/1285-db42ee1c76-lite.chunk.js +2 -0
- package/dist/scripts/1285-db42ee1c76-lite.chunk.js.map +1 -0
- package/dist/scripts/1863-bb98f2e617-lite.chunk.js +2 -0
- package/dist/scripts/1863-bb98f2e617-lite.chunk.js.map +1 -0
- package/dist/scripts/{2355-78b307e130-lite.chunk.js → 2355-b2345e9449-lite.chunk.js} +2 -2
- package/dist/scripts/{2355-78b307e130-lite.chunk.js.map → 2355-b2345e9449-lite.chunk.js.map} +1 -1
- package/dist/scripts/7301-49c2341e97-lite.chunk.js +2 -0
- package/dist/scripts/7301-49c2341e97-lite.chunk.js.map +1 -0
- package/dist/scripts/{7855-cbf70d4453-lite.chunk.js → 7855-76f000d339-lite.chunk.js} +2 -2
- package/dist/scripts/7855-76f000d339-lite.chunk.js.map +1 -0
- package/dist/scripts/8243-e9d7716ffe-lite.chunk.js +2 -0
- package/dist/scripts/8243-e9d7716ffe-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-d3e8783756.min.js +3 -0
- package/dist/scripts/bundle-d3e8783756.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1285-93d485e012-lite.chunk.js +0 -2
- package/dist/scripts/1285-93d485e012-lite.chunk.js.map +0 -1
- package/dist/scripts/1863-5502813c32-lite.chunk.js +0 -2
- package/dist/scripts/1863-5502813c32-lite.chunk.js.map +0 -1
- package/dist/scripts/7301-98679776b7-lite.chunk.js +0 -2
- package/dist/scripts/7301-98679776b7-lite.chunk.js.map +0 -1
- package/dist/scripts/7855-cbf70d4453-lite.chunk.js.map +0 -1
- package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js +0 -2
- package/dist/scripts/8243-ddaa0ed22d-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-0fc905d3a4.min.js +0 -3
- package/dist/scripts/bundle-0fc905d3a4.min.js.map +0 -1
- /package/dist/scripts/{bundle-0fc905d3a4.min.js.LICENSE.txt → bundle-d3e8783756.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/7855-76f000d339-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/recipient-item/recipient-item.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/recipient-item/classroom-group-recipient-item-metadata/ClassroomGroupRecipientItemMetadata.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/recipient-item/classroom-recipient-item-metadata/ClassroomRecipientItemMetadata.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/recipient-item/user-recipient-item-metadata/UserRecipientItemMetadata.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/recipient-item/RecipientItem.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/white-avatar/white-avatar.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/white-avatar/WhiteAvatar.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/input-selection.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelectionExpander.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/InputSelection.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/tokenized-typeahead.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/apps/share/components/tokenized-typeahead/TokenizedTypeahead.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/typeahead-empty-state/typeahead-empty-state.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/typeahead-empty-state/TypeaheadEmptyState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/typeahead-error-state/typeahead-error-state.scss","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/components/typeahead-error-state/TypeaheadErrorState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/libs/shared/src/utils/GroupHelper.ts"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"removeRecipient\":\"mCbMC\",\"recipientItem\":\"kdcb0\",\"showSpinner\":\"xH6Mu\",\"avatarContainer\":\"Zcpg3\",\"recipientDetails\":\"v5EmV\",\"recipientDetailsWithRemoveButton\":\"_V928\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { ClassroomGroup } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.classroomGroupRecipientItemMetadata';\n\nfunction getSubheading(classroomGroup: ClassroomGroup): string {\n const userCount = classroomGroup.users?.count ?? 0;\n const classroomName = classroomGroup.classroom?.name;\n\n if (classroomName)\n return LanguageService.getPhrase(namespace, 'subheading', { classroomName, smartCount: userCount });\n\n return '';\n}\n\ninterface ClassroomGroupRecipientItemMetadataProps {\n classroomGroup: ClassroomGroup;\n detailsClassName: string;\n}\n\nexport function ClassroomGroupRecipientItemMetadata(props: ClassroomGroupRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(props.classroomGroup.metadata?.colour)}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.classroomGroup.name}\n </h4>\n <p className='text-secondary m-0'>{getSubheading(props.classroomGroup)}</p>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { Classroom } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.classroomRecipientItemMetadata';\n\nfunction getSubheading(classroom: Classroom): string {\n // Getting count from users is a temporary fix until enrolments count is working in Search api\n const userCount = classroom.users?.count || classroom.enrolments?.count;\n\n if (Number.isInteger(userCount))\n return LanguageService.getPhrase(namespace, 'subheading', { smartCount: userCount });\n\n return '';\n}\n\ninterface ClassroomRecipientItemMetadataProps {\n classroom: Classroom;\n detailsClassName: string;\n}\n\nexport function ClassroomRecipientItemMetadata(props: ClassroomRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.classroom.name}\n </h4>\n <p className='text-secondary m-0'>{getSubheading(props.classroom)}</p>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { BaseObject, User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from '../recipient-item.scss';\n\nconst namespace = 'shared.userRecipientItemMetadata';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getSubText(user: User): string {\n const userType = UserHelper.getUserType(user);\n const role = UserHelper.getUserRole(user);\n\n if (userType === UserGroup.Staff) {\n if (role === UserRole.Admin)\n return getPhrase('admin');\n\n return getPhrase('staff');\n }\n\n const yearGroup = UserHelper.getYearGroup(user);\n\n if (yearGroup?.name)\n return yearGroup.name;\n\n return getPhrase('student');\n}\n\ninterface UserRecipientItemMetadataProps {\n user: User;\n imageCdnUrl: string;\n detailsClassName: string;\n showDisplayName: boolean;\n getSubText?: (user: BaseObject) => string;\n}\n\nexport function UserRecipientItemMetadata(props: UserRecipientItemMetadataProps): JSX.Element {\n return (\n <>\n <div className={`${styles.avatarContainer} d-inline-block`}>\n <Avatar\n imageUrl={props.user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.user.name, props.user.surname)}\n />\n </div>\n\n <div className={props.detailsClassName}>\n <h4 className='font-size-normal fw-normal m-0'>\n {props.showDisplayName\n ? UserHelper.getDisplayName(props.user)\n : UserHelper.getFullName(props.user)\n }\n </h4>\n <p className='text-secondary m-0'>{props.getSubText ? props.getSubText(props.user) : getSubText(props.user)}</p>\n </div>\n </>\n );\n}","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\n\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\n\nimport { ClassroomGroupRecipientItemMetadata } from './classroom-group-recipient-item-metadata/ClassroomGroupRecipientItemMetadata';\nimport { ClassroomRecipientItemMetadata } from './classroom-recipient-item-metadata/ClassroomRecipientItemMetadata';\nimport { UserRecipientItemMetadata } from './user-recipient-item-metadata/UserRecipientItemMetadata';\n\nimport styles from './recipient-item.scss';\n\nconst namespace = 'share.recipientItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getRemovePhrase(type: MasterType): string {\n switch (type) {\n case (MasterType.User):\n return getPhrase('removeUser');\n case (MasterType.Classroom):\n return getPhrase('removeClassroom');\n case (MasterType.ClassroomGroup):\n return getPhrase('removeGroup');\n }\n return null;\n}\n\ninterface RecipientItemProps<T extends BaseObject = BaseObject> {\n entity: T;\n imageCdnUrl: string;\n showDisplayName: boolean;\n removeRecipient?: (id: string, onError?: () => void) => void;\n getSubText?: (entity: T) => string;\n}\n\nexport function RecipientItem<T extends BaseObject = BaseObject>(props: RecipientItemProps<T>): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n let className = `${styles.recipientItem} d-flex`;\n\n if (showSpinner)\n className += ` ${styles.showSpinner}`;\n\n const detailsClassName = `${props.removeRecipient\n ? styles.recipientDetailsWithRemoveButton\n : styles.recipientDetails} d-inline-block ms-2`;\n\n function removeRecipient(): void {\n setShowSpinner(true);\n props.removeRecipient(props.entity.id, () => setShowSpinner(false));\n }\n\n return (\n <div className={className}>\n {(() => {\n if (MasterTypeHelper.isType<User>(props.entity, MasterType.User)) {\n return (\n <UserRecipientItemMetadata\n user={props.entity}\n imageCdnUrl={props.imageCdnUrl}\n detailsClassName={detailsClassName}\n showDisplayName={props.showDisplayName}\n getSubText={props.getSubText}\n />\n );\n }\n\n if (MasterTypeHelper.isType<Classroom>(props.entity, MasterType.Classroom)) {\n return (\n <ClassroomRecipientItemMetadata\n classroom={props.entity}\n detailsClassName={detailsClassName}\n />\n );\n }\n\n if (MasterTypeHelper.isType<ClassroomGroup>(props.entity, MasterType.ClassroomGroup)) {\n return (\n <ClassroomGroupRecipientItemMetadata\n classroomGroup={props.entity}\n detailsClassName={detailsClassName}\n />\n );\n }\n })()}\n\n {FunctionHelper.isFunction(props.removeRecipient) && (\n <div className={`${styles.removeRecipient} d-inline-flex justify-content-center align-items-center`}>\n {showSpinner\n ? <Spinner as='div' size='sm' animation='border' role='status' />\n : (\n <Tooltip title={getRemovePhrase(props.entity.typeId)} spanHack>\n <div\n className='btn-close cursor-pointer'\n role='button'\n aria-label='Close'\n onClick={removeRecipient}\n >\n </div>\n </Tooltip>\n )\n }\n </div>\n )}\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatar\":\"srrS3\"};","import React from 'react';\n\nimport styles from './white-avatar.scss';\n\ninterface WhiteAvatarProps {\n initials: string;\n imageUrl?: string;\n}\n\nexport function WhiteAvatar(props: WhiteAvatarProps): React.ReactElement {\n const { imageUrl, initials } = props;\n\n const style: React.CSSProperties = {};\n\n if (imageUrl)\n style.backgroundImage = `url('${imageUrl}')`;\n\n return (\n <div className={styles.avatar} style={style}>\n {imageUrl ? <> </> : initials}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"svgContainer\":\"laVU4\",\"selection\":\"vEOCt\",\"expander\":\"d1NHd\",\"iconContainer\":\"rFH4W\",\"icon\":\"BarYz\",\"bubble\":\"HF0E8\",\"spinnerContainer\":\"iKeXW\",\"remove\":\"pyzCM\",\"removeBubble\":\"mgt6Y\"};","import React from 'react';\nimport { Spinner } from 'react-bootstrap';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { WhiteAvatar } from 'libs/shared/apps/share/components/white-avatar/WhiteAvatar';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './input-selection.scss';\n\nconst getPhrase = LanguageService.encloseNamespace('shared.inputSelection');\n\nfunction mapEntityTypeToForegroundColor(entity: BaseObject): string {\n switch (entity.typeId) {\n case MasterType.Classroom: {\n return 'text-teal-hover';\n }\n\n case MasterType.ClassroomGroup: {\n return `text-${mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour)}-hover`;\n }\n }\n}\n\nfunction getColouredIconClass(selection: Classroom | ClassroomGroup): string {\n let iconClass = `${styles.svgContainer} ${styles.icon}`;\n\n if (selection.typeId === MasterType.Classroom)\n iconClass += ' text-teal';\n else\n iconClass += ` text-${mapColourToBsVariant((selection as ClassroomGroup).metadata?.colour)}`;\n\n return iconClass;\n}\n\ninterface InputSelectionExpanderProps {\n canExpand: boolean;\n hasExpanded: boolean;\n selection: BaseObject;\n onClickExpand?: () => void;\n}\n\nexport function InputSelectionExpander(props: InputSelectionExpanderProps): JSX.Element {\n const colourClass = mapEntityTypeToForegroundColor(props.selection);\n\n const isClassroom = props.selection.typeId === MasterType.Classroom;\n\n if (!props.canExpand) {\n if (!props.selection.typeId || props.selection.typeId === MasterType.User) {\n const user = props.selection as User;\n\n return (\n <div className={styles.svgContainer}>\n <WhiteAvatar\n imageUrl={user.avatar?.url}\n initials={UserHelper.getInitials(props.selection.name, (props.selection as User).surname)}\n />\n </div>\n );\n }\n\n return (\n <Tooltip title={getPhrase(isClassroom ? 'emptyClassroom' : 'emptyGroup')}>\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </Tooltip>\n );\n }\n\n if (!props.hasExpanded) {\n return (\n <>\n {/* Visible on hover */}\n <DivButton\n className={`align-items-center cursor-pointer text-white border border-white rounded-circle ${styles.expander} ${colourClass}`}\n onClick={props.onClickExpand}\n >\n <SvgContainer svgName={cvSvgLibrary.Plus} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n\n {/* Visible when not hovering */}\n <div className={`align-items-center border border-white bg-white ${styles.iconContainer}`}>\n <SvgContainer\n className={getColouredIconClass(props.selection)}\n svgName={isClassroom ? cvSvgLibrary.Classrooms : cvSvgLibrary.Group}\n />\n </div>\n </>\n );\n }\n\n return (\n <div className={`d-flex align-items-center text-white ${styles.spinnerContainer} ${styles.svgContainer}`}>\n <Spinner as='div' size='sm' animation='border' role='status' />\n </div>\n );\n}","import React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { MasterTypeHelper } from 'libs/shared/utils/MasterTypeHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport { InputSelectionExpander } from './InputSelectionExpander';\n\nimport styles from './input-selection.scss';\n\n/**\n * TODO: This entire file needs to be refactored to work\n * better with non standard entities. ATM it's also being used\n * in the invite a colleague UI for trials. - Sha\n */\ninterface OtherEntity {\n id: never;\n typeId: never;\n name: string;\n}\n\ntype Entity = Classroom | ClassroomGroup | User | OtherEntity;\n\nfunction mapEntityTypeToBsVariant(entity: Entity): ButtonProps['variant'] {\n if (!entity.typeId)\n return 'dark-blue';\n\n switch (entity.typeId) {\n case MasterType.User: {\n // TODO: Delete this once https://clickview.atlassian.net/browse/INBOX-2151 is addressed\n if (typeof(entity as User).userType === 'number')\n return ((entity as User).userType as any) === 2 ? 'dark-blue' : 'indigo';\n\n if ((entity as User).userType === UserGroup.Learner)\n return 'dark-blue';\n\n return 'indigo';\n }\n\n case MasterType.Classroom: {\n return 'teal';\n }\n\n case MasterType.ClassroomGroup: {\n return mapColourToBsVariant((entity as ClassroomGroup).metadata?.colour);\n }\n }\n}\n\ninterface InputSelectionProps {\n selection: Entity;\n onClickRemove?: (selection: Entity) => void;\n onClickExpand?: (id: string) => void;\n hasStudentExperience?: boolean;\n}\n\nexport function InputSelection(props: InputSelectionProps): JSX.Element {\n const isClassroom = MasterTypeHelper.isType(props.selection, MasterType.Classroom);\n const isClassroomGroup = MasterTypeHelper.isType(props.selection, MasterType.ClassroomGroup);\n const isExpandable = props.onClickExpand && (isClassroom || isClassroomGroup);\n\n /**\n * We only know that there are no members if props.selections.users.count exists\n * and is 0 as it is set to 0 in <MainShare /> after fetching the users.\n */\n const hasMembers = !!(\n (props.selection as ClassroomGroup).users ||\n (props.selection as Classroom).enrolments\n )?.count;\n const hasFetchedMembers = !!(props.selection as Classroom | ClassroomGroup).users?.data?.length;\n\n const [ hasExpanded, setHasExpanded ] = React.useState(false);\n const [ canExpand, setCanExpand ] = React.useState(isExpandable && hasMembers);\n\n React.useEffect(() => {\n setCanExpand(isExpandable && hasMembers);\n }, [ isExpandable, hasMembers ]);\n\n function onClickExpand(): void {\n setHasExpanded(true);\n props.onClickExpand(props.selection.id);\n }\n\n if (hasFetchedMembers) {\n const selection: Classroom | ClassroomGroup = props.selection as Classroom | ClassroomGroup;\n\n const colourVariant = mapEntityTypeToBsVariant(props.selection);\n\n return (\n <div className={`d-flex align-items-center flex-wrap me-1 mt-1 pb-1 ps-1 pe-4 position-relative border-${colourVariant} text-${colourVariant} ${styles.bubble}`}>\n {selection.users.data.map(user => (\n <InputToken\n key={`${user.id}:${props.selection.id}`}\n selection={user}\n colourVariant={colourVariant}\n hasStudentExperience={props.hasStudentExperience}\n />\n ))}\n\n <DivButton\n className={`cursor-pointer position-absolute text-${colourVariant} ${styles.removeBubble}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n </div>\n );\n }\n\n return (\n <InputToken\n selection={props.selection}\n canExpand={canExpand}\n hasExpanded={hasExpanded}\n onClickExpand={onClickExpand}\n onClickRemove={props.onClickRemove}\n colourVariant={mapEntityTypeToBsVariant(props.selection)}\n hasStudentExperience={props.hasStudentExperience}\n />\n );\n}\n\ninterface InputTokenProps<T extends HashObject> {\n selection: T | Entity;\n colourVariant: string;\n canExpand?: boolean;\n hasExpanded?: boolean;\n onClickExpand?: () => void;\n onClickRemove?: (selection: Entity) => void;\n hasStudentExperience?: boolean;\n hideExpander?: boolean;\n}\n\nexport function InputToken<T extends HashObject = Entity>(props: InputTokenProps<T>): JSX.Element {\n const colourVariant = props.colourVariant || mapEntityTypeToBsVariant(props.selection);\n\n let selectionName = props.selection.name;\n\n if (props.selection.typeId === MasterType.User) {\n selectionName = props.hasStudentExperience\n ? UserHelper.getDisplayName(props.selection as User)\n : UserHelper.getFullName(props.selection as User);\n }\n\n return (\n <div className={`${styles.selection} bg-${colourVariant} rounded-pill text-${colourVariant} d-flex align-items-center me-1 mt-1 overflow-hidden`}>\n {!props.hideExpander && (\n <InputSelectionExpander\n canExpand={props.canExpand}\n hasExpanded={props.hasExpanded}\n onClickExpand={props.onClickExpand}\n selection={props.selection}\n />\n )}\n\n <span className='mx-1 text-white text-truncate'>{selectionName}</span>\n\n {FunctionHelper.isFunction(props.onClickRemove) && (\n <DivButton\n className={`d-flex align-items-center cursor-pointer align-self-stretch text-white ${styles.remove}`}\n onClick={() => props.onClickRemove(props.selection)}\n >\n <SvgContainer svgName={cvSvgLibrary.Close} className={`d-flex align-items-center ${styles.svgContainer}`} />\n </DivButton>\n )}\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"container\":\"Dc3kX\",\"suggestionsContainerOpen\":\"c5t3e\",\"selectionContainer\":\"kFjoN\",\"sectionContainer\":\"mLrE3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { RecipientItem } from 'libs/shared/apps/share/components/recipient-item/RecipientItem';\nimport { SearchBar, SearchBarProps } from 'libs/shared/components/search-bar/SearchBar';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { TypeaheadEmptyState } from 'libs/shared/components/typeahead-empty-state/TypeaheadEmptyState';\nimport { TypeaheadErrorState } from 'libs/shared/components/typeahead-error-state/TypeaheadErrorState';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { InputSelection } from './InputSelection';\n\nimport styles from './tokenized-typeahead.scss';\n\nconst namespace = 'shared.tokenizedTypeahead';\n\nexport const TOKENIZED_TYPEAHEAD_SUGGESTIONS_LIMIT = 10;\n\ninterface TokenizedTypeaheadProps<T extends BaseObject = BaseObject> extends SearchBarProps<T> {\n selections: T[];\n removeSelection: (selection: T) => void;\n emptyStateImageUrl: string;\n errorStateImageUrl: string;\n hasStudentExperience?: boolean;\n getInputTokenComponent?: (selection: T) => JSX.Element;\n imageCdnUrl?: string;\n className?: string;\n hideIcon?: boolean;\n\n /**\n * If this is passed in groups and classrooms will have the option to expand\n * otherwise they will appear as normal without the + icon\n */\n fetchSelectionMembers?: (id: string) => void;\n sharePermissionsDescription?: string;\n}\n\nTokenizedTypeahead.defaultProps = {\n renderSuggestionsOnInputFocus: true\n};\n\n/**\n * This component extends the functionality of the `SearchBar` component by\n * displaying a list of selections as tokens inside the search bar.\n * \n * Any component using this component is responsible for managing the state of\n * these tokens (selections). See `MainShare.tsx` for an example.\n */\nexport function TokenizedTypeahead<T extends BaseObject = BaseObject>(props: TokenizedTypeaheadProps<T>): JSX.Element {\n return (\n <div className={`form-control h-auto d-flex align-items-top position-relative ${props.hideIcon ? '' : 'py-1 px-0'} ${props.className}`}>\n {!props.hideIcon && <SvgContainer className='svg-container m-1' svgName={cvSvgLibrary.Search} />}\n\n <div className={`${styles.selectionContainer} d-flex flex-wrap align-items-center mt-n1`}>\n {props.selections.map(s => {\n if (props.getInputTokenComponent)\n return props.getInputTokenComponent(s);\n\n return (\n <InputSelection\n key={s.id}\n selection={s}\n onClickRemove={props.removeSelection}\n onClickExpand={props.fetchSelectionMembers}\n hasStudentExperience={props.hasStudentExperience}\n />\n );\n })}\n\n <SearchBar\n {...props}\n onBackspace={() => {\n if (!props.selections.length)\n return;\n\n props.removeSelection(ArrayHelper.last(props.selections));\n }}\n recentSearchHeading={props.recentSearchHeading || LanguageService.getPhrase(namespace, 'recentSearchHeading')}\n placeholder={!props.selections?.length ? props.placeholder : ' '}\n searchIconPlacement={false}\n clearQueryOnSelect\n getSuggestionComponent={suggestion => {\n if (props.getSuggestionComponent)\n return props.getSuggestionComponent(suggestion);\n\n return (\n <RecipientItem\n entity={suggestion}\n imageCdnUrl={props.imageCdnUrl}\n showDisplayName={props.hasStudentExperience}\n />\n );\n }}\n getEmptyStateComponent={query => <TypeaheadEmptyState query={query} imageUrl={props.emptyStateImageUrl} />}\n getErrorStateComponent={onClickTryAgain =>\n <TypeaheadErrorState imageUrl={props.errorStateImageUrl} onClickTryAgain={onClickTryAgain} />\n }\n theme={{\n container: styles.container,\n suggestionsContainerOpen: `bg-white py-1 rounded border mt-1 ${styles.suggestionsContainerOpen}`,\n sectionContainer: `border-bottom py-1 ${styles.sectionContainer}`\n }}\n sectionTitleClassName='ps-2'\n renderSuggestionsOnInputFocus={props.renderSuggestionsOnInputFocus}\n onSuggestionDependencies={[props.selections]}\n />\n </div>\n\n {!!props.sharePermissionsDescription &&\n <span className='px-2 text-secondary text-nowrap'>{props.sharePermissionsDescription}</span>\n }\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"emptyState\":\"bKTf0\"};","import React from 'react';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useDebounce } from 'libs/shared/hooks/UseDebounce';\n\nimport styles from './typeahead-empty-state.scss';\n\nconst namespace = 'shared.typeaheadEmptyState';\n\ninterface TypeaheadEmptyStateProps {\n query: string;\n imageUrl: string;\n}\n\nexport function TypeaheadEmptyState({ query = '', imageUrl }: TypeaheadEmptyStateProps): JSX.Element {\n function onClick(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n }\n\n const debouncedQuery = useDebounce(query, 300);\n\n return (\n <div className='d-flex flex-column align-items-center text-center' onClick={onClick}>\n <img\n alt=''\n role='presentation'\n src={imageUrl}\n className={`pb-2 ${styles.emptyState}`}\n />\n <h2 className='h6'>\n <Text\n namespace={namespace}\n phrase='noResults'\n options={{ query: debouncedQuery, smartCount: debouncedQuery.length }}\n />\n </h2>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"emptyState\":\"k5mEG\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport styles from './typeahead-error-state.scss';\n\nconst namespace = 'shared.typeaheadErrorState';\n\ninterface TypeaheadErrorStateProps {\n imageUrl: string;\n onClickTryAgain: () => void;\n}\n\nexport function TypeaheadErrorState(props: TypeaheadErrorStateProps): JSX.Element {\n function onClickComponent(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n }\n\n function onClickTryAgain(e: React.MouseEvent<HTMLDivElement>): void {\n e.stopPropagation();\n \n props.onClickTryAgain();\n }\n\n return (\n <div className='d-flex flex-column align-items-center text-center' onClick={onClickComponent}>\n <img\n alt=''\n role='presentation'\n src={props.imageUrl}\n className={`pb-2 ${styles.emptyState}`}\n />\n <h2 className='h6'>\n <Text namespace={namespace} phrase='error' />\n </h2>\n <DivButton onClick={onClickTryAgain} className='btn btn-link info-link p-0'>\n <Text namespace={namespace} phrase='tryAgain' />\n </DivButton>\n </div>\n );\n}","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n"],"names":["namespace","ClassroomGroupRecipientItemMetadata","props","className","IconCircle","svgName","variant","classroomGroup","metadata","colour","detailsClassName","name","userCount","users","count","classroomName","classroom","LanguageService","smartCount","getSubheading","ClassroomRecipientItemMetadata","enrolments","Number","isInteger","getPhrase","UserRecipientItemMetadata","Avatar","imageUrl","user","avatar","url","imageCdnUrl","initials","UserHelper","surname","showDisplayName","getSubText","userType","role","UserGroup","UserRole","yearGroup","getRemovePhrase","type","MasterType","RecipientItem","showSpinner","setShowSpinner","removeRecipient","MasterTypeHelper","entity","FunctionHelper","Spinner","as","size","animation","Tooltip","title","typeId","spanHack","onClick","id","WhiteAvatar","style","backgroundImage","getColouredIconClass","selection","iconClass","InputSelectionExpander","colourClass","mapEntityTypeToForegroundColor","isClassroom","canExpand","SvgContainer","hasExpanded","DivButton","onClickExpand","mapEntityTypeToBsVariant","InputSelection","isClassroomGroup","isExpandable","hasMembers","hasFetchedMembers","data","length","setHasExpanded","setCanExpand","colourVariant","map","InputToken","key","hasStudentExperience","onClickRemove","selectionName","hideExpander","TOKENIZED_TYPEAHEAD_SUGGESTIONS_LIMIT","TokenizedTypeahead","hideIcon","selections","s","getInputTokenComponent","removeSelection","fetchSelectionMembers","SearchBar","onBackspace","ArrayHelper","recentSearchHeading","placeholder","searchIconPlacement","clearQueryOnSelect","getSuggestionComponent","suggestion","getEmptyStateComponent","query","TypeaheadEmptyState","emptyStateImageUrl","getErrorStateComponent","onClickTryAgain","TypeaheadErrorState","errorStateImageUrl","theme","container","suggestionsContainerOpen","sectionContainer","sectionTitleClassName","renderSuggestionsOnInputFocus","onSuggestionDependencies","sharePermissionsDescription","defaultProps","debouncedQuery","e","stopPropagation","alt","src","Text","phrase","options","mapColourToBsVariant","groupColour"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[8243],{12699:(e,a,t)=>{t.r(a),t.d(a,{GenerateJoinLinkView:()=>F});var n=t(32735),r=t(98269),l=t(70680),s=t(23481),c=t(97395),i=t(81886),m=t(20354),o=t(74231),d=t(66903),u=t(83345),E=t(16714),p=t(39151),N=t(3010),g=t(22902),v=t(37802),f=t(40841),h=t(99742),S=t(14070),k=t(97291),C=t(88630),b=t(23232),L="classrooms.joinLinkEmptyState";function T(){return n.createElement(u.D.Provider,{value:L},n.createElement(b.u,null,n.createElement(b.u.Image,{src:h.W.EmptyStates.Classrooms.NO_STUDENTS_IN_CLASSROOM,size:"small"}),n.createElement(b.u.Heading,null,n.createElement(u.x,{phrase:"heading"}))))}var x=t(20789),w=t(64818);const I={avatarContainer:"NSuhj"};function O(e){var a;return n.createElement("div",{className:"col-3 mb-3"},n.createElement("div",{className:"border border-secondary rounded-3 d-flex p-2 align-items-center"},n.createElement("div",{className:"".concat(I.avatarContainer," flex-shrink-0")},n.createElement(x.q,{imageUrl:null===(a=e.user.avatar)||void 0===a?void 0:a.url,imageCdnUrl:e.imageCdnUrl,initials:w.l.getInitials(e.user.name,e.user.surname)})),n.createElement("div",{className:"text-truncate ms-2"},e.user.name," ",e.user.surname)))}const _={orderedListWithBackground:"Qp_SN",number:"inFpq",joinLinkCode:"ZzTdG",horizontalLineWithText:"GwGiF",primary:"S4GPx"};var U="classrooms.generateJoinLink",A=s.T.encloseNamespace(U),y=15e3;function F(e){var a=(0,l.I0)(),t=m.a.useGetFetchAsync(),s=(0,(0,g.T)().hasPermissions)(E.C.ManageIntegrations),b=m.a.useBasicFetch(C.F.generateJoinLink(e.classroomId));function L(a){return C.F.getClassroomStudents(e.classroomId,a)}var x,w,I,F=(0,N.i)(L,(function(e){t(L(e))})),G=m.a.useBasicFetch(p.L.config()),W=(0,v.r)(null),M=W.shareToGoogleClassroom,R=W.shareToMicrosoftTeams,D=W.isLoadingSettings,j="list"===e.source;return n.useEffect((function(){var e=window.setInterval((function(){m.a.fetch(a,L())}),y);return function(){return window.clearInterval(e)}}),[]),b.data&&F.items&&G.data&&!D?n.createElement(u.D.Provider,{value:U},n.createElement("div",{className:"d-flex px-3 "},n.createElement("h1",{className:"h3 mb-3 flex-fill"},n.createElement(u.x,{phrase:"title"})),n.createElement("div",{className:"flex-fill text-end"},n.createElement(r.Z,{variant:"dark",onClick:function(){j?i.Q.C$.trigger({application:k.O.CLASSROOMS,action:S.e.Classrooms.HOME}):i.Q.C$.trigger({application:k.O.CLASSROOMS,action:S.e.Classrooms.CLASSROOM_STUDENTS,args:[e.classroomId]})}},A(j?"backToList":"backToClassroom")))),n.createElement("div",{className:"px-3"},n.createElement("div",{className:"row mt-1"},n.createElement("div",{className:"col-md-6 col-12"},n.createElement("ol",{className:"mb-4 ".concat(_.orderedListWithBackground)},n.createElement("li",{className:"mb-2"},n.createElement("span",{className:_.number},"1"),A("goToUrl"),n.createElement("span",{className:_.primary},(I=new URL(G.data.primaryUrl).hostname,c._.safeUrlConcat(I,"/join")))),n.createElement("li",null,n.createElement("span",{className:_.number},"2"),A("enterCode"),n.createElement("div",{className:"pt-3 pb-4 ms-4 mt-2 border rounded-3 text-center overflow-hidden fw-semibold ".concat(_.joinLinkCode)},b.data.code))),n.createElement("h2",{className:"border-bottom text-center w-100 mb-4 ".concat(_.horizontalLineWithText)},n.createElement("span",{className:"px-2 fw-normal"},A("or"))),n.createElement("ol",{className:_.orderedListWithBackground},n.createElement("li",{className:"mb-3"},n.createElement("span",{className:_.number},"1"),A("copyLinkAndShare"),n.createElement("div",{className:"d-flex flex-column gap-2 mt-2 ms-4"},n.createElement(d.k,{value:b.data.link}),n.createElement(o.T,{integrations:(x=M,w=R,f._.getShareIntegrations(x,w).filter((function(e){return e.enabled})).map((function(e){return e.id}))),url:b.data.link,appLink:s?{application:k.O.SETTINGS,action:S.e.Settings.INTEGRATIONS}:{application:k.O.DEFAULT,action:S.e.Default.INTEGRATIONS_INFO}}))))),n.createElement("div",{className:"col-md-6 col-12 text-center"},n.createElement("img",{src:h.W.AddStudents.JOIN_LINK,className:"rounded-3 w-75 box-shadow img-fluid my-3"}))),n.createElement("hr",null),n.createElement("div",null,A("studentsWillAppear"),!F.items.length&&n.createElement(T,null),n.createElement("div",{className:"row mt-3"},F.items.map((function(e){return n.createElement(O,{user:e,key:e.id,imageCdnUrl:G.data.imageCdnUrl})})))))):n.createElement(n.Fragment,null)}}}]);
|
|
2
|
+
//# sourceMappingURL=8243-e9d7716ffe-lite.chunk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/8243-e9d7716ffe-lite.chunk.js","mappings":"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","sources":["file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/generate-join-link/empty-state/JoinLinkEmptyState.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/generate-join-link/student-pill/student-pill.scss","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/generate-join-link/student-pill/StudentPill.tsx","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/generate-join-link/generate-join-link.scss","file:///Users/joshua.taylor/Projects/clickview/packages/projects/lite/src/apps/classrooms/views/generate-join-link/GenerateJoinLinkView.tsx"],"sourcesContent":["import React from 'react';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nconst namespace = 'classrooms.joinLinkEmptyState';\n\nexport function JoinLinkEmptyState(): JSX.Element {\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Classrooms.NO_STUDENTS_IN_CLASSROOM} size='small'/>\n <EmptyState.Heading><Text phrase='heading' /></EmptyState.Heading>\n </EmptyState>\n </LanguageNamespaceContext.Provider>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"NSuhj\"};","import React from 'react';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { User } from 'libs/shared/interfaces';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './student-pill.scss';\n\ninterface StudentPillProps {\n user: User;\n imageCdnUrl: string;\n}\n\nexport function StudentPill(props: StudentPillProps): React.ReactElement {\n return (\n <div className='col-3 mb-3'>\n <div className='border border-secondary rounded-3 d-flex p-2 align-items-center'>\n <div className={`${styles.avatarContainer} flex-shrink-0`}>\n <Avatar\n imageUrl={props.user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.user.name, props.user.surname)}\n />\n </div>\n <div className='text-truncate ms-2'>{props.user.name} {props.user.surname}</div>\n </div>\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"orderedListWithBackground\":\"Qp_SN\",\"number\":\"inFpq\",\"joinLinkCode\":\"ZzTdG\",\"horizontalLineWithText\":\"GwGiF\",\"primary\":\"S4GPx\"};","import React from 'react';\nimport { Button } from 'react-bootstrap';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ShareIntegrations } from 'libs/shared/apps/share/views/share/components/share-integrations/ShareIntegrations';\nimport { CopyInput } from 'libs/shared/components/copy-input/CopyInput';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { IntegrationId } from 'libs/shared/enums/IntegrationId';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, User } from 'libs/shared/interfaces';\nimport { IntegrationHelper } from 'libs/shared/utils/IntegrationHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { ClassroomRequests } from 'apps/classrooms/flight-requests/ClassroomRequests';\nimport { GenerateClassroomLinkResponse } from 'apps/classrooms/interfaces/GenerateClassroomLinkResponse';\nimport { JoinLinkEmptyState } from 'apps/classrooms/views/generate-join-link/empty-state/JoinLinkEmptyState';\nimport { StudentPill } from 'apps/classrooms/views/generate-join-link/student-pill/StudentPill';\n\nimport styles from './generate-join-link.scss';\n\nconst namespace = 'classrooms.generateJoinLink';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst POLLING_INTERVAL = 15000; // 15s\n\nexport interface GenerateJoinLinkViewQueryParams {\n source?: 'list';\n}\n\ninterface GenerateJoinLinkViewProps extends GenerateJoinLinkViewQueryParams{\n classroomId: string;\n}\n\nexport function GenerateJoinLinkView(props: GenerateJoinLinkViewProps): React.ReactElement {\n const dispatch = useDispatch();\n const fetchAsync = Flight.useGetFetchAsync();\n\n const { hasPermissions } = usePermissions();\n const hasManageIntegrationsPermission = hasPermissions(PermissionName.ManageIntegrations);\n\n const joinLink = Flight.useBasicFetch<GenerateClassroomLinkResponse>(\n ClassroomRequests.generateJoinLink(props.classroomId)\n );\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.getClassroomStudents(props.classroomId, cursor);\n }\n\n function fetchNext(cursor?: string): void {\n fetchAsync(getRequest(cursor));\n }\n\n const students = useFetchAll<User>(getRequest, fetchNext);\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const { shareToGoogleClassroom, shareToMicrosoftTeams, isLoadingSettings } = useSettings(null);\n\n const isFromList = props.source === 'list';\n\n function backToClassroom(): void {\n if (isFromList) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.HOME\n });\n return;\n }\n\n Core.AppLinkHelper.trigger({\n application: AppChannels.CLASSROOMS,\n // TODO: Change to classroom overview\n action: Actions.Classrooms.CLASSROOM_STUDENTS,\n args: [props.classroomId]\n });\n }\n \n function getEnabledIntegrations(googleClassroomSetting: boolean, msftTeamsSetting: boolean): IntegrationId[] {\n const integrations = IntegrationHelper.getShareIntegrations(googleClassroomSetting, msftTeamsSetting);\n return integrations.filter(i => i.enabled).map(i => i.id);\n }\n\n React.useEffect(() => {\n const interval = window.setInterval(() => {\n Flight.fetch(dispatch, getRequest());\n }, POLLING_INTERVAL);\n \n return () => window.clearInterval(interval);\n }, []);\n\n function getJoinUrl(): string {\n const url = new URL(config.data.primaryUrl).hostname;\n\n return UrlHelper.safeUrlConcat(url, '/join');\n }\n\n if (!joinLink.data || !students.items || !config.data || isLoadingSettings)\n return <></>;\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <div className='d-flex px-3 '>\n <h1 className='h3 mb-3 flex-fill'><Text phrase='title' /></h1>\n <div className='flex-fill text-end'>\n <Button variant='dark' onClick={backToClassroom}>\n {getPhrase(isFromList ? 'backToList' : 'backToClassroom')}\n </Button>\n </div>\n </div>\n <div className='px-3'>\n <div className='row mt-1'>\n <div className='col-md-6 col-12'>\n <ol className={`mb-4 ${styles.orderedListWithBackground}`}>\n <li className='mb-2'>\n <span className={styles.number}>1</span>\n {getPhrase('goToUrl')}\n <span className={styles.primary}>{getJoinUrl()}</span>\n </li>\n <li>\n <span className={styles.number}>2</span>\n {getPhrase('enterCode')}\n <div className={`pt-3 pb-4 ms-4 mt-2 border rounded-3 text-center overflow-hidden fw-semibold ${styles.joinLinkCode}`}>\n {joinLink.data.code}\n </div>\n </li>\n </ol>\n <h2 className={`border-bottom text-center w-100 mb-4 ${styles.horizontalLineWithText}`}>\n <span className='px-2 fw-normal'>{getPhrase('or')}</span>\n </h2>\n <ol className={styles.orderedListWithBackground}>\n <li className='mb-3'>\n <span className={styles.number}>1</span>\n {getPhrase('copyLinkAndShare')}\n <div className='d-flex flex-column gap-2 mt-2 ms-4'>\n <CopyInput value={joinLink.data.link} />\n <ShareIntegrations\n integrations={getEnabledIntegrations(shareToGoogleClassroom, shareToMicrosoftTeams)}\n url={joinLink.data.link}\n appLink={hasManageIntegrationsPermission ? {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.INTEGRATIONS\n } : {\n application: AppChannels.DEFAULT,\n action: Actions.Default.INTEGRATIONS_INFO\n }}\n />\n </div>\n </li>\n </ol>\n </div>\n <div className='col-md-6 col-12 text-center'>\n <img src={ImageUrls.AddStudents.JOIN_LINK} className='rounded-3 w-75 box-shadow img-fluid my-3' />\n </div>\n </div>\n <hr />\n <div>\n {getPhrase('studentsWillAppear')}\n {!students.items.length && <JoinLinkEmptyState />}\n <div className='row mt-3'>\n {students.items.map(s => <StudentPill user={s} key={s.id} imageCdnUrl={config.data.imageCdnUrl} />)}\n </div>\n </div>\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}"],"names":["namespace","JoinLinkEmptyState","value","EmptyState","src","ImageUrls","size","Text","phrase","StudentPill","props","className","Avatar","imageUrl","user","avatar","url","imageCdnUrl","initials","UserHelper","name","surname","getPhrase","LanguageService","POLLING_INTERVAL","GenerateJoinLinkView","dispatch","fetchAsync","hasManageIntegrationsPermission","hasPermissions","usePermissions","PermissionName","joinLink","ClassroomRequests","classroomId","getRequest","cursor","googleClassroomSetting","msftTeamsSetting","students","config","ConfigRequests","useSettings","shareToGoogleClassroom","shareToMicrosoftTeams","isLoadingSettings","isFromList","source","interval","window","setInterval","clearInterval","data","items","Button","variant","onClick","application","action","args","URL","primaryUrl","hostname","UrlHelper","code","CopyInput","link","ShareIntegrations","integrations","IntegrationHelper","filter","i","enabled","map","id","appLink","length","s","key"],"sourceRoot":""}
|