@clickview/lite 0.70.1-dev.0 → 0.70.1-dev.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/css/{2018-lite-4aa02cdb17.chunk.css → 581-lite-a1cdc302ab.chunk.css} +3 -1
  3. package/dist/css/{2614-lite-0503112afe.chunk.css → 6156-lite-1b21a4e130.chunk.css} +3 -2
  4. package/dist/languages/en.json +1 -1
  5. package/dist/scripts/2154-6da16cef10-lite.chunk.js +2 -0
  6. package/dist/scripts/2154-6da16cef10-lite.chunk.js.map +1 -0
  7. package/dist/scripts/{2952-4f5abfce6d-lite.chunk.js → 2952-c5ec8f135e-lite.chunk.js} +2 -2
  8. package/dist/scripts/2952-c5ec8f135e-lite.chunk.js.map +1 -0
  9. package/dist/scripts/4377-001a8ee263-lite.chunk.js +2 -0
  10. package/dist/scripts/4377-001a8ee263-lite.chunk.js.map +1 -0
  11. package/dist/scripts/549-2d591052e3-lite.chunk.js +2 -0
  12. package/dist/scripts/549-2d591052e3-lite.chunk.js.map +1 -0
  13. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js +2 -0
  14. package/dist/scripts/5721-2141ed4fb6-lite.chunk.js.map +1 -0
  15. package/dist/scripts/5797-f84ce545b9-lite.chunk.js +2 -0
  16. package/dist/scripts/5797-f84ce545b9-lite.chunk.js.map +1 -0
  17. package/dist/scripts/581-6e9a9afba8-lite.chunk.js +2 -0
  18. package/dist/scripts/{2018-693740d206-lite.chunk.js.map → 581-6e9a9afba8-lite.chunk.js.map} +1 -1
  19. package/dist/scripts/5829-5b395badf2-lite.chunk.js +3 -0
  20. package/dist/scripts/5829-5b395badf2-lite.chunk.js.map +1 -0
  21. package/dist/scripts/6046-5652117548-lite.chunk.js +2 -0
  22. package/dist/scripts/6046-5652117548-lite.chunk.js.map +1 -0
  23. package/dist/scripts/6156-d9a351e53f-lite.chunk.js +2 -0
  24. package/dist/scripts/{2614-bc2fef6ae0-lite.chunk.js.map → 6156-d9a351e53f-lite.chunk.js.map} +1 -1
  25. package/dist/scripts/6629-910e316a83-lite.chunk.js +3 -0
  26. package/dist/scripts/6629-910e316a83-lite.chunk.js.map +1 -0
  27. package/dist/scripts/7428-6dd787bc07-lite.chunk.js +2 -0
  28. package/dist/scripts/7428-6dd787bc07-lite.chunk.js.map +1 -0
  29. package/dist/scripts/7757-9b72774917-lite.chunk.js +2 -0
  30. package/dist/scripts/{7757-e4d91d7fac-lite.chunk.js.map → 7757-9b72774917-lite.chunk.js.map} +1 -1
  31. package/dist/scripts/8191-ff27deee6c-lite.chunk.js +2 -0
  32. package/dist/scripts/8191-ff27deee6c-lite.chunk.js.map +1 -0
  33. package/dist/scripts/{bundle-f9b9be2d02.min.js → bundle-4b10174000.min.js} +3 -3
  34. package/dist/scripts/{bundle-f9b9be2d02.min.js.map → bundle-4b10174000.min.js.map} +1 -1
  35. package/package.json +1 -1
  36. package/dist/scripts/1386-3be201d425-lite.chunk.js +0 -2
  37. package/dist/scripts/1386-3be201d425-lite.chunk.js.map +0 -1
  38. package/dist/scripts/2018-693740d206-lite.chunk.js +0 -2
  39. package/dist/scripts/2614-bc2fef6ae0-lite.chunk.js +0 -2
  40. package/dist/scripts/2952-4f5abfce6d-lite.chunk.js.map +0 -1
  41. package/dist/scripts/4377-f6e641f39a-lite.chunk.js +0 -2
  42. package/dist/scripts/4377-f6e641f39a-lite.chunk.js.map +0 -1
  43. package/dist/scripts/52-9d13c36f9b-lite.chunk.js +0 -2
  44. package/dist/scripts/52-9d13c36f9b-lite.chunk.js.map +0 -1
  45. package/dist/scripts/549-f06f2dab2b-lite.chunk.js +0 -2
  46. package/dist/scripts/549-f06f2dab2b-lite.chunk.js.map +0 -1
  47. package/dist/scripts/5721-bfd734f968-lite.chunk.js +0 -2
  48. package/dist/scripts/5721-bfd734f968-lite.chunk.js.map +0 -1
  49. package/dist/scripts/5797-04d8a61b80-lite.chunk.js +0 -2
  50. package/dist/scripts/5797-04d8a61b80-lite.chunk.js.map +0 -1
  51. package/dist/scripts/5829-82562ea6c2-lite.chunk.js +0 -3
  52. package/dist/scripts/5829-82562ea6c2-lite.chunk.js.map +0 -1
  53. package/dist/scripts/6046-339bc1b2e1-lite.chunk.js +0 -2
  54. package/dist/scripts/6046-339bc1b2e1-lite.chunk.js.map +0 -1
  55. package/dist/scripts/6629-55dc1fdb80-lite.chunk.js +0 -3
  56. package/dist/scripts/6629-55dc1fdb80-lite.chunk.js.map +0 -1
  57. package/dist/scripts/7757-e4d91d7fac-lite.chunk.js +0 -2
  58. package/dist/scripts/8191-d5f68d2463-lite.chunk.js +0 -2
  59. package/dist/scripts/8191-d5f68d2463-lite.chunk.js.map +0 -1
  60. /package/dist/css/{52-lite-e2d7497beb.chunk.css → 7428-lite-e2d7497beb.chunk.css} +0 -0
  61. /package/dist/scripts/{5829-82562ea6c2-lite.chunk.js.LICENSE.txt → 5829-5b395badf2-lite.chunk.js.LICENSE.txt} +0 -0
  62. /package/dist/scripts/{6629-55dc1fdb80-lite.chunk.js.LICENSE.txt → 6629-910e316a83-lite.chunk.js.LICENSE.txt} +0 -0
  63. /package/dist/scripts/{bundle-f9b9be2d02.min.js.LICENSE.txt → bundle-4b10174000.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2018-693740d206-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/ClassroomRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-item/audience-filter-item.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-search/AudienceFilterSearch.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/insights-filter-menu/insights-audience-filter-menu.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/insights-filter-menu/InsightsAudienceFilterMenu.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/AudienceFilterViewUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/audience-filter.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/AudienceFilterView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-list/type-filter/insights-type-filters.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-list/type-filter/InsightsTypeFilters.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/my-shares-demo-insights.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { User } from 'libs/shared/interfaces';\n\nexport function useChunkedUsersResponse(usersIds: string[]) {\n const userIdChunks = ArrayHelper.chunk<string>(usersIds ?? [], 25);\n const usersResponse = Flight.useBasicFetchAll<User[]>(userIdChunks.map(chunk => UserRequests.getById(chunk)));\n const users = ArrayHelper.flatten<User>(usersResponse.data);\n return { users, isLoading: !usersResponse.hasCompleted, usersResponse };\n}","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\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 { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: MySharesTableData = {\n share: {\n shareId: 'demo-insights',\n type: ShareType.Link\n } as ShareLink,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString(),\n viewCount: 23\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ClassroomCollection } from 'libs/shared/interfaces';\n\nexport const ClassroomRequests = {\n classroom(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: `classroom:${id}`\n };\n },\n\n classroomGroup(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=classroom`,\n key: `classroom:group:${id}:classroom`\n };\n },\n\n getClassroomsById(ids: string[]): Flight.Request {\n ids.sort();\n \n const query = `users[count()]{limit:0}&${ids.map(id => `id=${id}`).join('&')}`;\n\n return {\n url: `{gateway}/v1/objects?query=${query}`,\n key: `classrooms:${ids.join(',')}`\n };\n },\n\n getClassroomGroupsById(ids: string[]): Flight.Request {\n ids.sort();\n\n const query = `users[count()]{limit:0}&${ids.map(id => `id=${id}`).join('&')}`;\n\n return {\n url: `{gateway}/v1/objects?query=${query}`,\n key: `classroom:groups:${ids.join(',')}`\n };\n },\n\n userClassrooms(\n cursor?: string,\n success?: (classrooms: ClassroomCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/classrooms`, { cursor }),\n key: `user:classrooms${cursor ? `:${cursor}` : ''}`,\n success,\n error,\n always\n };\n },\n\n getPinnedClassrooms(userId: string, customerId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${userId}/members`, {\n query: `favouriteClassrooms[favouritedBy{id:${userId}},_integrations,enrolments[user]{role:'owner'}]{status:${ObjectStatus.Active},customer.id:${customerId},limit:100,orderby:name}`\n }),\n key: 'pinned:classrooms',\n normalize: false\n };\n },\n\n \n getPublished(userId: string, cursor: string = ''): Flight.Request {\n const params: HashObject = {\n query: `{orderby:name,status:${ObjectStatus.Active}}favouritedBy{id:${userId}},_integrations,enrolments[user]{role:'owner'}`\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/classrooms', params),\n key: `published:classrooms${cursor ? `:${cursor}` : ''}`\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"oCnQi\",\"cta\":\"w39NR\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { 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 './audience-filter-item.scss';\n\nconst namespace = 'shared.audienceFilterItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype AudienceObject = User | Classroom | ClassroomGroup;\n\nconst CLASSROOM_DISPLAY_LIMIT = 2;\n\nfunction getClassroomPhrase(user: User): string {\n const classrooms = user.classrooms?.data;\n if (!classrooms?.length)\n return;\n\n if (classrooms.length <= CLASSROOM_DISPLAY_LIMIT)\n return user.classrooms.data.map(c => c.name).join(' • ');\n\n return getPhrase('severalClassrooms', { classroom: classrooms[0].name, smartCount: classrooms.length - 1 });\n}\n\nfunction getSubHeading(object: AudienceObject): string {\n if (object.typeId === MasterType.User && (object as User).classrooms?.data?.length)\n return getClassroomPhrase(object as User);\n\n return '';\n}\n\ninterface AudienceFilterItemProps {\n object: AudienceObject;\n selected: boolean;\n onToggleSelected: (selected: boolean) => void;\n imageCdnUrl: string;\n hideCheckbox?: boolean;\n isPinned?: boolean;\n}\n\nexport function AudienceFilterItem(props: AudienceFilterItemProps): JSX.Element {\n const user = props.object.typeId === MasterType.User && (props.object as User);\n const classroom = props.object.typeId === MasterType.Classroom && (props.object as Classroom);\n const classroomGroup = props.object.typeId === MasterType.ClassroomGroup && (props.object as ClassroomGroup);\n\n let name = props.object.name;\n\n if (user)\n name += ` ${user.surname}`;\n\n const subHeading = getSubHeading(props.object);\n const svgContainerClassName = 'd-flex align-items-center justify-content-center text-white rounded-circle h-100 w-100';\n const onSelect = () => props.onToggleSelected(!props.selected);\n\n return (\n <button\n className='w-100'\n onClick={onSelect}\n >\n <div className={`d-flex align-items-center py-1 ${props.hideCheckbox ? 'bg-light-hover mx-n3 px-3' : ''}`}>\n {!props.hideCheckbox && (\n <Checkbox\n id={props.object.id}\n checked={props.selected}\n onChange={onSelect}\n />\n )}\n <div className={`${styles.avatarContainer} cursor-pointer me-2`}>\n {!!user &&\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.object.name, user.surname)}\n />\n }\n {!!classroom &&\n <div className={svgContainerClassName}>\n {props.isPinned\n ? <IconCircle svgName={cvSvgLibrary.StarOutline} variant='yellow' svgSize={SvgContainerSize.Large} />\n : <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' svgSize={SvgContainerSize.Large} />\n }\n </div>\n }\n {!!classroomGroup &&\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n }\n </div>\n <div>\n <h4 className='text-start font-size-normal fw-normal m-0'>{name}</h4>\n {!!subHeading &&\n <p className='text-secondary m-0'>{subHeading}</p>\n }\n </div>\n {\n props.hideCheckbox && (\n <div className={`${styles.cta} ms-auto text-secondary`}>\n {props.selected && <SvgContainer svgName={cvSvgLibrary.Close} />}\n {!props.selected && <SvgContainer svgName={cvSvgLibrary.Plus} />}\n </div>\n )\n }\n </div >\n </button >\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AudienceSelection } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterViewUtils';\nimport { AudienceFilterItem } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem';\nimport { FilterConstants } from 'libs/shared/apps/search/constants/FilterConstants';\nimport { SearchBar } from 'libs/shared/components/search-bar/SearchBar';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { BaseObject, CurrentUser, ShareSearchResponse } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nconst namespace = 'shared.audienceFilterSearch';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EmptySearchResultsProps {\n query: string;\n hasClassroomsFeature: boolean;\n}\n\nfunction EmptySearchResults(props: EmptySearchResultsProps): JSX.Element {\n return (\n <div className='pt-2 text-center'>\n <p className='m-0'><strong>{getPhrase('noResults', { query: props.query })}</strong></p>\n {!!props.hasClassroomsFeature &&\n <>\n <span>{getPhrase('noResultsSuggestion')}&nbsp;</span>\n <a href={ArticleHelper.getLiteArticle(LiteSupportArticle.Classrooms)} target='_blank' className='text-info'>\n {getPhrase('learnMore')}\n </a>\n </>\n }\n </div>\n );\n}\n\ninterface AudienceFilterSearchProps {\n onSelect: (...selection: AudienceSelection[]) => void;\n isSelected: (object: BaseObject) => boolean;\n isPinned?: (object: BaseObject) => boolean;\n gatewayApiUrl: string;\n userToken: HashObject;\n currentUser: CurrentUser;\n imageCdnUrl: string;\n hasClassroomsFeature?: boolean;\n limitedFeatureSet?: boolean;\n hideCheckbox?: boolean;\n setQuery?: (query: string) => void;\n}\n\nexport function AudienceFilterSearch(props: AudienceFilterSearchProps): JSX.Element {\n function getRemoteUrl(query: string): string {\n const baseUrl = UrlHelper.safeUrlConcat(props.gatewayApiUrl, 'v1/search/users');\n\n const indices = [ 'user', 'classroom', 'classroom_group' ];\n\n return UrlHelper.urlBuilder(baseUrl, {\n query,\n index: indices,\n [`${FilterConstants.FILTER_PARAM_PREFIX}customerId`]: props.currentUser.customerId,\n limit: 5\n });\n }\n\n return (\n <SearchBar\n onQueryChange={props.setQuery}\n getRemoteUrl={getRemoteUrl}\n requestHeaders={{\n authorization: `Bearer ${props.userToken.value}`\n }}\n formatRemoteSuggestions={(suggestions: ShareSearchResponse) => suggestions?.results}\n placeholder={getPhrase((props.limitedFeatureSet || !props.hasClassroomsFeature) ? 'placeholderLimited' : 'placeholder')}\n suggestionsHeading={getPhrase('searchResults')}\n alwaysRenderSuggestions\n resetSuggestionsOnNoActivation\n onSuggestionSelected={() => { }} // Do nothing as AudienceFilterItem handles selection itself\n shouldUpdateQueryOnSelection={false}\n getSuggestionComponent={suggestion => {\n const isSelected = props.isSelected(suggestion);\n\n return (\n <AudienceFilterItem\n object={suggestion}\n selected={isSelected}\n onToggleSelected={() => props.onSelect({ object: suggestion, selected: !isSelected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox={props.hideCheckbox}\n isPinned={props.isPinned?.(suggestion)}\n />\n );\n }}\n getEmptyStateComponent={query =>\n <EmptySearchResults query={query} hasClassroomsFeature={props.hasClassroomsFeature} />\n }\n theme={{\n container: '',\n suggestionsContainerOpen: 'pt-2',\n suggestion: '',\n suggestionHighlighted: '',\n sectionContainer: ''\n }}\n loadingComponentClassName='pt-2'\n searchIconPlacement='left'\n autoFocusInput\n allowableSuggestionFetchRequestedReasons={['input-changed']}\n debounceTime={200}\n showClearInputIcon\n resetSuggestionsOnClear\n onClickClearInput={() => props.setQuery('')}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"H4ti6\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AudienceSelection } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterViewUtils';\nimport { AudienceFilterItem } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem';\nimport { AudienceFilterSearch } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-search/AudienceFilterSearch';\nimport { BaseObject, CurrentUser } from 'libs/shared/interfaces';\n\nimport styles from './insights-audience-filter-menu.scss';\n\nconst namespace = 'shared.insightsAudienceFilterMenu';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_HEIGHT = 300;\n\nfunction filterAudienceById(audience?: BaseObject[], ids?: string[]): BaseObject[] {\n if (!audience)\n return [];\n\n if (!ids)\n return audience;\n\n return audience.filter(a => ids.some(id => id.toString() === a.id.toString()));\n}\n\nfunction useSearchSelections(\n selectedIds?: string[]\n): [BaseObject[], React.Dispatch<React.SetStateAction<BaseObject[]>>] {\n const [ searchSelections, setSearchSelections ] = React.useState<BaseObject[]>([]);\n\n /**\n * If a search selection is deselected externally, we want to remove it from state.\n */\n React.useEffect(() => {\n setSearchSelections(filterAudienceById(searchSelections, selectedIds));\n }, [selectedIds]);\n\n return [ searchSelections, setSearchSelections ];\n}\n\ninterface BaseAudienceListProps {\n selections: BaseObject[];\n pinned?: BaseObject[];\n onSelect: (...selection: AudienceSelection[]) => void;\n isPinned?: (object: BaseObject) => boolean;\n deselectAll?: () => void;\n imageCdnUrl: string;\n}\n\nfunction SelectedAudienceList(props: BaseAudienceListProps): JSX.Element {\n return (\n <>\n <p className='mb-2 pt-2 px-3'><strong>{getPhrase('filteredBy')}</strong></p>\n\n <ul className='list-unstyled px-3 mb-2'>\n {props.selections.map((s, idx) => (\n <li key={idx}>\n <AudienceFilterItem\n object={s}\n selected\n onToggleSelected={() => props.onSelect({ object: s, selected: false })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n isPinned={props.isPinned(s)}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n\ninterface SuggestedAudienceListProps extends BaseAudienceListProps {\n isSelected: (object: BaseObject) => boolean;\n}\n\nfunction SuggestedAudienceList(props: SuggestedAudienceListProps): JSX.Element {\n return (\n <>\n <p className='mt-2 mb-2'><strong>{getPhrase('suggested')}</strong></p>\n <ul className='list-unstyled m-0'>\n {props.pinned?.map((s, idx) => (\n <li key={`pinned-${idx}`}>\n <AudienceFilterItem\n object={s}\n selected={props.isSelected(s)}\n onToggleSelected={(selected: boolean) => props.onSelect({ object: s, selected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n isPinned\n />\n </li>\n ))}\n {props.selections.map((s, idx) => {\n return (\n <li key={`suggestion-${idx}`}>\n <AudienceFilterItem\n object={s}\n selected={props.isSelected(s)}\n onToggleSelected={(selected: boolean) => props.onSelect({ object: s, selected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n\ninterface InsightsAudienceFilterMenuProps {\n onSelect: (...selection: AudienceSelection[]) => void;\n gatewayApiUrl: string;\n userToken: HashObject;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n audienceObjects?: BaseObject[];\n selectedIds?: string[];\n suggestedIds?: string[];\n limitedFeatureSet?: boolean;\n pinnedIds?: string[];\n hasClassroomsFeature?: boolean;\n onClickApply?: () => void;\n}\n\nexport function InsightsAudienceFilterMenu(props: InsightsAudienceFilterMenuProps): JSX.Element {\n const [ searchSelections, setSearchSelections ] = useSearchSelections(props.selectedIds);\n const audienceObjects = ArrayHelper.uniq([ ...(props.audienceObjects ?? []), ...searchSelections ], 'id');\n\n const selections = filterAudienceById(audienceObjects, props.selectedIds);\n const suggestions = filterAudienceById(audienceObjects, props.suggestedIds);\n const pinnedSuggestions = props.pinnedIds ? filterAudienceById(audienceObjects, props.pinnedIds) : [];\n\n const [ query, setQuery ] = React.useState('');\n\n function isSelected(object: BaseObject): boolean {\n if (!props.selectedIds?.length)\n return false;\n\n return props.selectedIds.some(id => id.toString() === object.id.toString());\n }\n\n function isPinned(object: BaseObject): boolean {\n if (!props.pinnedIds?.length)\n return false;\n\n return props.pinnedIds.some(id => id.toString() === object.id.toString());\n }\n\n function deselectAll(): void {\n props.onSelect();\n }\n\n function onSelectSearchResult(...selection: AudienceSelection[]): void {\n const objectsToAdd = selection.filter(s => s.selected).map(s => s.object);\n const objectIdsToRemove = selection.filter(s => !s.selected).map(s => s.object.id);\n\n setSearchSelections(s => [\n ...s.filter(s => !objectIdsToRemove.includes(s.id)),\n ...objectsToAdd\n ]);\n\n props.onSelect(...selection);\n }\n\n const filteredSuggestions = suggestions.filter(suggestions => !isSelected(suggestions));\n const filteredPinned = pinnedSuggestions.filter(suggestions => !isSelected(suggestions));\n\n return (\n <div className={styles.menu}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <div className='p-3'>\n <AudienceFilterSearch\n onSelect={onSelectSearchResult}\n isSelected={isSelected}\n isPinned={isPinned}\n gatewayApiUrl={props.gatewayApiUrl}\n userToken={props.userToken}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n limitedFeatureSet={props.limitedFeatureSet}\n hasClassroomsFeature={props.hasClassroomsFeature}\n setQuery={setQuery}\n hideCheckbox\n />\n {query.length < 3 && (!!filteredSuggestions.length || !!filteredPinned.length) &&\n <SuggestedAudienceList\n selections={filteredSuggestions}\n pinned={filteredPinned}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n isSelected={isSelected}\n />\n }\n </div>\n </Scrollbars>\n\n {!!selections.length &&\n <div className={`${suggestions.length ? 'border-top' : ''} pb-2`}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <SelectedAudienceList\n selections={selections}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n deselectAll={deselectAll}\n isPinned={isPinned}\n />\n </Scrollbars>\n\n <div className='d-flex justify-content-between pb-1'>\n <button\n className='btn btn-link p-0 text-secondary px-3'\n onClick={deselectAll}\n >\n {getPhrase('reset')}\n </button>\n\n <button\n className='btn btn-link p-0 text-info px-3'\n onClick={props.onClickApply}\n >\n {getPhrase('apply')}\n </button>\n </div>\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClassroomRequests } from 'libs/shared/apps/analytics/flight-requests/ClassroomRequests';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { AudienceFilterSuggestions } from 'libs/shared/apps/analytics/interfaces/AudienceFilterSuggestions';\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult } from 'libs/shared/hooks/UseSelectAllPages';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BaseObject, Classroom, ClassroomGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.audienceFilter';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useFetchAudienceObjects(\n audienceQueryParams: AudienceQueryParams,\n suggestedClassrooms: Classroom[]\n): BaseObject[] {\n const { users: selectedUsers } = useChunkedUsersResponse(\n audienceQueryParams.users\n );\n const { hasClassrooms } = useSettings(null);\n\n const selectedClassrooms = Flight.useBasicFetch<Classroom[]>(\n audienceQueryParams.classrooms?.length &&\n hasClassrooms &&\n ClassroomRequests.getClassroomsById(audienceQueryParams.classrooms)\n );\n\n const selectedClassroomGroups = Flight.useBasicFetch<ClassroomGroup[]>(\n audienceQueryParams.classroomGroups?.length &&\n hasClassrooms &&\n ClassroomRequests.getClassroomGroupsById(audienceQueryParams.classroomGroups)\n );\n\n if (!hasClassrooms)\n return selectedUsers || [];\n\n const users = selectedUsers || [];\n const classrooms = ArrayHelper.uniq([ ...(selectedClassrooms.data || []), ...suggestedClassrooms || [] ], 'id');\n const classroomGroups = selectedClassroomGroups.data ?? [];\n\n return [ ...users, ...classrooms, ...classroomGroups ];\n}\n\nexport type AudienceSelection = { object: BaseObject, selected: boolean };\n\nfunction getUpdatedAudienceQueryParams(\n selections: AudienceSelection[],\n audienceQueryParams: AudienceQueryParams\n): AudienceQueryParams {\n if (!selections.length)\n return { users: null, classrooms: null, classroomGroups: null };\n\n let params: AudienceQueryParams = { ...audienceQueryParams };\n\n selections.forEach(s => {\n let paramKey: keyof AudienceQueryParams;\n\n switch (s.object.typeId) {\n case MasterType.User:\n paramKey = 'users';\n break;\n \n case MasterType.Classroom:\n paramKey = 'classrooms';\n break;\n \n case MasterType.ClassroomGroup:\n paramKey = 'classroomGroups';\n break;\n }\n\n const objectId = s.object.id.toString();\n let currentParams = params[paramKey] ?? [];\n\n if (s.selected)\n currentParams.push(objectId);\n else\n currentParams = currentParams.filter(id => id.toString() !== objectId);\n\n params = {\n ...params,\n [paramKey]: ArrayHelper.uniq(currentParams)\n };\n });\n\n return params;\n}\n\nexport function getIds(obj: AudienceQueryParams | AudienceFilterSuggestions): string[] {\n const ids: string [] = [];\n\n Object.keys(obj).forEach((key: keyof (AudienceQueryParams | AudienceFilterSuggestions)) => {\n if (obj[key])\n ids.push(...obj[key]);\n });\n\n return ids;\n}\n\nexport function useAudienceSelections(queryParams: AudienceQueryParams):\n[AudienceQueryParams, (...selections: AudienceSelection[]) => void] {\n const [ selections, setSelections ] = React.useState<AudienceQueryParams>(ObjectHelper.deepClone(queryParams));\n\n function onSelectAudienceObject(...selection: AudienceSelection[]): void {\n setSelections(getUpdatedAudienceQueryParams(selection, selections));\n }\n\n return [ selections, onSelectAudienceObject ];\n}\n\n/**\n * \n * @returns The label to be used in the audience filter toggle.\n * \n * If nothing has been selected, \"Everyone\" will be returned.\n * \n * If a single classroom or a single classroom group has been selected,\n * the name of the classroom/group will be returned.\n * \n * Otherwise, the count of users in the applied filter will be returned,\n * as obtained from the filter count view model.\n */\nexport function useGetAudienceFilterLabel(queryParams: AudienceQueryParams): string | undefined {\n const classroomIds = ArrayHelper.uniq(queryParams.classrooms as string[] ?? []);\n const groupIds = ArrayHelper.uniq(queryParams.classroomGroups as string[] ?? []);\n const userIds = ArrayHelper.uniq(queryParams.users as string[] ?? []);\n\n const onlyClassroomsSelected = !!classroomIds.length && groupIds.length === 0 && userIds.length === 0;\n const onlyGroupsSelected = !!groupIds.length && classroomIds.length === 0 && userIds.length === 0;\n const onlyUsersSelected = !!userIds.length && classroomIds.length === 0 && groupIds.length === 0;\n const noSelections = !classroomIds.length && !groupIds.length && !userIds.length;\n\n const singleClassroomSelected = onlyClassroomsSelected && classroomIds.length === 1;\n const singleGroupSelected = onlyGroupsSelected && groupIds.length === 1;\n\n const classroom = Flight.useBasicFetch<Classroom>(singleClassroomSelected\n && ClassroomRequests.classroom(classroomIds[0]));\n\n const group = Flight.useBasicFetch<Classroom>(singleGroupSelected && ClassroomRequests.classroomGroup(groupIds[0]));\n\n if (noSelections)\n return getPhrase('noFilter');\n\n if (singleClassroomSelected) {\n if (!classroom.data)\n return;\n\n if (classroom.data.typeId === MasterType.Classroom)\n return classroom.data.name;\n }\n\n if (singleGroupSelected) {\n if (!group.data)\n return;\n\n if (group.data.typeId === MasterType.ClassroomGroup)\n return group.data.name;\n }\n\n if (onlyClassroomsSelected)\n return getPhrase('classrooms', { smartCount: classroomIds.length });\n\n if (onlyGroupsSelected)\n return getPhrase('groups', { smartCount: groupIds.length });\n\n if (onlyUsersSelected)\n return getPhrase('users', { smartCount: userIds.length });\n\n const mixedSelections = [];\n\n if (classroomIds.length)\n mixedSelections.push(getPhrase('classrooms', { smartCount: classroomIds.length }));\n\n if (groupIds.length)\n mixedSelections.push(getPhrase('groups', { smartCount: groupIds.length }));\n\n if (userIds.length)\n mixedSelections.push(getPhrase('users', { smartCount: userIds.length }));\n\n const lastSelection = mixedSelections.pop();\n\n return `${mixedSelections.join(', ')} ${getPhrase('and')} ${lastSelection}`;\n}\n\nexport function useFetchClassrooms(userId: string): SelectAllPagesResult<Classroom> {\n const dispatch = useDispatch();\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.getPublished(userId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n Flight.getFetch(dispatch)(getRequest(cursor));\n }\n\n return useFetchAll<Classroom>(getRequest, fetchNext);\n}","// extracted by mini-css-extract-plugin\nexport default {\"toggle\":\"A0vBV\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, FilterDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassroomRequests } from 'libs/shared/apps/analytics/flight-requests/ClassroomRequests';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { InsightsAudienceFilterMenu } from 'libs/shared/apps/analytics/views/audience-filter/components/insights-filter-menu/InsightsAudienceFilterMenu';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { ClassroomCollection, Config, CurrentUser } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport {\n getIds,\n useAudienceSelections,\n useFetchAudienceObjects,\n useFetchClassrooms,\n useGetAudienceFilterLabel\n} from './AudienceFilterViewUtils';\n\nimport styles from './audience-filter.scss';\n\ninterface AudienceFilterViewProps {\n className?: string;\n hasClassroomsFeature: boolean;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function AudienceFilterView(props: AudienceFilterViewProps): JSX.Element {\n const queryParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n\n const userToken = Flight.useBasicFetch<HashObject>(UserRequests.token());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const pinnedClassrooms = Flight.useBasicFetch<ClassroomCollection>(\n ClassroomRequests.getPinnedClassrooms(currentUser.data?.id, currentUser.data?.customerId)\n );\n const classrooms = useFetchClassrooms(currentUser.data?.id);\n\n const audience = useFetchAudienceObjects(queryParams, classrooms.items);\n const filterLabel = useGetAudienceFilterLabel(queryParams);\n\n const [ selections, setSelections ] = useAudienceSelections(queryParams);\n const pinnedClassroomIds = pinnedClassrooms.data?.data.map(classroom => classroom.id.toString());\n const suggestions = { classrooms: getSuggestedClassroomIds() };\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onToggle(show: boolean): void {\n setShowDropdown(show);\n\n if (show)\n return;\n\n applyFilter();\n }\n\n function applyFilter() {\n AppRouteHelper.updateParams(ObjectHelper.deepClone(selections), { merge: true });\n\n AnalyticsHelper.logUserAction({\n users: selections?.users?.length ?? 0,\n classrooms: selections?.classrooms?.length ?? 0,\n classroomGroups: selections?.classroomGroups?.length ?? 0\n }, {\n actionType: UserAction.Filter,\n descriptor: FilterDescriptor.Audience,\n location: LocationContext.AudienceFilter,\n entity: EntityType.Filter\n });\n }\n\n function hideAudienceFilter(): boolean {\n return !classrooms.items?.length;\n }\n\n function getSuggestedClassroomIds() {\n return classrooms.items?.length\n ? classrooms.items\n .filter(classroom => !pinnedClassroomIds?.includes(classroom.id.toString()))\n .map(classroom => classroom.id)\n : [];\n }\n\n const dataLoaded = !!config.data && classrooms.hasCompleted && pinnedClassrooms.hasCompleted;\n\n if (hideAudienceFilter())\n return <></>;\n\n const hasSelections = Object.values(queryParams).some(value =>\n Array.isArray(value) && value.length > 0);\n\n return (\n <Dropdown className={props.className ?? ''} onToggle={onToggle} show={showDropdown}>\n <Dropdown.Toggle\n id='audience-filter-toggle'\n variant='outline-dark'\n className={`no-caret ${styles.toggle} ${hasSelections ? 'bg-dark text-white' : ''}`}\n >\n {filterLabel}\n </Dropdown.Toggle>\n <Dropdown.Menu className='py-0' align='end'>\n {dataLoaded &&\n <InsightsAudienceFilterMenu\n gatewayApiUrl={config.data.gatewayApiUrl}\n userToken={userToken.data}\n audienceObjects={audience}\n selectedIds={getIds(selections)}\n suggestedIds={getIds(suggestions)}\n pinnedIds={pinnedClassroomIds}\n onSelect={setSelections}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n hasClassroomsFeature={props.hasClassroomsFeature}\n onClickApply={onClickApply}\n />\n }\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"noCaret\":\"_F6P_\",\"filterContainer\":\"ZBgdA\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insights-type-filters.scss';\n\nconst namespace = 'insights.insightsTypeFilters';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsTypeFilterProps {\n appLink: Core.AppLink;\n typeIdParams: MasterType[];\n breakpoints: Breakpoints;\n}\n\nexport function InsightsTypeFilters(props: InsightsTypeFilterProps) {\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n const moreFilterOptions = [\n ...(isMobile ? [{\n label: getPhrase('interactives'),\n filter: MasterType.Interactive\n }, {\n label: getPhrase('videos'),\n filter: MasterType.Video\n }, {\n label: getPhrase('clips'),\n filter: MasterType.Clip\n }] : []),\n {\n label: getPhrase('playlists'),\n filter: MasterType.Playlist\n }, {\n label: getPhrase('series'),\n filter: MasterType.Series\n }];\n\n const moreFiltersSelected = getMoreFiltersSelected();\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ moreFilters, setMoreFilters ] = React.useState(moreFiltersSelected);\n\n function applyFilter() {\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: ArrayHelper.uniq([\n ...props.typeIdParams,\n ...moreFilters\n ])\n }\n });\n }\n\n function resetFilters() {\n setMoreFilters([]);\n\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: []\n }\n });\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n applyFilter();\n }\n\n function onClickApply() {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onClickReset() {\n resetFilters();\n setShowDropdown(false);\n }\n\n function onSelectFilter(filter: MasterType) {\n setMoreFilters(ArrayHelper.addOrRemoveImmutable(moreFilters, filter));\n }\n\n function isFilterSelected(filter: MasterType) {\n if (isMobile) {\n return !!moreFilters.find(selectedFilter => selectedFilter === filter) ||\n !!props.typeIdParams.find(selectedFilter => selectedFilter === filter);\n }\n\n return !!moreFilters.find(selectedFilter => selectedFilter === filter);\n }\n\n function getMoreFiltersSelected() {\n return props.typeIdParams.filter(typeId =>\n moreFilterOptions.some(option => typeId === option.filter));\n }\n\n return (\n <div className='d-flex align-items-center fw-semibold'>\n <p className='d-none d-md-inline h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className={`${styles.filterContainer} d-flex flex-grow-1 flex-md-grow-0 border-start ps-0 ps-md-3 ms-0 ms-md-3 gap-2`}>\n <div className='d-none d-md-flex gap-2'>\n <InsightTypeFilterButton\n typeId={MasterType.Interactive}\n typeFilters={props.typeIdParams}\n appLink={props.appLink}\n />\n <InsightTypeFilterButton typeId={MasterType.Video} typeFilters={props.typeIdParams} appLink={props.appLink} />\n <InsightTypeFilterButton typeId={MasterType.Clip} typeFilters={props.typeIdParams} appLink={props.appLink} />\n </div>\n <Dropdown onToggle={onToggleDropdown} show={showDropdown} className='col'>\n <Dropdown.Toggle\n className={`${styles.noCaret} col-12 col-md-auto`}\n variant={moreFiltersSelected.length ? 'dark' : 'outline-dark'}\n >\n <div className='d-flex align-items-center justify-content-center gap-2 fw-semibold mb-0'>\n <SvgContainer svgName={cvSvgLibrary.Filter} className='svg-container d-inline-block d-md-none' />\n <Text namespace={namespace} phrase={isMobile ? 'filters' : 'moreFilters'} />\n {moreFiltersSelected.length ? ` - ${moreFiltersSelected.length}` : ''}\n </div>\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className='mx-1 px-2 py-1 mb-0'>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='types' /></h2>\n <ul className='list-unstyled me-5'>\n {moreFilterOptions.map(option => (\n <li key={`${option.label}-filter`} className='my-1'>\n <Checkbox\n id={`${option.label}-filter`}\n label={option.label}\n onChange={() => onSelectFilter(option.filter)}\n checked={isFilterSelected(option.filter)}\n />\n </li>\n ))}\n </ul>\n <div className='d-flex justify-content-between'>\n <button onClick={onClickReset} className='btn btn-link text-secondary p-0 mb-0'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n <button onClick={onClickApply} className='btn btn-link text-info p-0 mb-0'>\n <Text namespace={namespace} phrase='apply' />\n </button>\n </div>\n </div>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n {!!props.typeIdParams.length &&\n <button onClick={resetFilters} className='d-none d-md-block btn btn-link ms-1'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n }\n </div>\n );\n}\n\ninterface InsightTypeFilterButtonProps {\n typeId: MasterType;\n typeFilters: MasterType[];\n appLink: Core.AppLink;\n}\n\nfunction InsightTypeFilterButton(props: InsightTypeFilterButtonProps) {\n const selected = props.typeFilters.includes(props.typeId);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n const newType: MasterType[] = ArrayHelper.addOrRemoveImmutable(props.typeFilters, props.typeId);\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n typeId: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.typeId === MasterType.Video) return 'videos';\n if (props.typeId === MasterType.Clip) return 'clips';\n if (props.typeId === MasterType.Interactive) return 'interactives';\n }\n\n return (\n <AppLink\n className={`btn ${selected ? 'btn-dark' : 'btn-outline-dark'} fw-semibold`}\n appLink={newAppLink}\n ariaLabel={`${getPhrase('ariaFilterBy')}: ${getPhrase(getTypePhrase())}`}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"background\":\"HAuP3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_ACTION, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nimport styles from './my-shares-demo-insights.scss';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n liteUrl: string;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n breakpoints: Breakpoints;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isStaging = props.liteUrl.includes('staging');\n\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: isStaging ? DEMO_INTERACTIVE_STAGING_ID : DEMO_INTERACTIVE_PROD_ID\n };\n }\n\n function getObjectActions() {\n return [\n {\n ...DEMO_INSIGHTS_ACTION,\n button: !isMobile\n }\n ];\n }\n\n return (\n <div>\n <MySharesTableHeading heading={getPhrase('demoHeading')} isFirst={true} />\n\n <div className={`${styles.background} rounded-3 border-md bg-light-orange mb-4`}>\n <MySharesTableRow\n shareData={{ ...DEMO_INSIGHTS_SHARE, sharedObject: getDemoInteractive() }}\n getObjectActions={getObjectActions}\n getObjectAppLink={() => null}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n breakpoints={props.breakpoints}\n >\n <div className='d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2'>\n <Text namespace={namespace} phrase='demoInsightPill' />\n </div>\n </MySharesTableRow>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceFilterView } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterView';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\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';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\nimport { InsightsTypeFilters } from 'apps/my-shares/components/insights-list/type-filter/InsightsTypeFilters';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { useMySharesTable } from 'apps/my-shares/hooks/useMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n typeId: string | string[];\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n // Shared hooks\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasShareFlowV2, hasClassrooms } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n const breakpoints = useBreakpoints();\n const { accessPolicy } = useAccessPolicy();\n\n const sharesParams = getSharesParams(props.typeId);\n\n // Local variables\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights;\n\n // Flight fetching\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n const shareData = useMySharesTable(sharesParams.sentSharesParams, true, shouldFetch);\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='d-flex justify-content-between border-bottom pb-3 mb-3'>\n <h1 className='mb-1'>Reports</h1>\n\n <AudienceFilterView hasClassroomsFeature={hasClassrooms} />\n </div>\n\n <div className='mb-3'>\n <InsightsTypeFilters\n appLink={sharesParams.currentAppLink}\n typeIdParams={sharesParams.typeIdAppLinkParams}\n breakpoints={breakpoints}\n />\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight\n demoInteractive={demoInteractive.data}\n liteUrl={config.data?.liteUrl}\n breakpoints={breakpoints}\n imageCdnUrl={shareData.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n }\n\n {(() => {\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!shareData.sentShares.length)\n return (\n <MySharesTableEmptyState />\n );\n\n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={(obj, shareId) => getShareObjectActions(\n obj,\n shareId,\n sharesParams.audienceAppLinkParams,\n hasInsightsPermission,\n isPlugin,\n breakpoints\n )}\n groupByDateShared\n breakpoints={breakpoints}\n hasDemoInsights={showDemoInsight}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n })()}\n </div>\n );\n}\n"],"names":["useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","map","chunk","users","data","isLoading","hasCompleted","OnlineSupportArticle","LiteSupportArticle","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","individualHeatmap","aggregateHeatmap","AppRouteHelper","updateParams","params","options","appLink","currentParams","keysToRemove","updatedParams","merge","updatedAppLink","mapColourToBsVariant","groupColour","namespace","InsightsAdminAlert","props","storage","show","setShow","hasAnalytics","role","className","phrase","href","video","analyticsUrl","videoRoute","typeId","id","getAnalyticsUrl","target","svgName","onClick","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","DEMO_INSIGHTS_SHARE","share","shareId","type","sharedObject","shareRecipients","dateShared","Date","toISOString","viewCount","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","label","group","ClassroomRequests","classroom","classroomGroup","getClassroomsById","ids","sort","query","join","getClassroomGroupsById","userClassrooms","cursor","success","error","always","UrlHelper","getPinnedClassrooms","userId","customerId","ObjectStatus","getPublished","LanguageService","CLASSROOM_DISPLAY_LIMIT","AudienceFilterItem","user","object","MasterType","name","surname","subHeading","classrooms","length","c","smartCount","getClassroomPhrase","getSubHeading","svgContainerClassName","onSelect","onToggleSelected","selected","hideCheckbox","Checkbox","checked","onChange","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","isPinned","IconCircle","variant","svgSize","SvgContainer","S","metadata","colour","EmptySearchResults","hasClassroomsFeature","ArticleHelper","AudienceFilterSearch","SearchBar","onQueryChange","setQuery","getRemoteUrl","baseUrl","gatewayApiUrl","index","FilterConstants","currentUser","requestHeaders","authorization","userToken","value","formatRemoteSuggestions","suggestions","results","placeholder","limitedFeatureSet","suggestionsHeading","alwaysRenderSuggestions","resetSuggestionsOnNoActivation","onSuggestionSelected","shouldUpdateQueryOnSelection","getSuggestionComponent","suggestion","isSelected","getEmptyStateComponent","theme","container","suggestionsContainerOpen","suggestionHighlighted","sectionContainer","loadingComponentClassName","searchIconPlacement","autoFocusInput","allowableSuggestionFetchRequestedReasons","debounceTime","showClearInputIcon","resetSuggestionsOnClear","onClickClearInput","MAX_HEIGHT","filterAudienceById","audience","filter","a","some","toString","SelectedAudienceList","selections","s","idx","SuggestedAudienceList","pinned","InsightsAudienceFilterMenu","selectedIds","searchSelections","setSearchSelections","useSearchSelections","audienceObjects","ArrayHelper","suggestedIds","pinnedSuggestions","pinnedIds","deselectAll","filteredSuggestions","filteredPinned","autoHeight","autoHeightMax","selection","objectsToAdd","objectIdsToRemove","includes","onClickApply","getIds","obj","Object","keys","forEach","push","useAudienceSelections","queryParams","ObjectHelper","setSelections","audienceQueryParams","classroomGroups","paramKey","objectId","getUpdatedAudienceQueryParams","AudienceFilterView","UserRequests","config","ConfigRequests","pinnedClassrooms","dispatch","getRequest","useFetchClassrooms","suggestedClassrooms","selectedUsers","hasClassrooms","useSettings","selectedClassrooms","selectedClassroomGroups","useFetchAudienceObjects","items","filterLabel","classroomIds","groupIds","userIds","onlyClassroomsSelected","onlyGroupsSelected","onlyUsersSelected","noSelections","singleClassroomSelected","singleGroupSelected","mixedSelections","lastSelection","pop","useGetAudienceFilterLabel","pinnedClassroomIds","getSuggestedClassroomIds","showDropdown","setShowDropdown","applyFilter","AnalyticsHelper","actionType","descriptor","location","entity","dataLoaded","hideAudienceFilter","hasSelections","values","Array","isArray","Dropdown","onToggle","align","InsightsTypeFilters","isMobile","breakpoints","xs","sm","moreFilterOptions","moreFiltersSelected","typeIdParams","option","moreFilters","setMoreFilters","resetFilters","Text","InsightTypeFilterButton","typeFilters","isShowing","find","selectedFilter","currentAppLink","newType","newAppLink","getTypePhrase","AppLink","ariaLabel","MySharesDemoInsight","isStaging","liteUrl","heading","isFirst","MySharesTableRow","shareData","demoInteractive","getObjectActions","button","getObjectAppLink","yearGroups","MySharesEmptyState","EmptyState","src","ImageUrls","altText","text","analyticsData","analyticsOptions","workflowPhase","SignUp","MySharesView","useSetPageMetadata","title","usePermissions","hasPermissions","hasLocalPermissions","hasShareFlowV2","isPlugin","usePluginHelper","useBreakpoints","accessPolicy","useAccessPolicy","sharesParams","shouldFetch","PermissionName","hasInsightsPermission","showDemoInsight","hasDemoInsights","isAuthenticated","CustomerRequests","useMySharesTable","sentSharesParams","analyticsWebUrl","typeIdAppLinkParams","showPartialLoading","PartialMySharesTable","sentShares","MySharesTable","sharedObjects","interactivesPendingReview","itemsArr","audienceAppLinkParams","groupByDateShared","hasMore","isFetching","InfiniteScrollFooter","fetchNext","nextCursor","MySharesTableEmptyState"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/581-6e9a9afba8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/libs/shared/src/apps/analytics/flight-requests/ClassroomRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-item/audience-filter-item.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/audience-filter-search/AudienceFilterSearch.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/insights-filter-menu/insights-audience-filter-menu.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/insights-filter-menu/InsightsAudienceFilterMenu.tsx","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/AudienceFilterViewUtils.ts","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/audience-filter.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/AudienceFilterView.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-list/type-filter/insights-type-filters.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/insights-list/type-filter/InsightsTypeFilters.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/my-shares-demo-insights.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx"],"sourcesContent":["import { Flight } from 'libs/common/react/index';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { User } from 'libs/shared/interfaces';\n\nexport function useChunkedUsersResponse(usersIds: string[]) {\n const userIdChunks = ArrayHelper.chunk<string>(usersIds ?? [], 25);\n const usersResponse = Flight.useBasicFetchAll<User[]>(userIdChunks.map(chunk => UserRequests.getById(chunk)));\n const users = ArrayHelper.flatten<User>(usersResponse.data);\n return { users, isLoading: !usersResponse.hasCompleted, usersResponse };\n}","// Article name mapped to article ID on support site. Used by `ArticleHelper`\n\nexport enum OnlineSupportArticle {\n AddToPlaylist = '115005679748',\n EditSsoAccounts = '8202508040345',\n\n // LE\n LibraryEditor = '360001974533',\n VideoAccess = '360000153947',\n AddFromOnline = '360011718234',\n UploadToLibraryEditor = '360012069334',\n PBTErrorCodes = '360012421153',\n ManuelReview = '360020004534',\n LibraryReview = '360000163788',\n}\n\nexport enum LiteSupportArticle {\n Integrations = '4407268725529',\n Classrooms = '4405362551833',\n MakeInteractive = '4405370510873',\n EditSsoAccounts = '8202605666073',\n UploadToLibraryEditor = '10672936659865',\n AddFromLite = '10671345281561',\n ManageSsoYearGroups = '14691130889241',\n ContentReview = '18525199576601',\n ContentPermissions = '14692125209497',\n AccessSettings = '27927466562201',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ContextService } from 'libs/shared/services/ContextService';\n\ninterface UpdateParamsOptions extends Core.AppLinkOptions {\n merge?: boolean;\n keysToRemove?: string[]\n}\n\nexport const AppRouteHelper = {\n /**\n * Utility to update the params on the current appRoute.\n * \n * This is built on top of ContextService rather than build into AppLink\n * as we will generally only want to update params on appRoutes, not appLinks.\n */\n updateParams(params: HashObject, options?: UpdateParamsOptions): void {\n const { appLink } = ContextService.getCurrentRoute();\n\n let currentParams = typeof(appLink.params) === 'string'\n ? Core.LocationUtils.DeserializeQueryParams(appLink.params)\n : appLink.params as HashObject;\n\n if (options.keysToRemove)\n currentParams = ObjectHelper.omit(currentParams, options.keysToRemove);\n\n const updatedParams = options?.merge\n ? { ...currentParams, ...params }\n : params;\n\n const updatedAppLink = {\n ...appLink,\n params: updatedParams\n };\n\n /**\n * This prevents us pointlessly re-triggering if we're already on the right applink.\n */\n if (ObjectHelper.isEqual(appLink, updatedAppLink))\n return;\n \n Core.AppLinkHelper.trigger(updatedAppLink, ObjectHelper.omit(options, [ 'merge', 'keysToRemove' ]));\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 { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { ShareType } from 'apps/share-v2/enums/ShareType';\nimport { ShareLink } from 'apps/share-v2/interfaces/ShareLink';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst DEMO_INSIGHT_DAYS_AGO = 7;\n\nexport const DEMO_INSIGHTS_SHARE: MySharesTableData = {\n share: {\n shareId: 'demo-insights',\n type: ShareType.Link\n } as ShareLink,\n sharedObject: null,\n shareRecipients: null,\n dateShared: DateHelper.subtract(new Date(), DEMO_INSIGHT_DAYS_AGO, 'days').toISOString(),\n viewCount: 23\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTION: ActionOptions = {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n className: 'btn btn-outline-dark'\n};\n","import { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { ObjectStatus } from 'libs/shared/enums/ObjectStatus';\nimport { ClassroomCollection } from 'libs/shared/interfaces';\n\nexport const ClassroomRequests = {\n classroom(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: `classroom:${id}`\n };\n },\n\n classroomGroup(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}?query=classroom`,\n key: `classroom:group:${id}:classroom`\n };\n },\n\n getClassroomsById(ids: string[]): Flight.Request {\n ids.sort();\n \n const query = `users[count()]{limit:0}&${ids.map(id => `id=${id}`).join('&')}`;\n\n return {\n url: `{gateway}/v1/objects?query=${query}`,\n key: `classrooms:${ids.join(',')}`\n };\n },\n\n getClassroomGroupsById(ids: string[]): Flight.Request {\n ids.sort();\n\n const query = `users[count()]{limit:0}&${ids.map(id => `id=${id}`).join('&')}`;\n\n return {\n url: `{gateway}/v1/objects?query=${query}`,\n key: `classroom:groups:${ids.join(',')}`\n };\n },\n\n userClassrooms(\n cursor?: string,\n success?: (classrooms: ClassroomCollection) => void,\n error?: (xhr: Xhr) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/classrooms`, { cursor }),\n key: `user:classrooms${cursor ? `:${cursor}` : ''}`,\n success,\n error,\n always\n };\n },\n\n getPinnedClassrooms(userId: string, customerId: string): Flight.Request {\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${userId}/members`, {\n query: `favouriteClassrooms[favouritedBy{id:${userId}},_integrations,enrolments[user]{role:'owner'}]{status:${ObjectStatus.Active},customer.id:${customerId},limit:100,orderby:name}`\n }),\n key: 'pinned:classrooms',\n normalize: false\n };\n },\n\n \n getPublished(userId: string, cursor: string = ''): Flight.Request {\n const params: HashObject = {\n query: `{orderby:name,status:${ObjectStatus.Active}}favouritedBy{id:${userId}},_integrations,enrolments[user]{role:'owner'}`\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/classrooms', params),\n key: `published:classrooms${cursor ? `:${cursor}` : ''}`\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"oCnQi\",\"cta\":\"w39NR\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { 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 './audience-filter-item.scss';\n\nconst namespace = 'shared.audienceFilterItem';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ntype AudienceObject = User | Classroom | ClassroomGroup;\n\nconst CLASSROOM_DISPLAY_LIMIT = 2;\n\nfunction getClassroomPhrase(user: User): string {\n const classrooms = user.classrooms?.data;\n if (!classrooms?.length)\n return;\n\n if (classrooms.length <= CLASSROOM_DISPLAY_LIMIT)\n return user.classrooms.data.map(c => c.name).join(' • ');\n\n return getPhrase('severalClassrooms', { classroom: classrooms[0].name, smartCount: classrooms.length - 1 });\n}\n\nfunction getSubHeading(object: AudienceObject): string {\n if (object.typeId === MasterType.User && (object as User).classrooms?.data?.length)\n return getClassroomPhrase(object as User);\n\n return '';\n}\n\ninterface AudienceFilterItemProps {\n object: AudienceObject;\n selected: boolean;\n onToggleSelected: (selected: boolean) => void;\n imageCdnUrl: string;\n hideCheckbox?: boolean;\n isPinned?: boolean;\n}\n\nexport function AudienceFilterItem(props: AudienceFilterItemProps): JSX.Element {\n const user = props.object.typeId === MasterType.User && (props.object as User);\n const classroom = props.object.typeId === MasterType.Classroom && (props.object as Classroom);\n const classroomGroup = props.object.typeId === MasterType.ClassroomGroup && (props.object as ClassroomGroup);\n\n let name = props.object.name;\n\n if (user)\n name += ` ${user.surname}`;\n\n const subHeading = getSubHeading(props.object);\n const svgContainerClassName = 'd-flex align-items-center justify-content-center text-white rounded-circle h-100 w-100';\n const onSelect = () => props.onToggleSelected(!props.selected);\n\n return (\n <button\n className='w-100'\n onClick={onSelect}\n >\n <div className={`d-flex align-items-center py-1 ${props.hideCheckbox ? 'bg-light-hover mx-n3 px-3' : ''}`}>\n {!props.hideCheckbox && (\n <Checkbox\n id={props.object.id}\n checked={props.selected}\n onChange={onSelect}\n />\n )}\n <div className={`${styles.avatarContainer} cursor-pointer me-2`}>\n {!!user &&\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(props.object.name, user.surname)}\n />\n }\n {!!classroom &&\n <div className={svgContainerClassName}>\n {props.isPinned\n ? <IconCircle svgName={cvSvgLibrary.StarOutline} variant='yellow' svgSize={SvgContainerSize.Large} />\n : <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' svgSize={SvgContainerSize.Large} />\n }\n </div>\n }\n {!!classroomGroup &&\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n }\n </div>\n <div>\n <h4 className='text-start font-size-normal fw-normal m-0'>{name}</h4>\n {!!subHeading &&\n <p className='text-secondary m-0'>{subHeading}</p>\n }\n </div>\n {\n props.hideCheckbox && (\n <div className={`${styles.cta} ms-auto text-secondary`}>\n {props.selected && <SvgContainer svgName={cvSvgLibrary.Close} />}\n {!props.selected && <SvgContainer svgName={cvSvgLibrary.Plus} />}\n </div>\n )\n }\n </div >\n </button >\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AudienceSelection } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterViewUtils';\nimport { AudienceFilterItem } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem';\nimport { FilterConstants } from 'libs/shared/apps/search/constants/FilterConstants';\nimport { SearchBar } from 'libs/shared/components/search-bar/SearchBar';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { BaseObject, CurrentUser, ShareSearchResponse } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nconst namespace = 'shared.audienceFilterSearch';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface EmptySearchResultsProps {\n query: string;\n hasClassroomsFeature: boolean;\n}\n\nfunction EmptySearchResults(props: EmptySearchResultsProps): JSX.Element {\n return (\n <div className='pt-2 text-center'>\n <p className='m-0'><strong>{getPhrase('noResults', { query: props.query })}</strong></p>\n {!!props.hasClassroomsFeature &&\n <>\n <span>{getPhrase('noResultsSuggestion')}&nbsp;</span>\n <a href={ArticleHelper.getLiteArticle(LiteSupportArticle.Classrooms)} target='_blank' className='text-info'>\n {getPhrase('learnMore')}\n </a>\n </>\n }\n </div>\n );\n}\n\ninterface AudienceFilterSearchProps {\n onSelect: (...selection: AudienceSelection[]) => void;\n isSelected: (object: BaseObject) => boolean;\n isPinned?: (object: BaseObject) => boolean;\n gatewayApiUrl: string;\n userToken: HashObject;\n currentUser: CurrentUser;\n imageCdnUrl: string;\n hasClassroomsFeature?: boolean;\n limitedFeatureSet?: boolean;\n hideCheckbox?: boolean;\n setQuery?: (query: string) => void;\n}\n\nexport function AudienceFilterSearch(props: AudienceFilterSearchProps): JSX.Element {\n function getRemoteUrl(query: string): string {\n const baseUrl = UrlHelper.safeUrlConcat(props.gatewayApiUrl, 'v1/search/users');\n\n const indices = [ 'user', 'classroom', 'classroom_group' ];\n\n return UrlHelper.urlBuilder(baseUrl, {\n query,\n index: indices,\n [`${FilterConstants.FILTER_PARAM_PREFIX}customerId`]: props.currentUser.customerId,\n limit: 5\n });\n }\n\n return (\n <SearchBar\n onQueryChange={props.setQuery}\n getRemoteUrl={getRemoteUrl}\n requestHeaders={{\n authorization: `Bearer ${props.userToken.value}`\n }}\n formatRemoteSuggestions={(suggestions: ShareSearchResponse) => suggestions?.results}\n placeholder={getPhrase((props.limitedFeatureSet || !props.hasClassroomsFeature) ? 'placeholderLimited' : 'placeholder')}\n suggestionsHeading={getPhrase('searchResults')}\n alwaysRenderSuggestions\n resetSuggestionsOnNoActivation\n onSuggestionSelected={() => { }} // Do nothing as AudienceFilterItem handles selection itself\n shouldUpdateQueryOnSelection={false}\n getSuggestionComponent={suggestion => {\n const isSelected = props.isSelected(suggestion);\n\n return (\n <AudienceFilterItem\n object={suggestion}\n selected={isSelected}\n onToggleSelected={() => props.onSelect({ object: suggestion, selected: !isSelected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox={props.hideCheckbox}\n isPinned={props.isPinned?.(suggestion)}\n />\n );\n }}\n getEmptyStateComponent={query =>\n <EmptySearchResults query={query} hasClassroomsFeature={props.hasClassroomsFeature} />\n }\n theme={{\n container: '',\n suggestionsContainerOpen: 'pt-2',\n suggestion: '',\n suggestionHighlighted: '',\n sectionContainer: ''\n }}\n loadingComponentClassName='pt-2'\n searchIconPlacement='left'\n autoFocusInput\n allowableSuggestionFetchRequestedReasons={['input-changed']}\n debounceTime={200}\n showClearInputIcon\n resetSuggestionsOnClear\n onClickClearInput={() => props.setQuery('')}\n />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"H4ti6\"};","import React from 'react';\nimport { Scrollbars } from 'react-custom-scrollbars-2';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AudienceSelection } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterViewUtils';\nimport { AudienceFilterItem } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-item/AudienceFilterItem';\nimport { AudienceFilterSearch } from 'libs/shared/apps/analytics/views/audience-filter/components/audience-filter-search/AudienceFilterSearch';\nimport { BaseObject, CurrentUser } from 'libs/shared/interfaces';\n\nimport styles from './insights-audience-filter-menu.scss';\n\nconst namespace = 'shared.insightsAudienceFilterMenu';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_HEIGHT = 300;\n\nfunction filterAudienceById(audience?: BaseObject[], ids?: string[]): BaseObject[] {\n if (!audience)\n return [];\n\n if (!ids)\n return audience;\n\n return audience.filter(a => ids.some(id => id.toString() === a.id.toString()));\n}\n\nfunction useSearchSelections(\n selectedIds?: string[]\n): [BaseObject[], React.Dispatch<React.SetStateAction<BaseObject[]>>] {\n const [ searchSelections, setSearchSelections ] = React.useState<BaseObject[]>([]);\n\n /**\n * If a search selection is deselected externally, we want to remove it from state.\n */\n React.useEffect(() => {\n setSearchSelections(filterAudienceById(searchSelections, selectedIds));\n }, [selectedIds]);\n\n return [ searchSelections, setSearchSelections ];\n}\n\ninterface BaseAudienceListProps {\n selections: BaseObject[];\n pinned?: BaseObject[];\n onSelect: (...selection: AudienceSelection[]) => void;\n isPinned?: (object: BaseObject) => boolean;\n deselectAll?: () => void;\n imageCdnUrl: string;\n}\n\nfunction SelectedAudienceList(props: BaseAudienceListProps): JSX.Element {\n return (\n <>\n <p className='mb-2 pt-2 px-3'><strong>{getPhrase('filteredBy')}</strong></p>\n\n <ul className='list-unstyled px-3 mb-2'>\n {props.selections.map((s, idx) => (\n <li key={idx}>\n <AudienceFilterItem\n object={s}\n selected\n onToggleSelected={() => props.onSelect({ object: s, selected: false })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n isPinned={props.isPinned(s)}\n />\n </li>\n ))}\n </ul>\n </>\n );\n}\n\ninterface SuggestedAudienceListProps extends BaseAudienceListProps {\n isSelected: (object: BaseObject) => boolean;\n}\n\nfunction SuggestedAudienceList(props: SuggestedAudienceListProps): JSX.Element {\n return (\n <>\n <p className='mt-2 mb-2'><strong>{getPhrase('suggested')}</strong></p>\n <ul className='list-unstyled m-0'>\n {props.pinned?.map((s, idx) => (\n <li key={`pinned-${idx}`}>\n <AudienceFilterItem\n object={s}\n selected={props.isSelected(s)}\n onToggleSelected={(selected: boolean) => props.onSelect({ object: s, selected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n isPinned\n />\n </li>\n ))}\n {props.selections.map((s, idx) => {\n return (\n <li key={`suggestion-${idx}`}>\n <AudienceFilterItem\n object={s}\n selected={props.isSelected(s)}\n onToggleSelected={(selected: boolean) => props.onSelect({ object: s, selected })}\n imageCdnUrl={props.imageCdnUrl}\n hideCheckbox\n />\n </li>\n );\n })}\n </ul>\n </>\n );\n}\n\ninterface InsightsAudienceFilterMenuProps {\n onSelect: (...selection: AudienceSelection[]) => void;\n gatewayApiUrl: string;\n userToken: HashObject;\n imageCdnUrl: string;\n currentUser: CurrentUser;\n audienceObjects?: BaseObject[];\n selectedIds?: string[];\n suggestedIds?: string[];\n limitedFeatureSet?: boolean;\n pinnedIds?: string[];\n hasClassroomsFeature?: boolean;\n onClickApply?: () => void;\n}\n\nexport function InsightsAudienceFilterMenu(props: InsightsAudienceFilterMenuProps): JSX.Element {\n const [ searchSelections, setSearchSelections ] = useSearchSelections(props.selectedIds);\n const audienceObjects = ArrayHelper.uniq([ ...(props.audienceObjects ?? []), ...searchSelections ], 'id');\n\n const selections = filterAudienceById(audienceObjects, props.selectedIds);\n const suggestions = filterAudienceById(audienceObjects, props.suggestedIds);\n const pinnedSuggestions = props.pinnedIds ? filterAudienceById(audienceObjects, props.pinnedIds) : [];\n\n const [ query, setQuery ] = React.useState('');\n\n function isSelected(object: BaseObject): boolean {\n if (!props.selectedIds?.length)\n return false;\n\n return props.selectedIds.some(id => id.toString() === object.id.toString());\n }\n\n function isPinned(object: BaseObject): boolean {\n if (!props.pinnedIds?.length)\n return false;\n\n return props.pinnedIds.some(id => id.toString() === object.id.toString());\n }\n\n function deselectAll(): void {\n props.onSelect();\n }\n\n function onSelectSearchResult(...selection: AudienceSelection[]): void {\n const objectsToAdd = selection.filter(s => s.selected).map(s => s.object);\n const objectIdsToRemove = selection.filter(s => !s.selected).map(s => s.object.id);\n\n setSearchSelections(s => [\n ...s.filter(s => !objectIdsToRemove.includes(s.id)),\n ...objectsToAdd\n ]);\n\n props.onSelect(...selection);\n }\n\n const filteredSuggestions = suggestions.filter(suggestions => !isSelected(suggestions));\n const filteredPinned = pinnedSuggestions.filter(suggestions => !isSelected(suggestions));\n\n return (\n <div className={styles.menu}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <div className='p-3'>\n <AudienceFilterSearch\n onSelect={onSelectSearchResult}\n isSelected={isSelected}\n isPinned={isPinned}\n gatewayApiUrl={props.gatewayApiUrl}\n userToken={props.userToken}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n limitedFeatureSet={props.limitedFeatureSet}\n hasClassroomsFeature={props.hasClassroomsFeature}\n setQuery={setQuery}\n hideCheckbox\n />\n {query.length < 3 && (!!filteredSuggestions.length || !!filteredPinned.length) &&\n <SuggestedAudienceList\n selections={filteredSuggestions}\n pinned={filteredPinned}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n isSelected={isSelected}\n />\n }\n </div>\n </Scrollbars>\n\n {!!selections.length &&\n <div className={`${suggestions.length ? 'border-top' : ''} pb-2`}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <SelectedAudienceList\n selections={selections}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n deselectAll={deselectAll}\n isPinned={isPinned}\n />\n </Scrollbars>\n\n <div className='d-flex justify-content-between pb-1'>\n <button\n className='btn btn-link p-0 text-secondary px-3'\n onClick={deselectAll}\n >\n {getPhrase('reset')}\n </button>\n\n <button\n className='btn btn-link p-0 text-info px-3'\n onClick={props.onClickApply}\n >\n {getPhrase('apply')}\n </button>\n </div>\n </div>\n }\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { ClassroomRequests } from 'libs/shared/apps/analytics/flight-requests/ClassroomRequests';\nimport { useChunkedUsersResponse } from 'libs/shared/apps/analytics/hooks/UseEngagementUsers';\nimport { AudienceFilterSuggestions } from 'libs/shared/apps/analytics/interfaces/AudienceFilterSuggestions';\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { useFetchAll } from 'libs/shared/hooks/UseFetchAll';\nimport { SelectAllPagesResult } from 'libs/shared/hooks/UseSelectAllPages';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { BaseObject, Classroom, ClassroomGroup } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.audienceFilter';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function useFetchAudienceObjects(\n audienceQueryParams: AudienceQueryParams,\n suggestedClassrooms: Classroom[]\n): BaseObject[] {\n const { users: selectedUsers } = useChunkedUsersResponse(\n audienceQueryParams.users\n );\n const { hasClassrooms } = useSettings(null);\n\n const selectedClassrooms = Flight.useBasicFetch<Classroom[]>(\n audienceQueryParams.classrooms?.length &&\n hasClassrooms &&\n ClassroomRequests.getClassroomsById(audienceQueryParams.classrooms)\n );\n\n const selectedClassroomGroups = Flight.useBasicFetch<ClassroomGroup[]>(\n audienceQueryParams.classroomGroups?.length &&\n hasClassrooms &&\n ClassroomRequests.getClassroomGroupsById(audienceQueryParams.classroomGroups)\n );\n\n if (!hasClassrooms)\n return selectedUsers || [];\n\n const users = selectedUsers || [];\n const classrooms = ArrayHelper.uniq([ ...(selectedClassrooms.data || []), ...suggestedClassrooms || [] ], 'id');\n const classroomGroups = selectedClassroomGroups.data ?? [];\n\n return [ ...users, ...classrooms, ...classroomGroups ];\n}\n\nexport type AudienceSelection = { object: BaseObject, selected: boolean };\n\nfunction getUpdatedAudienceQueryParams(\n selections: AudienceSelection[],\n audienceQueryParams: AudienceQueryParams\n): AudienceQueryParams {\n if (!selections.length)\n return { users: null, classrooms: null, classroomGroups: null };\n\n let params: AudienceQueryParams = { ...audienceQueryParams };\n\n selections.forEach(s => {\n let paramKey: keyof AudienceQueryParams;\n\n switch (s.object.typeId) {\n case MasterType.User:\n paramKey = 'users';\n break;\n \n case MasterType.Classroom:\n paramKey = 'classrooms';\n break;\n \n case MasterType.ClassroomGroup:\n paramKey = 'classroomGroups';\n break;\n }\n\n const objectId = s.object.id.toString();\n let currentParams = params[paramKey] ?? [];\n\n if (s.selected)\n currentParams.push(objectId);\n else\n currentParams = currentParams.filter(id => id.toString() !== objectId);\n\n params = {\n ...params,\n [paramKey]: ArrayHelper.uniq(currentParams)\n };\n });\n\n return params;\n}\n\nexport function getIds(obj: AudienceQueryParams | AudienceFilterSuggestions): string[] {\n const ids: string [] = [];\n\n Object.keys(obj).forEach((key: keyof (AudienceQueryParams | AudienceFilterSuggestions)) => {\n if (obj[key])\n ids.push(...obj[key]);\n });\n\n return ids;\n}\n\nexport function useAudienceSelections(queryParams: AudienceQueryParams):\n[AudienceQueryParams, (...selections: AudienceSelection[]) => void] {\n const [ selections, setSelections ] = React.useState<AudienceQueryParams>(ObjectHelper.deepClone(queryParams));\n\n function onSelectAudienceObject(...selection: AudienceSelection[]): void {\n setSelections(getUpdatedAudienceQueryParams(selection, selections));\n }\n\n return [ selections, onSelectAudienceObject ];\n}\n\n/**\n * \n * @returns The label to be used in the audience filter toggle.\n * \n * If nothing has been selected, \"Everyone\" will be returned.\n * \n * If a single classroom or a single classroom group has been selected,\n * the name of the classroom/group will be returned.\n * \n * Otherwise, the count of users in the applied filter will be returned,\n * as obtained from the filter count view model.\n */\nexport function useGetAudienceFilterLabel(queryParams: AudienceQueryParams): string | undefined {\n const classroomIds = ArrayHelper.uniq(queryParams.classrooms as string[] ?? []);\n const groupIds = ArrayHelper.uniq(queryParams.classroomGroups as string[] ?? []);\n const userIds = ArrayHelper.uniq(queryParams.users as string[] ?? []);\n\n const onlyClassroomsSelected = !!classroomIds.length && groupIds.length === 0 && userIds.length === 0;\n const onlyGroupsSelected = !!groupIds.length && classroomIds.length === 0 && userIds.length === 0;\n const onlyUsersSelected = !!userIds.length && classroomIds.length === 0 && groupIds.length === 0;\n const noSelections = !classroomIds.length && !groupIds.length && !userIds.length;\n\n const singleClassroomSelected = onlyClassroomsSelected && classroomIds.length === 1;\n const singleGroupSelected = onlyGroupsSelected && groupIds.length === 1;\n\n const classroom = Flight.useBasicFetch<Classroom>(singleClassroomSelected\n && ClassroomRequests.classroom(classroomIds[0]));\n\n const group = Flight.useBasicFetch<Classroom>(singleGroupSelected && ClassroomRequests.classroomGroup(groupIds[0]));\n\n if (noSelections)\n return getPhrase('noFilter');\n\n if (singleClassroomSelected) {\n if (!classroom.data)\n return;\n\n if (classroom.data.typeId === MasterType.Classroom)\n return classroom.data.name;\n }\n\n if (singleGroupSelected) {\n if (!group.data)\n return;\n\n if (group.data.typeId === MasterType.ClassroomGroup)\n return group.data.name;\n }\n\n if (onlyClassroomsSelected)\n return getPhrase('classrooms', { smartCount: classroomIds.length });\n\n if (onlyGroupsSelected)\n return getPhrase('groups', { smartCount: groupIds.length });\n\n if (onlyUsersSelected)\n return getPhrase('users', { smartCount: userIds.length });\n\n const mixedSelections = [];\n\n if (classroomIds.length)\n mixedSelections.push(getPhrase('classrooms', { smartCount: classroomIds.length }));\n\n if (groupIds.length)\n mixedSelections.push(getPhrase('groups', { smartCount: groupIds.length }));\n\n if (userIds.length)\n mixedSelections.push(getPhrase('users', { smartCount: userIds.length }));\n\n const lastSelection = mixedSelections.pop();\n\n return `${mixedSelections.join(', ')} ${getPhrase('and')} ${lastSelection}`;\n}\n\nexport function useFetchClassrooms(userId: string): SelectAllPagesResult<Classroom> {\n const dispatch = useDispatch();\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.getPublished(userId, cursor);\n }\n \n function fetchNext(cursor?: string): void {\n Flight.getFetch(dispatch)(getRequest(cursor));\n }\n\n return useFetchAll<Classroom>(getRequest, fetchNext);\n}","// extracted by mini-css-extract-plugin\nexport default {\"toggle\":\"A0vBV\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, FilterDescriptor, LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { ClassroomRequests } from 'libs/shared/apps/analytics/flight-requests/ClassroomRequests';\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { InsightsAudienceFilterMenu } from 'libs/shared/apps/analytics/views/audience-filter/components/insights-filter-menu/InsightsAudienceFilterMenu';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { ClassroomCollection, Config, CurrentUser } from 'libs/shared/interfaces';\nimport { AppRouteHelper } from 'libs/shared/utils/AppRouteHelper';\n\nimport {\n getIds,\n useAudienceSelections,\n useFetchAudienceObjects,\n useFetchClassrooms,\n useGetAudienceFilterLabel\n} from './AudienceFilterViewUtils';\n\nimport styles from './audience-filter.scss';\n\ninterface AudienceFilterViewProps {\n className?: string;\n hasClassroomsFeature: boolean;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function AudienceFilterView(props: AudienceFilterViewProps): JSX.Element {\n const queryParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n\n const userToken = Flight.useBasicFetch<HashObject>(UserRequests.token());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const pinnedClassrooms = Flight.useBasicFetch<ClassroomCollection>(\n ClassroomRequests.getPinnedClassrooms(currentUser.data?.id, currentUser.data?.customerId)\n );\n const classrooms = useFetchClassrooms(currentUser.data?.id);\n\n const audience = useFetchAudienceObjects(queryParams, classrooms.items);\n const filterLabel = useGetAudienceFilterLabel(queryParams);\n\n const [ selections, setSelections ] = useAudienceSelections(queryParams);\n const pinnedClassroomIds = pinnedClassrooms.data?.data.map(classroom => classroom.id.toString());\n const suggestions = { classrooms: getSuggestedClassroomIds() };\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n\n function onClickApply(): void {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onToggle(show: boolean): void {\n setShowDropdown(show);\n\n if (show)\n return;\n\n applyFilter();\n }\n\n function applyFilter() {\n AppRouteHelper.updateParams(ObjectHelper.deepClone(selections), { merge: true });\n\n AnalyticsHelper.logUserAction({\n users: selections?.users?.length ?? 0,\n classrooms: selections?.classrooms?.length ?? 0,\n classroomGroups: selections?.classroomGroups?.length ?? 0\n }, {\n actionType: UserAction.Filter,\n descriptor: FilterDescriptor.Audience,\n location: LocationContext.AudienceFilter,\n entity: EntityType.Filter\n });\n }\n\n function hideAudienceFilter(): boolean {\n return !classrooms.items?.length;\n }\n\n function getSuggestedClassroomIds() {\n return classrooms.items?.length\n ? classrooms.items\n .filter(classroom => !pinnedClassroomIds?.includes(classroom.id.toString()))\n .map(classroom => classroom.id)\n : [];\n }\n\n const dataLoaded = !!config.data && classrooms.hasCompleted && pinnedClassrooms.hasCompleted;\n\n if (hideAudienceFilter())\n return <></>;\n\n const hasSelections = Object.values(queryParams).some(value =>\n Array.isArray(value) && value.length > 0);\n\n return (\n <Dropdown className={props.className ?? ''} onToggle={onToggle} show={showDropdown}>\n <Dropdown.Toggle\n id='audience-filter-toggle'\n variant='outline-dark'\n className={`no-caret ${styles.toggle} ${hasSelections ? 'bg-dark text-white' : ''}`}\n >\n {filterLabel}\n </Dropdown.Toggle>\n <Dropdown.Menu className='py-0' align='end'>\n {dataLoaded &&\n <InsightsAudienceFilterMenu\n gatewayApiUrl={config.data.gatewayApiUrl}\n userToken={userToken.data}\n audienceObjects={audience}\n selectedIds={getIds(selections)}\n suggestedIds={getIds(suggestions)}\n pinnedIds={pinnedClassroomIds}\n onSelect={setSelections}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n hasClassroomsFeature={props.hasClassroomsFeature}\n onClickApply={onClickApply}\n />\n }\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"noCaret\":\"_F6P_\",\"filterContainer\":\"ZBgdA\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insights-type-filters.scss';\n\nconst namespace = 'insights.insightsTypeFilters';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsTypeFilterProps {\n appLink: Core.AppLink;\n typeIdParams: MasterType[];\n breakpoints: Breakpoints;\n}\n\nexport function InsightsTypeFilters(props: InsightsTypeFilterProps) {\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n const moreFilterOptions = [\n ...(isMobile ? [{\n label: getPhrase('interactives'),\n filter: MasterType.Interactive\n }, {\n label: getPhrase('videos'),\n filter: MasterType.Video\n }, {\n label: getPhrase('clips'),\n filter: MasterType.Clip\n }] : []),\n {\n label: getPhrase('playlists'),\n filter: MasterType.Playlist\n }, {\n label: getPhrase('series'),\n filter: MasterType.Series\n }];\n\n const moreFiltersSelected = getMoreFiltersSelected();\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ moreFilters, setMoreFilters ] = React.useState(moreFiltersSelected);\n\n function applyFilter() {\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: ArrayHelper.uniq([\n ...props.typeIdParams,\n ...moreFilters\n ])\n }\n });\n }\n\n function resetFilters() {\n setMoreFilters([]);\n\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: []\n }\n });\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n applyFilter();\n }\n\n function onClickApply() {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onClickReset() {\n resetFilters();\n setShowDropdown(false);\n }\n\n function onSelectFilter(filter: MasterType) {\n setMoreFilters(ArrayHelper.addOrRemoveImmutable(moreFilters, filter));\n }\n\n function isFilterSelected(filter: MasterType) {\n if (isMobile) {\n return !!moreFilters.find(selectedFilter => selectedFilter === filter) ||\n !!props.typeIdParams.find(selectedFilter => selectedFilter === filter);\n }\n\n return !!moreFilters.find(selectedFilter => selectedFilter === filter);\n }\n\n function getMoreFiltersSelected() {\n return props.typeIdParams.filter(typeId =>\n moreFilterOptions.some(option => typeId === option.filter));\n }\n\n return (\n <div className='d-flex align-items-center fw-semibold'>\n <p className='d-none d-md-inline h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className={`${styles.filterContainer} d-flex flex-grow-1 flex-md-grow-0 border-start ps-0 ps-md-3 ms-0 ms-md-3 gap-2`}>\n <div className='d-none d-md-flex gap-2'>\n <InsightTypeFilterButton\n typeId={MasterType.Interactive}\n typeFilters={props.typeIdParams}\n appLink={props.appLink}\n />\n <InsightTypeFilterButton typeId={MasterType.Video} typeFilters={props.typeIdParams} appLink={props.appLink} />\n <InsightTypeFilterButton typeId={MasterType.Clip} typeFilters={props.typeIdParams} appLink={props.appLink} />\n </div>\n <Dropdown onToggle={onToggleDropdown} show={showDropdown} className='col'>\n <Dropdown.Toggle\n className={`${styles.noCaret} col-12 col-md-auto`}\n variant={moreFiltersSelected.length ? 'dark' : 'outline-dark'}\n >\n <div className='d-flex align-items-center justify-content-center gap-2 fw-semibold mb-0'>\n <SvgContainer svgName={cvSvgLibrary.Filter} className='svg-container d-inline-block d-md-none' />\n <Text namespace={namespace} phrase={isMobile ? 'filters' : 'moreFilters'} />\n {moreFiltersSelected.length ? ` - ${moreFiltersSelected.length}` : ''}\n </div>\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className='mx-1 px-2 py-1 mb-0'>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='types' /></h2>\n <ul className='list-unstyled me-5'>\n {moreFilterOptions.map(option => (\n <li key={`${option.label}-filter`} className='my-1'>\n <Checkbox\n id={`${option.label}-filter`}\n label={option.label}\n onChange={() => onSelectFilter(option.filter)}\n checked={isFilterSelected(option.filter)}\n />\n </li>\n ))}\n </ul>\n <div className='d-flex justify-content-between'>\n <button onClick={onClickReset} className='btn btn-link text-secondary p-0 mb-0'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n <button onClick={onClickApply} className='btn btn-link text-info p-0 mb-0'>\n <Text namespace={namespace} phrase='apply' />\n </button>\n </div>\n </div>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n {!!props.typeIdParams.length &&\n <button onClick={resetFilters} className='d-none d-md-block btn btn-link ms-1'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n }\n </div>\n );\n}\n\ninterface InsightTypeFilterButtonProps {\n typeId: MasterType;\n typeFilters: MasterType[];\n appLink: Core.AppLink;\n}\n\nfunction InsightTypeFilterButton(props: InsightTypeFilterButtonProps) {\n const selected = props.typeFilters.includes(props.typeId);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n const newType: MasterType[] = ArrayHelper.addOrRemoveImmutable(props.typeFilters, props.typeId);\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n typeId: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.typeId === MasterType.Video) return 'videos';\n if (props.typeId === MasterType.Clip) return 'clips';\n if (props.typeId === MasterType.Interactive) return 'interactives';\n }\n\n return (\n <AppLink\n className={`btn ${selected ? 'btn-dark' : 'btn-outline-dark'} fw-semibold`}\n appLink={newAppLink}\n ariaLabel={`${getPhrase('ariaFilterBy')}: ${getPhrase(getTypePhrase())}`}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"mySharesTable\":\"hyaYe\",\"mySharesHeader\":\"WjfsD\",\"tableBorder\":\"tHBWr\"};","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { AppLinkHelper } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { SharableEntity } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\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 { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { ShareAvatar } from 'apps/share-v2/components/ShareAvatar';\nimport { ShareLinkHelper } from 'apps/share-v2/utils/ShareLinkHelper';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className={`${styles.mySharesHeader} d-block d-lg-grid gap-3 px-3`}>\n <p className='fw-semibold mb-2 ms-n3'>{props.heading}</p>\n\n {props.isFirst &&\n <>\n <div className='d-none d-xl-inline' />\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='sharedToHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='dateSharedHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </>\n }\n </div>\n );\n}\n\ninterface ShareObjectTitleProps {\n sharedObject: SharableEntity;\n requireMarking?: number;\n appLink?: Core.AppLink;\n}\n\nfunction ShareObjectTitle(props: ShareObjectTitleProps) {\n const { sharedObject } = props;\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) &&\n !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n // appLink={'series' in sharedObject && sharedObject.series ? getObjectAppLink(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className='d-inline clamp-1'\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n {sharedObject.name}\n\n {!!props.requireMarking && (\n <div className={`font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface MyShareRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n breakpoints?: Breakpoints;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject, shareId: string) => ActionOptions[];\n yearGroups: YearGroup[];\n imageCdnUrl: string;\n}\n\nexport function MySharesTableRow(props: MyShareRowProps) {\n const { shareData } = props;\n const sharedObject = shareData.sharedObject;\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n const isDesktop = props.breakpoints.xl || props.breakpoints.xxl;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n\n function onRowClick() {\n const [goToReport] = props.getObjectActions(sharedObject, shareData.share.shareId);\n\n AppLinkHelper.trigger(goToReport.appLink);\n }\n\n function findClassroomName() {\n const classroomId = ShareLinkHelper.getClassroomId(shareData?.share);\n const classroom = props.shareData?.shareRecipients?.find(recipient => recipient.id.toString() === classroomId);\n \n return classroom?.name;\n }\n\n return (\n <div key={shareData.share.shareId} onClick={onRowClick} className={`${styles.mySharesTable} ${styles.tableBorder} position-relative d-flex flex-md-row align-items-md-center p-0 p-md-3 gap-3`}>\n \n <div className='col-xl-1'>\n <SharedObjectImage\n object={sharedObject}\n // appLink={props.getObjectAppLink(sharedObject)}\n showVideoMetadata={false}\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n requireMarking={isMobile && shareData.pendingReview}\n showCollectionMask={false}\n showVideoCount={false}\n />\n </div>\n\n <div className='d-flex align-items-xl-center flex-xl-row gap-xl-3 col-xl-11'>\n <div className='col-xl-3'>\n <ShareObjectTitle\n sharedObject={shareData.sharedObject}\n // appLink={props.getObjectAppLink(sharedObject)}\n requireMarking={isDesktop && shareData.pendingReview}\n />\n {props.children}\n </div>\n\n <div className='d-flex align-items-center gap-xl-0 pe-4 pe-md-0 col-xl-9'>\n <div className='col-xl-5'>\n <ShareAvatar shareLink={shareData.share} classroomName={findClassroomName()} />\n </div>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 ms-2 col-xl-3'>{formatDate(shareData.dateShared)}</p>\n {!isCollection ? (\n <>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 col-xl-2'><Text namespace={namespace} phrase='views' options={{ smartCount: shareData.viewCount }} /></p>\n </>\n ) : (\n <p className='mb-0 d-none d-xl-block col-xl-2'>-</p>\n )}\n\n <p onClick={onRowClick} className='cursor-pointer p-0 m-0 text-info col-xl-2'>View report</p>\n </div>\n </div>\n </div>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"background\":\"HAuP3\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/my-shares/constants/DemoInsights';\nimport { DEMO_INSIGHTS_ACTION, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nimport styles from './my-shares-demo-insights.scss';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n liteUrl: string;\n imageCdnUrl: string;\n yearGroups: YearGroup[];\n breakpoints: Breakpoints;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isStaging = props.liteUrl.includes('staging');\n\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: isStaging ? DEMO_INTERACTIVE_STAGING_ID : DEMO_INTERACTIVE_PROD_ID\n };\n }\n\n function getObjectActions() {\n return [\n {\n ...DEMO_INSIGHTS_ACTION,\n button: !isMobile\n }\n ];\n }\n\n return (\n <div>\n <MySharesTableHeading heading={getPhrase('demoHeading')} isFirst={true} />\n\n <div className={`${styles.background} rounded-3 border-md bg-light-orange mb-4`}>\n <MySharesTableRow\n shareData={{ ...DEMO_INSIGHTS_SHARE, sharedObject: getDemoInteractive() }}\n getObjectActions={getObjectActions}\n getObjectAppLink={() => null}\n imageCdnUrl={props.imageCdnUrl}\n yearGroups={props.yearGroups}\n breakpoints={props.breakpoints}\n >\n <div className='d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2'>\n <Text namespace={namespace} phrase='demoInsightPill' />\n </div>\n </MySharesTableRow>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { AudienceFilterView } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterView';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\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';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsAdminAlert } from 'apps/my-shares/components/insights-admin-alert/InsightsAdminAlert';\nimport { InsightsTypeFilters } from 'apps/my-shares/components/insights-list/type-filter/InsightsTypeFilters';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table-v2/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table-v2/partial-loading/PartialMySharesTable';\nimport { useMySharesTable } from 'apps/my-shares/hooks/useMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getShareObjectActions, getSharesParams } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n typeId: string | string[];\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n // Shared hooks\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasShareFlowV2, hasClassrooms } = useSettings(null);\n const { isPlugin } = usePluginHelper();\n const breakpoints = useBreakpoints();\n const { accessPolicy } = useAccessPolicy();\n\n const sharesParams = getSharesParams(props.typeId);\n\n // Local variables\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2;\n const hasInsightsPermission = hasShareFlowV2 && hasPermissions(PermissionName.ViewInsights);\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights;\n\n // Flight fetching\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n const shareData = useMySharesTable(sharesParams.sentSharesParams, true, shouldFetch);\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasShareFlowV2))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='d-flex justify-content-between border-bottom pb-3 mb-3'>\n <h1 className='mb-1'>Reports</h1>\n\n <AudienceFilterView hasClassroomsFeature={hasClassrooms} />\n </div>\n\n <div className='mb-3'>\n <InsightsTypeFilters\n appLink={sharesParams.currentAppLink}\n typeIdParams={sharesParams.typeIdAppLinkParams}\n breakpoints={breakpoints}\n />\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight\n demoInteractive={demoInteractive.data}\n liteUrl={config.data?.liteUrl}\n breakpoints={breakpoints}\n imageCdnUrl={shareData.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n }\n\n {(() => {\n if (shareData.showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!shareData.sentShares.length)\n return (\n <MySharesTableEmptyState />\n );\n\n return (\n <>\n <MySharesTable\n sentShares={shareData.sentShares}\n sharedObjects={shareData.sharedObjects.items}\n shareRecipients={shareData.shareRecipients.items}\n interactivesPendingReview={shareData.interactivesPendingReview.itemsArr}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={(obj, shareId) => getShareObjectActions(\n obj,\n shareId,\n sharesParams.audienceAppLinkParams,\n hasInsightsPermission,\n isPlugin,\n breakpoints\n )}\n groupByDateShared\n breakpoints={breakpoints}\n hasDemoInsights={showDemoInsight}\n imageCdnUrl={config.data?.imageCdnUrl}\n yearGroups={yearGroups.data}\n />\n {(shareData.hasMore || shareData.isFetching) &&\n <InfiniteScrollFooter\n isFetching={shareData.isFetching}\n fetchNext={shareData.fetchNext}\n nextCursor={shareData.nextCursor}\n />\n }\n </>\n );\n })()}\n </div>\n );\n}\n"],"names":["useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","map","chunk","users","data","isLoading","hasCompleted","OnlineSupportArticle","LiteSupportArticle","InsightsDemoRequests","interactive","url","key","normalize","interactiveMetadata","interactiveResults","videoViews","individualHeatmap","aggregateHeatmap","AppRouteHelper","updateParams","params","options","appLink","currentParams","keysToRemove","updatedParams","merge","updatedAppLink","mapColourToBsVariant","groupColour","namespace","InsightsAdminAlert","props","storage","show","setShow","hasAnalytics","role","className","phrase","href","video","analyticsUrl","videoRoute","typeId","id","getAnalyticsUrl","target","svgName","onClick","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","getPhrase","DEMO_INSIGHTS_SHARE","share","shareId","type","sharedObject","shareRecipients","dateShared","Date","toISOString","viewCount","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTION","label","group","ClassroomRequests","classroom","classroomGroup","getClassroomsById","ids","sort","query","join","getClassroomGroupsById","userClassrooms","cursor","success","error","always","UrlHelper","getPinnedClassrooms","userId","customerId","ObjectStatus","getPublished","LanguageService","CLASSROOM_DISPLAY_LIMIT","AudienceFilterItem","user","object","MasterType","name","surname","subHeading","classrooms","length","c","smartCount","getClassroomPhrase","getSubHeading","svgContainerClassName","onSelect","onToggleSelected","selected","hideCheckbox","Checkbox","checked","onChange","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","isPinned","IconCircle","variant","svgSize","SvgContainer","S","metadata","colour","EmptySearchResults","hasClassroomsFeature","ArticleHelper","AudienceFilterSearch","SearchBar","onQueryChange","setQuery","getRemoteUrl","baseUrl","gatewayApiUrl","index","FilterConstants","currentUser","requestHeaders","authorization","userToken","value","formatRemoteSuggestions","suggestions","results","placeholder","limitedFeatureSet","suggestionsHeading","alwaysRenderSuggestions","resetSuggestionsOnNoActivation","onSuggestionSelected","shouldUpdateQueryOnSelection","getSuggestionComponent","suggestion","isSelected","getEmptyStateComponent","theme","container","suggestionsContainerOpen","suggestionHighlighted","sectionContainer","loadingComponentClassName","searchIconPlacement","autoFocusInput","allowableSuggestionFetchRequestedReasons","debounceTime","showClearInputIcon","resetSuggestionsOnClear","onClickClearInput","MAX_HEIGHT","filterAudienceById","audience","filter","a","some","toString","SelectedAudienceList","selections","s","idx","SuggestedAudienceList","pinned","InsightsAudienceFilterMenu","selectedIds","searchSelections","setSearchSelections","useSearchSelections","audienceObjects","ArrayHelper","suggestedIds","pinnedSuggestions","pinnedIds","deselectAll","filteredSuggestions","filteredPinned","autoHeight","autoHeightMax","selection","objectsToAdd","objectIdsToRemove","includes","onClickApply","getIds","obj","Object","keys","forEach","push","useAudienceSelections","queryParams","ObjectHelper","setSelections","audienceQueryParams","classroomGroups","paramKey","objectId","getUpdatedAudienceQueryParams","AudienceFilterView","UserRequests","config","ConfigRequests","pinnedClassrooms","dispatch","getRequest","useFetchClassrooms","suggestedClassrooms","selectedUsers","hasClassrooms","useSettings","selectedClassrooms","selectedClassroomGroups","useFetchAudienceObjects","items","filterLabel","classroomIds","groupIds","userIds","onlyClassroomsSelected","onlyGroupsSelected","onlyUsersSelected","noSelections","singleClassroomSelected","singleGroupSelected","mixedSelections","lastSelection","pop","useGetAudienceFilterLabel","pinnedClassroomIds","getSuggestedClassroomIds","showDropdown","setShowDropdown","applyFilter","AnalyticsHelper","actionType","descriptor","location","entity","dataLoaded","hideAudienceFilter","hasSelections","values","Array","isArray","Dropdown","onToggle","align","InsightsTypeFilters","isMobile","breakpoints","xs","sm","moreFilterOptions","moreFiltersSelected","typeIdParams","option","moreFilters","setMoreFilters","resetFilters","Text","InsightTypeFilterButton","typeFilters","isShowing","find","selectedFilter","currentAppLink","newType","newAppLink","getTypePhrase","AppLink","ariaLabel","MySharesTableHeading","heading","isFirst","ShareObjectTitle","VideoHelper","canNavigate","subTextPhrase","getSubTextPhrase","VideoSubText","analyticsOptions","TitleSubText","requireMarking","MySharesTableRow","classroomId","shareData","isDesktop","xl","xxl","isCollection","onRowClick","goToReport","getObjectActions","SharedObjectImage","showVideoMetadata","locationContext","imageOptions","size","pendingReview","showCollectionMask","showVideoCount","children","ShareAvatar","shareLink","classroomName","ShareLinkHelper","recipient","MySharesDemoInsight","isStaging","liteUrl","demoInteractive","button","getObjectAppLink","yearGroups","MySharesEmptyState","EmptyState","src","ImageUrls","altText","text","analyticsData","workflowPhase","SignUp","MySharesView","useSetPageMetadata","title","usePermissions","hasPermissions","hasLocalPermissions","hasShareFlowV2","isPlugin","usePluginHelper","useBreakpoints","accessPolicy","useAccessPolicy","sharesParams","shouldFetch","PermissionName","hasInsightsPermission","showDemoInsight","hasDemoInsights","isAuthenticated","CustomerRequests","useMySharesTable","sentSharesParams","analyticsWebUrl","typeIdAppLinkParams","showPartialLoading","PartialMySharesTable","sentShares","MySharesTable","sharedObjects","interactivesPendingReview","itemsArr","audienceAppLinkParams","groupByDateShared","hasMore","isFetching","InfiniteScrollFooter","fetchNext","nextCursor","MySharesTableEmptyState"],"sourceRoot":""}