@clickview/lite 0.66.0-rc.2 → 0.66.0-rc.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/scripts/{4359-e928b3edc9-lite.chunk.js → 4359-b3c4a66f9c-lite.chunk.js} +2 -2
- package/dist/scripts/4359-b3c4a66f9c-lite.chunk.js.map +1 -0
- package/dist/scripts/{6965-46edd86c90-lite.chunk.js → 6965-da31a16bb2-lite.chunk.js} +2 -2
- package/dist/scripts/6965-da31a16bb2-lite.chunk.js.map +1 -0
- package/dist/scripts/bundle-29a4718a99.min.js +3 -0
- package/dist/scripts/{bundle-f772739f5d.min.js.LICENSE.txt → bundle-29a4718a99.min.js.LICENSE.txt} +0 -9
- package/dist/scripts/bundle-29a4718a99.min.js.map +1 -0
- package/package.json +1 -1
- package/typings/libs/lodash.d.ts +11 -0
- package/dist/scripts/4359-e928b3edc9-lite.chunk.js.map +0 -1
- package/dist/scripts/6965-46edd86c90-lite.chunk.js.map +0 -1
- package/dist/scripts/bundle-f772739f5d.min.js +0 -3
- package/dist/scripts/bundle-f772739f5d.min.js.map +0 -1
- package/typings/libs/cloneDeep.d.ts +0 -5
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/4359-e928b3edc9-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/components/actions/Actions.tsx","file:///app/packages/libs/shared/src/flight-requests/InsightsDemoRequests.ts","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/projects/lite/src/apps/insights/constants/DemoInsights.ts","file:///app/packages/projects/lite/src/apps/insights/views/insights-admin-alert/InsightsAdminAlert.tsx","file:///app/packages/projects/lite/src/apps/my-shares/constants/MySharesDemoInsights.ts","file:///app/packages/projects/lite/src/apps/insights/components/insights-list/type-filter/insights-type-filters.scss","file:///app/packages/projects/lite/src/apps/insights/components/insights-list/type-filter/InsightsTypeFilters.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/my-shares-table-row.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table-row/MySharesTableRow.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTableUtils.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/MySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/partial-my-shares-table.scss","file:///app/packages/projects/lite/src/apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/empty-state/MySharesEmptyState.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesViewUtils.tsx","file:///app/packages/projects/lite/src/apps/my-shares/views/my-shares/MySharesView.tsx","file:///app/packages/libs/shared/src/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n includePublicResults: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n formatData: (data: any) => {\n return {\n ...data,\n students: data.students.map((student: any) => {\n if (!student.name || !student.profileId)\n return student;\n\n return {\n ...student,\n publicUser: {\n profileId: student.profileId,\n name: student.name\n }\n };\n })\n };\n },\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\n );\n}","import { Flight } from 'libs/common/react/index';\n\nexport const InsightsDemoRequests = {\n interactive(): Flight.Request {\n return {\n url: `/mocks/insights/interactive.json`,\n key: `demo:interactive`,\n normalize: false\n };\n },\n\n interactiveMetadata(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-metadata.json`,\n key: `demo:interactive:metadata`,\n normalize: false\n };\n },\n\n interactiveResults(): Flight.Request {\n return {\n url: `/mocks/insights/interactive-results.json`,\n key: `demo:interactive:results`,\n normalize: false\n };\n },\n\n videoViews(): Flight.Request {\n return {\n url: `/mocks/insights/video-views.json`,\n key: `demo:video:views`,\n normalize: false\n };\n },\n\n users(): Flight.Request {\n return {\n url: `/mocks/insights/users.json`,\n key: `demo:users`,\n normalize: false\n };\n },\n\n individualHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/individual-heatmap.json`,\n key: `demo:individual:heatmap`,\n normalize: false\n };\n },\n\n aggregateHeatmap(): Flight.Request {\n return {\n url: `/mocks/insights/aggregate-heatmap.json`,\n key: `demo:aggregate:heatmap`,\n normalize: false\n };\n }\n};","import { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, 25);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const items = responses.data.length\n ? ArrayHelper.flatten(responses.data).reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n items,\n isFetching: responses.isFetching\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}","export const DEMO_INTERACTIVE_STAGING_ID = 'D8qRe7';\nexport const DEMO_INTERACTIVE_PROD_ID = 'GRWx6w';","import React from 'react';\n\nimport { StorageType } from 'libs/common/backbone/utils/LocalStorageHelper';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { VideoTypes } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\n\nconst namespace = 'lite.insightsAdminAlert';\n\ninterface InsightsAdminAlertProps {\n hasAnalytics: boolean;\n analyticsUrl: string;\n video?: VideoTypes;\n}\n\n// eslint-disable-next-line rulesdir/require-view-title\nexport function InsightsAdminAlert(props: InsightsAdminAlertProps) {\n const [ show, setShow ] = useViewModel(\n ViewModelKeys.INSIGHTS_ADMIN_ALERT,\n true,\n { storage: StorageType.LocalStorage }\n );\n\n function onDismiss() {\n setShow(false);\n }\n\n function getAnalyticsUrl() {\n if (!props.video) return props.analyticsUrl;\n\n let videoRoute = '';\n\n if (props.video.typeId === MasterType.Interactive)\n videoRoute = `/interactives/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Video)\n videoRoute = `/videos/${props.video.id}/views`;\n\n if (props.video.typeId === MasterType.Clip)\n videoRoute = `/clips/${props.video.id}/views`;\n\n return UrlHelper.safeUrlConcat(props.analyticsUrl, videoRoute);\n }\n\n if (!props.hasAnalytics || !show)\n return <></>;\n\n return (\n <div role='alert' className='d-flex justify-content-between align-items-center bg-light-blue rounded p-2 mb-4'>\n <div>\n <Text namespace={namespace} phrase='adminAlert' />\n <a className='text-info' href={getAnalyticsUrl()} target='_blank'>\n <Text namespace={namespace} phrase='analytics' />\n </a>.\n </div>\n <IconButton svgName={cvSvgLibrary.Close} className='text-blue' onClick={onDismiss} />\n </div>\n );\n}","import { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const DEMO_INSIGHTS_SHARE: MySharesTableData = {\n share: {\n objectTypeId: 34,\n type: ShareType.ShareLink\n } as UnionShareObject,\n sharedObject: null,\n shareRecipients: null,\n dateShared: new Date().toISOString(),\n viewCount: 23\n};\n\nconst DEMO_INSIGHTS_APPLINK: Core.AppLink = {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.INTERACTIVE_OVERVIEW_DEMO\n};\n\nexport const DEMO_INSIGHTS_ACTIONS: ActionOptions[] = [\n {\n svgName: cvSvgLibrary.Analytics,\n label: getPhrase('demoInsights'),\n appLink: DEMO_INSIGHTS_APPLINK,\n group: 'insights',\n button: true,\n className: 'btn btn-outline-dark'\n }\n];","// extracted by mini-css-extract-plugin\nexport default {\"noCaret\":\"TMpTN\"};","import React from 'react';\nimport { Dropdown } from 'react-bootstrap';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Checkbox } from 'libs/shared/components/forms/form-checkbox/Checkbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './insights-type-filters.scss';\n\nconst namespace = 'insights.insightsTypeFilters';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface InsightsTypeFilterProps {\n appLink: Core.AppLink;\n typeIdParams: MasterType[];\n breakpoints: Breakpoints;\n}\n\nexport function InsightsTypeFilters(props: InsightsTypeFilterProps) {\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n\n const moreFilterOptions = [\n ...(isMobile ? [{\n label: getPhrase('interactives'),\n filter: MasterType.Interactive\n }, {\n label: getPhrase('videos'),\n filter: MasterType.Video\n }, {\n label: getPhrase('clips'),\n filter: MasterType.Clip\n }] : []),\n {\n label: getPhrase('playlists'),\n filter: MasterType.Playlist\n }, {\n label: getPhrase('series'),\n filter: MasterType.Series\n }];\n\n const moreFiltersSelected = getMoreFiltersSelected();\n\n const [ showDropdown, setShowDropdown ] = React.useState(false);\n const [ moreFilters, setMoreFilters ] = React.useState(moreFiltersSelected);\n\n function applyFilter() {\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: ArrayHelper.uniq([\n ...props.typeIdParams,\n ...moreFilters\n ])\n }\n });\n }\n\n function resetFilters() {\n setMoreFilters([]);\n\n const currentParams = props.appLink.params as HashObject;\n\n Core.AppLinkHelper.trigger({\n ...props.appLink,\n params: {\n ...currentParams,\n typeId: []\n }\n });\n }\n\n function onToggleDropdown(isShowing: boolean): void {\n setShowDropdown(isShowing);\n\n if (isShowing)\n return;\n\n applyFilter();\n }\n\n function onClickApply() {\n applyFilter();\n setShowDropdown(false);\n }\n\n function onClickReset() {\n resetFilters();\n setShowDropdown(false);\n }\n\n function onSelectFilter(filter: MasterType) {\n setMoreFilters(ArrayHelper.addOrRemoveImmutable(moreFilters, filter));\n }\n\n function isFilterSelected(filter: MasterType) {\n if (isMobile) {\n return !!moreFilters.find(selectedFilter => selectedFilter === filter) ||\n !!props.typeIdParams.find(selectedFilter => selectedFilter === filter);\n }\n\n return !!moreFilters.find(selectedFilter => selectedFilter === filter);\n }\n\n function getMoreFiltersSelected() {\n return props.typeIdParams.filter(typeId =>\n moreFilterOptions.some(option => typeId === option.filter));\n }\n\n return (\n <div className='d-flex align-items-center fw-semibold'>\n <p className='d-none d-md-inline h6 mb-0'><Text namespace={namespace} phrase='filters' /></p>\n <div className='d-flex flex-grow-1 flex-md-grow-0 border-md-start border-light ps-0 ps-md-3 ms-0 ms-md-3 gap-2'>\n <div className='d-none d-md-flex gap-2'>\n <InsightTypeFilterButton\n typeId={MasterType.Interactive}\n typeFilters={props.typeIdParams}\n appLink={props.appLink}\n />\n <InsightTypeFilterButton typeId={MasterType.Video} typeFilters={props.typeIdParams} appLink={props.appLink} />\n <InsightTypeFilterButton typeId={MasterType.Clip} typeFilters={props.typeIdParams} appLink={props.appLink} />\n </div>\n <Dropdown onToggle={onToggleDropdown} show={showDropdown} className='col'>\n <Dropdown.Toggle\n className={`${styles.noCaret} col-12 col-md-auto`}\n variant={moreFiltersSelected.length ? 'dark' : 'outline-dark'}\n >\n <div className='d-flex align-items-center justify-content-center gap-2 fw-semibold mb-0'>\n <SvgContainer svgName={cvSvgLibrary.Filter} className='svg-container d-inline-block d-md-none' />\n <Text namespace={namespace} phrase={isMobile ? 'filters' : 'moreFilters'} />\n {moreFiltersSelected.length ? ` - ${moreFiltersSelected.length}` : ''}\n </div>\n </Dropdown.Toggle>\n\n <Dropdown.Menu>\n <div className='mx-1 px-2 py-1 mb-0'>\n <h2 className='h6 mb-3'><Text namespace={namespace} phrase='types' /></h2>\n <ul className='list-unstyled me-5'>\n {moreFilterOptions.map(option => (\n <li key={`${option.label}-filter`} className='my-1'>\n <Checkbox\n id={`${option.label}-filter`}\n label={option.label}\n onChange={() => onSelectFilter(option.filter)}\n checked={isFilterSelected(option.filter)}\n />\n </li>\n ))}\n </ul>\n <div className='d-flex justify-content-between'>\n <button onClick={onClickReset} className='btn btn-link text-secondary p-0 mb-0'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n <button onClick={onClickApply} className='btn btn-link text-info p-0 mb-0'>\n <Text namespace={namespace} phrase='apply' />\n </button>\n </div>\n </div>\n </Dropdown.Menu>\n </Dropdown>\n </div>\n {!!props.typeIdParams.length &&\n <button onClick={resetFilters} className='d-none d-md-block btn btn-link ms-1'>\n <Text namespace={namespace} phrase='resetAll' />\n </button>\n }\n </div>\n );\n}\n\ninterface InsightTypeFilterButtonProps {\n typeId: MasterType;\n typeFilters: MasterType[];\n appLink: Core.AppLink;\n}\n\nfunction InsightTypeFilterButton(props: InsightTypeFilterButtonProps) {\n const selected = props.typeFilters.includes(props.typeId);\n\n const currentAppLink = props.appLink;\n const currentParams = currentAppLink.params as HashObject;\n\n const newType: MasterType[] = ArrayHelper.addOrRemoveImmutable(props.typeFilters, props.typeId);\n\n const newAppLink = {\n ...currentAppLink,\n params: {\n ...currentParams,\n typeId: newType\n }\n };\n\n function getTypePhrase(): string {\n if (props.typeId === MasterType.Video) return 'videos';\n if (props.typeId === MasterType.Clip) return 'clips';\n if (props.typeId === MasterType.Interactive) return 'interactives';\n }\n\n return (\n <AppLink\n className={`btn ${selected ? 'btn-dark' : 'btn-outline-dark'} fw-semibold`}\n appLink={newAppLink}\n ariaLabel={`${getPhrase('ariaFilterBy')}: ${getPhrase(getTypePhrase())}`}\n >\n <Text namespace={namespace} phrase={getTypePhrase()} />\n </AppLink>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"mySharesTable\":\"hyaYe\",\"mySharesHeader\":\"WjfsD\",\"tableBorder\":\"tHBWr\"};","import React from 'react';\nimport { format as formatDate } from 'timeago.js';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport { ShareLinkHelper } from 'libs/shared/apps/share/utils/ShareLinkHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { TitleSubText } from 'libs/shared/components/title-sub-text/TitleSubText';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, YearGroup } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { MySharesTableData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { SharedToPill } from 'apps/my-shares/components/shared-to-pill/SharedToPill';\n\nimport styles from './my-shares-table-row.scss';\n\nconst namespace = 'myShares.tableRow';\n\ninterface MySharesTableHeadingProps {\n heading: string;\n isFirst: boolean;\n}\n\nexport function MySharesTableHeading(props: MySharesTableHeadingProps) {\n return (\n <div className={`${styles.mySharesHeader} d-block d-lg-grid gap-3 px-3`}>\n <p className='fw-semibold mb-2 ms-n3'>{props.heading}</p>\n\n {props.isFirst &&\n <>\n <div className='d-none d-xl-inline' />\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='sharedToHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='dateSharedHeading' /></p>\n <p className='d-none d-xl-inline fw-semibold mb-2'><Text namespace={namespace} phrase='viewsHeading' /></p>\n </>\n }\n </div>\n );\n}\n\ninterface ShareObjectTitleProps {\n sharedObject: SharableEntity;\n requireMarking?: number;\n appLink: Core.AppLink;\n}\n\nfunction ShareObjectTitle(props: ShareObjectTitleProps) {\n const { sharedObject } = props;\n\n if (!sharedObject.name) {\n return <Text namespace={namespace} phrase='videoUnavailable' />;\n }\n\n if (VideoHelper.isVideoType(sharedObject) &&\n !VideoHelper.getCanBeConsumed(sharedObject)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {sharedObject.name}\n </span>\n );\n }\n\n function getSubTextPhrase(): string {\n switch (sharedObject.typeId) {\n case MasterType.Series: return 'series';\n case MasterType.Playlist: return 'playlist';\n }\n }\n\n const subTextPhrase = getSubTextPhrase();\n\n return (\n <div>\n {VideoHelper.isVideoType(sharedObject) && (\n <VideoSubText\n type='series'\n video={sharedObject}\n appLink={'series' in sharedObject && sharedObject.series ? getObjectAppLink(sharedObject.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n className='d-inline clamp-1'\n />\n )}\n\n {subTextPhrase &&\n <TitleSubText>\n <Text namespace={namespace} phrase={subTextPhrase} />\n </TitleSubText>\n }\n\n <AppLink\n appLink={props.appLink}\n className='clamp-1'\n analyticsData={{ id: sharedObject.id, name: sharedObject.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(sharedObject.type),\n actionType: UserAction.Click,\n location: LocationContext.MyShares\n }}\n >\n {sharedObject.name}\n </AppLink>\n\n {!!props.requireMarking && (\n <div className={`font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2`}>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: props.requireMarking }} />\n </div>\n )}\n </div>\n );\n}\n\ninterface MyShareRowProps extends React.PropsWithChildren {\n shareData: MySharesTableData;\n yearGroups?: YearGroup[];\n imageCdnUrl?: string;\n breakpoints?: Breakpoints;\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n}\n\nexport function MySharesTableRow(props: MyShareRowProps) {\n const { shareData } = props;\n\n const sharedObject = shareData.sharedObject;\n\n const shareLinkText = shareData.share.type === ShareType.ShareLink &&\n ShareLinkHelper.getIconAndText({\n entity: sharedObject,\n entityTypeId: sharedObject.typeId,\n hasStudentExp: false,\n isPasswordProtected: shareData.share.isPasswordProtected,\n linkExpireDate: shareData.share.linkExpireDate,\n privacy: {\n privacy: shareData.privacy,\n overrideRestrictions: shareData.overrideRestrictions\n },\n status: shareData.share.status,\n yearGroups: props.yearGroups\n });\n\n const isMobile = props.breakpoints.xs || props.breakpoints.sm;\n const isDesktop = props.breakpoints.xl || props.breakpoints.xxl;\n const isCollection = sharedObject.typeId === MasterType.Playlist || sharedObject.typeId === MasterType.Series;\n\n return (\n <div key={shareData.share.id} className={`${styles.mySharesTable} ${styles.tableBorder} position-relative d-flex d-xl-grid flex-column flex-md-row align-items-md-center p-0 p-md-3 gap-3`}>\n <div className='col-12 col-md-3 col-xl-auto'>\n <SharedObjectImage\n object={sharedObject}\n appLink={props.getObjectAppLink(sharedObject)}\n showVideoMetadata\n locationContext={LocationContext.MyShares}\n imageOptions={{ size: ImageSize.Medium }}\n requireMarking={isMobile && shareData.pendingReview}\n showCollectionMask\n showVideoCount\n />\n </div>\n <div className='d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3'>\n <div className='col-xl-4'>\n <ShareObjectTitle\n sharedObject={shareData.sharedObject}\n appLink={props.getObjectAppLink(sharedObject)}\n requireMarking={isDesktop && shareData.pendingReview}\n />\n </div>\n {props.children}\n\n <div className='d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8'>\n <div className='col-xl-5'>\n <SharedToPill\n shareLinkText={shareLinkText?.text}\n shareRecipients={shareData.shareRecipients}\n imageCdnUrl={props.imageCdnUrl}\n />\n </div>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 col-xl-4'>{formatDate(shareData.dateShared)}</p>\n {!isCollection ? (\n <>\n <span className='d-inline d-xl-none'>·</span>\n <p className='mb-0 col-xl-3'><Text namespace={namespace} phrase='views' options={{ smartCount: shareData.viewCount }} /></p>\n </>\n ) : (\n <p className='mb-0 d-none d-xl-block'>-</p>\n )}\n </div>\n\n {!isDesktop && !isMobile && !!shareData.pendingReview && (\n <div className='font-size-sm d-flex align-items-center bg-light-ultramarine text-ultramarine rounded-pill w-fit mt-1 px-2'>\n <Text namespace={namespace} phrase='requireMarking' options={{ smartCount: shareData.pendingReview }} />\n </div>\n )}\n </div>\n\n <Actions\n className={`position-absolute bottom-0 end-0 position-md-static justify-content-end gap-2 ms-auto`}\n actionsDropdownClassName='btn-outline-dark rounded py-2'\n dropdownToggleSvgSize={SvgContainerSize.Standard}\n actions={props.getObjectActions(sharedObject)}\n />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractiveMetadata } from 'libs/shared/interfaces';\n\nimport { DEMO_INTERACTIVE_PROD_ID, DEMO_INTERACTIVE_STAGING_ID } from 'apps/insights/constants/DemoInsights';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\nimport { DEMO_INSIGHTS_ACTIONS, DEMO_INSIGHTS_SHARE } from 'apps/my-shares/constants/MySharesDemoInsights';\n\nconst namespace = 'myShares.demoInsights';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesDemoInsightProps {\n demoInteractive: InteractiveMetadata;\n liteUrl: string;\n}\n\nexport function MySharesDemoInsight(props: MySharesDemoInsightProps) {\n const isStaging = props.liteUrl.includes('staging');\n\n function getDemoInteractive() {\n return {\n ...props.demoInteractive,\n id: isStaging ? DEMO_INTERACTIVE_STAGING_ID : DEMO_INTERACTIVE_PROD_ID\n };\n }\n\n return (\n <div>\n <MySharesTableHeading heading={getPhrase('demoHeading')} isFirst={true} />\n\n <div className='rounded-3 border border-light bg-light-orange mb-4'>\n <MySharesTableRow\n shareData={{ ...DEMO_INSIGHTS_SHARE, sharedObject: getDemoInteractive() }}\n getObjectActions={() => DEMO_INSIGHTS_ACTIONS}\n getObjectAppLink={() => null}\n >\n <div className='d-inline-block rounded-pill bg-light-blue text-info font-size-sm mt-1 px-2'>\n <Text namespace={namespace} phrase='demoInsightPill' />\n </div>\n </MySharesTableRow>\n </div>\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesTableEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesTableEmptyState(): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.Share.SHARED_BY_ME} size='small' />\n <EmptyState.Heading>\n {getPhrase('heading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase('info')}</EmptyState.Info>\n <EmptyState.Cta appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }} text={getPhrase('cta')} />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharePrivacy } from 'libs/shared/apps/share/interfaces/SharePrivacy';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { InteractiveMetadata, UnionShareObject } from 'libs/shared/interfaces';\n\nconst namespace = 'myShares.mySharesTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\nexport interface MySharesTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: SharableRecipient[];\n viewCount: number;\n pendingReview?: number;\n privacy?: SharePrivacy;\n overrideRestrictions?: boolean;\n}\n\ntype TableDataGroupings = { [date: string]: MySharesTableData[] };\n\nexport function useGetMySharesData(\n sentShares: UnionShareObject[],\n sharedObjects: SharableEntity[],\n shareRecipients: SharableRecipient[],\n groupByDate: boolean,\n interactivesPendingReviews: InteractivesPendingReviews[],\n dependencies: (string | boolean)[]\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: MySharesTableData[] = [];\n\n const sharedObjectsMap = sharedObjects.reduce<Record<string, SharableEntity>>(\n (map, obj) => ({ [obj.id]: obj, ...map }),\n {}\n );\n const shareRecipientsMap = shareRecipients.reduce<Record<string, SharableRecipient>>(\n (map, obj) => ({ [obj.id]: obj, ...map }),\n {}\n );\n\n const interactivesPendingReviewsMap = interactivesPendingReviews?.reduce<\n Record<string, InteractivesPendingReviews>\n >(\n (map, obj) => ({ [obj.interactiveId]: obj, ...map }),\n {}\n );\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjectsMap[s.objectId];\n\n let recipients: SharableRecipient[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipientsMap[r.id];\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject) {\n const pendingReview = sharedObject.typeId === MasterType.Interactive &&\n interactivesPendingReviewsMap?.[(sharedObject as InteractiveMetadata).interactiveId];\n\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0,\n pendingReview: pendingReview?.pendingReviewCount,\n ...(s.type === ShareType.ShareLink ? {\n privacy: s.privacy,\n overrideRestrictions: s.overrideRestrictions\n } : {})\n });\n }\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [...dependencies]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { SharableEntity, SharableRecipient } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject, YearGroup } from 'libs/shared/interfaces';\n\nimport { useGetMySharesData } from 'apps/my-shares/components/my-shares-table/MySharesTableUtils';\nimport { MySharesTableHeading, MySharesTableRow } from 'apps/my-shares/components/my-shares-table-row/MySharesTableRow';\n\ninterface MySharesTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: SharableEntity[];\n shareRecipients: SharableRecipient[];\n interactivesPendingReview: InteractivesPendingReviews[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: any[];\n breakpoints?: Breakpoints;\n yearGroups?: YearGroup[];\n hasDemoInsights?: boolean;\n}\n\nexport function MySharesTable(props: MySharesTableProps): JSX.Element {\n const data = useGetMySharesData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.interactivesPendingReview,\n props.dependencies\n );\n\n return (\n <>\n {Object.keys(data).map((heading, i) => (\n <div key={heading}>\n <MySharesTableHeading heading={heading} isFirst={!props.hasDemoInsights && i === 0} />\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border-light'>\n {data[heading].map(shareData => (\n <MySharesTableRow\n key={shareData.share.id}\n shareData={shareData}\n yearGroups={props.yearGroups}\n getObjectActions={props.getObjectActions}\n getObjectAppLink={props.getObjectAppLink}\n imageCdnUrl={props.imageCdnUrl}\n breakpoints={props.breakpoints}\n />\n ))}\n </div>\n </div>\n ))}\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"table\":\"elIjR\",\"tableHeader\":\"xJKgP\",\"heading\":\"iWHol\",\"image\":\"TMQxq\",\"avatar\":\"_3GY1C\",\"date\":\"nz3va\",\"views\":\"FpDfX\",\"actions\":\"pOtyK\"};","import React from 'react';\n\nimport styles from './partial-my-shares-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`${styles.table} position-relative d-flex d-xl-grid flex-column flex-md-row align-items-md-center p-0 p-md-3 gap-3`}>\n <div className='col-12 col-md-3 col-xl-auto'>\n <div className={`partial-loading-background rounded ratio ratio-16x9 `} />\n </div>\n <div className='d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3'>\n <div className={`partial-loading-background col-8 col-xl-4`}> </div>\n <div className='d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8'>\n <div className='col-xl-5'>\n <div className={`${styles.avatar} partial-loading-background rounded-pill col-xl-8`} />\n </div>\n <div className='col-xl-4'>\n <div className={`${styles.date} partial-loading-background`}> </div>\n </div>\n <div className='col-xl-3'>\n <div className={`${styles.views} partial-loading-background`}> </div>\n </div>\n </div>\n </div>\n <div className={`position-absolute bottom-0 end-0 position-md-static d-flex justify-content-end gap-2 ms-auto col col-xl-12`}>\n <div className={`${styles.actions} partial-loading-background rounded d-none d-md-block px-3 p-lg-0 col-lg-6`} />\n <div className={`${styles.actions} partial-loading-background rounded px-3 p-lg-0 col-lg-4`} />\n </div>\n </div>\n );\n}\n\nexport function PartialMySharesTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <div className='no-full-width'>\n <div className={`${styles.table} d-block d-xl-grid gap-3 px-3`}>\n <div className={`partial-loading-background mb-2 ms-n3 ${styles.date}`}> </div>\n <div className='d-flex flex-column align-items-xl-center flex-xl-row gap-1 gap-xl-3'>\n <div className='col-xl-4' />\n <div className='d-flex align-items-center gap-2 gap-xl-0 pe-4 pe-md-0 col-xl-8'>\n <div className='col-xl-5'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n <div className='col-xl-4'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n <div className='col-xl-3'>\n <div className={`d-none d-xl-inline-block partial-loading-background mb-2 ${styles.date}`}> </div>\n </div>\n </div>\n </div>\n </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border-light'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border-light'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <div className={`partial-loading-background mb-2 ${styles.date}`}> </div>\n\n <div className='d-flex flex-column rounded-3 mb-4 gap-4 gap-md-0 border-md border-light'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { EntityType, LocationContext, SignUpDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\nimport { Text } from 'libs/shared/components/text/Text';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'myShares.mySharesEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function MySharesEmptyState() {\n return (\n <EmptyState>\n <EmptyState.Image src={ImageUrls.EmptyStates.MY_VIDEOS_PUBLIC} altText={getPhrase('heading')} />\n <EmptyState.Heading><Text namespace={namespace} phrase='heading' /></EmptyState.Heading>\n <EmptyState.Info><Text namespace={namespace} phrase='info' /></EmptyState.Info>\n <EmptyState.Cta\n text={LanguageService.getPhrase(namespace, 'cta')}\n appLink={{\n application: AppChannels.SIGN_UP,\n action: Actions.SignUp.SIGN_UP\n }}\n analyticsData={{}}\n analyticsOptions={{\n actionType: UserAction.Click,\n location: LocationContext.MySharesLanding,\n entity: EntityType.AppLink,\n workflowPhase: WorkflowPhase.Start,\n descriptor: SignUpDescriptors.SignUp\n }}\n />\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { EventVersion, ShareDescriptors, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { AudienceQueryParams } from 'libs/shared/apps/analytics/interfaces/AudienceQueryParams';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { getInsightsAppLink, getShareAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function getShareObjectActions(\n sharedObject: BaseObject,\n audienceParams?: AudienceQueryParams,\n hasInsights?: boolean,\n isPlugin?: boolean,\n breakpoints?: Breakpoints\n): ActionOptions[] {\n const insightObjectActions: ActionOptions[] = [];\n\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n const buttonProps = {\n button: !isMobile,\n className: 'btn btn-outline-dark'\n };\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n\n if (isPlugin) {\n return [{\n label: getPhrase('embedVideo'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.PLUGIN_SHARE,\n args: [sharedObject.id],\n params: { entityType: sharedObject.type }\n },\n ...buttonProps,\n analyticsOptions: {\n actionType: UserAction.Share,\n descriptor: ShareDescriptors.PluginEmbed,\n workflowPhase: WorkflowPhase.Start,\n eventVersion: EventVersion.V5\n }\n }];\n }\n\n if (hasInsights)\n insightObjectActions.push({\n svgName: cvSvgLibrary.Analytics,\n label: !breakpoints.md && getPhrase('viewInsights'),\n tooltip: breakpoints.md && getPhrase('viewInsights'),\n appLink: { ...getInsightsAppLink(sharedObject), params: audienceParams },\n group: 'insights',\n ...buttonProps\n });\n }\n\n insightObjectActions.push({\n label: !breakpoints.md && getPhrase('share'),\n tooltip: breakpoints.md && getPhrase('share'),\n svgName: cvSvgLibrary.Share,\n appLink: getShareAppLink(sharedObject),\n group: 'share',\n ...buttonProps\n });\n\n return insightObjectActions;\n}\n\nexport function useGetShareObjectActions(\n audienceParams?: AudienceQueryParams,\n hasInsights?: boolean,\n isPlugin?: boolean,\n breakpoints?: Breakpoints\n): ((object: BaseObject) => ActionOptions[]) | null {\n const audienceParamsKey = JSON.stringify(audienceParams);\n\n return React.useCallback(\n (object: BaseObject) => getShareObjectActions(\n object,\n audienceParams,\n hasInsights,\n isPlugin,\n breakpoints\n ),\n [ audienceParamsKey, ...Object.values(breakpoints || {}) ]\n );\n}\n\n\nexport function getTypeIdParams(params: HashObject): MasterType[] {\n const typeIdParams = params?.typeId;\n\n if (!typeIdParams) return [];\n\n if (typeof typeIdParams === 'string')\n return [+typeIdParams];\n\n return params?.typeId.map((typeId: MasterType) => +typeId) || [];\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsFilterHelper } from 'libs/shared/apps/analytics/utils/AnalyticsFilterUtils';\nimport { AudienceFilterView } from 'libs/shared/apps/analytics/views/audience-filter/AudienceFilterView';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { LocalPermissionName, PermissionName } from 'libs/shared/enums/PermissionName';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InsightsDemoRequests } from 'libs/shared/flight-requests/InsightsDemoRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAccessPolicy } from 'libs/shared/hooks/useAccessPolicy';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\nimport { Config, CurrentUser, InteractiveMetadata, YearGroup } from 'libs/shared/interfaces';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { InsightsTypeFilters } from 'apps/insights/components/insights-list/type-filter/InsightsTypeFilters';\nimport { InsightsAdminAlert } from 'apps/insights/views/insights-admin-alert/InsightsAdminAlert';\nimport { MySharesDemoInsight } from 'apps/my-shares/components/my-shares-demo-insight/MySharesDemoInsight';\nimport { MySharesTableEmptyState } from 'apps/my-shares/components/my-shares-table/empty-state/MySharesTableEmptyState';\nimport { MySharesTable } from 'apps/my-shares/components/my-shares-table/MySharesTable';\nimport { PartialMySharesTable } from 'apps/my-shares/components/my-shares-table/partial-loading/PartialMySharesTable';\nimport { MySharesEmptyState } from 'apps/my-shares/views/my-shares/empty-state/MySharesEmptyState';\nimport { getTypeIdParams, useGetShareObjectActions } from 'apps/my-shares/views/my-shares/MySharesViewUtils';\n\nconst namespace = 'myShares.myShares';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface MySharesViewProps {\n queryParams: HashObject;\n}\n\nexport function MySharesView(props: MySharesViewProps) {\n const { hasPermissions, hasLocalPermissions } = usePermissions();\n const { hasInsights } = useSettings(null);\n\n const { isPlugin } = usePluginHelper();\n\n const breakpoints = useBreakpoints();\n\n const typeIdAppLinkParams = getTypeIdParams(props.queryParams);\n const audienceAppLinkParams = AnalyticsFilterHelper.getAudienceAppLinkParams();\n const currentAppLink = getCurrentAppLink();\n const sentSharesParams = getSentSharesFilter();\n\n\n const shouldFetch = !hasLocalPermissions(LocalPermissionName.ViewMySharesLanding) ||\n hasPermissions(PermissionName.ViewMyShares) && hasInsights;\n\n const {\n sentShares,\n sharedObjects,\n shareRecipients,\n interactivesPendingReview,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl,\n dependencies\n } = useSharesTable(sentSharesParams, true, shouldFetch);\n\n useSetPageMetadata({ title: getPhrase('myShares') });\n const { hasClassrooms } = useSettings(null);\n\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n\n const hasInsightsPermission = hasInsights && hasPermissions(PermissionName.ViewInsights);\n\n const getSharedObjectActions = useGetShareObjectActions(\n audienceAppLinkParams,\n hasInsightsPermission,\n isPlugin,\n breakpoints\n );\n\n const { accessPolicy } = useAccessPolicy();\n\n const showDemoInsight = accessPolicy?.metadata?.hasDemoInsights;\n\n const demoInteractive = Flight.useBasicFetch<InteractiveMetadata>(showDemoInsight &&\n InsightsDemoRequests.interactiveMetadata());\n\n React.useEffect(() => {\n if (!(hasPermissions(PermissionName.ViewMyShares) && hasInsights))\n Core.LocationUtils.PageLoad('/');\n }, [shouldFetch]);\n\n function getSentSharesFilter(): GetSentItemsParams {\n return {\n recipientUserId: audienceAppLinkParams?.users,\n recipientGroupId: [ ...audienceAppLinkParams?.classroomGroups || [], ...audienceAppLinkParams?.classrooms || [] ],\n objectTypeId: typeIdAppLinkParams.length ? typeIdAppLinkParams : undefined\n };\n }\n\n function getCurrentAppLink(): Core.AppLink {\n return {\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME,\n params: {\n ...audienceAppLinkParams,\n typeId: typeIdAppLinkParams\n }\n };\n }\n\n if (!shouldFetch)\n return <MySharesEmptyState />;\n\n return (\n <div className='px-3'>\n <InsightsAdminAlert\n analyticsUrl={config.data?.analyticsWebUrl}\n hasAnalytics={hasPermissions(PermissionName.ViewCustomerAnalytics)}\n />\n\n <div className='d-flex justify-content-between border-bottom pb-3 mb-3'>\n <h1 className='mb-1'><Text namespace={namespace} phrase='myShares' /></h1>\n\n <AudienceFilterView hasClassroomsFeature={hasClassrooms} />\n </div>\n\n <div className='mb-3'>\n <InsightsTypeFilters appLink={currentAppLink} typeIdParams={typeIdAppLinkParams} breakpoints={breakpoints} />\n </div>\n\n {showDemoInsight && demoInteractive.data &&\n <MySharesDemoInsight demoInteractive={demoInteractive.data} liteUrl={config.data?.liteUrl} />\n }\n\n {(() => {\n if (showPartialLoading)\n return <PartialMySharesTable />;\n\n if (!sentShares.length)\n return (\n <MySharesTableEmptyState />\n );\n\n return (\n <>\n <MySharesTable\n sentShares={sentShares}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n interactivesPendingReview={interactivesPendingReview}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={imageCdnUrl}\n groupByDateShared\n dependencies={dependencies}\n breakpoints={breakpoints}\n yearGroups={yearGroups.data}\n hasDemoInsights={showDemoInsight}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipientIds(sentShares: UnionShareObject[]): string[] {\n return ArrayHelper.uniq(ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? [])), 'id').map(r => r.id);\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch, UseBatchFetchResult } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, InteractiveMetadata, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\n/**\n * As we are displaying data in an infinite list, we only want to show partial loading\n * on the initial fetch.\n * Whenever a new page is fetched, `sharedObjects.data` and `recipients.data` will be `undefined`,\n * as their key will change. So instead of using those values to determine whether or not to\n * show partial loading, we save the first time that they load in state and then use that.\n */\nexport function usePartialLoading(\n sentShare: UnionShareObject[],\n sharedObjectsFetchResult: UseBatchFetchResult<BaseObject>,\n recipientIds: string[],\n recipientsFetchResult: UseBatchFetchResult<BaseObject>,\n filterKey: string\n): boolean {\n const [ initialSharedObjectsLoaded, setInitialSharedObjectsLoaded ] = React.useState(\n !!sharedObjectsFetchResult.items\n );\n const [ initialRecipientsLoaded, setInitialRecipientsLoaded ] = React.useState(\n !!recipientsFetchResult.items\n );\n\n React.useEffect(() => {\n setInitialSharedObjectsLoaded(false);\n setInitialRecipientsLoaded(false);\n }, [filterKey]);\n\n React.useEffect(() => {\n if (!sharedObjectsFetchResult.isFetching && sharedObjectsFetchResult.items)\n setInitialSharedObjectsLoaded(true);\n }, [ sharedObjectsFetchResult.isFetching, filterKey ]);\n\n React.useEffect(() => {\n if (!recipientsFetchResult.isFetching && recipientsFetchResult.items)\n setInitialRecipientsLoaded(true);\n }, [ recipientsFetchResult.isFetching, filterKey ]);\n\n if (sentShare && !sentShare.length)\n return false;\n\n return !sentShare\n || !initialSharedObjectsLoaded\n || (recipientIds.length && !initialRecipientsLoaded);\n}\n\nexport function useSharesTable(\n params?: GetSentItemsParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => shouldFetch && ShareRequests.sentShare({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = sentShares?.map(s => s.objectId) ?? [];\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = ShareHelper.getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n \n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const filterKey = JSON.stringify(params);\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n sharedObjectsFetchResult,\n recipientIds,\n shareRecipientsFetchResult,\n filterKey\n );\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sharedObjects = getBatchFetchResultAsArray(sharedObjectsFetchResult);\n\n const [ shareRecipients, setShareRecipients ] = React.useState<BaseObject[]>(\n getBatchFetchResultAsArray(shareRecipientsFetchResult)\n );\n\n React.useEffect(() => {\n if (ObjectHelper.isEmpty(shareRecipientsFetchResult.items)) return;\n\n setShareRecipients(getBatchFetchResultAsArray(shareRecipientsFetchResult));\n }, [ !!shareRecipientsFetchResult.items, shareRecipientsFetchResult.isFetching, filterKey ]);\n \n const interactiveIds = getInteractiveIds();\n \n const interactivesPendingReview = Flight.useBasicFetch<InteractivesPendingReviews[]>(\n interactiveInsights && !!sharedObjectsFetchResult.items && currentUser.data &&\n InteractiveResultsRequests.pendingReviews({\n interactives: interactiveIds,\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n })\n );\n\n const dependencies = [ isFetching, filterKey, interactivesPendingReview.isFetching, shareRecipients.length ];\n \n function getInteractiveIds() {\n return interactiveInsights && sharedObjects?.length && sharedObjects.reduce(\n (acc, value) => {\n const isInteractive = value.typeId === MasterType.Interactive;\n\n if (!isInteractive) return acc;\n\n const interactive = value as InteractiveMetadata;\n return [ ...acc, { metadataId: interactive.id, interactiveId: interactive.interactiveId }];\n },\n []\n );\n }\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n interactivesPendingReview: interactivesPendingReview.data,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl,\n dependencies\n };\n}"],"names":["getInteractiveResultFilters","currentUser","filter","currentUserId","id","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","key","data","type","normalize","formatData","students","map","student","name","profileId","publicUser","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","Actions","props","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","className","length","idx","label","appLink","href","onClick","svgName","svgSize","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","title","spanHack","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","InsightsDemoRequests","interactive","interactiveMetadata","interactiveResults","videoViews","users","individualHeatmap","aggregateHeatmap","useBatchFetch","itemIds","getRequest","requests","chunk","responses","items","reduce","acc","item","isFetching","getAnalyticsRequestKey","baseKey","sharerId","userIdKey","Array","isArray","join","groupIdKey","DEMO_INTERACTIVE_STAGING_ID","DEMO_INTERACTIVE_PROD_ID","namespace","InsightsAdminAlert","storage","show","setShow","hasAnalytics","role","phrase","video","analyticsUrl","videoRoute","typeId","getAnalyticsUrl","target","getPhrase","DEMO_INSIGHTS_SHARE","share","objectTypeId","sharedObject","shareRecipients","dateShared","Date","toISOString","viewCount","DEMO_INSIGHTS_APPLINK","application","action","DEMO_INSIGHTS_ACTIONS","group","LanguageService","InsightsTypeFilters","isMobile","breakpoints","xs","sm","moreFilterOptions","MasterType","moreFiltersSelected","typeIdParams","some","option","showDropdown","setShowDropdown","moreFilters","setMoreFilters","applyFilter","currentParams","params","ArrayHelper","resetFilters","Text","InsightTypeFilterButton","typeFilters","Dropdown","onToggle","isShowing","variant","SvgContainer","Checkbox","onChange","checked","find","selectedFilter","selected","includes","currentAppLink","newType","newAppLink","getTypePhrase","AppLink","MySharesTableHeading","heading","isFirst","ShareObjectTitle","VideoHelper","canNavigate","subTextPhrase","getSubTextPhrase","VideoSubText","series","location","TitleSubText","entity","ShareViewHelper","actionType","requireMarking","options","smartCount","MySharesTableRow","shareData","shareLinkText","ShareType","ShareLinkHelper","entityTypeId","hasStudentExp","isPasswordProtected","linkExpireDate","privacy","overrideRestrictions","status","yearGroups","isDesktop","xl","xxl","isCollection","SharedObjectImage","object","getObjectAppLink","showVideoMetadata","locationContext","imageOptions","size","pendingReview","showCollectionMask","showVideoCount","children","SharedToPill","text","imageCdnUrl","S","getObjectActions","MySharesDemoInsight","isStaging","liteUrl","demoInteractive","MySharesTableEmptyState","EmptyState","src","ImageUrls","getDateShared","recipients","dateCreated","datesShared","r","date1","date2","DateHelper","MySharesTable","sentShares","sharedObjects","groupByDate","interactivesPendingReviews","dependencies","groupByDateShared","interactivesPendingReview","tableData","sharedObjectsMap","obj","shareRecipientsMap","interactivesPendingReviewsMap","s","objectId","recipient","pendingReviewCount","ShareHelper","Object","keys","i","hasDemoInsights","PartialRow","PartialMySharesTable","MySharesEmptyState","altText","workflowPhase","descriptor","SignUp","useGetShareObjectActions","audienceParams","hasInsights","isPlugin","audienceParamsKey","JSON","stringify","insightObjectActions","buttonProps","canConsume","args","entityType","eventVersion","md","getShareObjectActions","values","MySharesView","usePermissions","hasPermissions","hasLocalPermissions","useSettings","usePluginHelper","useBreakpoints","typeIdAppLinkParams","queryParams","audienceAppLinkParams","sentSharesParams","recipientUserId","recipientGroupId","classroomGroups","classrooms","undefined","shouldFetch","PermissionName","useSharesTable","showPartialLoading","nextCursor","hasMore","fetchNext","useSetPageMetadata","hasClassrooms","config","ConfigRequests","UserRequests","isAuthenticated","CustomerRequests","getSharedObjectActions","accessPolicy","useAccessPolicy","showDemoInsight","metadata","analyticsWebUrl","AudienceFilterView","hasClassroomsFeature","InfiniteScrollFooter","getDirectShares","getRecipientIds","d","getBatchFetchResultAsArray","result","interactiveInsights","fetch","cursor","ShareRequests","isFetchingSentShares","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","shareRecipientsFetchResult","filterKey","sentShare","recipientsFetchResult","initialSharedObjectsLoaded","setInitialSharedObjectsLoaded","initialRecipientsLoaded","setInitialRecipientsLoaded","usePartialLoading","setShareRecipients","ObjectHelper","interactiveIds","value","metadataId","I","interactives","filters"],"sourceRoot":""}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/6965-46edd86c90-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/analytics/flight-requests/InteractiveResultsRequests.ts","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/shared-to-avatar-list.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-to-avatar-list/SharedToAvatarList.tsx","file:///app/packages/libs/shared/src/apps/share/constants/TableTheme.ts","file:///app/packages/libs/shared/src/components/actions/Actions.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/components/avatar-list/AvatarList.tsx","file:///app/packages/libs/shared/src/components/pill-tab-selector/PillTabSelector.tsx","file:///app/packages/libs/shared/src/hooks/UseBatchFetch.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRequestUtils.ts","file:///app/packages/libs/shared/src/utils/AnalyticsRouteHelper.ts","file:///app/packages/libs/shared/src/utils/GroupHelper.ts","file:///app/packages/projects/lite/src/apps/share/components/shares-header/SharesHeader.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/share-status-indicator/share-status-indicator.scss","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTableUtils.tsx","file:///app/packages/libs/shared/src/apps/share/components/shared-by-me/table/SharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/partial-shared-by-me-table.scss","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/partial-loading/PartialSharedByMeTable.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeViewUtils.tsx","file:///app/packages/projects/lite/src/apps/share/views/shared-by-me/SharedByMeView.tsx","file:///app/packages/libs/shared/src/utils/ShareHelper.ts","file:///app/packages/projects/lite/src/shared/hooks/useSharesTable.ts","file:///app/packages/libs/shared/src/components/pill-tab-selector/pill-tab-selector.scss","file:///app/node_modules/timeago.js/esm/lang/en_US.js","file:///app/node_modules/timeago.js/esm/lang/zh_CN.js","file:///app/node_modules/timeago.js/esm/register.js","file:///app/node_modules/timeago.js/esm/utils/date.js","file:///app/node_modules/timeago.js/esm/format.js","file:///app/node_modules/timeago.js/esm/index.js"],"sourcesContent":["import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { MarkInteractiveAnswer } from 'libs/shared/apps/analytics/interfaces/MarkInteractiveAnswer';\nimport { InteractiveResultsReport } from 'libs/shared/apps/analytics/interfaces/requests/InteractiveResultsReport';\nimport { InteractivesPendingReviewsRequest } from 'libs/shared/apps/analytics/interfaces/requests/InteractivesPendingReviewsRequest';\nimport { AnalyticsRequestFilter, CurrentUser, InteractiveResultSet } from 'libs/shared/interfaces';\nimport { getAnalyticsRequestKey } from 'libs/shared/utils/AnalyticsRequestUtils';\n\ninterface InteractiveResultFilters {\n currentUserId: string;\n currentCustomerId: string;\n dateRange?: { start: string, end: string }\n userIds?: string | string[];\n classroomsAndGroups?: string | string[];\n}\n\nfunction getInteractiveResultFilters(\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter\n): InteractiveResultFilters {\n return {\n currentUserId: currentUser.id,\n currentCustomerId: currentUser.customerId,\n dateRange: { start: filter.start, end: filter.end },\n userIds: filter.userId,\n classroomsAndGroups: filter.groupId\n };\n}\n\nexport const InteractiveResultsRequests = {\n /** \n * This endpoint returns data with a lot of duplicated ids,\n * e.g. student answers to the same question will have the same id.\n * Because of that, we don't normalize.\n */\n interactiveResultSet(\n interactiveId: string,\n interactiveMetadataId: string,\n currentUser: CurrentUser,\n filter: AnalyticsRequestFilter,\n includePublicResults: boolean,\n success?: (data: InteractiveResultSet) => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: includePublicResults ?\n `/api/domain/v3/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}` :\n `/api/domain/v2/analytics/interactives/${interactiveId}/metadata/${interactiveMetadataId}`,\n key: getAnalyticsRequestKey(`interactive:result:set:${interactiveId}:${interactiveMetadataId}`, filter),\n data: getInteractiveResultFilters(currentUser, filter),\n type: HttpVerbs.POST,\n normalize: false,\n formatData: (data: any) => {\n return {\n ...data,\n students: data.students.map((student: any) => {\n if (!student.name || !student.profileId)\n return student;\n\n return {\n ...student,\n publicUser: {\n profileId: student.profileId,\n name: student.name\n }\n };\n })\n };\n },\n success,\n error,\n always\n };\n },\n \n /**\n * As the response from `interactiveResultSet` isn't normalised, we need to invalidate the cache\n * to update the results data.\n */\n mark(\n interactiveId: string,\n interactiveMetadataId: string,\n answerId: string,\n data: MarkInteractiveAnswer,\n success?: () => void,\n error?: (data: any) => void,\n always?: () => void\n ): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/answers/${answerId}`,\n key: `mark:answer:${answerId}:${data.resultId}`,\n type: HttpVerbs.PUT,\n data,\n normalize: false,\n invalidationKeys: `interactive:result:set:${interactiveId}:${interactiveMetadataId}`,\n success,\n error,\n always\n };\n },\n\n pendingReviews(data: InteractivesPendingReviewsRequest): Flight.Request {\n return {\n url: `/api/domain/v1/analytics/interactives/pending-reviews/summary`,\n key: `interactives:pending:reviews`,\n type: HttpVerbs.POST,\n data\n };\n },\n\n interactiveResultsReport(data: InteractiveResultsReport): Flight.Request {\n return {\n url: '{gateway}/v2/analytics/interactives/report',\n key: 'interactive:results:report',\n data,\n type: HttpVerbs.POST,\n normalize: false\n };\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"avatarContainer\":\"ByxQa\",\"sm\":\"EgJ0v\",\"sharedAvatar\":\"cW0NT\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { Avatar } from 'libs/shared/components/avatar/Avatar';\nimport { AvatarItemProps, AvatarList } from 'libs/shared/components/avatar-list/AvatarList';\nimport { IconCircle } from 'libs/shared/components/icon-circle/IconCircle';\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Classroom, ClassroomGroup, User } from 'libs/shared/interfaces';\nimport { mapColourToBsVariant } from 'libs/shared/utils/GroupHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { UserHelper } from 'libs/shared/utils/UserHelper';\n\nimport styles from './shared-to-avatar-list.scss';\n\nconst namespace = 'reportsShare.sharedToAvatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getHiddenRecipientText(hiddenRecipients: BaseObject[]): string {\n const counts = ArrayHelper.countBy(hiddenRecipients, 'typeId');\n const userCount = counts[MasterType.User];\n const classroomCount = counts[MasterType.Classroom];\n const groupCount = counts[MasterType.ClassroomGroup];\n\n if (userCount && classroomCount && groupCount)\n return getPhrase('classroomsGroupsAndUsers', { userCount, classroomCount, groupCount });\n\n if (userCount && classroomCount)\n return getPhrase('classroomsAndUsers', { userCount, classroomCount });\n\n if (userCount && groupCount)\n return getPhrase('groupsAndUsers', { userCount, groupCount });\n\n if (classroomCount && groupCount)\n return getPhrase('classroomsAndGroups', { classroomCount, groupCount });\n\n if (userCount)\n return getPhrase('users', { userCount });\n\n if (classroomCount)\n return getPhrase('classrooms', { classroomCount });\n\n if (groupCount)\n return getPhrase('groups', { groupCount });\n}\n\nfunction SharedToAvatar(props: AvatarItemProps): JSX.Element {\n const user: User = props.item?.typeId === MasterType.User && props.item as User;\n const classroom: Classroom = props.item?.typeId === MasterType.Classroom && props.item as Classroom;\n const classroomGroup: ClassroomGroup = props.item?.typeId === MasterType.ClassroomGroup\n && props.item as ClassroomGroup;\n\n const svgContainerClassName = 'd-flex justify-content-center align-items-center text-white rounded-circle h-100 w-100';\n\n return (\n <>\n {!!user &&\n <Tooltip title={`${user.name} ${user.surname}`} spanHack spanHackClassName='h-100 w-100'>\n <Avatar\n imageUrl={user.avatar?.url}\n imageCdnUrl={props.imageCdnUrl}\n initials={UserHelper.getInitials(user.name, user.surname)}\n extraClasses={styles.sharedAvatar}\n />\n </Tooltip>\n }\n {!!classroom &&\n <Tooltip title={classroom.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Classrooms}\n svgSize={SvgContainerSize.Large}\n variant='teal'\n />\n </div>\n </Tooltip>\n }\n {!!classroomGroup &&\n <Tooltip title={classroomGroup.name} spanHack spanHackClassName='h-100 w-100'>\n <div className={svgContainerClassName}>\n <IconCircle\n svgName={cvSvgLibrary.Group}\n variant={mapColourToBsVariant(classroomGroup.metadata?.colour)}\n />\n </div>\n </Tooltip>\n }\n </>\n );\n}\n\n\ninterface AnonymousSharedToAvatarProps {\n avatarSize?: 'md' | 'sm';\n}\n\nexport function AnonymousSharedToAvatar(props: AnonymousSharedToAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={getPhrase('anonymous')}\n spanHack\n spanHackClassName='bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100'\n >\n <SvgContainer svgName={cvSvgLibrary.Anonymous} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedLinkAvatarProps {\n text?: string;\n avatarSize?: 'md' | 'sm';\n className?: string;\n}\n\nexport function SharedLinkAvatar(props: SharedLinkAvatarProps): JSX.Element {\n return (\n <div className={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}>\n <Tooltip\n title={props.text || getPhrase('sharedLink')}\n spanHack\n spanHackClassName={`bg-light text-dark d-flex justify-content-center align-items-center rounded-circle h-100 w-100 ${props.className || ''}`}\n >\n <SvgContainer svgName={cvSvgLibrary.Link} size={props.avatarSize === 'sm' ? SvgContainerSize.Small : null} />\n </Tooltip>\n </div>\n );\n}\n\ninterface SharedToAvatarListProps {\n recipients: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nSharedToAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function SharedToAvatarList(props: SharedToAvatarListProps): JSX.Element {\n return (\n <AvatarList\n {...props}\n items={props.recipients}\n avatarItem={SharedToAvatar}\n avatarContainerClassname={`${styles.avatarContainer} ${props.avatarSize === 'sm' ? styles.sm : ''}`}\n getHiddenTooltip={getHiddenRecipientText}\n hasShareLink={props.hasShareLink}\n shareLinkText={props.shareLinkText}\n />\n );\n}","import { TableTheme } from 'libs/shared/components/table/Table';\n\nexport const SHARES_TABLE_THEME: TableTheme = {\n table: 'striped-list no-full-width pb-3',\n header: 'fw-semibold pb-1',\n headerCell: `py-2 ps-2 text-nowrap`,\n row: 'striped-row rounded',\n cell: 'd-flex align-items-center p-2'\n};","import * as React from 'react';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { IconButton } from 'libs/shared/components/icon-button/IconButton';\nimport { SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nimport { ActionButton } from './ActionButton';\nimport { ActionsDropdown } from './ActionsDropdown';\n\nexport interface ActionOptions {\n order?: number;\n label?: string | (() => JSX.Element);\n appLink?: Core.AppLink;\n href?: string;\n onClick?: () => void;\n svgName?: string;\n className?: string;\n button?: boolean; // If true, a button will be rendered. Otherwise the action will be rendered in the dropdown.\n tooltip?: string;\n showSpinner?: boolean;\n showBorder?: boolean; // only works for button without text label\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n disabled?: boolean;\n openInNewTab?: boolean; // Only used if appLink or href is provided\n group?: string;\n lazyPlaceholder?: boolean;\n}\n\nexport type ActionGenerator = (obj: BaseObject) => ActionOptions[];\n\ninterface ActionsProps {\n actions: ActionOptions[];\n className?: string;\n actionsDropdownClassName?: string;\n dropdownToggleSvgSize?: SvgContainerSize;\n sortComponent?: JSX.Element;\n customSize?: boolean;\n fetchMore?: () => void;\n}\n\nexport function Actions(props: ActionsProps): JSX.Element {\n const orderedActions = React.useMemo(() => props.actions.sort((a, b) => a.order - b.order), [props.actions]);\n\n const buttonActions: ActionOptions[] = [];\n const moreActions: ActionOptions[] = [];\n\n orderedActions.forEach(a => {\n if (a.button)\n buttonActions.push(a);\n else\n moreActions.push(a);\n });\n\n let className = 'd-flex';\n\n if (props.className)\n className += ` ${props.className}`;\n\n if (!buttonActions.length && !moreActions.length)\n return <></>;\n\n return (\n <div className={className}>\n {buttonActions.length ? buttonActions.map((a, idx) => (\n <React.Fragment key={idx}>\n {(() => {\n if (a.label) {\n const label = FunctionHelper.isFunction(a.label)\n ? a.label\n : () => <>{a.label}</>;\n\n return (\n <ActionButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n svgSize={props.dropdownToggleSvgSize}\n className={a.className}\n tooltip={a.tooltip}\n showSpinner={a.showSpinner}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n >\n {label()}\n </ActionButton>\n );\n }\n\n const iconButton = (\n <IconButton\n appLink={a.appLink}\n href={a.href}\n onClick={a.onClick}\n svgName={a.svgName}\n className={a.className}\n analyticsData={a.analyticsData}\n analyticsOptions={a.analyticsOptions}\n openInNewTab={a.openInNewTab}\n disabled={a.disabled}\n showBorder={a.showBorder}\n customSize={props.customSize}\n ariaLabel={a.tooltip}\n />\n );\n\n return a.tooltip\n ? <Tooltip title={a.tooltip} spanHack>{iconButton}</Tooltip>\n : iconButton;\n })()}\n </React.Fragment>\n )) : <></>}\n {props.sortComponent && props.sortComponent}\n {moreActions.length ? (\n <ActionsDropdown\n actions={moreActions}\n dropdownToggleClassName={props.actionsDropdownClassName}\n dropdownToggleSvgSize={props.dropdownToggleSvgSize}\n fetchMore={props.fetchMore}\n />\n ) : <></>}\n </div>\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}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedLinkAvatar } from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { BaseObject } from 'libs/shared/interfaces';\n\nconst namespace = 'shared.avatarList';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface AvatarItemProps {\n imageCdnUrl: string;\n index: number;\n item?: BaseObject;\n hiddenItems?: BaseObject[];\n maxAvatars?: number;\n}\n\ninterface AvatarListProps {\n items: BaseObject[];\n imageCdnUrl: string;\n maxAvatars?: number;\n avatarItem?: (props: AvatarItemProps) => JSX.Element;\n getHiddenTooltip?: (hiddenItems: BaseObject[]) => string;\n numberClassname?: string;\n avatarContainerClassname?: string;\n roleToDisplay?: 'student' | 'staff';\n hasShareLink?: boolean;\n avatarSize?: 'md' | 'sm';\n shareLinkText?: string;\n}\n\nAvatarList.defaultProps = {\n maxAvatars: 5\n};\n\nexport function AvatarList(props: AvatarListProps): JSX.Element {\n const itemsToDisplay = props.items.length > props.maxAvatars\n ? props.items.slice(0, props.maxAvatars - 1)\n : props.items;\n\n const hiddenItems = props.items.length > itemsToDisplay.length\n ? props.items.slice(props.maxAvatars - 1)\n : [];\n\n const AvatarItem = props.avatarItem;\n const hiddenItemsCounts = hiddenItems.length;\n const translateX = props.avatarSize === 'sm' ? 4 : 8;\n\n function getTooltip() {\n if (props.getHiddenTooltip)\n return props.getHiddenTooltip(hiddenItems);\n\n if (props.roleToDisplay)\n return getPhrase(props.roleToDisplay === 'staff' ? 'staff' : 'student', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n\n return getPhrase('users', { count: hiddenItemsCounts, smartCount: hiddenItemsCounts });\n }\n\n function getContainerStyles() {\n return {\n marginRight: `-${((itemsToDisplay.length - 1) + (hiddenItems.length ? 1 : 0) + (props.hasShareLink ? 1 : 0)) * translateX}px`\n };\n }\n\n function getAvatarStyles(idx: number) {\n return {\n transform: `translateX(${(props.hasShareLink ? idx + 1 : idx) * -translateX}px)`,\n zIndex: props.maxAvatars - idx\n };\n }\n\n if (itemsToDisplay.length === 0 && hiddenItems.length === 0)\n return <></>;\n\n return (\n <div\n className='d-flex'\n style={getContainerStyles()}\n >\n {props.hasShareLink && (\n <div style={{ zIndex: props.maxAvatars + 1 }}>\n <SharedLinkAvatar text={props.shareLinkText} avatarSize={props.avatarSize} className='bg-dark text-white' />\n </div>\n )}\n {itemsToDisplay.map((item, idx) => (\n <div\n className={`${props.avatarContainerClassname || ''}`} key={item.id}\n style={getAvatarStyles(idx)}\n >\n <AvatarItem\n item={item}\n imageCdnUrl={props.imageCdnUrl}\n index={idx}\n maxAvatars={props.maxAvatars}\n />\n </div>\n ))}\n\n {!!hiddenItems.length && (\n <div\n className={`${props.avatarContainerClassname || ''} bg-white rounded-circle`}\n style={{ transform: `translateX(${itemsToDisplay.length * -translateX}px)`, zIndex: props.maxAvatars - itemsToDisplay.length }}\n >\n <Tooltip title={getTooltip()} spanHack spanHackClassName='h-100 w-100'>\n <div className={`d-flex justify-content-center align-items-center border border-dark rounded-circle h-100 w-100 ${props.numberClassname || ''}`}>\n {`+${hiddenItems.length}`}\n </div>\n </Tooltip>\n </div>\n )}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { AnalyticsOptions } from 'libs/analytics/interfaces';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Badge, BadgeType } from 'libs/shared/components/badges/Badge';\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\n\nimport { SvgContainer } from '../svg-container/SvgContainer';\n\nimport styles from './pill-tab-selector.scss';\n\ninterface TabContentsProps {\n tab: PillTab;\n}\n\nfunction TabContents(props: TabContentsProps): JSX.Element {\n return (\n <>\n {!!props.tab.svgName && (\n <div className={props.tab.name ? 'pe-1' : ''}>\n <SvgContainer svgName={props.tab.svgName} />\n </div>\n )}\n\n {props.tab.name}\n\n {typeof (props.tab.count) === 'number' && (\n <div className='ps-2'>\n <Badge type={BadgeType.Count} data={props.tab.count} />\n </div>\n )}\n </>\n );\n}\n\nexport interface PillTab {\n name: string;\n active: boolean;\n svgName?: string;\n\n className?: string;\n\n appLink?: Core.AppLink;\n onSelect?: () => void;\n\n analyticsData?: HashObject;\n analyticsOptions?: AnalyticsOptions;\n\n count?: number;\n}\n\ninterface PillTabSelectorProps {\n tabs: PillTab[];\n containerRef?: (el: HTMLElement) => void;\n listClassName?: string;\n className?: string;\n borderRadius?: 'sm' | 'lg'\n}\n\nPillTabSelector.defaultProps = {\n borderRadius: 'lg'\n};\n\nexport function PillTabSelector(props: PillTabSelectorProps): JSX.Element {\n function onSelectTab(tab: PillTab): void {\n if (tab.active || !tab.onSelect)\n return;\n\n tab.onSelect();\n\n if (tab.analyticsData && tab.analyticsOptions)\n AnalyticsHelper.logUserAction(tab.analyticsData, tab.analyticsOptions);\n }\n\n return (\n <nav className={props.className ?? ''} ref={props.containerRef}>\n <ul className={`\n list-unstyled d-inline-block m-0 ${styles.pillTabSelector}\n ${props.borderRadius ? styles.radiusSmall : ''}\n ${props.listClassName}\n `}>\n {props.tabs.map((tab, index) => {\n return (\n <li\n className={`\n p-0 ${styles.tab} ${tab.active ? 'btn btn-dark' : 'btn btn-outline-dark'}\n ${tab.name ? styles.minWidth : ''} ${tab.className}\n `}\n key={index}\n >\n {tab.appLink ? (\n <AppLink\n appLink={tab.appLink}\n analyticsData={tab.analyticsData}\n analyticsOptions={tab.analyticsOptions}\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n >\n <TabContents tab={tab} />\n </AppLink>\n ) : (\n <DivButton\n className={`\n cursor-pointer d-flex align-items-center justify-content-center\n text-decoration-none text-reset px-2 text-nowrap ${styles.tabLink}\n `}\n onClick={() => onSelectTab(tab)}\n >\n <TabContents tab={tab} />\n </DivButton>\n )}\n </li>\n );\n })}\n </ul>\n </nav>\n );\n}\n","import { Flight } from 'libs/common/flight';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { BaseObject } from 'libs/shared/interfaces';\n\nexport interface UseBatchFetchResult<T extends BaseObject> {\n items: { [key: string]: T} | null;\n isFetching: boolean;\n}\n\n/**\n * Used to fetch multiple items by id with Flight. Will fetch 25 items at a time firing off multiple\n * requests if there are more than 25 items.\n * This will return items as null until we have all our items. Items will be returned as an object with\n * their ids as they key for easy mapping\n * \n * @param itemIds \n * @param getRequest \n */\nexport function useBatchFetch<T extends BaseObject>(\n itemIds: string[],\n getRequest: (ids: string[]) => Flight.Request\n): UseBatchFetchResult<T> {\n const chunks = ArrayHelper.chunk<string>(itemIds, 25);\n\n const requests = chunks.map(chunk => getRequest(ArrayHelper.uniq(chunk)));\n\n const responses = Flight.useBasicFetchAll<T[]>(requests);\n\n const items = responses.data.length\n ? ArrayHelper.flatten(responses.data).reduce((acc, item) => ({ ...acc, [item.id]: item }), {})\n : null;\n\n return {\n items,\n isFetching: responses.isFetching\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 { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\n\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\n\nexport const AnalyticsRouteHelper = {\n getObjectUrl(config: Config, object: BaseObject): string {\n const baseUrl = config.analyticsWebUrl;\n\n if (!baseUrl)\n return;\n\n let relativeUrl = '';\n\n switch (object.typeId) {\n case MasterType.Video:\n relativeUrl = `/videos/${object.id}/overview`;\n break;\n\n case MasterType.Clip:\n relativeUrl = `/clips/${object.id}/overview`;\n break;\n\n case MasterType.Interactive:\n relativeUrl = `/interactives/${object.id}/overview`;\n break;\n }\n\n if (!relativeUrl)\n return;\n\n return UrlHelper.safeUrlConcat(baseUrl, relativeUrl);\n }\n};","import { ButtonProps } from 'react-bootstrap';\n\nimport { ClassroomGroupColour } from 'libs/shared/interfaces';\n\nexport function mapColourToBsVariant(groupColour: ClassroomGroupColour): ButtonProps['variant'] {\n switch (groupColour) {\n case ClassroomGroupColour.Pink:\n return 'pink';\n case ClassroomGroupColour.Orange:\n return 'orange';\n case ClassroomGroupColour.Green:\n return 'green';\n case ClassroomGroupColour.Blue:\n return 'blue';\n case ClassroomGroupColour.Purple:\n return 'purple';\n case ClassroomGroupColour.Indigo:\n return 'indigo';\n default:\n return 'pink';\n }\n}\n","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { PillTab, PillTabSelector } from 'libs/shared/components/pill-tab-selector/PillTabSelector';\nimport { ContextService } from 'libs/shared/services/ContextService';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'share.sharesHeader';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst SHARED_BY_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_BY_ME };\nconst SHARED_WITH_ME_APP_LINK = { application: AppChannels.MY_SHARES, action: Actions.MyShares.SHARED_WITH_ME };\n\nfunction getPillTabs(): PillTab[] {\n const currentAppLink = ContextService.getCurrentRoute()?.appLink;\n\n return [\n {\n name: getPhrase('sharedByMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_BY_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_BY_ME_APP_LINK.action\n },\n {\n name: getPhrase('sharedWithMe'),\n onSelect: () => Core.AppLinkHelper.trigger(SHARED_WITH_ME_APP_LINK),\n active: currentAppLink?.action === SHARED_WITH_ME_APP_LINK.action\n }\n ];\n}\n\nexport function SharesHeader(): JSX.Element {\n return (\n <div className='pb-3'>\n <h1 className='h2 mb-3'>{getPhrase('shares')}</h1>\n <PillTabSelector tabs={getPillTabs()} />\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { EmptyState } from 'libs/shared/components/empty-states/EmptyState';\n\nconst namespace = 'share.sharedByMeEmptyState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SharedByMeEmptyStateProps {\n imageUrl: string;\n appLink?: Core.AppLink;\n useInteractiveCopy?: boolean;\n}\n\nexport function SharedByMeEmptyState(props: SharedByMeEmptyStateProps): JSX.Element {\n return (\n <EmptyState>\n <EmptyState.Image src={props.imageUrl} size='small'/>\n <EmptyState.Heading>\n {getPhrase(props.useInteractiveCopy ? 'interactivesHeading' : 'genericHeading')}\n </EmptyState.Heading>\n <EmptyState.Info>{getPhrase(props.useInteractiveCopy ? 'interactivesInfo' : 'genericInfo')}</EmptyState.Info>\n {!!props.appLink &&\n <EmptyState.Cta appLink={props.appLink} text={getPhrase('cta')} />\n }\n </EmptyState>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SvgContainer, SvgContainerSize } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { ShareLinkStatus } from 'libs/shared/enums/ShareLinkStatus';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { UnionShareObject } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './share-status-indicator.scss';\n\nconst namespace = 'share.shareStatusIndicator';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getStatusPhrase(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return getPhrase('active');\n\n switch (share.status) {\n case ShareLinkStatus.Active:\n return getPhrase('active');\n\n case ShareLinkStatus.Expired:\n return getPhrase('expired');\n }\n}\n\nfunction getBgColourClassName(share: UnionShareObject): string {\n if (share.type === ShareType.DirectShare)\n return 'bg-success';\n \n switch (share.status) {\n case ShareLinkStatus.Active:\n return 'bg-success';\n\n case ShareLinkStatus.Expired:\n return 'bg-gray-500';\n }\n}\n\ninterface ShareStatusIndicatorProps {\n share: UnionShareObject;\n}\n\n/**\n * TODO: add support for deleted share links (currently the api doesn't return these.)\n */\nexport function ShareStatusIndicator(props: ShareStatusIndicatorProps): JSX.Element {\n if (props.share.type === ShareType.DirectShare && !props.share.recipients?.length)\n return <></>;\n\n if (props.share.type === ShareType.ShareLink && props.share.isPasswordProtected) {\n return (\n <Tooltip title={getPhrase('passwordProtected')} spanHack>\n <SvgContainer svgName={cvSvgLibrary.Lock} size={SvgContainerSize.Small} />\n </Tooltip>\n );\n }\n\n return (\n <Tooltip\n title={getStatusPhrase(props.share)}\n spanHack\n spanHackClassName={styles.indicatorContainer}\n >\n <div className={`${styles.indicator} ${getBgColourClassName(props.share)}`} />\n </Tooltip>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"indicatorContainer\":\"T6YAv\",\"indicator\":\"_MRHG\"};","import React from 'react';\nimport { Column } from 'react-table';\nimport { format as formatDate } from 'timeago.js';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\nimport { DateHelper } from 'libs/common/react/utils/DateHelper';\n\nimport { LocationContext, UserAction } from 'libs/analytics/interfaces';\n\nimport {\n ShareStatusIndicator\n} from 'libs/shared/apps/share/components/shared-by-me/share-status-indicator/ShareStatusIndicator';\nimport { SharedObjectImage } from 'libs/shared/apps/share/components/shared-object-image/SharedObjectImage';\nimport {\n AnonymousSharedToAvatar,\n SharedLinkAvatar,\n SharedToAvatarList\n} from 'libs/shared/apps/share/components/shared-to-avatar-list/SharedToAvatarList';\nimport { ShareHelper } from 'libs/shared/apps/share/utils/ShareHelper';\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions, Actions } from 'libs/shared/components/actions/Actions';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nconst namespace = 'share.sharedByMeTable';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getDateShared(share: UnionShareObject): string {\n if (share.type === ShareType.ShareLink || !share?.recipients?.length)\n return share.dateCreated;\n\n const datesShared = share.recipients.map(r => r.dateShared);\n\n datesShared.sort((date1, date2) => {\n if (DateHelper.isSame(date1, date2))\n return 0;\n\n return DateHelper.isAfter(date1, date2) ? 1 : -2;\n });\n\n\n if (!datesShared.length)\n return '';\n\n return ArrayHelper.last(datesShared);\n}\n\ninterface SharedByMeTableData {\n share: UnionShareObject;\n sharedObject: SharableEntity;\n dateShared: string;\n shareRecipients?: BaseObject[];\n viewCount: number;\n}\n\ntype TableDataGroupings = { [date: string]: SharedByMeTableData[] };\n\nexport function getColumns(\n index: number,\n dateHeading: string,\n getObjectAppLink: (object: BaseObject) => Core.AppLink,\n getObjectActions: (object: BaseObject) => ActionOptions[],\n imageCdnUrl: string,\n showStatus?: boolean,\n showViewCount?: boolean,\n breakpoints?: Breakpoints\n): Column<SharedByMeTableData>[] {\n const isMobile = breakpoints && (breakpoints.xs || breakpoints.sm);\n\n const columns: Column<SharedByMeTableData>[] = [\n {\n Header: showStatus ? '' : dateHeading,\n accessor: 'sharedObject',\n id: 'image',\n Cell: ({ value }) => (\n <div className='w-100'>\n <SharedObjectImage\n object={value}\n appLink={getObjectAppLink(value)}\n showVideoMetadata\n locationContext={LocationContext.SharedByMe}\n />\n </div>\n ),\n minWidth: 140,\n maxWidth: 30\n },\n {\n accessor: 'sharedObject',\n id: 'name',\n Cell: ({ value }) => {\n if (value.name) {\n if (VideoHelper.isVideoType(value) && !VideoHelper.getCanBeConsumed(value)?.canNavigate) {\n return (\n <span className='clamp-2'>\n {value.name}\n </span>\n );\n }\n\n return (\n <div className='clamp-2'>\n {VideoHelper.isVideoType(value) && (\n <VideoSubText\n type='series'\n video={value}\n appLink={'series' in value && value.series ? getObjectAppLink(value.series) : null}\n analyticsOptions={{ location: LocationContext.Insights }}\n />\n )}\n <AppLink\n appLink={getObjectAppLink(value)}\n analyticsData={{ id: value.id, name: value.name }}\n analyticsOptions={{\n entity: ShareViewHelper.getAnalyticsEntity(value.type),\n actionType: UserAction.Click,\n location: LocationContext.SharedByMe\n }}\n >\n {value.name}\n </AppLink>\n </div>\n );\n }\n\n return <span><Text namespace={namespace} phrase='videoUnavailable' /></span>;\n },\n width: 60\n },\n {\n Header: index === 0 ? getPhrase('sharedTo') : '',\n accessor: 'shareRecipients',\n Cell: ({ value }) => {\n if (!value)\n return <SharedLinkAvatar />;\n\n if (!value.length)\n return <AnonymousSharedToAvatar />;\n\n return <SharedToAvatarList recipients={value} imageCdnUrl={imageCdnUrl} maxAvatars={isMobile ? 1 : 2} />;\n },\n width: 40\n },\n !isMobile && {\n Header: index === 0 ? getPhrase('shared') : '',\n id: 'dateShared',\n accessor: s => formatDate(s.dateShared),\n width: 40\n },\n {\n accessor: 'sharedObject',\n id: 'actions',\n Cell: ({ value }) => (\n <Actions\n actions={getObjectActions(value)}\n className='w-100 justify-content-end pe-2'\n />\n ),\n width: 20\n }\n ];\n\n const statusColumn: Column<SharedByMeTableData> = {\n Header: dateHeading,\n accessor: 'share',\n id: 'status',\n Cell: ({ value }) => (\n <ShareStatusIndicator share={value} />\n ),\n width: 5\n };\n\n const viewCountColumn: Column<SharedByMeTableData> = {\n Header: getPhrase('views'),\n accessor: 'viewCount',\n width: 30\n };\n\n if (showStatus)\n columns.splice(0, 0, statusColumn);\n\n if (showViewCount)\n columns.splice(columns.length - 1, 0, viewCountColumn);\n\n return columns.filter((Boolean));\n}\n\nexport function useGetData(\n sentShares: UnionShareObject[],\n sharedObjects: BaseObject[],\n shareRecipients: BaseObject[],\n groupByDate: boolean,\n dependencies: (string | boolean)[]\n): TableDataGroupings {\n return React.useMemo(() => {\n const tableData: SharedByMeTableData[] = [];\n\n sentShares.forEach(s => {\n const sharedObject = sharedObjects.find(o => o.id === s.objectId);\n\n let recipients: BaseObject[] | null = null;\n\n if (s.type === ShareType.DirectShare) {\n recipients = [];\n\n s.recipients?.forEach(r => {\n const recipient = shareRecipients.find(s => s.id === r.id);\n\n if (recipient)\n recipients.push(recipient);\n });\n }\n\n // Skip if we don't have access to the shared object (e.g. if it's been deleted)\n if (sharedObject)\n tableData.push({\n share: s,\n sharedObject,\n shareRecipients: recipients,\n dateShared: getDateShared(s),\n viewCount: s.viewCount ?? 0\n });\n });\n\n if (!groupByDate)\n return { [getPhrase('title')]: tableData };\n\n return ShareHelper.groupByDateShared(tableData);\n }, [...dependencies]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\nimport { SHARES_TABLE_THEME } from 'libs/shared/apps/share/constants/TableTheme';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { Table } from 'libs/shared/components/table/Table';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, UnionShareObject } from 'libs/shared/interfaces';\n\nimport { getColumns, useGetData } from './SharedByMeTableUtils';\n\ninterface SharedByMeTableProps {\n sentShares: UnionShareObject[];\n sharedObjects: BaseObject[];\n shareRecipients: BaseObject[];\n getObjectAppLink: (object: BaseObject) => Core.AppLink;\n getObjectActions: (object: BaseObject) => ActionOptions[];\n imageCdnUrl: string;\n groupByDateShared?: boolean;\n showStatus?: boolean;\n showViewCount?: boolean;\n dependencies?: (string | boolean)[];\n breakpoints?: Breakpoints;\n}\n\nfunction SharedByMeTableMemo(props: SharedByMeTableProps): JSX.Element {\n const data = useGetData(\n props.sentShares,\n props.sharedObjects,\n props.shareRecipients,\n !!props.groupByDateShared,\n props.dependencies\n );\n\n return (\n <>\n {Object.keys(data).map((heading, index) => (\n <Table\n key={index}\n columns={getColumns(\n index,\n heading,\n props.getObjectAppLink,\n props.getObjectActions,\n props.imageCdnUrl,\n props.showStatus,\n props.showViewCount,\n props.breakpoints\n )}\n data={data[heading]}\n theme={SHARES_TABLE_THEME}\n />\n ))}\n </>\n );\n}\n\nexport const SharedByMeTable = React.memo(SharedByMeTableMemo);","// extracted by mini-css-extract-plugin\nexport default {\"imageColumn\":\"uIOaA\",\"nameColumn\":\"Nta2B\",\"sharedToColumn\":\"XTJBC\",\"dateSharedColumn\":\"HdARK\",\"actionsColumn\":\"DXyZw\",\"heading\":\"XZ6o7\",\"image\":\"MolfU\",\"name\":\"MM43m\",\"avatar\":\"EboYM\",\"date\":\"by_XM\",\"actions\":\"_S2M_\"};","import React from 'react';\n\nimport styles from './partial-shared-by-me-table.scss';\n\nfunction PartialRow(): JSX.Element {\n return (\n <div className={`d-flex striped-row rounded`}>\n <div className={`d-flex align-items-center justify-content-center p-2 ${styles.imageColumn}`}>\n <div className={`partial-loading-background rounded w-100 ${styles.image}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.nameColumn}`}>\n <div className={`partial-loading-background w-75 ${styles.name}`} />\n </div>\n <div className={`d-flex align-items-center p-2 ${styles.sharedToColumn}`}>\n <div className={`partial-loading-background ${styles.avatar}`} />\n </div>\n <div className={`d-none d-md-flex align-items-center p-2 ${styles.dateSharedColumn}`}>\n <div className={`partial-loading-background ${styles.date}`} />\n </div>\n <div className={`d-flex align-items-center justify-content-end p-2 ${styles.actionsColumn}`}>\n <div className={`partial-loading-background rounded me-2 ${styles.actions}`} />\n </div>\n </div>\n );\n}\n\ninterface PartialHeaderProps {\n fullHeader?: boolean;\n}\n\nfunction PartialHeader(props: PartialHeaderProps): JSX.Element {\n return (\n <div className='d-flex mb-1'>\n <div className={`${styles.imageColumn} p-2`}>\n <div className={`partial-loading-background ${styles.heading}`} />\n </div>\n <div className={`${styles.nameColumn} p-2`}>\n \n </div>\n <div className={`${styles.sharedToColumn} p-2`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.dateSharedColumn} p-2 d-none d-md-flex`}>\n {props.fullHeader\n ? <div className={`partial-loading-background ${styles.heading}`} />\n : <> </>\n }\n </div>\n <div className={`${styles.actionsColumn} p-2`}>\n \n </div>\n </div>\n );\n}\n\nexport function PartialSharedByMeTable(): JSX.Element {\n return (\n <>\n <div className='mb-3'>\n <PartialHeader fullHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n\n <div className='mb-3'>\n <PartialHeader />\n\n <div className='striped-list no-full-width'>\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n <PartialRow />\n </div>\n </div>\n </>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/react/index';\n\nimport { SharableEntityType } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Tooltip } from 'libs/shared/components/tooltip/Tooltip';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { Breakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { BaseObject, Config } from 'libs/shared/interfaces';\nimport { AnalyticsRouteHelper } from 'libs/shared/utils/AnalyticsRouteHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { VideoHelper } from 'libs/shared/utils/VideoHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nfunction getShareActionOptions(sharedObject: BaseObject, entityType: SharableEntityType): ActionOptions {\n return {\n label: getPhrase('editShareSettings'),\n appLink: {\n application: AppChannels.DEFAULT,\n action: Actions.Default.SHARE,\n args: [sharedObject.id],\n params: { entityType }\n }\n };\n}\n\ninterface SeeUsageActionProps {\n label: string;\n url?: string;\n}\n\nfunction SeeUsageAction(props: SeeUsageActionProps): JSX.Element {\n return (\n <Tooltip title={props.label} spanHack>\n <a\n href={props.url}\n target='_blank'\n >\n <SvgContainer svgName={cvSvgLibrary.Analytics} />\n </a>\n </Tooltip>\n );\n}\n\nfunction getSharedObjectActions(\n sharedObject: BaseObject,\n isMobile: boolean,\n config: Config\n): ActionOptions[] {\n let entityType: SharableEntityType;\n let analyticsPhrase = 'viewUsage';\n\n if (VideoHelper.isVideo(sharedObject))\n entityType = 'video';\n\n if (VideoHelper.isInteractive(sharedObject)) {\n entityType = 'interactive';\n analyticsPhrase = 'viewResults';\n }\n\n if (VideoHelper.isClip(sharedObject))\n entityType = 'clip';\n\n if (sharedObject.typeId === MasterType.Series)\n entityType = 'series';\n\n if (sharedObject.typeId === MasterType.Playlist)\n entityType = 'playlist';\n\n if (VideoHelper.isVideoType(sharedObject)) {\n const { canConsume } = VideoHelper.getCanBeConsumed(sharedObject);\n\n if (!canConsume)\n return [];\n }\n\n const sharedObjectActions = [getShareActionOptions(sharedObject, entityType)];\n\n const objectUrl = AnalyticsRouteHelper.getObjectUrl(config, sharedObject);\n if (objectUrl) {\n sharedObjectActions.push({\n label: !isMobile\n ? () => <SeeUsageAction label={getPhrase(analyticsPhrase)} url={objectUrl} />\n : getPhrase(analyticsPhrase),\n\n className: 'btn btn-link',\n button: !isMobile,\n href: AnalyticsRouteHelper.getObjectUrl(config, sharedObject),\n openInNewTab: true\n });\n }\n\n return sharedObjectActions;\n}\n\nexport function useGetSharedObjectActions(breakpoints: Breakpoints): ((object: BaseObject) => ActionOptions[]) | null {\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const isMobile = breakpoints.xs || breakpoints.sm;\n\n return React.useCallback((object: BaseObject) =>\n getSharedObjectActions(object, isMobile, config.data), [isMobile]);\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { SharedByMeEmptyState } from 'libs/shared/apps/share/components/shared-by-me/empty-state/SharedByMeEmptyState';\nimport { SharedByMeTable } from 'libs/shared/apps/share/components/shared-by-me/table/SharedByMeTable';\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { useBreakpoints } from 'libs/shared/hooks/useBreakpoints';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { useSettings } from 'libs/shared/hooks/useSettings';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { useSharesTable } from 'shared/hooks/useSharesTable';\nimport { getObjectAppLink } from 'shared/utils/ObjectAppLinkHelper';\n\nimport { SharesHeader } from 'apps/share/components/shares-header/SharesHeader';\n\nimport { PartialSharedByMeTable } from './partial-loading/PartialSharedByMeTable';\nimport {\n useGetSharedObjectActions\n} from './SharedByMeViewUtils';\n\nconst namespace = 'liteShare.sharedByMe';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport function SharedByMeView(): JSX.Element {\n const { hasPermissions } = usePermissions();\n const { hasInsights } = useSettings(null);\n\n const breakpoints = useBreakpoints();\n\n const {\n sentShares,\n sharedObjects,\n shareRecipients,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl\n } = useSharesTable();\n\n const hasMyShares = hasPermissions(PermissionName.ViewMyShares) && hasInsights;\n\n React.useEffect(() => {\n if (hasMyShares)\n Core.AppLinkHelper.trigger({\n application: AppChannels.MY_SHARES,\n action: Actions.MyShares.HOME\n }, { replace: true });\n }, [hasMyShares]);\n\n useSetPageMetadata({ title: getPhrase('sharedByMe') });\n\n const getSharedObjectActions = useGetSharedObjectActions(breakpoints);\n\n return (\n <div className='px-3'>\n {!hasMyShares && <SharesHeader />}\n\n {(() => {\n if (showPartialLoading)\n return <PartialSharedByMeTable />;\n\n if (!sentShares.length)\n return (\n <SharedByMeEmptyState\n appLink={{ application: AppChannels.DASHBOARD, action: Actions.Dashboard.HOME }}\n imageUrl={ImageUrls.EmptyStates.Share.SHARED_WITH_ME}\n />\n );\n\n return (\n <>\n <SharedByMeTable\n sentShares={sentShares}\n sharedObjects={sharedObjects}\n shareRecipients={shareRecipients}\n getObjectAppLink={getObjectAppLink}\n getObjectActions={getSharedObjectActions}\n imageCdnUrl={imageCdnUrl}\n groupByDateShared\n dependencies={[isFetching]}\n breakpoints={breakpoints}\n />\n {(hasMore || isFetching) &&\n <InfiniteScrollFooter isFetching={isFetching} fetchNext={fetchNext} nextCursor={nextCursor} />\n }\n </>\n );\n })()}\n </div>\n );\n}","import { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { ShareType } from 'libs/shared/enums/ShareType';\nimport { DirectShare, UnionShareObject } from 'libs/shared/interfaces';\n\nexport const ShareHelper = {\n getDirectShares(sentShares: UnionShareObject[]): DirectShare[] {\n return sentShares?.filter(s => s.type === ShareType.DirectShare) as DirectShare[] ?? [];\n },\n \n getRecipientIds(sentShares: UnionShareObject[]): string[] {\n return ArrayHelper.uniq(ArrayHelper.flatten(ShareHelper.getDirectShares(sentShares).map(d => d.recipients ?? [])), 'id').map(r => r.id);\n }\n};","import React from 'react';\n\nimport { Flight } from 'libs/common/react/index';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { InteractiveResultsRequests } from 'libs/shared/apps/analytics/flight-requests/InteractiveResultsRequests';\nimport { InteractivesPendingReviews } from 'libs/shared/apps/analytics/interfaces/response/InteractivesPendingReviewsResponse';\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { GetSentItemsParams } from 'libs/shared/apps/share/interfaces/requests/GetSentItemsParams';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useBatchFetch, UseBatchFetchResult } from 'libs/shared/hooks/UseBatchFetch';\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\nimport { BaseObject, Config, CurrentUser, InteractiveMetadata, UnionShareObject } from 'libs/shared/interfaces';\nimport { ShareHelper } from 'libs/shared/utils/ShareHelper';\n\n\nexport function getBatchFetchResultAsArray(result: UseBatchFetchResult<BaseObject>): BaseObject[] {\n return result.items ? Object.values(result.items) : [];\n}\n\n/**\n * As we are displaying data in an infinite list, we only want to show partial loading\n * on the initial fetch.\n * Whenever a new page is fetched, `sharedObjects.data` and `recipients.data` will be `undefined`,\n * as their key will change. So instead of using those values to determine whether or not to\n * show partial loading, we save the first time that they load in state and then use that.\n */\nexport function usePartialLoading(\n sentShare: UnionShareObject[],\n sharedObjectsFetchResult: UseBatchFetchResult<BaseObject>,\n recipientIds: string[],\n recipientsFetchResult: UseBatchFetchResult<BaseObject>,\n filterKey: string\n): boolean {\n const [ initialSharedObjectsLoaded, setInitialSharedObjectsLoaded ] = React.useState(\n !!sharedObjectsFetchResult.items\n );\n const [ initialRecipientsLoaded, setInitialRecipientsLoaded ] = React.useState(\n !!recipientsFetchResult.items\n );\n\n React.useEffect(() => {\n setInitialSharedObjectsLoaded(false);\n setInitialRecipientsLoaded(false);\n }, [filterKey]);\n\n React.useEffect(() => {\n if (!sharedObjectsFetchResult.isFetching && sharedObjectsFetchResult.items)\n setInitialSharedObjectsLoaded(true);\n }, [ sharedObjectsFetchResult.isFetching, filterKey ]);\n\n React.useEffect(() => {\n if (!recipientsFetchResult.isFetching && recipientsFetchResult.items)\n setInitialRecipientsLoaded(true);\n }, [ recipientsFetchResult.isFetching, filterKey ]);\n\n if (sentShare && !sentShare.length)\n return false;\n\n return !sentShare\n || !initialSharedObjectsLoaded\n || (recipientIds.length && !initialRecipientsLoaded);\n}\n\nexport function useSharesTable(\n params?: GetSentItemsParams,\n interactiveInsights?: boolean,\n shouldFetch: boolean = true\n) {\n const fetch = Flight.useGetFetch();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n const getRequest = (cursor?: string) => shouldFetch && ShareRequests.sentShare({\n cursor,\n ...params\n });\n const fetchNext = (cursor?: string) => fetch(getRequest(cursor));\n\n const {\n items: sentShares,\n hasMore,\n isFetching: isFetchingSentShares,\n nextCursor\n } = useInfiniteList<UnionShareObject>(getRequest, fetchNext);\n\n const sharedObjectIds = sentShares?.map(s => s.objectId) ?? [];\n\n const sharedObjectsFetchResult = useBatchFetch(sharedObjectIds, (ids: string[]) => {\n return ShareRequests.sharedObjectsById(ids);\n });\n\n const recipientIds = ShareHelper.getRecipientIds(sentShares);\n\n const shareRecipientsFetchResult = useBatchFetch(recipientIds, (ids: string[]) => {\n return ShareRequests.getRecipientsById(ids, currentUser.data.customerId);\n });\n \n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n\n const filterKey = JSON.stringify(params);\n\n const showPartialLoading = usePartialLoading(\n sentShares,\n sharedObjectsFetchResult,\n recipientIds,\n shareRecipientsFetchResult,\n filterKey\n );\n\n // Wait until all data is fetched before telling the table to re-render\n const isFetching = isFetchingSentShares\n || sharedObjectsFetchResult.isFetching\n || shareRecipientsFetchResult.isFetching;\n\n const sharedObjects = getBatchFetchResultAsArray(sharedObjectsFetchResult);\n\n const [ shareRecipients, setShareRecipients ] = React.useState<BaseObject[]>(\n getBatchFetchResultAsArray(shareRecipientsFetchResult)\n );\n\n React.useEffect(() => {\n if (ObjectHelper.isEmpty(shareRecipientsFetchResult.items)) return;\n\n setShareRecipients(getBatchFetchResultAsArray(shareRecipientsFetchResult));\n }, [ !!shareRecipientsFetchResult.items, shareRecipientsFetchResult.isFetching, filterKey ]);\n \n const interactiveIds = getInteractiveIds();\n \n const interactivesPendingReview = Flight.useBasicFetch<InteractivesPendingReviews[]>(\n interactiveInsights && !!sharedObjectsFetchResult.items && currentUser.data &&\n InteractiveResultsRequests.pendingReviews({\n interactives: interactiveIds,\n filters: {\n currentCustomerId: currentUser.data.customerId,\n currentUserId: currentUser.data.id\n }\n })\n );\n\n const dependencies = [ isFetching, filterKey, interactivesPendingReview.isFetching, shareRecipients.length ];\n \n function getInteractiveIds() {\n return interactiveInsights && sharedObjects?.length && sharedObjects.reduce(\n (acc, value) => {\n const isInteractive = value.typeId === MasterType.Interactive;\n\n if (!isInteractive) return acc;\n\n const interactive = value as InteractiveMetadata;\n return [ ...acc, { metadataId: interactive.id, interactiveId: interactive.interactiveId }];\n },\n []\n );\n }\n\n return {\n sentShares,\n sharedObjects,\n shareRecipients,\n interactivesPendingReview: interactivesPendingReview.data,\n isFetching,\n showPartialLoading,\n nextCursor,\n hasMore,\n fetchNext,\n imageCdnUrl: config.data?.imageCdnUrl,\n dependencies\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"pillTabSelector\":\"Hdi6o\",\"tab\":\"RvNxr\",\"minWidth\":\"GHSz9\",\"radiusSmall\":\"VhJJa\",\"tabLink\":\"WFyvo\"};","var EN_US = ['second', 'minute', 'hour', 'day', 'week', 'month', 'year'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['just now', 'right now'];\n var unit = EN_US[Math.floor(idx / 2)];\n if (diff > 1)\n unit += 's';\n return [diff + \" \" + unit + \" ago\", \"in \" + diff + \" \" + unit];\n}\n//# sourceMappingURL=en_US.js.map","var ZH_CN = ['秒', '分钟', '小时', '天', '周', '个月', '年'];\nexport default function (diff, idx) {\n if (idx === 0)\n return ['刚刚', '片刻后'];\n var unit = ZH_CN[~~(idx / 2)];\n return [diff + \" \" + unit + \"\\u524D\", diff + \" \" + unit + \"\\u540E\"];\n}\n//# sourceMappingURL=zh_CN.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\n/**\n * All supported locales\n */\nvar Locales = {};\n/**\n * register a locale\n * @param locale\n * @param func\n */\nexport var register = function (locale, func) {\n Locales[locale] = func;\n};\n/**\n * get a locale, default is en_US\n * @param locale\n * @returns {*}\n */\nexport var getLocale = function (locale) {\n return Locales[locale] || Locales['en_US'];\n};\n//# sourceMappingURL=register.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nvar SEC_ARRAY = [\n 60,\n 60,\n 24,\n 7,\n 365 / 7 / 12,\n 12,\n];\n/**\n * format Date / string / timestamp to timestamp\n * @param input\n * @returns {*}\n */\nexport function toDate(input) {\n if (input instanceof Date)\n return input;\n // @ts-ignore\n if (!isNaN(input) || /^\\d+$/.test(input))\n return new Date(parseInt(input));\n input = (input || '')\n // @ts-ignore\n .trim()\n .replace(/\\.\\d+/, '') // remove milliseconds\n .replace(/-/, '/')\n .replace(/-/, '/')\n .replace(/(\\d)T(\\d)/, '$1 $2')\n .replace(/Z/, ' UTC') // 2017-2-5T3:57:52Z -> 2017-2-5 3:57:52UTC\n .replace(/([+-]\\d\\d):?(\\d\\d)/, ' $1$2'); // -04:00 -> -0400\n return new Date(input);\n}\n/**\n * format the diff second to *** time ago, with setting locale\n * @param diff\n * @param localeFunc\n * @returns\n */\nexport function formatDiff(diff, localeFunc) {\n /**\n * if locale is not exist, use defaultLocale.\n * if defaultLocale is not exist, use build-in `en`.\n * be sure of no error when locale is not exist.\n *\n * If `time in`, then 1\n * If `time ago`, then 0\n */\n var agoIn = diff < 0 ? 1 : 0;\n /**\n * Get absolute value of number (|diff| is non-negative) value of x\n * |diff| = diff if diff is positive\n * |diff| = -diff if diff is negative\n * |0| = 0\n */\n diff = Math.abs(diff);\n /**\n * Time in seconds\n */\n var totalSec = diff;\n /**\n * Unit of time\n */\n var idx = 0;\n for (; diff >= SEC_ARRAY[idx] && idx < SEC_ARRAY.length; idx++) {\n diff /= SEC_ARRAY[idx];\n }\n /**\n * Math.floor() is alternative of ~~\n *\n * The differences and bugs:\n * Math.floor(3.7) -> 4 but ~~3.7 -> 3\n * Math.floor(1559125440000.6) -> 1559125440000 but ~~1559125440000.6 -> 52311552\n *\n * More information about the performance of algebraic:\n * https://www.youtube.com/watch?v=65-RbBwZQdU\n */\n diff = Math.floor(diff);\n idx *= 2;\n if (diff > (idx === 0 ? 9 : 1))\n idx += 1;\n return localeFunc(diff, idx, totalSec)[agoIn].replace('%s', diff.toString());\n}\n/**\n * calculate the diff second between date to be formatted an now date.\n * @param date\n * @param relativeDate\n * @returns {number}\n */\nexport function diffSec(date, relativeDate) {\n var relDate = relativeDate ? toDate(relativeDate) : new Date();\n return (+relDate - +toDate(date)) / 1000;\n}\n/**\n * nextInterval: calculate the next interval time.\n * - diff: the diff sec between now and date to be formatted.\n *\n * What's the meaning?\n * diff = 61 then return 59\n * diff = 3601 (an hour + 1 second), then return 3599\n * make the interval with high performance.\n **/\nexport function nextInterval(diff) {\n var rst = 1, i = 0, d = Math.abs(diff);\n for (; diff >= SEC_ARRAY[i] && i < SEC_ARRAY.length; i++) {\n diff /= SEC_ARRAY[i];\n rst *= SEC_ARRAY[i];\n }\n d = d % rst;\n d = d ? rst - d : rst;\n return Math.ceil(d);\n}\n//# sourceMappingURL=date.js.map","import { formatDiff, diffSec } from './utils/date';\nimport { getLocale } from './register';\n/**\n * format a TDate into string\n * @param date\n * @param locale\n * @param opts\n */\nexport var format = function (date, locale, opts) {\n // diff seconds\n var sec = diffSec(date, opts && opts.relativeDate);\n // format it with locale\n return formatDiff(sec, getLocale(locale));\n};\n//# sourceMappingURL=format.js.map","/**\n * Created by hustcc on 18/5/20.\n * Contract: i@hust.cc\n */\nimport en_US from './lang/en_US';\nimport zh_CN from './lang/zh_CN';\nimport { register } from './register';\nregister('en_US', en_US);\nregister('zh_CN', zh_CN);\nexport { format } from './format';\nexport { render, cancel } from './realtime';\nexport { register };\n//# sourceMappingURL=index.js.map"],"names":["getInteractiveResultFilters","currentUser","filter","currentUserId","id","currentCustomerId","customerId","dateRange","start","end","userIds","userId","classroomsAndGroups","groupId","InteractiveResultsRequests","interactiveResultSet","interactiveId","interactiveMetadataId","includePublicResults","success","error","always","url","key","data","type","normalize","formatData","students","map","student","name","profileId","publicUser","mark","answerId","resultId","invalidationKeys","pendingReviews","interactiveResultsReport","getPhrase","LanguageService","getHiddenRecipientText","hiddenRecipients","counts","ArrayHelper","userCount","MasterType","classroomCount","groupCount","SharedToAvatar","props","user","item","typeId","classroom","classroomGroup","svgContainerClassName","Tooltip","title","surname","spanHack","spanHackClassName","Avatar","imageUrl","avatar","imageCdnUrl","initials","UserHelper","extraClasses","className","IconCircle","svgName","svgSize","SvgContainer","S","variant","metadata","colour","AnonymousSharedToAvatar","avatarSize","size","SharedLinkAvatar","text","SharedToAvatarList","AvatarList","items","recipients","avatarItem","avatarContainerClassname","getHiddenTooltip","hasShareLink","shareLinkText","defaultProps","maxAvatars","SHARES_TABLE_THEME","table","header","headerCell","row","cell","Actions","orderedActions","actions","sort","a","b","order","buttonActions","moreActions","forEach","button","push","length","idx","label","appLink","href","onClick","dropdownToggleSvgSize","tooltip","showSpinner","analyticsData","analyticsOptions","openInNewTab","disabled","iconButton","showBorder","customSize","ariaLabel","sortComponent","dropdownToggleClassName","actionsDropdownClassName","fetchMore","LazyDropdownItems","style","padding","height","width","getDropdownItemClassName","actionClassName","ActionsDropdownItem","FunctionHelper","action","AppLink","e","preventDefault","AnalyticsHelper","role","tabIndex","onKeyDown","ActionsDropdown","isLazy","some","lazyPlaceholder","currentGroup","dropdownToggleId","RandomHelper","showDivider","undefined","group","itemsToDisplay","slice","hiddenItems","AvatarItem","hiddenItemsCounts","translateX","getAvatarStyles","transform","zIndex","marginRight","index","roleToDisplay","count","smartCount","numberClassname","TabContents","tab","PillTabSelector","ref","containerRef","borderRadius","listClassName","tabs","active","onSelect","onSelectTab","useBatchFetch","itemIds","getRequest","requests","chunk","responses","reduce","acc","isFetching","getAnalyticsRequestKey","baseKey","sharerId","userIdKey","Array","isArray","join","groupIdKey","AnalyticsRouteHelper","getObjectUrl","config","object","baseUrl","analyticsWebUrl","relativeUrl","mapColourToBsVariant","groupColour","SHARED_BY_ME_APP_LINK","application","SHARED_WITH_ME_APP_LINK","SharesHeader","currentAppLink","SharedByMeEmptyState","EmptyState","src","useInteractiveCopy","getStatusPhrase","share","ShareType","status","ShareLinkStatus","getBgColourClassName","ShareStatusIndicator","isPasswordProtected","getDateShared","dateCreated","datesShared","r","dateShared","date1","date2","DateHelper","getColumns","dateHeading","getObjectAppLink","getObjectActions","showStatus","showViewCount","breakpoints","isMobile","xs","sm","columns","Header","accessor","Cell","value","SharedObjectImage","showVideoMetadata","locationContext","minWidth","maxWidth","VideoHelper","canNavigate","VideoSubText","video","series","location","entity","ShareViewHelper","actionType","Text","namespace","phrase","s","statusColumn","viewCountColumn","splice","Boolean","SharedByMeTable","sentShares","sharedObjects","shareRecipients","groupByDate","dependencies","groupByDateShared","tableData","sharedObject","find","o","objectId","recipient","viewCount","ShareHelper","Object","keys","heading","Table","theme","PartialRow","PartialHeader","fullHeader","PartialSharedByMeTable","getShareActionOptions","entityType","args","params","SeeUsageAction","target","SharedByMeView","hasPermissions","usePermissions","hasInsights","useSettings","useBreakpoints","useSharesTable","showPartialLoading","nextCursor","hasMore","fetchNext","hasMyShares","PermissionName","replace","useSetPageMetadata","getSharedObjectActions","ConfigRequests","analyticsPhrase","canConsume","sharedObjectActions","objectUrl","useGetSharedObjectActions","InfiniteScrollFooter","ImageUrls","getDirectShares","getRecipientIds","d","getBatchFetchResultAsArray","result","values","interactiveInsights","shouldFetch","fetch","UserRequests","cursor","ShareRequests","isFetchingSentShares","sharedObjectIds","sharedObjectsFetchResult","ids","recipientIds","shareRecipientsFetchResult","filterKey","JSON","stringify","sentShare","recipientsFetchResult","initialSharedObjectsLoaded","setInitialSharedObjectsLoaded","initialRecipientsLoaded","setInitialRecipientsLoaded","usePartialLoading","setShareRecipients","ObjectHelper","interactiveIds","interactive","metadataId","interactivesPendingReview","I","interactives","filters","EN_US","ZH_CN","Locales","register","locale","func","SEC_ARRAY","toDate","input","Date","isNaN","test","parseInt","trim","format","date","opts","sec","relativeDate","diff","localeFunc","agoIn","totalSec","Math","abs","floor","toString","unit"],"sourceRoot":""}
|