@clickview/lite 0.57.2-rc.2 → 0.57.3-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{3137-lite-7da84a8e68.chunk.css → 3137-lite-8afb370875.chunk.css} +1 -1
- package/dist/scripts/{1125-a24f83a3f3-lite.chunk.js → 1125-0e659106d9-lite.chunk.js} +2 -2
- package/dist/scripts/{1125-a24f83a3f3-lite.chunk.js.map → 1125-0e659106d9-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1340-3f5e7d4623-lite.chunk.js → 1340-c78a7acd0d-lite.chunk.js} +2 -2
- package/dist/scripts/{1340-3f5e7d4623-lite.chunk.js.map → 1340-c78a7acd0d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{154-81a4eabaae-lite.chunk.js → 154-fa5b45d1bf-lite.chunk.js} +2 -2
- package/dist/scripts/{154-81a4eabaae-lite.chunk.js.map → 154-fa5b45d1bf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1913-6a6bb3f16f-lite.chunk.js → 1913-6a7d99b96f-lite.chunk.js} +2 -2
- package/dist/scripts/{1913-6a6bb3f16f-lite.chunk.js.map → 1913-6a7d99b96f-lite.chunk.js.map} +1 -1
- package/dist/scripts/1958-cf5dd56576-lite.chunk.js +2 -0
- package/dist/scripts/{1958-31e6049ac7-lite.chunk.js.map → 1958-cf5dd56576-lite.chunk.js.map} +1 -1
- package/dist/scripts/{209-4a322eae44-lite.chunk.js → 209-396b9a7f13-lite.chunk.js} +2 -2
- package/dist/scripts/{209-4a322eae44-lite.chunk.js.map → 209-396b9a7f13-lite.chunk.js.map} +1 -1
- package/dist/scripts/2182-a5652609bb-lite.chunk.js +2 -0
- package/dist/scripts/2182-a5652609bb-lite.chunk.js.map +1 -0
- package/dist/scripts/{2208-a9d679d40c-lite.chunk.js → 2208-5fed507ca8-lite.chunk.js} +2 -2
- package/dist/scripts/{2208-a9d679d40c-lite.chunk.js.map → 2208-5fed507ca8-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2402-2d435f7027-lite.chunk.js → 2402-300aa81eaf-lite.chunk.js} +2 -2
- package/dist/scripts/{2402-2d435f7027-lite.chunk.js.map → 2402-300aa81eaf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3137-51febcedd6-lite.chunk.js → 3137-00d0d09d82-lite.chunk.js} +2 -2
- package/dist/scripts/{3137-51febcedd6-lite.chunk.js.map → 3137-00d0d09d82-lite.chunk.js.map} +1 -1
- package/dist/scripts/338-5c6ffa41bb-lite.chunk.js +3 -0
- package/dist/scripts/338-5c6ffa41bb-lite.chunk.js.map +1 -0
- package/dist/scripts/{3962-6bfcebace6-lite.chunk.js → 3962-eaa18d5ab6-lite.chunk.js} +2 -2
- package/dist/scripts/{3962-6bfcebace6-lite.chunk.js.map → 3962-eaa18d5ab6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4395-389855e87f-lite.chunk.js → 4395-9d987fe2e6-lite.chunk.js} +2 -2
- package/dist/scripts/{4395-389855e87f-lite.chunk.js.map → 4395-9d987fe2e6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{4591-1e137b9a3f-lite.chunk.js → 4591-19ee265d34-lite.chunk.js} +2 -2
- package/dist/scripts/4591-19ee265d34-lite.chunk.js.map +1 -0
- package/dist/scripts/{467-baec908c73-lite.chunk.js → 467-1550deaaa1-lite.chunk.js} +2 -2
- package/dist/scripts/{467-baec908c73-lite.chunk.js.map → 467-1550deaaa1-lite.chunk.js.map} +1 -1
- package/dist/scripts/5157-9396b0580d-lite.chunk.js +2 -0
- package/dist/scripts/{5157-b1d38e123c-lite.chunk.js.map → 5157-9396b0580d-lite.chunk.js.map} +1 -1
- package/dist/scripts/{528-0e18ce97a9-lite.chunk.js → 528-3120366abc-lite.chunk.js} +2 -2
- package/dist/scripts/{528-0e18ce97a9-lite.chunk.js.map → 528-3120366abc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{5376-6e993d6097-lite.chunk.js → 5376-38456da0db-lite.chunk.js} +3 -3
- package/dist/scripts/{5376-6e993d6097-lite.chunk.js.map → 5376-38456da0db-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6263-c6ce662fc3-lite.chunk.js → 6263-c665ac8df6-lite.chunk.js} +2 -2
- package/dist/scripts/{6263-c6ce662fc3-lite.chunk.js.map → 6263-c665ac8df6-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6290-dd18f6a50a-lite.chunk.js → 6290-a295d749c3-lite.chunk.js} +2 -2
- package/dist/scripts/{6290-dd18f6a50a-lite.chunk.js.map → 6290-a295d749c3-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6480-9f3dc79b38-lite.chunk.js → 6480-03513bbd54-lite.chunk.js} +2 -2
- package/dist/scripts/{6480-9f3dc79b38-lite.chunk.js.map → 6480-03513bbd54-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7112-ea440dfba0-lite.chunk.js → 7112-2e77a3e7af-lite.chunk.js} +3 -3
- package/dist/scripts/{7112-ea440dfba0-lite.chunk.js.map → 7112-2e77a3e7af-lite.chunk.js.map} +1 -1
- package/dist/scripts/{7178-c592da7054-lite.chunk.js → 7178-f3794c1ee5-lite.chunk.js} +2 -2
- package/dist/scripts/{7178-c592da7054-lite.chunk.js.map → 7178-f3794c1ee5-lite.chunk.js.map} +1 -1
- package/dist/scripts/{775-b6cb8f1808-lite.chunk.js → 775-d6b0a7afbd-lite.chunk.js} +3 -3
- package/dist/scripts/{775-b6cb8f1808-lite.chunk.js.map → 775-d6b0a7afbd-lite.chunk.js.map} +1 -1
- package/dist/scripts/823-0a1356d38c-lite.chunk.js +2 -0
- package/dist/scripts/823-0a1356d38c-lite.chunk.js.map +1 -0
- package/dist/scripts/{8489-7779fd40b3-lite.chunk.js → 8489-88ab052e8c-lite.chunk.js} +3 -3
- package/dist/scripts/{8489-7779fd40b3-lite.chunk.js.map → 8489-88ab052e8c-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8722-095bf62b96-lite.chunk.js → 8722-ed6103f3e4-lite.chunk.js} +2 -2
- package/dist/scripts/{8722-095bf62b96-lite.chunk.js.map → 8722-ed6103f3e4-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8905-46d89811eb-lite.chunk.js → 8905-799dc47805-lite.chunk.js} +2 -2
- package/dist/scripts/{8905-46d89811eb-lite.chunk.js.map → 8905-799dc47805-lite.chunk.js.map} +1 -1
- package/dist/scripts/{8935-2bb61f918c-lite.chunk.js → 8935-38d780c423-lite.chunk.js} +3 -3
- package/dist/scripts/{8935-2bb61f918c-lite.chunk.js.map → 8935-38d780c423-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9118-20d1a60a52-lite.chunk.js → 9118-c769eeb11a-lite.chunk.js} +2 -2
- package/dist/scripts/{9118-20d1a60a52-lite.chunk.js.map → 9118-c769eeb11a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9230-77ff8b16ac-lite.chunk.js → 9230-1ffbf1807e-lite.chunk.js} +3 -3
- package/dist/scripts/{9230-77ff8b16ac-lite.chunk.js.map → 9230-1ffbf1807e-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9614-2bca60768e-lite.chunk.js → 9614-6e5babb89a-lite.chunk.js} +2 -2
- package/dist/scripts/{9614-2bca60768e-lite.chunk.js.map → 9614-6e5babb89a-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9719-0e59bf30a5-lite.chunk.js → 9719-28c14a0783-lite.chunk.js} +3 -3
- package/dist/scripts/{9719-0e59bf30a5-lite.chunk.js.map → 9719-28c14a0783-lite.chunk.js.map} +1 -1
- package/dist/scripts/{bundle-fb8200eefd.min.js → bundle-b25c09d3e8.min.js} +3 -3
- package/dist/scripts/{bundle-fb8200eefd.min.js.map → bundle-b25c09d3e8.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/1958-31e6049ac7-lite.chunk.js +0 -2
- package/dist/scripts/2182-aa9aca3196-lite.chunk.js +0 -2
- package/dist/scripts/2182-aa9aca3196-lite.chunk.js.map +0 -1
- package/dist/scripts/338-8b4fba84c0-lite.chunk.js +0 -3
- package/dist/scripts/338-8b4fba84c0-lite.chunk.js.map +0 -1
- package/dist/scripts/4591-1e137b9a3f-lite.chunk.js.map +0 -1
- package/dist/scripts/5157-b1d38e123c-lite.chunk.js +0 -2
- package/dist/scripts/823-697bd66d4d-lite.chunk.js +0 -2
- package/dist/scripts/823-697bd66d4d-lite.chunk.js.map +0 -1
- /package/dist/scripts/{3137-51febcedd6-lite.chunk.js.LICENSE.txt → 3137-00d0d09d82-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{338-8b4fba84c0-lite.chunk.js.LICENSE.txt → 338-5c6ffa41bb-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5376-6e993d6097-lite.chunk.js.LICENSE.txt → 5376-38456da0db-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7112-ea440dfba0-lite.chunk.js.LICENSE.txt → 7112-2e77a3e7af-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{775-b6cb8f1808-lite.chunk.js.LICENSE.txt → 775-d6b0a7afbd-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8489-7779fd40b3-lite.chunk.js.LICENSE.txt → 8489-88ab052e8c-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8935-2bb61f918c-lite.chunk.js.LICENSE.txt → 8935-38d780c423-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9230-77ff8b16ac-lite.chunk.js.LICENSE.txt → 9230-1ffbf1807e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9719-0e59bf30a5-lite.chunk.js.LICENSE.txt → 9719-28c14a0783-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-fb8200eefd.min.js.LICENSE.txt → bundle-b25c09d3e8.min.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/467-baec908c73-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/ClassroomRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.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/admin-audience-filter-menu/admin-audience-filter-menu.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/admin-audience-filter-menu/AdminAudienceFilterMenu.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/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\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};","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}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"oCnQi\"};","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 { 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}\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 <div\n className='d-flex align-items-center py-1'\n >\n <Checkbox\n id={props.object.id}\n checked={props.selected}\n onChange={onSelect}\n />\n <div\n className={`${styles.avatarContainer} cursor-pointer me-2`}\n onClick={onSelect}\n >\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 <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' svgSize={SvgContainerSize.Large} />\n </div>\n }\n {!!classroomGroup &&\n <div className={svgContainerClassName}>\n <IconCircle svgName={cvSvgLibrary.Group} variant={mapColourToBsVariant(classroomGroup.metadata?.colour)} />\n </div>\n }\n </div>\n <div className='flex-grow-1 cursor-pointer' onClick={onSelect}>\n <h4 className='font-size-normal fw-normal m-0'>{name}</h4>\n {!!subHeading &&\n <p className='text-secondary m-0'>{subHeading}</p>\n }\n </div>\n </div>\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 limitedFeatureSet: 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.limitedFeatureSet &&\n <>\n <span>{getPhrase('noResultsSuggestion')} </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 gatewayApiUrl: string;\n userToken: HashObject;\n currentUser: CurrentUser;\n imageCdnUrl: string;\n limitedFeatureSet?: boolean;\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 getRemoteUrl={getRemoteUrl}\n requestHeaders={{\n authorization: `Bearer ${props.userToken.value}`\n }}\n formatRemoteSuggestions={(suggestions: ShareSearchResponse) => suggestions?.results}\n placeholder={getPhrase(!props.limitedFeatureSet ? 'placeholder' : 'placeholderLimited')}\n suggestionsHeading={getPhrase('searchResults')}\n alwaysRenderSuggestions\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 />\n );\n }}\n getEmptyStateComponent={query => <EmptySearchResults query={query} limitedFeatureSet={props.limitedFeatureSet} />}\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 />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"tRQAe\"};","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 './admin-audience-filter-menu.scss';\n\nconst namespace = 'shared.adminAudienceFilterMenu';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_HEIGHT = 500;\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 onSelect: (...selection: AudienceSelection[]) => void;\n imageCdnUrl: string;\n}\n\nfunction SelectedAudienceList(props: BaseAudienceListProps): JSX.Element {\n if (!props.selections.length)\n return <></>;\n\n return (\n <ul className='list-unstyled 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 />\n </li>\n ))}\n </ul>\n );\n}\n\ninterface SuggestedAudienceListProps extends BaseAudienceListProps {\n isSelected: (object: BaseObject) => boolean;\n}\n\nfunction SuggestedAudienceList(props: SuggestedAudienceListProps): JSX.Element {\n if (!props.selections.length)\n return <></>;\n\n return (\n <>\n <p className='mb-2'><strong>{getPhrase('suggestions')}</strong></p>\n <ul className='list-unstyled m-0'>\n {props.selections.map((s, idx) => (\n <li key={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 />\n </li>\n ))}\n </ul>\n </>\n );\n}\n\ninterface AdminAudienceFilterMenuProps {\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}\n\nexport function AdminAudienceFilterMenu(props: AdminAudienceFilterMenuProps): 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\n const allSelected = suggestions.every(isSelected);\n const nonSuggestedSelections = selections.filter(s => !isSuggested(s));\n\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 isSuggested(object: BaseObject): boolean {\n if (!props.suggestedIds?.length)\n return false;\n\n return props.suggestedIds.some(id => id.toString() === object.id.toString());\n }\n\n function selectAllSuggestions(): void {\n props.onSelect(...suggestions.map(s => ({ object: s, selected: true })));\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 return (\n <div className={styles.menu}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <div className='px-3'>\n <AudienceFilterSearch\n onSelect={onSelectSearchResult}\n isSelected={isSelected}\n gatewayApiUrl={props.gatewayApiUrl}\n userToken={props.userToken}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n limitedFeatureSet={props.limitedFeatureSet}\n />\n {(!!selections.length || !!suggestions.length) &&\n <>\n <button\n className='btn btn-link text-info p-0 mt-2 mb-1'\n onClick={allSelected ? deselectAll : selectAllSuggestions}\n >\n {getPhrase(allSelected ? 'deselectAll' : 'selectAll')}\n </button>\n <SelectedAudienceList\n selections={nonSuggestedSelections}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n />\n <SuggestedAudienceList\n selections={suggestions}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n isSelected={isSelected}\n />\n </>\n }\n </div>\n </Scrollbars>\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 { HashObject } from 'libs/common/react/interfaces';\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 { 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\n const selectedClassrooms = Flight.useBasicFetch<Classroom[]>(audienceQueryParams.classrooms?.length\n && ClassroomRequests.getClassroomsById(audienceQueryParams.classrooms));\n\n const selectedClassroomGroups = Flight.useBasicFetch<ClassroomGroup[]>(audienceQueryParams.classroomGroups?.length\n && ClassroomRequests.getClassroomGroupsById(audienceQueryParams.classroomGroups));\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: HashObject):\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: HashObject): 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 const multipleGroupsSelected = !!classroomIds.length && !!groupIds.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('everyone');\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 if (multipleGroupsSelected)\n return getPhrase('groups', { smartCount: groupIds.length + classroomIds.length });\n}\n\nexport function useFetchClassrooms(): SelectAllPagesResult<Classroom> {\n const dispatch = useDispatch();\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.userClassrooms(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 { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { AdminAudienceFilterMenu } from 'libs/shared/apps/analytics/views/audience-filter/components/admin-audience-filter-menu/AdminAudienceFilterMenu';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { 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}\n\nexport function AudienceFilterView(props: AudienceFilterViewProps): JSX.Element {\n const queryParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n\n const [ selections, setSelections ] = useAudienceSelections(queryParams);\n const classrooms = useFetchClassrooms();\n const suggestions = { classrooms: getSuggestedClassroomIds() };\n\n const audience = useFetchAudienceObjects(queryParams, classrooms.items);\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 const filterLabel = useGetAudienceFilterLabel(queryParams);\n\n function onToggle(show: boolean): void {\n if (show)\n return;\n\n AppRouteHelper.updateParams(ObjectHelper.deepClone(selections), { merge: true });\n }\n\n function hideAudienceFilter(): boolean {\n return !classrooms.items?.length;\n }\n\n function getSuggestedClassroomIds() {\n return classrooms.items?.length\n ? classrooms.items.map(classroom => classroom.id).slice(0, 5)\n : [];\n }\n\n const dataLoaded = !!config.data && classrooms.hasCompleted;\n\n if (hideAudienceFilter())\n return <></>;\n\n return (\n <Dropdown className={props.className ?? ''} onToggle={onToggle}>\n <Dropdown.Toggle\n id='audience-filter-toggle'\n variant='outline-dark'\n className={`no-caret ${styles.toggle}`}\n >\n {filterLabel}\n </Dropdown.Toggle>\n <Dropdown.Menu className='py-3' align='end'>\n {dataLoaded &&\n <AdminAudienceFilterMenu\n gatewayApiUrl={config.data.gatewayApiUrl}\n userToken={userToken.data}\n audienceObjects={audience}\n selectedIds={getIds(selections)}\n suggestedIds={getIds(suggestions)}\n onSelect={setSelections}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n />\n }\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\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 = '22110291468057',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\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"],"names":["ClassroomRequests","classroom","id","url","key","classroomGroup","getClassroomsById","ids","sort","query","map","join","getClassroomGroupsById","userClassrooms","cursor","success","error","always","useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","chunk","users","data","isLoading","hasCompleted","AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","classrooms","classroomGroups","getParam","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getPhrase","LanguageService","CLASSROOM_DISPLAY_LIMIT","AudienceFilterItem","props","user","object","typeId","MasterType","name","surname","subHeading","length","c","smartCount","getClassroomPhrase","getSubHeading","svgContainerClassName","onSelect","onToggleSelected","selected","className","Checkbox","checked","onChange","onClick","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","IconCircle","svgName","variant","svgSize","SvgContainer","S","metadata","colour","EmptySearchResults","limitedFeatureSet","href","ArticleHelper","target","AudienceFilterSearch","SearchBar","getRemoteUrl","baseUrl","UrlHelper","gatewayApiUrl","index","FilterConstants","currentUser","customerId","requestHeaders","authorization","userToken","value","formatRemoteSuggestions","suggestions","results","placeholder","suggestionsHeading","alwaysRenderSuggestions","onSuggestionSelected","shouldUpdateQueryOnSelection","getSuggestionComponent","suggestion","isSelected","getEmptyStateComponent","theme","container","suggestionsContainerOpen","suggestionHighlighted","sectionContainer","loadingComponentClassName","searchIconPlacement","autoFocusInput","allowableSuggestionFetchRequestedReasons","debounceTime","MAX_HEIGHT","filterAudienceById","audience","filter","a","some","toString","SelectedAudienceList","selections","s","idx","SuggestedAudienceList","AdminAudienceFilterMenu","selectedIds","searchSelections","setSearchSelections","useSearchSelections","audienceObjects","ArrayHelper","suggestedIds","allSelected","every","nonSuggestedSelections","isSuggested","autoHeight","autoHeightMax","selection","objectsToAdd","objectIdsToRemove","includes","getIds","obj","Object","keys","forEach","push","useAudienceSelections","queryParams","ObjectHelper","setSelections","audienceQueryParams","paramKey","objectId","currentParams","getUpdatedAudienceQueryParams","AudienceFilterView","dispatch","getRequest","useFetchClassrooms","items","slice","getSuggestedClassroomIds","suggestedClassrooms","selectedUsers","selectedClassrooms","selectedClassroomGroups","useFetchAudienceObjects","UserRequests","config","ConfigRequests","filterLabel","classroomIds","groupIds","userIds","onlyClassroomsSelected","onlyGroupsSelected","onlyUsersSelected","noSelections","multipleGroupsSelected","singleClassroomSelected","singleGroupSelected","group","useGetAudienceFilterLabel","dataLoaded","hideAudienceFilter","Dropdown","onToggle","show","AppRouteHelper","merge","align","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","label","FunctionHelper","action","AppLink","analyticsData","analyticsOptions","openInNewTab","disabled","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","actions","isLazy","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","dropdownToggleClassName","type","fetchMore","size","dropdownToggleSvgSize","showDivider","undefined","tooltip","Tooltip","title","spanHack","defaultProps","OnlineSupportArticle","LiteSupportArticle","getAnalyticsRequestKey","baseKey","sharerId","start","end","userIdKey","userId","groupIdKey","groupId","updateParams","options","keysToRemove","updatedParams","updatedAppLink","mapColourToBsVariant","groupColour"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/467-1550deaaa1-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/ClassroomRequests.ts","file:///app/packages/libs/shared/src/apps/analytics/hooks/UseEngagementUsers.ts","file:///app/packages/libs/shared/src/apps/analytics/utils/AnalyticsFilterUtils.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/admin-audience-filter-menu/admin-audience-filter-menu.scss","file:///app/packages/libs/shared/src/apps/analytics/views/audience-filter/components/admin-audience-filter-menu/AdminAudienceFilterMenu.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/libs/shared/src/components/actions/actions.scss","file:///app/packages/libs/shared/src/components/actions/ActionsDropdown.tsx","file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/utils/AppRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts"],"sourcesContent":["import { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\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};","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}","import { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { DateRangeQueryParams } from 'libs/shared/apps/analytics/interfaces/DateRangeQueryParams';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nexport const AnalyticsFilterHelper = {\n getAudienceAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { users, classrooms, classroomGroups } = params;\n\n const getParam = (key: keyof AudienceQueryParams) => {\n const param = params[key];\n\n if (!param)\n return;\n\n return Array.isArray(param) ? param : [param];\n };\n\n const audienceFilters: AudienceQueryParams = {};\n\n if (users)\n audienceFilters.users = getParam('users');\n\n if (classrooms)\n audienceFilters.classrooms = getParam('classrooms');\n\n if (classroomGroups)\n audienceFilters.classroomGroups = getParam('classroomGroups');\n\n return audienceFilters;\n },\n getDateRangeAppLinkParams: () => {\n const { appLink } = ContextService.getCurrentRoute();\n const params = ObjectHelper.isObject(appLink.params) ? appLink.params as HashObject : {};\n const { from, to, rangeName } = params;\n\n const dateRangeFilters: DateRangeQueryParams = {};\n\n if (from)\n dateRangeFilters.from = from;\n\n if (to)\n dateRangeFilters.to = to;\n\n if (rangeName)\n dateRangeFilters.rangeName = rangeName;\n\n return dateRangeFilters;\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"oCnQi\"};","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 { 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}\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 <div\n className='d-flex align-items-center py-1'\n >\n <Checkbox\n id={props.object.id}\n checked={props.selected}\n onChange={onSelect}\n />\n <div\n className={`${styles.avatarContainer} cursor-pointer me-2`}\n onClick={onSelect}\n >\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 <IconCircle svgName={cvSvgLibrary.Classrooms} variant='teal' svgSize={SvgContainerSize.Large} />\n </div>\n }\n {!!classroomGroup &&\n <div className={svgContainerClassName}>\n <IconCircle svgName={cvSvgLibrary.Group} variant={mapColourToBsVariant(classroomGroup.metadata?.colour)} />\n </div>\n }\n </div>\n <div className='flex-grow-1 cursor-pointer' onClick={onSelect}>\n <h4 className='font-size-normal fw-normal m-0'>{name}</h4>\n {!!subHeading &&\n <p className='text-secondary m-0'>{subHeading}</p>\n }\n </div>\n </div>\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 limitedFeatureSet: 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.limitedFeatureSet &&\n <>\n <span>{getPhrase('noResultsSuggestion')} </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 gatewayApiUrl: string;\n userToken: HashObject;\n currentUser: CurrentUser;\n imageCdnUrl: string;\n limitedFeatureSet?: boolean;\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 getRemoteUrl={getRemoteUrl}\n requestHeaders={{\n authorization: `Bearer ${props.userToken.value}`\n }}\n formatRemoteSuggestions={(suggestions: ShareSearchResponse) => suggestions?.results}\n placeholder={getPhrase(!props.limitedFeatureSet ? 'placeholder' : 'placeholderLimited')}\n suggestionsHeading={getPhrase('searchResults')}\n alwaysRenderSuggestions\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 />\n );\n }}\n getEmptyStateComponent={query => <EmptySearchResults query={query} limitedFeatureSet={props.limitedFeatureSet} />}\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 />\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"menu\":\"tRQAe\"};","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 './admin-audience-filter-menu.scss';\n\nconst namespace = 'shared.adminAudienceFilterMenu';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_HEIGHT = 500;\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 onSelect: (...selection: AudienceSelection[]) => void;\n imageCdnUrl: string;\n}\n\nfunction SelectedAudienceList(props: BaseAudienceListProps): JSX.Element {\n if (!props.selections.length)\n return <></>;\n\n return (\n <ul className='list-unstyled 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 />\n </li>\n ))}\n </ul>\n );\n}\n\ninterface SuggestedAudienceListProps extends BaseAudienceListProps {\n isSelected: (object: BaseObject) => boolean;\n}\n\nfunction SuggestedAudienceList(props: SuggestedAudienceListProps): JSX.Element {\n if (!props.selections.length)\n return <></>;\n\n return (\n <>\n <p className='mb-2'><strong>{getPhrase('suggestions')}</strong></p>\n <ul className='list-unstyled m-0'>\n {props.selections.map((s, idx) => (\n <li key={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 />\n </li>\n ))}\n </ul>\n </>\n );\n}\n\ninterface AdminAudienceFilterMenuProps {\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}\n\nexport function AdminAudienceFilterMenu(props: AdminAudienceFilterMenuProps): 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\n const allSelected = suggestions.every(isSelected);\n const nonSuggestedSelections = selections.filter(s => !isSuggested(s));\n\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 isSuggested(object: BaseObject): boolean {\n if (!props.suggestedIds?.length)\n return false;\n\n return props.suggestedIds.some(id => id.toString() === object.id.toString());\n }\n\n function selectAllSuggestions(): void {\n props.onSelect(...suggestions.map(s => ({ object: s, selected: true })));\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 return (\n <div className={styles.menu}>\n <Scrollbars autoHeight autoHeightMax={MAX_HEIGHT}>\n <div className='px-3'>\n <AudienceFilterSearch\n onSelect={onSelectSearchResult}\n isSelected={isSelected}\n gatewayApiUrl={props.gatewayApiUrl}\n userToken={props.userToken}\n imageCdnUrl={props.imageCdnUrl}\n currentUser={props.currentUser}\n limitedFeatureSet={props.limitedFeatureSet}\n />\n {(!!selections.length || !!suggestions.length) &&\n <>\n <button\n className='btn btn-link text-info p-0 mt-2 mb-1'\n onClick={allSelected ? deselectAll : selectAllSuggestions}\n >\n {getPhrase(allSelected ? 'deselectAll' : 'selectAll')}\n </button>\n <SelectedAudienceList\n selections={nonSuggestedSelections}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n />\n <SuggestedAudienceList\n selections={suggestions}\n onSelect={props.onSelect}\n imageCdnUrl={props.imageCdnUrl}\n isSelected={isSelected}\n />\n </>\n }\n </div>\n </Scrollbars>\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 { HashObject } from 'libs/common/react/interfaces';\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 { 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\n const selectedClassrooms = Flight.useBasicFetch<Classroom[]>(audienceQueryParams.classrooms?.length\n && ClassroomRequests.getClassroomsById(audienceQueryParams.classrooms));\n\n const selectedClassroomGroups = Flight.useBasicFetch<ClassroomGroup[]>(audienceQueryParams.classroomGroups?.length\n && ClassroomRequests.getClassroomGroupsById(audienceQueryParams.classroomGroups));\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: HashObject):\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: HashObject): 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 const multipleGroupsSelected = !!classroomIds.length && !!groupIds.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('everyone');\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 if (multipleGroupsSelected)\n return getPhrase('groups', { smartCount: groupIds.length + classroomIds.length });\n}\n\nexport function useFetchClassrooms(): SelectAllPagesResult<Classroom> {\n const dispatch = useDispatch();\n\n function getRequest(cursor?: string): Flight.Request {\n return ClassroomRequests.userClassrooms(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 { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { AdminAudienceFilterMenu } from 'libs/shared/apps/analytics/views/audience-filter/components/admin-audience-filter-menu/AdminAudienceFilterMenu';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { 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}\n\nexport function AudienceFilterView(props: AudienceFilterViewProps): JSX.Element {\n const queryParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n\n const [ selections, setSelections ] = useAudienceSelections(queryParams);\n const classrooms = useFetchClassrooms();\n const suggestions = { classrooms: getSuggestedClassroomIds() };\n\n const audience = useFetchAudienceObjects(queryParams, classrooms.items);\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 const filterLabel = useGetAudienceFilterLabel(queryParams);\n\n function onToggle(show: boolean): void {\n if (show)\n return;\n\n AppRouteHelper.updateParams(ObjectHelper.deepClone(selections), { merge: true });\n }\n\n function hideAudienceFilter(): boolean {\n return !classrooms.items?.length;\n }\n\n function getSuggestedClassroomIds() {\n return classrooms.items?.length\n ? classrooms.items.map(classroom => classroom.id).slice(0, 5)\n : [];\n }\n\n const dataLoaded = !!config.data && classrooms.hasCompleted;\n\n if (hideAudienceFilter())\n return <></>;\n\n return (\n <Dropdown className={props.className ?? ''} onToggle={onToggle}>\n <Dropdown.Toggle\n id='audience-filter-toggle'\n variant='outline-dark'\n className={`no-caret ${styles.toggle}`}\n >\n {filterLabel}\n </Dropdown.Toggle>\n <Dropdown.Menu className='py-3' align='end'>\n {dataLoaded &&\n <AdminAudienceFilterMenu\n gatewayApiUrl={config.data.gatewayApiUrl}\n userToken={userToken.data}\n audienceObjects={audience}\n selectedIds={getIds(selections)}\n suggestedIds={getIds(suggestions)}\n onSelect={setSelections}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n />\n }\n </Dropdown.Menu>\n </Dropdown>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"dropdownToggle\":\"UCAnJ\"};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { RandomHelper } from 'libs/common/react/utils/RandomHelper';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ActionOptions } from './Actions';\n\nimport styles from './actions.scss';\n\nfunction LazyDropdownItems(): JSX.Element {\n return (\n <>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '8rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '12rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '11rem' }}></div>\n </div>\n <div style={{ padding: '0.53125rem 1rem' }}>\n <div className='partial-loading-background' style={{ height: '1.0625rem', width: '9rem' }}></div>\n </div>\n </>\n );\n}\n\nfunction getDropdownItemClassName(actionClassName?: string): string {\n let className = 'dropdown-item';\n\n if (actionClassName)\n className += ` ${actionClassName}`;\n\n return className;\n}\n\nexport type DropdownActionOptions = Omit<ActionOptions, 'button'>;\n\ninterface ActionsDropdownItemProps {\n action: DropdownActionOptions;\n}\n\nfunction ActionsDropdownItem(props: ActionsDropdownItemProps): React.ReactElement {\n const label = FunctionHelper.isFunction(props.action.label)\n ? props.action.label\n : () => <>{props.action.label}</>;\n\n if (props.action.appLink)\n return (\n <AppLink\n appLink={props.action.appLink}\n onClick={props.action.onClick}\n className={getDropdownItemClassName(props.action.className)}\n analyticsData={props.action.analyticsData}\n analyticsOptions={props.action.analyticsOptions}\n openInNewTab={props.action.openInNewTab}\n disabled={props.action.disabled}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </AppLink>\n );\n\n function onClick(e: React.MouseEvent | React.KeyboardEvent): void {\n e.preventDefault();\n\n if (props.action.analyticsData && props.action.analyticsOptions)\n AnalyticsHelper.logUserAction(props.action.analyticsData, props.action.analyticsOptions);\n\n if (FunctionHelper.isFunction(props.action.onClick))\n props.action.onClick();\n\n if (props.action.href)\n Core.LocationUtils.PageLoad(props.action.href, props.action.openInNewTab);\n }\n\n if (props.action.href) {\n return (\n <a\n className={getDropdownItemClassName(props.action.className)}\n onClick={onClick}\n href={props.action.href}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2 align-middle' />}\n <span className='align-middle'>{label()}</span>\n </a>\n );\n }\n\n return (\n <span\n className={`cursor-pointer ${getDropdownItemClassName(props.action.className)}`}\n onClick={onClick}\n role='button'\n tabIndex={0}\n onKeyDown={(e: React.KeyboardEvent) => e.key === 'Enter' && onClick(e)}\n >\n {props.action.svgName && <SvgContainer svgName={props.action.svgName} className='d-inline-block svg-container me-2' />}\n {label()}\n </span>\n );\n}\n\ninterface ActionsDropdownProps {\n actions: DropdownActionOptions[];\n className?: string;\n dropdownToggleClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n fetchMore?: () => void;\n}\n\nActionsDropdown.defaultProps = {\n dropdownToggleClassName: 'btn btn-light',\n dropdownToggleSvgSize: SvgContainerSize.Small\n};\n\nexport function ActionsDropdown(props: ActionsDropdownProps): React.ReactElement {\n if (!props.actions || !props.actions.length)\n return <></>;\n\n const isLazy = props.actions.some(a => a.lazyPlaceholder);\n\n let className = 'dropdown';\n\n if (props.className)\n className += ` ${props.className}`;\n\n // Generate unique id to avoid collisions.\n const dropdownToggleId = `actions-dropdown-${RandomHelper.getRandomInt()}`;\n\n let dropdownToggleClassName = `dropdown-toggle px-0 ${styles.dropdownToggle}`;\n\n if (props.dropdownToggleClassName)\n dropdownToggleClassName += ` ${props.dropdownToggleClassName}`;\n\n let currentGroup: string;\n\n return (\n <div className={className}>\n <button\n className={dropdownToggleClassName}\n type='button'\n id={dropdownToggleId}\n data-bs-toggle='dropdown'\n data-toggle='dropdown'\n aria-haspopup='true'\n aria-expanded='false'\n aria-label={'More actions dropdown'}\n onClick={isLazy ? props.fetchMore : null}\n >\n <SvgContainer svgName={cvSvgLibrary.More} size={props.dropdownToggleSvgSize} />\n </button>\n <ul className='dropdown-menu dropdown-menu-end dropdown-menu-right font-size-normal' aria-labelledby={dropdownToggleId}>\n {isLazy ?\n <LazyDropdownItems /> :\n props.actions.map((a, idx) => {\n const showDivider = currentGroup !== undefined && currentGroup !== a.group;\n currentGroup = a.group;\n \n if (a.tooltip) {\n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <Tooltip title={a.tooltip} spanHack>\n <ActionsDropdownItem action={a} />\n </Tooltip>\n \n </li>\n );\n }\n \n return (\n <li key={idx}>\n {showDivider && <hr className='dropdown-divider' role='separator'></hr>}\n <ActionsDropdownItem action={a} />\n </li>\n );\n })\n }\n </ul>\n </div>\n );\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 { AnalyticsRequestFilter } from 'libs/shared/interfaces';\n\nexport function getAnalyticsRequestKey(baseKey: string, filter: AnalyticsRequestFilter, sharerId?: string): string {\n let key = `${baseKey}:${filter.start}:${filter.end}`;\n\n const userIdKey = Array.isArray(filter.userId) ? filter.userId.sort().join(':') : filter.userId;\n const groupIdKey = Array.isArray(filter.groupId) ? filter.groupId.sort().join(':') : filter.groupId;\n\n if (userIdKey)\n key += `:${userIdKey}`;\n\n if (groupIdKey)\n key += `:${groupIdKey}`;\n\n if (sharerId)\n key += `:${sharerId}`;\n\n return key;\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"],"names":["ClassroomRequests","classroom","id","url","key","classroomGroup","getClassroomsById","ids","sort","query","map","join","getClassroomGroupsById","userClassrooms","cursor","success","error","always","useChunkedUsersResponse","usersIds","userIdChunks","usersResponse","chunk","users","data","isLoading","hasCompleted","AnalyticsFilterHelper","getAudienceAppLinkParams","appLink","params","classrooms","classroomGroups","getParam","param","Array","isArray","audienceFilters","getDateRangeAppLinkParams","from","to","rangeName","dateRangeFilters","getPhrase","LanguageService","CLASSROOM_DISPLAY_LIMIT","AudienceFilterItem","props","user","object","typeId","MasterType","name","surname","subHeading","length","c","smartCount","getClassroomPhrase","getSubHeading","svgContainerClassName","onSelect","onToggleSelected","selected","className","Checkbox","checked","onChange","onClick","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","IconCircle","svgName","variant","svgSize","SvgContainer","S","metadata","colour","EmptySearchResults","limitedFeatureSet","href","ArticleHelper","target","AudienceFilterSearch","SearchBar","getRemoteUrl","baseUrl","UrlHelper","gatewayApiUrl","index","FilterConstants","currentUser","customerId","requestHeaders","authorization","userToken","value","formatRemoteSuggestions","suggestions","results","placeholder","suggestionsHeading","alwaysRenderSuggestions","onSuggestionSelected","shouldUpdateQueryOnSelection","getSuggestionComponent","suggestion","isSelected","getEmptyStateComponent","theme","container","suggestionsContainerOpen","suggestionHighlighted","sectionContainer","loadingComponentClassName","searchIconPlacement","autoFocusInput","allowableSuggestionFetchRequestedReasons","debounceTime","MAX_HEIGHT","filterAudienceById","audience","filter","a","some","toString","SelectedAudienceList","selections","s","idx","SuggestedAudienceList","AdminAudienceFilterMenu","selectedIds","searchSelections","setSearchSelections","useSearchSelections","audienceObjects","ArrayHelper","suggestedIds","allSelected","every","nonSuggestedSelections","isSuggested","autoHeight","autoHeightMax","selection","objectsToAdd","objectIdsToRemove","includes","getIds","obj","Object","keys","forEach","push","useAudienceSelections","queryParams","ObjectHelper","setSelections","audienceQueryParams","paramKey","objectId","currentParams","getUpdatedAudienceQueryParams","AudienceFilterView","dispatch","getRequest","useFetchClassrooms","items","slice","getSuggestedClassroomIds","suggestedClassrooms","selectedUsers","selectedClassrooms","selectedClassroomGroups","useFetchAudienceObjects","UserRequests","config","ConfigRequests","filterLabel","classroomIds","groupIds","userIds","onlyClassroomsSelected","onlyGroupsSelected","onlyUsersSelected","noSelections","multipleGroupsSelected","singleClassroomSelected","singleGroupSelected","group","useGetAudienceFilterLabel","dataLoaded","hideAudienceFilter","Dropdown","onToggle","show","AppRouteHelper","merge","align","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","label","FunctionHelper","action","AppLink","analyticsData","analyticsOptions","openInNewTab","disabled","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","actions","isLazy","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","dropdownToggleClassName","type","fetchMore","size","dropdownToggleSvgSize","showDivider","undefined","tooltip","Tooltip","title","spanHack","defaultProps","OnlineSupportArticle","LiteSupportArticle","getAnalyticsRequestKey","baseKey","sharerId","start","end","userIdKey","userId","groupIdKey","groupId","updateParams","options","keysToRemove","updatedParams","updatedAppLink","mapColourToBsVariant","groupColour"],"sourceRoot":""}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[5157],{97535:(e,t,n)=>{n.r(t),n.d(t,{SignUpView:()=>A});var r=n(32735),a=n(81886),l=n(20354),i=n(70624),c=n(65858),o=n(97947),u=n(83529),s=n(84789),m=n(60735),f=n(39151),g=n(31949),d=n(48015),h=n(83421),p=n(14070),b=n(97291);const v={left:"CJBwn",imageContainer:"r6On_",imagePosition:"ebaoC",image:"XQMl0"};function y(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function E(e){var t,n,a=(t=r.useState(!1),n=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,l,i,c=[],o=!0,u=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=l.call(n)).done)&&(c.push(r.value),c.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}(t,n)||function(e,t){if(e){if("string"==typeof e)return y(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?y(e,t):void 0}}(t,n)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),l=a[0],i=a[1];return r.useEffect((function(){if(e.imageUrl){var t=new Image;return t.onload=function(){return i(!0)},t.src=e.imageUrl,function(){return t.onload=null}}}),[]),r.createElement("div",{className:v.left},l&&r.createElement(r.Fragment,null,r.createElement("div",{className:v.imageContainer},r.createElement("div",{className:v.imagePosition},r.createElement("img",{className:v.image,src:e.imageUrl,alt:e.title})))))}var C=n(48456),U=n(63643);function A(e){var t,n=(0,i.G)(m.D.BrazeClient),v=l.a.useBasicFetch(g.N.currentUser()),y=l.a.useBasicFetch(f.L.config()),A=(0,d.M)(),S=(0,U.c)();return r.useEffect((function(){v.hasCompleted&&v.data.isAuthenticated&&a.Q.C$.trigger({action:p.e.Dashboard.HOME,application:b.O.DASHBOARD})}),[v]),v.hasCompleted&&!(null===(t=v.data)||void 0===t?void 0:t.isAuthenticated)&&y.hasCompleted&&A&&S?r.createElement(h.Z,{leftComponent:function(){return r.createElement(E,{title:"Sign Up",imageUrl:"/images/sign-up/fullscreen-dashboard.png"})}},r.createElement(o.h,{brazeClient:n.clientInstance,type:u.c.FullPage,initialValues:{email:e.email},location:c.LZ.SignUpPage,googleMapsApiKey:y.data.googleMapsApiKey,geoLocation:A,imageUrls:C.v,ajaxUrls:S,productName:s.X.Lite,pageAppLinkString:e.pageAppLinkString,getSignInUrl:function(e){return a.Q.C$.getHref({application:b.O.DEFAULT,action:p.e.Default.CHALLENGE,params:e})}})):r.createElement(r.Fragment,null)}},83421:(e,t,n)=>{n.d(t,{H:()=>m,Z:()=>g});var r=n(32735),a=n(54610),l=n(4594),i=n(67453),c=n(99742);const o={left:"vIypY",leftTextImage:"YViNj",right:"MkD4u",blur:"X6mCh",imageContainer:"bc7kz",imagePosition:"JOhEj",image:"Ef2QR",thumbnail:"Gdurb",tallposter:"fjVNK",cover:"o3j31",linksContainer:"AT9Dk"};function u(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,a,l,i,c=[],o=!0,u=!1;try{if(l=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;o=!1}else for(;!(o=(r=l.call(n)).done)&&(c.push(r.value),c.length!==t);o=!0);}catch(e){u=!0,a=e}finally{try{if(!o&&null!=n.return&&(i=n.return(),Object(i)!==i))return}finally{if(u)throw a}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return s(e,t);var n={}.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}var m=[{bgUrl:c.W.LaunchPad.BG_1},{bgUrl:c.W.LaunchPad.BG_2},{bgUrl:c.W.LaunchPad.BG_3},{bgUrl:c.W.LaunchPad.BG_4},{bgUrl:c.W.LaunchPad.BG_5}];function f(e){switch(e){case l.E.Video:case l.E.Interactive:case l.E.Clip:return o.thumbnail;case l.E.Subject:case l.E.Playlist:return o.cover;case l.E.Series:return o.tallposter;default:return""}}function g(e){var t,n=u(r.useState(!1),2),l=n[0],c=n[1],s=u(r.useState(""),2),g=s[0],d=s[1],h=u(r.useState(""),2),p=h[0],b=h[1],v=i.j.createUrl(e.imageUrl,{size:a.h2.Large}),y=m;return r.useEffect((function(){if(!v&&y&&0!==y.length){var e,t=(e=y)[Math.floor(Math.random()*e.length)];t.bgUrl&&d(t.bgUrl),t.textUrl&&b(t.textUrl)}}),[]),r.useEffect((function(){if(v){var e=new Image;return e.onload=function(){return c(!0)},e.src=v,function(){return e.onload=null}}}),[]),r.createElement("div",{className:"d-flex"},e.leftComponent?e.leftComponent():r.createElement("div",{className:"".concat(o.left," bg-light"),style:{backgroundImage:"url('".concat(g,"')")}},p&&r.createElement("div",{className:o.leftTextImage,style:{backgroundImage:"url('".concat(p,"')")}}),l&&r.createElement(r.Fragment,null,r.createElement("div",{className:o.blur,style:{backgroundImage:"url('".concat(v,"')")}}),r.createElement("div",{className:"".concat(o.imageContainer," ").concat(f(e.objectType))},r.createElement("div",{className:o.imagePosition},r.createElement("img",{className:o.image,src:v,alt:e.title}))))),r.createElement("div",{className:"".concat(o.right," bg-white d-flex flex-column")},r.createElement("div",{className:"position-absolute d-flex align-items-center ".concat(o.linksContainer)},null===(t=e.links)||void 0===t?void 0:t.map((function(e,t){return e.hide?r.createElement(r.Fragment,{key:t}):r.createElement("a",{key:t,href:e.url,className:"info-link fw-semibold",onClick:e.onClick},e.text)}))),e.children))}}}]);
|
|
2
|
+
//# sourceMappingURL=5157-9396b0580d-lite.chunk.js.map
|
package/dist/scripts/{5157-b1d38e123c-lite.chunk.js.map → 5157-9396b0580d-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/5157-b1d38e123c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/sign-up.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/SignUpLeftSide.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/SignUpView.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"left\":\"CJBwn\",\"imageContainer\":\"r6On_\",\"imagePosition\":\"ebaoC\",\"image\":\"XQMl0\"};","import React from 'react';\n\nimport styles from 'apps/launchpad/views/sign-up/sign-up.scss';\n\ninterface SignUpLeftSideProps {\n title: string;\n imageUrl: string;\n}\n\nexport function SignUpLeftSide(props: SignUpLeftSideProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n\n React.useEffect(() => {\n if (!props.imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, []);\n \n return (\n <div className={styles.left}>\n {showImage &&\n <>\n <div className={styles.imageContainer}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { MultiStepForm } from 'libs/shared/apps/sign-up/components/multi-step-form/MultiStepForm';\nimport { MultiStepFormTypes } from 'libs/shared/apps/sign-up/enums/MultiStepFormTypes';\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useGeoLocation } from 'libs/shared/hooks/useGeoLocation';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SignUpLeftSide } from 'apps/launchpad/views/sign-up/SignUpLeftSide';\nimport { SignUpImages } from 'apps/sign-up/helpers/SignUpImages';\nimport { useGetSignUpAjaxUrls } from 'apps/sign-up/hooks/useGetSignUpAjaxUrls';\n\nexport interface SignUpViewProps {\n email?: string;\n pageAppLinkString?: string;\n}\n\nexport function SignUpView(props: SignUpViewProps): JSX.Element {\n const brazeClientService = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const geoLocation = useGeoLocation();\n const ajaxUrls = useGetSignUpAjaxUrls();\n\n React.useEffect(() => {\n if (!currentUser.hasCompleted)\n return;\n\n if (currentUser.data.isAuthenticated) {\n Core.AppLinkHelper.trigger({\n action: Actions.Dashboard.HOME,\n application: AppChannels.DASHBOARD\n });\n return;\n }\n }, [currentUser]);\n\n const hasLoaded = (\n currentUser.hasCompleted &&\n !currentUser.data?.isAuthenticated &&\n config.hasCompleted &&\n geoLocation &&\n ajaxUrls\n );\n\n if (!hasLoaded)\n return <></>;\n \n return (\n <Launchpad\n leftComponent={() => (\n <SignUpLeftSide\n title='Sign Up'\n imageUrl='/images/sign-up/fullscreen-dashboard.png'\n />\n )}\n >\n <MultiStepForm\n brazeClient={brazeClientService.clientInstance}\n type={MultiStepFormTypes.FullPage}\n initialValues={{ email: props.email }}\n location={LocationContext.SignUpPage}\n googleMapsApiKey={config.data.googleMapsApiKey}\n geoLocation={geoLocation}\n imageUrls={SignUpImages}\n ajaxUrls={ajaxUrls}\n productName={SignUpProduct.Lite}\n pageAppLinkString={props.pageAppLinkString}\n getSignInUrl={options => Core.AppLinkHelper.getHref({\n application: AppChannels.DEFAULT,\n action: Actions.Default.LOG_IN,\n params: options\n })}\n />\n </Launchpad>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nexport const LAUNCHPAD_FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = LAUNCHPAD_FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["SignUpLeftSide","props","showImage","setShowImage","imageUrl","img","Image","onload","src","className","alt","title","SignUpView","brazeClientService","SharedServices","currentUser","UserRequests","config","ConfigRequests","geoLocation","useGeoLocation","ajaxUrls","useGetSignUpAjaxUrls","hasCompleted","data","isAuthenticated","action","application","Launchpad","leftComponent","MultiStepForm","brazeClient","clientInstance","type","MultiStepFormTypes","initialValues","email","location","googleMapsApiKey","imageUrls","SignUpImages","productName","SignUpProduct","pageAppLinkString","getSignInUrl","options","params","LAUNCHPAD_FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","objectType","MasterType","image","setImage","textImage","setTextImage","ImageHelper","size","IMAGE_URLS","length","urlLists","Math","floor","random","textUrl","style","backgroundImage","links","map","link","key","hide","href","url","onClick","text","children"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/5157-9396b0580d-lite.chunk.js","mappings":"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","sources":["file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/sign-up.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/SignUpLeftSide.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/sign-up/SignUpView.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"left\":\"CJBwn\",\"imageContainer\":\"r6On_\",\"imagePosition\":\"ebaoC\",\"image\":\"XQMl0\"};","import React from 'react';\n\nimport styles from 'apps/launchpad/views/sign-up/sign-up.scss';\n\ninterface SignUpLeftSideProps {\n title: string;\n imageUrl: string;\n}\n\nexport function SignUpLeftSide(props: SignUpLeftSideProps): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n\n React.useEffect(() => {\n if (!props.imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = props.imageUrl;\n return () => img.onload = null;\n }, []);\n \n return (\n <div className={styles.left}>\n {showImage &&\n <>\n <div className={styles.imageContainer}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={props.imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { useInstanceSafe } from 'libs/common/react/hooks/UseInstance';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { MultiStepForm } from 'libs/shared/apps/sign-up/components/multi-step-form/MultiStepForm';\nimport { MultiStepFormTypes } from 'libs/shared/apps/sign-up/enums/MultiStepFormTypes';\nimport { SignUpProduct } from 'libs/shared/apps/sign-up/enums/SignUpProduct';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useGeoLocation } from 'libs/shared/hooks/useGeoLocation';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { BrazeClientService } from 'libs/shared/services/BrazeClientService';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { SignUpLeftSide } from 'apps/launchpad/views/sign-up/SignUpLeftSide';\nimport { SignUpImages } from 'apps/sign-up/helpers/SignUpImages';\nimport { useGetSignUpAjaxUrls } from 'apps/sign-up/hooks/useGetSignUpAjaxUrls';\n\nexport interface SignUpViewProps {\n email?: string;\n pageAppLinkString?: string;\n}\n\nexport function SignUpView(props: SignUpViewProps): JSX.Element {\n const brazeClientService = useInstanceSafe<BrazeClientService>(SharedServices.BrazeClient);\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n \n const geoLocation = useGeoLocation();\n const ajaxUrls = useGetSignUpAjaxUrls();\n\n React.useEffect(() => {\n if (!currentUser.hasCompleted)\n return;\n\n if (currentUser.data.isAuthenticated) {\n Core.AppLinkHelper.trigger({\n action: Actions.Dashboard.HOME,\n application: AppChannels.DASHBOARD\n });\n return;\n }\n }, [currentUser]);\n\n const hasLoaded = (\n currentUser.hasCompleted &&\n !currentUser.data?.isAuthenticated &&\n config.hasCompleted &&\n geoLocation &&\n ajaxUrls\n );\n\n if (!hasLoaded)\n return <></>;\n \n return (\n <Launchpad\n leftComponent={() => (\n <SignUpLeftSide\n title='Sign Up'\n imageUrl='/images/sign-up/fullscreen-dashboard.png'\n />\n )}\n >\n <MultiStepForm\n brazeClient={brazeClientService.clientInstance}\n type={MultiStepFormTypes.FullPage}\n initialValues={{ email: props.email }}\n location={LocationContext.SignUpPage}\n googleMapsApiKey={config.data.googleMapsApiKey}\n geoLocation={geoLocation}\n imageUrls={SignUpImages}\n ajaxUrls={ajaxUrls}\n productName={SignUpProduct.Lite}\n pageAppLinkString={props.pageAppLinkString}\n getSignInUrl={options => Core.AppLinkHelper.getHref({\n application: AppChannels.DEFAULT,\n action: Actions.Default.CHALLENGE,\n params: options\n })}\n />\n </Launchpad>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nexport const LAUNCHPAD_FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = LAUNCHPAD_FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["SignUpLeftSide","props","showImage","setShowImage","imageUrl","img","Image","onload","src","className","alt","title","SignUpView","brazeClientService","SharedServices","currentUser","UserRequests","config","ConfigRequests","geoLocation","useGeoLocation","ajaxUrls","useGetSignUpAjaxUrls","hasCompleted","data","isAuthenticated","action","application","Launchpad","leftComponent","MultiStepForm","brazeClient","clientInstance","type","MultiStepFormTypes","initialValues","email","location","googleMapsApiKey","imageUrls","SignUpImages","productName","SignUpProduct","pageAppLinkString","getSignInUrl","options","params","LAUNCHPAD_FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","objectType","MasterType","image","setImage","textImage","setTextImage","ImageHelper","size","IMAGE_URLS","length","urlLists","Math","floor","random","textUrl","style","backgroundImage","links","map","link","key","hide","href","url","onClick","text","children"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[528],{99705:(e,t,r)=>{var a,n;r.d(t,{b:()=>n}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="
|
|
2
|
-
//# sourceMappingURL=528-
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[528],{99705:(e,t,r)=>{var a,n;r.d(t,{b:()=>n}),function(e){e.AddToPlaylist="115005679748",e.EditSsoAccounts="8202508040345",e.LibraryEditor="360001974533",e.VideoAccess="360000153947",e.AddFromOnline="360011718234",e.UploadToLibraryEditor="360012069334",e.PBTErrorCodes="360012421153",e.ManuelReview="360020004534",e.LibraryReview="360000163788"}(a||(a={})),function(e){e.Integrations="4407268725529",e.Classrooms="4405362551833",e.MakeInteractive="4405370510873",e.EditSsoAccounts="8202605666073",e.UploadToLibraryEditor="10672936659865",e.AddFromLite="10671345281561",e.ManageSsoYearGroups="14691130889241",e.ContentReview="18525199576601",e.ContentPermissions="14692125209497",e.AccessSettings="27927466562201",e.ContentGuidelines="24133696186009",e.FoxtelFaq="24133519542169",e.ViviIntegration="23826297956377",e.AppleTvIntegration="25832373739929",e.RssFeed="32567445635097",e.ManageGroupPermissions="35407217335705"}(n||(n={}))},62148:(e,t,r)=>{r.r(t),r.d(t,{BulkUserActionsAddToClassroomActionDetailsView:()=>k});var a=r(32735),n=r(97395),o=r(20354),s=r(23481),l=r(2948),i=r(82872),c=r(7855),u=r(83345),m=r(38143),d=r(96728);function p(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=Array(t);r<t;r++)a[r]=e[r];return a}var f="userManager.bulkUserActionsAddToClassroomActionDetails",g=s.T.encloseNamespace(f);function v(e){var t,r,n=(t=(0,l.D)(m.g.BULK_USER_ACTIONS),r=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,n,o,s,l=[],i=!0,c=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;i=!1}else for(;!(i=(a=o.call(r)).done)&&(l.push(a.value),l.length!==t);i=!0);}catch(e){c=!0,n=e}finally{try{if(!i&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(c)throw n}}return l}}(t,r)||function(e,t){if(e){if("string"==typeof e)return p(e,t);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?p(e,t):void 0}}(t,r)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()),o=n[0],s=n[1];a.useEffect((function(){s("subAction","addToClassroom")}),[]);var v=a.useContext(d.e).setDisableNext;return a.useEffect((function(){v(!(null==o?void 0:o.classroom))}),[null==o?void 0:o.classroom]),a.createElement(u.D.Provider,{value:f},a.createElement("h2",{className:"h4 mb-3"},a.createElement(u.x,{phrase:"heading"})),a.createElement("p",{className:"mb-2"},a.createElement(u.x,{phrase:"info"})),a.createElement("div",{className:"p-2 border rounded mb-2"},a.createElement("label",null,a.createElement(u.x,{phrase:"placeholder"})),o.classroom?a.createElement("div",{className:"d-flex"},a.createElement(i.t,{selection:o.classroom,onClickRemove:function(){return s("classroom",null)}})):a.createElement("div",{className:"w-50"},a.createElement(c.R,{placeholder:g("placeholder"),getRemoteUrl:e.getSearchUrl,requestHeaders:null==e?void 0:e.requestHeaders,selections:o.classroom?[o.classroom]:[],formatRemoteSuggestions:function(e){return e.results},onSuggestionSelected:function(e){return s("classroom",e)},removeSelection:function(){},imageCdnUrl:e.imageCdnUrl,activationLength:2,debounceTime:200,errorStateImageUrl:e.errorStateImageUrl,emptyStateImageUrl:e.emptyStateImageUrl})),e.addToClassroomSupportLink&&a.createElement("p",{className:"mb-0 mt-2"},a.createElement(u.x,{phrase:"cantFindAClassroom"})," ",a.createElement("a",{href:e.addToClassroomSupportLink,className:"text-info",target:"_blank"},a.createElement(u.x,{phrase:"howToCreateClassroom"})))))}var E=r(58703),h=r(99705),y=r(39151),S=r(31949),b=r(12778),A=r(99742),C=r(1211),U=r(88323),T=r(18087);function k(e){var t=(0,U.h)(e.userType),r=t.users,s=t.count,l=(0,T.Y)(e.userType),i=o.a.useBasicFetch(S.N.currentUser()),c=o.a.useBasicFetch(S.N.token()),u=o.a.useBasicFetch(y.L.config()),m=!!i.data&&!!c.data&&!!u.data,d=b.o.getLiteArticle(h.b.Classrooms);return a.createElement(E.d,{appLinks:l,userType:e.userType,users:r,currentStep:"action-details",userCount:s,loaded:m},m&&a.createElement(v,{getSearchUrl:function(e){return function(e,t,r){var a=C.J.searchClassrooms(e,t).url.split("{gateway}")[1];return n._.safeUrlConcat(r,a)}(e,i.data.customerId,u.data.gatewayApiUrl)},requestHeaders:{authorization:"Bearer ".concat(c.data.value)},imageCdnUrl:u.data.imageCdnUrl,addToClassroomSupportLink:d,errorStateImageUrl:A.W.TYPEAHEAD_ERROR,emptyStateImageUrl:A.W.EmptyStates.TYPEAHEAD_RESULTS,appLinks:l}))}}}]);
|
|
2
|
+
//# sourceMappingURL=528-3120366abc-lite.chunk.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/528-0e18ce97a9-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/action-details/add-to-classroom-action-details/BulkUserActionsAddToClassroomActionDetails.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/wizard/action-details/add-to-classroom/BulkUserActionsAddToClassroomActionDetailsView.tsx"],"sourcesContent":["// 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 = '22110291468057',\n ContentGuidelines = '24133696186009',\n FoxtelFaq = '24133519542169',\n ViviIntegration = '23826297956377',\n AppleTvIntegration = '25832373739929',\n RssFeed = '32567445635097',\n ManageGroupPermissions = '35407217335705'\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { InputSelection } from 'libs/shared/apps/share/components/tokenized-typeahead/InputSelection';\nimport { TokenizedTypeahead } from 'libs/shared/apps/share/components/tokenized-typeahead/TokenizedTypeahead';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkUserActionsAddToClassroomViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { Classroom } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.bulkUserActionsAddToClassroomActionDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface BulkUserActionsAddToClassroomActionDetailsProps {\n getSearchUrl: (query: string) => string;\n requestHeaders?: HashObject;\n imageCdnUrl: string;\n addToClassroomSupportLink?: string;\n errorStateImageUrl: string;\n emptyStateImageUrl: string;\n appLinks: UserManagerAppLinks;\n}\n\nexport function BulkUserActionsAddToClassroomActionDetails(\n props: BulkUserActionsAddToClassroomActionDetailsProps\n): JSX.Element {\n const [ viewModel, setViewModel ] = useViewModel<BulkUserActionsAddToClassroomViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n React.useEffect(() => {\n setViewModel('subAction', 'addToClassroom');\n }, []);\n\n const { setDisableNext } = React.useContext(WizardLayoutContext);\n\n React.useEffect(() => {\n setDisableNext(!viewModel?.classroom);\n }, [viewModel?.classroom]);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <h2 className='h4 mb-3'>\n <Text phrase='heading' />\n </h2>\n <p className='mb-2'><Text phrase='info' /></p>\n <div className='p-2 border rounded mb-2'>\n <label><Text phrase='placeholder' /></label>\n {viewModel.classroom ?\n <div className='d-flex'>\n <InputSelection\n selection={viewModel.classroom}\n onClickRemove={() => setViewModel('classroom', null)}\n />\n </div> :\n <div className='w-50'>\n <TokenizedTypeahead\n placeholder={getPhrase('placeholder')}\n getRemoteUrl={props.getSearchUrl}\n requestHeaders={props?.requestHeaders}\n selections={viewModel.classroom ? [viewModel.classroom] : []}\n formatRemoteSuggestions={(suggestions: SearchResults<Classroom>) => suggestions.results}\n onSuggestionSelected={(classroom: Classroom) => setViewModel('classroom', classroom)}\n removeSelection={() => {}}\n imageCdnUrl={props.imageCdnUrl}\n activationLength={2}\n debounceTime={200}\n errorStateImageUrl={props.errorStateImageUrl}\n emptyStateImageUrl={props.emptyStateImageUrl}\n />\n </div>\n }\n \n {props.addToClassroomSupportLink &&\n <p className='mb-0 mt-2'>\n <Text phrase='cantFindAClassroom' />\n \n <a href={props.addToClassroomSupportLink} className='text-info' target='_blank'><Text phrase='howToCreateClassroom' /></a>\n </p>\n }\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { BulkUserActionsAddToClassroomActionDetails } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/action-details/add-to-classroom-action-details/BulkUserActionsAddToClassroomActionDetails';\nimport { BulkUserActionsWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserWizardParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { SearchRequests } from 'apps/search/flight-requests/SearchRequests';\nimport { useBulkActionsUsersWrapper } from 'apps/user-manager/hooks/useBulkActionsUsersWrapper';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nfunction getSearchClassroomUrl(query: string, customerId: string, gatewayApiUrl: string): string {\n const request = SearchRequests.searchClassrooms(query, customerId);\n\n const path = request.url.split('{gateway}')[1];\n return UrlHelper.safeUrlConcat(gatewayApiUrl, path);\n}\n\nexport function BulkUserActionsAddToClassroomActionDetailsView(props: UserWizardParams): JSX.Element {\n const { users, count } = useBulkActionsUsersWrapper(props.userType);\n const appLinks = getUserManagerAppLinks(props.userType);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const authToken = Flight.useBasicFetch<HashObject>(UserRequests.token());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const loaded = (\n !!currentUser.data &&\n !!authToken.data &&\n !!config.data\n );\n\n const articleUrl = ArticleHelper.getLiteArticle(LiteSupportArticle.Classrooms);\n\n return (\n <BulkUserActionsWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n users={users}\n currentStep='action-details'\n userCount={count}\n loaded={loaded}\n >\n {loaded &&\n <BulkUserActionsAddToClassroomActionDetails\n getSearchUrl={(query: string) => {\n return getSearchClassroomUrl(query, currentUser.data.customerId, config.data.gatewayApiUrl);\n }}\n requestHeaders={{\n authorization: `Bearer ${authToken.data.value}`\n }}\n imageCdnUrl={config.data.imageCdnUrl}\n addToClassroomSupportLink={articleUrl}\n errorStateImageUrl={ImageUrls.TYPEAHEAD_ERROR}\n emptyStateImageUrl={ImageUrls.EmptyStates.TYPEAHEAD_RESULTS}\n appLinks={appLinks}\n />\n }\n </BulkUserActionsWizardLayout>\n );\n}"],"names":["OnlineSupportArticle","LiteSupportArticle","namespace","getPhrase","LanguageService","BulkUserActionsAddToClassroomActionDetails","props","SharedViewModelKeys","viewModel","setViewModel","setDisableNext","WizardLayoutContext","classroom","value","className","Text","phrase","InputSelection","selection","onClickRemove","TokenizedTypeahead","placeholder","getRemoteUrl","getSearchUrl","requestHeaders","selections","formatRemoteSuggestions","suggestions","results","onSuggestionSelected","removeSelection","imageCdnUrl","activationLength","debounceTime","errorStateImageUrl","emptyStateImageUrl","addToClassroomSupportLink","href","target","BulkUserActionsAddToClassroomActionDetailsView","useBulkActionsUsersWrapper","userType","users","count","appLinks","currentUser","UserRequests","authToken","config","ConfigRequests","loaded","data","articleUrl","ArticleHelper","BulkUserActionsWizardLayout","currentStep","userCount","query","customerId","gatewayApiUrl","path","SearchRequests","url","split","UrlHelper","getSearchClassroomUrl","authorization","ImageUrls"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/528-3120366abc-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/enums/SupportArticle.ts","file:///app/packages/libs/shared/src/apps/user-manager/components/bulk-actions-wizard/action-details/add-to-classroom-action-details/BulkUserActionsAddToClassroomActionDetails.tsx","file:///app/packages/projects/lite/src/apps/user-manager/views/wizard/action-details/add-to-classroom/BulkUserActionsAddToClassroomActionDetailsView.tsx"],"sourcesContent":["// 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 React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchResults } from 'libs/shared/apps/search/interfaces';\nimport { InputSelection } from 'libs/shared/apps/share/components/tokenized-typeahead/InputSelection';\nimport { TokenizedTypeahead } from 'libs/shared/apps/share/components/tokenized-typeahead/TokenizedTypeahead';\nimport { UserManagerAppLinks } from 'libs/shared/apps/user-manager/interfaces';\nimport { BulkUserActionsAddToClassroomViewModel } from 'libs/shared/apps/user-manager/interfaces/viewmodels/BulkUserActionsViewModel';\nimport { LanguageNamespaceContext, Text } from 'libs/shared/components/text/Text';\nimport { SharedViewModelKeys } from 'libs/shared/constants/SharedViewModelKeys';\nimport { WizardLayoutContext } from 'libs/shared/context/WizardLayoutContext';\nimport { Classroom } from 'libs/shared/interfaces';\n\nconst namespace = 'userManager.bulkUserActionsAddToClassroomActionDetails';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface BulkUserActionsAddToClassroomActionDetailsProps {\n getSearchUrl: (query: string) => string;\n requestHeaders?: HashObject;\n imageCdnUrl: string;\n addToClassroomSupportLink?: string;\n errorStateImageUrl: string;\n emptyStateImageUrl: string;\n appLinks: UserManagerAppLinks;\n}\n\nexport function BulkUserActionsAddToClassroomActionDetails(\n props: BulkUserActionsAddToClassroomActionDetailsProps\n): JSX.Element {\n const [ viewModel, setViewModel ] = useViewModel<BulkUserActionsAddToClassroomViewModel>(\n SharedViewModelKeys.BULK_USER_ACTIONS\n );\n\n React.useEffect(() => {\n setViewModel('subAction', 'addToClassroom');\n }, []);\n\n const { setDisableNext } = React.useContext(WizardLayoutContext);\n\n React.useEffect(() => {\n setDisableNext(!viewModel?.classroom);\n }, [viewModel?.classroom]);\n\n return (\n <LanguageNamespaceContext.Provider value={namespace}>\n <h2 className='h4 mb-3'>\n <Text phrase='heading' />\n </h2>\n <p className='mb-2'><Text phrase='info' /></p>\n <div className='p-2 border rounded mb-2'>\n <label><Text phrase='placeholder' /></label>\n {viewModel.classroom ?\n <div className='d-flex'>\n <InputSelection\n selection={viewModel.classroom}\n onClickRemove={() => setViewModel('classroom', null)}\n />\n </div> :\n <div className='w-50'>\n <TokenizedTypeahead\n placeholder={getPhrase('placeholder')}\n getRemoteUrl={props.getSearchUrl}\n requestHeaders={props?.requestHeaders}\n selections={viewModel.classroom ? [viewModel.classroom] : []}\n formatRemoteSuggestions={(suggestions: SearchResults<Classroom>) => suggestions.results}\n onSuggestionSelected={(classroom: Classroom) => setViewModel('classroom', classroom)}\n removeSelection={() => {}}\n imageCdnUrl={props.imageCdnUrl}\n activationLength={2}\n debounceTime={200}\n errorStateImageUrl={props.errorStateImageUrl}\n emptyStateImageUrl={props.emptyStateImageUrl}\n />\n </div>\n }\n \n {props.addToClassroomSupportLink &&\n <p className='mb-0 mt-2'>\n <Text phrase='cantFindAClassroom' />\n \n <a href={props.addToClassroomSupportLink} className='text-info' target='_blank'><Text phrase='howToCreateClassroom' /></a>\n </p>\n }\n </div>\n </LanguageNamespaceContext.Provider>\n );\n}","import React from 'react';\n\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { BulkUserActionsAddToClassroomActionDetails } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/action-details/add-to-classroom-action-details/BulkUserActionsAddToClassroomActionDetails';\nimport { BulkUserActionsWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-actions-wizard/layout/BulkUserActionsWizardLayout';\nimport { UserWizardParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { LiteSupportArticle } from 'libs/shared/enums/SupportArticle';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { Config, CurrentUser } from 'libs/shared/interfaces';\nimport { ArticleHelper } from 'libs/shared/utils/ArticleHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport { SearchRequests } from 'apps/search/flight-requests/SearchRequests';\nimport { useBulkActionsUsersWrapper } from 'apps/user-manager/hooks/useBulkActionsUsersWrapper';\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nfunction getSearchClassroomUrl(query: string, customerId: string, gatewayApiUrl: string): string {\n const request = SearchRequests.searchClassrooms(query, customerId);\n\n const path = request.url.split('{gateway}')[1];\n return UrlHelper.safeUrlConcat(gatewayApiUrl, path);\n}\n\nexport function BulkUserActionsAddToClassroomActionDetailsView(props: UserWizardParams): JSX.Element {\n const { users, count } = useBulkActionsUsersWrapper(props.userType);\n const appLinks = getUserManagerAppLinks(props.userType);\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const authToken = Flight.useBasicFetch<HashObject>(UserRequests.token());\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const loaded = (\n !!currentUser.data &&\n !!authToken.data &&\n !!config.data\n );\n\n const articleUrl = ArticleHelper.getLiteArticle(LiteSupportArticle.Classrooms);\n\n return (\n <BulkUserActionsWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n users={users}\n currentStep='action-details'\n userCount={count}\n loaded={loaded}\n >\n {loaded &&\n <BulkUserActionsAddToClassroomActionDetails\n getSearchUrl={(query: string) => {\n return getSearchClassroomUrl(query, currentUser.data.customerId, config.data.gatewayApiUrl);\n }}\n requestHeaders={{\n authorization: `Bearer ${authToken.data.value}`\n }}\n imageCdnUrl={config.data.imageCdnUrl}\n addToClassroomSupportLink={articleUrl}\n errorStateImageUrl={ImageUrls.TYPEAHEAD_ERROR}\n emptyStateImageUrl={ImageUrls.EmptyStates.TYPEAHEAD_RESULTS}\n appLinks={appLinks}\n />\n }\n </BulkUserActionsWizardLayout>\n );\n}"],"names":["OnlineSupportArticle","LiteSupportArticle","namespace","getPhrase","LanguageService","BulkUserActionsAddToClassroomActionDetails","props","SharedViewModelKeys","viewModel","setViewModel","setDisableNext","WizardLayoutContext","classroom","value","className","Text","phrase","InputSelection","selection","onClickRemove","TokenizedTypeahead","placeholder","getRemoteUrl","getSearchUrl","requestHeaders","selections","formatRemoteSuggestions","suggestions","results","onSuggestionSelected","removeSelection","imageCdnUrl","activationLength","debounceTime","errorStateImageUrl","emptyStateImageUrl","addToClassroomSupportLink","href","target","BulkUserActionsAddToClassroomActionDetailsView","useBulkActionsUsersWrapper","userType","users","count","appLinks","currentUser","UserRequests","authToken","config","ConfigRequests","loaded","data","articleUrl","ArticleHelper","BulkUserActionsWizardLayout","currentStep","userCount","query","customerId","gatewayApiUrl","path","SearchRequests","url","split","UrlHelper","getSearchClassroomUrl","authorization","ImageUrls"],"sourceRoot":""}
|