@clickview/lite 0.75.0-rc.8 → 0.75.0-rc.9
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/1199-dc45a88be8-lite.chunk.js +2 -0
- package/dist/scripts/1199-dc45a88be8-lite.chunk.js.map +1 -0
- package/dist/scripts/4208-f22ed7a148-lite.chunk.js +2 -0
- package/dist/scripts/4208-f22ed7a148-lite.chunk.js.map +1 -0
- package/dist/scripts/6550-1d60d863e8-lite.chunk.js +2 -0
- package/dist/scripts/6550-1d60d863e8-lite.chunk.js.map +1 -0
- package/dist/scripts/{7148-50ccb48a44-lite.chunk.js → 7148-e314dd9a4e-lite.chunk.js} +2 -2
- package/dist/scripts/7148-e314dd9a4e-lite.chunk.js.map +1 -0
- package/dist/scripts/8856-361fe76b7a-lite.chunk.js +2 -0
- package/dist/scripts/8856-361fe76b7a-lite.chunk.js.map +1 -0
- package/dist/scripts/9042-544d97a05d-lite.chunk.js +2 -0
- package/dist/scripts/9042-544d97a05d-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-58c25f6529.min.js → bundle-cf4c360278.min.js} +3 -3
- package/dist/scripts/{bundle-58c25f6529.min.js.map → bundle-cf4c360278.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1199-1cddf4e0e0-lite.chunk.js +0 -2
- package/dist/scripts/1199-1cddf4e0e0-lite.chunk.js.map +0 -1
- package/dist/scripts/4208-3ba21abb7c-lite.chunk.js +0 -2
- package/dist/scripts/4208-3ba21abb7c-lite.chunk.js.map +0 -1
- package/dist/scripts/6550-c621babbcb-lite.chunk.js +0 -2
- package/dist/scripts/6550-c621babbcb-lite.chunk.js.map +0 -1
- package/dist/scripts/7148-50ccb48a44-lite.chunk.js.map +0 -1
- package/dist/scripts/8856-8ac95bf4e0-lite.chunk.js +0 -2
- package/dist/scripts/8856-8ac95bf4e0-lite.chunk.js.map +0 -1
- package/dist/scripts/9042-3092af11d5-lite.chunk.js +0 -2
- package/dist/scripts/9042-3092af11d5-lite.chunk.js.map +0 -1
- /package/dist/scripts/{bundle-58c25f6529.min.js.LICENSE.txt → bundle-cf4c360278.min.js.LICENSE.txt} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scripts/9042-544d97a05d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/share-v2/enums/ShareType.ts","file:///app/packages/libs/shared/src/apps/share-v2/utils/ShareHelper.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/utils/ShareLinkHelper.ts","file:///app/packages/libs/shared/src/components/avatar-list/AvatarList.tsx","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/libs/shared/src/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/partial-shared-by-me-table.scss","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/PartialSharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeViewUtils.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/projects/lite/src/shared/hooks/useSharedByMeTable.ts","file:///app/packages/projects/lite/src/shared/utils/ObjectAppLinkHelper.ts"],"sourcesContent":["import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, extra?: string): string {\n if (!filter)\n return baseKey;\n\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n const customerIdKey = Array.isArray(filter.customerId) ? filter.customerId.sort().join(':') : filter.customerId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (customerIdKey)\n key += `:${customerIdKey}`;\n\n if (extra)\n key += `:${extra}`;\n\n return key;\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n shareId?: string;\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n shareId?: string\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: filter ? { start: filter.start, end: filter.end } : undefined,\n userIds: filter?.userId,\n classroomsAndGroups: filter?.groupId,\n shareId: shareId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter?: AnalyticsRequestFilter,\n shareId?: string,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: shareId ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}:${shareId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter, shareId),\n type: HttpVerbs.POST,\n normalize: false,\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '/api/domain/v3/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","export enum ShareType {\n Link = 'Link',\n Classroom = 'Classroom',\n Open = 'Open',\n Live = 'Live',\n LegacyDirect = 'LegacyDirect',\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareRecipient } from 'libs/shared/apps/share-v2/interfaces/ShareRecipient';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Classroom } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getFlattenedRecipients(shares: Share[]): ShareRecipient[] {\n return ArrayHelper.flatten(shares.map(s => s.recipients ?? []));\n },\n\n getFlattenedUniqueScopes(shares: Share[]): string[] {\n const recipients = ShareHelper.getFlattenedRecipients(shares);\n return ArrayHelper.uniq(recipients.map(r => r.scopeId?.toString())).filter(x => !!x);\n },\n \n getClassroomIdFromShare(share: Share): string | undefined {\n const firstRecipient = share.recipients?.[0];\n \n if (!firstRecipient) return;\n \n if (firstRecipient.scopeId)\n return firstRecipient.scopeId.toString();\n \n if (firstRecipient.recipientId && firstRecipient.recipientTypeId === MasterType.Classroom)\n return firstRecipient.recipientId.toString();\n },\n\n getClassroomForShare(share: Share, classrooms: Classroom[]): Classroom | undefined {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n \n if (!classroomId) return;\n \n return classrooms.find(classroom => classroom.id.toString() === classroomId.toString());\n },\n\n getRecipientsCount(share: Share, type?: MasterType.ClassroomGroup | MasterType.User): number {\n if (!type) return share.recipients?.length ?? 0;\n \n return share.recipients?.filter(r => r.recipientTypeId === type).length ?? 0;\n },\n\n hasShareExpired(share: Share): boolean {\n if (share.expireDate) {\n const now = new Date();\n const expireDate = new Date(share.expireDate);\n\n if (DateHelper.isAfter(now, expireDate))\n return true;\n }\n\n return false;\n },\n\n calculateDaysToExpiry(share: Share): number | undefined {\n if (!share.expireDate) return;\n\n const remainingDays = DateHelper.diffBetween(new Date(share.expireDate), new Date(), 'day') || 1;\n const smartCount = remainingDays === 0 ? 1 : remainingDays; // Prevent zero count\n\n return smartCount;\n },\n\n getShareLocalExpiry(share: Share, format: string): string | null {\n if (!share.expireDate)\n return null;\n \n const localDate = DateHelper.convertUTCToLocal(share.expireDate);\n return DateHelper.format(localDate, format);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\",\"sm\":\"EgJ0v\",\"sharedAvatar\":\"cW0NT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } 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 './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { SharePrivacyResponse } from 'libs/shared/apps/share/interfaces/responses/SharePrivacyResponse';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.shareLinkInfo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GetIconAndTextOptions {\n linkExpireDate: string;\n isPasswordProtected: boolean;\n privacy: SharePrivacyResponse;\n status: ShareLinkStatus;\n entityTypeId: MasterType;\n hasStudentExp: boolean;\n entity: BaseObject;\n yearGroups: YearGroup[];\n}\n\n\nexport const ShareLinkHelper = {\n getPrivateIconAndText: (options: GetIconAndTextOptions) => {\n const { entityTypeId, privacy, hasStudentExp, entity, yearGroups } = options;\n \n if (entityTypeId === MasterType.Topic || entityTypeId === MasterType.Series)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n \n /**\n * This is mainly for typescript, privacy will be an array for playlists\n * but that is handled above\n */\n if (Array.isArray(privacy))\n return;\n \n switch (privacy.privacy) {\n case 'public':\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('publicDescription') };\n case 'protected':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.VisibleOn, text: getPhrase('clickViewOnly') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n case 'just_my_customer':\n if (privacy.overrideRestrictions)\n return { icon: cvSvgLibrary.Lock, text: getPhrase(hasStudentExp ? 'justMySchoolTeachers' : 'justMySchoolDescription') };\n return {\n icon: cvSvgLibrary.Lock,\n text: ShareLinkHelper.getRespectRatingText(entity, yearGroups, hasStudentExp)\n };\n /**\n * Because we plan to add restricted management later \n * for the time being we treat is the same as private \n */\n case 'restricted':\n case 'private':\n return { icon: cvSvgLibrary.Lock, text: getPhrase('privateDescription') };\n default:\n return {};\n }\n },\n\n getIconAndText: (options: GetIconAndTextOptions) => {\n const { linkExpireDate, isPasswordProtected, status } = options;\n if (!linkExpireDate && !isPasswordProtected)\n return ShareLinkHelper.getPrivateIconAndText(options);\n \n if (!linkExpireDate)\n return { icon: cvSvgLibrary.Lock, text: getPhrase('password') };\n \n const isToday = DateHelper.isToday(linkExpireDate);\n const dayDifference = DateHelper.diffBetween(linkExpireDate, new Date(), 'day');\n \n if (!isPasswordProtected) {\n let text = isToday\n ? getPhrase('expiryToday')\n : getPhrase('expiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('expired');\n \n return { icon: cvSvgLibrary.Timer, text };\n }\n \n let text = isToday\n ? getPhrase('passwordExpiryToday')\n : getPhrase('passwordExpiry', { days: dayDifference });\n \n if (status === ShareLinkStatus.Expired)\n text = getPhrase('passwordExpired');\n \n return { icon: cvSvgLibrary.Lock, text };\n },\n\n getRespectRatingText(video: BaseObject, yearGroups: YearGroup[], hasStudentExp: boolean) {\n if (!video || !yearGroups)\n return null;\n \n if (hasStudentExp)\n return getPhrase('justMySchoolTeachers');\n \n if (!VideoHelper.isVideoType(video))\n return getPhrase('collectionRating');\n \n const restriction = RestrictionHelper.getWeightedRestriction(video._restrictions?.value);\n \n /**\n * Restrictions without a year level are teacher restricitons, which means only admins can see it.\n */\n if (restriction && !restriction.yearGroup)\n return getPhrase('onlyAdmins');\n \n const rating = VideoHelper.getRating(video);\n \n let maxYearGroup: YearGroup;\n let minAllowedYearGroup: YearGroup;\n \n for (const yearGroup of yearGroups) {\n /**\n * If our year level is our new highest so far, save it\n */\n if (!maxYearGroup || yearGroup.value > maxYearGroup.value)\n maxYearGroup = yearGroup;\n \n /**\n * If the restriction is higher than this year level, skip it.\n */\n if (restriction && yearGroup.value <= restriction.yearGroup)\n continue;\n \n /**\n * If therating is higher than this year level's rating value, skip it.\n */\n if (rating && yearGroup.rating.value < rating.value)\n continue;\n \n /**\n * If our year level is the new lowest so far, save it\n */\n if (!minAllowedYearGroup || yearGroup.value < minAllowedYearGroup.value)\n minAllowedYearGroup = yearGroup;\n }\n \n /**\n * If no year levels are allowed, then it's staff only.\n */\n if (!minAllowedYearGroup)\n return getPhrase('onlyStaff');\n \n \n /**\n * If there's only one year level, and it's allowed, then we can just\n * say that everyone in your school can access it.\n */\n if (yearGroups.length === 1)\n return getPhrase('clickViewOnly');\n \n /**\n * We differentiate the copy if it's the highest year level or not. \n * Basically if we need to say \"X and above\" or not.\n */\n if (minAllowedYearGroup.value === maxYearGroup.value)\n return getPhrase('maxYearGroup', { yearGroup: maxYearGroup.name });\n \n return getPhrase('yearGroupRange', { yearGroup: minAllowedYearGroup.name });\n }\n};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst CHUNK_SIZE = 50;\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n itemsArr: T[];\n items: { [key: string]: T} | null;\n isFetching: boolean;\n hasCompleted: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, CHUNK_SIZE);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n itemsArr,\n items,\n isFetching: responses.isFetching,\n hasCompleted: responses.hasCompleted\n };\n}\n\n/**\n * When you need the useBatchFetch() behavior, but your list of objects to hydrate\n * will grow, such as on a scrolling page. useGrowingBatchFetch() will use local state\n * to determine what we've already built a request for and what items are new\n * as to not re-fetch items - Sha\n */\nexport function useGrowingBatchFetch<TResponse, TObjects = string>(\n objs: TObjects[],\n getRequest: (items: TObjects[]) => Flight.Request,\n _getKey?: (obj: TObjects) => string\n) {\n const getKey = _getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const { fetchItems, ...data } = useGrowingBatchFetchFunc<TResponse, TObjects>({ getRequest, _getKey });\n\n React.useEffect(() => {\n if (!objs?.length)\n return;\n\n fetchItems(objs);\n }, [objs?.map(getKey).join(',')]);\n\n return data;\n}\n\ninterface UseGrowingBatchFetchFuncOptions<TObjects> {\n getRequest: (items: TObjects[]) => Flight.Request;\n _getKey?: (obj: TObjects) => string;\n}\n\n/**\n * When you need the useGrowingBatchFetch() behaviour, but need to trigger the\n * fetch manually and update the objects - Nish \n */\nexport function useGrowingBatchFetchFunc<TResponse, TObjects = string>(\n options: UseGrowingBatchFetchFuncOptions<TObjects>\n) {\n const getKey = options._getKey ?? ((obj: any) => {\n if (typeof obj === 'object')\n return obj.id;\n\n return obj;\n });\n\n const fetchedItems = React.useRef<Set<string>>(new Set<string>());\n const [ requests, setRequests ] = React.useState<Flight.Request[]>([]);\n\n function fetchItems(objs: TObjects[]) {\n if (!objs?.length)\n return;\n\n const unfetchedItems: TObjects[] = [];\n \n objs.forEach(obj => {\n const key = getKey(obj);\n\n if (fetchedItems.current.has(key))\n return;\n\n unfetchedItems.push(obj);\n fetchedItems.current.add(key);\n });\n \n if (!unfetchedItems.length)\n return;\n \n setRequests(r => ([ ...r, ...ArrayHelper.chunk<TObjects>(unfetchedItems, CHUNK_SIZE).map(options.getRequest) ]));\n }\n\n const responses = Flight.useBasicFetchAll<TResponse[]>(requests);\n const itemsArr = ArrayHelper.flatten(responses.data);\n const items = responses.data.length\n ? itemsArr.reduce<Record<string, TResponse>>((acc, item) => ({ ...acc, [getKey(item)]: item }), {})\n : null;\n\n return {\n hasFirstRequestCompleted: !!responses.responses?.[0]?.hasCompleted,\n itemsArr,\n items,\n isFetching: responses.isFetching,\n fetchItems\n };\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","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, SharableRecipient, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n sharedToData: {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n recipients?: BaseObject[];\n };\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\ninterface GetColumnsOptions {\n index: number;\n dateHeading: string;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n}\n\nexport function getColumns(options: GetColumnsOptions): Column<SharedByMeTableData>[] {\n const {\n index,\n dateHeading,\n getObjectAppLink,\n getObjectActions,\n imageCdnUrl,\n showStatus,\n showViewCount,\n breakpoints,\n yearGroups\n } = options;\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n function getSubTextPhrase(): string {\n switch (value.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div className='clamp-2'>\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n appLink={'series' in value && value.series ? getObjectAppLink(value.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n />\n )}\n <AppLink\n appLink={getObjectAppLink(value)}\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n </div>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'sharedToData',\n Cell: ({ value }) => {\n const { share, sharedObject, recipients } = value;\n\n if (!recipients) {\n const iconAndText = share.type === ShareType.ShareLink && ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: share.isPasswordProtected,\n linkExpireDate: share.linkExpireDate,\n privacy: {\n privacy: share.privacy,\n overrideRestrictions: share.overrideRestrictions\n },\n status: share.status,\n yearGroups: yearGroups ?? []\n });\n\n return <SharedLinkAvatar text={iconAndText?.text} />;\n }\n \n if (!recipients?.length)\n return <AnonymousSharedToAvatar />;\n\n return (\n <SharedToAvatarList\n recipients={recipients}\n imageCdnUrl={imageCdnUrl}\n maxAvatars={isMobile ? 1 : 2}\n />\n );\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n\n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: Record<string, SharableEntity>,\n shareRecipients: Record<string, SharableRecipient>,\n groupByDate: boolean\n): TableDataGroupings {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects?.[s.objectId];\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients?.[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n sharedToData: {\n share: s,\n sharedObject,\n recipients\n },\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { SharableEntity, SharableRecipient } from '../../../views/share/ShareViewHelper';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: Record<string, SharableEntity>;\n shareRecipients: Record<string, SharableRecipient>;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n breakpoints?: Breakpoints;\n imageCdnUrl: string;\n yearGroups?: YearGroup[];\n}\n\nexport function SharedByMeTable(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns({\n index,\n dateHeading: heading,\n getObjectAppLink: props.getObjectAppLink,\n getObjectActions: props.getObjectActions,\n imageCdnUrl: props.imageCdnUrl,\n showStatus: props.showStatus,\n showViewCount: props.showViewCount,\n breakpoints: props.breakpoints,\n yearGroups: props.yearGroups\n })}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, ShareRecipient, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipients(sentShares: UnionShareObject[]): ShareRecipient[] {\n return ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? []));\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"imageColumn\":\"uIOaA\",\"nameColumn\":\"Nta2B\",\"sharedToColumn\":\"XTJBC\",\"dateSharedColumn\":\"HdARK\",\"actionsColumn\":\"DXyZw\",\"heading\":\"XZ6o7\",\"image\":\"MolfU\",\"name\":\"MM43m\",\"avatar\":\"EboYM\",\"date\":\"by_XM\",\"actions\":\"_S2M_\"};","import React from 'react';\n\nimport styles from './partial-shared-by-me-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded`}>\n <div className={`d-flex align-items-center justify-content-center p-2 ${styles.imageColumn}`}>\n <div className={`partial-loading-background rounded w-100 ${styles.image}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.nameColumn}`}>\n <div className={`partial-loading-background w-75 ${styles.name}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.sharedToColumn}`}>\n <div className={`partial-loading-background ${styles.avatar}`} />\n </div>\n <div className={`d-none d-md-flex align-items-center p-2 ${styles.dateSharedColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`d-flex align-items-center justify-content-end p-2 ${styles.actionsColumn}`}>\n <div className={`partial-loading-background rounded me-2 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\ninterface PartialHeaderProps {\n fullHeader?: boolean;\n}\n\nfunction PartialHeader(props: PartialHeaderProps): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.imageColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.nameColumn} p-2`}>\n \n </div>\n <div className={`${styles.sharedToColumn} p-2`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.dateSharedColumn} p-2 d-none d-md-flex`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.actionsColumn} p-2`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialSharedByMeTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <PartialHeader fullHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\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 { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getShareActionOptions(sharedObject: BaseObject, entityType: SharableEntityType): ActionOptions {\n return {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [sharedObject.id],\n params: { entityType }\n }\n };\n}\n\ninterface SeeUsageActionProps {\n label: string;\n url?: string;\n}\n\nfunction SeeUsageAction(props: SeeUsageActionProps): JSX.Element {\n return (\n <Tooltip title={props.label} spanHack>\n <a\n href={props.url}\n target='_blank'\n >\n <SvgContainer svgName={cvSvgLibrary.Analytics} />\n </a>\n </Tooltip>\n );\n}\n\nfunction getSharedObjectActions(\n sharedObject: BaseObject,\n isMobile: boolean,\n config: Config\n): ActionOptions[] {\n let entityType: SharableEntityType;\n let analyticsPhrase = 'viewUsage';\n\n if (VideoHelper.isVideo(sharedObject))\n entityType = 'video';\n\n if (VideoHelper.isInteractive(sharedObject)) {\n entityType = 'interactive';\n analyticsPhrase = 'viewResults';\n }\n\n if (VideoHelper.isClip(sharedObject))\n entityType = 'clip';\n\n if (sharedObject.typeId === MasterType.Series)\n entityType = 'series';\n\n if (sharedObject.typeId === MasterType.Playlist)\n entityType = 'playlist';\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n }\n\n const sharedObjectActions = [getShareActionOptions(sharedObject, entityType)];\n\n const objectUrl = AnalyticsRouteHelper.getObjectUrl(config?.analyticsWebUrl, sharedObject);\n if (objectUrl) {\n sharedObjectActions.push({\n label: !isMobile\n ? () => <SeeUsageAction label={getPhrase(analyticsPhrase)} url={objectUrl} />\n : getPhrase(analyticsPhrase),\n\n className: 'btn btn-link',\n button: !isMobile,\n href: AnalyticsRouteHelper.getObjectUrl(config?.analyticsWebUrl, sharedObject),\n openInNewTab: true\n });\n }\n\n return sharedObjectActions;\n}\n\nexport function useGetSharedObjectActions(breakpoints: Breakpoints): ((object: BaseObject) => ActionOptions[]) | null {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n return React.useCallback((object: BaseObject) =>\n getSharedObjectActions(object, isMobile, config.data), [isMobile]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useSharedByMeTable } from 'shared/hooks/useSharedByMeTable';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n useGetSharedObjectActions\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { hasShareFlowV2 } = useSettings(null);\n\n const breakpoints = useBreakpoints();\n\n const {\n sentShares,\n sharedObjects,\n shareRecipients,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl,\n yearGroups\n } = useSharedByMeTable();\n\n const hasMyShares = hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n\n React.useEffect(() => {\n if (hasMyShares)\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }, { replace: true });\n }, [hasMyShares]);\n\n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n return (\n <div className='px-3'>\n {!hasMyShares && <SharesHeader />}\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentShares}\n sharedObjects={sharedObjects.items}\n shareRecipients={shareRecipients.items}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n groupByDateShared\n breakpoints={breakpoints}\n yearGroups={yearGroups}\n imageCdnUrl={imageCdnUrl}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { UseBatchFetchResult, useGrowingBatchFetch } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\nexport function useSharedByMeTable(\n params?: GetSentItemsParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n /**\n * Fetch sent shares\n */\n const getRequest = (cursor?: string) => shouldFetch && ShareRequests.sentShare({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor,\n hasFirstPageCompleted\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n /**\n * Fetch shared objects\n */\n const sharedObjects = useGrowingBatchFetch(\n sentShares?.map(obj => obj.objectId),\n ShareRequests.sharedObjectsById\n );\n\n /**\n * Fetch recipients\n */\n const shareRecipients = useGrowingBatchFetch(\n ShareHelper.getRecipients(sentShares).map(obj => obj.id),\n objs => (ShareRequests.getRecipientsById(objs, currentUser.data.customerId))\n );\n \n\n /**\n * Fetch which interactives required marking\n */\n const interactivesPendingReview = useGrowingBatchFetch(\n interactiveInsights ? ObjectHelper.values(sharedObjects.items || []) : [],\n objs => InteractiveResultsRequests.pendingReviews({\n interactives: objs\n .filter(VideoHelper.isInteractive)\n .map(obj => ({ interactiveId: obj.interactiveId, metadataId: obj.id })),\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n }),\n obj => `${obj.id}:${obj.interactiveId}`\n );\n \n const isFetching = isFetchingSentShares\n || sharedObjects.isFetching\n || shareRecipients.isFetching\n || interactivesPendingReview.isFetching\n || yearGroups.isFetching;\n\n const showPartialLoading = !hasFirstPageCompleted || (sentShares?.length && !sharedObjects.hasFirstRequestCompleted);\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n yearGroups: yearGroups.data,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl\n };\n}","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ShareType } from 'libs/shared/apps/share-v2/enums/ShareType';\nimport { Share } from 'libs/shared/apps/share-v2/interfaces/Share';\nimport { ShareHelper } from 'libs/shared/apps/share-v2/utils/ShareHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Series } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { AssignAppLinkHelper } from 'apps/assign/utils/AssignAppLinkHelper';\nimport { SeriesAppLinkHelper } from 'apps/series/SeriesAppLinkHelper';\n\nconst namespace = 'shared.utils';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst INSIGHTS_WHITELIST = [\n MasterType.Video,\n MasterType.Clip,\n MasterType.Interactive\n];\n\nexport function getObjectAppLink(object: BaseObject): Core.AppLink {\n if (VideoHelper.isInteractive(object)) {\n return {\n application: AppChannels.INTERACTIVES,\n action: Actions.Interactives.VIEW_INTERACTIVE,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isClip(object)) {\n return {\n application: AppChannels.CLIPS,\n action: Actions.Clips.PLAY_CLIP,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (VideoHelper.isVideo(object)) {\n return {\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Playlist) {\n return {\n application: AppChannels.PLAYLISTS,\n action: Actions.Playlists.PLAYLIST,\n args: [ object.id, TextHelper.slugify(object.name) ]\n };\n }\n\n if (object.typeId === MasterType.Series) {\n return SeriesAppLinkHelper.getSeriesAppLink(object as Series);\n }\n}\n\nexport function getInsightsOverviewAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_OVERVIEW,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_OVERVIEW,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsHeatmapAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_HEATMAP,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_HEATMAP,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsQuestionsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n\n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_QUESTIONS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_QUESTIONS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getInsightsStudentsAppLink(share: Share, params?: HashObject): Core.AppLink {\n if (!share)\n return null;\n \n if (!INSIGHTS_WHITELIST.includes(share.objectTypeId))\n return getObjectAppLink({ id: share.objectId.toString(), typeId: share.objectTypeId });\n\n if (share.type === ShareType.Classroom) {\n const classroomId = ShareHelper.getClassroomIdFromShare(share);\n\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.INSIGHTS_STUDENTS,\n args: [ classroomId, share.shareId ],\n params\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOM_INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n }\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INSIGHTS_STUDENTS,\n args: [share.shareId],\n params\n };\n}\n\nexport function getShareOptionsAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.SHARE,\n args: [share.objectId],\n params: { entityType }\n };\n }\n\n return AssignAppLinkHelper.assignDetails({\n objectId: share.objectId.toString(),\n shareId: share.shareId,\n entityType,\n detailsTitle: getPhrase('shareOptions')\n });\n}\n\nexport function getDeleteShareAppLink(share: Share): Core.AppLink {\n if (!share) return;\n\n const entityType = getSharableEntityType(share);\n\n if (share.type === ShareType.Link) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_SHARE_LINK,\n args: [share.objectId],\n params: {\n entityType,\n previousAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n } as Core.AppLink\n }\n };\n }\n\n if (share.type === ShareType.LegacyDirect) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_LEGACY_SHARE,\n args: [share.shareId],\n params: {\n previousAppLink: {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n } as Core.AppLink\n }\n };\n }\n\n if (share.type === ShareType.Classroom) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_ASSIGNMENT,\n args: [share.shareId],\n params: {\n previousAppLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.CLASSROOM_HOME,\n args: [ShareHelper.getClassroomIdFromShare(share)]\n } as Core.AppLink\n }\n };\n }\n\n if (share.type === ShareType.Open) {\n return {\n application: AppChannels.SHARE,\n action: Actions.Share.DELETE_OPEN_CLASSROOM,\n args: [share.shareId],\n params: {\n previousAppLink: {\n application: AppChannels.CLASSROOMS,\n action: Actions.Classrooms.OPEN_CLASSROOMS,\n args: [ShareHelper.getClassroomIdFromShare(share)]\n } as Core.AppLink\n }\n };\n }\n}\n\nexport function getInsightsReportAppLink(share: Share): Core.AppLink {\n if (!share) return;\n if (share.objectTypeId !== MasterType.Interactive) return;\n\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_GENERATE_REPORT,\n args: [share.objectId]\n };\n}\n\nfunction getSharableEntityType(share: Share): SharableEntityType {\n if (share.objectTypeId === MasterType.Video)\n return 'video';\n\n if (share.objectTypeId === MasterType.Interactive)\n return 'interactive';\n \n if (share.objectTypeId === MasterType.Clip)\n return 'clip';\n\n if (share.objectTypeId === MasterType.Series)\n return 'series';\n\n if (share.objectTypeId === MasterType.Playlist)\n return 'playlist';\n}"],"names":["getAnalyticsRequestKey","baseKey","filter","extra","key","start","end","userIdKey","Array","isArray","userId","sort","join","groupIdKey","groupId","customerIdKey","customerId","getInteractiveResultFilters","currentUser","shareId","currentUserId","id","currentCustomerId","dateRange","undefined","userIds","classroomsAndGroups","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","success","error","always","url","data","type","HttpVerbs","normalize","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","ShareType","ShareHelper","getFlattenedRecipients","shares","map","s","recipients","getFlattenedUniqueScopes","r","scopeId","toString","x","getClassroomIdFromShare","share","firstRecipient","recipientId","recipientTypeId","getClassroomForShare","classrooms","classroomId","find","classroom","getRecipientsCount","length","hasShareExpired","expireDate","now","Date","calculateDaysToExpiry","remainingDays","getShareLocalExpiry","format","localDate","getPhrase","LanguageService","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","MasterType","classroomCount","groupCount","SharedToAvatar","props","user","item","typeId","classroomGroup","svgContainerClassName","Tooltip","title","name","surname","spanHack","spanHackClassName","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","extraClasses","className","IconCircle","svgName","svgSize","SvgContainer","S","variant","metadata","colour","AnonymousSharedToAvatar","avatarSize","size","SharedLinkAvatar","text","SharedToAvatarList","AvatarList","items","avatarItem","avatarContainerClassname","getHiddenTooltip","hasShareLink","shareLinkText","defaultProps","maxAvatars","ShareLinkHelper","getPrivateIconAndText","options","entityTypeId","privacy","hasStudentExp","entity","yearGroups","icon","overrideRestrictions","getRespectRatingText","getIconAndText","linkExpireDate","isPasswordProtected","status","isToday","dayDifference","days","video","restriction","_restrictions","value","yearGroup","maxYearGroup","minAllowedYearGroup","rating","itemsToDisplay","slice","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getAvatarStyles","idx","transform","zIndex","style","marginRight","index","roleToDisplay","count","smartCount","numberClassname","CHUNK_SIZE","useBatchFetch","itemIds","getRequest","requests","chunk","responses","itemsArr","reduce","acc","isFetching","hasCompleted","useGrowingBatchFetch","objs","_getKey","getKey","obj","useGrowingBatchFetchFunc","fetchItems","fetchedItems","Set","setRequests","hasFirstRequestCompleted","unfetchedItems","forEach","current","has","push","add","mapColourToBsVariant","groupColour","SharedByMeEmptyState","EmptyState","src","useInteractiveCopy","appLink","getStatusPhrase","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","getDateShared","dateCreated","datesShared","dateShared","date1","date2","DateHelper","getColumns","dateHeading","getObjectAppLink","getObjectActions","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","SharedObjectImage","object","showVideoMetadata","locationContext","minWidth","maxWidth","VideoHelper","canNavigate","subTextPhrase","getSubTextPhrase","TitleSubText","Text","namespace","phrase","VideoSubText","series","analyticsOptions","location","AppLink","analyticsData","ShareViewHelper","actionType","width","sharedObject","iconAndText","Actions","actions","statusColumn","viewCountColumn","splice","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","tableData","groupByDateShared","objectId","recipient","sharedToData","viewCount","Object","keys","heading","Table","theme","getDirectShares","getRecipients","d","PartialRow","PartialHeader","fullHeader","PartialSharedByMeTable","getShareActionOptions","entityType","label","application","action","args","params","SeeUsageAction","href","target","SharedByMeView","hasPermissions","usePermissions","hasShareFlowV2","useSettings","useBreakpoints","interactiveInsights","shouldFetch","fetch","UserRequests","config","ConfigRequests","isAuthenticated","CustomerRequests","cursor","ShareRequests","fetchNext","hasMore","isFetchingSentShares","nextCursor","hasFirstPageCompleted","interactivesPendingReview","ObjectHelper","I","interactives","metadataId","filters","showPartialLoading","useSharedByMeTable","hasMyShares","PermissionName","replace","useSetPageMetadata","getSharedObjectActions","analyticsPhrase","canConsume","sharedObjectActions","objectUrl","AnalyticsRouteHelper","analyticsWebUrl","button","openInNewTab","useGetSharedObjectActions","SharesHeader","InfiniteScrollFooter","ImageUrls","INSIGHTS_WHITELIST","getInsightsOverviewAppLink","includes","objectTypeId","getInsightsHeatmapAppLink","getInsightsQuestionsAppLink","getInsightsStudentsAppLink","getShareOptionsAppLink","getSharableEntityType","detailsTitle","getDeleteShareAppLink","previousAppLink"],"sourceRoot":""}
|