@clickview/lite 0.0.20-rc.1 → 0.0.20
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/scripts/{bundle-df3f2fe30a.min.js → bundle-0a051d30d1.min.js} +1 -1
- package/dist/scripts/bundles.json +1 -1
- package/package.json +1 -1
- package/dist/css/0.chunk.css.map +0 -1
- package/dist/css/1.chunk.css +0 -146
- package/dist/css/1.chunk.css.map +0 -1
- package/dist/css/11.chunk.css.map +0 -1
- package/dist/css/12.chunk.css.map +0 -1
- package/dist/css/13.chunk.css.map +0 -1
- package/dist/css/14.chunk.css.map +0 -1
- package/dist/css/15.chunk.css.map +0 -1
- package/dist/css/16.chunk.css.map +0 -1
- package/dist/css/17.chunk.css.map +0 -1
- package/dist/css/18.chunk.css.map +0 -1
- package/dist/css/19.chunk.css.map +0 -1
- package/dist/css/21.chunk.css.map +0 -1
- package/dist/css/22.chunk.css.map +0 -1
- package/dist/css/23.chunk.css.map +0 -1
- package/dist/css/24.chunk.css.map +0 -1
- package/dist/css/25.chunk.css.map +0 -1
- package/dist/css/26.chunk.css.map +0 -1
- package/dist/css/27.chunk.css.map +0 -1
- package/dist/css/28.chunk.css.map +0 -1
- package/dist/css/29.chunk.css.map +0 -1
- package/dist/css/3.chunk.css.map +0 -1
- package/dist/css/30.chunk.css +0 -32
- package/dist/css/30.chunk.css.map +0 -1
- package/dist/css/31.chunk.css.map +0 -1
- package/dist/css/32.chunk.css +0 -6
- package/dist/css/32.chunk.css.map +0 -1
- package/dist/css/33.chunk.css +0 -5
- package/dist/css/33.chunk.css.map +0 -1
- package/dist/css/34.chunk.css.map +0 -1
- package/dist/css/36.chunk.css +0 -6
- package/dist/css/36.chunk.css.map +0 -1
- package/dist/css/37.chunk.css +0 -7
- package/dist/css/37.chunk.css.map +0 -1
- package/dist/css/38.chunk.css.map +0 -1
- package/dist/css/41.chunk.css +0 -38
- package/dist/css/41.chunk.css.map +0 -1
- package/dist/css/5.chunk.css.map +0 -1
- package/dist/css/51.chunk.css +0 -9
- package/dist/css/51.chunk.css.map +0 -1
- package/dist/css/6.chunk.css.map +0 -1
- package/dist/css/7.chunk.css +0 -66
- package/dist/css/7.chunk.css.map +0 -1
- package/dist/css/lite-app.css.map +0 -1
- package/dist/projects/lite/src/polyfills.d.ts +0 -2
- package/dist/scripts/0.chunk.js +0 -308
- package/dist/scripts/0.chunk.js.map +0 -1
- package/dist/scripts/1.chunk.js +0 -623
- package/dist/scripts/1.chunk.js.map +0 -1
- package/dist/scripts/10.chunk.js +0 -530
- package/dist/scripts/10.chunk.js.map +0 -1
- package/dist/scripts/11.chunk.js +0 -380
- package/dist/scripts/11.chunk.js.map +0 -1
- package/dist/scripts/12.chunk.js +0 -434
- package/dist/scripts/12.chunk.js.map +0 -1
- package/dist/scripts/13.chunk.js +0 -1287
- package/dist/scripts/13.chunk.js.map +0 -1
- package/dist/scripts/14.chunk.js +0 -575
- package/dist/scripts/14.chunk.js.map +0 -1
- package/dist/scripts/15.chunk.js +0 -806
- package/dist/scripts/15.chunk.js.map +0 -1
- package/dist/scripts/16.chunk.js +0 -482
- package/dist/scripts/16.chunk.js.map +0 -1
- package/dist/scripts/17.chunk.js +0 -428
- package/dist/scripts/17.chunk.js.map +0 -1
- package/dist/scripts/18.chunk.js +0 -766
- package/dist/scripts/18.chunk.js.map +0 -1
- package/dist/scripts/19.chunk.js +0 -647
- package/dist/scripts/19.chunk.js.map +0 -1
- package/dist/scripts/2.chunk.js +0 -18882
- package/dist/scripts/2.chunk.js.map +0 -1
- package/dist/scripts/20.chunk.js +0 -212
- package/dist/scripts/20.chunk.js.map +0 -1
- package/dist/scripts/21.chunk.js +0 -1591
- package/dist/scripts/21.chunk.js.map +0 -1
- package/dist/scripts/22.chunk.js +0 -1348
- package/dist/scripts/22.chunk.js.map +0 -1
- package/dist/scripts/23.chunk.js +0 -1181
- package/dist/scripts/23.chunk.js.map +0 -1
- package/dist/scripts/24.chunk.js +0 -1141
- package/dist/scripts/24.chunk.js.map +0 -1
- package/dist/scripts/25.chunk.js +0 -907
- package/dist/scripts/25.chunk.js.map +0 -1
- package/dist/scripts/26.chunk.js +0 -979
- package/dist/scripts/26.chunk.js.map +0 -1
- package/dist/scripts/27.chunk.js +0 -655
- package/dist/scripts/27.chunk.js.map +0 -1
- package/dist/scripts/28.chunk.js +0 -615
- package/dist/scripts/28.chunk.js.map +0 -1
- package/dist/scripts/29.chunk.js +0 -622
- package/dist/scripts/29.chunk.js.map +0 -1
- package/dist/scripts/3.chunk.js +0 -809
- package/dist/scripts/3.chunk.js.map +0 -1
- package/dist/scripts/30.chunk.js +0 -468
- package/dist/scripts/30.chunk.js.map +0 -1
- package/dist/scripts/31.chunk.js +0 -441
- package/dist/scripts/31.chunk.js.map +0 -1
- package/dist/scripts/32.chunk.js +0 -509
- package/dist/scripts/32.chunk.js.map +0 -1
- package/dist/scripts/33.chunk.js +0 -957
- package/dist/scripts/33.chunk.js.map +0 -1
- package/dist/scripts/34.chunk.js +0 -502
- package/dist/scripts/34.chunk.js.map +0 -1
- package/dist/scripts/35.chunk.js +0 -938
- package/dist/scripts/35.chunk.js.map +0 -1
- package/dist/scripts/36.chunk.js +0 -537
- package/dist/scripts/36.chunk.js.map +0 -1
- package/dist/scripts/37.chunk.js +0 -414
- package/dist/scripts/37.chunk.js.map +0 -1
- package/dist/scripts/38.chunk.js +0 -245
- package/dist/scripts/38.chunk.js.map +0 -1
- package/dist/scripts/39.chunk.js +0 -337
- package/dist/scripts/39.chunk.js.map +0 -1
- package/dist/scripts/4.chunk.js +0 -402
- package/dist/scripts/4.chunk.js.map +0 -1
- package/dist/scripts/40.chunk.js +0 -350
- package/dist/scripts/40.chunk.js.map +0 -1
- package/dist/scripts/41.chunk.js +0 -343
- package/dist/scripts/41.chunk.js.map +0 -1
- package/dist/scripts/42.chunk.js +0 -404
- package/dist/scripts/42.chunk.js.map +0 -1
- package/dist/scripts/43.chunk.js +0 -221
- package/dist/scripts/43.chunk.js.map +0 -1
- package/dist/scripts/44.chunk.js +0 -230
- package/dist/scripts/44.chunk.js.map +0 -1
- package/dist/scripts/45.chunk.js +0 -409
- package/dist/scripts/45.chunk.js.map +0 -1
- package/dist/scripts/46.chunk.js +0 -272
- package/dist/scripts/46.chunk.js.map +0 -1
- package/dist/scripts/47.chunk.js +0 -267
- package/dist/scripts/47.chunk.js.map +0 -1
- package/dist/scripts/48.chunk.js +0 -359
- package/dist/scripts/48.chunk.js.map +0 -1
- package/dist/scripts/49.chunk.js +0 -225
- package/dist/scripts/49.chunk.js.map +0 -1
- package/dist/scripts/5.chunk.js +0 -1104
- package/dist/scripts/5.chunk.js.map +0 -1
- package/dist/scripts/50.chunk.js +0 -318
- package/dist/scripts/50.chunk.js.map +0 -1
- package/dist/scripts/51.chunk.js +0 -64
- package/dist/scripts/51.chunk.js.map +0 -1
- package/dist/scripts/52.chunk.js +0 -108
- package/dist/scripts/52.chunk.js.map +0 -1
- package/dist/scripts/53.chunk.js +0 -110
- package/dist/scripts/53.chunk.js.map +0 -1
- package/dist/scripts/54.chunk.js +0 -162
- package/dist/scripts/54.chunk.js.map +0 -1
- package/dist/scripts/55.chunk.js +0 -145
- package/dist/scripts/55.chunk.js.map +0 -1
- package/dist/scripts/56.chunk.js +0 -139
- package/dist/scripts/56.chunk.js.map +0 -1
- package/dist/scripts/57.chunk.js +0 -142
- package/dist/scripts/57.chunk.js.map +0 -1
- package/dist/scripts/58.chunk.js +0 -173
- package/dist/scripts/58.chunk.js.map +0 -1
- package/dist/scripts/59.chunk.js +0 -160
- package/dist/scripts/59.chunk.js.map +0 -1
- package/dist/scripts/6.chunk.js +0 -335
- package/dist/scripts/6.chunk.js.map +0 -1
- package/dist/scripts/60.chunk.js +0 -98
- package/dist/scripts/60.chunk.js.map +0 -1
- package/dist/scripts/61.chunk.js +0 -48
- package/dist/scripts/61.chunk.js.map +0 -1
- package/dist/scripts/62.chunk.js +0 -70
- package/dist/scripts/62.chunk.js.map +0 -1
- package/dist/scripts/63.chunk.js +0 -32
- package/dist/scripts/63.chunk.js.map +0 -1
- package/dist/scripts/64.chunk.js +0 -29
- package/dist/scripts/64.chunk.js.map +0 -1
- package/dist/scripts/65.chunk.js +0 -27
- package/dist/scripts/65.chunk.js.map +0 -1
- package/dist/scripts/66.chunk.js +0 -65
- package/dist/scripts/66.chunk.js.map +0 -1
- package/dist/scripts/67.chunk.js +0 -67
- package/dist/scripts/67.chunk.js.map +0 -1
- package/dist/scripts/68.chunk.js +0 -104
- package/dist/scripts/68.chunk.js.map +0 -1
- package/dist/scripts/69.chunk.js +0 -89
- package/dist/scripts/69.chunk.js.map +0 -1
- package/dist/scripts/7.chunk.js +0 -2579
- package/dist/scripts/7.chunk.js.map +0 -1
- package/dist/scripts/70.chunk.js +0 -1001
- package/dist/scripts/70.chunk.js.map +0 -1
- package/dist/scripts/71.chunk.js +0 -36
- package/dist/scripts/71.chunk.js.map +0 -1
- package/dist/scripts/8.chunk.js +0 -24
- package/dist/scripts/8.chunk.js.map +0 -1
- package/dist/scripts/9.chunk.js +0 -327
- package/dist/scripts/9.chunk.js.map +0 -1
- package/dist/scripts/bundle.js +0 -38145
- package/dist/scripts/bundle.js.map +0 -1
- package/dist/scripts/polyfills.js +0 -15232
- package/dist/scripts/polyfills.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["file://C:/ClickView/front-end/clickview/packages/libs/shared/src/apps/playlists/components/empty-state/EmptyVideoList.tsx","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/apps/playlists/hooks/UseHandlePlaylistError.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/components/video-list/PartialVideoList.tsx","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/constants/SupportArticles.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/flight-requests/FavouriteVideoRequests.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/hooks/UseInfiniteList.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/hooks/UseReorderedItems.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/utils/RatingHelper.ts","file://C:/ClickView/front-end/clickview/packages/libs/shared/src/utils/RestrictionHelper.ts","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/apps/playlists/components/playlist-header/PlaylistHeader.tsx","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/apps/playlists/components/video-list/SortableVideoListContainer.tsx","webpack://@clickview/lite/./src/apps/playlists/components/video-list/sortable-video-list-container.scss?0ef9","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/apps/playlists/utils/PlaylistVideoActionAppLinkHelper.ts","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/apps/playlists/views/playlist/PlaylistView.tsx","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/apps/playlists/views/playlist/PlaylistViewUtils.ts","file://C:/ClickView/front-end/clickview/packages/projects/lite/src/shared/hooks/useVideoMixin.ts"],"names":[],"mappings":"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","file":"scripts/26.chunk.js","sourcesContent":["import * as React from 'react';\r\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { useService } from 'libs/common/react/hooks/UseService';\r\n\r\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\r\nimport { SupportArticles } from 'libs/shared/constants/SupportArticles';\r\nimport { EmptyState } from 'libs/shared/components/empty-state/EmptyState';\r\nimport { ImageUrlService } from 'libs/shared/services/ImageUrlService';\r\n\r\nconst getPhrase = LanguageService.encloseNamespace('playlists.emptyState');\r\n\r\ninterface EmptyVideoListComponentProps {\r\n supportSiteUrl: string;\r\n}\r\n\r\nexport function EmptyVideoListComponent(props: EmptyVideoListComponentProps): React.ReactElement {\r\n const { supportSiteUrl } = props;\r\n\r\n const imageUrlService = useService<ImageUrlService>(SharedServices.ImageUrl);\r\n const imageUrls = imageUrlService.getImageUrls();\r\n const supportArticleUrl = UrlHelper.safeUrlConcat(supportSiteUrl, SupportArticles.ADD_TO_PLAYLIST);\r\n\r\n return (\r\n <EmptyState\r\n imageUrl={imageUrls.EmptyStates.VIDEOS}\r\n heading={getPhrase('noVideosHeading')}\r\n description={`<a href=\"${supportArticleUrl}\" target=\"_blank\">${getPhrase('noVideosInfo')}</a>`}\r\n />\r\n );\r\n}","import { useEffect } from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { Flight } from 'libs/common/flight';\r\nimport { BaseAlertService } from 'libs/common/backbone/services/BaseAlertService';\r\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\nimport { useService } from 'libs/common/react/hooks/UseService';\r\nimport { CommonServices } from 'libs/common/backbone/constants/CommonServices';\r\n\r\nimport { Playlist } from 'libs/shared/interfaces';\r\n\r\nconst namespace = 'playlists.hooks';\r\n\r\ninterface ErrorAppLinks {\r\n forbidden?: Core.AppLink;\r\n notFound?: Core.AppLink;\r\n}\r\n\r\nfunction handlePlaylistError(statusCode: HttpStatus, alertService: BaseAlertService, appLinks: ErrorAppLinks): void {\r\n let appLink: Core.AppLink;\r\n\r\n switch (statusCode) {\r\n case HttpStatus.Forbidden:\r\n appLink = appLinks.forbidden;\r\n break;\r\n\r\n case HttpStatus.NotFound:\r\n appLink = appLinks.notFound;\r\n }\r\n\r\n if (!appLink) {\r\n alertService.error(LanguageService.getPhrase(namespace, 'somethingWentWrong'))();\r\n\r\n return;\r\n }\r\n\r\n Core.AppLinkHelper.trigger(appLink);\r\n}\r\n\r\nexport function useHandlePlaylistError(response: Flight.Response<Playlist>, appLinks: ErrorAppLinks = {}): void {\r\n const alertService = useService<BaseAlertService>(CommonServices.ALERT);\r\n\r\n useEffect(() => {\r\n if (response.hasError)\r\n handlePlaylistError(response.statusCode, alertService, appLinks);\r\n }, [response.hasError]);\r\n}","import * as React from 'react';\r\n\r\ninterface PartialVideoListProps {\r\n\r\n}\r\n\r\nexport function PartialVideoList(props: PartialVideoListProps): JSX.Element {\r\n return (\r\n <>\r\n </>\r\n );\r\n}","export const SupportArticles: { [article: string]: string } = {\r\n ADD_TO_PLAYLIST: 'hc/articles/115005679748'\r\n};","import { Flight } from 'libs/common/flight';\r\nimport { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\r\nimport { Xhr } from 'libs/common/backbone/interfaces';\r\nimport { HashObject } from 'libs/common/react/interfaces/HashObject';\r\n\r\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\r\n\r\nfunction favouriteVideo(\r\n videoId: string, userId: string, success?: () => void, error?: (Xhr: Xhr) => void\r\n): Flight.Request {\r\n return {\r\n url: `/api/domain/v2/objects/${userId}`,\r\n key: `favourite:video:${userId}:${videoId}`,\r\n data: { favouriteVideos: videoId },\r\n type: HttpVerbs.PUT,\r\n invalidationKeys: [ `favourite:videos:${userId}`, `video:is:favourited:${userId}` ],\r\n success,\r\n error\r\n };\r\n}\r\n\r\nfunction unfavouriteVideo(\r\n videoId: string, userId: string, success?: () => void, error?: (Xhr: Xhr) => void\r\n): Flight.Request {\r\n return {\r\n url: `/api/domain/v2/objects/${userId}/favouriteVideos/${videoId}`,\r\n key: `favourite:video:${userId}:${videoId}`,\r\n type: HttpVerbs.DELETE,\r\n invalidationKeys: [ `favourite:videos:${userId}`, `video:is:favourited:${userId}` ],\r\n success,\r\n error\r\n };\r\n}\r\n\r\nexport const FavouriteVideoRequests = {\r\n favouriteVideos(userId: string, cursor?: string): Flight.Request {\r\n const query = `${SharedWithStatements.VIDEO_COLLECTION}${addCursor(cursor)}`;\r\n\r\n return {\r\n url: `/api/domain/v2/objects/${userId}/favouriteVideos?query=${query}`,\r\n key: `favourite:videos:${userId}${cursor ? `:${cursor}` : ''}`\r\n };\r\n },\r\n\r\n updateIsVideoFavourited(\r\n videoId: string, userId: string, shouldFavourite: boolean, success?: () => void, error?: (Xhr: Xhr) => void\r\n ): Flight.Request {\r\n const requestFn = shouldFavourite\r\n ? favouriteVideo\r\n : unfavouriteVideo;\r\n\r\n return requestFn(videoId, userId, success, error);\r\n },\r\n\r\n isFavourited(userId: string, ids: string[]): Flight.Request {\r\n const sortedIds = ids.slice().sort();\r\n\r\n const params = sortedIds.map(i => `id=${i}`);\r\n\r\n return {\r\n url: `/api/domain/v2/objects?query=favouritedBy{id:${userId}}&${params.join('&')}`,\r\n key: `video:is:favourited:${userId}:by:id:${sortedIds.join(',')}`,\r\n formatData: (videos: HashObject[]) => {\r\n if (!videos?.length)\r\n return videos;\r\n\r\n const setIsFavourited = (video: HashObject) => {\r\n const { favouritedBy, ...v } = video;\r\n\r\n // As we filtered by userId, if there are any users, set isFavourited to true.\r\n return {\r\n ...v,\r\n isFavourited: !!favouritedBy?.data?.length\r\n };\r\n };\r\n\r\n return videos.map(setIsFavourited);\r\n }\r\n };\r\n }\r\n};\r\n\r\nfunction addCursor(cursor: string): string {\r\n return cursor ? `&cursor=${cursor}` : '';\r\n}","import { useEffect } from 'react';\r\n\r\nimport { Flight } from 'libs/common/flight';\r\n\r\nimport { BaseObject } from 'libs/shared/interfaces';\r\n\r\nimport { useSelectAllPages } from './UseSelectAllPages';\r\nimport { useInfiniteScroll } from './UseInfiniteScroll';\r\n\r\ninterface UseInfiniteListResult<T extends BaseObject> {\r\n items: T[];\r\n hasMore: boolean;\r\n isFetching: boolean;\r\n}\r\n\r\n/**\r\n * Hook to extract an infinite list from the application state,\r\n * save it locally in state and only update when new data\r\n * is fetched.\r\n * \r\n * @param getRequest - callback function to get the request for each page.\r\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\r\n * \r\n * @param fetchNext - callback function to fetch a page.\r\n * Can be false if the request requires data that hasn't yet been fetched - e.g. user id.\r\n */\r\nexport function useInfiniteList<T extends BaseObject>(\r\n getRequest: ((cursor?: string) => Flight.Request) | false,\r\n fetchNext: ((cursor?: string) => void) | false\r\n): UseInfiniteListResult<T> {\r\n const fetchNextFn = (fetchNext as Function);\r\n\r\n const response = useSelectAllPages<T>(getRequest && ((cursor?: string) => getRequest(cursor).key));\r\n\r\n useInfiniteScroll(() => fetchNext && fetchNextFn(response.nextCursor), !!response.nextCursor, response.isFetching);\r\n\r\n useEffect(() => {\r\n if (response.shouldInitialFetch && fetchNext)\r\n fetchNextFn();\r\n }, [ response.shouldInitialFetch, fetchNext ]);\r\n\r\n return { items: response.items, hasMore: !!response.nextCursor, isFetching: response.isFetching };\r\n}","import { useState, useEffect } from 'react';\r\n\r\nimport { BaseObject } from 'libs/shared/interfaces';\r\n\r\nfunction isOrderEqual(arr1: BaseObject[], arr2: BaseObject[]): boolean {\r\n let isEqual = true;\r\n\r\n if (arr1.length !== arr2.length)\r\n return false;\r\n\r\n for (let i = 0; i < arr1.length; i++) {\r\n if (arr1[i].id !== arr2[i].id) {\r\n isEqual = false;\r\n break;\r\n }\r\n }\r\n\r\n return isEqual;\r\n}\r\n\r\n/**\r\n * This function can be used to temporarily store an array of reordered objects\r\n * until the array obtained from the application store updates to the new order.\r\n * \r\n * @param items array of objects from application store.\r\n */\r\nexport function useReorderedItems<T extends BaseObject>(\r\n items: T[]\r\n): [ T[], React.Dispatch<React.SetStateAction<T[]>> ] {\r\n const [ reorderedItems, setReorderedItems ] = useState<T[]>();\r\n\r\n useEffect(() => {\r\n if (!reorderedItems)\r\n return;\r\n\r\n if (items.length !== reorderedItems.length || isOrderEqual(items, reorderedItems))\r\n setReorderedItems(null);\r\n }, [items]);\r\n\r\n return [ reorderedItems, setReorderedItems ];\r\n}","import { OnlineCurrentUser } from 'libs/shared/interfaces';\r\nimport { OnlineUserRole } from 'libs/shared/enums/UserRole';\r\n\r\nexport const RatingHelper = {\r\n getMaxAllowedRatingForUser(user: OnlineCurrentUser): number | null {\r\n if (user?.onlineRole === OnlineUserRole.Staff)\r\n return;\r\n\r\n return user?.maxAllowedRating;\r\n }\r\n};","import { Restriction, VideoWithRestrictions, RestrictedObject, Video } from 'libs/shared/interfaces';\r\n\r\nexport const RestrictionHelper = {\r\n mixinRestrictions(videos: Video[], restrictions: Restriction[]): VideoWithRestrictions[] {\r\n const videosWithRestrictions: VideoWithRestrictions[] = [];\r\n\r\n videos.forEach(video => {\r\n const videoRestrictions = restrictions.find(r => r.objectId === video.id);\r\n\r\n videosWithRestrictions.push({ ...video, restrictions: videoRestrictions?.restrictedObjects ?? [] });\r\n });\r\n\r\n return videosWithRestrictions;\r\n },\r\n\r\n getVideoRestrictions(videoId: string, restrictions: Restriction[]): RestrictedObject[] {\r\n if (!videoId || !restrictions)\r\n return;\r\n\r\n const videoRestrictions = restrictions.find(r => r.objectId.toString() === videoId.toString());\r\n\r\n return videoRestrictions?.restrictedObjects;\r\n }\r\n};","import * as React from 'react';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\r\n\r\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\r\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\r\nimport { Playlist, AppLinkWithLabel } from 'libs/shared/interfaces';\r\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\r\nimport { BannerHeader } from 'libs/shared/components/banner-header/BannerHeader';\r\nimport { Text } from 'libs/shared/components/text/Text';\r\nimport { ActionOptions } from 'libs/shared/components/actions/Actions';\r\n\r\nimport { Actions } from 'shared/constants/LiteActions';\r\n\r\nconst namespace = 'playlists.playlistHeader';\r\n\r\ninterface PlaylistHeaderProps {\r\n playlistId: string;\r\n playlist: Playlist;\r\n hasVideos: boolean;\r\n isFollowing: boolean;\r\n follow: (shouldFollow: boolean) => void;\r\n application: string;\r\n imageCdnUrl: string;\r\n showPartialLoading: boolean;\r\n showBreadcrumbs: boolean;\r\n showDateMetadata: boolean;\r\n canEdit?: boolean;\r\n canFollow?: boolean;\r\n isShared?: boolean;\r\n playAllAppLink?: Core.AppLink;\r\n returnAppLink?: AppLinkWithLabel;\r\n lastUpdated?: string;\r\n}\r\n\r\nexport function PlaylistHeader(props: PlaylistHeaderProps): JSX.Element {\r\n // Store isFollowing in local state so that it updates immediately.\r\n const [ isFollowing, setIsFollowing ] = React.useState(props.isFollowing);\r\n\r\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\r\n\r\n if (props.showPartialLoading)\r\n return <></>;\r\n\r\n const description = props.playlist.description;\r\n\r\n const application = props.application;\r\n const args = [props.playlist.id];\r\n\r\n const actions: ActionOptions[] = [];\r\n\r\n if (props.canEdit) {\r\n actions.push(\r\n {\r\n label: LanguageService.getPhrase(namespace, 'edit'),\r\n appLink: { application, action: Actions.Playlists.EDIT_PLAYLIST, args },\r\n svgName: cvSvgLibrary.Edit,\r\n className: 'btn btn-light',\r\n button: !isMobile\r\n },\r\n {\r\n label: LanguageService.getPhrase(namespace, 'delete'),\r\n appLink: { application, action: Actions.Playlists.DELETE_PLAYLIST, args },\r\n svgName: cvSvgLibrary.Share,\r\n className: 'text-danger'\r\n }\r\n );\r\n }\r\n\r\n if (!props.canEdit) {\r\n actions.push(\r\n {\r\n label: LanguageService.getPhrase(namespace, isFollowing ? 'following' : 'follow'),\r\n onClick: () => { setIsFollowing(!isFollowing); props.follow(!isFollowing); },\r\n svgName: cvSvgLibrary.Bell,\r\n className: `btn btn-${isFollowing ? 'dark' : 'light'}`,\r\n button: !isMobile\r\n }\r\n );\r\n }\r\n\r\n return (\r\n <>\r\n <BannerHeader\r\n heading={props.playlist.name}\r\n banner={props.playlist.banner}\r\n imageCdnUrl={props.imageCdnUrl}\r\n actions={actions.length && actions}\r\n />\r\n {!!description &&\r\n <>\r\n <h4><Text namespace={namespace} phrase='description' /></h4>\r\n <p>{description}</p>\r\n </>\r\n }\r\n </>\r\n );\r\n}","import * as React from 'react';\r\nimport { SortStart, SortEnd } from 'react-sortable-hoc';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\r\nimport { DevError } from 'libs/common/backbone/errors/DevError';\r\nimport { SortableVideoList, VideoList, VideoListProps } from 'libs/shared/components/video-list/VideoList';\r\nimport { PartialVideoList } from 'libs/shared/components/video-list/PartialVideoList';\r\n\r\nimport styles from './sortable-video-list-container.scss';\r\n\r\ninterface SortableVideoListContainerProps extends VideoListProps {\r\n playlistId: string;\r\n onSortComplete: (oldIdx: number, newIdx: number) => void;\r\n onSortStart?: (index: number) => void;\r\n isUserSignedIn: boolean;\r\n canEdit?: boolean;\r\n showPartialLoading?: boolean;\r\n fetchRestrictions?: () => void;\r\n}\r\n\r\nexport function SortableVideoListContainer(props: SortableVideoListContainerProps): React.ReactElement {\r\n const { onSortComplete, onSortStart, showPartialLoading, ...videoListProps } = props;\r\n\r\n const [ currentSortingIndex, setCurrentSortingIndex ] = React.useState<number>();\r\n\r\n const onSortStartHandler = (index: number) => {\r\n if (FunctionHelper.isFunction(onSortStart))\r\n onSortStart(index);\r\n };\r\n\r\n const onSortEnd = (sort: SortEnd) => {\r\n setCurrentSortingIndex(null);\r\n\r\n if (!FunctionHelper.isFunction(onSortComplete)) {\r\n Core.ErrorHelper.throw(new DevError('An onSortComplete callback function must be passed to SortableVideoListComponent'));\r\n return;\r\n }\r\n\r\n onSortComplete(sort.oldIndex, sort.newIndex);\r\n };\r\n\r\n if (showPartialLoading)\r\n return <PartialVideoList />;\r\n\r\n if (!props.canEdit)\r\n return <VideoList {...videoListProps} />;\r\n\r\n return (\r\n <SortableVideoList\r\n {...videoListProps}\r\n currentSortingIndex={currentSortingIndex}\r\n updateBeforeSortStart={({ index }: SortStart) => setCurrentSortingIndex(index)}\r\n onSortStart={({ index }: SortStart) => onSortStartHandler(index)}\r\n onSortEnd={onSortEnd}\r\n lockAxis='y'\r\n lockToContainerEdges\r\n lockOffset={[ '0%', '100%' ]} // Allow movement beyond the bottom of container\r\n helperClass={`bg-white ${styles.sortableItem}`}\r\n distance={1} // This allows mousedown/click events to be consumed before sorting is triggered.\r\n useDragHandle\r\n />\r\n );\r\n}","// extracted by mini-css-extract-plugin\nmodule.exports = {\"sortableItem\":\"cv--sortableItem--2eiPB\"};","import { Core } from 'libs/common/core';\r\nimport { Video } from 'libs/shared/interfaces';\r\nimport { VideoAction } from 'libs/shared/utils/video-actions/VideoActionsHelper';\r\n\r\nimport { Actions } from 'shared/constants/LiteActions';\r\n\r\nexport function getVideoActionAppLink(\r\n application: string,\r\n playlistId: string\r\n): (video: Video, action: VideoAction) => Core.AppLink {\r\n return (video: Video, action: VideoAction) => {\r\n switch (action) {\r\n case VideoAction.RemoveFromPlaylist:\r\n return { application, action: Actions.Playlists.REMOVE_VIDEO_FROM_PLAYLIST, args: [ video.id, playlistId ]};\r\n\r\n case VideoAction.AddToPlaylist:\r\n return { application, action: Actions.Playlists.ADD_TO_PLAYLIST, args: [video.id]};\r\n\r\n // TODO Replace this with proper appLink\r\n case VideoAction.Share:\r\n return { application, action: Actions.Playlists.HOME };\r\n }\r\n };\r\n}","import * as React from 'react';\r\nimport { useDispatch } from 'react-redux';\r\n\r\nimport { Core } from 'libs/common/core';\r\nimport { Flight } from 'libs/common/flight';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\nimport { WorkflowPhase, EntityType, UserAction, LocationContext, ToggleDescriptor } from 'libs/analytics/interfaces';\r\n\r\nimport { EmptyVideoListComponent } from 'libs/shared/apps/playlists/components/empty-state/EmptyVideoList';\r\nimport { AppLinkWithLabel, Restriction, Playlist, Config, Video, Series, Following, OnlineCurrentUser } from 'libs/shared/interfaces';\r\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\r\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\r\nimport { FavouriteVideoRequests } from 'libs/shared/flight-requests/FavouriteVideoRequests';\r\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\r\nimport { useSetPageTitle } from 'libs/shared/hooks/useSetPageTitle';\r\nimport { useInfiniteList } from 'libs/shared/hooks/UseInfiniteList';\r\nimport { InfiniteScrollFooter } from 'libs/shared/components/infinite-scroll-footer/InfiniteScrollFooter';\r\nimport { RestrictionHelper } from 'libs/shared/utils/RestrictionHelper';\r\nimport { ReorderHelper } from 'libs/shared/utils/ReorderHelper';\r\nimport { RatingHelper } from 'libs/shared/utils/RatingHelper';\r\nimport { useHandlePlaylistError } from 'libs/shared/apps/playlists/hooks/UseHandlePlaylistError';\r\nimport { useReorderedItems } from 'libs/shared/hooks/UseReorderedItems';\r\nimport { VideoActionsContext } from 'libs/shared/context/VideoActionsContext';\r\n\r\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\r\nimport { VideoRequests } from 'shared/flight-requests/VideoRequests';\r\n\r\nimport { PlaylistHeader } from 'apps/playlists/components/playlist-header/PlaylistHeader';\r\nimport { SortableVideoListContainer } from 'apps/playlists/components/video-list/SortableVideoListContainer';\r\nimport { getVideoActionAppLink } from 'apps/playlists/utils/PlaylistVideoActionAppLinkHelper';\r\n\r\nimport * as PlaylistViewUtils from './PlaylistViewUtils';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\n\r\ninterface PlaylistViewProps {\r\n playlistId: string;\r\n isShared?: boolean;\r\n application: string;\r\n getVideoAppLink: (video: Video) => Core.AppLink;\r\n getSeriesAppLink: (series: Series) => Core.AppLink;\r\n allowEdit?: boolean;\r\n showBreadcrumbs?: boolean;\r\n showDateMetadata?: boolean;\r\n playAllAppLink?: Core.AppLink;\r\n returnAppLink?: AppLinkWithLabel;\r\n filterByRating?: boolean;\r\n}\r\n\r\nexport function PlaylistView(props: PlaylistViewProps): React.ReactElement {\r\n const dispatch = useDispatch();\r\n\r\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config);\r\n const user = Flight.useBasicFetch<OnlineCurrentUser>(UserRequests.currentUser);\r\n const isUserSignedIn = !ObjectHelper.isEmpty(user.data);\r\n\r\n const maxAllowedRating = props.filterByRating\r\n ? isUserSignedIn && RatingHelper.getMaxAllowedRatingForUser(user.data)\r\n : null;\r\n\r\n const playlistRequest = props.isShared\r\n ? !!user.data && PlaylistRequests.getSharedPlaylist(props.playlistId, maxAllowedRating)\r\n : PlaylistRequests.getPlaylist(props.playlistId);\r\n\r\n const playlist = Flight.useBasicFetch<Playlist>(playlistRequest);\r\n\r\n useHandlePlaylistError(playlist);\r\n\r\n const getVideosRequest = !!user.data && ((cursor?: string) => {\r\n const request = props.isShared ? PlaylistRequests.getSharedPlaylistVideos : PlaylistRequests.getPlaylistVideos;\r\n\r\n return request(props.playlistId, maxAllowedRating, cursor);\r\n });\r\n\r\n const following = Flight.useBasicFetch<Following>(!!user.data\r\n && PlaylistRequests.getIsFollowingPlaylist(props.playlistId, user.data.id));\r\n\r\n const fetchNext = (cursor?: string) => {\r\n Flight.getFetch(dispatch, getVideosRequest(cursor))();\r\n };\r\n\r\n const { items: videos, hasMore, isFetching } = useInfiniteList<Video>(getVideosRequest, fetchNext);\r\n\r\n useVideoMixin(videos);\r\n\r\n // Locally stored array of videos used to immediately reflect changes in order.\r\n const [ reorderedVideos, setReorderedVideos ] = useReorderedItems(videos);\r\n\r\n const restrictionsRequest = isUserSignedIn && !!videos && !!videos.length &&\r\n VideoRequests.getRestrictions(videos.map(v => v.id));\r\n\r\n const restrictions = Flight.useGetResponse<Restriction[]>(restrictionsRequest && restrictionsRequest.key);\r\n\r\n const fetchRestrictions = Flight.useGetFetch(restrictionsRequest);\r\n\r\n if (restrictionsRequest && restrictions.shouldFetch) {\r\n fetchRestrictions();\r\n }\r\n\r\n const videosWithRestrictions = isUserSignedIn\r\n ? !!restrictions.data && RestrictionHelper.mixinRestrictions(videos, restrictions.data)\r\n : videos;\r\n\r\n useSetPageTitle(!!playlist.data && playlist.data.name, [playlist.data]);\r\n\r\n const onSortStart = (index: number) => {\r\n const video = videos[index];\r\n\r\n if (video)\r\n PlaylistViewUtils.logSortAction(props.playlistId, video.id, WorkflowPhase.Start);\r\n };\r\n\r\n const onSortComplete = (oldIdx: number, newIdx: number) => {\r\n if (oldIdx === newIdx)\r\n return;\r\n\r\n const video = videosWithRestrictions[oldIdx];\r\n\r\n if (!video)\r\n return;\r\n\r\n const { reorderedItems, reorderRequest } = ReorderHelper.reorder(videosWithRestrictions, oldIdx, newIdx);\r\n\r\n setReorderedVideos(reorderedItems);\r\n\r\n PlaylistViewUtils.logSortAction(props.playlistId, video.id, WorkflowPhase.Complete);\r\n\r\n const onError = () => {\r\n setReorderedVideos(null);\r\n };\r\n\r\n Flight.fetch(dispatch, PlaylistRequests.reorderVideos(props.playlistId, reorderRequest, null, onError));\r\n };\r\n\r\n const follow = (shouldFollow: boolean) => {\r\n const req = shouldFollow\r\n ? PlaylistRequests.followPlaylist\r\n : PlaylistRequests.unfollowPlaylist;\r\n\r\n Flight.fetch(dispatch, req(props.playlistId, user.data.id));\r\n };\r\n\r\n const setFavourite = (videoId: string, shouldFavourite: boolean, onError?: () => void) => {\r\n Flight.fetch(\r\n dispatch,\r\n FavouriteVideoRequests.updateIsVideoFavourited(videoId, user.data.id, shouldFavourite, () => {\r\n AnalyticsHelper.logUserAction({ id: videoId }, {\r\n entity: EntityType.Video,\r\n actionType: UserAction.Favourite,\r\n descriptor: shouldFavourite ? ToggleDescriptor.On : ToggleDescriptor.Off,\r\n location: LocationContext.VideoThumbnail,\r\n workflowPhase: WorkflowPhase.Complete\r\n });\r\n }, onError)\r\n );\r\n };\r\n\r\n const canEdit = !!props.allowEdit && PlaylistViewUtils.canEditPlaylist(playlist.data, user.data);\r\n\r\n const playlistIsEmpty = !!videos && videos.length === 0;\r\n\r\n return (\r\n <VideoActionsContext.Provider\r\n value={{\r\n videoActions: PlaylistViewUtils.getVideoActions(canEdit),\r\n getActionAppLink: getVideoActionAppLink(props.application, props.playlistId)\r\n }}\r\n >\r\n <div className='bg-white padding-gutter'>\r\n <PlaylistHeader\r\n playlistId={props.playlistId}\r\n playlist={playlist.data}\r\n hasVideos={!playlistIsEmpty}\r\n isFollowing={following.data?.isFollowing}\r\n follow={follow}\r\n application={props.application}\r\n canEdit={canEdit}\r\n isShared={props.isShared}\r\n showBreadcrumbs={props.showBreadcrumbs}\r\n showDateMetadata={props.showDateMetadata}\r\n playAllAppLink={props.playAllAppLink}\r\n showPartialLoading={!playlist.data || !videos || !user.data || !config.data || !following.data}\r\n lastUpdated={!!videos && PlaylistViewUtils.getLastUpdatedDate(videos)}\r\n imageCdnUrl={!!config.data && config.data.imageCdnUrl}\r\n returnAppLink={props.returnAppLink}\r\n />\r\n {playlistIsEmpty\r\n ? (!!config.data && <EmptyVideoListComponent supportSiteUrl={config.data.supportSiteUrl} />)\r\n : <SortableVideoListContainer\r\n videos={reorderedVideos || videosWithRestrictions}\r\n playlistId={!!playlist.data && playlist.data.id}\r\n onSortStart={onSortStart}\r\n onSortComplete={onSortComplete}\r\n isUserSignedIn={isUserSignedIn}\r\n canEdit={canEdit}\r\n showPartialLoading={!videosWithRestrictions || !user.data || !config.data}\r\n getVideoAppLink={props.getVideoAppLink}\r\n getSeriesAppLink={props.getSeriesAppLink}\r\n fetchRestrictions={fetchRestrictions}\r\n setFavourite={setFavourite}\r\n />\r\n }\r\n {!!hasMore && <InfiniteScrollFooter isFetching={isFetching} onClick={fetchNext} />}\r\n </div>\r\n </VideoActionsContext.Provider>\r\n );\r\n}","import * as React from 'react';\r\n\r\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\r\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\r\nimport { Video, Playlist, CurrentUser, BaseObject } from 'libs/shared/interfaces';\r\nimport { VideoAction } from 'libs/shared/utils/video-actions/VideoActionsHelper';\r\nimport { WorkflowPhase, LocationContext, EntityType, UserAction } from 'libs/analytics/interfaces';\r\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\r\n\r\n/**\r\n * NOTE:\r\n * This will be wrong if we increase the playlist limit from 100, or\r\n * stop fetching all 100 videos at once.\r\n */\r\nexport function getLastUpdatedDate(videos: Video[]): string {\r\n const videoLastUpdatedDates: string[] = videos && videos.length && videos.map(v => v.dateAssociated);\r\n\r\n return (videoLastUpdatedDates && videoLastUpdatedDates.length)\r\n ? ArrayHelper.max<string, number>(videoLastUpdatedDates, (date: string) => new Date(date).getTime())\r\n : null;\r\n}\r\n\r\nexport function getVideoActions(canEdit: boolean): VideoAction[] {\r\n return [\r\n canEdit ? VideoAction.RemoveFromPlaylist : VideoAction.AddToPlaylist,\r\n VideoAction.Share\r\n ];\r\n}\r\n\r\nexport function logSortAction(playlistId: string, videoId: string, workflowPhase: WorkflowPhase) : void {\r\n AnalyticsHelper.logUserAction({ id: videoId, playlistId }, {\r\n location: LocationContext.VideoList,\r\n entity: EntityType.Video,\r\n actionType: UserAction.Move,\r\n workflowPhase\r\n });\r\n}\r\n\r\nexport function canEditPlaylist(playlist: Playlist, user: CurrentUser): boolean {\r\n if (ObjectHelper.isEmpty(user) || !playlist || ObjectHelper.isEmpty(playlist.owner))\r\n return false;\r\n\r\n return playlist.owner.id === user.id;\r\n}","import { Flight } from 'libs/common/flight';\r\nimport { VideoCollection, User, Video } from 'libs/shared/interfaces';\r\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\r\nimport { FavouriteVideoRequests } from 'libs/shared/flight-requests/FavouriteVideoRequests';\r\n\r\nimport { VideoRequests } from 'shared/flight-requests/VideoRequests';\r\n\r\nfunction fetchAttribute(videosFetched: boolean, request: Flight.Request): void {\r\n const attribute = Flight.useGetResponse<VideoCollection>(request && request.key);\r\n const fetch = Flight.useGetFetch(request);\r\n\r\n if (videosFetched && attribute.shouldFetch)\r\n fetch();\r\n}\r\n\r\nexport function useVideoMixin(videos: VideoCollection | Video[]): void {\r\n const currentUser = Flight.useBasicFetch<User>(UserRequests.currentUser);\r\n\r\n const videoIds = videos && (Array.isArray(videos)\r\n ? videos.map(v => v.id)\r\n : videos.data.map(v => v.id));\r\n\r\n const requests: Flight.Request[] = [\r\n videoIds && VideoRequests.videoRatings(videoIds),\r\n videoIds && currentUser.data && FavouriteVideoRequests.isFavourited(currentUser.data.id, videoIds)\r\n ];\r\n\r\n requests.forEach(r => fetchAttribute(!!videos, r));\r\n}"],"sourceRoot":""}
|