@streamscloud/embeddable 8.3.0 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/content-player/cmp.content-player.svelte +1 -1
- package/dist/content-player/content-player-config.svelte.d.ts +4 -4
- package/dist/content-player/controls-and-attachments.svelte +1 -1
- package/dist/content-player/header.svelte +1 -1
- package/dist/core/document.event-handlers.d.ts +1 -0
- package/dist/core/document.event-handlers.js +3 -0
- package/dist/media-center/config/internal-media-center-analytics-handler.d.ts +4 -3
- package/dist/media-center/config/internal-media-center-analytics-handler.js +1 -0
- package/dist/media-center/config/internal-media-center-config.d.ts +1 -1
- package/dist/media-center/config/internal-media-center-config.js +38 -48
- package/dist/media-center/config/operations.generated.d.ts +0 -104
- package/dist/media-center/config/operations.generated.js +0 -323
- package/dist/media-center/config/operations.graphql +0 -24
- package/dist/media-center/config/types.d.ts +14 -14
- package/dist/media-center/config/types.js +1 -1
- package/dist/media-center/media-center/cmp.media-center.svelte +101 -24
- package/dist/media-center/media-center/cmp.media-center.svelte.d.ts +5 -5
- package/dist/media-center/media-center/discover-panel-handler.svelte.d.ts +5 -4
- package/dist/media-center/media-center/discover-panel-handler.svelte.js +2 -1
- package/dist/media-center/media-center/discover-panel.svelte +1 -1
- package/dist/media-center/media-center/discover-panel.svelte.d.ts +4 -3
- package/dist/media-center/media-center/post-player-provider-generator.d.ts +8 -0
- package/dist/media-center/media-center/{short-video-resources-generator.js → post-player-provider-generator.js} +9 -3
- package/dist/media-center/media-center/streams-in-category-panel-handler.svelte.d.ts +5 -2
- package/dist/media-center/media-center/streams-in-category-panel-handler.svelte.js +5 -0
- package/dist/media-center/media-center/streams-in-category-panel.svelte +2 -2
- package/dist/media-center/media-center/streams-in-category-panel.svelte.d.ts +3 -2
- package/dist/media-center/media-center/streams-player-provider-generator.d.ts +8 -0
- package/dist/media-center/media-center/streams-player-provider-generator.js +36 -0
- package/dist/media-center/media-center/types.d.ts +1 -7
- package/dist/posts/controls/cmp.controls.svelte +1 -1
- package/dist/posts/data-loaders/index.d.ts +1 -0
- package/dist/posts/data-loaders/index.js +1 -0
- package/dist/posts/data-loaders/mapper.d.ts +3 -0
- package/dist/{short-videos/short-videos-player → posts/data-loaders}/mapper.js +2 -2
- package/dist/{short-videos/short-videos-player → posts/data-loaders}/operations.generated.d.ts +6 -6
- package/dist/{short-videos/short-videos-player → posts/data-loaders}/operations.generated.js +7 -10
- package/dist/posts/data-loaders/operations.graphql +17 -0
- package/dist/posts/data-loaders/posts-loader.d.ts +19 -0
- package/dist/posts/data-loaders/posts-loader.js +28 -0
- package/dist/posts/handlers/index.d.ts +1 -0
- package/dist/posts/handlers/index.js +1 -0
- package/dist/{short-videos/short-videos-player/internal-short-video-analytics-handler.d.ts → posts/handlers/internal-post-analytics-handler.d.ts} +3 -2
- package/dist/{short-videos/short-videos-player/internal-short-video-analytics-handler.js → posts/handlers/internal-post-analytics-handler.js} +2 -1
- package/dist/{short-videos/short-videos-player/cmp.short-videos-player.svelte → posts/posts-player/cmp.posts-player.svelte} +3 -3
- package/dist/posts/posts-player/cmp.posts-player.svelte.d.ts +4 -0
- package/dist/posts/posts-player/index.d.ts +55 -20
- package/dist/posts/posts-player/index.js +48 -32
- package/dist/posts/posts-player/posts-player-view.svelte +65 -15
- package/dist/posts/posts-player/posts-player-view.svelte.d.ts +5 -1
- package/dist/posts/posts-player/types.d.ts +9 -3
- package/dist/short-videos/data-providers/index.d.ts +1 -0
- package/dist/short-videos/data-providers/index.js +1 -0
- package/dist/short-videos/data-providers/internal-short-video-player-items-provider.d.ts +17 -0
- package/dist/short-videos/{short-videos-player/internal-short-video-player-provider.js → data-providers/internal-short-video-player-items-provider.js} +13 -33
- package/dist/short-videos/short-videos-player/index.d.ts +14 -64
- package/dist/short-videos/short-videos-player/index.js +77 -31
- package/dist/streams/data-loaders/index.d.ts +2 -0
- package/dist/streams/data-loaders/index.js +2 -0
- package/dist/streams/{stream-player → data-loaders}/mapper.d.ts +1 -1
- package/dist/streams/{stream-player → data-loaders}/operations.generated.d.ts +27 -24
- package/dist/streams/{stream-player → data-loaders}/operations.generated.js +18 -17
- package/dist/streams/{stream-player → data-loaders}/operations.graphql +6 -3
- package/dist/streams/data-loaders/stream-pages-loader.d.ts +10 -0
- package/dist/streams/data-loaders/stream-pages-loader.js +33 -0
- package/dist/streams/data-loaders/streams-loader.d.ts +19 -0
- package/dist/streams/data-loaders/streams-loader.js +28 -0
- package/dist/streams/{stream-player → streams-player}/index.d.ts +21 -22
- package/dist/streams/{stream-player → streams-player}/index.js +9 -7
- package/dist/streams/streams-player/internal-streams-player-data-provider.d.ts +16 -0
- package/dist/streams/streams-player/internal-streams-player-data-provider.js +55 -0
- package/dist/streams/{stream-player → streams-player}/stream-overview.svelte +18 -15
- package/dist/streams/{stream-player → streams-player}/stream-overview.svelte.d.ts +2 -2
- package/dist/streams/streams-player/streams-player-buffer.svelte.d.ts +8 -0
- package/dist/streams/streams-player/streams-player-buffer.svelte.js +15 -0
- package/dist/streams/{stream-player/stream-player-view.svelte → streams-player/streams-player-view.svelte} +69 -55
- package/dist/streams/streams-player/streams-player-view.svelte.d.ts +8 -0
- package/dist/streams/{stream-player → streams-player}/types.d.ts +9 -7
- package/dist/ui/{player-button → player/button}/cmp.player-button.svelte +1 -1
- package/dist/ui/{player-button → player/button}/cmp.player-button.svelte.d.ts +1 -1
- package/dist/ui/{player-button → player/button}/cmp.player-buttons-group.svelte +1 -1
- package/dist/ui/{player-button → player/button}/types.d.ts +1 -1
- package/dist/ui/player/button/types.js +1 -0
- package/dist/ui/player/providers/chunks-player-buffer/index.d.ts +2 -0
- package/dist/ui/player/providers/chunks-player-buffer/index.js +2 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunk-item.svelte.d.ts +11 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunk-item.svelte.js +11 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunk.svelte.d.ts +31 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunk.svelte.js +67 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.d.ts +23 -0
- package/dist/ui/player/providers/chunks-player-buffer/player-chunks-manager.svelte.js +119 -0
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.d.ts +20 -0
- package/dist/ui/player/providers/default-chunks-player-buffer.svelte.js +47 -0
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.d.ts +27 -0
- package/dist/ui/player/providers/default-feed-player-buffer.svelte.js +78 -0
- package/dist/ui/player/providers/index.d.ts +3 -0
- package/dist/ui/player/providers/index.js +2 -0
- package/dist/ui/player/providers/types.d.ts +49 -0
- package/dist/ui/{player-slider → player/slider}/cmp.player-slider.svelte +7 -20
- package/dist/ui/{player-slider → player/slider}/cmp.player-slider.svelte.d.ts +4 -4
- package/dist/ui/{player-slider → player/slider}/index.d.ts +0 -2
- package/dist/ui/{player-slider → player/slider}/index.js +0 -1
- package/dist/ui/player/slider/types.d.ts +16 -0
- package/dist/ui/swipe-indicator/cmp.swipe-indicator.svelte +7 -8
- package/package.json +4 -4
- package/dist/media-center/media-center/short-video-resources-generator.d.ts +0 -8
- package/dist/short-videos/short-videos-player/cmp.short-videos-player.svelte.d.ts +0 -4
- package/dist/short-videos/short-videos-player/internal-short-video-player-provider.d.ts +0 -18
- package/dist/short-videos/short-videos-player/mapper.d.ts +0 -3
- package/dist/short-videos/short-videos-player/operations.graphql +0 -17
- package/dist/short-videos/short-videos-player/short-videos-player-view.svelte +0 -82
- package/dist/short-videos/short-videos-player/short-videos-player-view.svelte.d.ts +0 -8
- package/dist/short-videos/short-videos-player/types.d.ts +0 -26
- package/dist/streams/stream-player/internal-stream-player-data-provider.d.ts +0 -12
- package/dist/streams/stream-player/internal-stream-player-data-provider.js +0 -48
- package/dist/streams/stream-player/stream-player-buffer.svelte.d.ts +0 -28
- package/dist/streams/stream-player/stream-player-buffer.svelte.js +0 -79
- package/dist/streams/stream-player/stream-player-view.svelte.d.ts +0 -8
- package/dist/ui/player-button/types.js +0 -1
- package/dist/ui/player-slider/player-buffer.svelte.d.ts +0 -31
- package/dist/ui/player-slider/player-buffer.svelte.js +0 -76
- package/dist/ui/player-slider/types.d.ts +0 -26
- /package/dist/streams/{stream-player → data-loaders}/mapper.js +0 -0
- /package/dist/streams/{stream-player → streams-player}/internal-stream-analytics-handler.d.ts +0 -0
- /package/dist/streams/{stream-player → streams-player}/internal-stream-analytics-handler.js +0 -0
- /package/dist/streams/{stream-player → streams-player}/stream-player-localization.d.ts +0 -0
- /package/dist/streams/{stream-player → streams-player}/stream-player-localization.js +0 -0
- /package/dist/{short-videos/short-videos-player → streams/streams-player}/types.js +0 -0
- /package/dist/ui/{player-button → player/button}/cmp.player-buttons-group.svelte.d.ts +0 -0
- /package/dist/ui/{player-button → player/button}/index.d.ts +0 -0
- /package/dist/ui/{player-button → player/button}/index.js +0 -0
- /package/dist/{streams/stream-player → ui/player/providers}/types.js +0 -0
- /package/dist/ui/{player-slider → player/slider}/prevent-slider-scroll.d.ts +0 -0
- /package/dist/ui/{player-slider → player/slider}/prevent-slider-scroll.js +0 -0
- /package/dist/ui/{player-slider → player/slider}/types.js +0 -0
- /package/dist/ui/{player-slider → player/slider}/wheel-gestures-adapter.d.ts +0 -0
- /package/dist/ui/{player-slider → player/slider}/wheel-gestures-adapter.js +0 -0
|
@@ -18,27 +18,3 @@ query GetMediaPageConfig($mediaPageId: String!) {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
# noinspection GraphQLSchemaValidation
|
|
23
|
-
query GetShortVideos($input: EmbedPostsInput!, $image_scale: ImageScale = ORIGINAL_ENCODED) {
|
|
24
|
-
shortVideos: embedPosts(input: $input) {
|
|
25
|
-
items {
|
|
26
|
-
...ShortVideosPlayerPayloadFragment
|
|
27
|
-
}
|
|
28
|
-
continuationToken
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
query GetStreams($input: EmbedStreamsInput!) {
|
|
33
|
-
streams: embedStreams(input: $input) {
|
|
34
|
-
items {
|
|
35
|
-
id
|
|
36
|
-
cover {
|
|
37
|
-
url
|
|
38
|
-
}
|
|
39
|
-
title
|
|
40
|
-
subTitle
|
|
41
|
-
}
|
|
42
|
-
continuationToken
|
|
43
|
-
}
|
|
44
|
-
}
|
|
@@ -1,24 +1,27 @@
|
|
|
1
|
+
import { PostType } from '../../core/enums';
|
|
1
2
|
import type { IContentCategoryFollowingHandler } from '../categories-following';
|
|
3
|
+
import type { IPostAnalyticsHandler, PostPlayerModel } from '../../posts/posts-player/types';
|
|
2
4
|
import type { IPostSocialInteractionsHandler } from '../../posts/social-interactions';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
+
import type { StreamPageViewerModel } from '../../streams/stream-page-viewer';
|
|
6
|
+
import type { IStreamAnalyticsHandler, StreamPlayerModel } from '../../streams/streams-player/types';
|
|
5
7
|
export interface IMediaCenterConfig {
|
|
6
8
|
getConfig: () => Promise<MediaCenterConfigModel | null>;
|
|
7
9
|
handlers?: {
|
|
8
|
-
analyticsHandler?:
|
|
10
|
+
analyticsHandler?: IPostAnalyticsHandler & IStreamAnalyticsHandler;
|
|
9
11
|
socialInteractionsHandler?: IPostSocialInteractionsHandler;
|
|
10
12
|
categoriesFollowingHandler?: IContentCategoryFollowingHandler;
|
|
11
13
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
+
postsPlayer: {
|
|
15
|
+
getPostsCursor: (input: {
|
|
14
16
|
filter: {
|
|
17
|
+
types: PostType[];
|
|
15
18
|
categoryId?: string;
|
|
16
19
|
excludeIds?: string[];
|
|
17
20
|
};
|
|
18
21
|
limit: number;
|
|
19
22
|
continuationToken?: string | null;
|
|
20
23
|
}) => Promise<{
|
|
21
|
-
items:
|
|
24
|
+
items: PostPlayerModel[];
|
|
22
25
|
continuationToken: string | null;
|
|
23
26
|
}>;
|
|
24
27
|
};
|
|
@@ -31,10 +34,13 @@ export interface IMediaCenterConfig {
|
|
|
31
34
|
limit: number;
|
|
32
35
|
continuationToken?: string | null;
|
|
33
36
|
}) => Promise<{
|
|
34
|
-
items:
|
|
37
|
+
items: StreamPlayerModel[];
|
|
38
|
+
continuationToken: string | null;
|
|
39
|
+
}>;
|
|
40
|
+
getStreamPages: (streamId: string, continuationToken: string | null | undefined) => Promise<{
|
|
41
|
+
items: StreamPageViewerModel[];
|
|
35
42
|
continuationToken: string | null;
|
|
36
43
|
}>;
|
|
37
|
-
streamPlayerDataProvider: IStreamPlayerDataProvider;
|
|
38
44
|
};
|
|
39
45
|
}
|
|
40
46
|
export type MediaCenterConfigModel = {
|
|
@@ -46,12 +52,6 @@ export type MediaCenterConfigModel = {
|
|
|
46
52
|
}[];
|
|
47
53
|
targetData: MediaCenterTargetDataModel;
|
|
48
54
|
};
|
|
49
|
-
export type MediaCenterStreamPreviewModel = {
|
|
50
|
-
id: string;
|
|
51
|
-
title: string;
|
|
52
|
-
subTitle: string | null;
|
|
53
|
-
cover: string | null;
|
|
54
|
-
};
|
|
55
55
|
export type MediaCenterTargetDataModel = {
|
|
56
56
|
id: string;
|
|
57
57
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import { PostType } from '../../core/enums';
|
|
@@ -9,23 +9,26 @@
|
|
|
9
9
|
};
|
|
10
10
|
import { horizontalWheelScroll } from '../../core/actions';
|
|
11
11
|
import { Utils } from '../../core/utils';
|
|
12
|
-
import { default as
|
|
13
|
-
import { default as
|
|
12
|
+
import { default as PostsPlayerView } from '../../posts/posts-player/posts-player-view.svelte';
|
|
13
|
+
import { default as StreamsPlayerView } from '../../streams/streams-player/streams-player-view.svelte';
|
|
14
14
|
import { Icon } from '../../ui/icon';
|
|
15
15
|
import { Loading } from '../../ui/loading';
|
|
16
|
-
import { PlayerButton } from '../../ui/player
|
|
16
|
+
import { PlayerButton } from '../../ui/player/button';
|
|
17
17
|
import { default as DesktopCategoriesSelector } from './desktop-categories-selector.svelte';
|
|
18
18
|
import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
|
|
19
19
|
import { default as DiscoverPanel } from './discover-panel.svelte';
|
|
20
20
|
import { MediaCenterHandler } from './media-center-handler.svelte';
|
|
21
21
|
import { MediaCenterLocalization } from './media-center-localization';
|
|
22
22
|
import { default as MobileControlsPanel } from './mobile-controls-panel.svelte';
|
|
23
|
-
import {
|
|
23
|
+
import { makePostPlayerItemsProvider } from './post-player-provider-generator';
|
|
24
24
|
import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
|
|
25
25
|
import { default as StreamsInCategoryPanel } from './streams-in-category-panel.svelte';
|
|
26
|
+
import { makeStreamsPlayerDataProvider } from './streams-player-provider-generator';
|
|
26
27
|
import IconLineHorizontal3 from '@fluentui/svg-icons/icons/line_horizontal_3_20_regular.svg?raw';
|
|
27
28
|
import IconScreenSearch from '@fluentui/svg-icons/icons/screen_search_20_regular.svg?raw';
|
|
29
|
+
import { tick } from 'svelte';
|
|
28
30
|
import { fade } from 'svelte/transition';
|
|
31
|
+
const SCROLL_MASK_OFFSET = 32;
|
|
29
32
|
let { config, playerProps, locale = 'en' } = $props();
|
|
30
33
|
const localization = $derived(new MediaCenterLocalization(locale));
|
|
31
34
|
const commonPlayerSettings = {
|
|
@@ -42,23 +45,24 @@ let isMobileView = $state(false);
|
|
|
42
45
|
const overlayActivated = $derived(discoverHandler.activated || streamsInCategoryHandler.activated);
|
|
43
46
|
let mobileControlsPanelActive = $state(false);
|
|
44
47
|
let extraMobileControlsPanelActions = $state.raw([]);
|
|
48
|
+
let scrollAreaRef = $state(null);
|
|
45
49
|
const selectCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
46
|
-
var _a, _b;
|
|
50
|
+
var _a, _b, _c;
|
|
47
51
|
const selectedCategoryData = handler.getCategoryData(categoryId);
|
|
48
52
|
if (!config || !selectedCategoryData) {
|
|
49
53
|
return;
|
|
50
54
|
}
|
|
51
55
|
hideMobileControlsPanel();
|
|
52
56
|
switch (mediaCenterMode) {
|
|
53
|
-
case '
|
|
57
|
+
case 'posts':
|
|
54
58
|
if (handler.selectedCategoryId === categoryId) {
|
|
55
59
|
discoverHandler.deactivate();
|
|
56
60
|
return;
|
|
57
61
|
}
|
|
58
62
|
handler.selectedCategoryId = categoryId;
|
|
59
63
|
computedPlayerProps = {
|
|
60
|
-
mode: '
|
|
61
|
-
props: Object.assign({ dataProvider:
|
|
64
|
+
mode: 'posts',
|
|
65
|
+
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, categoryId }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerSettings)
|
|
62
66
|
};
|
|
63
67
|
discoverHandler.deactivate();
|
|
64
68
|
break;
|
|
@@ -76,22 +80,68 @@ const selectCategory = (categoryId) => __awaiter(void 0, void 0, void 0, functio
|
|
|
76
80
|
default:
|
|
77
81
|
Utils.assertUnreachable(mediaCenterMode);
|
|
78
82
|
}
|
|
83
|
+
// Scroll to selected category if it's hidden
|
|
84
|
+
yield scrollToSelectedCategory((_c = selectedCategoryData.parentId) !== null && _c !== void 0 ? _c : selectedCategoryData.id);
|
|
85
|
+
});
|
|
86
|
+
/**
|
|
87
|
+
* Scrolls the scroll area to make the selected category button visible
|
|
88
|
+
* @param categoryId - ID of the selected category
|
|
89
|
+
*/
|
|
90
|
+
const scrollToSelectedCategory = (categoryId) => __awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
+
if (!scrollAreaRef) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
// Wait for DOM to update with the new active state
|
|
95
|
+
yield tick();
|
|
96
|
+
// Find the selected category button element
|
|
97
|
+
const selectedButton = scrollAreaRef.querySelector(`[id="${categoryId}"]`);
|
|
98
|
+
if (!selectedButton) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
// Get scroll area and button dimensions
|
|
102
|
+
const scrollAreaRect = scrollAreaRef.getBoundingClientRect();
|
|
103
|
+
const buttonRect = selectedButton.getBoundingClientRect();
|
|
104
|
+
// Calculate button position relative to scroll area
|
|
105
|
+
const buttonLeftRelative = buttonRect.left - scrollAreaRect.left + scrollAreaRef.scrollLeft;
|
|
106
|
+
const buttonRightRelative = buttonLeftRelative + buttonRect.width;
|
|
107
|
+
// Calculate visible area boundaries (accounting for mask gradients)
|
|
108
|
+
const hasLeftMask = scrollAreaRef.scrollLeft > 0;
|
|
109
|
+
const hasRightMask = scrollAreaRef.scrollLeft < scrollAreaRef.scrollWidth - scrollAreaRect.width - 1;
|
|
110
|
+
const visibleLeft = scrollAreaRef.scrollLeft + (hasLeftMask ? SCROLL_MASK_OFFSET : 0);
|
|
111
|
+
const visibleRight = scrollAreaRef.scrollLeft + scrollAreaRect.width - (hasRightMask ? SCROLL_MASK_OFFSET : 0);
|
|
112
|
+
// Check if button is hidden or partially hidden
|
|
113
|
+
const isHiddenLeft = buttonLeftRelative < visibleLeft;
|
|
114
|
+
const isHiddenRight = buttonRightRelative > visibleRight;
|
|
115
|
+
if (isHiddenLeft) {
|
|
116
|
+
const targetScroll = buttonLeftRelative - SCROLL_MASK_OFFSET;
|
|
117
|
+
scrollAreaRef.scrollTo({
|
|
118
|
+
left: targetScroll,
|
|
119
|
+
behavior: 'smooth'
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
else if (isHiddenRight) {
|
|
123
|
+
const targetScroll = buttonRightRelative - scrollAreaRect.width + SCROLL_MASK_OFFSET;
|
|
124
|
+
scrollAreaRef.scrollTo({
|
|
125
|
+
left: targetScroll,
|
|
126
|
+
behavior: 'smooth'
|
|
127
|
+
});
|
|
128
|
+
}
|
|
79
129
|
});
|
|
80
130
|
const activateSelectedShortVideoPlayer = (shortVideo) => {
|
|
81
131
|
var _a, _b;
|
|
82
132
|
if (!config) {
|
|
83
133
|
return;
|
|
84
134
|
}
|
|
85
|
-
mediaCenterMode = '
|
|
135
|
+
mediaCenterMode = 'posts';
|
|
86
136
|
computedPlayerProps = {
|
|
87
|
-
mode: '
|
|
88
|
-
props: Object.assign({ dataProvider:
|
|
137
|
+
mode: 'posts',
|
|
138
|
+
props: Object.assign({ dataProvider: makePostPlayerItemsProvider({ config, prefetchedItems: [shortVideo] }), socialInteractionsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.socialInteractionsHandler, analyticsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.analyticsHandler }, commonPlayerSettings)
|
|
89
139
|
};
|
|
90
140
|
handler.selectedCategoryId = null;
|
|
91
141
|
discoverHandler.deactivate();
|
|
92
142
|
streamsInCategoryHandler.deactivate();
|
|
93
143
|
};
|
|
94
|
-
const activateSelectedStreamPlayer = (
|
|
144
|
+
const activateSelectedStreamPlayer = (stream) => {
|
|
95
145
|
var _a, _b;
|
|
96
146
|
if (!config) {
|
|
97
147
|
return;
|
|
@@ -99,7 +149,21 @@ const activateSelectedStreamPlayer = (id) => {
|
|
|
99
149
|
mediaCenterMode = 'stream';
|
|
100
150
|
computedPlayerProps = {
|
|
101
151
|
mode: 'stream',
|
|
102
|
-
props: Object.assign({
|
|
152
|
+
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: [stream] }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerSettings)
|
|
153
|
+
};
|
|
154
|
+
handler.selectedCategoryId = null;
|
|
155
|
+
discoverHandler.deactivate();
|
|
156
|
+
streamsInCategoryHandler.deactivate();
|
|
157
|
+
};
|
|
158
|
+
const activateSelectedStreamOfCategoryPlayer = (id, prefetchedStreams, categoryId) => {
|
|
159
|
+
var _a, _b;
|
|
160
|
+
if (!config) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
mediaCenterMode = 'stream';
|
|
164
|
+
computedPlayerProps = {
|
|
165
|
+
mode: 'stream',
|
|
166
|
+
props: Object.assign({ dataProvider: makeStreamsPlayerDataProvider({ config, prefetchedStreams: prefetchedStreams, initialStreamId: id, categoryId }), analyticsHandler: (_a = config.handlers) === null || _a === void 0 ? void 0 : _a.analyticsHandler, postSocialInteractionsHandler: (_b = config.handlers) === null || _b === void 0 ? void 0 : _b.socialInteractionsHandler }, commonPlayerSettings)
|
|
103
167
|
};
|
|
104
168
|
handler.selectedCategoryId = null;
|
|
105
169
|
discoverHandler.deactivate();
|
|
@@ -134,6 +198,8 @@ const updateScrollShadows = (scrollArea) => {
|
|
|
134
198
|
scrollArea.classList.toggle('has-both-masks', scrollHasRight && scrollHasLeft);
|
|
135
199
|
};
|
|
136
200
|
const onScrollMounted = (node) => {
|
|
201
|
+
scrollAreaRef = node;
|
|
202
|
+
scrollAreaRef.style.setProperty('--scroll-area--mask-offset', `${SCROLL_MASK_OFFSET}px`);
|
|
137
203
|
const scrollResizeObserver = new ResizeObserver(() => {
|
|
138
204
|
updateScrollShadows(node);
|
|
139
205
|
});
|
|
@@ -178,7 +244,7 @@ const onWidthAnchorMounted = (node) => {
|
|
|
178
244
|
class="media-center-controls-panel__button"
|
|
179
245
|
class:media-center-controls-panel__button--active={discoverHandler.activated}
|
|
180
246
|
onclick={toggleDiscover}>
|
|
181
|
-
<span class="media-center-controls-panel__button-icon">
|
|
247
|
+
<span class="media-center-controls-panel__button-icon" class:media-center-controls-panel__button-icon--active={discoverHandler.activated}>
|
|
182
248
|
<Icon src={IconScreenSearch} />
|
|
183
249
|
</span>
|
|
184
250
|
<span class="media-center-controls-panel__button-value">
|
|
@@ -189,6 +255,7 @@ const onWidthAnchorMounted = (node) => {
|
|
|
189
255
|
{#each handler.categories as category (category.id)}
|
|
190
256
|
<button
|
|
191
257
|
type="button"
|
|
258
|
+
id={category.id}
|
|
192
259
|
class="media-center-controls-panel__button"
|
|
193
260
|
class:media-center-controls-panel__button--active={!discoverHandler.activated && handler.controlsPanelSelectedCategory?.id === category.id}
|
|
194
261
|
data-child-name={(!discoverHandler.activated &&
|
|
@@ -210,8 +277,8 @@ const onWidthAnchorMounted = (node) => {
|
|
|
210
277
|
</div>
|
|
211
278
|
{/if}
|
|
212
279
|
{/snippet}
|
|
213
|
-
{#if computedPlayerProps.mode === '
|
|
214
|
-
<
|
|
280
|
+
{#if computedPlayerProps.mode === 'posts'}
|
|
281
|
+
<PostsPlayerView
|
|
215
282
|
{...computedPlayerProps.props}
|
|
216
283
|
mediaCenterData={{
|
|
217
284
|
controlsPanel: handler.categories.length ? controlsPanel : undefined,
|
|
@@ -220,7 +287,7 @@ const onWidthAnchorMounted = (node) => {
|
|
|
220
287
|
callbacks: { onHeaderHeightChanged, onExtraActionsForMobileControlsPanelDetermined }
|
|
221
288
|
}} />
|
|
222
289
|
{:else if computedPlayerProps.mode === 'stream'}
|
|
223
|
-
<
|
|
290
|
+
<StreamsPlayerView
|
|
224
291
|
{...computedPlayerProps.props}
|
|
225
292
|
mediaCenterData={{
|
|
226
293
|
controlsPanel: handler.categories.length ? controlsPanel : undefined,
|
|
@@ -238,13 +305,18 @@ const onWidthAnchorMounted = (node) => {
|
|
|
238
305
|
<DiscoverPanel
|
|
239
306
|
handler={discoverHandler}
|
|
240
307
|
localization={localization}
|
|
241
|
-
on={{
|
|
308
|
+
on={{
|
|
309
|
+
shortVideoSelected: (shortVideo) => activateSelectedShortVideoPlayer(shortVideo),
|
|
310
|
+
streamSelected: (stream) => activateSelectedStreamPlayer(stream)
|
|
311
|
+
}} />
|
|
242
312
|
</div>
|
|
243
313
|
{/if}
|
|
244
314
|
|
|
245
315
|
{#if streamsInCategoryHandler.active}
|
|
246
316
|
<div class="media-center-overlay" style={`top:${headerHeight}px`} transition:fade={{ duration: 300 }}>
|
|
247
|
-
<StreamsInCategoryPanel
|
|
317
|
+
<StreamsInCategoryPanel
|
|
318
|
+
handler={streamsInCategoryHandler}
|
|
319
|
+
on={{ streamSelected: (id, categoryId, streams) => activateSelectedStreamOfCategoryPlayer(id, streams, categoryId) }} />
|
|
248
320
|
</div>
|
|
249
321
|
{/if}
|
|
250
322
|
|
|
@@ -304,15 +376,17 @@ const onWidthAnchorMounted = (node) => {
|
|
|
304
376
|
scrollbar-width: none;
|
|
305
377
|
padding: 0.5rem 0.625rem;
|
|
306
378
|
padding-left: 0;
|
|
379
|
+
--_scroll-area--mask-offset--left: var(--scroll-area--mask-offset);
|
|
380
|
+
--_scroll-area--mask-offset--right: calc(100% - var(--scroll-area--mask-offset));
|
|
307
381
|
}
|
|
308
382
|
:global(.media-center-controls-panel__scroll-area.has-left-mask) {
|
|
309
|
-
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0)
|
|
383
|
+
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--left), rgb(0, 0, 0) 100%);
|
|
310
384
|
}
|
|
311
385
|
:global(.media-center-controls-panel__scroll-area.has-right-mask) {
|
|
312
|
-
mask-image: linear-gradient(to right, rgb(0, 0, 0) 0, rgb(0, 0, 0)
|
|
386
|
+
mask-image: linear-gradient(to right, rgb(0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--right), rgba(0, 0, 0, 0) 100%);
|
|
313
387
|
}
|
|
314
388
|
:global(.media-center-controls-panel__scroll-area.has-both-masks) {
|
|
315
|
-
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0)
|
|
389
|
+
mask-image: linear-gradient(to right, rgba(0, 0, 0, 0) 0, rgb(0, 0, 0) var(--_scroll-area--mask-offset--left), rgb(0, 0, 0) var(--_scroll-area--mask-offset--right), rgba(0, 0, 0, 0) 100%);
|
|
316
390
|
}
|
|
317
391
|
.media-center-controls-panel__button {
|
|
318
392
|
position: relative;
|
|
@@ -340,7 +414,6 @@ const onWidthAnchorMounted = (node) => {
|
|
|
340
414
|
.media-center-controls-panel__button--active {
|
|
341
415
|
background-color: rgba(255, 255, 255, 0.9);
|
|
342
416
|
color: #000000;
|
|
343
|
-
--icon--color: #000000;
|
|
344
417
|
}
|
|
345
418
|
.media-center-controls-panel__button:hover:not(.media-center-controls-panel__button--active) {
|
|
346
419
|
background-color: rgba(0, 0, 0, 0.9);
|
|
@@ -364,8 +437,12 @@ const onWidthAnchorMounted = (node) => {
|
|
|
364
437
|
pointer-events: none;
|
|
365
438
|
}
|
|
366
439
|
.media-center-controls-panel__button-icon {
|
|
367
|
-
--icon--color: #ffffff;
|
|
368
440
|
--icon--size: 1.0625rem;
|
|
441
|
+
--icon--color: #ffffff;
|
|
442
|
+
line-height: 0;
|
|
443
|
+
}
|
|
444
|
+
.media-center-controls-panel__button-icon--active {
|
|
445
|
+
--icon--color: #000000;
|
|
369
446
|
}
|
|
370
447
|
.media-center-controls-panel__button-value {
|
|
371
448
|
font-size: 0.875rem;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { Locale } from '../../core/locale';
|
|
2
2
|
import type { IMediaCenterConfig } from '../config/types';
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
3
|
+
import type { PostPlayerProps } from '../../posts/posts-player/types';
|
|
4
|
+
import type { StreamsPlayerProps } from '../../streams/streams-player/types';
|
|
5
5
|
type PlayerProps = {
|
|
6
|
-
mode: '
|
|
7
|
-
props:
|
|
6
|
+
mode: 'posts';
|
|
7
|
+
props: PostPlayerProps;
|
|
8
8
|
} | {
|
|
9
9
|
mode: 'stream';
|
|
10
|
-
props:
|
|
10
|
+
props: StreamsPlayerProps;
|
|
11
11
|
};
|
|
12
12
|
type Props = {
|
|
13
13
|
config: IMediaCenterConfig | null;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import type { TrackingParams } from '../../marketing-tracking';
|
|
2
|
+
import type { IMediaCenterConfig } from '..';
|
|
3
|
+
import type { PostPlayerModel } from '../../posts/posts-player';
|
|
2
4
|
import type { ProductCardModel } from '../../products/product-card';
|
|
3
|
-
import type {
|
|
4
|
-
import type { MediaCenterStreamModel } from './types';
|
|
5
|
+
import type { StreamPlayerModel } from '../../streams/streams-player';
|
|
5
6
|
export declare class DiscoverPanelHandler {
|
|
6
7
|
private readonly config;
|
|
7
8
|
private _activated;
|
|
@@ -10,7 +11,7 @@ export declare class DiscoverPanelHandler {
|
|
|
10
11
|
private _shortVideos;
|
|
11
12
|
private _products;
|
|
12
13
|
constructor(config: IMediaCenterConfig | null);
|
|
13
|
-
get streamSectionItems():
|
|
14
|
+
get streamSectionItems(): StreamPlayerModel[];
|
|
14
15
|
get shortVideoSectionItems(): ShortVideoSectionItemType[];
|
|
15
16
|
get activated(): boolean;
|
|
16
17
|
get active(): boolean;
|
|
@@ -22,7 +23,7 @@ export declare class DiscoverPanelHandler {
|
|
|
22
23
|
}
|
|
23
24
|
type ShortVideoSectionItemType = {
|
|
24
25
|
kind: 'video';
|
|
25
|
-
data:
|
|
26
|
+
data: PostPlayerModel;
|
|
26
27
|
} | {
|
|
27
28
|
kind: 'product';
|
|
28
29
|
data: ProductCardModel;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { PostType } from '../../core/enums';
|
|
1
2
|
export class DiscoverPanelHandler {
|
|
2
3
|
config;
|
|
3
4
|
_activated = $state(false);
|
|
@@ -65,7 +66,7 @@ export class DiscoverPanelHandler {
|
|
|
65
66
|
if (this._state === 'not-initialized') {
|
|
66
67
|
this._state = 'loading';
|
|
67
68
|
try {
|
|
68
|
-
const shortVideosResponse = await this.config.
|
|
69
|
+
const shortVideosResponse = await this.config.postsPlayer.getPostsCursor({ filter: { types: [PostType.ShortVideo] }, limit: 5 });
|
|
69
70
|
const streamsResponse = await this.config.streamPlayer.getStreamsCursor({ filter: {}, limit: 5 });
|
|
70
71
|
this._shortVideos = shortVideosResponse.items;
|
|
71
72
|
this._products = this._uniqueById(shortVideosResponse.items.flatMap((i) => i.products)).slice(0, 2);
|
|
@@ -16,7 +16,7 @@ let { handler, localization, on } = $props();
|
|
|
16
16
|
</div>
|
|
17
17
|
<div class="media-center-overview__section-content">
|
|
18
18
|
{#each handler.streamSectionItems as item (item.id)}
|
|
19
|
-
<StreamCard stream={item} on={{ click: () => on.streamSelected(item
|
|
19
|
+
<StreamCard stream={item} on={{ click: () => on.streamSelected(item) }}></StreamCard>
|
|
20
20
|
{/each}
|
|
21
21
|
</div>
|
|
22
22
|
</div>
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { PostPlayerModel } from '../../posts/posts-player';
|
|
2
|
+
import type { StreamPlayerModel } from '../../streams/streams-player';
|
|
2
3
|
import { DiscoverPanelHandler } from './discover-panel-handler.svelte';
|
|
3
4
|
import { MediaCenterLocalization } from './media-center-localization';
|
|
4
5
|
type Props = {
|
|
5
6
|
handler: DiscoverPanelHandler;
|
|
6
7
|
localization: MediaCenterLocalization;
|
|
7
8
|
on: {
|
|
8
|
-
shortVideoSelected: (shortVideo:
|
|
9
|
-
streamSelected: (
|
|
9
|
+
shortVideoSelected: (shortVideo: PostPlayerModel) => void;
|
|
10
|
+
streamSelected: (stream: StreamPlayerModel) => void;
|
|
10
11
|
};
|
|
11
12
|
};
|
|
12
13
|
declare const DiscoverPanel: import("svelte").Component<Props, {}, "">;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PostPlayerModel } from '../../posts/posts-player';
|
|
2
|
+
import type { IFeedPlayerDataProvider } from '../../ui/player/providers';
|
|
3
|
+
import type { IMediaCenterConfig } from '../config/types';
|
|
4
|
+
export declare const makePostPlayerItemsProvider: (data: {
|
|
5
|
+
config: IMediaCenterConfig;
|
|
6
|
+
categoryId?: string;
|
|
7
|
+
prefetchedItems?: PostPlayerModel[];
|
|
8
|
+
}) => IFeedPlayerDataProvider<PostPlayerModel>;
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
import { ContinuationToken } from '../../core/continuation-token';
|
|
2
2
|
import { CursorDataLoader } from '../../core/data-loaders';
|
|
3
|
-
|
|
3
|
+
import { PostType } from '../../core/enums';
|
|
4
|
+
export const makePostPlayerItemsProvider = (data) => {
|
|
4
5
|
const { config, categoryId, prefetchedItems = [] } = data;
|
|
5
6
|
const loader = new CursorDataLoader({
|
|
6
7
|
loadPage: async (continuationToken) => {
|
|
7
|
-
const result = await config.
|
|
8
|
-
filter: {
|
|
8
|
+
const result = await config.postsPlayer.getPostsCursor({
|
|
9
|
+
filter: {
|
|
10
|
+
types: [PostType.Article, PostType.Media, PostType.ShortVideo, PostType.Video],
|
|
11
|
+
categoryId,
|
|
12
|
+
excludeIds: prefetchedItems.length ? prefetchedItems.map((i) => i.id) : undefined
|
|
13
|
+
},
|
|
9
14
|
continuationToken: continuationToken.toNextChunkString(),
|
|
10
15
|
limit: 20
|
|
11
16
|
});
|
|
@@ -17,6 +22,7 @@ export const makeShortVideosProvider = (data) => {
|
|
|
17
22
|
}
|
|
18
23
|
});
|
|
19
24
|
return {
|
|
25
|
+
kind: 'feed',
|
|
20
26
|
initialData: {
|
|
21
27
|
prefetchedItems,
|
|
22
28
|
startIndex: prefetchedItems.length ? 0 : -1
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import type { IMediaCenterConfig } from '../../short-videos/short-videos-player';
|
|
2
|
-
import type {
|
|
2
|
+
import type { StreamPlayerModel } from '../../streams/streams-player';
|
|
3
|
+
import type { MediaCenterCategoryData } from './types';
|
|
3
4
|
export declare class StreamsInCategoryPanelHandler {
|
|
4
5
|
private readonly config;
|
|
5
6
|
private _activated;
|
|
6
7
|
private _state;
|
|
8
|
+
private _categoryId;
|
|
7
9
|
private _categoryName;
|
|
8
10
|
private _streams;
|
|
9
11
|
constructor(config: IMediaCenterConfig | null);
|
|
10
|
-
get streamSectionItems():
|
|
12
|
+
get streamSectionItems(): StreamPlayerModel[];
|
|
13
|
+
get categoryId(): string;
|
|
11
14
|
get categoryName(): string;
|
|
12
15
|
get activated(): boolean;
|
|
13
16
|
get active(): boolean;
|
|
@@ -2,6 +2,7 @@ export class StreamsInCategoryPanelHandler {
|
|
|
2
2
|
config;
|
|
3
3
|
_activated = $state(false);
|
|
4
4
|
_state = $state('loading');
|
|
5
|
+
_categoryId = $state.raw('');
|
|
5
6
|
_categoryName = $state.raw('');
|
|
6
7
|
_streams = $state.raw([]);
|
|
7
8
|
constructor(config) {
|
|
@@ -10,6 +11,9 @@ export class StreamsInCategoryPanelHandler {
|
|
|
10
11
|
get streamSectionItems() {
|
|
11
12
|
return this._streams;
|
|
12
13
|
}
|
|
14
|
+
get categoryId() {
|
|
15
|
+
return this._categoryId;
|
|
16
|
+
}
|
|
13
17
|
get categoryName() {
|
|
14
18
|
return this._categoryName;
|
|
15
19
|
}
|
|
@@ -31,6 +35,7 @@ export class StreamsInCategoryPanelHandler {
|
|
|
31
35
|
try {
|
|
32
36
|
const streamsResponse = await this.config.streamPlayer.getStreamsCursor({ filter: { categoryId: category.id }, limit: 5 });
|
|
33
37
|
this._categoryName = category.parentName ? `${category.parentName} - ${category.name}` : category.name;
|
|
38
|
+
this._categoryId = category.id;
|
|
34
39
|
this._streams = streamsResponse.items;
|
|
35
40
|
}
|
|
36
41
|
finally {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<script lang="ts">import { StreamCard } from '../../streams/stream-card';
|
|
2
|
-
import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte
|
|
2
|
+
import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
|
|
3
3
|
let { handler, on } = $props();
|
|
4
4
|
</script>
|
|
5
5
|
|
|
@@ -12,7 +12,7 @@ let { handler, on } = $props();
|
|
|
12
12
|
</div>
|
|
13
13
|
<div class="streams-in-category__section-content">
|
|
14
14
|
{#each handler.streamSectionItems as item (item.id)}
|
|
15
|
-
<StreamCard stream={item} on={{ click: () => on.streamSelected(item.id) }}></StreamCard>
|
|
15
|
+
<StreamCard stream={item} on={{ click: () => on.streamSelected(item.id, handler.categoryId, handler.streamSectionItems) }}></StreamCard>
|
|
16
16
|
{/each}
|
|
17
17
|
</div>
|
|
18
18
|
</div>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { StreamPlayerModel } from '../../streams/streams-player';
|
|
2
|
+
import { StreamsInCategoryPanelHandler } from './streams-in-category-panel-handler.svelte';
|
|
2
3
|
type Props = {
|
|
3
4
|
handler: StreamsInCategoryPanelHandler;
|
|
4
5
|
on: {
|
|
5
|
-
streamSelected: (
|
|
6
|
+
streamSelected: (streamId: string, categoryId: string, streams: StreamPlayerModel[]) => void;
|
|
6
7
|
};
|
|
7
8
|
};
|
|
8
9
|
declare const StreamsInCategoryPanel: import("svelte").Component<Props, {}, "">;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { IStreamsPlayerDataProvider, StreamPlayerModel } from '../../streams/streams-player/types';
|
|
2
|
+
import type { IMediaCenterConfig } from '../config/types';
|
|
3
|
+
export declare const makeStreamsPlayerDataProvider: (data: {
|
|
4
|
+
config: IMediaCenterConfig;
|
|
5
|
+
initialStreamId?: string;
|
|
6
|
+
categoryId?: string;
|
|
7
|
+
prefetchedStreams?: StreamPlayerModel[];
|
|
8
|
+
}) => IStreamsPlayerDataProvider;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ContinuationToken } from '../../core/continuation-token';
|
|
2
|
+
import { CursorDataLoader } from '../../core/data-loaders';
|
|
3
|
+
export const makeStreamsPlayerDataProvider = (data) => {
|
|
4
|
+
const { config, categoryId, prefetchedStreams: initialPrefetchedStreams = [], initialStreamId } = data;
|
|
5
|
+
const loader = new CursorDataLoader({
|
|
6
|
+
loadPage: async (continuationToken) => {
|
|
7
|
+
const result = await config.streamPlayer.getStreamsCursor({
|
|
8
|
+
filter: {
|
|
9
|
+
categoryId,
|
|
10
|
+
excludeIds: initialPrefetchedStreams.length ? initialPrefetchedStreams.map((i) => i.id) : undefined
|
|
11
|
+
},
|
|
12
|
+
continuationToken: continuationToken.toNextChunkString(),
|
|
13
|
+
limit: 20
|
|
14
|
+
});
|
|
15
|
+
const items = result.items;
|
|
16
|
+
return {
|
|
17
|
+
items: items,
|
|
18
|
+
continuationToken: ContinuationToken.fromPayload(result.continuationToken)
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
let prefetchedStreams = initialPrefetchedStreams;
|
|
23
|
+
if (initialStreamId) {
|
|
24
|
+
const targetStream = prefetchedStreams.find((stream) => stream.id === initialStreamId);
|
|
25
|
+
if (targetStream) {
|
|
26
|
+
prefetchedStreams = [targetStream, ...prefetchedStreams.filter((stream) => stream.id !== initialStreamId)];
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
initialData: {
|
|
31
|
+
prefetchedStreams
|
|
32
|
+
},
|
|
33
|
+
loadMoreStreams: loader.loadMore,
|
|
34
|
+
getStreamPages: config.streamPlayer.getStreamPages
|
|
35
|
+
};
|
|
36
|
+
};
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
export type MediaCenterMode = '
|
|
2
|
-
export type MediaCenterStreamModel = {
|
|
3
|
-
id: string;
|
|
4
|
-
title: string;
|
|
5
|
-
subTitle: string | null;
|
|
6
|
-
cover: string | null;
|
|
7
|
-
};
|
|
1
|
+
export type MediaCenterMode = 'stream' | 'posts';
|
|
8
2
|
export type MediaCenterCategoryData = {
|
|
9
3
|
id: string;
|
|
10
4
|
name: string;
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
};
|
|
10
10
|
import { IconColor } from '../../ui/icon';
|
|
11
11
|
import { MediaVolumeManager } from '../../ui/media-playback';
|
|
12
|
-
import { PlayerButton, PlayerButtonsGroup } from '../../ui/player
|
|
12
|
+
import { PlayerButton, PlayerButtonsGroup } from '../../ui/player/button';
|
|
13
13
|
import IconHeartFilled from '@fluentui/svg-icons/icons/heart_20_filled.svg?raw';
|
|
14
14
|
import IconHeart from '@fluentui/svg-icons/icons/heart_28_regular.svg?raw';
|
|
15
15
|
import IconShare from '@fluentui/svg-icons/icons/share_28_regular.svg?raw';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getPostsCursor } from './posts-loader';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { getPostsCursor } from './posts-loader';
|